From 98965f8a754c9c563d0e27031e88a0c42d3d07f9 Mon Sep 17 00:00:00 2001 From: Tamal Saha Date: Mon, 20 Apr 2026 12:15:40 +0600 Subject: [PATCH 01/19] Switch to hugo (#118) Signed-off-by: Tamal Saha --- .eslintrc | 6 - .eslintrc-auto-import.json | 68 - .firebaserc | 22 - .github/dependabot.yml | 7 - .github/workflows/ci.yml | 116 +- .github/workflows/preview-website.yml | 62 +- .github/workflows/release-tracker.yml | 1 - .github/workflows/release.yml | 99 - .gitignore | 33 +- .stylelintrc | 3 - .vitepress/config.ts | 24 - .vitepress/header-links.ts | 75 - .vitepress/theme/index.ts | 14 - .vscode/extensions.json | 11 - .vscode/settings.json | 13 - DCO | 36 + LICENSE | 201 + auto-imports.d.ts | 8 - cspell.json | 22 - docs/platform/README.md | 32 + docs/platform/_index.md | 10 + .../welcome => docs/platform}/contributing.md | 12 +- docs/platform/guides/README.md | 32 + docs/platform/guides/_index.md | 10 + .../guides/account-management/_index.md | 9 +- .../account-management/access-tokens.md | 19 +- .../account-management/delete-account.md | 15 +- .../account-management/images/Branding.png | Bin .../account-management/images/OAuth1.png | Bin .../account-management/images/OAuth2.png | Bin .../account-management/images/OAuth3.png | Bin .../account-management/images/OAuth4.png | Bin .../images/authentication-sources.png | Bin .../images/client-org-1.png | Bin .../images/client-org-2.png | Bin .../images/client-org-3.png | Bin .../images/client-org-4.png | Bin .../images/client-org-5.png | Bin .../images/credentials/Hetzner.png | Bin .../images/credentials/Scaleway.png | Bin .../images/credentials/azureStorage.png | Bin .../images/credentials/cloudflareStorage.png | Bin .../images/credentials/vultr.png | Bin .../images/delete-account.png | Bin .../images/external-authentication.png | Bin .../images/manage-profile-1.png | Bin .../images/manage-profile-2.png | Bin .../images/orgs-members-1.png | Bin .../images/orgs-members-2.png | Bin .../account-management/images/security-1.png | Bin .../account-management/images/security-2.png | Bin .../account-management/images/security-3.png | Bin .../images/sign-up-config-1.png | Bin .../images/sign-up-config-2.png | Bin .../images/site-admin-dashboard.png | Bin .../images/site-admin-deleted-account-1.png | Bin .../images/site-admin-deleted-account-2.png | Bin .../images/site-admin-organizations-1.png | Bin .../images/site-admin-organizations-2.png | Bin .../images/site-admin-user-account-1.png | Bin .../images/site-admin-user-account-2.png | Bin .../account-management/images/token-1.png | Bin .../account-management/images/token-2.png | Bin .../account-management/images/token-3.png | Bin .../images/upgrade-version-1.png | Bin .../images/upgrade-version-2.png | Bin .../images/upgrade-version-3.png | Bin .../images/upgrade-version-4.png | Bin .../account-management/kubernetes/_index.md | 8 +- .../kubernetes/credentials.md | 20 +- .../kubernetes}/images/aws-cred.png | Bin .../kubernetes}/images/do-cred.png | Bin .../kubernetes}/images/gcp-oauth.png | Bin .../kubernetes}/images/linode-cred.png | Bin .../kubernetes}/images/rancher-cred.png | Bin .../account-management/manage-profile.md | 22 +- .../account-management/manage-security.md | 19 +- .../guides/account-management/oauth2-apps.md | 21 +- .../guides/account-management/orgs-members.md | 17 +- .../site-administration/_index.md | 8 +- .../site-administration/ace-upgrade.md | 8 +- .../authentication-sources.md | 8 +- .../site-administration/branding.md | 8 +- .../site-administration/client-org.md | 8 +- .../site-administration/dashboard.md | 8 +- .../site-administration/delete-account.md | 8 +- .../external-authentication-sources.md | 8 +- .../site-administration/organizations.md | 8 +- .../sign-up-configuration.md | 8 +- .../site-administration/user-account.md | 8 +- .../guides/billing-and-usage-guide/_index.md | 9 +- .../cost-management.md | 13 +- .../dbaas-client-billing.md | 19 +- .../images/create-token-options.png | Bin .../images/create-token-ui-navigation.png | Bin .../images/created-token-result.png | Bin .../usage-section-billable-usage-home.png | Bin .../images/usage-section-home.png | Bin .../usage-section-prod-nonprod-usage-home.png | Bin .../images/usage-section-product-dropdown.png | Bin .../images/usage-section-select-month.png | Bin .../usage-section-usage-type-dropdown.png | Bin .../images/usage-section-view-by-dropdown.png | Bin .../billing-and-usage-guide/overview.md | 32 +- .../guides/cluster-management/_index.md | 12 + .../cluster-management/add-cluster/_index.md | 8 +- .../add-cluster/create-vendor-managed.md | 8 +- .../add-cluster/import-rancher-cluster.md | 8 +- .../add-cluster/import-vendor-managed.md | 13 +- .../add-cluster/overview.md | 8 +- .../add-cluster/self-managed/_index.md | 11 + .../self-managed/import-private.md | 13 +- .../add-cluster/self-managed/import-public.md | 13 +- .../self-managed/import-self-managed.md | 8 +- .../cluster-management/cluster-features.md | 36 +- .../cluster-management/cluster-helm-charts.md | 8 +- .../cluster-management/cluster-overview.md | 22 +- .../cluster-management/cluster-presets.md | 40 +- .../cluster-management/cluster-sidebar.md | 18 +- .../cluster-management/cluster-workload.md | 13 +- .../constraints-violations.md | 14 + .../cluster-management/hub-ui/_index.md | 9 +- .../hub-ui/cluster-and-clusterset.md | 13 +- .../cluster-management/hub-ui/create.md | 13 +- .../cluster-management/hub-ui/introduction.md | 13 +- .../hub-ui/license-management.md | 13 +- .../cluster-management/hub-ui/permission.md | 13 +- .../guides/cluster-management/hub-ui/spoke.md | 13 +- .../cluster-management/hub-ui/upgrade.md | 13 +- .../cluster-features/feature-databases1.png | Bin .../cluster-features/feature-databases2.png | Bin .../cluster-features/feature-databases3.png | Bin .../cluster-features/feature-databases4.png | Bin .../cluster-features/feature-databases5.png | Bin .../cluster-features/feature-databases6.png | Bin .../features-after-enable-some-features.png | Bin .../cluster-features/features-backup1.png | Bin .../cluster-features/features-backup2.png | Bin .../cluster-features/features-backup3.png | Bin .../cluster-features/features-backup4.png | Bin .../cluster-features/features-backup5.png | Bin .../cluster-features/features-backup6.png | Bin .../images/cluster-features/features.png | Bin .../cluster-overview/cluster-nodes-1.png | Bin .../cluster-overview/cluster-nodes-2.png | Bin .../cluster-overview/cluster-nodes-3.png | Bin .../cluster-overview/cluster-nodes-4.png | Bin .../cluster-overview/cluster-nodes-edit-1.png | Bin .../cluster-overview/cluster-nodes-edit-2.png | Bin .../cluster-overview/cluster-nodes-edit-3.png | Bin .../cluster-overview/cluster-overview-1.png | Bin .../cluster-overview/cluster-overview-2.png | Bin .../cluster-overview/cluster-overview-3.png | Bin .../cluster-overview/cluster-overview-4.png | Bin .../db-preset-edit-values1.png | Bin .../db-preset-edit-values2.png | Bin .../db-preset-edit-values3.png | Bin .../db-preset-edit-values4.png | Bin .../db-preset-edit-values5.png | Bin .../db-preset-edit-values6.png | Bin .../db-preset-edit-values7.png | Bin .../db-preset-edit-values8.png | Bin .../cluster-presets/present-basic-info.png | Bin .../images/cluster-presets/preset-enable.png | Bin .../preset-extend-to-namespace1.png | Bin .../preset-extend-to-namespace2.png | Bin .../images/cluster-presets/preset.png | Bin .../presets-after-feature-enable.png | Bin .../stash-preset-edit-values1.png | Bin .../stash-preset-edit-values2.png | Bin .../images/cluster-sidebar/sidebar-1.png | Bin .../cluster-sidebar/sidebar-after-update.png | Bin .../cluster-sidebar/sidebar-before-update.png | Bin .../cluster-sidebar/sidebar-search-menu.png | Bin .../cluster-sidebar/sidebar-updating.png | Bin .../cluster_and_clusterset/add_cluster_1.png | Bin .../cluster_and_clusterset/add_cluster_2.png | Bin .../cluster_and_clusterset/clusterset.png | Bin .../clusterset_feature_1.png | Bin .../clusterset_feature_2.png | Bin .../cluster_and_clusterset/unaligned.png | Bin .../cluster_and_clusterset/unaligned_2.png | Bin .../images/import/cluster-details.png | Bin .../images/import/cluster-profile.png | Bin .../images/import/deploy.png | Bin .../images/import/feature-set.png | Bin .../images/import/select-cluster.png | Bin .../images/introduction/hub-spoke-model.png | Bin .../images/license/add_license.png | Bin .../images/license/contract.png | Bin .../images/license/contract_1.png | Bin .../images/license/contract_2.png | Bin .../images/license/license_modal.png | Bin .../images/permission/add_member.png | Bin .../images/permission/create_team.png | Bin .../images/permission/go_to_platform.png | Bin .../images/permission/grant_permission.png | Bin .../images/permission/permission.png | Bin .../project-quota/project-quota-create1.png | Bin .../project-quota/project-quota-create2.png | Bin .../project-quota/project-quota-create3.png | Bin .../project-quota/project-quota-create4.png | Bin .../project-quota/project-quota-details.png | Bin .../project-quota/project-quota-edit.png | Bin .../images/project-quota/project-quota.png | Bin .../images/spoke/accept.png | Bin .../images/spoke/featureset.png | Bin .../images/spoke/homepage.png | Bin .../images/spoke/import_spoke.png | Bin .../images/spoke/request.png | Bin .../images/spoke/select.png | Bin .../cluster-management/images/spoke/spoke.png | Bin .../images/upgrade/upgrade_1.png | Bin .../images/upgrade/upgrade_2.png | Bin .../images/upgrade/upgrade_3.png | Bin .../cluster-management/project-quota.md | 22 +- .../cluster-management/remove-cluster.md | 8 +- .../cluster-management/security-report.md | 8 +- .../guides/database-management/_index.md | 9 +- .../backup-configuration.md | 31 +- .../database-management/backup-storage.md | 23 +- .../guides/database-management/backup.md | 25 +- .../contraint-violations.md | 8 +- .../database-management/create-database.md | 50 +- .../database-usage-insight.md | 16 +- .../database-management/delete-database.md | 16 +- .../database-management/expose-via-gateway.md | 15 +- .../images/auto-scaling-nodetopology.png | Bin .../images/auto-scaling-readiness.png | Bin .../images/auto-scaling-standalone.png | Bin .../images/auto-scaling.png | Bin .../images/backup-config-blueprint.png | Bin .../images/backup-config-create.png | Bin .../images/backup-config-delete.png | Bin .../images/backup-config-modify.png | Bin .../images/backup-config-submit.png | Bin .../images/backup-config.png | Bin .../images/backup/config-db-overview.png | Bin .../images/backup/config-db-repository.png | Bin .../images/backup/config-dbs-overview.png | Bin .../images/backup/config-label-annotation.png | Bin .../images/backup/config-name-namespace.png | Bin .../images/backup/config-session-task.png | Bin .../images/backup/config-sessions.png | Bin .../images/backup/config-target.png | Bin .../images/backup/configuration-overview.png | Bin .../images/backup/recent-backup-create.png | Bin .../images/backup/recent-backup-overview.png | Bin .../images/backup/recent-create-form.png | Bin .../images/backup/recent-db-overview.png | Bin .../images/backup/repository-app-ref.png | Bin .../backup/repository-create-overview.png | Bin .../images/backup/repository-db-overview.png | Bin .../images/backup/repository-db-snapshot.png | Bin .../backup/repository-label-annotation.png | Bin .../images/backup/repository-overview.png | Bin .../images/backup/repository-ref-secret.png | Bin .../images/backup/restore-config.png | Bin .../images/backup/restore-create-overview.png | Bin .../images/backup/restore-overview.png | Bin .../images/backup/restore-target.png | Bin .../images/backup/snapshot-delete.png | Bin .../images/backup/snapshot-operation-view.png | Bin .../images/backup/snapshot-overview.png | Bin .../images/backup/storage-create-backend.png | Bin .../images/backup/storage-create-overview.png | Bin .../images/backup/storage-db-overview.png | Bin .../backup/storage-label-annotation.png | Bin .../images/backup/storage-overview.png | Bin .../images/db-create/Additional-option.png | Bin .../db-create/advance-lavel-annotation.png | Bin .../images/db-create/auth-creds.png | Bin .../images/db-create/config-server.png | Bin .../images/db-create/create-overview-page.png | Bin .../images/db-create/db-type-select.png | Bin .../images/db-create/deletion-policy.png | Bin .../images/db-create/machine-profile.png | Bin .../images/db-create/mongos-mode.png | Bin .../db-create/name-namespace-select.png | Bin .../images/db-create/overview-create.png | Bin .../db-create/point-in-time-recovery.png | Bin .../images/db-create/replicaset-mode.png | Bin .../images/db-create/shard-mode.png | Bin .../images/db-create/shard-nodes.png | Bin .../images/db-create/storage-class.png | Bin .../images/db-insights.png | Bin .../images/db-overview.png | Bin .../images/db-users-kubevault.png | Bin .../database-management/images/db-users.png | Bin .../images/delete-modal.png | Bin .../images/delete-overview-modal.png | Bin .../images/delete-overview.png | Bin .../database-management/images/delete.png | Bin .../images/expose-via-gateway.png | Bin .../images/horizontal-scale-form.png | Bin .../images/instant-backup-form.png | Bin .../images/instant-backup.png | Bin .../images/monitoring-env-config.png | Bin .../images/monitoring-env-secret.png | Bin .../images/monitoring-exporter.png | Bin .../images/monitoring-scrapper.png | Bin .../database-management/images/monitoring.png | Bin .../images/motoring-prometheus.png | Bin .../images/motoring-service-monitor.png | Bin .../images/reconfigure-apply.png | Bin .../images/reconfigure-create-secret.png | Bin .../images/reconfigure-new-secret.png | Bin .../images/reconfigure-remove.png | Bin .../images/reconfigure.png | Bin .../images/restart-preview.png | Bin .../images/restart-submit.png | Bin .../database-management/images/restart.png | Bin .../images/restore-config.png | Bin .../database-management/images/restore.png | Bin .../images/storage-autoscaling.png | Bin .../images/storage-scale-readiness.png | Bin .../images/storage-scale-standalone.png | Bin .../images/storage-scale-volume.png | Bin .../images/storage-scale.png | Bin .../images/tls-certificate-details.png | Bin .../images/tls-certificate.png | Bin .../images/tls-operation.png | Bin .../guides/database-management/images/tls.png | Bin .../images/update-version-preview.png | Bin .../images/update-version-submit.png | Bin .../images/update-version.png | Bin .../images/vertical-exporter.png | Bin .../images/vertical-machine-profile.png | Bin .../images/vertical-machine-profile2.png | Bin .../images/vertical-node-selection.png | Bin .../images/vertical-scaling.png | Bin .../instant-backup-restore.md | 19 +- .../manage-recommendations.md | 14 + .../guides/database-management/monitoring.md | 27 +- .../database-management/recent-backups.md | 21 +- .../reconfigure-database.md | 18 +- .../guides/database-management/repository.md | 27 +- .../database-management/restart-database.md | 14 +- .../guides/database-management/restore.md | 21 +- .../database-management/scaling-storage.md | 23 +- .../guides/database-management/scaling.md | 33 +- .../database-management/security-report.md | 8 +- .../guides/database-management/snapshot.md | 19 +- .../guides/database-management/tls.md | 21 +- .../database-management/upgrade-version.md | 19 +- .../platform}/guides/get-started/_index.md | 9 +- .../guides/get-started/add-cluster.md | 14 +- .../guides/get-started/add-credential.md | 14 +- .../guides/get-started/architecture.md | 10 +- .../guides/get-started/enable-features.md | 13 +- .../get-started/images/architecture.png | Bin .../guides/get-started/images/selfhost.png | Bin .../guides/get-started/manage-databases.md | 14 + .../guides/get-started/register-login.md | 13 +- .../guides/get-started/requirements.md | 8 +- .../platform}/guides/integrations/_index.md | 9 +- .../guides/integrations/images/ace-url.png | Bin .../images/acer-proxy-installer.png | Bin .../integrations/images/create-repo.png | Bin .../guides/integrations/images/extensions.png | Bin .../integrations/images/install-ext.png | Bin .../integrations/images/kubedb-in-list.png | Bin .../integrations/images/kubedb-in-rancher.png | Bin .../integrations/images/manage-repo.png | Bin .../images/organization-create.png | Bin ...ganization-settings-generate-installer.png | Bin .../organization-settings-sync-users.png | Bin .../images/organization-settings.png | Bin .../guides/integrations/images/repo-info.png | Bin .../guides/integrations/images/three-dot.png | Bin .../guides/integrations/rancher-extension.md | 46 +- .../guides/license-management/_index.md | 9 +- .../guides/license-management/contract.md | 29 +- .../images/add-cluster-button-rectangle.png | Bin .../images/add-cluster-confirm.png | Bin .../images/add-cluster-information.png | Bin .../images/add-cluster-preview.png | Bin .../license-management/images/audits.png | Bin .../images/cluster-delete.png | Bin .../images/contract-details.png | Bin .../images/download-offline-license.png | Bin .../images/home-billing-console.png | Bin .../license-proxy-apiservice-yaml-status.png | Bin .../images/license-proxy-server-svc-check.png | Bin .../images/license-status-free-contract.png | Bin .../images/license-status-paid-contract.png | Bin .../offline-installer-cluster-selection.png | Bin .../offline-installer-contract-selection.png | Bin .../images/offline-installer-scripts.png | Bin .../images/online-installer-scripts.png | Bin .../images/online-installer.png | Bin .../license-management/license-proxyserver.md | 27 +- .../guides/license-management/overview.md | 20 +- .../license-management/troubleshoots.md | 15 +- .../platform/selfhost-setup/README.md | 21 +- docs/platform/selfhost-setup/_index.md | 10 + .../selfhost-setup/images/ace-dashboard.png | Bin .../selfhost-setup/images/ace-status.png | Bin .../selfhost-setup/images/admin-setting.png | Bin .../selfhost-setup/images/awsStep1.png | Bin .../selfhost-setup/images/awsStep2.png | Bin .../selfhost-setup/images/awsStep3.png | Bin .../selfhost-setup/images/awsStep4.png | Bin .../selfhost-setup/images/awsStep5.png | Bin .../selfhost-setup/images/awsStep7.png | Bin .../selfhost-setup/images/azureStep1.png | Bin .../selfhost-setup/images/azureStep2.png | Bin .../selfhost-setup/images/azureStep3.png | Bin .../selfhost-setup/images/azureStep4.png | Bin .../selfhost-setup/images/azureStep5.png | Bin .../selfhost-setup/images/branding.png | Bin .../images/deployment-progress.png | Bin .../images/domain-whitelisting.png | Bin .../selfhost-setup/images/features.png | Bin .../selfhost-setup/images/ingress-gateway.png | Bin .../selfhost-setup/images}/installer-home.png | Bin .../images/managed-resources.png | Bin .../platform}/selfhost-setup/images/nats.png | Bin .../selfhost-setup/images/policy-1.png | Bin .../selfhost-setup/images/policy-10.png | Bin .../selfhost-setup/images/policy-2.png | Bin .../selfhost-setup/images/policy-3.png | Bin .../selfhost-setup/images/policy-4.png | Bin .../selfhost-setup/images/policy-5.png | Bin .../selfhost-setup/images/policy-7.png | Bin .../selfhost-setup/images/policy-8.png | Bin .../selfhost-setup/images/policy-9.png | Bin .../selfhost-setup/images/resource-limit.png | Bin .../images/selfhost-deployment-option.png | Bin .../selfhost-setup/images/tenant.png | Bin .../platform/selfhost-setup/install/_index.md | 11 + .../selfhost-setup/install/aws-marketplace.md | 8 +- .../install/azure-marketplace.md | 8 +- .../selfhost-setup/install/cloud-demo.md | 8 +- .../selfhost-setup/install/k8s-app-demo.md | 8 +- .../selfhost-setup/install/onprem-demo.md | 8 +- .../selfhost-setup/install/openshift-demo.md | 8 +- .../install/selfhosted-production.md | 8 +- .../selfhost-setup/install/troubleshoot.md | 12 +- docs/platform/selfhost-setup/uninstall.md | 13 + {src/en/welcome => docs/platform}/support.md | 12 +- firebase.json | 17 - hack/scripts/open-pr.sh | 42 + hack/scripts/update-release-tracker.sh | 72 + index.json | 0 package-lock.json | 11905 ---------------- package.json | 57 - shims-vue.d.ts | 8 - src/_home-account.md | 10 - src/_home-billing.md | 10 - src/_home-cluster.md | 10 - src/_home-database.md | 10 - src/_home-hub-ui.md | 10 - src/_home-integrations.md | 10 - src/_home-license.md | 10 - src/_home-start.md | 10 - src/auto-imports.d.ts | 9 - src/en/guides/_index.md | 7 - src/en/guides/cluster-management/_index.md | 11 - .../add-cluster/self-managed/_index.md | 16 - .../constraints-violations.md | 19 - .../manage-recommendations.md | 19 - src/en/guides/get-started/manage-databases.md | 19 - src/en/overview.md | 14 - src/en/selfhost-setup/install/_index.md | 8 - src/en/selfhost-setup/uninstall.md | 12 - src/en/welcome/index.md | 19 - src/index.md | 14 - src/public/images/404/404-bg.png | Bin 72111 -> 0 bytes src/public/images/404/man.png | Bin 64398 -> 0 bytes src/public/images/pattern-squire.png | Bin 461 -> 0 bytes tsconfig.json | 20 - 472 files changed, 1296 insertions(+), 13553 deletions(-) delete mode 100644 .eslintrc delete mode 100644 .eslintrc-auto-import.json delete mode 100644 .firebaserc delete mode 100644 .github/dependabot.yml delete mode 100644 .github/workflows/release.yml delete mode 100644 .stylelintrc delete mode 100644 .vitepress/config.ts delete mode 100644 .vitepress/header-links.ts delete mode 100644 .vitepress/theme/index.ts delete mode 100644 .vscode/extensions.json delete mode 100644 .vscode/settings.json create mode 100644 DCO create mode 100644 LICENSE delete mode 100644 auto-imports.d.ts delete mode 100644 cspell.json create mode 100644 docs/platform/README.md create mode 100644 docs/platform/_index.md rename {src/en/welcome => docs/platform}/contributing.md (79%) create mode 100644 docs/platform/guides/README.md create mode 100644 docs/platform/guides/_index.md rename {src/en => docs/platform}/guides/account-management/_index.md (64%) rename {src/en => docs/platform}/guides/account-management/access-tokens.md (79%) rename {src/en => docs/platform}/guides/account-management/delete-account.md (85%) rename {src/en => docs/platform}/guides/account-management/images/Branding.png (100%) rename {src/en => docs/platform}/guides/account-management/images/OAuth1.png (100%) rename {src/en => docs/platform}/guides/account-management/images/OAuth2.png (100%) rename {src/en => docs/platform}/guides/account-management/images/OAuth3.png (100%) rename {src/en => docs/platform}/guides/account-management/images/OAuth4.png (100%) rename {src/en => docs/platform}/guides/account-management/images/authentication-sources.png (100%) rename {src/en => docs/platform}/guides/account-management/images/client-org-1.png (100%) rename {src/en => docs/platform}/guides/account-management/images/client-org-2.png (100%) rename {src/en => docs/platform}/guides/account-management/images/client-org-3.png (100%) rename {src/en => docs/platform}/guides/account-management/images/client-org-4.png (100%) rename {src/en => docs/platform}/guides/account-management/images/client-org-5.png (100%) rename {src/en => docs/platform}/guides/account-management/images/credentials/Hetzner.png (100%) rename {src/en => docs/platform}/guides/account-management/images/credentials/Scaleway.png (100%) rename {src/en => docs/platform}/guides/account-management/images/credentials/azureStorage.png (100%) rename {src/en => docs/platform}/guides/account-management/images/credentials/cloudflareStorage.png (100%) rename {src/en => docs/platform}/guides/account-management/images/credentials/vultr.png (100%) rename {src/en => docs/platform}/guides/account-management/images/delete-account.png (100%) rename {src/en => docs/platform}/guides/account-management/images/external-authentication.png (100%) rename {src/en => docs/platform}/guides/account-management/images/manage-profile-1.png (100%) rename {src/en => docs/platform}/guides/account-management/images/manage-profile-2.png (100%) rename {src/en => docs/platform}/guides/account-management/images/orgs-members-1.png (100%) rename {src/en => docs/platform}/guides/account-management/images/orgs-members-2.png (100%) rename {src/en => docs/platform}/guides/account-management/images/security-1.png (100%) rename {src/en => docs/platform}/guides/account-management/images/security-2.png (100%) rename {src/en => docs/platform}/guides/account-management/images/security-3.png (100%) rename {src/en => docs/platform}/guides/account-management/images/sign-up-config-1.png (100%) rename {src/en => docs/platform}/guides/account-management/images/sign-up-config-2.png (100%) rename {src/en => docs/platform}/guides/account-management/images/site-admin-dashboard.png (100%) rename {src/en => docs/platform}/guides/account-management/images/site-admin-deleted-account-1.png (100%) rename {src/en => docs/platform}/guides/account-management/images/site-admin-deleted-account-2.png (100%) rename {src/en => docs/platform}/guides/account-management/images/site-admin-organizations-1.png (100%) rename {src/en => docs/platform}/guides/account-management/images/site-admin-organizations-2.png (100%) rename {src/en => docs/platform}/guides/account-management/images/site-admin-user-account-1.png (100%) rename {src/en => docs/platform}/guides/account-management/images/site-admin-user-account-2.png (100%) rename {src/en => docs/platform}/guides/account-management/images/token-1.png (100%) rename {src/en => docs/platform}/guides/account-management/images/token-2.png (100%) rename {src/en => docs/platform}/guides/account-management/images/token-3.png (100%) rename {src/en => docs/platform}/guides/account-management/images/upgrade-version-1.png (100%) rename {src/en => docs/platform}/guides/account-management/images/upgrade-version-2.png (100%) rename {src/en => docs/platform}/guides/account-management/images/upgrade-version-3.png (100%) rename {src/en => docs/platform}/guides/account-management/images/upgrade-version-4.png (100%) rename src/en/guides/account-management/kubernetes/index.md => docs/platform/guides/account-management/kubernetes/_index.md (58%) rename {src/en => docs/platform}/guides/account-management/kubernetes/credentials.md (97%) rename {src/public => docs/platform/guides/account-management/kubernetes}/images/aws-cred.png (100%) rename {src/public => docs/platform/guides/account-management/kubernetes}/images/do-cred.png (100%) rename {src/public => docs/platform/guides/account-management/kubernetes}/images/gcp-oauth.png (100%) rename {src/public => docs/platform/guides/account-management/kubernetes}/images/linode-cred.png (100%) rename {src/public => docs/platform/guides/account-management/kubernetes}/images/rancher-cred.png (100%) rename {src/en => docs/platform}/guides/account-management/manage-profile.md (71%) rename {src/en => docs/platform}/guides/account-management/manage-security.md (80%) rename {src/en => docs/platform}/guides/account-management/oauth2-apps.md (82%) rename {src/en => docs/platform}/guides/account-management/orgs-members.md (80%) rename src/en/guides/account-management/site-administration/index.md => docs/platform/guides/account-management/site-administration/_index.md (59%) rename {src/en => docs/platform}/guides/account-management/site-administration/ace-upgrade.md (95%) rename {src/en => docs/platform}/guides/account-management/site-administration/authentication-sources.md (95%) rename {src/en => docs/platform}/guides/account-management/site-administration/branding.md (91%) rename {src/en => docs/platform}/guides/account-management/site-administration/client-org.md (97%) rename {src/en => docs/platform}/guides/account-management/site-administration/dashboard.md (89%) rename {src/en => docs/platform}/guides/account-management/site-administration/delete-account.md (91%) rename {src/en => docs/platform}/guides/account-management/site-administration/external-authentication-sources.md (93%) rename {src/en => docs/platform}/guides/account-management/site-administration/organizations.md (94%) rename {src/en => docs/platform}/guides/account-management/site-administration/sign-up-configuration.md (92%) rename {src/en => docs/platform}/guides/account-management/site-administration/user-account.md (93%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/_index.md (72%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/cost-management.md (95%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/dbaas-client-billing.md (95%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/images/create-token-options.png (100%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/images/create-token-ui-navigation.png (100%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/images/created-token-result.png (100%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/images/usage-section-billable-usage-home.png (100%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/images/usage-section-home.png (100%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/images/usage-section-prod-nonprod-usage-home.png (100%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/images/usage-section-product-dropdown.png (100%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/images/usage-section-select-month.png (100%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/images/usage-section-usage-type-dropdown.png (100%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/images/usage-section-view-by-dropdown.png (100%) rename {src/en => docs/platform}/guides/billing-and-usage-guide/overview.md (82%) create mode 100644 docs/platform/guides/cluster-management/_index.md rename {src/en => docs/platform}/guides/cluster-management/add-cluster/_index.md (58%) rename {src/en => docs/platform}/guides/cluster-management/add-cluster/create-vendor-managed.md (65%) rename {src/en => docs/platform}/guides/cluster-management/add-cluster/import-rancher-cluster.md (94%) rename {src/en => docs/platform}/guides/cluster-management/add-cluster/import-vendor-managed.md (88%) rename {src/en => docs/platform}/guides/cluster-management/add-cluster/overview.md (93%) create mode 100644 docs/platform/guides/cluster-management/add-cluster/self-managed/_index.md rename {src/en => docs/platform}/guides/cluster-management/add-cluster/self-managed/import-private.md (87%) rename {src/en => docs/platform}/guides/cluster-management/add-cluster/self-managed/import-public.md (86%) rename {src/en => docs/platform}/guides/cluster-management/add-cluster/self-managed/import-self-managed.md (89%) rename {src/en => docs/platform}/guides/cluster-management/cluster-features.md (89%) rename {src/en => docs/platform}/guides/cluster-management/cluster-helm-charts.md (94%) rename {src/en => docs/platform}/guides/cluster-management/cluster-overview.md (91%) rename {src/en => docs/platform}/guides/cluster-management/cluster-presets.md (83%) rename {src/en => docs/platform}/guides/cluster-management/cluster-sidebar.md (89%) rename {src/en => docs/platform}/guides/cluster-management/cluster-workload.md (92%) create mode 100644 docs/platform/guides/cluster-management/constraints-violations.md rename {src/en => docs/platform}/guides/cluster-management/hub-ui/_index.md (66%) rename {src/en => docs/platform}/guides/cluster-management/hub-ui/cluster-and-clusterset.md (89%) rename {src/en => docs/platform}/guides/cluster-management/hub-ui/create.md (85%) rename {src/en => docs/platform}/guides/cluster-management/hub-ui/introduction.md (88%) rename {src/en => docs/platform}/guides/cluster-management/hub-ui/license-management.md (78%) rename {src/en => docs/platform}/guides/cluster-management/hub-ui/permission.md (87%) rename {src/en => docs/platform}/guides/cluster-management/hub-ui/spoke.md (87%) rename {src/en => docs/platform}/guides/cluster-management/hub-ui/upgrade.md (79%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/feature-databases1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/feature-databases2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/feature-databases3.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/feature-databases4.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/feature-databases5.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/feature-databases6.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/features-after-enable-some-features.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/features-backup1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/features-backup2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/features-backup3.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/features-backup4.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/features-backup5.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/features-backup6.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-features/features.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-overview/cluster-nodes-1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-overview/cluster-nodes-2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-overview/cluster-nodes-3.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-overview/cluster-nodes-4.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-3.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-overview/cluster-overview-1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-overview/cluster-overview-2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-overview/cluster-overview-3.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-overview/cluster-overview-4.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/db-preset-edit-values1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/db-preset-edit-values2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/db-preset-edit-values3.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/db-preset-edit-values4.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/db-preset-edit-values5.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/db-preset-edit-values6.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/db-preset-edit-values7.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/db-preset-edit-values8.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/present-basic-info.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/preset-enable.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/preset-extend-to-namespace1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/preset-extend-to-namespace2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/preset.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/presets-after-feature-enable.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/stash-preset-edit-values1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-presets/stash-preset-edit-values2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-sidebar/sidebar-1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-sidebar/sidebar-after-update.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-sidebar/sidebar-before-update.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-sidebar/sidebar-search-menu.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster-sidebar/sidebar-updating.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster_and_clusterset/add_cluster_1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster_and_clusterset/add_cluster_2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster_and_clusterset/clusterset.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster_and_clusterset/clusterset_feature_1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster_and_clusterset/clusterset_feature_2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster_and_clusterset/unaligned.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/cluster_and_clusterset/unaligned_2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/import/cluster-details.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/import/cluster-profile.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/import/deploy.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/import/feature-set.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/import/select-cluster.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/introduction/hub-spoke-model.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/license/add_license.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/license/contract.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/license/contract_1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/license/contract_2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/license/license_modal.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/permission/add_member.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/permission/create_team.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/permission/go_to_platform.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/permission/grant_permission.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/permission/permission.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/project-quota/project-quota-create1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/project-quota/project-quota-create2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/project-quota/project-quota-create3.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/project-quota/project-quota-create4.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/project-quota/project-quota-details.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/project-quota/project-quota-edit.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/project-quota/project-quota.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/spoke/accept.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/spoke/featureset.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/spoke/homepage.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/spoke/import_spoke.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/spoke/request.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/spoke/select.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/spoke/spoke.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/upgrade/upgrade_1.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/upgrade/upgrade_2.png (100%) rename {src/en => docs/platform}/guides/cluster-management/images/upgrade/upgrade_3.png (100%) rename {src/en => docs/platform}/guides/cluster-management/project-quota.md (85%) rename {src/en => docs/platform}/guides/cluster-management/remove-cluster.md (92%) rename {src/en => docs/platform}/guides/cluster-management/security-report.md (60%) rename {src/en => docs/platform}/guides/database-management/_index.md (65%) rename {src/en => docs/platform}/guides/database-management/backup-configuration.md (93%) rename {src/en => docs/platform}/guides/database-management/backup-storage.md (93%) rename {src/en => docs/platform}/guides/database-management/backup.md (86%) rename {src/en => docs/platform}/guides/database-management/contraint-violations.md (63%) rename {src/en => docs/platform}/guides/database-management/create-database.md (89%) rename {src/en => docs/platform}/guides/database-management/database-usage-insight.md (96%) rename {src/en => docs/platform}/guides/database-management/delete-database.md (89%) rename {src/en => docs/platform}/guides/database-management/expose-via-gateway.md (87%) rename {src/en => docs/platform}/guides/database-management/images/auto-scaling-nodetopology.png (100%) rename {src/en => docs/platform}/guides/database-management/images/auto-scaling-readiness.png (100%) rename {src/en => docs/platform}/guides/database-management/images/auto-scaling-standalone.png (100%) rename {src/en => docs/platform}/guides/database-management/images/auto-scaling.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup-config-blueprint.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup-config-create.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup-config-delete.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup-config-modify.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup-config-submit.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup-config.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/config-db-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/config-db-repository.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/config-dbs-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/config-label-annotation.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/config-name-namespace.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/config-session-task.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/config-sessions.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/config-target.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/configuration-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/recent-backup-create.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/recent-backup-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/recent-create-form.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/recent-db-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/repository-app-ref.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/repository-create-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/repository-db-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/repository-db-snapshot.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/repository-label-annotation.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/repository-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/repository-ref-secret.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/restore-config.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/restore-create-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/restore-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/restore-target.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/snapshot-delete.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/snapshot-operation-view.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/snapshot-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/storage-create-backend.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/storage-create-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/storage-db-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/storage-label-annotation.png (100%) rename {src/en => docs/platform}/guides/database-management/images/backup/storage-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/Additional-option.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/advance-lavel-annotation.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/auth-creds.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/config-server.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/create-overview-page.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/db-type-select.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/deletion-policy.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/machine-profile.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/mongos-mode.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/name-namespace-select.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/overview-create.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/point-in-time-recovery.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/replicaset-mode.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/shard-mode.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/shard-nodes.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-create/storage-class.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-insights.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-users-kubevault.png (100%) rename {src/en => docs/platform}/guides/database-management/images/db-users.png (100%) rename {src/en => docs/platform}/guides/database-management/images/delete-modal.png (100%) rename {src/en => docs/platform}/guides/database-management/images/delete-overview-modal.png (100%) rename {src/en => docs/platform}/guides/database-management/images/delete-overview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/delete.png (100%) rename {src/en => docs/platform}/guides/database-management/images/expose-via-gateway.png (100%) rename {src/en => docs/platform}/guides/database-management/images/horizontal-scale-form.png (100%) rename {src/en => docs/platform}/guides/database-management/images/instant-backup-form.png (100%) rename {src/en => docs/platform}/guides/database-management/images/instant-backup.png (100%) rename {src/en => docs/platform}/guides/database-management/images/monitoring-env-config.png (100%) rename {src/en => docs/platform}/guides/database-management/images/monitoring-env-secret.png (100%) rename {src/en => docs/platform}/guides/database-management/images/monitoring-exporter.png (100%) rename {src/en => docs/platform}/guides/database-management/images/monitoring-scrapper.png (100%) rename {src/en => docs/platform}/guides/database-management/images/monitoring.png (100%) rename {src/en => docs/platform}/guides/database-management/images/motoring-prometheus.png (100%) rename {src/en => docs/platform}/guides/database-management/images/motoring-service-monitor.png (100%) rename {src/en => docs/platform}/guides/database-management/images/reconfigure-apply.png (100%) rename {src/en => docs/platform}/guides/database-management/images/reconfigure-create-secret.png (100%) rename {src/en => docs/platform}/guides/database-management/images/reconfigure-new-secret.png (100%) rename {src/en => docs/platform}/guides/database-management/images/reconfigure-remove.png (100%) rename {src/en => docs/platform}/guides/database-management/images/reconfigure.png (100%) rename {src/en => docs/platform}/guides/database-management/images/restart-preview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/restart-submit.png (100%) rename {src/en => docs/platform}/guides/database-management/images/restart.png (100%) rename {src/en => docs/platform}/guides/database-management/images/restore-config.png (100%) rename {src/en => docs/platform}/guides/database-management/images/restore.png (100%) rename {src/en => docs/platform}/guides/database-management/images/storage-autoscaling.png (100%) rename {src/en => docs/platform}/guides/database-management/images/storage-scale-readiness.png (100%) rename {src/en => docs/platform}/guides/database-management/images/storage-scale-standalone.png (100%) rename {src/en => docs/platform}/guides/database-management/images/storage-scale-volume.png (100%) rename {src/en => docs/platform}/guides/database-management/images/storage-scale.png (100%) rename {src/en => docs/platform}/guides/database-management/images/tls-certificate-details.png (100%) rename {src/en => docs/platform}/guides/database-management/images/tls-certificate.png (100%) rename {src/en => docs/platform}/guides/database-management/images/tls-operation.png (100%) rename {src/en => docs/platform}/guides/database-management/images/tls.png (100%) rename {src/en => docs/platform}/guides/database-management/images/update-version-preview.png (100%) rename {src/en => docs/platform}/guides/database-management/images/update-version-submit.png (100%) rename {src/en => docs/platform}/guides/database-management/images/update-version.png (100%) rename {src/en => docs/platform}/guides/database-management/images/vertical-exporter.png (100%) rename {src/en => docs/platform}/guides/database-management/images/vertical-machine-profile.png (100%) rename {src/en => docs/platform}/guides/database-management/images/vertical-machine-profile2.png (100%) rename {src/en => docs/platform}/guides/database-management/images/vertical-node-selection.png (100%) rename {src/en => docs/platform}/guides/database-management/images/vertical-scaling.png (100%) rename {src/en => docs/platform}/guides/database-management/instant-backup-restore.md (89%) create mode 100644 docs/platform/guides/database-management/manage-recommendations.md rename {src/en => docs/platform}/guides/database-management/monitoring.md (91%) rename {src/en => docs/platform}/guides/database-management/recent-backups.md (93%) rename {src/en => docs/platform}/guides/database-management/reconfigure-database.md (94%) rename {src/en => docs/platform}/guides/database-management/repository.md (92%) rename {src/en => docs/platform}/guides/database-management/restart-database.md (92%) rename {src/en => docs/platform}/guides/database-management/restore.md (92%) rename {src/en => docs/platform}/guides/database-management/scaling-storage.md (92%) rename {src/en => docs/platform}/guides/database-management/scaling.md (91%) rename {src/en => docs/platform}/guides/database-management/security-report.md (62%) rename {src/en => docs/platform}/guides/database-management/snapshot.md (93%) rename {src/en => docs/platform}/guides/database-management/tls.md (92%) rename {src/en => docs/platform}/guides/database-management/upgrade-version.md (91%) rename {src/en => docs/platform}/guides/get-started/_index.md (66%) rename {src/en => docs/platform}/guides/get-started/add-cluster.md (82%) rename {src/en => docs/platform}/guides/get-started/add-credential.md (83%) rename {src/en => docs/platform}/guides/get-started/architecture.md (92%) rename {src/en => docs/platform}/guides/get-started/enable-features.md (85%) rename {src/en => docs/platform}/guides/get-started/images/architecture.png (100%) rename {src/en => docs/platform}/guides/get-started/images/selfhost.png (100%) create mode 100644 docs/platform/guides/get-started/manage-databases.md rename {src/en => docs/platform}/guides/get-started/register-login.md (90%) rename {src/en => docs/platform}/guides/get-started/requirements.md (96%) rename {src/en => docs/platform}/guides/integrations/_index.md (65%) rename {src/en => docs/platform}/guides/integrations/images/ace-url.png (100%) rename {src/en => docs/platform}/guides/integrations/images/acer-proxy-installer.png (100%) rename {src/en => docs/platform}/guides/integrations/images/create-repo.png (100%) rename {src/en => docs/platform}/guides/integrations/images/extensions.png (100%) rename {src/en => docs/platform}/guides/integrations/images/install-ext.png (100%) rename {src/en => docs/platform}/guides/integrations/images/kubedb-in-list.png (100%) rename {src/en => docs/platform}/guides/integrations/images/kubedb-in-rancher.png (100%) rename {src/en => docs/platform}/guides/integrations/images/manage-repo.png (100%) rename {src/en => docs/platform}/guides/integrations/images/organization-create.png (100%) rename {src/en => docs/platform}/guides/integrations/images/organization-settings-generate-installer.png (100%) rename {src/en => docs/platform}/guides/integrations/images/organization-settings-sync-users.png (100%) rename {src/en => docs/platform}/guides/integrations/images/organization-settings.png (100%) rename {src/en => docs/platform}/guides/integrations/images/repo-info.png (100%) rename {src/en => docs/platform}/guides/integrations/images/three-dot.png (100%) rename {src/en => docs/platform}/guides/integrations/rancher-extension.md (78%) rename {src/en => docs/platform}/guides/license-management/_index.md (66%) rename {src/en => docs/platform}/guides/license-management/contract.md (90%) rename {src/en => docs/platform}/guides/license-management/images/add-cluster-button-rectangle.png (100%) rename {src/en => docs/platform}/guides/license-management/images/add-cluster-confirm.png (100%) rename {src/en => docs/platform}/guides/license-management/images/add-cluster-information.png (100%) rename {src/en => docs/platform}/guides/license-management/images/add-cluster-preview.png (100%) rename {src/en => docs/platform}/guides/license-management/images/audits.png (100%) rename {src/en => docs/platform}/guides/license-management/images/cluster-delete.png (100%) rename {src/en => docs/platform}/guides/license-management/images/contract-details.png (100%) rename {src/en => docs/platform}/guides/license-management/images/download-offline-license.png (100%) rename {src/en => docs/platform}/guides/license-management/images/home-billing-console.png (100%) rename {src/en => docs/platform}/guides/license-management/images/license-proxy-apiservice-yaml-status.png (100%) rename {src/en => docs/platform}/guides/license-management/images/license-proxy-server-svc-check.png (100%) rename {src/en => docs/platform}/guides/license-management/images/license-status-free-contract.png (100%) rename {src/en => docs/platform}/guides/license-management/images/license-status-paid-contract.png (100%) rename {src/en => docs/platform}/guides/license-management/images/offline-installer-cluster-selection.png (100%) rename {src/en => docs/platform}/guides/license-management/images/offline-installer-contract-selection.png (100%) rename {src/en => docs/platform}/guides/license-management/images/offline-installer-scripts.png (100%) rename {src/en => docs/platform}/guides/license-management/images/online-installer-scripts.png (100%) rename {src/en => docs/platform}/guides/license-management/images/online-installer.png (100%) rename {src/en => docs/platform}/guides/license-management/license-proxyserver.md (91%) rename {src/en => docs/platform}/guides/license-management/overview.md (91%) rename {src/en => docs/platform}/guides/license-management/troubleshoots.md (97%) rename src/en/selfhost-setup/index.md => docs/platform/selfhost-setup/README.md (75%) create mode 100644 docs/platform/selfhost-setup/_index.md rename {src/en => docs/platform}/selfhost-setup/images/ace-dashboard.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/ace-status.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/admin-setting.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/awsStep1.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/awsStep2.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/awsStep3.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/awsStep4.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/awsStep5.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/awsStep7.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/azureStep1.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/azureStep2.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/azureStep3.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/azureStep4.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/azureStep5.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/branding.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/deployment-progress.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/domain-whitelisting.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/features.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/ingress-gateway.png (100%) rename {src/public/images/selfhost-setup => docs/platform/selfhost-setup/images}/installer-home.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/managed-resources.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/nats.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/policy-1.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/policy-10.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/policy-2.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/policy-3.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/policy-4.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/policy-5.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/policy-7.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/policy-8.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/policy-9.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/resource-limit.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/selfhost-deployment-option.png (100%) rename {src/en => docs/platform}/selfhost-setup/images/tenant.png (100%) create mode 100644 docs/platform/selfhost-setup/install/_index.md rename {src/en => docs/platform}/selfhost-setup/install/aws-marketplace.md (99%) rename {src/en => docs/platform}/selfhost-setup/install/azure-marketplace.md (98%) rename {src/en => docs/platform}/selfhost-setup/install/cloud-demo.md (98%) rename {src/en => docs/platform}/selfhost-setup/install/k8s-app-demo.md (97%) rename {src/en => docs/platform}/selfhost-setup/install/onprem-demo.md (98%) rename {src/en => docs/platform}/selfhost-setup/install/openshift-demo.md (98%) rename {src/en => docs/platform}/selfhost-setup/install/selfhosted-production.md (99%) rename {src/en => docs/platform}/selfhost-setup/install/troubleshoot.md (56%) create mode 100644 docs/platform/selfhost-setup/uninstall.md rename {src/en/welcome => docs/platform}/support.md (68%) delete mode 100644 firebase.json create mode 100755 hack/scripts/open-pr.sh create mode 100755 hack/scripts/update-release-tracker.sh delete mode 100644 index.json delete mode 100644 package-lock.json delete mode 100644 package.json delete mode 100644 shims-vue.d.ts delete mode 100644 src/_home-account.md delete mode 100644 src/_home-billing.md delete mode 100644 src/_home-cluster.md delete mode 100644 src/_home-database.md delete mode 100644 src/_home-hub-ui.md delete mode 100644 src/_home-integrations.md delete mode 100644 src/_home-license.md delete mode 100644 src/_home-start.md delete mode 100644 src/auto-imports.d.ts delete mode 100644 src/en/guides/_index.md delete mode 100644 src/en/guides/cluster-management/_index.md delete mode 100644 src/en/guides/cluster-management/add-cluster/self-managed/_index.md delete mode 100644 src/en/guides/cluster-management/constraints-violations.md delete mode 100644 src/en/guides/database-management/manage-recommendations.md delete mode 100644 src/en/guides/get-started/manage-databases.md delete mode 100644 src/en/overview.md delete mode 100644 src/en/selfhost-setup/install/_index.md delete mode 100644 src/en/selfhost-setup/uninstall.md delete mode 100644 src/en/welcome/index.md delete mode 100644 src/index.md delete mode 100644 src/public/images/404/404-bg.png delete mode 100644 src/public/images/404/man.png delete mode 100644 src/public/images/pattern-squire.png delete mode 100644 tsconfig.json diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 927d11c..0000000 --- a/.eslintrc +++ /dev/null @@ -1,6 +0,0 @@ -{ - "extends": ["@antfu", "./.eslintrc-auto-import.json"], - "rules": { - "vue/component-name-in-template-casing": ["error", "kebab-case"] - } -} diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json deleted file mode 100644 index 8a135a3..0000000 --- a/.eslintrc-auto-import.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "globals": { - "Component": true, - "ComponentPublicInstance": true, - "ComputedRef": true, - "EffectScope": true, - "InjectionKey": true, - "PropType": true, - "Ref": true, - "VNode": true, - "computed": true, - "createApp": true, - "customRef": true, - "defineAsyncComponent": true, - "defineComponent": true, - "effectScope": true, - "getCurrentInstance": true, - "getCurrentScope": true, - "h": true, - "inject": true, - "isProxy": true, - "isReactive": true, - "isReadonly": true, - "isRef": true, - "markRaw": true, - "nextTick": true, - "onActivated": true, - "onBeforeMount": true, - "onBeforeRouteLeave": true, - "onBeforeRouteUpdate": true, - "onBeforeUnmount": true, - "onBeforeUpdate": true, - "onDeactivated": true, - "onErrorCaptured": true, - "onMounted": true, - "onRenderTracked": true, - "onRenderTriggered": true, - "onScopeDispose": true, - "onServerPrefetch": true, - "onUnmounted": true, - "onUpdated": true, - "provide": true, - "reactive": true, - "readonly": true, - "ref": true, - "resolveComponent": true, - "shallowReactive": true, - "shallowReadonly": true, - "shallowRef": true, - "toRaw": true, - "toRef": true, - "toRefs": true, - "toValue": true, - "triggerRef": true, - "unref": true, - "useAttrs": true, - "useCssModule": true, - "useCssVars": true, - "useLink": true, - "useRoute": true, - "useRouter": true, - "useSlots": true, - "watch": true, - "watchEffect": true, - "watchPostEffect": true, - "watchSyncEffect": true - } -} diff --git a/.firebaserc b/.firebaserc deleted file mode 100644 index 4153daa..0000000 --- a/.firebaserc +++ /dev/null @@ -1,22 +0,0 @@ -{ - "projects": { - "prod": "byte-builders", - "default": "kubedb-new-e7965" - }, - "targets": { - "kubedb-new-e7965": { - "hosting": { - "nuxt": [ - "bb-docs-qa" - ] - } - }, - "byte-builders": { - "hosting": { - "nuxt": [ - "byte-builders-docs" - ] - } - } - } -} diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index c2f87f8..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,7 +0,0 @@ -version: 2 -updates: - - package-ecosystem: "npm" - directory: "/" - schedule: - interval: "daily" - open-pull-requests-limit: 0 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2842e96..4c40825 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -3,7 +3,7 @@ name: CI on: pull_request: branches: - - '*' + - "*" push: branches: - master @@ -30,32 +30,102 @@ jobs: name: Build needs: label-detector runs-on: "${{ needs.label-detector.outputs.runs-on }}" - steps: - uses: actions/checkout@v4 - with: - persist-credentials: false - - uses: actions/setup-node@v4 + - name: Install kubectl + run: | + curl -LO https://dl.k8s.io/release/v1.32.1/bin/linux/amd64/kubectl + chmod +x ./kubectl + sudo mv ./kubectl /usr/local/bin/kubectl + + - name: Install link checker + run: | + curl -fsSL -o liche https://github.com/appscodelabs/liche/releases/download/v0.1.0/liche-linux-amd64 + chmod +x liche + sudo mv liche /usr/local/bin/liche + + - name: Install codespan schema checker + run: | + curl -fsSL -o codespan-schema-checker https://github.com/kmodules/codespan-schema-checker/releases/latest/download/codespan-schema-checker-linux-amd64 + chmod +x codespan-schema-checker + sudo mv codespan-schema-checker /usr/local/bin/codespan-schema-checker + + - name: Create Kubernetes cluster + id: kind + uses: engineerd/setup-kind@v0.5.0 with: - node-version: '22' - check-latest: true + version: v0.31.0 - - name: Prepare git - env: - GITHUB_USER: 1gtm - GITHUB_TOKEN: ${{ secrets.LGTM_GITHUB_TOKEN }} + - name: Prepare cluster for testing + id: local-path run: | - set -x - git config --global user.name "${GITHUB_USER}" - git config --global user.email "${GITHUB_USER}@appscode.com" - git config --global \ - url."https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com".insteadOf \ - "https://github.com" - - - name: Build - env: - CI: true + echo "waiting for nodes to be ready ..." + kubectl wait --for=condition=Ready nodes --all --timeout=5m + kubectl get nodes + echo + echo "install helm 3" + curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash + echo "install kubedb-crds chart" + helm repo add appscode https://charts.appscode.com/stable/ + helm repo update + # helm install kubedb-crds appscode/kubedb-crds + # helm install kmodules-crds appscode/kmodules-crds + kubectl create -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.crds.yaml + kubectl create -f https://github.com/prometheus-operator/prometheus-operator/releases/download/v0.75.0/stripped-down-crds.yaml + kubectl create -f https://github.com/kmodules/custom-resources/raw/release-1.25/crds/appcatalog.appscode.com_appbindings.yaml + kubectl create -f https://github.com/kmodules/custom-resources/raw/release-1.25/crds/metrics.appscode.com_metricsconfigurations.yaml + kubectl create -f https://github.com/stashed/installer/raw/master/crds/stash-crds.yaml + kubectl create -f https://github.com/kubevault/installer/raw/master/crds/kubevault-crds.yaml + kubectl create -f https://github.com/kubedb/installer/raw/master/crds/kubedb-crds.yaml + kubectl create -f https://github.com/kubernetes-csi/external-snapshotter/raw/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml + kubectl create -f https://github.com/kubestash/installer/raw/master/crds/kubestash-crds.yaml + kubectl create -f https://github.com/appscode-cloud/catalog/raw/master/crds/catalog.appscode.com_mongodbbindings.yaml + kubectl create -f https://raw.githubusercontent.com/envoyproxy/gateway/refs/heads/main/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml + kubectl create -f https://github.com/voyagermesh/installer/raw/master/charts/gateway-api/crds/gateway.networking.k8s.io_gatewayclasses.yaml + kubectl create -f https://github.com/fluxcd/helm-controller/raw/main/config/crd/bases/helm.toolkit.fluxcd.io_helmreleases.yaml + kubectl create -f https://github.com/fluxcd/source-controller/raw/main/config/crd/bases/source.toolkit.fluxcd.io_helmrepositories.yaml + kubectl create -f https://github.com/appscode-cloud/catalog/raw/master/crds/catalog.appscode.com_redisbindings.yaml + # distributed crds + kubectl create -f https://github.com/kube-slice/apis/raw/release-v2025.7.31/crd/controller.kubeslice.io_clusters.yaml + kubectl create -f https://github.com/kube-slice/apis/raw/release-v2025.7.31/crd/controller.kubeslice.io_projects.yaml + kubectl create -f https://github.com/kube-slice/apis/raw/release-v2025.7.31/crd/controller.kubeslice.io_sliceconfigs.yaml + kubectl create -f https://github.com/kubeops/petset/raw/master/crds/apps.k8s.appscode.com_placementpolicies.yaml + kubectl create -f https://github.com/open-cluster-management-io/api/raw/main/operator/v1/0000_00_operator.open-cluster-management.io_klusterlets.crd.yaml + kubectl create -f https://raw.githubusercontent.com/open-cluster-management-io/api/refs/heads/main/addon/v1alpha1/0000_01_addon.open-cluster-management.io_managedclusteraddons.crd.yaml + # virtual-secrets crds + kubectl create -f https://raw.githubusercontent.com/kubernetes-sigs/secrets-store-csi-driver/refs/heads/main/charts/secrets-store-csi-driver/crds/secrets-store.csi.x-k8s.io_secretproviderclasses.yaml + kubectl create -f https://raw.githubusercontent.com/virtual-secrets/apimachinery/refs/heads/master/crds/config.virtual-secrets.dev_secretmetadatas.yaml + kubectl create -f https://raw.githubusercontent.com/virtual-secrets/apimachinery/refs/heads/master/crds/config.virtual-secrets.dev_secretstores.yaml + kubectl create -f https://raw.githubusercontent.com/virtual-secrets/apimachinery/refs/heads/master/crds/virtual-secrets.dev_secretmounts.yaml + kubectl create -f https://raw.githubusercontent.com/virtual-secrets/apimachinery/refs/heads/master/crds/virtual-secrets.dev_secrets.yaml + + - name: Check codespan schema + run: | + git clone https://github.com/kubedb/installer.git + cd installer + git checkout $(git describe --tags --abbrev=0 2>/dev/null || echo master) + cd .. + git clone https://github.com/kmodules/resource-metadata.git + mv resource-metadata/hub /tmp + rm -rf resource-metadata + codespan-schema-checker --kubedb-catalog-dir=./installer/catalog/kubedb --content=./docs + + - name: Check links run: | - npm ci - npm run build + liche -r docs -d $(pwd) -c 10 -p -h -l -x '^(.*golang.org.*|.*github.com.*|.*api.slack.com.*|.*twitter.com.*|.*linode.com.*|.*helm.sh.*|.*k8s.io.*|.*percona.com.*|.*kubernetes.io.*|.*search-guard.com.*|.*hub.docker.com.*|.*appscode.com.*|.*mongodb.com.*|.*community.arm.com.*|.*cluster.com.*|.*proxysql.com.*|.*postgresql.org.*|.*kafka.com.*|.*stackoverflow.com.*|.*redis.io.*|.*elastic.co.*|.*mysql.*|.*developer.hashicorp.com.*|.*pgpool.net.*|.*clickhouse.com.*)$' + max_retries=5 + retry_count=0 + while [ $retry_count -lt $max_retries ]; do + if liche -r docs -d $(pwd) -c 10 -p -h -l -x '^(.*golang.org.*|.*github.com.*|.*api.slack.com.*|.*twitter.com.*|.*linode.com.*|.*helm.sh.*|.*k8s.io.*|.*percona.com.*|.*kubernetes.io.*|.*search-guard.com.*|.*hub.docker.com.*|.*appscode.com.*|.*mongodb.com.*|.*community.arm.com.*|.*cluster.com.*|.*proxysql.com.*|.*postgresql.org.*|.*kafka.com.*|.*stackoverflow.com.*|.*redis.io.*|.*elastic.co.*|.*mysql.*|.*developer.hashicorp.com.*|.*pgpool.net.*|.*clickhouse.com.*)$'; then + echo "Link check passed" + exit 0 + fi + retry_count=$((retry_count + 1)) + if [ $retry_count -lt $max_retries ]; then + echo "Link check failed, retrying... (attempt $((retry_count + 1))/$max_retries)" + sleep 5 + fi + done + echo "Link check failed after $max_retries attempts" + exit 1 diff --git a/.github/workflows/preview-website.yml b/.github/workflows/preview-website.yml index 9e5e52e..55dc510 100644 --- a/.github/workflows/preview-website.yml +++ b/.github/workflows/preview-website.yml @@ -30,30 +30,66 @@ jobs: steps: - uses: actions/checkout@v4 with: - persist-credentials: false + submodules: true + + - name: Set up Go 1.x + uses: actions/setup-go@v5 + with: + go-version: '1.25' + id: go - name: Use Node.js uses: actions/setup-node@v4 with: - node-version: '22' - check-latest: true + node-version: '20' + + - name: Install yq + run: | + curl -fsSL -o yq https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 + chmod +x yq + sudo mv yq /usr/local/bin/yq - - name: Prepare git + - name: Install Hugo + run: | + curl -fsSL -o hugo_extended.deb https://github.com/gohugoio/hugo/releases/download/v0.128.2/hugo_extended_0.128.2_linux-amd64.deb + sudo dpkg -i hugo_extended.deb + rm hugo_extended.deb + + - name: Install Hugo Tools + run: | + curl -fsSL -o hugo-tools https://github.com/appscodelabs/hugo-tools/releases/download/v0.2.23/hugo-tools-linux-amd64 + chmod +x hugo-tools + sudo mv hugo-tools /usr/local/bin/hugo-tools + + - name: Clone website repository env: GITHUB_USER: 1gtm GITHUB_TOKEN: ${{ secrets.LGTM_GITHUB_TOKEN }} + WEBSITE_REPOSITORY: ${{ secrets.WEBSITE_REPOSITORY }} run: | - set -x - git config --global user.name "${GITHUB_USER}" - git config --global user.email "${GITHUB_USER}@appscode.com" - git config --global \ - url."https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com".insteadOf \ - "https://github.com" + url="https://${GITHUB_USER}:${GITHUB_TOKEN}@${WEBSITE_REPOSITORY}.git" + cd $RUNNER_WORKSPACE + git clone --recurse-submodules $url + cd $(basename $WEBSITE_REPOSITORY) + git config user.name "${GITHUB_USER}" + git config user.email "${GITHUB_USER}@appscode.com" - name: Update docs + env: + GITHUB_USER: 1gtm + GITHUB_TOKEN: ${{ secrets.LGTM_GITHUB_TOKEN }} + WEBSITE_REPOSITORY: ${{ secrets.WEBSITE_REPOSITORY }} + GOOGLE_CUSTOM_SEARCH_API_KEY: ${{ secrets.GOOGLE_CUSTOM_SEARCH_API_KEY }} run: | - npm ci - npm run build + set -x + export WEBSITE_ROOT=$RUNNER_WORKSPACE/$(basename $WEBSITE_REPOSITORY) + cd $WEBSITE_ROOT + npm install + make assets + hugo-tools update-branch --filename=./data/products/kubedbplatform.json --branch=${{ github.event.pull_request.head.sha }} + rm -rf content/docs + make docs-platform + make gen-prod - uses: FirebaseExtended/action-hosting-deploy@v0 with: @@ -61,6 +97,6 @@ jobs: firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_QA }}' projectId: kubedb-new-e7965 # target: kubedb-new-e7965 - # entryPoint: '.' + entryPoint: '../website' env: FIREBASE_CLI_PREVIEWS: hostingchannels diff --git a/.github/workflows/release-tracker.yml b/.github/workflows/release-tracker.yml index d46b567..af433c2 100644 --- a/.github/workflows/release-tracker.yml +++ b/.github/workflows/release-tracker.yml @@ -26,7 +26,6 @@ jobs: name: Build needs: label-detector runs-on: "${{ needs.label-detector.outputs.runs-on }}" - steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 31ae067..0000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,99 +0,0 @@ -name: Release - -on: - push: - tags: - - "*.*" - branches: - - master - schedule: - - cron: '0 0 * * *' - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -concurrency: - group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} - cancel-in-progress: true - -jobs: - label-detector: - name: Runner Label - runs-on: label-detector - outputs: - runs-on: ${{ steps.detector.outputs.label }} - steps: - - name: Detect Label - id: detector - run: | - # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idoutputs - echo "label=$(curl -fsSL https://this-is-nats.appscode.ninja/runs-on/${{ github.repository_owner }}?visibility=${{ github.repository_visibility }})" >> $GITHUB_OUTPUT - - build: - name: Build - needs: label-detector - runs-on: "${{ needs.label-detector.outputs.runs-on }}" - steps: - - uses: actions/checkout@v1 - - - name: Check tag matches package version - run: | - PKG_VERSION=$(jq -r '.version' package.json) - GIT_TAG=$(git describe --exact-match --abbrev=0 2>/dev/null || echo "") - test "v${PKG_VERSION}" = "${GIT_TAG}" - - - name: Prepare git - env: - GITHUB_USER: 1gtm - GITHUB_TOKEN: ${{ secrets.LGTM_GITHUB_TOKEN }} - run: | - set -x - git config --global user.name "${GITHUB_USER}" - git config --global user.email "${GITHUB_USER}@appscode.com" - git config --global \ - url."https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com".insteadOf \ - "https://github.com" - - - name: Use Node.js - uses: actions/setup-node@v4 - with: - node-version: '22' - check-latest: true - - - name: Install Firebase CLI - run: | - npm i -g firebase-tools@v11.14.1 - - # - name: QA - # env: - # FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} - # if: startsWith(github.event.ref, 'refs/tags/') && (contains(github.ref, '-alpha.') || contains(github.ref, '-beta.')) - # run: | - # npm install - # npm run deploy:qa - - - name: Release - env: - FIREBASE_TOKEN: ${{ secrets.FIREBASE_TOKEN }} - # if: startsWith(github.event.ref, 'refs/tags/') && (contains(github.ref, '-alpha.') || contains(github.ref, '-beta.')) == false - run: | - npm install - npm run deploy:prod - - - name: Update search index - env: - MEILISEARCH_ADMIN_API_KEY: ${{ secrets.MEILISEARCH_ADMIN_API_KEY }} - if: startsWith(github.event.ref, 'refs/tags/') && (contains(github.ref, '-alpha.') || contains(github.ref, '-beta.')) == false - run: | - curl \ - -X POST 'https://search.docs.appscode.com/indexes' \ - -H "Authorization: Bearer $MEILISEARCH_ADMIN_API_KEY" \ - -H 'Content-Type: application/json' \ - --data-binary '{ - "uid": "acedocs", - "primaryKey": "documentId" - }' - curl \ - -X POST 'https://search.docs.appscode.com/indexes/acedocs/documents' \ - -H "Authorization: Bearer $MEILISEARCH_ADMIN_API_KEY" \ - -H 'Content-Type: application/json' \ - --data-binary @.vitepress/dist/index.json diff --git a/.gitignore b/.gitignore index 60016c8..9f11b75 100644 --- a/.gitignore +++ b/.gitignore @@ -1,32 +1 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -.DS_Store -dist -dist-ssr -coverage -*.local -.vitepress/cache - -/cypress/videos/ -/cypress/screenshots/ - -# Editor directories and files -.idea -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? - -.vitepress/dist -.vitepress/.temp -.firebase -*.tsbuildinfo +.idea/ diff --git a/.stylelintrc b/.stylelintrc deleted file mode 100644 index 83a27bf..0000000 --- a/.stylelintrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": ["stylelint-config-standard", "stylelint-config-standard-scss", "stylelint-config-recommended-vue", "stylelint-config-recommended-vue/scss"] -} diff --git a/.vitepress/config.ts b/.vitepress/config.ts deleted file mode 100644 index fb3079a..0000000 --- a/.vitepress/config.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { defineConfigWithTheme } from 'vitepress' -import type { ThemeConfig } from '@bytebuilders/docs-base' -import baseConfig from '@bytebuilders/docs-base/config' -import HeaderLinks from './header-links' - -const head: [string, Record][] = HeaderLinks.map(hl => ['link', hl]) -// https://vitepress.dev/reference/site-config -export default defineConfigWithTheme({ - extends: baseConfig, - title: 'AppsCode Docs', - titleTemplate: 'AppsCode', - description: 'A documentation website for AppsCode Platform.', - head, - vite: { - resolve: { - alias: { - '@vueuse/integrations/useCookies': '@vueuse/integrations/useCookies.mjs', - }, - }, - server: { - allowedHosts: ['bb.test'], - }, - }, -}) diff --git a/.vitepress/header-links.ts b/.vitepress/header-links.ts deleted file mode 100644 index 9564ac5..0000000 --- a/.vitepress/header-links.ts +++ /dev/null @@ -1,75 +0,0 @@ -export default [ - { - rel: 'apple-touch-icon', - sizes: '57x57', - href: 'https://cdn.appscode.com/images/products/appscode/icons/apple-icon-57x57.png', - }, - { - rel: 'apple-touch-icon', - sizes: '60x60', - href: 'https://cdn.appscode.com/images/products/appscode/icons/apple-icon-60x60.png', - }, - { - rel: 'apple-touch-icon', - sizes: '72x72', - href: 'https://cdn.appscode.com/images/products/appscode/icons/apple-icon-72x72.png', - }, - { - rel: 'apple-touch-icon', - sizes: '76x76', - href: 'https://cdn.appscode.com/images/products/appscode/icons/apple-icon-76x76.png', - }, - { - rel: 'apple-touch-icon', - sizes: '114x114', - href: 'https://cdn.appscode.com/images/products/appscode/icons/apple-icon-114x114.png', - }, - { - rel: 'apple-touch-icon', - sizes: '120x120', - href: 'https://cdn.appscode.com/images/products/appscode/icons/apple-icon-120x120.png', - }, - { - rel: 'apple-touch-icon', - sizes: '144x144', - href: 'https://cdn.appscode.com/images/products/appscode/icons/apple-icon-144x144.png', - }, - { - rel: 'apple-touch-icon', - sizes: '152x152', - href: 'https://cdn.appscode.com/images/products/appscode/icons/apple-icon-152x152.png', - }, - { - rel: 'apple-touch-icon', - sizes: '180x180', - href: 'https://cdn.appscode.com/images/products/appscode/icons/apple-icon-180x180.png', - }, - { - rel: 'icon', - type: 'image/png', - sizes: '192x192', - href: 'https://cdn.appscode.com/images/products/appscode/icons/android-icon-192x192.png', - }, - { - rel: 'icon', - type: 'image/png', - sizes: '32x32', - href: 'https://cdn.appscode.com/images/products/appscode/icons/favicon-32x32.png', - }, - { - rel: 'icon', - type: 'image/png', - sizes: '96x96', - href: 'https://cdn.appscode.com/images/products/appscode/icons/favicon-96x96.png', - }, - { - rel: 'icon', - type: 'image/png', - sizes: '16x16', - href: 'https://cdn.appscode.com/images/products/appscode/icons/favicon-16x16.png', - }, - { - rel: 'manifest', - href: 'https://cdn.appscode.com/images/products/appscode/icons/manifest.json', - }, -] as Record[] diff --git a/.vitepress/theme/index.ts b/.vitepress/theme/index.ts deleted file mode 100644 index dc872f1..0000000 --- a/.vitepress/theme/index.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { BaseLayout } from '@bytebuilders/docs-base' -import { createPinia } from 'pinia' -import { createI18n } from 'vue-i18n' -import type { Theme } from 'vitepress' - -export default { - Layout: BaseLayout, - enhanceApp({ app, router, siteData }) { - app.use(createPinia()) - app.use(createI18n({ legacy: false, ...siteData.value.themeConfig.i18n })) - // ... - }, - -} satisfies Theme diff --git a/.vscode/extensions.json b/.vscode/extensions.json deleted file mode 100644 index c9bf6e4..0000000 --- a/.vscode/extensions.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "recommendations": [ - "dbaeumer.vscode-eslint", - "vue.volar", - "streetsidesoftware.code-spell-checker", - "richie5um2.vscode-sort-json", - "unional.vscode-sort-package-json", - "reliutg.bulma-css-class-completion", - "stylelint.vscode-stylelint" - ] -} diff --git a/.vscode/settings.json b/.vscode/settings.json deleted file mode 100644 index 3b73da3..0000000 --- a/.vscode/settings.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "prettier.enable": false, - "editor.formatOnSave": false, - "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit", - "source.fixAll.stylelint": "explicit" - }, - "css.validate": false, - "less.validate": false, - "scss.validate": false, - "stylelint.enable": true, - "stylelint.validate": ["css", "scss", "sass", "less", "postcss", "vue"] -} diff --git a/DCO b/DCO new file mode 100644 index 0000000..716561d --- /dev/null +++ b/DCO @@ -0,0 +1,36 @@ +Developer Certificate of Origin +Version 1.1 + +Copyright (C) 2004, 2006 The Linux Foundation and its contributors. +660 York Street, Suite 102, +San Francisco, CA 94110 USA + +Everyone is permitted to copy and distribute verbatim copies of this +license document, but changing it is not allowed. + + +Developer's Certificate of Origin 1.1 + +By making a contribution to this project, I certify that: + +(a) The contribution was created in whole or in part by me and I + have the right to submit it under the open source license + indicated in the file; or + +(b) The contribution is based upon previous work that, to the best + of my knowledge, is covered under an appropriate open source + license and I have the right under that license to submit that + work with modifications, whether created in whole or in part + by me, under the same open source license (unless I am + permitted to submit under a different license), as indicated + in the file; or + +(c) The contribution was provided directly to me by some other + person who certified (a), (b) or (c) and I have not modified + it. + +(d) I understand and agree that this project and the contribution + are public and that a record of the contribution (including all + personal information I submit with it, including my sign-off) is + maintained indefinitely and may be redistributed consistent with + this project or the open source license(s) involved. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8dada3e --- /dev/null +++ b/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/auto-imports.d.ts b/auto-imports.d.ts deleted file mode 100644 index 918aad8..0000000 --- a/auto-imports.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/* eslint-disable */ -/* prettier-ignore */ -// @ts-nocheck -// Generated by unplugin-auto-import -export {} -declare global { - -} diff --git a/cspell.json b/cspell.json deleted file mode 100644 index 867a669..0000000 --- a/cspell.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "version": "0.2", - "ignorePaths": [], - "dictionaryDefinitions": [], - "dictionaries": [], - "words": [ - "antfu", - "bulma", - "kubedb", - "meilisearch", - "nihal", - "nuxt", - "pinia", - "unplugin", - "Vite", - "vitepress", - "vueuse", - "vuex" - ], - "ignoreWords": [], - "import": [] -} diff --git a/docs/platform/README.md b/docs/platform/README.md new file mode 100644 index 0000000..ebcd8b7 --- /dev/null +++ b/docs/platform/README.md @@ -0,0 +1,32 @@ +--- +layout: docs +title: Welcome | KubeDB Platform +menu: + docsplatform_{{.version}}: + identifier: platform-readme + name: Welcome + parent: welcome + weight: -1 +menu_name: docsplatform_{{.version}} +section_menu_id: welcome +url: /docs/platform/{{.version}}/welcome/ +aliases: +- /docs/platform/{{.version}}/ +- /docs/platform/{{.version}}/README/ +--- + +# KubeDB Platform Documentation + +This page is the entry point for KubeDB Platform documentation. + +## Core sections + +- [Selfhost Setup](./selfhost-setup/) +- [Guides](./guides/) + +## Contributor resources + +- [Contributing](./contributing.md) +- [Support](./support.md) + +Use [Guides](./guides/) for day-to-day workflows, then continue to [Selfhost Setup](./selfhost-setup/) for deployment-specific instructions. diff --git a/docs/platform/_index.md b/docs/platform/_index.md new file mode 100644 index 0000000..6b42572 --- /dev/null +++ b/docs/platform/_index.md @@ -0,0 +1,10 @@ +--- +title: KubeDB Platform +layout: docs +menu: + docsplatform_{{.version}}: + identifier: welcome + name: Welcome + weight: 10 +menu_name: docsplatform_{{.version}} +--- diff --git a/src/en/welcome/contributing.md b/docs/platform/contributing.md similarity index 79% rename from src/en/welcome/contributing.md rename to docs/platform/contributing.md index 632f795..31bab14 100644 --- a/src/en/welcome/contributing.md +++ b/docs/platform/contributing.md @@ -1,15 +1,15 @@ --- -layout: 'guide' +layout: docs menu: - welcome_docs_menu: - identifier: welcome-contributing + docsplatform_{{.version}}: + identifier: platform-contributing name: Contributing + parent: welcome weight: 10 -menu_name: welcome_docs_menu -section_menu: welcome +menu_name: docsplatform_{{.version}} +section_menu_id: welcome --- - # Contribution Guidelines Want to contribute to KubeDB? diff --git a/docs/platform/guides/README.md b/docs/platform/guides/README.md new file mode 100644 index 0000000..7bd5891 --- /dev/null +++ b/docs/platform/guides/README.md @@ -0,0 +1,32 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: guides-readme + name: Guides + parent: guides + weight: -1 +menu_name: docsplatform_{{.version}} +section_menu_id: guides +url: /docs/platform/{{.version}}/guides/ +aliases: +- /docs/platform/{{.version}}/guides/README/ +--- + +# Platform Guides + +This section contains practical, task-oriented guides for operating and managing the platform. + +## Guide categories + +- [Account Management](./account-management/) +- [Billing and Usage Guide](./billing-and-usage-guide/) +- [Cluster Management](./cluster-management/) +- [Database Management](./database-management/) +- [Get Started](./get-started/) +- [Integrations](./integrations/) +- [License Management](./license-management/) + +## Recommended path + +For first-time users, start with [Get Started](./get-started/) and then move to the specific management areas relevant to your workflow. diff --git a/docs/platform/guides/_index.md b/docs/platform/guides/_index.md new file mode 100644 index 0000000..81b0021 --- /dev/null +++ b/docs/platform/guides/_index.md @@ -0,0 +1,10 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: guides + name: Guides + weight: 30 +menu_name: docsplatform_{{.version}} +section_menu_id: guides +--- diff --git a/src/en/guides/account-management/_index.md b/docs/platform/guides/account-management/_index.md similarity index 64% rename from src/en/guides/account-management/_index.md rename to docs/platform/guides/account-management/_index.md index 1386cf4..84ce71b 100644 --- a/src/en/guides/account-management/_index.md +++ b/docs/platform/guides/account-management/_index.md @@ -1,13 +1,14 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management name: Account Management + parent: guides description: Basic Account Management icon: https://img.icons8.com/00994A/ios/50/database--v1.png popular: true weight: 20 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/account-management/access-tokens.md b/docs/platform/guides/account-management/access-tokens.md similarity index 79% rename from src/en/guides/account-management/access-tokens.md rename to docs/platform/guides/account-management/access-tokens.md index 5a4633e..4a1b147 100644 --- a/src/en/guides/account-management/access-tokens.md +++ b/docs/platform/guides/account-management/access-tokens.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-accesstokens name: Tokens parent: account-management weight: 50 - home_menu: - identifier: home-account-accesstokens - name: Tokens - parent: home-account - weight: 50 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -22,7 +17,7 @@ Manage your access and NATS tokens to securely connect external applications and ## Access and Overview -![Tokens Overview](images/token-1.png) +![Tokens Overview](../images/token-1.png) Go to **USER SETTINGS > Tokens** to manage your credentials. @@ -32,7 +27,7 @@ Go to **USER SETTINGS > Tokens** to manage your credentials. ## Generate a New Access Token -![Generate New Token](images/token-2.png) +![Generate New Token](../images/token-2.png) Click **Generate Token** to create a new credential. @@ -43,7 +38,7 @@ Click **Generate Token** to create a new credential. ## Secure Your Token -![Token Created Successfully](images/token-3.png) +![Token Created Successfully](../images/token-3.png) A success banner will confirm the token is created. diff --git a/src/en/guides/account-management/delete-account.md b/docs/platform/guides/account-management/delete-account.md similarity index 85% rename from src/en/guides/account-management/delete-account.md rename to docs/platform/guides/account-management/delete-account.md index d70ff72..dbad1cc 100644 --- a/src/en/guides/account-management/delete-account.md +++ b/docs/platform/guides/account-management/delete-account.md @@ -1,24 +1,19 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-deleteaccount name: Delete Account parent: account-management weight: 20 - home_menu: - identifier: home-account-deleteaccount - name: Delete Account - parent: home-account - weight: 20 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Deleting Your AppsCode Account -![Delete Account](images/delete-account.png) +![Delete Account](../images/delete-account.png) This guide provides step-by-step instructions for permanently removing your personal account from the AppsCode platform. diff --git a/src/en/guides/account-management/images/Branding.png b/docs/platform/guides/account-management/images/Branding.png similarity index 100% rename from src/en/guides/account-management/images/Branding.png rename to docs/platform/guides/account-management/images/Branding.png diff --git a/src/en/guides/account-management/images/OAuth1.png b/docs/platform/guides/account-management/images/OAuth1.png similarity index 100% rename from src/en/guides/account-management/images/OAuth1.png rename to docs/platform/guides/account-management/images/OAuth1.png diff --git a/src/en/guides/account-management/images/OAuth2.png b/docs/platform/guides/account-management/images/OAuth2.png similarity index 100% rename from src/en/guides/account-management/images/OAuth2.png rename to docs/platform/guides/account-management/images/OAuth2.png diff --git a/src/en/guides/account-management/images/OAuth3.png b/docs/platform/guides/account-management/images/OAuth3.png similarity index 100% rename from src/en/guides/account-management/images/OAuth3.png rename to docs/platform/guides/account-management/images/OAuth3.png diff --git a/src/en/guides/account-management/images/OAuth4.png b/docs/platform/guides/account-management/images/OAuth4.png similarity index 100% rename from src/en/guides/account-management/images/OAuth4.png rename to docs/platform/guides/account-management/images/OAuth4.png diff --git a/src/en/guides/account-management/images/authentication-sources.png b/docs/platform/guides/account-management/images/authentication-sources.png similarity index 100% rename from src/en/guides/account-management/images/authentication-sources.png rename to docs/platform/guides/account-management/images/authentication-sources.png diff --git a/src/en/guides/account-management/images/client-org-1.png b/docs/platform/guides/account-management/images/client-org-1.png similarity index 100% rename from src/en/guides/account-management/images/client-org-1.png rename to docs/platform/guides/account-management/images/client-org-1.png diff --git a/src/en/guides/account-management/images/client-org-2.png b/docs/platform/guides/account-management/images/client-org-2.png similarity index 100% rename from src/en/guides/account-management/images/client-org-2.png rename to docs/platform/guides/account-management/images/client-org-2.png diff --git a/src/en/guides/account-management/images/client-org-3.png b/docs/platform/guides/account-management/images/client-org-3.png similarity index 100% rename from src/en/guides/account-management/images/client-org-3.png rename to docs/platform/guides/account-management/images/client-org-3.png diff --git a/src/en/guides/account-management/images/client-org-4.png b/docs/platform/guides/account-management/images/client-org-4.png similarity index 100% rename from src/en/guides/account-management/images/client-org-4.png rename to docs/platform/guides/account-management/images/client-org-4.png diff --git a/src/en/guides/account-management/images/client-org-5.png b/docs/platform/guides/account-management/images/client-org-5.png similarity index 100% rename from src/en/guides/account-management/images/client-org-5.png rename to docs/platform/guides/account-management/images/client-org-5.png diff --git a/src/en/guides/account-management/images/credentials/Hetzner.png b/docs/platform/guides/account-management/images/credentials/Hetzner.png similarity index 100% rename from src/en/guides/account-management/images/credentials/Hetzner.png rename to docs/platform/guides/account-management/images/credentials/Hetzner.png diff --git a/src/en/guides/account-management/images/credentials/Scaleway.png b/docs/platform/guides/account-management/images/credentials/Scaleway.png similarity index 100% rename from src/en/guides/account-management/images/credentials/Scaleway.png rename to docs/platform/guides/account-management/images/credentials/Scaleway.png diff --git a/src/en/guides/account-management/images/credentials/azureStorage.png b/docs/platform/guides/account-management/images/credentials/azureStorage.png similarity index 100% rename from src/en/guides/account-management/images/credentials/azureStorage.png rename to docs/platform/guides/account-management/images/credentials/azureStorage.png diff --git a/src/en/guides/account-management/images/credentials/cloudflareStorage.png b/docs/platform/guides/account-management/images/credentials/cloudflareStorage.png similarity index 100% rename from src/en/guides/account-management/images/credentials/cloudflareStorage.png rename to docs/platform/guides/account-management/images/credentials/cloudflareStorage.png diff --git a/src/en/guides/account-management/images/credentials/vultr.png b/docs/platform/guides/account-management/images/credentials/vultr.png similarity index 100% rename from src/en/guides/account-management/images/credentials/vultr.png rename to docs/platform/guides/account-management/images/credentials/vultr.png diff --git a/src/en/guides/account-management/images/delete-account.png b/docs/platform/guides/account-management/images/delete-account.png similarity index 100% rename from src/en/guides/account-management/images/delete-account.png rename to docs/platform/guides/account-management/images/delete-account.png diff --git a/src/en/guides/account-management/images/external-authentication.png b/docs/platform/guides/account-management/images/external-authentication.png similarity index 100% rename from src/en/guides/account-management/images/external-authentication.png rename to docs/platform/guides/account-management/images/external-authentication.png diff --git a/src/en/guides/account-management/images/manage-profile-1.png b/docs/platform/guides/account-management/images/manage-profile-1.png similarity index 100% rename from src/en/guides/account-management/images/manage-profile-1.png rename to docs/platform/guides/account-management/images/manage-profile-1.png diff --git a/src/en/guides/account-management/images/manage-profile-2.png b/docs/platform/guides/account-management/images/manage-profile-2.png similarity index 100% rename from src/en/guides/account-management/images/manage-profile-2.png rename to docs/platform/guides/account-management/images/manage-profile-2.png diff --git a/src/en/guides/account-management/images/orgs-members-1.png b/docs/platform/guides/account-management/images/orgs-members-1.png similarity index 100% rename from src/en/guides/account-management/images/orgs-members-1.png rename to docs/platform/guides/account-management/images/orgs-members-1.png diff --git a/src/en/guides/account-management/images/orgs-members-2.png b/docs/platform/guides/account-management/images/orgs-members-2.png similarity index 100% rename from src/en/guides/account-management/images/orgs-members-2.png rename to docs/platform/guides/account-management/images/orgs-members-2.png diff --git a/src/en/guides/account-management/images/security-1.png b/docs/platform/guides/account-management/images/security-1.png similarity index 100% rename from src/en/guides/account-management/images/security-1.png rename to docs/platform/guides/account-management/images/security-1.png diff --git a/src/en/guides/account-management/images/security-2.png b/docs/platform/guides/account-management/images/security-2.png similarity index 100% rename from src/en/guides/account-management/images/security-2.png rename to docs/platform/guides/account-management/images/security-2.png diff --git a/src/en/guides/account-management/images/security-3.png b/docs/platform/guides/account-management/images/security-3.png similarity index 100% rename from src/en/guides/account-management/images/security-3.png rename to docs/platform/guides/account-management/images/security-3.png diff --git a/src/en/guides/account-management/images/sign-up-config-1.png b/docs/platform/guides/account-management/images/sign-up-config-1.png similarity index 100% rename from src/en/guides/account-management/images/sign-up-config-1.png rename to docs/platform/guides/account-management/images/sign-up-config-1.png diff --git a/src/en/guides/account-management/images/sign-up-config-2.png b/docs/platform/guides/account-management/images/sign-up-config-2.png similarity index 100% rename from src/en/guides/account-management/images/sign-up-config-2.png rename to docs/platform/guides/account-management/images/sign-up-config-2.png diff --git a/src/en/guides/account-management/images/site-admin-dashboard.png b/docs/platform/guides/account-management/images/site-admin-dashboard.png similarity index 100% rename from src/en/guides/account-management/images/site-admin-dashboard.png rename to docs/platform/guides/account-management/images/site-admin-dashboard.png diff --git a/src/en/guides/account-management/images/site-admin-deleted-account-1.png b/docs/platform/guides/account-management/images/site-admin-deleted-account-1.png similarity index 100% rename from src/en/guides/account-management/images/site-admin-deleted-account-1.png rename to docs/platform/guides/account-management/images/site-admin-deleted-account-1.png diff --git a/src/en/guides/account-management/images/site-admin-deleted-account-2.png b/docs/platform/guides/account-management/images/site-admin-deleted-account-2.png similarity index 100% rename from src/en/guides/account-management/images/site-admin-deleted-account-2.png rename to docs/platform/guides/account-management/images/site-admin-deleted-account-2.png diff --git a/src/en/guides/account-management/images/site-admin-organizations-1.png b/docs/platform/guides/account-management/images/site-admin-organizations-1.png similarity index 100% rename from src/en/guides/account-management/images/site-admin-organizations-1.png rename to docs/platform/guides/account-management/images/site-admin-organizations-1.png diff --git a/src/en/guides/account-management/images/site-admin-organizations-2.png b/docs/platform/guides/account-management/images/site-admin-organizations-2.png similarity index 100% rename from src/en/guides/account-management/images/site-admin-organizations-2.png rename to docs/platform/guides/account-management/images/site-admin-organizations-2.png diff --git a/src/en/guides/account-management/images/site-admin-user-account-1.png b/docs/platform/guides/account-management/images/site-admin-user-account-1.png similarity index 100% rename from src/en/guides/account-management/images/site-admin-user-account-1.png rename to docs/platform/guides/account-management/images/site-admin-user-account-1.png diff --git a/src/en/guides/account-management/images/site-admin-user-account-2.png b/docs/platform/guides/account-management/images/site-admin-user-account-2.png similarity index 100% rename from src/en/guides/account-management/images/site-admin-user-account-2.png rename to docs/platform/guides/account-management/images/site-admin-user-account-2.png diff --git a/src/en/guides/account-management/images/token-1.png b/docs/platform/guides/account-management/images/token-1.png similarity index 100% rename from src/en/guides/account-management/images/token-1.png rename to docs/platform/guides/account-management/images/token-1.png diff --git a/src/en/guides/account-management/images/token-2.png b/docs/platform/guides/account-management/images/token-2.png similarity index 100% rename from src/en/guides/account-management/images/token-2.png rename to docs/platform/guides/account-management/images/token-2.png diff --git a/src/en/guides/account-management/images/token-3.png b/docs/platform/guides/account-management/images/token-3.png similarity index 100% rename from src/en/guides/account-management/images/token-3.png rename to docs/platform/guides/account-management/images/token-3.png diff --git a/src/en/guides/account-management/images/upgrade-version-1.png b/docs/platform/guides/account-management/images/upgrade-version-1.png similarity index 100% rename from src/en/guides/account-management/images/upgrade-version-1.png rename to docs/platform/guides/account-management/images/upgrade-version-1.png diff --git a/src/en/guides/account-management/images/upgrade-version-2.png b/docs/platform/guides/account-management/images/upgrade-version-2.png similarity index 100% rename from src/en/guides/account-management/images/upgrade-version-2.png rename to docs/platform/guides/account-management/images/upgrade-version-2.png diff --git a/src/en/guides/account-management/images/upgrade-version-3.png b/docs/platform/guides/account-management/images/upgrade-version-3.png similarity index 100% rename from src/en/guides/account-management/images/upgrade-version-3.png rename to docs/platform/guides/account-management/images/upgrade-version-3.png diff --git a/src/en/guides/account-management/images/upgrade-version-4.png b/docs/platform/guides/account-management/images/upgrade-version-4.png similarity index 100% rename from src/en/guides/account-management/images/upgrade-version-4.png rename to docs/platform/guides/account-management/images/upgrade-version-4.png diff --git a/src/en/guides/account-management/kubernetes/index.md b/docs/platform/guides/account-management/kubernetes/_index.md similarity index 58% rename from src/en/guides/account-management/kubernetes/index.md rename to docs/platform/guides/account-management/kubernetes/_index.md index 3d04599..78d9466 100644 --- a/src/en/guides/account-management/kubernetes/index.md +++ b/docs/platform/guides/account-management/kubernetes/_index.md @@ -1,12 +1,12 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-kubernetes name: Kubernetes weight: 100 parent: account-management pre: dropdown -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/account-management/kubernetes/credentials.md b/docs/platform/guides/account-management/kubernetes/credentials.md similarity index 97% rename from src/en/guides/account-management/kubernetes/credentials.md rename to docs/platform/guides/account-management/kubernetes/credentials.md index 23eab1c..4f44777 100644 --- a/src/en/guides/account-management/kubernetes/credentials.md +++ b/docs/platform/guides/account-management/kubernetes/credentials.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-kubernetes-creds name: Credentials parent: account-management-kubernetes weight: 20 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -263,9 +263,9 @@ Details: Then add the credential [here](https://home.appscode.com/user/settings/credentials/create) you got from previous step. - + - + ## Azure @@ -284,7 +284,7 @@ The command will output a JSON response containing the service principal details Then add the credential [here](https://home.appscode.com/user/settings/credentials/create). - + ## Digital Ocean To access Digital Ocean Managed clusters, you need to create a API token from Digital Ocean. @@ -324,7 +324,7 @@ To access GKE clusters, you need to create a GCP service account with with conta Then add the service account credentials [here](https://home.appscode.com/user/settings/credentials/create). - + ## Google OAuth @@ -339,7 +339,7 @@ This will create a credential, you will be able to access your k8s cluster with.


- + ## Linode @@ -353,7 +353,7 @@ Then add the credential [here](https://home.appscode.com/user/settings/credentia


- + ## Rancher diff --git a/src/public/images/aws-cred.png b/docs/platform/guides/account-management/kubernetes/images/aws-cred.png similarity index 100% rename from src/public/images/aws-cred.png rename to docs/platform/guides/account-management/kubernetes/images/aws-cred.png diff --git a/src/public/images/do-cred.png b/docs/platform/guides/account-management/kubernetes/images/do-cred.png similarity index 100% rename from src/public/images/do-cred.png rename to docs/platform/guides/account-management/kubernetes/images/do-cred.png diff --git a/src/public/images/gcp-oauth.png b/docs/platform/guides/account-management/kubernetes/images/gcp-oauth.png similarity index 100% rename from src/public/images/gcp-oauth.png rename to docs/platform/guides/account-management/kubernetes/images/gcp-oauth.png diff --git a/src/public/images/linode-cred.png b/docs/platform/guides/account-management/kubernetes/images/linode-cred.png similarity index 100% rename from src/public/images/linode-cred.png rename to docs/platform/guides/account-management/kubernetes/images/linode-cred.png diff --git a/src/public/images/rancher-cred.png b/docs/platform/guides/account-management/kubernetes/images/rancher-cred.png similarity index 100% rename from src/public/images/rancher-cred.png rename to docs/platform/guides/account-management/kubernetes/images/rancher-cred.png diff --git a/src/en/guides/account-management/manage-profile.md b/docs/platform/guides/account-management/manage-profile.md similarity index 71% rename from src/en/guides/account-management/manage-profile.md rename to docs/platform/guides/account-management/manage-profile.md index 43903ba..7dbcbc0 100644 --- a/src/en/guides/account-management/manage-profile.md +++ b/docs/platform/guides/account-management/manage-profile.md @@ -1,23 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-manageprofile name: Manage Profile, Emails, & Avatar parent: account-management weight: 10 - home_menu: - identifier: home-account-manageprofile - name: Manage Profile, Emails, & Avatar - parent: home-account - weight: 10 - section_menu: - identifier: account-management - name: Account Management - weight: 20 - parent: guides -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -27,7 +17,7 @@ Personalize your account details and profile picture under **USER SETTINGS > Pro ## 1. Update Profile Info -![Update Profile Info](images/manage-profile-1.png) +![Update Profile Info](../images/manage-profile-1.png) Update your public identity and contact information in the **Manage Profile** section: @@ -45,7 +35,7 @@ You can choose between two methods for your profile picture: ### Option B: Custom Upload -![Custom Avatar Upload](images/manage-profile-2.png) +![Custom Avatar Upload](../images/manage-profile-2.png) - Select the **Custom** tab. - **Upload:** Drag and drop an image or select one from storage (Max: **1MB**, Max resolution: **4096 x 3072**). diff --git a/src/en/guides/account-management/manage-security.md b/docs/platform/guides/account-management/manage-security.md similarity index 80% rename from src/en/guides/account-management/manage-security.md rename to docs/platform/guides/account-management/manage-security.md index 8bdb5ab..f736665 100644 --- a/src/en/guides/account-management/manage-security.md +++ b/docs/platform/guides/account-management/manage-security.md @@ -1,19 +1,14 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-security name: Manage Security weight: 30 parent: account-management pre: dropdown - home_menu: - identifier: home-account-security - name: Manage Security - parent: home-account - weight: 30 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Account Security @@ -22,14 +17,14 @@ Manage your account's protection under **USER SETTINGS > Security** in the left- ## 1. Update Password & Linked Accounts -![Update Password and Linked Accounts](images/security-1.png) +![Update Password and Linked Accounts](../images/security-1.png) - **Change Password:** To update your credentials, provide your **Current Password**, followed by a **New Password** and a confirmation in the **Retype Password** field. - **Linked Accounts:** View external accounts (like Google or GitHub) used for authentication and manage their connection to your profile. ## 2. Enroll in Two-Factor Authentication (2FA) -![Two-Factor Authentication Setup](images/security-2.png) +![Two-Factor Authentication Setup](../images/security-2.png) Enable 2FA to require a second verification step during login for enhanced security. @@ -38,7 +33,7 @@ Enable 2FA to require a second verification step during login for enhanced secur ## 3. Manage 2FA & Security Keys -![Manage 2FA and Security Keys](images/security-3.png) +![Manage 2FA and Security Keys](../images/security-3.png) Once 2FA is active, you can manage emergency access and hardware keys. diff --git a/src/en/guides/account-management/oauth2-apps.md b/docs/platform/guides/account-management/oauth2-apps.md similarity index 82% rename from src/en/guides/account-management/oauth2-apps.md rename to docs/platform/guides/account-management/oauth2-apps.md index 8028421..1849bf2 100644 --- a/src/en/guides/account-management/oauth2-apps.md +++ b/docs/platform/guides/account-management/oauth2-apps.md @@ -1,24 +1,19 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-oauth2apps name: Setup OAuth2 Applications parent: account-management weight: 40 - home_menu: - identifier: home-account-oauth2apps - name: Setup OAuth2 Applications - parent: home-account - weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Application Overview -![OAuth2 Applications Overview](images/OAuth1.png) +![OAuth2 Applications Overview](../images/OAuth1.png) Navigate to **User Settings > Applications** to manage how third-party services interact with your account. This page is divided into two sections: @@ -28,7 +23,7 @@ Navigate to **User Settings > Applications** to manage how third-party services ## Create a New Application -![Create New Application](images/OAuth2.png) +![Create New Application](../images/OAuth2.png) On the creation screen, you must provide the following required information: @@ -38,7 +33,7 @@ On the creation screen, you must provide the following required information: ## Secure Your Credentials & Customize -![Client Credentials and Customization](images/OAuth3.png) +![Client Credentials and Customization](../images/OAuth3.png) Once the application is generated, you will see your **Client ID** and **Client Secret**. @@ -49,6 +44,6 @@ Once the application is generated, you will see your **Client ID** and **Client ## Confirmation of Success -![Success Notification](images/OAuth4.png) +![Success Notification](../images/OAuth4.png) After saving your changes or creating an application, a green "Successfully updated" notification will appear at the top of the screen. Your new application will now be visible in the OAuth2 Applications list, ready for use with its assigned Client ID diff --git a/src/en/guides/account-management/orgs-members.md b/docs/platform/guides/account-management/orgs-members.md similarity index 80% rename from src/en/guides/account-management/orgs-members.md rename to docs/platform/guides/account-management/orgs-members.md index c3eeffa..5f84b04 100644 --- a/src/en/guides/account-management/orgs-members.md +++ b/docs/platform/guides/account-management/orgs-members.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-orgmembers name: Manage Organizations parent: account-management weight: 60 - home_menu: - identifier: home-account-orgmembers - name: Manage Organizations - parent: home-account - weight: 60 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -22,7 +17,7 @@ Manage your collaborations and organizational structure via the **ORGANIZATIONS* ## 1. Viewing & Managing Organizations -![Organizations List](images/orgs-members-1.png) +![Organizations List](../images/orgs-members-1.png) The main list displays all organizations you belong to as a creator or member. @@ -31,7 +26,7 @@ The main list displays all organizations you belong to as a creator or member. ## 2. Creating a New Organization -![Create New Organization](images/orgs-members-2.png) +![Create New Organization](../images/orgs-members-2.png) Click **+ New Organization** to establish a new group. diff --git a/src/en/guides/account-management/site-administration/index.md b/docs/platform/guides/account-management/site-administration/_index.md similarity index 59% rename from src/en/guides/account-management/site-administration/index.md rename to docs/platform/guides/account-management/site-administration/_index.md index 1faa115..ee50752 100644 --- a/src/en/guides/account-management/site-administration/index.md +++ b/docs/platform/guides/account-management/site-administration/_index.md @@ -1,12 +1,12 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-siteadmin name: Site Administration weight: 70 parent: account-management pre: dropdown -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/account-management/site-administration/ace-upgrade.md b/docs/platform/guides/account-management/site-administration/ace-upgrade.md similarity index 95% rename from src/en/guides/account-management/site-administration/ace-upgrade.md rename to docs/platform/guides/account-management/site-administration/ace-upgrade.md index 8cecb96..ff00bfd 100644 --- a/src/en/guides/account-management/site-administration/ace-upgrade.md +++ b/docs/platform/guides/account-management/site-administration/ace-upgrade.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - v2_1_0_docs_menu: + docsplatform_{{.version}}: identifier: account-management-siteadmin-ace-upgrade name: ACE Upgrade parent: account-management-siteadmin weight: 60 -menu_name: v2_1_0_docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/account-management/site-administration/authentication-sources.md b/docs/platform/guides/account-management/site-administration/authentication-sources.md similarity index 95% rename from src/en/guides/account-management/site-administration/authentication-sources.md rename to docs/platform/guides/account-management/site-administration/authentication-sources.md index c6746fb..0696086 100644 --- a/src/en/guides/account-management/site-administration/authentication-sources.md +++ b/docs/platform/guides/account-management/site-administration/authentication-sources.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-siteadmin-authentication-sources name: Authentication Sources parent: account-management-siteadmin weight: 50 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/account-management/site-administration/branding.md b/docs/platform/guides/account-management/site-administration/branding.md similarity index 91% rename from src/en/guides/account-management/site-administration/branding.md rename to docs/platform/guides/account-management/site-administration/branding.md index 2079e88..81a0441 100644 --- a/src/en/guides/account-management/site-administration/branding.md +++ b/docs/platform/guides/account-management/site-administration/branding.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-siteadmin-branding name: Branding parent: account-management-siteadmin weight: 70 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/account-management/site-administration/client-org.md b/docs/platform/guides/account-management/site-administration/client-org.md similarity index 97% rename from src/en/guides/account-management/site-administration/client-org.md rename to docs/platform/guides/account-management/site-administration/client-org.md index 0d4570f..2f21a16 100644 --- a/src/en/guides/account-management/site-administration/client-org.md +++ b/docs/platform/guides/account-management/site-administration/client-org.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-siteadmin-clientorg name: Client Organization parent: account-management-siteadmin weight: 75 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/account-management/site-administration/dashboard.md b/docs/platform/guides/account-management/site-administration/dashboard.md similarity index 89% rename from src/en/guides/account-management/site-administration/dashboard.md rename to docs/platform/guides/account-management/site-administration/dashboard.md index 23b13a3..8c169aa 100644 --- a/src/en/guides/account-management/site-administration/dashboard.md +++ b/docs/platform/guides/account-management/site-administration/dashboard.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-siteadmin-dashboard name: Dashboard parent: account-management-siteadmin weight: 10 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/account-management/site-administration/delete-account.md b/docs/platform/guides/account-management/site-administration/delete-account.md similarity index 91% rename from src/en/guides/account-management/site-administration/delete-account.md rename to docs/platform/guides/account-management/site-administration/delete-account.md index 564bd96..2742198 100644 --- a/src/en/guides/account-management/site-administration/delete-account.md +++ b/docs/platform/guides/account-management/site-administration/delete-account.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-siteadmin-deleteaccount name: Delete Account parent: account-management-siteadmin weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/account-management/site-administration/external-authentication-sources.md b/docs/platform/guides/account-management/site-administration/external-authentication-sources.md similarity index 93% rename from src/en/guides/account-management/site-administration/external-authentication-sources.md rename to docs/platform/guides/account-management/site-administration/external-authentication-sources.md index 75b6c8d..71350e6 100644 --- a/src/en/guides/account-management/site-administration/external-authentication-sources.md +++ b/docs/platform/guides/account-management/site-administration/external-authentication-sources.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-siteadmin-external-authentication-sources name: External Authentication Sources parent: account-management-siteadmin weight: 60 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/account-management/site-administration/organizations.md b/docs/platform/guides/account-management/site-administration/organizations.md similarity index 94% rename from src/en/guides/account-management/site-administration/organizations.md rename to docs/platform/guides/account-management/site-administration/organizations.md index 44df71c..db025fa 100644 --- a/src/en/guides/account-management/site-administration/organizations.md +++ b/docs/platform/guides/account-management/site-administration/organizations.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-siteadmin-organizations name: Organizations parent: account-management-siteadmin weight: 30 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/account-management/site-administration/sign-up-configuration.md b/docs/platform/guides/account-management/site-administration/sign-up-configuration.md similarity index 92% rename from src/en/guides/account-management/site-administration/sign-up-configuration.md rename to docs/platform/guides/account-management/site-administration/sign-up-configuration.md index da63892..b8d962b 100644 --- a/src/en/guides/account-management/site-administration/sign-up-configuration.md +++ b/docs/platform/guides/account-management/site-administration/sign-up-configuration.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-siteadmin-signupconfig name: Sign-up Configuration parent: account-management-siteadmin weight: 65 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/account-management/site-administration/user-account.md b/docs/platform/guides/account-management/site-administration/user-account.md similarity index 93% rename from src/en/guides/account-management/site-administration/user-account.md rename to docs/platform/guides/account-management/site-administration/user-account.md index 1318807..50978e1 100644 --- a/src/en/guides/account-management/site-administration/user-account.md +++ b/docs/platform/guides/account-management/site-administration/user-account.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: account-management-siteadmin-useraccount name: User Accounts parent: account-management-siteadmin weight: 20 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/billing-and-usage-guide/_index.md b/docs/platform/guides/billing-and-usage-guide/_index.md similarity index 72% rename from src/en/guides/billing-and-usage-guide/_index.md rename to docs/platform/guides/billing-and-usage-guide/_index.md index efe2295..f2b9df2 100644 --- a/src/en/guides/billing-and-usage-guide/_index.md +++ b/docs/platform/guides/billing-and-usage-guide/_index.md @@ -1,13 +1,14 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: billing-and-usage-guide name: Billing and Usage Guide + parent: guides description: Billing and Usage Guide for AppsCode's products icon: https://img.icons8.com/external-anggara-basic-outline-anggara-putra/96/external-stats-ui-anggara-basic-outline-anggara-putra.png popular: true weight: 50 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/billing-and-usage-guide/cost-management.md b/docs/platform/guides/billing-and-usage-guide/cost-management.md similarity index 95% rename from src/en/guides/billing-and-usage-guide/cost-management.md rename to docs/platform/guides/billing-and-usage-guide/cost-management.md index 84ced1b..6fb8b17 100644 --- a/src/en/guides/billing-and-usage-guide/cost-management.md +++ b/docs/platform/guides/billing-and-usage-guide/cost-management.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: billing-and-usage-guide-cost-management name: Cost Management parent: billing-and-usage-guide weight: 40 - home_menu: - identifier: billing-and-usage-guide-cost-management - name: Cost Management - parent: home-billing - weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- ## **Cluster and Namespace Configuration for Cost Management** diff --git a/src/en/guides/billing-and-usage-guide/dbaas-client-billing.md b/docs/platform/guides/billing-and-usage-guide/dbaas-client-billing.md similarity index 95% rename from src/en/guides/billing-and-usage-guide/dbaas-client-billing.md rename to docs/platform/guides/billing-and-usage-guide/dbaas-client-billing.md index 10af528..c9f288e 100644 --- a/src/en/guides/billing-and-usage-guide/dbaas-client-billing.md +++ b/docs/platform/guides/billing-and-usage-guide/dbaas-client-billing.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: billing-and-usage-guide-dbaas-client-billing name: DBaaS Client Billing parent: billing-and-usage-guide weight: 30 - home_menu: - identifier: billing-and-usage-guide-dbaas-client-billing - name: DBaaS Client Billing - parent: home-billing - weight: 30 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- ### **DBaaS Provider Billing APIs** @@ -31,11 +26,11 @@ To use these APIs, you must authenticate your requests. Usage information is col 1. **Generate an Access Token:** Create a user-scoped API token from your account. - Go to User Settings and open the `Tokens` tab, then click on `Generate Token`. - ![Navigate to API Tokens](./images/create-token-ui-navigation.png) + ![Navigate to API Tokens](../images/create-token-ui-navigation.png) - Provide a token name and (optionally) an expiry, then click on `Generate`. - ![Create token options](./images/create-token-options.png) + ![Create token options](../images/create-token-options.png) - Copy the token and store it securely. It’s shown only once. - ![Copy the generated token](./images/created-token-result.png) + ![Copy the generated token](../images/created-token-result.png) 2. **Use as a Bearer Token:** This token must be included in the Authorization header of your API requests as a Bearer token. **Example Header:** Authorization: Bearer diff --git a/src/en/guides/billing-and-usage-guide/images/create-token-options.png b/docs/platform/guides/billing-and-usage-guide/images/create-token-options.png similarity index 100% rename from src/en/guides/billing-and-usage-guide/images/create-token-options.png rename to docs/platform/guides/billing-and-usage-guide/images/create-token-options.png diff --git a/src/en/guides/billing-and-usage-guide/images/create-token-ui-navigation.png b/docs/platform/guides/billing-and-usage-guide/images/create-token-ui-navigation.png similarity index 100% rename from src/en/guides/billing-and-usage-guide/images/create-token-ui-navigation.png rename to docs/platform/guides/billing-and-usage-guide/images/create-token-ui-navigation.png diff --git a/src/en/guides/billing-and-usage-guide/images/created-token-result.png b/docs/platform/guides/billing-and-usage-guide/images/created-token-result.png similarity index 100% rename from src/en/guides/billing-and-usage-guide/images/created-token-result.png rename to docs/platform/guides/billing-and-usage-guide/images/created-token-result.png diff --git a/src/en/guides/billing-and-usage-guide/images/usage-section-billable-usage-home.png b/docs/platform/guides/billing-and-usage-guide/images/usage-section-billable-usage-home.png similarity index 100% rename from src/en/guides/billing-and-usage-guide/images/usage-section-billable-usage-home.png rename to docs/platform/guides/billing-and-usage-guide/images/usage-section-billable-usage-home.png diff --git a/src/en/guides/billing-and-usage-guide/images/usage-section-home.png b/docs/platform/guides/billing-and-usage-guide/images/usage-section-home.png similarity index 100% rename from src/en/guides/billing-and-usage-guide/images/usage-section-home.png rename to docs/platform/guides/billing-and-usage-guide/images/usage-section-home.png diff --git a/src/en/guides/billing-and-usage-guide/images/usage-section-prod-nonprod-usage-home.png b/docs/platform/guides/billing-and-usage-guide/images/usage-section-prod-nonprod-usage-home.png similarity index 100% rename from src/en/guides/billing-and-usage-guide/images/usage-section-prod-nonprod-usage-home.png rename to docs/platform/guides/billing-and-usage-guide/images/usage-section-prod-nonprod-usage-home.png diff --git a/src/en/guides/billing-and-usage-guide/images/usage-section-product-dropdown.png b/docs/platform/guides/billing-and-usage-guide/images/usage-section-product-dropdown.png similarity index 100% rename from src/en/guides/billing-and-usage-guide/images/usage-section-product-dropdown.png rename to docs/platform/guides/billing-and-usage-guide/images/usage-section-product-dropdown.png diff --git a/src/en/guides/billing-and-usage-guide/images/usage-section-select-month.png b/docs/platform/guides/billing-and-usage-guide/images/usage-section-select-month.png similarity index 100% rename from src/en/guides/billing-and-usage-guide/images/usage-section-select-month.png rename to docs/platform/guides/billing-and-usage-guide/images/usage-section-select-month.png diff --git a/src/en/guides/billing-and-usage-guide/images/usage-section-usage-type-dropdown.png b/docs/platform/guides/billing-and-usage-guide/images/usage-section-usage-type-dropdown.png similarity index 100% rename from src/en/guides/billing-and-usage-guide/images/usage-section-usage-type-dropdown.png rename to docs/platform/guides/billing-and-usage-guide/images/usage-section-usage-type-dropdown.png diff --git a/src/en/guides/billing-and-usage-guide/images/usage-section-view-by-dropdown.png b/docs/platform/guides/billing-and-usage-guide/images/usage-section-view-by-dropdown.png similarity index 100% rename from src/en/guides/billing-and-usage-guide/images/usage-section-view-by-dropdown.png rename to docs/platform/guides/billing-and-usage-guide/images/usage-section-view-by-dropdown.png diff --git a/src/en/guides/billing-and-usage-guide/overview.md b/docs/platform/guides/billing-and-usage-guide/overview.md similarity index 82% rename from src/en/guides/billing-and-usage-guide/overview.md rename to docs/platform/guides/billing-and-usage-guide/overview.md index c9a9313..4e9a457 100644 --- a/src/en/guides/billing-and-usage-guide/overview.md +++ b/docs/platform/guides/billing-and-usage-guide/overview.md @@ -1,23 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: billing-and-usage-guide-overview name: Overview parent: billing-and-usage-guide weight: 10 - home_menu: - identifier: billing-and-usage-guide-overview - name: Overview - parent: home-billing - weight: 10 - section_menu: - identifier: billing-and-usage-guide - name: Billing and Usage Guide - weight: 50 - parent: guides -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # **Billing and Usage Guide** @@ -30,21 +20,21 @@ The AppsCode Billing Console is a web-based hub at [AppsCode Billing Console](ht This section focuses on the **Usage** dashboard, which shows the resources consumed by downstream AppsCode services like KubeDB running in your clusters. -![usage-dashboard](images/usage-section-home.png) +![usage-dashboard](../images/usage-section-home.png) ### **Billing View (Month, Product, Usage, View By)** * **Month:** Our billing is month-specific. Pick the month to review and the dashboard refreshes all charts and tables to that month. -![usage-month-selector](images/usage-section-select-month.png) +![usage-month-selector](../images/usage-section-select-month.png) * **Product:** Use the Product dropdown to scope data to one product (KubeDB, KubeStash, Voyager, KubeVault). -![usage-product-selector](images/usage-section-product-dropdown.png) +![usage-product-selector](../images/usage-section-product-dropdown.png) * **Usage Types:** * **Total Usage**: total consumption for the selected scope, measured primarily in `Core-Minute` and `GiB-Minute`. * **Billable Usage**: the portion that is billable, measured primarily in `Core-Month` and `GiB-Month`. Billable is computed only if your organization has a paid contract for the selected product. If there’s no paid contract, a 30‑day free contract is applied and usage during this period is counted as `free usage`. See the [Contract docs](http://appscode.com/docs/en/guides/license-management/contract.html) for details. -![usage-usage-type-selector](images/usage-section-usage-type-dropdown.png) +![usage-usage-type-selector](../images/usage-section-usage-type-dropdown.png) * **View By:** * Choose how data is grouped. For Database view, you can drill down **Kinds → Clusters → Deployments** (for example, `kubedb.com/Postgres` → `clusters running Postgres` → `individual database deployments`). -![usage-view-by-selector](images/usage-section-view-by-dropdown.png) +![usage-view-by-selector](../images/usage-section-view-by-dropdown.png) Additional View By filters - **View By: Cluster** — Start at clusters to see per‑cluster usage, then drill down **Clusters → Kinds → Deployments** (for example, `cluster-prod` → `kubedb.com/Postgres` → `individual postgres database deployments in cluster-prod`). @@ -53,12 +43,12 @@ Additional View By filters ### **Billable Usage and Cost Management** Billable shows the chargeable portion of usage for the selected month and product, reported in `Core-Month` and `GiB-Month`. -![billable-usage-home](images/usage-section-billable-usage-home.png) +![billable-usage-home](../images/usage-section-billable-usage-home.png) What you’ll see in the Billable table - **Billable Usage:** total chargeable usage for the month after applying contracts and rules. - **PROD/NON-PROD usage:** billable usage split by cluster mode—clusters marked `prod` are priced at the `PROD` rate; clusters marked `qa`, `staging`, or `dev` are priced at the `NON‑PROD` rate. -![usage-billable-prod-nonprod](images/usage-section-prod-nonprod-usage-home.png) +![usage-billable-prod-nonprod](../images/usage-section-prod-nonprod-usage-home.png) - **Free usage:** usage that isn’t billed. This includes: - **Trial usage** from namespaces annotated `ace.appscode.com/enable-resource-trial=true` (`first one‑month` free per database starting from its creation in that namespace). - Usage covered by the **30‑day free contract** when there’s no paid contract for the selected product. diff --git a/docs/platform/guides/cluster-management/_index.md b/docs/platform/guides/cluster-management/_index.md new file mode 100644 index 0000000..529a078 --- /dev/null +++ b/docs/platform/guides/cluster-management/_index.md @@ -0,0 +1,12 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: cluster-management + name: Cluster Management + parent: guides + popular: true + weight: 30 +menu_name: docsplatform_{{.version}} +section_menu_id: guides +--- diff --git a/src/en/guides/cluster-management/add-cluster/_index.md b/docs/platform/guides/cluster-management/add-cluster/_index.md similarity index 58% rename from src/en/guides/cluster-management/add-cluster/_index.md rename to docs/platform/guides/cluster-management/add-cluster/_index.md index ca320f0..2efea62 100644 --- a/src/en/guides/cluster-management/add-cluster/_index.md +++ b/docs/platform/guides/cluster-management/add-cluster/_index.md @@ -1,12 +1,12 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-add name: Adding a Cluster weight: 10 parent: cluster-management pre: dropdown -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/cluster-management/add-cluster/create-vendor-managed.md b/docs/platform/guides/cluster-management/add-cluster/create-vendor-managed.md similarity index 65% rename from src/en/guides/cluster-management/add-cluster/create-vendor-managed.md rename to docs/platform/guides/cluster-management/add-cluster/create-vendor-managed.md index 7e842b5..aee2045 100644 --- a/src/en/guides/cluster-management/add-cluster/create-vendor-managed.md +++ b/docs/platform/guides/cluster-management/add-cluster/create-vendor-managed.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-add-createvendormanaged name: Create Vendor Managed Clusters parent: cluster-management-add weight: 50 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/cluster-management/add-cluster/import-rancher-cluster.md b/docs/platform/guides/cluster-management/add-cluster/import-rancher-cluster.md similarity index 94% rename from src/en/guides/cluster-management/add-cluster/import-rancher-cluster.md rename to docs/platform/guides/cluster-management/add-cluster/import-rancher-cluster.md index 9ff91f8..1f4b3b6 100644 --- a/src/en/guides/cluster-management/add-cluster/import-rancher-cluster.md +++ b/docs/platform/guides/cluster-management/add-cluster/import-rancher-cluster.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-add-rancher name: Import Rancher Managed Clusters parent: cluster-management-add weight: 15 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/cluster-management/add-cluster/import-vendor-managed.md b/docs/platform/guides/cluster-management/add-cluster/import-vendor-managed.md similarity index 88% rename from src/en/guides/cluster-management/add-cluster/import-vendor-managed.md rename to docs/platform/guides/cluster-management/add-cluster/import-vendor-managed.md index 6de1ff6..b531e37 100644 --- a/src/en/guides/cluster-management/add-cluster/import-vendor-managed.md +++ b/docs/platform/guides/cluster-management/add-cluster/import-vendor-managed.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-add-vendormanaged name: Import Vendor Managed Clusters parent: cluster-management-add weight: 10 - home_menu: - identifier: home-cluster-add-vendormanaged - name: Import Vendor Managed Clusters - parent: home-cluster - weight: 10 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/cluster-management/add-cluster/overview.md b/docs/platform/guides/cluster-management/add-cluster/overview.md similarity index 93% rename from src/en/guides/cluster-management/add-cluster/overview.md rename to docs/platform/guides/cluster-management/add-cluster/overview.md index bcb6fd0..bb66233 100644 --- a/src/en/guides/cluster-management/add-cluster/overview.md +++ b/docs/platform/guides/cluster-management/add-cluster/overview.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-add-overview name: Overview parent: cluster-management-add weight: 1 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Adding a Cluster to AppsCode Dashboard diff --git a/docs/platform/guides/cluster-management/add-cluster/self-managed/_index.md b/docs/platform/guides/cluster-management/add-cluster/self-managed/_index.md new file mode 100644 index 0000000..6e0b127 --- /dev/null +++ b/docs/platform/guides/cluster-management/add-cluster/self-managed/_index.md @@ -0,0 +1,11 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: cluster-management-add-selfmanaged + name: Import Self-Managed Clusters + parent: cluster-management-add + weight: 20 +menu_name: docsplatform_{{.version}} +section_menu_id: guides +--- \ No newline at end of file diff --git a/src/en/guides/cluster-management/add-cluster/self-managed/import-private.md b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-private.md similarity index 87% rename from src/en/guides/cluster-management/add-cluster/self-managed/import-private.md rename to docs/platform/guides/cluster-management/add-cluster/self-managed/import-private.md index 12a159a..e80ecac 100644 --- a/src/en/guides/cluster-management/add-cluster/self-managed/import-private.md +++ b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-private.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-add-importprivatecluster name: Import Private Clusters parent: cluster-management-add-selfmanaged weight: 40 - home_menu: - identifier: home-cluster-add-importprivatecluster - name: Import Private Clusters - parent: home-cluster - weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/cluster-management/add-cluster/self-managed/import-public.md b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-public.md similarity index 86% rename from src/en/guides/cluster-management/add-cluster/self-managed/import-public.md rename to docs/platform/guides/cluster-management/add-cluster/self-managed/import-public.md index af04fac..6e3d7e2 100644 --- a/src/en/guides/cluster-management/add-cluster/self-managed/import-public.md +++ b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-public.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-add-importpubliccluster name: Import Public Clusters parent: cluster-management-add-selfmanaged weight: 30 - home_menu: - identifier: home-cluster-add-importpubliccluster - name: Import Public Clusters - parent: home-cluster - weight: 30 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/cluster-management/add-cluster/self-managed/import-self-managed.md b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-self-managed.md similarity index 89% rename from src/en/guides/cluster-management/add-cluster/self-managed/import-self-managed.md rename to docs/platform/guides/cluster-management/add-cluster/self-managed/import-self-managed.md index a038aaf..c3d3280 100644 --- a/src/en/guides/cluster-management/add-cluster/self-managed/import-self-managed.md +++ b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-self-managed.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-add-selfmanaged-overview name: Overview parent: cluster-management-add-selfmanaged weight: 10 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Adding a Self-Managed Cluster to AppsCode Dashboard diff --git a/src/en/guides/cluster-management/cluster-features.md b/docs/platform/guides/cluster-management/cluster-features.md similarity index 89% rename from src/en/guides/cluster-management/cluster-features.md rename to docs/platform/guides/cluster-management/cluster-features.md index 314d8c4..b302915 100644 --- a/src/en/guides/cluster-management/cluster-features.md +++ b/docs/platform/guides/cluster-management/cluster-features.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-feature name: Manage Feature Sets parent: cluster-management weight: 30 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Manage Feature Sets @@ -20,7 +20,7 @@ section_menu: guides The Feature Sets grid on the Cluster Overview page shows all available product modules and their current installation status. -![Feature Sets overview grid — all 18 Feature Sets with their status badges](images/cluster-features/features.png) +![Feature Sets overview grid — all 18 Feature Sets with their status badges](../images/cluster-features/features.png) | Feature Set | Description | |---|---| @@ -47,7 +47,7 @@ The Feature Sets grid on the Cluster Overview page shows all available product m Once you have enabled some Feature Sets, the Cluster Overview grid reflects the updated statuses — cards previously showing **Not Installed** will update to **Ready**. -![Cluster Overview Feature Sets grid after enabling Backup & Recovery and Databases — both show Ready](images/cluster-features/features-after-enable-some-features.png) +![Cluster Overview Feature Sets grid after enabling Backup & Recovery and Databases — both show Ready](../images/cluster-features/features-after-enable-some-features.png) --- @@ -62,7 +62,7 @@ From the Cluster Overview, click the **Backup & Recovery** card. The Feature Set - A **Components** section with three cards: **Stash 2.0** *(Recommended)*, **Stash Presets** *(Recommended)*, and **Stash** - A green **Enable** button on each component card, and a master **Enable** button at the top-right -![Backup & Recovery Feature Set page — Components listed with individual Enable buttons](images/cluster-features/features-backup1.png) +![Backup & Recovery Feature Set page — Components listed with individual Enable buttons](../images/cluster-features/features-backup1.png) ### Step 2 — Select Components and Configure the Preset @@ -81,7 +81,7 @@ Click the top-right **Enable** button to open the **Enable Feature Set modal**. Fill in all required fields and click **Preview** to advance. -![Backup & Recovery Enable modal — component checkboxes and Preset Configuration form](images/cluster-features/features-backup2.png) +![Backup & Recovery Enable modal — component checkboxes and Preset Configuration form](../images/cluster-features/features-backup2.png) ### Step 3 — Review the Generated Helm Values @@ -93,7 +93,7 @@ The modal advances to the **Values Preview** step: - Click **Compare default values** to diff against the out-of-the-box configuration - Click **← Previous** to go back, or **Deploy** to apply -![Values preview — Helm release YAML editor with Edit/Preview Changes tabs and Deploy button](images/cluster-features/features-backup3.png) +![Values preview — Helm release YAML editor with Edit/Preview Changes tabs and Deploy button](../images/cluster-features/features-backup3.png) ### Step 4 — Deploy and Monitor Progress @@ -105,17 +105,17 @@ Enabling FeatureSet `opscenter-backup` started! Wait for the log stream to complete, then close the modal. -![Deploy progress modal showing live log output for Backup & Recovery](images/cluster-features/features-backup4.png) +![Deploy progress modal showing live log output for Backup & Recovery](../images/cluster-features/features-backup4.png) ### Step 5 — Verify the Feature Set Status After deployment, the Feature Set page shows the updated component statuses. If a dependency is still being pulled, a banner reads: *"Feature 'stash-presets' is enabled but not ready."* The affected component cards show a ⚠️ warning icon with a tooltip *"Required workload does not exist."* -![Backup & Recovery page in partially-ready state — warning icons on components still initializing](images/cluster-features/features-backup5.png) +![Backup & Recovery page in partially-ready state — warning icons on components still initializing](../images/cluster-features/features-backup5.png) Once all components are running, all cards show a green ✓ checkmark and both **Configure** and **Disable** buttons appear at the top-right — confirming the Feature Set is fully **Ready**. -![Backup & Recovery page fully Ready — all components show green checkmarks, Configure and Disable buttons visible](images/cluster-features/features-backup6.png) +![Backup & Recovery page fully Ready — all components show green checkmarks, Configure and Disable buttons visible](../images/cluster-features/features-backup6.png) --- @@ -130,7 +130,7 @@ Click the **Databases** card on the Cluster Overview. The Feature Set page opens - A single **KubeDB** component card *(Recommended)* with sub-components: `KubeDB`, `KubeDB Opscenter`, `KubeDB UI Presets`, and **More** - A green **Enable** button on the component card and at the top-right -![Databases Feature Set page — KubeDB component with Enable button](images/cluster-features/feature-databases1.png) +![Databases Feature Set page — KubeDB component with Enable button](../images/cluster-features/feature-databases1.png) ### Step 2 — Select Database Types @@ -143,7 +143,7 @@ Click the **Enable** button to open the **Enable Feature Set modal**. The modal Select your required database types and click **Preview**. -![Databases Enable modal — KubeDB component checkboxes and database type multi-select](images/cluster-features/feature-databases2.png) +![Databases Enable modal — KubeDB component checkboxes and database type multi-select](../images/cluster-features/feature-databases2.png) ### Step 3 — Review the Generated Helm Values @@ -154,7 +154,7 @@ The modal advances to the YAML values preview. Three Helm release files are list The YAML editor on the right shows the `featureGates` configuration — each selected database type is set to `true`, others to `false`. Use **Edit / Preview Changes** tabs to review, then click **Deploy**. -![Databases Values preview — featureGates YAML showing enabled database types](images/cluster-features/feature-databases3.png) +![Databases Values preview — featureGates YAML showing enabled database types](../images/cluster-features/feature-databases3.png) ### Step 4 — Deploy and Monitor Progress @@ -167,17 +167,17 @@ Deploying resources for FeatureSet `opscenter-datastore` started! Wait for the log to complete, then close the modal. -![Databases deploy progress modal showing live log output](images/cluster-features/feature-databases4.png) +![Databases deploy progress modal showing live log output](../images/cluster-features/feature-databases4.png) ### Step 5 — Verify the Feature Set Status After deployment, the Databases page shows the KubeDB component status. While resources are still initializing, the banner reads: *"Feature 'kubedb' is enabled but not ready."* The component card shows a ⚠️ warning icon and tooltip *"Required workload does not exist."* -![Databases page in partially-ready state — KubeDB component showing warning with tooltip](images/cluster-features/feature-databases5.png) +![Databases page in partially-ready state — KubeDB component showing warning with tooltip](../images/cluster-features/feature-databases5.png) Once KubeDB is fully running, the component card shows a green ✓ checkmark and the page header shows **Configure** and **Disable** buttons — confirming the Feature Set is fully **Ready**. -![Databases page fully Ready — KubeDB component showing green checkmark](images/cluster-features/feature-databases6.png) +![Databases page fully Ready — KubeDB component showing green checkmark](../images/cluster-features/feature-databases6.png) --- diff --git a/src/en/guides/cluster-management/cluster-helm-charts.md b/docs/platform/guides/cluster-management/cluster-helm-charts.md similarity index 94% rename from src/en/guides/cluster-management/cluster-helm-charts.md rename to docs/platform/guides/cluster-management/cluster-helm-charts.md index 458eb65..0545b86 100644 --- a/src/en/guides/cluster-management/cluster-helm-charts.md +++ b/docs/platform/guides/cluster-management/cluster-helm-charts.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-helmcharts name: Manage Cluster Helm Charts parent: cluster-management weight: 50 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/cluster-management/cluster-overview.md b/docs/platform/guides/cluster-management/cluster-overview.md similarity index 91% rename from src/en/guides/cluster-management/cluster-overview.md rename to docs/platform/guides/cluster-management/cluster-overview.md index 1f23676..ad4b338 100644 --- a/src/en/guides/cluster-management/cluster-overview.md +++ b/docs/platform/guides/cluster-management/cluster-overview.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-overview name: Cluster Overview parent: cluster-management weight: 10 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Cluster Overview @@ -22,7 +22,7 @@ From the **AppsCode Console UI** home screen, you will see the **ALL CLUSTERS** Click on any cluster card to open its Overview page. -![AppsCode home screen showing the cluster list — click a cluster card to open its Overview](images/cluster-overview/cluster-overview-1.png) +![AppsCode home screen showing the cluster list — click a cluster card to open its Overview](../images/cluster-overview/cluster-overview-1.png) > The **+ Add Cluster** tile lets you import a new cluster at any time. @@ -50,7 +50,7 @@ Two action buttons appear top-right inside this section: - **Connect** — Downloads a KubeConfig for direct `kubectl` access - **Remove** — Disconnects and removes the cluster from AppsCode -![Cluster Overview page showing Basic info, Feature Sets grid, and Nodes section](images/cluster-overview/cluster-overview-2.png) +![Cluster Overview page showing Basic info, Feature Sets grid, and Nodes section](../images/cluster-overview/cluster-overview-2.png) --- @@ -63,7 +63,7 @@ Click the **Connect** button to open the **Kube Config** modal. This dialog show You can use this kubeconfig with `kubectl` to interact directly with the cluster from your terminal. -![Kube Config modal showing the cluster kubeconfig YAML with Download and Copy buttons](images/cluster-overview/cluster-overview-3.png) +![Kube Config modal showing the cluster kubeconfig YAML with Download and Copy buttons](../images/cluster-overview/cluster-overview-3.png) --- @@ -103,7 +103,7 @@ Each Feature Set card shows a status badge: Hover over any **Not Installed** card to see a tooltip like *"No feature enabled yet for this feature set."* -![Feature Sets grid with status badges — Ready (green) and Not Installed (red)](images/cluster-overview/cluster-overview-4.png) +![Feature Sets grid with status badges — Ready (green) and Not Installed (red)](../images/cluster-overview/cluster-overview-4.png) Click any Feature Set card to open the **Feature Set Management** page where you can enable or configure its components. See [Feature Management](cluster-features.md) for a full walkthrough. @@ -122,7 +122,7 @@ Scroll past the **Feature Sets** grid to the **Nodes** section. Each registered Click **Nodes** in the left sidebar to open the dedicated **Nodes list page**, which shows all nodes with their labels and annotations in a table format. -![Nodes list page showing the cluster nodes with labels and annotations](images/cluster-overview/cluster-nodes-1.png) +![Nodes list page showing the cluster nodes with labels and annotations](../images/cluster-overview/cluster-nodes-1.png) --- @@ -135,7 +135,7 @@ Click on a node's name in the Nodes list to open the **Node Detail** page. This Use the **Edit** button (top-right) to modify the node spec, or **Delete** to remove the node from the cluster. -![Node detail page showing Basic info — Name, Namespace, Labels, and Annotations](images/cluster-overview/cluster-nodes-2.png) +![Node detail page showing Basic info — Name, Namespace, Labels, and Annotations](../images/cluster-overview/cluster-nodes-2.png) ### Editing a Node @@ -146,7 +146,7 @@ Clicking **Edit** opens a structured form where you can modify: Switch between **Form**, **YAML**, and **JSON** views using the tabs at the top-right of the editor. -![Node edit form showing Pod CIDRs, Taints, and the Unschedulable toggle](images/cluster-overview/cluster-nodes-edit-1.png) +![Node edit form showing Pod CIDRs, Taints, and the Unschedulable toggle](../images/cluster-overview/cluster-nodes-edit-1.png) --- diff --git a/src/en/guides/cluster-management/cluster-presets.md b/docs/platform/guides/cluster-management/cluster-presets.md similarity index 83% rename from src/en/guides/cluster-management/cluster-presets.md rename to docs/platform/guides/cluster-management/cluster-presets.md index 37dcf87..646aebc 100644 --- a/src/en/guides/cluster-management/cluster-presets.md +++ b/docs/platform/guides/cluster-management/cluster-presets.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-preset name: Manage Presets parent: cluster-management weight: 70 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Manage Cluster Presets @@ -26,13 +26,13 @@ Each row shows: - **Annotations** — Key labels attached to the preset (e.g., `ace.appscode.com/managed: true`, `app.kubernetes.io/managed-by`) - **Age** — How long ago the preset was created -![Cluster Presets list page — showing presets with their names, annotations, and age](images/cluster-presets/preset.png) +![Cluster Presets list page — showing presets with their names, annotations, and age](../images/cluster-presets/preset.png) > Presets are automatically created when you enable a Feature Set that requires preset configuration (such as Backup & Recovery). After enabling a Feature Set, you may see a new preset appear in this list. > -> ![Feature Set list — pointing to the "Backup & Recovery" feature](images/cluster-presets/preset-enable.png) +> ![Feature Set list — pointing to the "Backup & Recovery" feature](../images/cluster-presets/preset-enable.png) -![Cluster Presets list after enabling a new Feature Set — "stash-presets" and "kubedb-ui-presets" visible](images/cluster-presets/presets-after-feature-enable.png) +![Cluster Presets list after enabling a new Feature Set — "stash-presets" and "kubedb-ui-presets" visible](../images/cluster-presets/presets-after-feature-enable.png) --- @@ -47,7 +47,7 @@ The **Basic Info** tab also shows a **Namespace Presets** table with all namespa A green **Extend to Namespace** button (top-right) creates a namespace-scoped copy of this preset. -![Preset detail page — Basic Info tab showing Name, UID, and an empty Namespace Presets table](images/cluster-presets/present-basic-info.png) +![Preset detail page — Basic Info tab showing Name, UID, and an empty Namespace Presets table](../images/cluster-presets/present-basic-info.png) --- @@ -66,7 +66,7 @@ The edit form presents each configurable section as a collapsible card. For exam Update the values as needed and click **Preview** to advance to the review step. -![Edit Values form — collapsible sections for Encryption Secret, Retention Policy, Storage Ref, and Schedule](images/cluster-presets/stash-preset-edit-values1.png) +![Edit Values form — collapsible sections for Encryption Secret, Retention Policy, Storage Ref, and Schedule](../images/cluster-presets/stash-preset-edit-values1.png) ### Preview the Generated YAML @@ -75,7 +75,7 @@ After clicking **Preview**, the page displays the full generated `stash-presets` Click **Submit** to apply the updated preset values to the cluster. -![Preview step — full YAML spec rendered in the editor with Submit button at bottom-right](images/cluster-presets/stash-preset-edit-values2.png) +![Preview step — full YAML spec rendered in the editor with Submit button at bottom-right](../images/cluster-presets/stash-preset-edit-values2.png) --- @@ -90,41 +90,41 @@ The KubeDB preset configuration is organized into four main sections: 3. **Monitoring & Backups specifics** — Configure monitoring agents and default backup settings. 4. **Extras** — Additional configuration fields. -![KubeDB Edit Values form — overview of Machine, Database, and Monitoring sections](images/cluster-presets/db-preset-edit-values1.png) +![KubeDB Edit Values form — overview of Machine, Database, and Monitoring sections](../images/cluster-presets/db-preset-edit-values1.png) ### Machine Specifics In this section, you can define if users are allowed to modify the deployment type, cluster tier, and node placement. You can also specify the available options and default values for these fields. -![Machine Specifics — configuring Deployment Type and Cluster Tier defaults](images/cluster-presets/db-preset-edit-values2.png) +![Machine Specifics — configuring Deployment Type and Cluster Tier defaults](../images/cluster-presets/db-preset-edit-values2.png) ### Database Specifics The **Database Specifics** section is where you manage settings for different database engines. You can enable or disable specific versions and modes for each database type. -![Database Specifics — list of supported databases in the preset](images/cluster-presets/db-preset-edit-values3.png) +![Database Specifics — list of supported databases in the preset](../images/cluster-presets/db-preset-edit-values3.png) For example, in the **Postgres** subsection, you can toggle which versions (e.g., 13.x, 14.x) and modes (Standalone, Cluster) are available to users. -![Postgres settings — enabling specific versions and replica modes](images/cluster-presets/db-preset-edit-values4.png) +![Postgres settings — enabling specific versions and replica modes](../images/cluster-presets/db-preset-edit-values4.png) You can also configure default **Auth Credentials**, **Storage Classes**, and **TLS** settings that will be applied to new database instances. -![Additional Database settings — Auth Credentials, Custom Configuration, and Storage Class](images/cluster-presets/db-preset-edit-values5.png) +![Additional Database settings — Auth Credentials, Custom Configuration, and Storage Class](../images/cluster-presets/db-preset-edit-values5.png) ### Monitoring & Backup Specifics Configure the default monitoring agent and resources (CPU/Memory). You can also enable or disable backups by default and specify if they should be managed via `BackupConfiguration` or `BackupBlueprint`. -![Monitoring & Backups — setting up Prometheus agent and default backup behavior](images/cluster-presets/db-preset-edit-values6.png) -![Backup and Archiver settings — Point In Time Recovery configuration](images/cluster-presets/db-preset-edit-values7.png) +![Monitoring & Backups — setting up Prometheus agent and default backup behavior](../images/cluster-presets/db-preset-edit-values6.png) +![Backup and Archiver settings — Point In Time Recovery configuration](../images/cluster-presets/db-preset-edit-values7.png) ### Preview and Submit After completing your changes, click **Preview** to review the generated YAML specification. -![KubeDB Preset Preview — reviewing the final YAML before submission](images/cluster-presets/db-preset-edit-values8.png) +![KubeDB Preset Preview — reviewing the final YAML before submission](../images/cluster-presets/db-preset-edit-values8.png) Click **Submit** to update the `kubedb-ui-presets` configuration in your cluster. @@ -138,11 +138,11 @@ A **Presetless Namespace** dropdown appears, listing all namespaces in the clust Select the target namespace from the list. -![Extend to Namespace page — dropdown listing available namespaces for the preset to be applied to](images/cluster-presets/preset-extend-to-namespace1.png) +![Extend to Namespace page — dropdown listing available namespaces for the preset to be applied to](../images/cluster-presets/preset-extend-to-namespace1.png) After selecting the namespace, a **Preset Values** editor appears (YAML/JSON). You can customize the values specifically for this namespace before applying. Click **Apply** to create the namespace-scoped preset copy. -![Preset Values editor — namespace-specific YAML with Apply button at the bottom](images/cluster-presets/preset-extend-to-namespace2.png) +![Preset Values editor — namespace-specific YAML with Apply button at the bottom](../images/cluster-presets/preset-extend-to-namespace2.png) --- diff --git a/src/en/guides/cluster-management/cluster-sidebar.md b/docs/platform/guides/cluster-management/cluster-sidebar.md similarity index 89% rename from src/en/guides/cluster-management/cluster-sidebar.md rename to docs/platform/guides/cluster-management/cluster-sidebar.md index ce77c71..c67d138 100644 --- a/src/en/guides/cluster-management/cluster-sidebar.md +++ b/docs/platform/guides/cluster-management/cluster-sidebar.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-sidebar name: Customize Cluster Sidebar parent: cluster-management weight: 60 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Customize the Cluster Sidebar @@ -20,7 +20,7 @@ The **Cluster Sidebar** is your primary navigation panel inside a connected clus From the AppsCode console, click on your cluster (e.g., `default`) to open the **Cluster Overview** page. The left sidebar shows the default set of sections: **Kubernetes**, **Workloads**, **Helm**, **Datastore**, **Service & Discovery**, **Config**, **Storage**, **Monitoring**, **Security**, and **Admin**. -![The default Cluster Overview page with the default sidebar navigation](images/cluster-sidebar/sidebar-before-update.png) +![The default Cluster Overview page with the default sidebar navigation](../images/cluster-sidebar/sidebar-before-update.png) > **Tip:** The default sidebar already covers the most common resources. You only need to open Sidebar Settings if you want to add, remove, or rearrange menu items. @@ -41,7 +41,7 @@ At the top-right of the page are two action buttons: - **Default** — Resets the sidebar back to the original default layout - **Save** — Saves your current changes -![Sidebar Settings page showing Available Menus on the left and Updated List on the right](images/cluster-sidebar/sidebar-1.png) +![Sidebar Settings page showing Available Menus on the left and Updated List on the right](../images/cluster-sidebar/sidebar-1.png) --- @@ -51,7 +51,7 @@ The **All Available Menus** panel lists hundreds of resource types grouped by AP For example, typing `cert` instantly filters the list and highlights all matches — such as **Cert Manager → Certificate**, **Certificate → CertificateSigningRequest**, and so on. A result counter (e.g., *Found 4 Search Results for 'cert'*) and pagination controls help you navigate through matches. -![Search bar in action — typing "cert" narrows the list and highlights matching resources](images/cluster-sidebar/sidebar-search-menu.png) +![Search bar in action — typing "cert" narrows the list and highlights matching resources](../images/cluster-sidebar/sidebar-search-menu.png) > **Note:** The search is case-insensitive. Matched groups and items are highlighted in green so they stand out clearly. @@ -63,7 +63,7 @@ To add a resource to your sidebar, simply **drag** it from the **All Available M In the example below, the user is dragging **Appscode K8s Management → ProjectQuota** into the current sidebar layout. You can see it appearing as a floating drag indicator (`⠿`) in the left panel. -![Dragging "ProjectQuota" from Available Menus into the Updated List](images/cluster-sidebar/sidebar-updating.png) +![Dragging "ProjectQuota" from Available Menus into the Updated List](../images/cluster-sidebar/sidebar-updating.png) You can also drag existing items within the **Updated List** panel to reorder them according to your workflow preferences. @@ -75,7 +75,7 @@ Once you are satisfied with your layout, click the green **Save** button in the The sidebar of the cluster will immediately reflect your changes. In the example below, after saving, the **Appscode K8s Management** group with **ProjectQuota** now appears in the cluster sidebar on the left. -![The Cluster Overview page after saving — the sidebar now shows ProjectQuota under Appscode K8s Management](images/cluster-sidebar/sidebar-after-update.png) +![The Cluster Overview page after saving — the sidebar now shows ProjectQuota under Appscode K8s Management](../images/cluster-sidebar/sidebar-after-update.png) --- diff --git a/src/en/guides/cluster-management/cluster-workload.md b/docs/platform/guides/cluster-management/cluster-workload.md similarity index 92% rename from src/en/guides/cluster-management/cluster-workload.md rename to docs/platform/guides/cluster-management/cluster-workload.md index 1ede361..3c39018 100644 --- a/src/en/guides/cluster-management/cluster-workload.md +++ b/docs/platform/guides/cluster-management/cluster-workload.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-k8sworkloads name: Kubernetes Workload Management parent: cluster-management weight: 40 - home_menu: - identifier: home-cluster-k8sworkloads - name: Kubernetes Workload Management - parent: home-cluster - weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/docs/platform/guides/cluster-management/constraints-violations.md b/docs/platform/guides/cluster-management/constraints-violations.md new file mode 100644 index 0000000..3306af8 --- /dev/null +++ b/docs/platform/guides/cluster-management/constraints-violations.md @@ -0,0 +1,14 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: cluster-management-gatekeeper + name: Constraints & Violations + parent: cluster-management + weight: 90 +menu_name: docsplatform_{{.version}} +section_menu_id: guides +--- + + +# Constraints & Violations diff --git a/src/en/guides/cluster-management/hub-ui/_index.md b/docs/platform/guides/cluster-management/hub-ui/_index.md similarity index 66% rename from src/en/guides/cluster-management/hub-ui/_index.md rename to docs/platform/guides/cluster-management/hub-ui/_index.md index d2fb987..007c9ff 100644 --- a/src/en/guides/cluster-management/hub-ui/_index.md +++ b/docs/platform/guides/cluster-management/hub-ui/_index.md @@ -1,13 +1,14 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: hub-ui name: Hub UI + parent: cluster-management description: Know how to use Hub UI icon: https://img.icons8.com/external-anggara-basic-outline-anggara-putra/96/external-stats-ui-anggara-basic-outline-anggara-putra.png popular: true weight: 50 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- \ No newline at end of file diff --git a/src/en/guides/cluster-management/hub-ui/cluster-and-clusterset.md b/docs/platform/guides/cluster-management/hub-ui/cluster-and-clusterset.md similarity index 89% rename from src/en/guides/cluster-management/hub-ui/cluster-and-clusterset.md rename to docs/platform/guides/cluster-management/hub-ui/cluster-and-clusterset.md index 8097445..26814c3 100644 --- a/src/en/guides/cluster-management/hub-ui/cluster-and-clusterset.md +++ b/docs/platform/guides/cluster-management/hub-ui/cluster-and-clusterset.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: hub-ui-cluster name: Cluster & Clusterset parent: hub-ui weight: 70 - home_menu: - identifier: hub-ui-cluster - name: Cluster & Clusterset - parent: hub-ui - weight: 70 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Important Note diff --git a/src/en/guides/cluster-management/hub-ui/create.md b/docs/platform/guides/cluster-management/hub-ui/create.md similarity index 85% rename from src/en/guides/cluster-management/hub-ui/create.md rename to docs/platform/guides/cluster-management/hub-ui/create.md index f78ca0e..7f3f1e4 100644 --- a/src/en/guides/cluster-management/hub-ui/create.md +++ b/docs/platform/guides/cluster-management/hub-ui/create.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: hub-ui-create name: Create Hub Cluster parent: hub-ui weight: 40 - home_menu: - identifier: hub-ui-create - name: Create Hub Cluster - parent: hub-ui - weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/cluster-management/hub-ui/introduction.md b/docs/platform/guides/cluster-management/hub-ui/introduction.md similarity index 88% rename from src/en/guides/cluster-management/hub-ui/introduction.md rename to docs/platform/guides/cluster-management/hub-ui/introduction.md index 303fc92..7986b83 100644 --- a/src/en/guides/cluster-management/hub-ui/introduction.md +++ b/docs/platform/guides/cluster-management/hub-ui/introduction.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: hub-ui-introduction name: Introduction parent: hub-ui weight: 30 - home_menu: - identifier: hub-ui-introduction - name: Introduction - parent: hub-ui - weight: 30 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Hub UI diff --git a/src/en/guides/cluster-management/hub-ui/license-management.md b/docs/platform/guides/cluster-management/hub-ui/license-management.md similarity index 78% rename from src/en/guides/cluster-management/hub-ui/license-management.md rename to docs/platform/guides/cluster-management/hub-ui/license-management.md index a7aebfe..89e9334 100644 --- a/src/en/guides/cluster-management/hub-ui/license-management.md +++ b/docs/platform/guides/cluster-management/hub-ui/license-management.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: hub-ui-license name: License Management parent: hub-ui weight: 60 - home_menu: - identifier: hub-ui-license - name: License Management - parent: hub-ui - weight: 60 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/cluster-management/hub-ui/permission.md b/docs/platform/guides/cluster-management/hub-ui/permission.md similarity index 87% rename from src/en/guides/cluster-management/hub-ui/permission.md rename to docs/platform/guides/cluster-management/hub-ui/permission.md index b46ee6f..e22e88f 100644 --- a/src/en/guides/cluster-management/hub-ui/permission.md +++ b/docs/platform/guides/cluster-management/hub-ui/permission.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: hub-ui-permission name: User Permission parent: hub-ui weight: 60 - home_menu: - identifier: hub-ui-permission - name: User Permission - parent: hub-ui - weight: 60 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # User Access Management diff --git a/src/en/guides/cluster-management/hub-ui/spoke.md b/docs/platform/guides/cluster-management/hub-ui/spoke.md similarity index 87% rename from src/en/guides/cluster-management/hub-ui/spoke.md rename to docs/platform/guides/cluster-management/hub-ui/spoke.md index 915108b..b2f20d4 100644 --- a/src/en/guides/cluster-management/hub-ui/spoke.md +++ b/docs/platform/guides/cluster-management/hub-ui/spoke.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: hub-ui-spoke name: Connect Spoke Cluster parent: hub-ui weight: 50 - home_menu: - identifier: hub-ui-spoke - name: Connect Spoke Cluster - parent: hub-ui - weight: 50 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Creating a Spoke Cluster diff --git a/src/en/guides/cluster-management/hub-ui/upgrade.md b/docs/platform/guides/cluster-management/hub-ui/upgrade.md similarity index 79% rename from src/en/guides/cluster-management/hub-ui/upgrade.md rename to docs/platform/guides/cluster-management/hub-ui/upgrade.md index 0debf96..7e7bbb4 100644 --- a/src/en/guides/cluster-management/hub-ui/upgrade.md +++ b/docs/platform/guides/cluster-management/hub-ui/upgrade.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: hub-ui-upgrade name: Upgrade Spoke parent: hub-ui weight: 80 - home_menu: - identifier: hub-ui-upgrade - name: Upgrade Spoke - parent: hub-ui - weight: 80 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/cluster-management/images/cluster-features/feature-databases1.png b/docs/platform/guides/cluster-management/images/cluster-features/feature-databases1.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/feature-databases1.png rename to docs/platform/guides/cluster-management/images/cluster-features/feature-databases1.png diff --git a/src/en/guides/cluster-management/images/cluster-features/feature-databases2.png b/docs/platform/guides/cluster-management/images/cluster-features/feature-databases2.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/feature-databases2.png rename to docs/platform/guides/cluster-management/images/cluster-features/feature-databases2.png diff --git a/src/en/guides/cluster-management/images/cluster-features/feature-databases3.png b/docs/platform/guides/cluster-management/images/cluster-features/feature-databases3.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/feature-databases3.png rename to docs/platform/guides/cluster-management/images/cluster-features/feature-databases3.png diff --git a/src/en/guides/cluster-management/images/cluster-features/feature-databases4.png b/docs/platform/guides/cluster-management/images/cluster-features/feature-databases4.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/feature-databases4.png rename to docs/platform/guides/cluster-management/images/cluster-features/feature-databases4.png diff --git a/src/en/guides/cluster-management/images/cluster-features/feature-databases5.png b/docs/platform/guides/cluster-management/images/cluster-features/feature-databases5.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/feature-databases5.png rename to docs/platform/guides/cluster-management/images/cluster-features/feature-databases5.png diff --git a/src/en/guides/cluster-management/images/cluster-features/feature-databases6.png b/docs/platform/guides/cluster-management/images/cluster-features/feature-databases6.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/feature-databases6.png rename to docs/platform/guides/cluster-management/images/cluster-features/feature-databases6.png diff --git a/src/en/guides/cluster-management/images/cluster-features/features-after-enable-some-features.png b/docs/platform/guides/cluster-management/images/cluster-features/features-after-enable-some-features.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/features-after-enable-some-features.png rename to docs/platform/guides/cluster-management/images/cluster-features/features-after-enable-some-features.png diff --git a/src/en/guides/cluster-management/images/cluster-features/features-backup1.png b/docs/platform/guides/cluster-management/images/cluster-features/features-backup1.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/features-backup1.png rename to docs/platform/guides/cluster-management/images/cluster-features/features-backup1.png diff --git a/src/en/guides/cluster-management/images/cluster-features/features-backup2.png b/docs/platform/guides/cluster-management/images/cluster-features/features-backup2.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/features-backup2.png rename to docs/platform/guides/cluster-management/images/cluster-features/features-backup2.png diff --git a/src/en/guides/cluster-management/images/cluster-features/features-backup3.png b/docs/platform/guides/cluster-management/images/cluster-features/features-backup3.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/features-backup3.png rename to docs/platform/guides/cluster-management/images/cluster-features/features-backup3.png diff --git a/src/en/guides/cluster-management/images/cluster-features/features-backup4.png b/docs/platform/guides/cluster-management/images/cluster-features/features-backup4.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/features-backup4.png rename to docs/platform/guides/cluster-management/images/cluster-features/features-backup4.png diff --git a/src/en/guides/cluster-management/images/cluster-features/features-backup5.png b/docs/platform/guides/cluster-management/images/cluster-features/features-backup5.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/features-backup5.png rename to docs/platform/guides/cluster-management/images/cluster-features/features-backup5.png diff --git a/src/en/guides/cluster-management/images/cluster-features/features-backup6.png b/docs/platform/guides/cluster-management/images/cluster-features/features-backup6.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/features-backup6.png rename to docs/platform/guides/cluster-management/images/cluster-features/features-backup6.png diff --git a/src/en/guides/cluster-management/images/cluster-features/features.png b/docs/platform/guides/cluster-management/images/cluster-features/features.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-features/features.png rename to docs/platform/guides/cluster-management/images/cluster-features/features.png diff --git a/src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-1.png b/docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-1.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-1.png rename to docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-1.png diff --git a/src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-2.png b/docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-2.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-2.png rename to docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-2.png diff --git a/src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-3.png b/docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-3.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-3.png rename to docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-3.png diff --git a/src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-4.png b/docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-4.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-4.png rename to docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-4.png diff --git a/src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-1.png b/docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-1.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-1.png rename to docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-1.png diff --git a/src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-2.png b/docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-2.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-2.png rename to docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-2.png diff --git a/src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-3.png b/docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-3.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-3.png rename to docs/platform/guides/cluster-management/images/cluster-overview/cluster-nodes-edit-3.png diff --git a/src/en/guides/cluster-management/images/cluster-overview/cluster-overview-1.png b/docs/platform/guides/cluster-management/images/cluster-overview/cluster-overview-1.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-overview/cluster-overview-1.png rename to docs/platform/guides/cluster-management/images/cluster-overview/cluster-overview-1.png diff --git a/src/en/guides/cluster-management/images/cluster-overview/cluster-overview-2.png b/docs/platform/guides/cluster-management/images/cluster-overview/cluster-overview-2.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-overview/cluster-overview-2.png rename to docs/platform/guides/cluster-management/images/cluster-overview/cluster-overview-2.png diff --git a/src/en/guides/cluster-management/images/cluster-overview/cluster-overview-3.png b/docs/platform/guides/cluster-management/images/cluster-overview/cluster-overview-3.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-overview/cluster-overview-3.png rename to docs/platform/guides/cluster-management/images/cluster-overview/cluster-overview-3.png diff --git a/src/en/guides/cluster-management/images/cluster-overview/cluster-overview-4.png b/docs/platform/guides/cluster-management/images/cluster-overview/cluster-overview-4.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-overview/cluster-overview-4.png rename to docs/platform/guides/cluster-management/images/cluster-overview/cluster-overview-4.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values1.png b/docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values1.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values1.png rename to docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values1.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values2.png b/docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values2.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values2.png rename to docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values2.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values3.png b/docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values3.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values3.png rename to docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values3.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values4.png b/docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values4.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values4.png rename to docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values4.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values5.png b/docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values5.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values5.png rename to docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values5.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values6.png b/docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values6.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values6.png rename to docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values6.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values7.png b/docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values7.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values7.png rename to docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values7.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values8.png b/docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values8.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/db-preset-edit-values8.png rename to docs/platform/guides/cluster-management/images/cluster-presets/db-preset-edit-values8.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/present-basic-info.png b/docs/platform/guides/cluster-management/images/cluster-presets/present-basic-info.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/present-basic-info.png rename to docs/platform/guides/cluster-management/images/cluster-presets/present-basic-info.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/preset-enable.png b/docs/platform/guides/cluster-management/images/cluster-presets/preset-enable.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/preset-enable.png rename to docs/platform/guides/cluster-management/images/cluster-presets/preset-enable.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/preset-extend-to-namespace1.png b/docs/platform/guides/cluster-management/images/cluster-presets/preset-extend-to-namespace1.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/preset-extend-to-namespace1.png rename to docs/platform/guides/cluster-management/images/cluster-presets/preset-extend-to-namespace1.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/preset-extend-to-namespace2.png b/docs/platform/guides/cluster-management/images/cluster-presets/preset-extend-to-namespace2.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/preset-extend-to-namespace2.png rename to docs/platform/guides/cluster-management/images/cluster-presets/preset-extend-to-namespace2.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/preset.png b/docs/platform/guides/cluster-management/images/cluster-presets/preset.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/preset.png rename to docs/platform/guides/cluster-management/images/cluster-presets/preset.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/presets-after-feature-enable.png b/docs/platform/guides/cluster-management/images/cluster-presets/presets-after-feature-enable.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/presets-after-feature-enable.png rename to docs/platform/guides/cluster-management/images/cluster-presets/presets-after-feature-enable.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/stash-preset-edit-values1.png b/docs/platform/guides/cluster-management/images/cluster-presets/stash-preset-edit-values1.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/stash-preset-edit-values1.png rename to docs/platform/guides/cluster-management/images/cluster-presets/stash-preset-edit-values1.png diff --git a/src/en/guides/cluster-management/images/cluster-presets/stash-preset-edit-values2.png b/docs/platform/guides/cluster-management/images/cluster-presets/stash-preset-edit-values2.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-presets/stash-preset-edit-values2.png rename to docs/platform/guides/cluster-management/images/cluster-presets/stash-preset-edit-values2.png diff --git a/src/en/guides/cluster-management/images/cluster-sidebar/sidebar-1.png b/docs/platform/guides/cluster-management/images/cluster-sidebar/sidebar-1.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-sidebar/sidebar-1.png rename to docs/platform/guides/cluster-management/images/cluster-sidebar/sidebar-1.png diff --git a/src/en/guides/cluster-management/images/cluster-sidebar/sidebar-after-update.png b/docs/platform/guides/cluster-management/images/cluster-sidebar/sidebar-after-update.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-sidebar/sidebar-after-update.png rename to docs/platform/guides/cluster-management/images/cluster-sidebar/sidebar-after-update.png diff --git a/src/en/guides/cluster-management/images/cluster-sidebar/sidebar-before-update.png b/docs/platform/guides/cluster-management/images/cluster-sidebar/sidebar-before-update.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-sidebar/sidebar-before-update.png rename to docs/platform/guides/cluster-management/images/cluster-sidebar/sidebar-before-update.png diff --git a/src/en/guides/cluster-management/images/cluster-sidebar/sidebar-search-menu.png b/docs/platform/guides/cluster-management/images/cluster-sidebar/sidebar-search-menu.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-sidebar/sidebar-search-menu.png rename to docs/platform/guides/cluster-management/images/cluster-sidebar/sidebar-search-menu.png diff --git a/src/en/guides/cluster-management/images/cluster-sidebar/sidebar-updating.png b/docs/platform/guides/cluster-management/images/cluster-sidebar/sidebar-updating.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster-sidebar/sidebar-updating.png rename to docs/platform/guides/cluster-management/images/cluster-sidebar/sidebar-updating.png diff --git a/src/en/guides/cluster-management/images/cluster_and_clusterset/add_cluster_1.png b/docs/platform/guides/cluster-management/images/cluster_and_clusterset/add_cluster_1.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster_and_clusterset/add_cluster_1.png rename to docs/platform/guides/cluster-management/images/cluster_and_clusterset/add_cluster_1.png diff --git a/src/en/guides/cluster-management/images/cluster_and_clusterset/add_cluster_2.png b/docs/platform/guides/cluster-management/images/cluster_and_clusterset/add_cluster_2.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster_and_clusterset/add_cluster_2.png rename to docs/platform/guides/cluster-management/images/cluster_and_clusterset/add_cluster_2.png diff --git a/src/en/guides/cluster-management/images/cluster_and_clusterset/clusterset.png b/docs/platform/guides/cluster-management/images/cluster_and_clusterset/clusterset.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster_and_clusterset/clusterset.png rename to docs/platform/guides/cluster-management/images/cluster_and_clusterset/clusterset.png diff --git a/src/en/guides/cluster-management/images/cluster_and_clusterset/clusterset_feature_1.png b/docs/platform/guides/cluster-management/images/cluster_and_clusterset/clusterset_feature_1.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster_and_clusterset/clusterset_feature_1.png rename to docs/platform/guides/cluster-management/images/cluster_and_clusterset/clusterset_feature_1.png diff --git a/src/en/guides/cluster-management/images/cluster_and_clusterset/clusterset_feature_2.png b/docs/platform/guides/cluster-management/images/cluster_and_clusterset/clusterset_feature_2.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster_and_clusterset/clusterset_feature_2.png rename to docs/platform/guides/cluster-management/images/cluster_and_clusterset/clusterset_feature_2.png diff --git a/src/en/guides/cluster-management/images/cluster_and_clusterset/unaligned.png b/docs/platform/guides/cluster-management/images/cluster_and_clusterset/unaligned.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster_and_clusterset/unaligned.png rename to docs/platform/guides/cluster-management/images/cluster_and_clusterset/unaligned.png diff --git a/src/en/guides/cluster-management/images/cluster_and_clusterset/unaligned_2.png b/docs/platform/guides/cluster-management/images/cluster_and_clusterset/unaligned_2.png similarity index 100% rename from src/en/guides/cluster-management/images/cluster_and_clusterset/unaligned_2.png rename to docs/platform/guides/cluster-management/images/cluster_and_clusterset/unaligned_2.png diff --git a/src/en/guides/cluster-management/images/import/cluster-details.png b/docs/platform/guides/cluster-management/images/import/cluster-details.png similarity index 100% rename from src/en/guides/cluster-management/images/import/cluster-details.png rename to docs/platform/guides/cluster-management/images/import/cluster-details.png diff --git a/src/en/guides/cluster-management/images/import/cluster-profile.png b/docs/platform/guides/cluster-management/images/import/cluster-profile.png similarity index 100% rename from src/en/guides/cluster-management/images/import/cluster-profile.png rename to docs/platform/guides/cluster-management/images/import/cluster-profile.png diff --git a/src/en/guides/cluster-management/images/import/deploy.png b/docs/platform/guides/cluster-management/images/import/deploy.png similarity index 100% rename from src/en/guides/cluster-management/images/import/deploy.png rename to docs/platform/guides/cluster-management/images/import/deploy.png diff --git a/src/en/guides/cluster-management/images/import/feature-set.png b/docs/platform/guides/cluster-management/images/import/feature-set.png similarity index 100% rename from src/en/guides/cluster-management/images/import/feature-set.png rename to docs/platform/guides/cluster-management/images/import/feature-set.png diff --git a/src/en/guides/cluster-management/images/import/select-cluster.png b/docs/platform/guides/cluster-management/images/import/select-cluster.png similarity index 100% rename from src/en/guides/cluster-management/images/import/select-cluster.png rename to docs/platform/guides/cluster-management/images/import/select-cluster.png diff --git a/src/en/guides/cluster-management/images/introduction/hub-spoke-model.png b/docs/platform/guides/cluster-management/images/introduction/hub-spoke-model.png similarity index 100% rename from src/en/guides/cluster-management/images/introduction/hub-spoke-model.png rename to docs/platform/guides/cluster-management/images/introduction/hub-spoke-model.png diff --git a/src/en/guides/cluster-management/images/license/add_license.png b/docs/platform/guides/cluster-management/images/license/add_license.png similarity index 100% rename from src/en/guides/cluster-management/images/license/add_license.png rename to docs/platform/guides/cluster-management/images/license/add_license.png diff --git a/src/en/guides/cluster-management/images/license/contract.png b/docs/platform/guides/cluster-management/images/license/contract.png similarity index 100% rename from src/en/guides/cluster-management/images/license/contract.png rename to docs/platform/guides/cluster-management/images/license/contract.png diff --git a/src/en/guides/cluster-management/images/license/contract_1.png b/docs/platform/guides/cluster-management/images/license/contract_1.png similarity index 100% rename from src/en/guides/cluster-management/images/license/contract_1.png rename to docs/platform/guides/cluster-management/images/license/contract_1.png diff --git a/src/en/guides/cluster-management/images/license/contract_2.png b/docs/platform/guides/cluster-management/images/license/contract_2.png similarity index 100% rename from src/en/guides/cluster-management/images/license/contract_2.png rename to docs/platform/guides/cluster-management/images/license/contract_2.png diff --git a/src/en/guides/cluster-management/images/license/license_modal.png b/docs/platform/guides/cluster-management/images/license/license_modal.png similarity index 100% rename from src/en/guides/cluster-management/images/license/license_modal.png rename to docs/platform/guides/cluster-management/images/license/license_modal.png diff --git a/src/en/guides/cluster-management/images/permission/add_member.png b/docs/platform/guides/cluster-management/images/permission/add_member.png similarity index 100% rename from src/en/guides/cluster-management/images/permission/add_member.png rename to docs/platform/guides/cluster-management/images/permission/add_member.png diff --git a/src/en/guides/cluster-management/images/permission/create_team.png b/docs/platform/guides/cluster-management/images/permission/create_team.png similarity index 100% rename from src/en/guides/cluster-management/images/permission/create_team.png rename to docs/platform/guides/cluster-management/images/permission/create_team.png diff --git a/src/en/guides/cluster-management/images/permission/go_to_platform.png b/docs/platform/guides/cluster-management/images/permission/go_to_platform.png similarity index 100% rename from src/en/guides/cluster-management/images/permission/go_to_platform.png rename to docs/platform/guides/cluster-management/images/permission/go_to_platform.png diff --git a/src/en/guides/cluster-management/images/permission/grant_permission.png b/docs/platform/guides/cluster-management/images/permission/grant_permission.png similarity index 100% rename from src/en/guides/cluster-management/images/permission/grant_permission.png rename to docs/platform/guides/cluster-management/images/permission/grant_permission.png diff --git a/src/en/guides/cluster-management/images/permission/permission.png b/docs/platform/guides/cluster-management/images/permission/permission.png similarity index 100% rename from src/en/guides/cluster-management/images/permission/permission.png rename to docs/platform/guides/cluster-management/images/permission/permission.png diff --git a/src/en/guides/cluster-management/images/project-quota/project-quota-create1.png b/docs/platform/guides/cluster-management/images/project-quota/project-quota-create1.png similarity index 100% rename from src/en/guides/cluster-management/images/project-quota/project-quota-create1.png rename to docs/platform/guides/cluster-management/images/project-quota/project-quota-create1.png diff --git a/src/en/guides/cluster-management/images/project-quota/project-quota-create2.png b/docs/platform/guides/cluster-management/images/project-quota/project-quota-create2.png similarity index 100% rename from src/en/guides/cluster-management/images/project-quota/project-quota-create2.png rename to docs/platform/guides/cluster-management/images/project-quota/project-quota-create2.png diff --git a/src/en/guides/cluster-management/images/project-quota/project-quota-create3.png b/docs/platform/guides/cluster-management/images/project-quota/project-quota-create3.png similarity index 100% rename from src/en/guides/cluster-management/images/project-quota/project-quota-create3.png rename to docs/platform/guides/cluster-management/images/project-quota/project-quota-create3.png diff --git a/src/en/guides/cluster-management/images/project-quota/project-quota-create4.png b/docs/platform/guides/cluster-management/images/project-quota/project-quota-create4.png similarity index 100% rename from src/en/guides/cluster-management/images/project-quota/project-quota-create4.png rename to docs/platform/guides/cluster-management/images/project-quota/project-quota-create4.png diff --git a/src/en/guides/cluster-management/images/project-quota/project-quota-details.png b/docs/platform/guides/cluster-management/images/project-quota/project-quota-details.png similarity index 100% rename from src/en/guides/cluster-management/images/project-quota/project-quota-details.png rename to docs/platform/guides/cluster-management/images/project-quota/project-quota-details.png diff --git a/src/en/guides/cluster-management/images/project-quota/project-quota-edit.png b/docs/platform/guides/cluster-management/images/project-quota/project-quota-edit.png similarity index 100% rename from src/en/guides/cluster-management/images/project-quota/project-quota-edit.png rename to docs/platform/guides/cluster-management/images/project-quota/project-quota-edit.png diff --git a/src/en/guides/cluster-management/images/project-quota/project-quota.png b/docs/platform/guides/cluster-management/images/project-quota/project-quota.png similarity index 100% rename from src/en/guides/cluster-management/images/project-quota/project-quota.png rename to docs/platform/guides/cluster-management/images/project-quota/project-quota.png diff --git a/src/en/guides/cluster-management/images/spoke/accept.png b/docs/platform/guides/cluster-management/images/spoke/accept.png similarity index 100% rename from src/en/guides/cluster-management/images/spoke/accept.png rename to docs/platform/guides/cluster-management/images/spoke/accept.png diff --git a/src/en/guides/cluster-management/images/spoke/featureset.png b/docs/platform/guides/cluster-management/images/spoke/featureset.png similarity index 100% rename from src/en/guides/cluster-management/images/spoke/featureset.png rename to docs/platform/guides/cluster-management/images/spoke/featureset.png diff --git a/src/en/guides/cluster-management/images/spoke/homepage.png b/docs/platform/guides/cluster-management/images/spoke/homepage.png similarity index 100% rename from src/en/guides/cluster-management/images/spoke/homepage.png rename to docs/platform/guides/cluster-management/images/spoke/homepage.png diff --git a/src/en/guides/cluster-management/images/spoke/import_spoke.png b/docs/platform/guides/cluster-management/images/spoke/import_spoke.png similarity index 100% rename from src/en/guides/cluster-management/images/spoke/import_spoke.png rename to docs/platform/guides/cluster-management/images/spoke/import_spoke.png diff --git a/src/en/guides/cluster-management/images/spoke/request.png b/docs/platform/guides/cluster-management/images/spoke/request.png similarity index 100% rename from src/en/guides/cluster-management/images/spoke/request.png rename to docs/platform/guides/cluster-management/images/spoke/request.png diff --git a/src/en/guides/cluster-management/images/spoke/select.png b/docs/platform/guides/cluster-management/images/spoke/select.png similarity index 100% rename from src/en/guides/cluster-management/images/spoke/select.png rename to docs/platform/guides/cluster-management/images/spoke/select.png diff --git a/src/en/guides/cluster-management/images/spoke/spoke.png b/docs/platform/guides/cluster-management/images/spoke/spoke.png similarity index 100% rename from src/en/guides/cluster-management/images/spoke/spoke.png rename to docs/platform/guides/cluster-management/images/spoke/spoke.png diff --git a/src/en/guides/cluster-management/images/upgrade/upgrade_1.png b/docs/platform/guides/cluster-management/images/upgrade/upgrade_1.png similarity index 100% rename from src/en/guides/cluster-management/images/upgrade/upgrade_1.png rename to docs/platform/guides/cluster-management/images/upgrade/upgrade_1.png diff --git a/src/en/guides/cluster-management/images/upgrade/upgrade_2.png b/docs/platform/guides/cluster-management/images/upgrade/upgrade_2.png similarity index 100% rename from src/en/guides/cluster-management/images/upgrade/upgrade_2.png rename to docs/platform/guides/cluster-management/images/upgrade/upgrade_2.png diff --git a/src/en/guides/cluster-management/images/upgrade/upgrade_3.png b/docs/platform/guides/cluster-management/images/upgrade/upgrade_3.png similarity index 100% rename from src/en/guides/cluster-management/images/upgrade/upgrade_3.png rename to docs/platform/guides/cluster-management/images/upgrade/upgrade_3.png diff --git a/src/en/guides/cluster-management/project-quota.md b/docs/platform/guides/cluster-management/project-quota.md similarity index 85% rename from src/en/guides/cluster-management/project-quota.md rename to docs/platform/guides/cluster-management/project-quota.md index 53624c0..a6c13ff 100644 --- a/src/en/guides/cluster-management/project-quota.md +++ b/docs/platform/guides/cluster-management/project-quota.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-project-quota name: Project Quota parent: cluster-management weight: 60 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Project Quota Management @@ -24,7 +24,7 @@ The **Project Quota** page lists all existing quotas. Each row shows the **Name* To delete an existing quota, click the red **Delete** button next to it. -![Project Quota list page showing existing quotas for "default" and "kubedb" namespaces](images/project-quota/project-quota.png) +![Project Quota list page showing existing quotas for "default" and "kubedb" namespaces](../images/project-quota/project-quota.png) --- @@ -36,7 +36,7 @@ Click the green **+ Create Quota** button in the top-right corner of the page to The first field is **Namespace** (required). Click the field to open a dropdown listing all namespaces in your cluster. Select the namespace you want to apply the quota to (for example, `kubeops`). -![Namespace dropdown open, showing available namespaces like default, kubedb, kubeops, kube-system, etc.](images/project-quota/project-quota-create1.png) +![Namespace dropdown open, showing available namespaces like default, kubedb, kubeops, kube-system, etc.](../images/project-quota/project-quota-create1.png) --- @@ -50,7 +50,7 @@ Click the **Group** dropdown. Choose the API group of the resource you want to l - `apps` — for standard Kubernetes workloads (Deployments, StatefulSets, etc.) - `kubedb.com` — for KubeDB-managed databases -![Group dropdown showing "apps" and "kubedb.com" options, with CPU Limit and Memory Limit fields below](images/project-quota/project-quota-create2.png) +![Group dropdown showing "apps" and "kubedb.com" options, with CPU Limit and Memory Limit fields below](../images/project-quota/project-quota-create2.png) ### Select the Resource Kind @@ -58,7 +58,7 @@ After choosing a group, click the **Kind** dropdown. The list is filtered to sho For example, with `kubedb.com` selected, you can choose from: **Elasticsearch**, **Kafka**, **MariaDB**, **MongoDB**, **MySQL**, **Postgres**, **Redis**, **RedisSentinel**, and more. -![Kind dropdown filtered to KubeDB resource types — Elasticsearch, Kafka, MongoDB, Postgres, Redis, etc.](images/project-quota/project-quota-create3.png) +![Kind dropdown filtered to KubeDB resource types — Elasticsearch, Kafka, MongoDB, Postgres, Redis, etc.](../images/project-quota/project-quota-create3.png) ### Set CPU and Memory Limits @@ -69,7 +69,7 @@ Once the Kind is selected, fill in the resource limits: | **CPU Limit** | Maximum CPU cores allowed for this resource kind in the namespace | `8` | | **Memory Limit** | Maximum memory allowed for this resource kind in the namespace | `24Gi` | -![Quota form fully filled in: Group = kubedb.com, Kind = Postgres, CPU Limit = 8, Memory Limit = 24Gi](images/project-quota/project-quota-create4.png) +![Quota form fully filled in: Group = kubedb.com, Kind = Postgres, CPU Limit = 8, Memory Limit = 24Gi](../images/project-quota/project-quota-create4.png) Click the green **Save** button (within the New Quota section) to stage this rule. @@ -83,7 +83,7 @@ A green toast notification confirms: **"Quota created successfully!"** You can click **+ Add Quota** to add more rules for other resource types in the same namespace. -![Quotas table showing the staged rule: kubedb.com / Postgres / CPU 8 / Memory 24Gi, with a success notification](images/project-quota/project-quota-details.png) +![Quotas table showing the staged rule: kubedb.com / Postgres / CPU 8 / Memory 24Gi, with a success notification](../images/project-quota/project-quota-details.png) Once you have added all your rules, click the main **Save** button to permanently apply the project quota to the selected namespace. @@ -97,7 +97,7 @@ An **Edit Quotas** inline form expands below the table. The **Group** and **Kind Update the limits as needed and click **Save** to apply the changes. -![Edit Quotas form expanded inline — showing CPU Used (0), Memory Used (0), and editable CPU/Memory limit fields](images/project-quota/project-quota-edit.png) +![Edit Quotas form expanded inline — showing CPU Used (0), Memory Used (0), and editable CPU/Memory limit fields](../images/project-quota/project-quota-edit.png) --- diff --git a/src/en/guides/cluster-management/remove-cluster.md b/docs/platform/guides/cluster-management/remove-cluster.md similarity index 92% rename from src/en/guides/cluster-management/remove-cluster.md rename to docs/platform/guides/cluster-management/remove-cluster.md index 7246018..bb91ee6 100644 --- a/src/en/guides/cluster-management/remove-cluster.md +++ b/docs/platform/guides/cluster-management/remove-cluster.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-deletecluster name: Remove / Delete Cluster parent: cluster-management weight: 20 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/cluster-management/security-report.md b/docs/platform/guides/cluster-management/security-report.md similarity index 60% rename from src/en/guides/cluster-management/security-report.md rename to docs/platform/guides/cluster-management/security-report.md index 41349ad..94599ec 100644 --- a/src/en/guides/cluster-management/security-report.md +++ b/docs/platform/guides/cluster-management/security-report.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: cluster-management-securityreport name: Security Report parent: cluster-management weight: 80 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/database-management/_index.md b/docs/platform/guides/database-management/_index.md similarity index 65% rename from src/en/guides/database-management/_index.md rename to docs/platform/guides/database-management/_index.md index 6904efe..8b90491 100644 --- a/src/en/guides/database-management/_index.md +++ b/docs/platform/guides/database-management/_index.md @@ -1,13 +1,14 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management name: Database Management + parent: guides description: Basic database information description icon: https://img.icons8.com/00994A/ios/50/database--v1.png popular: true weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/database-management/backup-configuration.md b/docs/platform/guides/database-management/backup-configuration.md similarity index 93% rename from src/en/guides/database-management/backup-configuration.md rename to docs/platform/guides/database-management/backup-configuration.md index a8ab029..fafc59c 100644 --- a/src/en/guides/database-management/backup-configuration.md +++ b/docs/platform/guides/database-management/backup-configuration.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-backup-configuration name: Backup Configuration parent: database-management weight: 120 - home_menu: - identifier: home-database-backup-configuration - name: Backup Configuration - parent: home-database - weight: 120 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -32,7 +27,7 @@ Navigate to **Backups** in the left sidebar and select **Backup Configuration**. The list page shows all BackupConfigurations across namespaces. Use the **Select Namespace** dropdown in the top-right to filter by namespace, or click **Create New Instance** to create a new one. -![BackupConfiguration list page showing existing configurations with Name, Namespace, Schedule, Repository, BackupStorage, Target, Task, RetentionPolicy, Phase, and Age columns](./images/backup/config-dbs-overview.png) +![BackupConfiguration list page showing existing configurations with Name, Namespace, Schedule, Repository, BackupStorage, Target, Task, RetentionPolicy, Phase, and Age columns](../images/backup/config-dbs-overview.png) | Column | Description | |---|---| @@ -58,7 +53,7 @@ Click on any BackupConfiguration name in the list to open its detail page. The d The detail page opens on the **Overview** tab, which shows the following sections: -![BackupConfiguration detail page showing Basic info, Backup Sessions table, Retention Policies table, and Target section](./images/backup/config-db-overview.png) +![BackupConfiguration detail page showing Basic info, Backup Sessions table, Retention Policies table, and Target section](../images/backup/config-db-overview.png) **Basic** — Core metadata for the resource: @@ -102,7 +97,7 @@ The detail page opens on the **Overview** tab, which shows the following section Scroll down on the detail page to view the linked infrastructure resources. -![Detail page lower section showing Repository, BackupStorage, and CronJobs tables](./images/backup/config-db-repository.png) +![Detail page lower section showing Repository, BackupStorage, and CronJobs tables](../images/backup/config-db-repository.png) **Repository** — The backup repository storing snapshots for this configuration: @@ -153,13 +148,13 @@ To create a new BackupConfiguration, click **Create New Instance** from the list - **Sessions** — One or more backup sessions defining schedule, addon, and tasks. - **Target** — The database resource this BackupConfiguration applies to. -![Create BackupConfiguration form showing Namespace, Name, Storage Ref, Retention Policy, Sessions, and Target sections](./images/backup/configuration-overview.png) +![Create BackupConfiguration form showing Namespace, Name, Storage Ref, Retention Policy, Sessions, and Target sections](../images/backup/configuration-overview.png) ### 4.1 - Basic Information The top section captures the core identity and storage references for the BackupConfiguration. -![Basic fields showing Namespace set to demo, Name to test-name, Storage Ref to stash/default, and Retention Policy to stash/default](./images/backup/config-name-namespace.png) +![Basic fields showing Namespace set to demo, Name to test-name, Storage Ref to stash/default, and Retention Policy to stash/default](../images/backup/config-name-namespace.png) | Field | Description | |---|---| @@ -174,7 +169,7 @@ The top section captures the core identity and storage references for the Backup Expand the **Labels & Annotations** panel to attach custom metadata to the BackupConfiguration resource for organization, filtering, or integration with other Kubernetes tools. -![Labels and Annotations panel showing Labels and Annotations each with Key-Value input rows and Add new buttons](./images/backup/config-label-annotation.png) +![Labels and Annotations panel showing Labels and Annotations each with Key-Value input rows and Add new buttons](../images/backup/config-label-annotation.png) - Use **+ Add new** under **Labels** to add key-value label pairs. - Use **+ Add new** under **Annotations** to add key-value annotation pairs. @@ -184,7 +179,7 @@ Expand the **Labels & Annotations** panel to attach custom metadata to the Backu The **Sessions** section defines one or more backup sessions. Each session specifies when the backup runs, which addon to use, and what tasks to execute. Click **+ Add new** to add a session entry. -![Sessions panel showing a session entry with Session Name, Schedule, Security Context, Addon Name, and Tasks fields](./images/backup/config-sessions.png) +![Sessions panel showing a session entry with Session Name, Schedule, Security Context, Addon Name, and Tasks fields](../images/backup/config-sessions.png) | Field | Description | |---|---| @@ -199,7 +194,7 @@ Use the **Delete** button at the bottom of a session entry to remove it. Each session must have at least one **Task** defined. Tasks describe the actual backup operation to perform. Click **Add new** inside the Tasks section to add a task entry. -![Tasks entry showing Task Name required dropdown and Params code editor](./images/backup/config-session-task.png) +![Tasks entry showing Task Name required dropdown and Params code editor](../images/backup/config-session-task.png) | Field | Description | |---|---| @@ -215,7 +210,7 @@ Each session must have at least one **Task** defined. Tasks describe the actual The **Target** section identifies the database resource that this BackupConfiguration will back up. -![Target panel showing Api Group kubedb.com, Kind MongoDB, Namespace demo, and Name mongodb](./images/backup/config-target.png) +![Target panel showing Api Group kubedb.com, Kind MongoDB, Namespace demo, and Name mongodb](../images/backup/config-target.png) | Field | Description | |---|---| diff --git a/src/en/guides/database-management/backup-storage.md b/docs/platform/guides/database-management/backup-storage.md similarity index 93% rename from src/en/guides/database-management/backup-storage.md rename to docs/platform/guides/database-management/backup-storage.md index a69299a..042735b 100644 --- a/src/en/guides/database-management/backup-storage.md +++ b/docs/platform/guides/database-management/backup-storage.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-backup-storage name: Backup Storage parent: database-management weight: 130 - home_menu: - identifier: home-database-backup-storage - name: Backup Storage - parent: home-database - weight: 130 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -32,7 +27,7 @@ Navigate to **Backups** in the left sidebar and select **BackupStorage**. This o The list page displays all BackupStorage resources configured in your cluster. Use the **Select Namespace** dropdown to filter by namespace, or click **Create New Instance** to add a new storage backend. -![BackupStorage list page showing resources with Name, Namespace, Provider, Size, No. of Connected Repositories, Status, and Age columns](./images/backup/storage-overview.png) +![BackupStorage list page showing resources with Name, Namespace, Provider, Size, No. of Connected Repositories, Status, and Age columns](../images/backup/storage-overview.png) | Column | Description | |---|---| @@ -54,7 +49,7 @@ Click on any BackupStorage name in the list to open its detail page. The detail The detail page shows all relevant information about the storage backend: -![BackupStorage detail page showing Basic info, Repositories, and BackupConfigurations tables](./images/backup/storage-db-overview.png) +![BackupStorage detail page showing Basic info, Repositories, and BackupConfigurations tables](../images/backup/storage-db-overview.png) **Basic** — Core metadata for the storage: @@ -105,7 +100,7 @@ To add a new storage backend, click **Create New Instance** from the BackupStora The form starts with basic identity fields: -![Create BackupStorage form showing Namespace, Name, Labels & Annotations, Deletion Policy, Security Context, and Backend sections](./images/backup/storage-create-overview.png) +![Create BackupStorage form showing Namespace, Name, Labels & Annotations, Deletion Policy, Security Context, and Backend sections](../images/backup/storage-create-overview.png) | Field | Description | |---|---| @@ -118,7 +113,7 @@ The form starts with basic identity fields: Expand the **Labels & Annotations** section to attach custom metadata for organization and integration: -![Labels and Annotations panel showing Labels and Annotations each with Key-Value input rows and Add new buttons](./images/backup/storage-label-annotation.png) +![Labels and Annotations panel showing Labels and Annotations each with Key-Value input rows and Add new buttons](../images/backup/storage-label-annotation.png) - Use **+ Add new** under **Labels** to add key-value label pairs. - Use **+ Add new** under **Annotations** to add key-value annotation pairs. @@ -128,7 +123,7 @@ Expand the **Labels & Annotations** section to attach custom metadata for organi The **Backend** section defines the storage provider and its credentials. This is where you configure the actual cloud storage connection. -![Backend section showing Provider dropdown (azure selected) with Auth and Spec sub-panels for Azure storage configuration](./images/backup/storage-create-backend.png) +![Backend section showing Provider dropdown (azure selected) with Auth and Spec sub-panels for Azure storage configuration](../images/backup/storage-create-backend.png) #### Backend Provider diff --git a/src/en/guides/database-management/backup.md b/docs/platform/guides/database-management/backup.md similarity index 86% rename from src/en/guides/database-management/backup.md rename to docs/platform/guides/database-management/backup.md index be1591a..875f8e0 100644 --- a/src/en/guides/database-management/backup.md +++ b/docs/platform/guides/database-management/backup.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-backup name: Configure Backups parent: database-management weight: 40 - home_menu: - identifier: home-database-backup - name: Configure Backups - parent: home-database - weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Configure Backups @@ -28,7 +23,7 @@ To begin, select **Configure Backup** from the left sidebar. This selection dete - **BackupConfig:** Use this to create, delete, or modify specific backup tasks. - **BackupBlueprint:** Use this to manage high-level templates for enabling or disabling backups across multiple resources. -![Configure Backup section showing BackupConfig and BackupBlueprint options](./images/backup-config.png) +![Configure Backup section showing BackupConfig and BackupBlueprint options](../images/backup-config.png) --- @@ -40,7 +35,7 @@ When **BackupConfig** is selected, define the **Select Context** to indicate the Use this context to set up a new automated backup schedule. -![Create BackupConfig form with Schedule field](./images/backup-config-create.png) +![Create BackupConfig form with Schedule field](../images/backup-config-create.png) 1. **Select Context:** Choose **Create** from the dropdown menu. 1. **Schedule:** Enter a cron expression to define the backup frequency. For example, `*/15 * * * *` triggers a backup every 15 minutes. @@ -53,7 +48,7 @@ Use this context to set up a new automated backup schedule. Use this context to update the settings or status of an active backup. -![Modify BackupConfig form with Schedule and Paused toggle](./images/backup-config-modify.png) +![Modify BackupConfig form with Schedule and Paused toggle](../images/backup-config-modify.png) 1. **Select Context:** Choose **Modify**. 1. **Select BackupConfig:** Pick the specific configuration you want to edit (e.g., `mongodb`) from the dropdown list. @@ -63,7 +58,7 @@ Use this context to update the settings or status of an active backup. 1. **Preview:** Click **Preview** to see how the changes will impact your system. 1. **Submit:** Once satisfied, click **Submit** to apply the changes. -![Submit button on the Preview page confirming the backup configuration update](./images/backup-config-submit.png) +![Submit button on the Preview page confirming the backup configuration update](../images/backup-config-submit.png) > **Note:** After every **Preview**, you must click **Submit** to save your changes. This applies across all backup operations. @@ -73,7 +68,7 @@ Use this context to update the settings or status of an active backup. Use this context to permanently remove a backup configuration. -![Delete BackupConfig form with configuration selection](./images/backup-config-delete.png) +![Delete BackupConfig form with configuration selection](../images/backup-config-delete.png) 1. **Select Context:** Choose **Delete**. 1. **Select BackupConfig:** Select the configuration you wish to remove (e.g., `mongodb`). @@ -87,7 +82,7 @@ Use this context to permanently remove a backup configuration. Selecting the **BackupBlueprint** type allows you to toggle predefined backup templates for your environment. -![BackupBlueprint panel with Enable Backup Blueprint toggle](./images/backup-config-blueprint.png) +![BackupBlueprint panel with Enable Backup Blueprint toggle](../images/backup-config-blueprint.png) 1. **Enable Backup Blueprint Toggle:** Switching on activates the selected blueprint, applying its settings to the relevant resources. Switching off deactivates it. 1. **Preview:** Click **Preview** to confirm which configurations will be affected before the change takes effect. diff --git a/src/en/guides/database-management/contraint-violations.md b/docs/platform/guides/database-management/contraint-violations.md similarity index 63% rename from src/en/guides/database-management/contraint-violations.md rename to docs/platform/guides/database-management/contraint-violations.md index 9b9af11..0fd416d 100644 --- a/src/en/guides/database-management/contraint-violations.md +++ b/docs/platform/guides/database-management/contraint-violations.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-gatekeeper name: Database Contraint Violations parent: database-management weight: 100 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/database-management/create-database.md b/docs/platform/guides/database-management/create-database.md similarity index 89% rename from src/en/guides/database-management/create-database.md rename to docs/platform/guides/database-management/create-database.md index a480dcc..96d161a 100644 --- a/src/en/guides/database-management/create-database.md +++ b/docs/platform/guides/database-management/create-database.md @@ -1,23 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-create name: Creating a Database parent: database-management weight: 10 - home_menu: - identifier: home-database-create - name: Creating a Database - parent: home-database - weight: 10 - section_menu: - identifier: database-management - name: Database Management - weight: 40 - parent: guides -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -33,7 +23,7 @@ Navigate to the **Datastore** section in the left sidebar. The **Datastore Overv To create a new database, click the green **+ Create New Instance** button in the top-right corner of the page. -![Datastore Overview page showing existing database instances and the Create New Instance button](./images/db-create/overview-create.png) +![Datastore Overview page showing existing database instances and the Create New Instance button](../images/db-create/overview-create.png) --- @@ -41,7 +31,7 @@ To create a new database, click the green **+ Create New Instance** button in th You will be presented with a grid of all supported database engines. Click on the engine you want to provision. -![Database type selection grid showing all supported engines including MongoDB, PostgreSQL, MySQL, Redis, and more](./images/db-create/db-type-select.png) +![Database type selection grid showing all supported engines including MongoDB, PostgreSQL, MySQL, Redis, and more](../images/db-create/db-type-select.png) > **Tip:** The console supports a wide range of engines including relational, document, key-value, search, and time-series databases. Select the engine that best fits your workload. @@ -51,7 +41,7 @@ You will be presented with a grid of all supported database engines. Click on th After selecting the database type, you will be prompted to choose a namespace and provide a name for the new instance. -![Choose Namespace and Name step showing Select Namespace dropdown and Name field](./images/db-create/name-namespace-select.png) +![Choose Namespace and Name step showing Select Namespace dropdown and Name field](../images/db-create/name-namespace-select.png) 1. **Select Namespace:** Choose the Kubernetes namespace where the database will be deployed. If the namespace has resource quotas, available CPU and memory will be shown to help you stay within limits. 1. **Name:** Enter a unique name for the database instance. The name must start with a lowercase letter and can contain letters, numbers, or dashes. @@ -66,7 +56,7 @@ Click **Next** to proceed to the configuration step. The main configuration page shows all settings for the new database. At the top, the namespace and name you chose are displayed as a breadcrumb (e.g., `demo / mongo-test`). -![Create MongoDB configuration page showing Database Version, Database Mode cards, Machine Profile, Storage Class, Advanced Configuration, and Additional Options](./images/db-create/create-overview-page.png) +![Create MongoDB configuration page showing Database Version, Database Mode cards, Machine Profile, Storage Class, Advanced Configuration, and Additional Options](../images/db-create/create-overview-page.png) ### 4.1 - Database Version @@ -84,7 +74,7 @@ Select the topology for your database under **Database Mode**. Three modes are a When **Replicated Cluster** is selected, two additional fields appear: -![Replicated Cluster mode selected showing Replicaset Name (rs0) and Replicaset Number (3) fields](./images/db-create/replicaset-mode.png) +![Replicated Cluster mode selected showing Replicaset Name (rs0) and Replicaset Number (3) fields](../images/db-create/replicaset-mode.png) | Field | Description | |---|---| @@ -96,11 +86,11 @@ When **Replicated Cluster** is selected, two additional fields appear: When **Sharded Cluster** is selected, three subsections appear — **Shard Nodes**, **Config Server**, and **Mongos** — each configurable independently. -![Sharded Cluster mode selected showing Shard Nodes, Config Server, and Mongos collapsible panels](./images/db-create/shard-mode.png) +![Sharded Cluster mode selected showing Shard Nodes, Config Server, and Mongos collapsible panels](../images/db-create/shard-mode.png) **Shard Nodes** — Configure how MongoDB data is partitioned, replicated, and resourced across your cluster. -![Shard Nodes panel showing Shards, Replicaset Number, Storage size, Machine, CPU, and Memory fields](./images/db-create/shard-nodes.png) +![Shard Nodes panel showing Shards, Replicaset Number, Storage size, Machine, CPU, and Memory fields](../images/db-create/shard-nodes.png) | Field | Description | |---|---| @@ -113,7 +103,7 @@ When **Sharded Cluster** is selected, three subsections appear — **Shard Nodes **Config Server** — Stores metadata about the sharded cluster including chunk distribution and shard configuration. Must run as a replica set. -![Config Server panel showing Replicaset Number, Storage size, Machine, CPU, and Memory fields](./images/db-create/config-server.png) +![Config Server panel showing Replicaset Number, Storage size, Machine, CPU, and Memory fields](../images/db-create/config-server.png) | Field | Description | |---|---| @@ -125,7 +115,7 @@ When **Sharded Cluster** is selected, three subsections appear — **Shard Nodes **Mongos** — Acts as the query router for the sharded cluster, directing client requests to the appropriate shards based on metadata from Config Servers. -![Mongos panel showing Replicaset number, Machine, CPU, and Memory fields](./images/db-create/mongos-mode.png) +![Mongos panel showing Replicaset number, Machine, CPU, and Memory fields](../images/db-create/mongos-mode.png) | Field | Description | |---|---| @@ -138,7 +128,7 @@ When **Sharded Cluster** is selected, three subsections appear — **Shard Nodes The **Machine Profile** dropdown lets you select a preset CPU and memory configuration for your database nodes. Choose `custom` to enter specific CPU and memory values manually. -![Machine Profile dropdown showing preset options alongside the Storage Class and Advanced Configuration panels](./images/db-create/machine-profile.png) +![Machine Profile dropdown showing preset options alongside the Storage Class and Advanced Configuration panels](../images/db-create/machine-profile.png) > **Tip:** Preset profiles are named by size (e.g., `db.t4large`). Use `custom` when your workload requires resources that do not match any preset. @@ -146,7 +136,7 @@ The **Machine Profile** dropdown lets you select a preset CPU and memory configu Select the Kubernetes **Storage Class** that will back the database persistent volumes, and enter the required **Storage size**. -![Storage Class dropdown showing local-path, longhorn, and longhorn-static options, alongside the Storage size field set to 2Gi](./images/db-create/storage-class.png) +![Storage Class dropdown showing local-path, longhorn, and longhorn-static options, alongside the Storage size field set to 2Gi](../images/db-create/storage-class.png) | Field | Description | |---|---| @@ -163,7 +153,7 @@ Expand the **Advanced Configuration** panel (labelled *Configure Credentials, De Add custom Kubernetes labels and annotations to the database resources for organization, monitoring, and integration with other tools and services. -![Advanced Configuration panel showing Labels and Annotations sections each with Key-Value input rows and Add new buttons](./images/db-create/advance-lavel-annotation.png) +![Advanced Configuration panel showing Labels and Annotations sections each with Key-Value input rows and Add new buttons](../images/db-create/advance-lavel-annotation.png) - Use **+ Add new** under **Labels** to attach key-value label pairs. - Use **+ Add new** under **Annotations** to attach key-value annotation pairs. @@ -173,7 +163,7 @@ Add custom Kubernetes labels and annotations to the database resources for organ The **Deletion Policy** dropdown controls what happens to the database resources when the database object is deleted from Kubernetes. -![Deletion Policy dropdown showing Delete, Halt, WipeOut, and DoNotTerminate options](./images/db-create/deletion-policy.png) +![Deletion Policy dropdown showing Delete, Halt, WipeOut, and DoNotTerminate options](../images/db-create/deletion-policy.png) | Option | Behaviour | |---|---| @@ -188,7 +178,7 @@ The **Deletion Policy** dropdown controls what happens to the database resources Configure how the database root credentials are managed. -![Authentication Credentials section showing Provide Authentication Credentials toggle, Refer existing Secret toggle, Secret dropdown, Password field, Configure Database toggle, and Configuration textarea](./images/db-create/auth-creds.png) +![Authentication Credentials section showing Provide Authentication Credentials toggle, Refer existing Secret toggle, Secret dropdown, Password field, Configure Database toggle, and Configuration textarea](../images/db-create/auth-creds.png) | Field | Description | |---|---| @@ -201,7 +191,7 @@ Configure how the database root credentials are managed. Enable **Point in-time Recovery** to restore the new database from a previous backup to an exact timestamp. -![Point in-time Recovery toggle and form showing Namespace, Name, and Recovery Timestamp fields](./images/db-create/point-in-time-recovery.png) +![Point in-time Recovery toggle and form showing Namespace, Name, and Recovery Timestamp fields](../images/db-create/point-in-time-recovery.png) 1. **Namespace:** The namespace where the source backup resides. Required. 1. **Name:** The name of the source database to recover from. Required. @@ -215,7 +205,7 @@ Enable **Point in-time Recovery** to restore the new database from a previous ba Expand the **Additional Options** panel (labelled *Enable Backup, Monitoring, TLS etc.*) to enable integrated platform features for the new database. -![Additional Options panel showing Enable Monitoring with Alert Options, Enable Backup, Enable TLS with Cluster Issuers, and Expose via Gateway toggles](./images/db-create/Additional-option.png) +![Additional Options panel showing Enable Monitoring with Alert Options, Enable Backup, Enable TLS with Cluster Issuers, and Expose via Gateway toggles](../images/db-create/Additional-option.png) | Option | Description | |---|---| diff --git a/src/en/guides/database-management/database-usage-insight.md b/docs/platform/guides/database-management/database-usage-insight.md similarity index 96% rename from src/en/guides/database-management/database-usage-insight.md rename to docs/platform/guides/database-management/database-usage-insight.md index 0cda6e2..13d05ec 100644 --- a/src/en/guides/database-management/database-usage-insight.md +++ b/docs/platform/guides/database-management/database-usage-insight.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-insights name: Database Usage & Insights parent: database-management weight: 20 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -31,7 +31,7 @@ From the **Datastore** section in the left sidebar, click on any database engine The **Overview** tab is the landing page for any database instance. It is divided into two panels — **Connection Details** and **Insights** — and a **Nodes** table at the bottom. -![Database Overview page showing Connection Details, Insights summary panel, and Nodes table](./images/db-overview.png) +![Database Overview page showing Connection Details, Insights summary panel, and Nodes table](../images/db-overview.png) ### 2.1 - Connection Details @@ -71,7 +71,7 @@ The **Nodes** table at the bottom lists every pod in the database cluster with i The **Insights** tab provides a deeper view into database performance — including Grafana dashboards, slow query analysis, and collection-level storage metrics. -![Insights tab showing stat summary, Grafana Dashboards section, Slow Queries table, and Top Collections table](./images/db-insights.png) +![Insights tab showing stat summary, Grafana Dashboards section, Slow Queries table, and Top Collections table](../images/db-insights.png) ### 3.1 - Insights Summary Row @@ -115,7 +115,7 @@ The **Top Collections** table lists collections ranked by total storage size, he The **Users** tab shows all access credentials, bindings, and KubeVault-managed secrets associated with the database instance. -![Users tab showing Root User, AppBinding, VaultServers, and SecretEngines sections](./images/db-users.png) +![Users tab showing Root User, AppBinding, VaultServers, and SecretEngines sections](../images/db-users.png) ### 4.1 - Root User @@ -148,7 +148,7 @@ The **AppBinding** section lists `AppBinding` resources that expose this databas The lower sections of the **Users** tab are powered by **KubeVault** and provide dynamic secret management for your database. -![Users tab lower sections showing VaultServers, SecretEngines, MongoDBRoles, and SecretAccessRequests — all requiring kubevault to be enabled](./images/db-users-kubevault.png) +![Users tab lower sections showing VaultServers, SecretEngines, MongoDBRoles, and SecretAccessRequests — all requiring kubevault to be enabled](../images/db-users-kubevault.png) | Section | Description | |---|---| diff --git a/src/en/guides/database-management/delete-database.md b/docs/platform/guides/database-management/delete-database.md similarity index 89% rename from src/en/guides/database-management/delete-database.md rename to docs/platform/guides/database-management/delete-database.md index 0f4fd58..44ae891 100644 --- a/src/en/guides/database-management/delete-database.md +++ b/docs/platform/guides/database-management/delete-database.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-delete name: Delete Database parent: database-management weight: 110 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -29,14 +29,14 @@ Navigate to the **Datastore** section from the left sidebar and select your data Use this method to delete one or more databases at once directly from the instance list. -![Datastore Overview page with a database instance selected and the Delete Selected button highlighted](./images/delete-overview.png) +![Datastore Overview page with a database instance selected and the Delete Selected button highlighted](../images/delete-overview.png) 1. **Select Namespace:** Use the **Select Namespace** dropdown in the top-right to filter instances by namespace if needed. 1. **Select Instance(s):** Check the checkbox next to each database instance you want to delete (e.g., `mongodb demo`). 1. **Delete Selected:** Click the red **Delete Selected** button that appears in the top-right of the Overview table. 1. **Confirm:** A confirmation modal will appear asking *"Are you sure you want to delete the selected databases?"* Click **Yes** to proceed, or **Cancel** to abort. -![Bulk delete confirmation modal on the Datastore Overview page](./images/delete-overview-modal.png) +![Bulk delete confirmation modal on the Datastore Overview page](../images/delete-overview-modal.png) --- @@ -44,13 +44,13 @@ Use this method to delete one or more databases at once directly from the instan Use this method to delete a specific database while viewing its detail page. -![MongoDB database detail page showing the Delete button in the top-right navbar](./images/delete.png) +![MongoDB database detail page showing the Delete button in the top-right navbar](../images/delete.png) 1. From the **Datastore Overview**, click on the name of the database instance you want to delete to open its detail page. 1. **Delete:** Click the red **Delete** button in the top-right corner of the page. 1. **Confirm:** A confirmation modal will appear showing the name of the database. Click **Yes** to permanently delete it, or **Cancel** to abort. -![Delete confirmation modal asking "Do you want to delete mongodb?" with Cancel and Yes buttons](./images/delete-modal.png) +![Delete confirmation modal asking "Do you want to delete mongodb?" with Cancel and Yes buttons](../images/delete-modal.png) > **Warning:** Clicking **Yes** immediately and permanently removes the database. There is no undo. Confirm you have a backup before proceeding. diff --git a/src/en/guides/database-management/expose-via-gateway.md b/docs/platform/guides/database-management/expose-via-gateway.md similarity index 87% rename from src/en/guides/database-management/expose-via-gateway.md rename to docs/platform/guides/database-management/expose-via-gateway.md index ee24b1e..3871318 100644 --- a/src/en/guides/database-management/expose-via-gateway.md +++ b/docs/platform/guides/database-management/expose-via-gateway.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-expose-via-gateway name: Expose via Gateway parent: database-management weight: 77 - home_menu: - identifier: home-database-expose-via-gateway - name: Expose via Gateway - parent: home-database - weight: 77 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -28,7 +23,7 @@ To begin, select **Expose via Gateway** from the **Operations** section in the l You will land on a simple form with a single toggle that controls the gateway exposure state of your database. -![Expose via Gateway page showing the Expose Database toggle and Deploy button](./images/expose-via-gateway.png) +![Expose via Gateway page showing the Expose Database toggle and Deploy button](../images/expose-via-gateway.png) --- diff --git a/src/en/guides/database-management/images/auto-scaling-nodetopology.png b/docs/platform/guides/database-management/images/auto-scaling-nodetopology.png similarity index 100% rename from src/en/guides/database-management/images/auto-scaling-nodetopology.png rename to docs/platform/guides/database-management/images/auto-scaling-nodetopology.png diff --git a/src/en/guides/database-management/images/auto-scaling-readiness.png b/docs/platform/guides/database-management/images/auto-scaling-readiness.png similarity index 100% rename from src/en/guides/database-management/images/auto-scaling-readiness.png rename to docs/platform/guides/database-management/images/auto-scaling-readiness.png diff --git a/src/en/guides/database-management/images/auto-scaling-standalone.png b/docs/platform/guides/database-management/images/auto-scaling-standalone.png similarity index 100% rename from src/en/guides/database-management/images/auto-scaling-standalone.png rename to docs/platform/guides/database-management/images/auto-scaling-standalone.png diff --git a/src/en/guides/database-management/images/auto-scaling.png b/docs/platform/guides/database-management/images/auto-scaling.png similarity index 100% rename from src/en/guides/database-management/images/auto-scaling.png rename to docs/platform/guides/database-management/images/auto-scaling.png diff --git a/src/en/guides/database-management/images/backup-config-blueprint.png b/docs/platform/guides/database-management/images/backup-config-blueprint.png similarity index 100% rename from src/en/guides/database-management/images/backup-config-blueprint.png rename to docs/platform/guides/database-management/images/backup-config-blueprint.png diff --git a/src/en/guides/database-management/images/backup-config-create.png b/docs/platform/guides/database-management/images/backup-config-create.png similarity index 100% rename from src/en/guides/database-management/images/backup-config-create.png rename to docs/platform/guides/database-management/images/backup-config-create.png diff --git a/src/en/guides/database-management/images/backup-config-delete.png b/docs/platform/guides/database-management/images/backup-config-delete.png similarity index 100% rename from src/en/guides/database-management/images/backup-config-delete.png rename to docs/platform/guides/database-management/images/backup-config-delete.png diff --git a/src/en/guides/database-management/images/backup-config-modify.png b/docs/platform/guides/database-management/images/backup-config-modify.png similarity index 100% rename from src/en/guides/database-management/images/backup-config-modify.png rename to docs/platform/guides/database-management/images/backup-config-modify.png diff --git a/src/en/guides/database-management/images/backup-config-submit.png b/docs/platform/guides/database-management/images/backup-config-submit.png similarity index 100% rename from src/en/guides/database-management/images/backup-config-submit.png rename to docs/platform/guides/database-management/images/backup-config-submit.png diff --git a/src/en/guides/database-management/images/backup-config.png b/docs/platform/guides/database-management/images/backup-config.png similarity index 100% rename from src/en/guides/database-management/images/backup-config.png rename to docs/platform/guides/database-management/images/backup-config.png diff --git a/src/en/guides/database-management/images/backup/config-db-overview.png b/docs/platform/guides/database-management/images/backup/config-db-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/config-db-overview.png rename to docs/platform/guides/database-management/images/backup/config-db-overview.png diff --git a/src/en/guides/database-management/images/backup/config-db-repository.png b/docs/platform/guides/database-management/images/backup/config-db-repository.png similarity index 100% rename from src/en/guides/database-management/images/backup/config-db-repository.png rename to docs/platform/guides/database-management/images/backup/config-db-repository.png diff --git a/src/en/guides/database-management/images/backup/config-dbs-overview.png b/docs/platform/guides/database-management/images/backup/config-dbs-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/config-dbs-overview.png rename to docs/platform/guides/database-management/images/backup/config-dbs-overview.png diff --git a/src/en/guides/database-management/images/backup/config-label-annotation.png b/docs/platform/guides/database-management/images/backup/config-label-annotation.png similarity index 100% rename from src/en/guides/database-management/images/backup/config-label-annotation.png rename to docs/platform/guides/database-management/images/backup/config-label-annotation.png diff --git a/src/en/guides/database-management/images/backup/config-name-namespace.png b/docs/platform/guides/database-management/images/backup/config-name-namespace.png similarity index 100% rename from src/en/guides/database-management/images/backup/config-name-namespace.png rename to docs/platform/guides/database-management/images/backup/config-name-namespace.png diff --git a/src/en/guides/database-management/images/backup/config-session-task.png b/docs/platform/guides/database-management/images/backup/config-session-task.png similarity index 100% rename from src/en/guides/database-management/images/backup/config-session-task.png rename to docs/platform/guides/database-management/images/backup/config-session-task.png diff --git a/src/en/guides/database-management/images/backup/config-sessions.png b/docs/platform/guides/database-management/images/backup/config-sessions.png similarity index 100% rename from src/en/guides/database-management/images/backup/config-sessions.png rename to docs/platform/guides/database-management/images/backup/config-sessions.png diff --git a/src/en/guides/database-management/images/backup/config-target.png b/docs/platform/guides/database-management/images/backup/config-target.png similarity index 100% rename from src/en/guides/database-management/images/backup/config-target.png rename to docs/platform/guides/database-management/images/backup/config-target.png diff --git a/src/en/guides/database-management/images/backup/configuration-overview.png b/docs/platform/guides/database-management/images/backup/configuration-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/configuration-overview.png rename to docs/platform/guides/database-management/images/backup/configuration-overview.png diff --git a/src/en/guides/database-management/images/backup/recent-backup-create.png b/docs/platform/guides/database-management/images/backup/recent-backup-create.png similarity index 100% rename from src/en/guides/database-management/images/backup/recent-backup-create.png rename to docs/platform/guides/database-management/images/backup/recent-backup-create.png diff --git a/src/en/guides/database-management/images/backup/recent-backup-overview.png b/docs/platform/guides/database-management/images/backup/recent-backup-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/recent-backup-overview.png rename to docs/platform/guides/database-management/images/backup/recent-backup-overview.png diff --git a/src/en/guides/database-management/images/backup/recent-create-form.png b/docs/platform/guides/database-management/images/backup/recent-create-form.png similarity index 100% rename from src/en/guides/database-management/images/backup/recent-create-form.png rename to docs/platform/guides/database-management/images/backup/recent-create-form.png diff --git a/src/en/guides/database-management/images/backup/recent-db-overview.png b/docs/platform/guides/database-management/images/backup/recent-db-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/recent-db-overview.png rename to docs/platform/guides/database-management/images/backup/recent-db-overview.png diff --git a/src/en/guides/database-management/images/backup/repository-app-ref.png b/docs/platform/guides/database-management/images/backup/repository-app-ref.png similarity index 100% rename from src/en/guides/database-management/images/backup/repository-app-ref.png rename to docs/platform/guides/database-management/images/backup/repository-app-ref.png diff --git a/src/en/guides/database-management/images/backup/repository-create-overview.png b/docs/platform/guides/database-management/images/backup/repository-create-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/repository-create-overview.png rename to docs/platform/guides/database-management/images/backup/repository-create-overview.png diff --git a/src/en/guides/database-management/images/backup/repository-db-overview.png b/docs/platform/guides/database-management/images/backup/repository-db-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/repository-db-overview.png rename to docs/platform/guides/database-management/images/backup/repository-db-overview.png diff --git a/src/en/guides/database-management/images/backup/repository-db-snapshot.png b/docs/platform/guides/database-management/images/backup/repository-db-snapshot.png similarity index 100% rename from src/en/guides/database-management/images/backup/repository-db-snapshot.png rename to docs/platform/guides/database-management/images/backup/repository-db-snapshot.png diff --git a/src/en/guides/database-management/images/backup/repository-label-annotation.png b/docs/platform/guides/database-management/images/backup/repository-label-annotation.png similarity index 100% rename from src/en/guides/database-management/images/backup/repository-label-annotation.png rename to docs/platform/guides/database-management/images/backup/repository-label-annotation.png diff --git a/src/en/guides/database-management/images/backup/repository-overview.png b/docs/platform/guides/database-management/images/backup/repository-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/repository-overview.png rename to docs/platform/guides/database-management/images/backup/repository-overview.png diff --git a/src/en/guides/database-management/images/backup/repository-ref-secret.png b/docs/platform/guides/database-management/images/backup/repository-ref-secret.png similarity index 100% rename from src/en/guides/database-management/images/backup/repository-ref-secret.png rename to docs/platform/guides/database-management/images/backup/repository-ref-secret.png diff --git a/src/en/guides/database-management/images/backup/restore-config.png b/docs/platform/guides/database-management/images/backup/restore-config.png similarity index 100% rename from src/en/guides/database-management/images/backup/restore-config.png rename to docs/platform/guides/database-management/images/backup/restore-config.png diff --git a/src/en/guides/database-management/images/backup/restore-create-overview.png b/docs/platform/guides/database-management/images/backup/restore-create-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/restore-create-overview.png rename to docs/platform/guides/database-management/images/backup/restore-create-overview.png diff --git a/src/en/guides/database-management/images/backup/restore-overview.png b/docs/platform/guides/database-management/images/backup/restore-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/restore-overview.png rename to docs/platform/guides/database-management/images/backup/restore-overview.png diff --git a/src/en/guides/database-management/images/backup/restore-target.png b/docs/platform/guides/database-management/images/backup/restore-target.png similarity index 100% rename from src/en/guides/database-management/images/backup/restore-target.png rename to docs/platform/guides/database-management/images/backup/restore-target.png diff --git a/src/en/guides/database-management/images/backup/snapshot-delete.png b/docs/platform/guides/database-management/images/backup/snapshot-delete.png similarity index 100% rename from src/en/guides/database-management/images/backup/snapshot-delete.png rename to docs/platform/guides/database-management/images/backup/snapshot-delete.png diff --git a/src/en/guides/database-management/images/backup/snapshot-operation-view.png b/docs/platform/guides/database-management/images/backup/snapshot-operation-view.png similarity index 100% rename from src/en/guides/database-management/images/backup/snapshot-operation-view.png rename to docs/platform/guides/database-management/images/backup/snapshot-operation-view.png diff --git a/src/en/guides/database-management/images/backup/snapshot-overview.png b/docs/platform/guides/database-management/images/backup/snapshot-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/snapshot-overview.png rename to docs/platform/guides/database-management/images/backup/snapshot-overview.png diff --git a/src/en/guides/database-management/images/backup/storage-create-backend.png b/docs/platform/guides/database-management/images/backup/storage-create-backend.png similarity index 100% rename from src/en/guides/database-management/images/backup/storage-create-backend.png rename to docs/platform/guides/database-management/images/backup/storage-create-backend.png diff --git a/src/en/guides/database-management/images/backup/storage-create-overview.png b/docs/platform/guides/database-management/images/backup/storage-create-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/storage-create-overview.png rename to docs/platform/guides/database-management/images/backup/storage-create-overview.png diff --git a/src/en/guides/database-management/images/backup/storage-db-overview.png b/docs/platform/guides/database-management/images/backup/storage-db-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/storage-db-overview.png rename to docs/platform/guides/database-management/images/backup/storage-db-overview.png diff --git a/src/en/guides/database-management/images/backup/storage-label-annotation.png b/docs/platform/guides/database-management/images/backup/storage-label-annotation.png similarity index 100% rename from src/en/guides/database-management/images/backup/storage-label-annotation.png rename to docs/platform/guides/database-management/images/backup/storage-label-annotation.png diff --git a/src/en/guides/database-management/images/backup/storage-overview.png b/docs/platform/guides/database-management/images/backup/storage-overview.png similarity index 100% rename from src/en/guides/database-management/images/backup/storage-overview.png rename to docs/platform/guides/database-management/images/backup/storage-overview.png diff --git a/src/en/guides/database-management/images/db-create/Additional-option.png b/docs/platform/guides/database-management/images/db-create/Additional-option.png similarity index 100% rename from src/en/guides/database-management/images/db-create/Additional-option.png rename to docs/platform/guides/database-management/images/db-create/Additional-option.png diff --git a/src/en/guides/database-management/images/db-create/advance-lavel-annotation.png b/docs/platform/guides/database-management/images/db-create/advance-lavel-annotation.png similarity index 100% rename from src/en/guides/database-management/images/db-create/advance-lavel-annotation.png rename to docs/platform/guides/database-management/images/db-create/advance-lavel-annotation.png diff --git a/src/en/guides/database-management/images/db-create/auth-creds.png b/docs/platform/guides/database-management/images/db-create/auth-creds.png similarity index 100% rename from src/en/guides/database-management/images/db-create/auth-creds.png rename to docs/platform/guides/database-management/images/db-create/auth-creds.png diff --git a/src/en/guides/database-management/images/db-create/config-server.png b/docs/platform/guides/database-management/images/db-create/config-server.png similarity index 100% rename from src/en/guides/database-management/images/db-create/config-server.png rename to docs/platform/guides/database-management/images/db-create/config-server.png diff --git a/src/en/guides/database-management/images/db-create/create-overview-page.png b/docs/platform/guides/database-management/images/db-create/create-overview-page.png similarity index 100% rename from src/en/guides/database-management/images/db-create/create-overview-page.png rename to docs/platform/guides/database-management/images/db-create/create-overview-page.png diff --git a/src/en/guides/database-management/images/db-create/db-type-select.png b/docs/platform/guides/database-management/images/db-create/db-type-select.png similarity index 100% rename from src/en/guides/database-management/images/db-create/db-type-select.png rename to docs/platform/guides/database-management/images/db-create/db-type-select.png diff --git a/src/en/guides/database-management/images/db-create/deletion-policy.png b/docs/platform/guides/database-management/images/db-create/deletion-policy.png similarity index 100% rename from src/en/guides/database-management/images/db-create/deletion-policy.png rename to docs/platform/guides/database-management/images/db-create/deletion-policy.png diff --git a/src/en/guides/database-management/images/db-create/machine-profile.png b/docs/platform/guides/database-management/images/db-create/machine-profile.png similarity index 100% rename from src/en/guides/database-management/images/db-create/machine-profile.png rename to docs/platform/guides/database-management/images/db-create/machine-profile.png diff --git a/src/en/guides/database-management/images/db-create/mongos-mode.png b/docs/platform/guides/database-management/images/db-create/mongos-mode.png similarity index 100% rename from src/en/guides/database-management/images/db-create/mongos-mode.png rename to docs/platform/guides/database-management/images/db-create/mongos-mode.png diff --git a/src/en/guides/database-management/images/db-create/name-namespace-select.png b/docs/platform/guides/database-management/images/db-create/name-namespace-select.png similarity index 100% rename from src/en/guides/database-management/images/db-create/name-namespace-select.png rename to docs/platform/guides/database-management/images/db-create/name-namespace-select.png diff --git a/src/en/guides/database-management/images/db-create/overview-create.png b/docs/platform/guides/database-management/images/db-create/overview-create.png similarity index 100% rename from src/en/guides/database-management/images/db-create/overview-create.png rename to docs/platform/guides/database-management/images/db-create/overview-create.png diff --git a/src/en/guides/database-management/images/db-create/point-in-time-recovery.png b/docs/platform/guides/database-management/images/db-create/point-in-time-recovery.png similarity index 100% rename from src/en/guides/database-management/images/db-create/point-in-time-recovery.png rename to docs/platform/guides/database-management/images/db-create/point-in-time-recovery.png diff --git a/src/en/guides/database-management/images/db-create/replicaset-mode.png b/docs/platform/guides/database-management/images/db-create/replicaset-mode.png similarity index 100% rename from src/en/guides/database-management/images/db-create/replicaset-mode.png rename to docs/platform/guides/database-management/images/db-create/replicaset-mode.png diff --git a/src/en/guides/database-management/images/db-create/shard-mode.png b/docs/platform/guides/database-management/images/db-create/shard-mode.png similarity index 100% rename from src/en/guides/database-management/images/db-create/shard-mode.png rename to docs/platform/guides/database-management/images/db-create/shard-mode.png diff --git a/src/en/guides/database-management/images/db-create/shard-nodes.png b/docs/platform/guides/database-management/images/db-create/shard-nodes.png similarity index 100% rename from src/en/guides/database-management/images/db-create/shard-nodes.png rename to docs/platform/guides/database-management/images/db-create/shard-nodes.png diff --git a/src/en/guides/database-management/images/db-create/storage-class.png b/docs/platform/guides/database-management/images/db-create/storage-class.png similarity index 100% rename from src/en/guides/database-management/images/db-create/storage-class.png rename to docs/platform/guides/database-management/images/db-create/storage-class.png diff --git a/src/en/guides/database-management/images/db-insights.png b/docs/platform/guides/database-management/images/db-insights.png similarity index 100% rename from src/en/guides/database-management/images/db-insights.png rename to docs/platform/guides/database-management/images/db-insights.png diff --git a/src/en/guides/database-management/images/db-overview.png b/docs/platform/guides/database-management/images/db-overview.png similarity index 100% rename from src/en/guides/database-management/images/db-overview.png rename to docs/platform/guides/database-management/images/db-overview.png diff --git a/src/en/guides/database-management/images/db-users-kubevault.png b/docs/platform/guides/database-management/images/db-users-kubevault.png similarity index 100% rename from src/en/guides/database-management/images/db-users-kubevault.png rename to docs/platform/guides/database-management/images/db-users-kubevault.png diff --git a/src/en/guides/database-management/images/db-users.png b/docs/platform/guides/database-management/images/db-users.png similarity index 100% rename from src/en/guides/database-management/images/db-users.png rename to docs/platform/guides/database-management/images/db-users.png diff --git a/src/en/guides/database-management/images/delete-modal.png b/docs/platform/guides/database-management/images/delete-modal.png similarity index 100% rename from src/en/guides/database-management/images/delete-modal.png rename to docs/platform/guides/database-management/images/delete-modal.png diff --git a/src/en/guides/database-management/images/delete-overview-modal.png b/docs/platform/guides/database-management/images/delete-overview-modal.png similarity index 100% rename from src/en/guides/database-management/images/delete-overview-modal.png rename to docs/platform/guides/database-management/images/delete-overview-modal.png diff --git a/src/en/guides/database-management/images/delete-overview.png b/docs/platform/guides/database-management/images/delete-overview.png similarity index 100% rename from src/en/guides/database-management/images/delete-overview.png rename to docs/platform/guides/database-management/images/delete-overview.png diff --git a/src/en/guides/database-management/images/delete.png b/docs/platform/guides/database-management/images/delete.png similarity index 100% rename from src/en/guides/database-management/images/delete.png rename to docs/platform/guides/database-management/images/delete.png diff --git a/src/en/guides/database-management/images/expose-via-gateway.png b/docs/platform/guides/database-management/images/expose-via-gateway.png similarity index 100% rename from src/en/guides/database-management/images/expose-via-gateway.png rename to docs/platform/guides/database-management/images/expose-via-gateway.png diff --git a/src/en/guides/database-management/images/horizontal-scale-form.png b/docs/platform/guides/database-management/images/horizontal-scale-form.png similarity index 100% rename from src/en/guides/database-management/images/horizontal-scale-form.png rename to docs/platform/guides/database-management/images/horizontal-scale-form.png diff --git a/src/en/guides/database-management/images/instant-backup-form.png b/docs/platform/guides/database-management/images/instant-backup-form.png similarity index 100% rename from src/en/guides/database-management/images/instant-backup-form.png rename to docs/platform/guides/database-management/images/instant-backup-form.png diff --git a/src/en/guides/database-management/images/instant-backup.png b/docs/platform/guides/database-management/images/instant-backup.png similarity index 100% rename from src/en/guides/database-management/images/instant-backup.png rename to docs/platform/guides/database-management/images/instant-backup.png diff --git a/src/en/guides/database-management/images/monitoring-env-config.png b/docs/platform/guides/database-management/images/monitoring-env-config.png similarity index 100% rename from src/en/guides/database-management/images/monitoring-env-config.png rename to docs/platform/guides/database-management/images/monitoring-env-config.png diff --git a/src/en/guides/database-management/images/monitoring-env-secret.png b/docs/platform/guides/database-management/images/monitoring-env-secret.png similarity index 100% rename from src/en/guides/database-management/images/monitoring-env-secret.png rename to docs/platform/guides/database-management/images/monitoring-env-secret.png diff --git a/src/en/guides/database-management/images/monitoring-exporter.png b/docs/platform/guides/database-management/images/monitoring-exporter.png similarity index 100% rename from src/en/guides/database-management/images/monitoring-exporter.png rename to docs/platform/guides/database-management/images/monitoring-exporter.png diff --git a/src/en/guides/database-management/images/monitoring-scrapper.png b/docs/platform/guides/database-management/images/monitoring-scrapper.png similarity index 100% rename from src/en/guides/database-management/images/monitoring-scrapper.png rename to docs/platform/guides/database-management/images/monitoring-scrapper.png diff --git a/src/en/guides/database-management/images/monitoring.png b/docs/platform/guides/database-management/images/monitoring.png similarity index 100% rename from src/en/guides/database-management/images/monitoring.png rename to docs/platform/guides/database-management/images/monitoring.png diff --git a/src/en/guides/database-management/images/motoring-prometheus.png b/docs/platform/guides/database-management/images/motoring-prometheus.png similarity index 100% rename from src/en/guides/database-management/images/motoring-prometheus.png rename to docs/platform/guides/database-management/images/motoring-prometheus.png diff --git a/src/en/guides/database-management/images/motoring-service-monitor.png b/docs/platform/guides/database-management/images/motoring-service-monitor.png similarity index 100% rename from src/en/guides/database-management/images/motoring-service-monitor.png rename to docs/platform/guides/database-management/images/motoring-service-monitor.png diff --git a/src/en/guides/database-management/images/reconfigure-apply.png b/docs/platform/guides/database-management/images/reconfigure-apply.png similarity index 100% rename from src/en/guides/database-management/images/reconfigure-apply.png rename to docs/platform/guides/database-management/images/reconfigure-apply.png diff --git a/src/en/guides/database-management/images/reconfigure-create-secret.png b/docs/platform/guides/database-management/images/reconfigure-create-secret.png similarity index 100% rename from src/en/guides/database-management/images/reconfigure-create-secret.png rename to docs/platform/guides/database-management/images/reconfigure-create-secret.png diff --git a/src/en/guides/database-management/images/reconfigure-new-secret.png b/docs/platform/guides/database-management/images/reconfigure-new-secret.png similarity index 100% rename from src/en/guides/database-management/images/reconfigure-new-secret.png rename to docs/platform/guides/database-management/images/reconfigure-new-secret.png diff --git a/src/en/guides/database-management/images/reconfigure-remove.png b/docs/platform/guides/database-management/images/reconfigure-remove.png similarity index 100% rename from src/en/guides/database-management/images/reconfigure-remove.png rename to docs/platform/guides/database-management/images/reconfigure-remove.png diff --git a/src/en/guides/database-management/images/reconfigure.png b/docs/platform/guides/database-management/images/reconfigure.png similarity index 100% rename from src/en/guides/database-management/images/reconfigure.png rename to docs/platform/guides/database-management/images/reconfigure.png diff --git a/src/en/guides/database-management/images/restart-preview.png b/docs/platform/guides/database-management/images/restart-preview.png similarity index 100% rename from src/en/guides/database-management/images/restart-preview.png rename to docs/platform/guides/database-management/images/restart-preview.png diff --git a/src/en/guides/database-management/images/restart-submit.png b/docs/platform/guides/database-management/images/restart-submit.png similarity index 100% rename from src/en/guides/database-management/images/restart-submit.png rename to docs/platform/guides/database-management/images/restart-submit.png diff --git a/src/en/guides/database-management/images/restart.png b/docs/platform/guides/database-management/images/restart.png similarity index 100% rename from src/en/guides/database-management/images/restart.png rename to docs/platform/guides/database-management/images/restart.png diff --git a/src/en/guides/database-management/images/restore-config.png b/docs/platform/guides/database-management/images/restore-config.png similarity index 100% rename from src/en/guides/database-management/images/restore-config.png rename to docs/platform/guides/database-management/images/restore-config.png diff --git a/src/en/guides/database-management/images/restore.png b/docs/platform/guides/database-management/images/restore.png similarity index 100% rename from src/en/guides/database-management/images/restore.png rename to docs/platform/guides/database-management/images/restore.png diff --git a/src/en/guides/database-management/images/storage-autoscaling.png b/docs/platform/guides/database-management/images/storage-autoscaling.png similarity index 100% rename from src/en/guides/database-management/images/storage-autoscaling.png rename to docs/platform/guides/database-management/images/storage-autoscaling.png diff --git a/src/en/guides/database-management/images/storage-scale-readiness.png b/docs/platform/guides/database-management/images/storage-scale-readiness.png similarity index 100% rename from src/en/guides/database-management/images/storage-scale-readiness.png rename to docs/platform/guides/database-management/images/storage-scale-readiness.png diff --git a/src/en/guides/database-management/images/storage-scale-standalone.png b/docs/platform/guides/database-management/images/storage-scale-standalone.png similarity index 100% rename from src/en/guides/database-management/images/storage-scale-standalone.png rename to docs/platform/guides/database-management/images/storage-scale-standalone.png diff --git a/src/en/guides/database-management/images/storage-scale-volume.png b/docs/platform/guides/database-management/images/storage-scale-volume.png similarity index 100% rename from src/en/guides/database-management/images/storage-scale-volume.png rename to docs/platform/guides/database-management/images/storage-scale-volume.png diff --git a/src/en/guides/database-management/images/storage-scale.png b/docs/platform/guides/database-management/images/storage-scale.png similarity index 100% rename from src/en/guides/database-management/images/storage-scale.png rename to docs/platform/guides/database-management/images/storage-scale.png diff --git a/src/en/guides/database-management/images/tls-certificate-details.png b/docs/platform/guides/database-management/images/tls-certificate-details.png similarity index 100% rename from src/en/guides/database-management/images/tls-certificate-details.png rename to docs/platform/guides/database-management/images/tls-certificate-details.png diff --git a/src/en/guides/database-management/images/tls-certificate.png b/docs/platform/guides/database-management/images/tls-certificate.png similarity index 100% rename from src/en/guides/database-management/images/tls-certificate.png rename to docs/platform/guides/database-management/images/tls-certificate.png diff --git a/src/en/guides/database-management/images/tls-operation.png b/docs/platform/guides/database-management/images/tls-operation.png similarity index 100% rename from src/en/guides/database-management/images/tls-operation.png rename to docs/platform/guides/database-management/images/tls-operation.png diff --git a/src/en/guides/database-management/images/tls.png b/docs/platform/guides/database-management/images/tls.png similarity index 100% rename from src/en/guides/database-management/images/tls.png rename to docs/platform/guides/database-management/images/tls.png diff --git a/src/en/guides/database-management/images/update-version-preview.png b/docs/platform/guides/database-management/images/update-version-preview.png similarity index 100% rename from src/en/guides/database-management/images/update-version-preview.png rename to docs/platform/guides/database-management/images/update-version-preview.png diff --git a/src/en/guides/database-management/images/update-version-submit.png b/docs/platform/guides/database-management/images/update-version-submit.png similarity index 100% rename from src/en/guides/database-management/images/update-version-submit.png rename to docs/platform/guides/database-management/images/update-version-submit.png diff --git a/src/en/guides/database-management/images/update-version.png b/docs/platform/guides/database-management/images/update-version.png similarity index 100% rename from src/en/guides/database-management/images/update-version.png rename to docs/platform/guides/database-management/images/update-version.png diff --git a/src/en/guides/database-management/images/vertical-exporter.png b/docs/platform/guides/database-management/images/vertical-exporter.png similarity index 100% rename from src/en/guides/database-management/images/vertical-exporter.png rename to docs/platform/guides/database-management/images/vertical-exporter.png diff --git a/src/en/guides/database-management/images/vertical-machine-profile.png b/docs/platform/guides/database-management/images/vertical-machine-profile.png similarity index 100% rename from src/en/guides/database-management/images/vertical-machine-profile.png rename to docs/platform/guides/database-management/images/vertical-machine-profile.png diff --git a/src/en/guides/database-management/images/vertical-machine-profile2.png b/docs/platform/guides/database-management/images/vertical-machine-profile2.png similarity index 100% rename from src/en/guides/database-management/images/vertical-machine-profile2.png rename to docs/platform/guides/database-management/images/vertical-machine-profile2.png diff --git a/src/en/guides/database-management/images/vertical-node-selection.png b/docs/platform/guides/database-management/images/vertical-node-selection.png similarity index 100% rename from src/en/guides/database-management/images/vertical-node-selection.png rename to docs/platform/guides/database-management/images/vertical-node-selection.png diff --git a/src/en/guides/database-management/images/vertical-scaling.png b/docs/platform/guides/database-management/images/vertical-scaling.png similarity index 100% rename from src/en/guides/database-management/images/vertical-scaling.png rename to docs/platform/guides/database-management/images/vertical-scaling.png diff --git a/src/en/guides/database-management/instant-backup-restore.md b/docs/platform/guides/database-management/instant-backup-restore.md similarity index 89% rename from src/en/guides/database-management/instant-backup-restore.md rename to docs/platform/guides/database-management/instant-backup-restore.md index bc30b32..7783fea 100644 --- a/src/en/guides/database-management/instant-backup-restore.md +++ b/docs/platform/guides/database-management/instant-backup-restore.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-instant-backup-restore name: Instant Backup & Restore parent: database-management weight: 45 - home_menu: - identifier: home-database-instant-backup-restore - name: Instant Backup & Restore - parent: home-database - weight: 45 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -35,7 +30,7 @@ To begin, select **Instant Backup** or **Restore** from the left sidebar under * The **Instant Backup** form lets you trigger an on-demand backup right away by selecting an existing backup configuration and one or more backup sessions. -![Instant Backup form showing Backup Configuration and Backup Sessions fields](./images/instant-backup.png) +![Instant Backup form showing Backup Configuration and Backup Sessions fields](../images/instant-backup.png) ### 2.1 - Selecting a Backup Configuration @@ -45,7 +40,7 @@ The **Instant Backup** form lets you trigger an on-demand backup right away by s 1. **Backup Sessions:** Select one or more backup sessions to trigger (e.g., `full-backup`). Sessions are defined within the chosen backup configuration. This field is required. -![Instant Backup form filled with Backup Configuration demo/mongodb and Backup Sessions full-backup selected](./images/instant-backup-form.png) +![Instant Backup form filled with Backup Configuration demo/mongodb and Backup Sessions full-backup selected](../images/instant-backup-form.png) > **Tip:** You can select multiple backup sessions from the dropdown if your configuration defines more than one session type (e.g., `full-backup`, `incremental-backup`). @@ -59,7 +54,7 @@ The **Instant Backup** form lets you trigger an on-demand backup right away by s The **Restore Configuration** form allows you to define exactly which data you want to recover and where it should come from. -![Restore Configuration form with Repository and Snapshot fields](./images/restore-config.png) +![Restore Configuration form with Repository and Snapshot fields](../images/restore-config.png) 1. **Repository:** Select the backup repository that contains your data (e.g., **demo/mongodb**). 1. **Select Snapshot:** Choose the specific point-in-time backup you wish to restore. diff --git a/docs/platform/guides/database-management/manage-recommendations.md b/docs/platform/guides/database-management/manage-recommendations.md new file mode 100644 index 0000000..2e2827b --- /dev/null +++ b/docs/platform/guides/database-management/manage-recommendations.md @@ -0,0 +1,14 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: database-management-recommendation + name: Manage Recommendations + parent: database-management + weight: 80 +menu_name: docsplatform_{{.version}} +section_menu_id: guides +--- + + +# Manage Recommendations diff --git a/src/en/guides/database-management/monitoring.md b/docs/platform/guides/database-management/monitoring.md similarity index 91% rename from src/en/guides/database-management/monitoring.md rename to docs/platform/guides/database-management/monitoring.md index a6893c9..a695f19 100644 --- a/src/en/guides/database-management/monitoring.md +++ b/docs/platform/guides/database-management/monitoring.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-monitoring name: Configure Monitoring parent: database-management weight: 75 - home_menu: - identifier: home-database-monitoring - name: Configure Monitoring - parent: home-database - weight: 75 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -32,7 +27,7 @@ You will land on the **Monitoring** form, which is divided into the following se - **Select a Monitoring Method** — Choose how Prometheus scrapes your database metrics. - **Exporter Configuration** — Optionally customize the metrics exporter sidecar container. -![Monitoring form overview showing Enable Monitoring toggle, monitoring method selection, and Exporter Configuration](./images/monitoring.png) +![Monitoring form overview showing Enable Monitoring toggle, monitoring method selection, and Exporter Configuration](../images/monitoring.png) > **Note:** To update the Exporter Resource section, click on **Create OpsRequest** at the top of the page. @@ -56,7 +51,7 @@ Selecting this method expands the **ServiceMonitor Configuration** panel: - **Scrapping Interval:** How frequently Prometheus scrapes metrics from the database (e.g., `30s`). Defaults to `30s` if left unchanged. -![Prometheus Operator method selected with ServiceMonitor Configuration showing Scrapping Interval of 30s](./images/motoring-prometheus.png) +![Prometheus Operator method selected with ServiceMonitor Configuration showing Scrapping Interval of 30s](../images/motoring-prometheus.png) > **Tip:** Use **Prometheus Operator** if you already have the Prometheus Operator installed in your cluster — it handles `ServiceMonitor` creation automatically. @@ -75,7 +70,7 @@ Selecting this method expands an **Endpoints** panel and a **Labels** panel for Use **+ Add new** in the **Labels** panel to attach additional key-value labels to the `ServiceMonitor`. You can also add multiple endpoints using **+ Add new** button in **Endpoints** panel. -![Custom ServiceMonitor method selected showing Endpoints panel with Honor Labels, Interval, Path, and Port fields, and a Labels section](./images/motoring-service-monitor.png) +![Custom ServiceMonitor method selected showing Endpoints panel with Honor Labels, Interval, Path, and Port fields, and a Labels section](../images/motoring-service-monitor.png) > **Note:** `Interval`, `Path` and `Port` fields are mandatory in **Endpoints** section. @@ -83,7 +78,7 @@ Use **+ Add new** in the **Labels** panel to attach additional key-value labels **Custom Scrapper** injects the metrics exporter sidecar and adds Prometheus scraping annotations directly to the stats `Service`, instead of creating a `ServiceMonitor`. Use this method with setups that rely on annotation-based service discovery rather than the Prometheus Operator. -![Custom Scrapper method selected](./images/monitoring-scrapper.png) +![Custom Scrapper method selected](../images/monitoring-scrapper.png) --- @@ -91,7 +86,7 @@ Use **+ Add new** in the **Labels** panel to attach additional key-value labels The **Exporter Configuration** section allows you to customize the metrics exporter sidecar container that is injected into your database pod. Toggle **Customize Exporter Sidecar** to expand the configuration options. -![Exporter Configuration section expanded showing Security Context, Args, and Environment Variables with Input value source selected](./images/monitoring-exporter.png) +![Exporter Configuration section expanded showing Security Context, Args, and Environment Variables with Input value source selected](../images/monitoring-exporter.png) ### 4.1 - Security Context @@ -116,7 +111,7 @@ Use the **Environment Variables** section to inject environment variables into t **Secret** — Pull the value from a Kubernetes Secret: -![Environment Variable with Secret source selected, showing Secret Name and Secret Key fields](./images/monitoring-env-secret.png) +![Environment Variable with Secret source selected, showing Secret Name and Secret Key fields](../images/monitoring-env-secret.png) | Field | Description | |---|---| @@ -125,7 +120,7 @@ Use the **Environment Variables** section to inject environment variables into t **ConfigMap** — Pull the value from a Kubernetes ConfigMap: -![Environment Variable with ConfigMap source selected, showing ConfigMap Name and ConfigMap Key fields](./images/monitoring-env-config.png) +![Environment Variable with ConfigMap source selected, showing ConfigMap Name and ConfigMap Key fields](../images/monitoring-env-config.png) | Field | Description | |---|---| diff --git a/src/en/guides/database-management/recent-backups.md b/docs/platform/guides/database-management/recent-backups.md similarity index 93% rename from src/en/guides/database-management/recent-backups.md rename to docs/platform/guides/database-management/recent-backups.md index 9a2c9cf..675d4e1 100644 --- a/src/en/guides/database-management/recent-backups.md +++ b/docs/platform/guides/database-management/recent-backups.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-recent-backups name: Recent Backups parent: database-management weight: 125 - home_menu: - identifier: home-database-recent-backups - name: Recent Backups - parent: home-database - weight: 125 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -32,7 +27,7 @@ Navigate to **Backups** in the left sidebar and select **Recent Backups**. This The list page displays all BackupSessions in your cluster, both scheduled (from BackupConfigurations) and on-demand. Use the **Select Namespace** dropdown to filter by namespace. -![BackupSession list page showing sessions with Name, Namespace, BackupConfiguration, Invoker Kind, Invoker Name, Session, Timeout, Phase, Duration, and Age columns](./images/backup/recent-backup-overview.png) +![BackupSession list page showing sessions with Name, Namespace, BackupConfiguration, Invoker Kind, Invoker Name, Session, Timeout, Phase, Duration, and Age columns](../images/backup/recent-backup-overview.png) | Column | Description | |---|---| @@ -57,7 +52,7 @@ Click on any BackupSession name in the list to open its detail page. The detail The detail page opens on the **Overview** tab showing: -![BackupSession detail page showing Basic info, Backup Configuration table, and Snapshots table](./images/backup/recent-db-overview.png) +![BackupSession detail page showing Basic info, Backup Configuration table, and Snapshots table](../images/backup/recent-db-overview.png) **Basic** — Core metadata for the session: @@ -106,11 +101,11 @@ To manually trigger an on-demand backup (without waiting for a scheduled BackupC The **Create BackupSession** form will open with the following fields: -![Create BackupSession form showing Namespace, Labels & Annotations, Invoker Kind, Invoker Name, Session, and Timeout fields](./images/backup/recent-backup-create.png) +![Create BackupSession form showing Namespace, Labels & Annotations, Invoker Kind, Invoker Name, Session, and Timeout fields](../images/backup/recent-backup-create.png) ### 4.1 - Basic Fields -![Create BackupSession form fields showing all required and optional sections](./images/backup/recent-create-form.png) +![Create BackupSession form fields showing all required and optional sections](../images/backup/recent-create-form.png) | Field | Description | |---|---| diff --git a/src/en/guides/database-management/reconfigure-database.md b/docs/platform/guides/database-management/reconfigure-database.md similarity index 94% rename from src/en/guides/database-management/reconfigure-database.md rename to docs/platform/guides/database-management/reconfigure-database.md index c558cad..56c106c 100644 --- a/src/en/guides/database-management/reconfigure-database.md +++ b/docs/platform/guides/database-management/reconfigure-database.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-reconfigure name: Reconfigure Databases parent: database-management weight: 65 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -27,7 +27,7 @@ You will land on the **Reconfigure** form, which provides three operation modes - **Apply Config** — Define custom configuration key-value pairs inline, without needing a pre-existing secret. - **Remove** — Remove an existing configuration secret from your database. -![Reconfigure form showing the three operation tabs: New Config Secret, Apply Config, and Remove](./images/reconfigure.png) +![Reconfigure form showing the three operation tabs: New Config Secret, Apply Config, and Remove](../images/reconfigure.png) --- @@ -35,7 +35,7 @@ You will land on the **Reconfigure** form, which provides three operation modes The **New Config Secret** tab lets you attach a Kubernetes secret containing your database configuration. Use this when you already have a configuration secret in your cluster or want to create one from scratch. -![New Config Secret tab showing the Config Secret dropdown and YAML preview panel](./images/reconfigure-new-secret.png) +![New Config Secret tab showing the Config Secret dropdown and YAML preview panel](../images/reconfigure-new-secret.png) 1. **Config Secret:** Click the **Config Secret** dropdown to select an existing secret from the list. - Use the **refresh** icon to reload the available secrets if your list is stale. @@ -46,7 +46,7 @@ The **New Config Secret** tab lets you attach a Kubernetes secret containing you If you choose **+ Create a new Secret**, a form will expand below the dropdown: -![Create a New Config Secret form with Secret Name and String Data fields](./images/reconfigure-create-secret.png) +![Create a New Config Secret form with Secret Name and String Data fields](../images/reconfigure-create-secret.png) 1. **Secret Name\*:** Enter a name for the new Kubernetes secret (e.g., `secret_name`). 2. **String Data\*:** Add one or more key-value pairs that define your configuration: @@ -64,7 +64,7 @@ If you choose **+ Create a new Secret**, a form will expand below the dropdown: The **Apply Config** tab lets you define custom database configuration parameters directly as key-value pairs, without needing a pre-existing secret. These parameters will overwrite the current settings. -![Apply Config tab showing the Configuration dropdown and YAML preview panel](./images/reconfigure-apply.png) +![Apply Config tab showing the Configuration dropdown and YAML preview panel](../images/reconfigure-apply.png) 1. **Configuration:** Click the **Configuration** dropdown to select an existing configuration or leave it unselected to start from scratch. 2. Enter the configuration parameters you want to apply (e.g., `max_connections`). Each parameter is defined as a key-value pair and will directly overwrite the corresponding existing setting. @@ -78,7 +78,7 @@ The **Apply Config** tab lets you define custom database configuration parameter The **Remove** tab lets you detach and remove an existing configuration secret from your database, reverting it to its default settings. -![Remove tab showing the Configuration dropdown for selecting the secret to remove](./images/reconfigure-remove.png) +![Remove tab showing the Configuration dropdown for selecting the secret to remove](../images/reconfigure-remove.png) 1. **Configuration:** Click the **Configuration** dropdown and select the configuration secret you want to remove. 2. Review the generated manifest in the preview panel on the right to confirm the correct secret is being targeted. diff --git a/src/en/guides/database-management/repository.md b/docs/platform/guides/database-management/repository.md similarity index 92% rename from src/en/guides/database-management/repository.md rename to docs/platform/guides/database-management/repository.md index 62abf3b..c7bdae9 100644 --- a/src/en/guides/database-management/repository.md +++ b/docs/platform/guides/database-management/repository.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-repository name: Backup Repository parent: database-management weight: 135 - home_menu: - identifier: home-database-repository - name: Repository - parent: home-database - weight: 135 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -32,7 +27,7 @@ Navigate to **Backups** in the left sidebar and select **Repository**. This open The list page displays all Repository resources configured across your cluster. Use the **Select Namespace** dropdown to filter by namespace, or click **Create New Instance** to add a new repository. -![Repository list page showing resources with Name, Namespace, BackupStorage, Target, Size, Phase, and Age columns](./images/backup/repository-overview.png) +![Repository list page showing resources with Name, Namespace, BackupStorage, Target, Size, Phase, and Age columns](../images/backup/repository-overview.png) | Column | Description | |---|---| @@ -54,7 +49,7 @@ Click on any Repository name in the list to open its detail page. The detail pag The detail page shows comprehensive information about the repository: -![Repository detail page showing Basic info, Backup Storage, Snapshots, and linked resources](./images/backup/repository-db-overview.png) +![Repository detail page showing Basic info, Backup Storage, Snapshots, and linked resources](../images/backup/repository-db-overview.png) **Basic** — Core metadata for the repository: @@ -83,7 +78,7 @@ The detail page shows comprehensive information about the repository: **Snapshots** — Individual backup snapshots stored in this repository: -![Backup Configuration and Snapshots tables showing all stored snapshots](./images/backup/repository-db-snapshot.png) +![Backup Configuration and Snapshots tables showing all stored snapshots](../images/backup/repository-db-snapshot.png) **Backup Configuration** — BackupConfigurations using this repository: @@ -124,7 +119,7 @@ To create a new Repository, click **Create New Instance** from the Repository li The form starts with identity and deletion policy fields: -![Create Repository form showing Namespace, Repository Name, Labels & Annotations, Deletion Policy, Storage Ref, Encryption Secret, Path, and App Ref sections](./images/backup/repository-create-overview.png) +![Create Repository form showing Namespace, Repository Name, Labels & Annotations, Deletion Policy, Storage Ref, Encryption Secret, Path, and App Ref sections](../images/backup/repository-create-overview.png) | Field | Description | |---|---| @@ -136,7 +131,7 @@ The form starts with identity and deletion policy fields: Expand the **Labels & Annotations** section to attach custom metadata: -![Labels and Annotations panel showing Labels and Annotations each with Key-Value input rows and Add new buttons](./images/backup/repository-label-annotation.png) +![Labels and Annotations panel showing Labels and Annotations each with Key-Value input rows and Add new buttons](../images/backup/repository-label-annotation.png) - Use **+ Add new** under **Labels** to add key-value label pairs. - Use **+ Add new** under **Annotations** to add key-value annotation pairs. @@ -146,7 +141,7 @@ Expand the **Labels & Annotations** section to attach custom metadata: The **Storage Ref**, **Encryption Secret**, and **Path** sections configure where and how snapshots are stored. -![Storage Ref and Encryption Secret sections showing Namespace/Name fields and Path field](./images/backup/repository-ref-secret.png) +![Storage Ref and Encryption Secret sections showing Namespace/Name fields and Path field](../images/backup/repository-ref-secret.png) **Storage Ref** — Reference to the BackupStorage backend: @@ -172,7 +167,7 @@ The **Storage Ref**, **Encryption Secret**, and **Path** sections configure wher The **App Ref** section identifies the database resource this repository backs up. -![App Ref section showing Api Group, Kind, Namespace, and Name dropdowns](./images/backup/repository-app-ref.png) +![App Ref section showing Api Group, Kind, Namespace, and Name dropdowns](../images/backup/repository-app-ref.png) | Field | Description | |---|---| diff --git a/src/en/guides/database-management/restart-database.md b/docs/platform/guides/database-management/restart-database.md similarity index 92% rename from src/en/guides/database-management/restart-database.md rename to docs/platform/guides/database-management/restart-database.md index 44527f9..bb75625 100644 --- a/src/en/guides/database-management/restart-database.md +++ b/docs/platform/guides/database-management/restart-database.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-restart name: Database Restarts parent: database-management weight: 60 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -25,7 +25,7 @@ You will land on the **Restart** form, which contains one main section: - **OpsRequest Options** — Configure how the restart operation is executed, including timeout and apply policy. -![Restart form showing OpsRequest Options panel](./images/restart.png) +![Restart form showing OpsRequest Options panel](../images/restart.png) --- @@ -38,7 +38,7 @@ Expand the **OpsRequest Options** panel to configure the restart operation. - **IfReady** — The restart will only be applied if the database is in a ready state. This is the recommended option. - **Always** — The OpsRequest will be applied regardless of the database's current state. -![Restart form filled with Timeout 1h and Apply set to IfReady](./images/restart-preview.png) +![Restart form filled with Timeout 1h and Apply set to IfReady](../images/restart-preview.png) > **Tip:** Use **IfReady** to avoid triggering a restart on an already unhealthy database, which could worsen its state. @@ -50,7 +50,7 @@ Expand the **OpsRequest Options** panel to configure the restart operation. The Preview page displays the full `MongoDBOpsRequest` manifest that will be applied to your cluster. Review it carefully to confirm all settings are correct. -![Preview page showing the generated MongoDBOpsRequest YAML manifest for Restart](./images/restart-submit.png) +![Preview page showing the generated MongoDBOpsRequest YAML manifest for Restart](../images/restart-submit.png) - The manifest is shown in **YAML** view by default. Use the **JSON** button to switch to JSON format if preferred. - Use the **Copy** button to copy the manifest to your clipboard. diff --git a/src/en/guides/database-management/restore.md b/docs/platform/guides/database-management/restore.md similarity index 92% rename from src/en/guides/database-management/restore.md rename to docs/platform/guides/database-management/restore.md index 224a921..62f7adc 100644 --- a/src/en/guides/database-management/restore.md +++ b/docs/platform/guides/database-management/restore.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-restore name: Backup Restore parent: database-management weight: 140 - home_menu: - identifier: home-database-restore - name: Restore - parent: home-database - weight: 140 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -32,7 +27,7 @@ Navigate to **Backups** in the left sidebar and select **Restore**. This opens t The list page displays all Restore resources in your cluster, including both scheduled and manually triggered restores. Use the **Select Namespace** dropdown to filter by namespace. -![Restore list page showing restore operations with Name, Namespace, Target, Task, Repository, Snapshot, Total components, Duration, Phase, and Age columns](./images/backup/restore-overview.png) +![Restore list page showing restore operations with Name, Namespace, Target, Task, Repository, Snapshot, Total components, Duration, Phase, and Age columns](../images/backup/restore-overview.png) | Column | Description | |---|---| @@ -55,7 +50,7 @@ To manually trigger a restore operation, click **Create New Instance** from the The **Create Restore** form will open with the following fields: -![Create Restore form showing Namespace, Labels & Annotations, Source Snapshot, and Target Database sections](./images/backup/restore-create-overview.png) +![Create Restore form showing Namespace, Labels & Annotations, Source Snapshot, and Target Database sections](../images/backup/restore-create-overview.png) ### 3.1 - Basic Fields @@ -77,7 +72,7 @@ Use the **Labels & Annotations** section to attach custom metadata: The **Source Snapshot** section specifies which backup snapshot to restore from. -![Source Snapshot panel showing Repository Namespace/Name and Snapshot Name fields](./images/backup/restore-config.png) +![Source Snapshot panel showing Repository Namespace/Name and Snapshot Name fields](../images/backup/restore-config.png) | Field | Description | |---|---| @@ -89,7 +84,7 @@ The **Source Snapshot** section specifies which backup snapshot to restore from. The **Target Database** section identifies where the data will be restored. -![Target Database panel showing Api Group, Kind, Namespace, and Name fields](./images/backup/restore-target.png) +![Target Database panel showing Api Group, Kind, Namespace, and Name fields](../images/backup/restore-target.png) | Field | Description | |---|---| diff --git a/src/en/guides/database-management/scaling-storage.md b/docs/platform/guides/database-management/scaling-storage.md similarity index 92% rename from src/en/guides/database-management/scaling-storage.md rename to docs/platform/guides/database-management/scaling-storage.md index cea6138..04873e4 100644 --- a/src/en/guides/database-management/scaling-storage.md +++ b/docs/platform/guides/database-management/scaling-storage.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-scaling-storage name: Scaling Storages parent: database-management weight: 35 - home_menu: - identifier: home-database-scaling-storage - name: Scaling Storages - parent: home-database - weight: 35 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -31,7 +26,7 @@ You will land on the **Expand Volume** form, which contains two method cards at - **Expand Volume** — Manually increase the database storage volume to a specified size. - **Storage Autoscaling** — Automatically scale storage capacity based on configurable usage thresholds. -![Expand Volume form showing method selection cards, Mode dropdown, Standalone volume expansion, and OpsRequest Options](./images/storage-scale.png) +![Expand Volume form showing method selection cards, Mode dropdown, Standalone volume expansion, and OpsRequest Options](../images/storage-scale.png) --- @@ -39,7 +34,7 @@ You will land on the **Expand Volume** form, which contains two method cards at Use this method to perform an immediate, one-time expansion of your database storage to a specific size. -![Expand Volume method selected showing Mode dropdown and Standalone current-to-new storage size input](./images/storage-scale-volume.png) +![Expand Volume method selected showing Mode dropdown and Standalone current-to-new storage size input](../images/storage-scale-volume.png) ### 2.1 - Selecting the Mode @@ -70,7 +65,7 @@ The **Standalone** panel specifies how much storage to allocate: Use this method to configure automatic storage expansion. The system monitors storage usage and expands capacity automatically when defined thresholds are crossed. -![Storage Autoscaling method selected showing Trigger toggle, Expansion Mode, Standalone, Readiness Criteria, Timeout, and Apply sections](./images/storage-autoscaling.png) +![Storage Autoscaling method selected showing Trigger toggle, Expansion Mode, Standalone, Readiness Criteria, Timeout, and Apply sections](../images/storage-autoscaling.png) ### 3.1 - Trigger @@ -87,7 +82,7 @@ Choose how the autoscaler expands storage when a threshold is triggered: The **Standalone** panel defines the usage threshold and scaling rules for standalone database nodes. -![Standalone panel showing UsageThreshold slider, Scaling Rules with Initial Storage and percentage steps, and UpperBound field](./images/storage-scale-standalone.png) +![Standalone panel showing UsageThreshold slider, Scaling Rules with Initial Storage and percentage steps, and UpperBound field](../images/storage-scale-standalone.png) | Field | Description | |---|---| @@ -102,7 +97,7 @@ Use **Add New Rule** to define additional scaling steps for different storage si The **Readiness Criteria** panel defines conditions that must be met before the autoscaler considers the database ready to accept a storage expansion. -![Readiness Criteria panel showing Objects Count Diff Percentage slider and Oplog Max Lag Seconds field](./images/storage-scale-readiness.png) +![Readiness Criteria panel showing Objects Count Diff Percentage slider and Oplog Max Lag Seconds field](../images/storage-scale-readiness.png) | Field | Description | |---|---| diff --git a/src/en/guides/database-management/scaling.md b/docs/platform/guides/database-management/scaling.md similarity index 91% rename from src/en/guides/database-management/scaling.md rename to docs/platform/guides/database-management/scaling.md index c3cc152..7fb6a82 100644 --- a/src/en/guides/database-management/scaling.md +++ b/docs/platform/guides/database-management/scaling.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-scale name: Scaling Databases parent: database-management weight: 30 - home_menu: - identifier: home-database-scale - name: Scaling Databases - parent: home-database - weight: 30 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -33,7 +28,7 @@ You will land on the scaling form, which shows two method cards at the top: Below the method cards, the form contains sections for **Configure Your Machine Profile**, **Node Selection**, **Exporter**, and **OpsRequest Options**. -![Vertical Scale form overview showing method cards, Machine Profile, Node Selection, Exporter, and OpsRequest Options sections](./images/vertical-scaling.png) +![Vertical Scale form overview showing method cards, Machine Profile, Node Selection, Exporter, and OpsRequest Options sections](../images/vertical-scaling.png) --- @@ -45,12 +40,12 @@ Use this method to manually set the CPU and memory resources for your database n The **Configure Your Machine Profile** panel lets you compare your current resource allocation with the proposed new configuration before applying it. -![Machine Profile panel showing Current Machine profile (250m CPU, 512Mi Memory) and New Machine profile with custom resource dropdown](./images/vertical-machine-profile.png) +![Machine Profile panel showing Current Machine profile (250m CPU, 512Mi Memory) and New Machine profile with custom resource dropdown](../images/vertical-machine-profile.png) - **Current Machine Profile** — Displays the existing CPU and memory allocation (read-only, shown for reference). - **New Machine Profile** — Select a preset resource profile from the **Resources** dropdown, or choose **custom** to enter CPU and Memory values manually. -![Machine Profile with Resources dropdown expanded showing available preset CPU and Memory options](./images/vertical-machine-profile2.png) +![Machine Profile with Resources dropdown expanded showing available preset CPU and Memory options](../images/vertical-machine-profile2.png) > **Tip:** Use a preset profile for common workload sizes. Switch to **custom** if you need precise control over CPU and memory values beyond the available presets. @@ -58,7 +53,7 @@ The **Configure Your Machine Profile** panel lets you compare your current resou The **Node Selection** panel controls which Kubernetes nodes the database pods are scheduled onto after scaling. -![Node Selection panel showing Node Selection Policy dropdown, Label Selector and Taints hint, and Topology key-value fields](./images/vertical-node-selection.png) +![Node Selection panel showing Node Selection Policy dropdown, Label Selector and Taints hint, and Topology key-value fields](../images/vertical-node-selection.png) | Field | Description | |---|---| @@ -70,7 +65,7 @@ The **Node Selection** panel controls which Kubernetes nodes the database pods a The **Exporter** panel sets the CPU and memory resources allocated to the metrics exporter sidecar container. -![Exporter panel showing CPU field set to 100m and Memory field set to 256Mi](./images/vertical-exporter.png) +![Exporter panel showing CPU field set to 100m and Memory field set to 256Mi](../images/vertical-exporter.png) | Field | Description | |---|---| @@ -94,7 +89,7 @@ Expand **OpsRequest Options** to configure the timeout and apply policy for the Use this method to automatically adjust CPU and memory based on actual workload demands. The autoscaler monitors resource usage and applies changes according to the policies you configure. -![Compute Autoscaling method selected showing Trigger toggle, Pod Lifetime Threshold, Standalone, NodeTopology, and OpsRequest Options sections](./images/auto-scaling.png) +![Compute Autoscaling method selected showing Trigger toggle, Pod Lifetime Threshold, Standalone, NodeTopology, and OpsRequest Options sections](../images/auto-scaling.png) ### 3.1 - Trigger and Pod Lifetime Threshold @@ -105,7 +100,7 @@ Use this method to automatically adjust CPU and memory based on actual workload The **Standalone** panel defines the resource boundaries and scaling sensitivity for standalone database nodes. -![Standalone panel showing ResourceDiff slider at 20%, Min Allowed and Max Allowed CPU and Memory, Controlled Resources, and Container Controlled Values](./images/auto-scaling-standalone.png) +![Standalone panel showing ResourceDiff slider at 20%, Min Allowed and Max Allowed CPU and Memory, Controlled Resources, and Container Controlled Values](../images/auto-scaling-standalone.png) | Field | Description | |---|---| @@ -121,7 +116,7 @@ The **Standalone** panel defines the resource boundaries and scaling sensitivity The **NodeTopology** panel lets you constrain autoscaling decisions to a specific node topology group, ensuring recommendations stay within the resource limits of a particular node class. -![NodeTopology panel showing Select NodeTopology dropdown](./images/auto-scaling-nodetopology.png) +![NodeTopology panel showing Select NodeTopology dropdown](../images/auto-scaling-nodetopology.png) 1. **Select NodeTopology:** Choose a node topology from the dropdown to scope the autoscaler's resource recommendations to the capacity of nodes in that topology. @@ -129,7 +124,7 @@ The **NodeTopology** panel lets you constrain autoscaling decisions to a specifi The **Readiness Criteria** panel defines conditions that must be met before the autoscaler applies a scaling recommendation. -![Readiness Criteria panel showing Objects Count Diff Percentage slider at 50% and Oplog Max Lag Seconds field set to 10](./images/auto-scaling-readiness.png) +![Readiness Criteria panel showing Objects Count Diff Percentage slider at 50% and Oplog Max Lag Seconds field set to 10](../images/auto-scaling-readiness.png) | Field | Description | |---|---| @@ -153,7 +148,7 @@ Expand **OpsRequest Options** to configure how the autoscaling OpsRequest is app Use **Horizontal Scale** to increase or decrease the number of database replicas. More replicas improve fault tolerance and distribute read load; fewer replicas conserve cluster resources. -![Horizontal Scale form showing Current Replicas (3) and New Replicas spinner input](./images/horizontal-scale-form.png) +![Horizontal Scale form showing Current Replicas (3) and New Replicas spinner input](../images/horizontal-scale-form.png) 1. **Current Replicas:** Displays the current replica count (read-only, shown for reference). 1. **New Replicas:** Enter the desired replica count using the spinner or by typing directly. Each replica is an independent copy of your database — for example, setting this to `3` creates three copies for improved availability. diff --git a/src/en/guides/database-management/security-report.md b/docs/platform/guides/database-management/security-report.md similarity index 62% rename from src/en/guides/database-management/security-report.md rename to docs/platform/guides/database-management/security-report.md index 20431e1..07004f8 100644 --- a/src/en/guides/database-management/security-report.md +++ b/docs/platform/guides/database-management/security-report.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-security name: Database Security Report parent: database-management weight: 90 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/database-management/snapshot.md b/docs/platform/guides/database-management/snapshot.md similarity index 93% rename from src/en/guides/database-management/snapshot.md rename to docs/platform/guides/database-management/snapshot.md index 8b501d8..1fbf86b 100644 --- a/src/en/guides/database-management/snapshot.md +++ b/docs/platform/guides/database-management/snapshot.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-snapshot name: Backup Snapshot parent: database-management weight: 145 - home_menu: - identifier: home-database-snapshot - name: Snapshot - parent: home-database - weight: 145 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -32,7 +27,7 @@ Navigate to **Backups** in the left sidebar and select **Snapshot**. This opens The list page displays all Snapshot resources in your cluster. Use the **Select Namespace** dropdown to filter by namespace, or view detailed information about stored snapshots. -![Snapshot list page showing snapshots with Name, Namespace, Repository, Invoker Kind, Invoker Name, Backend Repository, Creation Timestamp, Deletion Policy, Phase, Verification Status, and Age columns](./images/backup/snapshot-overview.png) +![Snapshot list page showing snapshots with Name, Namespace, Repository, Invoker Kind, Invoker Name, Backend Repository, Creation Timestamp, Deletion Policy, Phase, Verification Status, and Age columns](../images/backup/snapshot-overview.png) | Column | Description | |---|---| @@ -58,7 +53,7 @@ Click on any Snapshot name in the list to open its detail page. The detail page The detail page shows comprehensive snapshot information: -![Snapshot detail page showing Basic info, Repository reference, and Invoker information](./images/backup/snapshot-operation-view.png) +![Snapshot detail page showing Basic info, Repository reference, and Invoker information](../images/backup/snapshot-operation-view.png) **Basic** — Core metadata for the snapshot: @@ -103,7 +98,7 @@ To delete a snapshot, click on the snapshot name to open its detail page, then l When initiating a delete operation, a confirmation dialog appears: -![Delete Snapshot confirmation dialog showing deletion policy and confirmation options](./images/backup/snapshot-delete.png) +![Delete Snapshot confirmation dialog showing deletion policy and confirmation options](../images/backup/snapshot-delete.png) | Field | Description | |---|---| diff --git a/src/en/guides/database-management/tls.md b/docs/platform/guides/database-management/tls.md similarity index 92% rename from src/en/guides/database-management/tls.md rename to docs/platform/guides/database-management/tls.md index 9556638..6ed12f8 100644 --- a/src/en/guides/database-management/tls.md +++ b/docs/platform/guides/database-management/tls.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-tls name: Configure TLS parent: database-management weight: 70 - home_menu: - identifier: home-database-tls - name: Configure TLS - parent: home-database - weight: 70 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -35,7 +30,7 @@ You will land on the **TLS Configure** form, which is divided into the following - **Certificates** — Define one or more certificates with custom subject and SAN details. - **OpsRequest Options** — Configure timeout and apply policy for the operation. -![TLS Configure form showing all sections including TLS Operation, Issuer Reference, Certificates, and OpsRequest Options](./images/tls.png) +![TLS Configure form showing all sections including TLS Operation, Issuer Reference, Certificates, and OpsRequest Options](../images/tls.png) --- @@ -59,7 +54,7 @@ Expand the **Issuer Reference** panel to specify which cert-manager issuer shoul 1. **Kind:** Select the type of issuer — typically `ClusterIssuer` for cluster-wide issuers or `Issuer` for namespace-scoped ones. 1. **Name:** Enter the name of the issuer (e.g., `ace-incluster`). -![TLS Configure form filled with Operation set to Update and Issuer Reference expanded showing ClusterIssuer ace-incluster](./images/tls-operation.png) +![TLS Configure form filled with Operation set to Update and Issuer Reference expanded showing ClusterIssuer ace-incluster](../images/tls-operation.png) > **Note:** The Issuer Reference is required when the **Update** operation is selected. Ensure the issuer exists in your cluster before proceeding. @@ -69,7 +64,7 @@ Expand the **Issuer Reference** panel to specify which cert-manager issuer shoul The **Certificates** section allows you to define one or more certificates that will be managed by the TLS configuration. Click **+ Add new** to add a certificate entry. -![Certificates panel showing an empty certificate entry with all available fields](./images/tls-certificate.png) +![Certificates panel showing an empty certificate entry with all available fields](../images/tls-certificate.png) Each certificate entry contains the following fields: @@ -96,7 +91,7 @@ The **Alias** dropdown identifies the role of the certificate within the databas - **client** — The certificate used by clients connecting to the database. - **metrics-exporter** — The certificate used by the metrics exporter for secure scraping. -![Certificates panel showing the Alias dropdown expanded with server, client, and metrics-exporter options, and sample Organizations and Countries fields filled in](./images/tls-certificate-details.png) +![Certificates panel showing the Alias dropdown expanded with server, client, and metrics-exporter options, and sample Organizations and Countries fields filled in](../images/tls-certificate-details.png) > **Note:** Fields marked with a red asterisk are required. The filed with `+ Add new` button validates entries on input — leaving an added row empty will show an "Item cannot be empty" warning. Also You can add multiple instance of them. diff --git a/src/en/guides/database-management/upgrade-version.md b/docs/platform/guides/database-management/upgrade-version.md similarity index 91% rename from src/en/guides/database-management/upgrade-version.md rename to docs/platform/guides/database-management/upgrade-version.md index 1de9d94..7f1b82e 100644 --- a/src/en/guides/database-management/upgrade-version.md +++ b/docs/platform/guides/database-management/upgrade-version.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: database-management-update name: Upgrade Database Version parent: database-management weight: 50 - home_menu: - identifier: home-database-update - name: Upgrade Database Version - parent: home-database - weight: 50 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -31,7 +26,7 @@ You will land on the **Update Version** form, which has two main sections: - **Version** — Select the target version you want to upgrade your database to. - **OpsRequest Options** — Configure advanced settings such as timeout and apply policy. -![Update Version form showing Version selector and OpsRequest Options](./images/update-version.png) +![Update Version form showing Version selector and OpsRequest Options](../images/update-version.png) --- @@ -54,7 +49,7 @@ Expand the **OpsRequest Options** panel to configure how the upgrade operation i - **IfReady** — The upgrade will only be applied if the database is in a ready state. This is the recommended option. - **Always** — The OpsRequest will be applied regardless of the database's current state. -![Update Version form filled with Target Version 8.0.10, Timeout 2h, and Apply set to IfReady](./images/update-version-preview.png) +![Update Version form filled with Target Version 8.0.10, Timeout 2h, and Apply set to IfReady](../images/update-version-preview.png) > **Tip:** Use **IfReady** unless you have a specific reason to force the operation, as it prevents upgrades from running on an unhealthy database. @@ -66,7 +61,7 @@ Expand the **OpsRequest Options** panel to configure how the upgrade operation i The Preview page displays the full `MongoDBOpsRequest` manifest that will be applied to your cluster. Review it carefully to confirm all settings are correct. -![Preview page showing the generated MongoDBOpsRequest YAML manifest](./images/update-version-submit.png) +![Preview page showing the generated MongoDBOpsRequest YAML manifest](../images/update-version-submit.png) - The manifest is shown in **YAML** view by default. Use the **JSON** button to switch to JSON format if preferred. - Use the **Copy** button to copy the manifest to your clipboard. diff --git a/src/en/guides/get-started/_index.md b/docs/platform/guides/get-started/_index.md similarity index 66% rename from src/en/guides/get-started/_index.md rename to docs/platform/guides/get-started/_index.md index fa01969..679b582 100644 --- a/src/en/guides/get-started/_index.md +++ b/docs/platform/guides/get-started/_index.md @@ -1,13 +1,14 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: guide-start name: Get Started + parent: guides description: Basic information and instructions for first-time users of AppsCode icon: https://img.icons8.com/00994A/ios/50/rocket--v1.png popular: true weight: 10 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/get-started/add-cluster.md b/docs/platform/guides/get-started/add-cluster.md similarity index 82% rename from src/en/guides/get-started/add-cluster.md rename to docs/platform/guides/get-started/add-cluster.md index 226cdf3..d29421c 100644 --- a/src/en/guides/get-started/add-cluster.md +++ b/docs/platform/guides/get-started/add-cluster.md @@ -1,19 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: guide-start-cluster name: Add a Kubernetes Cluster parent: guide-start weight: 30 - home_menu: - identifier: home-start-cluster - name: Add a Kubernetes Cluster - parent: home-start - popular: true - weight: 30 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/get-started/add-credential.md b/docs/platform/guides/get-started/add-credential.md similarity index 83% rename from src/en/guides/get-started/add-credential.md rename to docs/platform/guides/get-started/add-credential.md index 532f63a..9b8c2a5 100644 --- a/src/en/guides/get-started/add-credential.md +++ b/docs/platform/guides/get-started/add-credential.md @@ -1,19 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: guide-start-credential name: Add a Credential parent: guide-start weight: 20 - home_menu: - identifier: home-start-credential - name: Add a Credential - parent: home-start - popular: true - weight: 20 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/get-started/architecture.md b/docs/platform/guides/get-started/architecture.md similarity index 92% rename from src/en/guides/get-started/architecture.md rename to docs/platform/guides/get-started/architecture.md index 093ea48..c54831b 100644 --- a/src/en/guides/get-started/architecture.md +++ b/docs/platform/guides/get-started/architecture.md @@ -1,19 +1,19 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: guide-architecture name: Architecture parent: guide-start weight: 12 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Architecture Let's first discuss some basic terminologies, those will be repeated many times throughout the whole docs. The below picture will help in describing the terminologies: -![architecture](images/architecture.png) +![architecture](../images/architecture.png) ### ACE ACE is the central management cluster where we will deploy all the ui-components. Namely the `backend server(ace-platform-api)`, `kubedb-ui`, `cluster-ui`, `billing-ui`, `platform-ui`, `grafana-ui`, ingresses etc. This will be mainly used by the administrators & devops engineers. diff --git a/src/en/guides/get-started/enable-features.md b/docs/platform/guides/get-started/enable-features.md similarity index 85% rename from src/en/guides/get-started/enable-features.md rename to docs/platform/guides/get-started/enable-features.md index 67010ef..4316e6a 100644 --- a/src/en/guides/get-started/enable-features.md +++ b/docs/platform/guides/get-started/enable-features.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: guide-start-features name: Enable Features parent: guide-start weight: 40 - home_menu: - identifier: home-start-features - name: Enable Features - parent: home-start - weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/get-started/images/architecture.png b/docs/platform/guides/get-started/images/architecture.png similarity index 100% rename from src/en/guides/get-started/images/architecture.png rename to docs/platform/guides/get-started/images/architecture.png diff --git a/src/en/guides/get-started/images/selfhost.png b/docs/platform/guides/get-started/images/selfhost.png similarity index 100% rename from src/en/guides/get-started/images/selfhost.png rename to docs/platform/guides/get-started/images/selfhost.png diff --git a/docs/platform/guides/get-started/manage-databases.md b/docs/platform/guides/get-started/manage-databases.md new file mode 100644 index 0000000..7d05f20 --- /dev/null +++ b/docs/platform/guides/get-started/manage-databases.md @@ -0,0 +1,14 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: guide-start-databases + name: Manage Databases + parent: guide-start + weight: 50 +menu_name: docsplatform_{{.version}} +section_menu_id: guides +--- + + +# Manage Databases diff --git a/src/en/guides/get-started/register-login.md b/docs/platform/guides/get-started/register-login.md similarity index 90% rename from src/en/guides/get-started/register-login.md rename to docs/platform/guides/get-started/register-login.md index bca6935..fd5f9a1 100644 --- a/src/en/guides/get-started/register-login.md +++ b/docs/platform/guides/get-started/register-login.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: guide-start-register name: Get Started (Register & Login) parent: guide-start weight: 10 - section_menu: - identifier: guide-start - name: Get Started - weight: 10 - parent: guides -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/get-started/requirements.md b/docs/platform/guides/get-started/requirements.md similarity index 96% rename from src/en/guides/get-started/requirements.md rename to docs/platform/guides/get-started/requirements.md index 13a8e35..a3e05d0 100644 --- a/src/en/guides/get-started/requirements.md +++ b/docs/platform/guides/get-started/requirements.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: guide-ace-requirements name: ACE Requirements parent: guide-start weight: 14 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # Requirements to deploy ACE diff --git a/src/en/guides/integrations/_index.md b/docs/platform/guides/integrations/_index.md similarity index 65% rename from src/en/guides/integrations/_index.md rename to docs/platform/guides/integrations/_index.md index d11494d..650099d 100644 --- a/src/en/guides/integrations/_index.md +++ b/docs/platform/guides/integrations/_index.md @@ -1,13 +1,14 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: integrations name: Integrations + parent: guides description: Integrate ACE into your Kubernetes platform icon: https://img.icons8.com/?size=100&id=80695&format=png&color=000000 popular: true weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/integrations/images/ace-url.png b/docs/platform/guides/integrations/images/ace-url.png similarity index 100% rename from src/en/guides/integrations/images/ace-url.png rename to docs/platform/guides/integrations/images/ace-url.png diff --git a/src/en/guides/integrations/images/acer-proxy-installer.png b/docs/platform/guides/integrations/images/acer-proxy-installer.png similarity index 100% rename from src/en/guides/integrations/images/acer-proxy-installer.png rename to docs/platform/guides/integrations/images/acer-proxy-installer.png diff --git a/src/en/guides/integrations/images/create-repo.png b/docs/platform/guides/integrations/images/create-repo.png similarity index 100% rename from src/en/guides/integrations/images/create-repo.png rename to docs/platform/guides/integrations/images/create-repo.png diff --git a/src/en/guides/integrations/images/extensions.png b/docs/platform/guides/integrations/images/extensions.png similarity index 100% rename from src/en/guides/integrations/images/extensions.png rename to docs/platform/guides/integrations/images/extensions.png diff --git a/src/en/guides/integrations/images/install-ext.png b/docs/platform/guides/integrations/images/install-ext.png similarity index 100% rename from src/en/guides/integrations/images/install-ext.png rename to docs/platform/guides/integrations/images/install-ext.png diff --git a/src/en/guides/integrations/images/kubedb-in-list.png b/docs/platform/guides/integrations/images/kubedb-in-list.png similarity index 100% rename from src/en/guides/integrations/images/kubedb-in-list.png rename to docs/platform/guides/integrations/images/kubedb-in-list.png diff --git a/src/en/guides/integrations/images/kubedb-in-rancher.png b/docs/platform/guides/integrations/images/kubedb-in-rancher.png similarity index 100% rename from src/en/guides/integrations/images/kubedb-in-rancher.png rename to docs/platform/guides/integrations/images/kubedb-in-rancher.png diff --git a/src/en/guides/integrations/images/manage-repo.png b/docs/platform/guides/integrations/images/manage-repo.png similarity index 100% rename from src/en/guides/integrations/images/manage-repo.png rename to docs/platform/guides/integrations/images/manage-repo.png diff --git a/src/en/guides/integrations/images/organization-create.png b/docs/platform/guides/integrations/images/organization-create.png similarity index 100% rename from src/en/guides/integrations/images/organization-create.png rename to docs/platform/guides/integrations/images/organization-create.png diff --git a/src/en/guides/integrations/images/organization-settings-generate-installer.png b/docs/platform/guides/integrations/images/organization-settings-generate-installer.png similarity index 100% rename from src/en/guides/integrations/images/organization-settings-generate-installer.png rename to docs/platform/guides/integrations/images/organization-settings-generate-installer.png diff --git a/src/en/guides/integrations/images/organization-settings-sync-users.png b/docs/platform/guides/integrations/images/organization-settings-sync-users.png similarity index 100% rename from src/en/guides/integrations/images/organization-settings-sync-users.png rename to docs/platform/guides/integrations/images/organization-settings-sync-users.png diff --git a/src/en/guides/integrations/images/organization-settings.png b/docs/platform/guides/integrations/images/organization-settings.png similarity index 100% rename from src/en/guides/integrations/images/organization-settings.png rename to docs/platform/guides/integrations/images/organization-settings.png diff --git a/src/en/guides/integrations/images/repo-info.png b/docs/platform/guides/integrations/images/repo-info.png similarity index 100% rename from src/en/guides/integrations/images/repo-info.png rename to docs/platform/guides/integrations/images/repo-info.png diff --git a/src/en/guides/integrations/images/three-dot.png b/docs/platform/guides/integrations/images/three-dot.png similarity index 100% rename from src/en/guides/integrations/images/three-dot.png rename to docs/platform/guides/integrations/images/three-dot.png diff --git a/src/en/guides/integrations/rancher-extension.md b/docs/platform/guides/integrations/rancher-extension.md similarity index 78% rename from src/en/guides/integrations/rancher-extension.md rename to docs/platform/guides/integrations/rancher-extension.md index 12a64b9..21e2d58 100644 --- a/src/en/guides/integrations/rancher-extension.md +++ b/docs/platform/guides/integrations/rancher-extension.md @@ -1,23 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: rancher-extension name: KubeDB Rancher Extension parent: integrations weight: 50 - home_menu: - identifier: home-integrations-rancher-extension - name: KubeDB Rancher Extension - parent: home-integrations - weight: 50 - section_menu: - identifier: integrations - name: KubeDB rancher-extension - weight: 20 - parent: guides -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- # KubeDB Rancher Extension @@ -49,24 +39,24 @@ Before proceeding, make sure you have: --- ### Step 2 – Create a Rancher-Type Organization in ACE -1. Visit your ACE URL and log in with your **admin account**. ![ACE URL](./images/ace-url.png) +1. Visit your ACE URL and log in with your **admin account**. ![ACE URL](../images/ace-url.png) 2. Navigate to **Organizations** and create a new organization with the type set to **Rancher**. 3. Provide a valid **Sync Token**. > The Sync Token is used to synchronize Rancher users into the ACE platform. -![Create Organization](./images/organization-create.png) +![Create Organization](../images/organization-create.png) --- ### Step 3 – Sync Rancher Users -1. Go to **Organization Settings → Rancher Extension**. ![Organization Settings](./images/organization-settings.png) -2. Click **Sync User** to import Rancher users into ACE. ![Sync User](./images/organization-settings-sync-users.png) +1. Go to **Organization Settings → Rancher Extension**. ![Organization Settings](../images/organization-settings.png) +2. Click **Sync User** to import Rancher users into ACE. ![Sync User](../images/organization-settings-sync-users.png) --- ### Step 4 – Install the Rancher Proxy in Local Cluster -1. Click **Generate Rancher Proxy Installer** to generate the Rancher proxy installation command. ![Generate Rancher Proxy Installer](images/organization-settings-generate-installer.png) -2. First, Click the **Download** button to download the CA. We are passing it by --set-file in helm command. Then Copy the generated Helm installation command. ![Rancher Proxy Installer](./images/acer-proxy-installer.png) +1. Click **Generate Rancher Proxy Installer** to generate the Rancher proxy installation command. ![Generate Rancher Proxy Installer](../images/organization-settings-generate-installer.png) +2. First, Click the **Download** button to download the CA. We are passing it by --set-file in helm command. Then Copy the generated Helm installation command. ![Rancher Proxy Installer](../images/acer-proxy-installer.png) 3. Open a terminal connected to your Rancher **Local** cluster. 4. Run the copied Helm command to install the Rancher proxy. @@ -87,33 +77,33 @@ Follow these steps to install the KubeDB extension in Rancher: #### 1. Open Extensions Page In your Rancher UI, click on **Extensions**. - ![Extensions](./images/extensions.png) + ![Extensions](../images/extensions.png) #### 2. Open Managed Repositories In the list of available extensions, click the **three dots** menu (as shown below) and select **Managed Repositories**. - ![Three Dot](./images/three-dot.png) - ![Manage Repo](./images/manage-repo.png) + ![Three Dot](../images/three-dot.png) + ![Manage Repo](../images/manage-repo.png) #### 3. Create a New Repository Click the **Create** button. - ![Create Repo](./images/create-repo.png) + ![Create Repo](../images/create-repo.png) #### 4. Enter Repository Details Fill in the required fields as shown in the screenshot, then click **Create**. - ![Repo Info](./images/repo-info.png) + ![Repo Info](../images/repo-info.png) #### 5. Locate the KubeDB Extension After adding the repository, you will see **KubeDB** in the list of available extensions. - ![KubeDB Extension](./images/kubedb-in-list.png) + ![KubeDB Extension](../images/kubedb-in-list.png) #### 6. Install the Extension Click **Install** to add the KubeDB extension to Rancher. - ![Install KubeDB](./images/install-ext.png) + ![Install KubeDB](../images/install-ext.png) #### 7. Access KubeDB in a Cluster Open any cluster in Rancher — you will now see a **KubeDB** dropdown in the sidebar. From here, you can deploy, monitor, and manage your databases directly from the Rancher UI. - ![KubeDB In Rancher](./images/kubedb-in-rancher.png) + ![KubeDB In Rancher](../images/kubedb-in-rancher.png) --- diff --git a/src/en/guides/license-management/_index.md b/docs/platform/guides/license-management/_index.md similarity index 66% rename from src/en/guides/license-management/_index.md rename to docs/platform/guides/license-management/_index.md index ddb5d41..6b180b9 100644 --- a/src/en/guides/license-management/_index.md +++ b/docs/platform/guides/license-management/_index.md @@ -1,13 +1,14 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: license-management name: License Management + parent: guides description: License Management for AppsCode's products icon: https://img.icons8.com/?size=100&id=80695&format=png&color=000000 popular: true weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- diff --git a/src/en/guides/license-management/contract.md b/docs/platform/guides/license-management/contract.md similarity index 90% rename from src/en/guides/license-management/contract.md rename to docs/platform/guides/license-management/contract.md index 8e59787..0f347e0 100644 --- a/src/en/guides/license-management/contract.md +++ b/docs/platform/guides/license-management/contract.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: license-management-contract name: Contract parent: license-management weight: 40 - home_menu: - identifier: license-management-contract - name: Contract - parent: home-license - weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -24,7 +19,7 @@ specific AppsCode products, such as KubeDB or platform-enterprise, with defined The contract management system within the Billing Console provides comprehensive tools for creating, modifying, and monitoring contracts. Administrators can specify product details, validity periods, and associated features, ensuring that customers have access to the appropriate resources for their needs. -![contract-details](./images/contract-details.png) +![contract-details](../images/contract-details.png) Key information typically contained within a contract includes: @@ -48,12 +43,12 @@ environments are licensed under a given contract, within the overall terms and c To add a Kubernetes cluster to a contract and enable license validation within that environment, customers need to perform the following steps: 1. **Navigate to Contract Details:** Access the specific contract detail page within the Billing Console. -2. **Initiate Cluster Addition:** Locate the `Cluster` section on the contract page and `click on` the `Add Cluster` button. ![Add Cluster](./images/add-cluster-button-rectangle.png) +2. **Initiate Cluster Addition:** Locate the `Cluster` section on the contract page and `click on` the `Add Cluster` button. ![Add Cluster](../images/add-cluster-button-rectangle.png) 3. **Provide Cluster Information:** A dialog box will appear, prompting for cluster details. Customers need to provide: - **Cluster ID:** The unique identifier of the Kubernetes cluster. This can be retrieved using the command: `kubectl get ns kube-system -o=jsonpath='{.metadata.uid}`. - - **Cluster Name (optional):** A descriptive name, such as `dev-us-east-1` or `prod-us-east-2`, for easy identification within the console. Customers can enter multiple `ClusterID` and `ClusterName` pairs, each on a new line, separated by a space. ![Add Cluster Information](./images/add-cluster-information.png) -4. **Preview and Confirm:** After entering the details, selecting `Preview` will display the entered cluster(s) for verification. Once confirmed, click `Add` to finalize the association. ![Add Cluster Information](./images/add-cluster-preview.png) -5. **View Associated Clusters:** Upon successful addition, the cluster(s) will appear in the `Cluster` section of the contract's detail page, listed by their `Cluster ID` and `Name`. ![Add Cluster Information](./images/add-cluster-confirm.png) + - **Cluster Name (optional):** A descriptive name, such as `dev-us-east-1` or `prod-us-east-2`, for easy identification within the console. Customers can enter multiple `ClusterID` and `ClusterName` pairs, each on a new line, separated by a space. ![Add Cluster Information](../images/add-cluster-information.png) +4. **Preview and Confirm:** After entering the details, selecting `Preview` will display the entered cluster(s) for verification. Once confirmed, click `Add` to finalize the association. ![Add Cluster Information](../images/add-cluster-preview.png) +5. **View Associated Clusters:** Upon successful addition, the cluster(s) will appear in the `Cluster` section of the contract's detail page, listed by their `Cluster ID` and `Name`. ![Add Cluster Information](../images/add-cluster-confirm.png) ### Removing Clusters from Contracts @@ -61,11 +56,11 @@ To remove a cluster's authorization to use licensed products under a specific co 1. **Navigate to Contract Details:** Access the specific contract detail page within the Billing Console. 2. **Locate and Remove:** In the `Cluster` section, find the cluster in the associated clusters list that needs to be removed. -3. **Confirm Removal:** Select the `Remove` option (often represented by a `trash` icon) next to the cluster and confirm the action when prompted. ![Cluster Delete](./images/cluster-delete.png) +3. **Confirm Removal:** Select the `Remove` option (often represented by a `trash` icon) next to the cluster and confirm the action when prompted. ![Cluster Delete](../images/cluster-delete.png) After removal, the cluster will no longer be authorized to use the licensed products associated with that contract. Any installed AppsCode products on that cluster may revert to their community or limited functionality, depending on their licensing model. -**Audit Trail:** The Billing Console maintains an audit trail of changes to cluster associations, logging which user performed the action and when. This feature is vital for tracking, security, and troubleshooting. ![Audit Trail](./images/audits.png) +**Audit Trail:** The Billing Console maintains an audit trail of changes to cluster associations, logging which user performed the action and when. This feature is vital for tracking, security, and troubleshooting. ![Audit Trail](../images/audits.png) ### Cluster Contract Relationship @@ -91,6 +86,6 @@ The operational mode of a contract (`online` or `offline`) is a critical setting - When a contract is configured as `offline` by AppsCode's administrators, the `license-proxyserver` installer generated by the customer will include licenses covering the contract's entire duration. - These licenses do not require periodic online `validation` or `rotation`. - Any changes to the contract term requires the customer to generate & deploy a new offline License Proxy Server installer. -- In offline contract you can download the license file from the contract details page. ![Download Offline License](./images/download-offline-license.png) +- In offline contract you can download the license file from the contract details page. ![Download Offline License](../images/download-offline-license.png) > The Billing Console enables customers to generate the appropriate License Proxy Server installer based on the mode of their contract. diff --git a/src/en/guides/license-management/images/add-cluster-button-rectangle.png b/docs/platform/guides/license-management/images/add-cluster-button-rectangle.png similarity index 100% rename from src/en/guides/license-management/images/add-cluster-button-rectangle.png rename to docs/platform/guides/license-management/images/add-cluster-button-rectangle.png diff --git a/src/en/guides/license-management/images/add-cluster-confirm.png b/docs/platform/guides/license-management/images/add-cluster-confirm.png similarity index 100% rename from src/en/guides/license-management/images/add-cluster-confirm.png rename to docs/platform/guides/license-management/images/add-cluster-confirm.png diff --git a/src/en/guides/license-management/images/add-cluster-information.png b/docs/platform/guides/license-management/images/add-cluster-information.png similarity index 100% rename from src/en/guides/license-management/images/add-cluster-information.png rename to docs/platform/guides/license-management/images/add-cluster-information.png diff --git a/src/en/guides/license-management/images/add-cluster-preview.png b/docs/platform/guides/license-management/images/add-cluster-preview.png similarity index 100% rename from src/en/guides/license-management/images/add-cluster-preview.png rename to docs/platform/guides/license-management/images/add-cluster-preview.png diff --git a/src/en/guides/license-management/images/audits.png b/docs/platform/guides/license-management/images/audits.png similarity index 100% rename from src/en/guides/license-management/images/audits.png rename to docs/platform/guides/license-management/images/audits.png diff --git a/src/en/guides/license-management/images/cluster-delete.png b/docs/platform/guides/license-management/images/cluster-delete.png similarity index 100% rename from src/en/guides/license-management/images/cluster-delete.png rename to docs/platform/guides/license-management/images/cluster-delete.png diff --git a/src/en/guides/license-management/images/contract-details.png b/docs/platform/guides/license-management/images/contract-details.png similarity index 100% rename from src/en/guides/license-management/images/contract-details.png rename to docs/platform/guides/license-management/images/contract-details.png diff --git a/src/en/guides/license-management/images/download-offline-license.png b/docs/platform/guides/license-management/images/download-offline-license.png similarity index 100% rename from src/en/guides/license-management/images/download-offline-license.png rename to docs/platform/guides/license-management/images/download-offline-license.png diff --git a/src/en/guides/license-management/images/home-billing-console.png b/docs/platform/guides/license-management/images/home-billing-console.png similarity index 100% rename from src/en/guides/license-management/images/home-billing-console.png rename to docs/platform/guides/license-management/images/home-billing-console.png diff --git a/src/en/guides/license-management/images/license-proxy-apiservice-yaml-status.png b/docs/platform/guides/license-management/images/license-proxy-apiservice-yaml-status.png similarity index 100% rename from src/en/guides/license-management/images/license-proxy-apiservice-yaml-status.png rename to docs/platform/guides/license-management/images/license-proxy-apiservice-yaml-status.png diff --git a/src/en/guides/license-management/images/license-proxy-server-svc-check.png b/docs/platform/guides/license-management/images/license-proxy-server-svc-check.png similarity index 100% rename from src/en/guides/license-management/images/license-proxy-server-svc-check.png rename to docs/platform/guides/license-management/images/license-proxy-server-svc-check.png diff --git a/src/en/guides/license-management/images/license-status-free-contract.png b/docs/platform/guides/license-management/images/license-status-free-contract.png similarity index 100% rename from src/en/guides/license-management/images/license-status-free-contract.png rename to docs/platform/guides/license-management/images/license-status-free-contract.png diff --git a/src/en/guides/license-management/images/license-status-paid-contract.png b/docs/platform/guides/license-management/images/license-status-paid-contract.png similarity index 100% rename from src/en/guides/license-management/images/license-status-paid-contract.png rename to docs/platform/guides/license-management/images/license-status-paid-contract.png diff --git a/src/en/guides/license-management/images/offline-installer-cluster-selection.png b/docs/platform/guides/license-management/images/offline-installer-cluster-selection.png similarity index 100% rename from src/en/guides/license-management/images/offline-installer-cluster-selection.png rename to docs/platform/guides/license-management/images/offline-installer-cluster-selection.png diff --git a/src/en/guides/license-management/images/offline-installer-contract-selection.png b/docs/platform/guides/license-management/images/offline-installer-contract-selection.png similarity index 100% rename from src/en/guides/license-management/images/offline-installer-contract-selection.png rename to docs/platform/guides/license-management/images/offline-installer-contract-selection.png diff --git a/src/en/guides/license-management/images/offline-installer-scripts.png b/docs/platform/guides/license-management/images/offline-installer-scripts.png similarity index 100% rename from src/en/guides/license-management/images/offline-installer-scripts.png rename to docs/platform/guides/license-management/images/offline-installer-scripts.png diff --git a/src/en/guides/license-management/images/online-installer-scripts.png b/docs/platform/guides/license-management/images/online-installer-scripts.png similarity index 100% rename from src/en/guides/license-management/images/online-installer-scripts.png rename to docs/platform/guides/license-management/images/online-installer-scripts.png diff --git a/src/en/guides/license-management/images/online-installer.png b/docs/platform/guides/license-management/images/online-installer.png similarity index 100% rename from src/en/guides/license-management/images/online-installer.png rename to docs/platform/guides/license-management/images/online-installer.png diff --git a/src/en/guides/license-management/license-proxyserver.md b/docs/platform/guides/license-management/license-proxyserver.md similarity index 91% rename from src/en/guides/license-management/license-proxyserver.md rename to docs/platform/guides/license-management/license-proxyserver.md index e83bcb4..601b453 100644 --- a/src/en/guides/license-management/license-proxyserver.md +++ b/docs/platform/guides/license-management/license-proxyserver.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: license-management-license-proxyserver name: License Proxy Server parent: license-management weight: 40 - home_menu: - identifier: license-management-license-proxyserver - name: License Proxy Server - parent: home-license - weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- ## The License Proxy Server @@ -50,8 +45,8 @@ Online mode is suitable for clusters with reliable internet connectivity, allowi ##### Installer Generation for Online Mode -When the `Online` option is selected for installer generation in the Billing Console, the system prepares a standard `license-proxyserver` installer. ![Online Installer](./images/online-installer.png) -This installer is typically provided as a `Helm` commands or `YAML files`, as seen in the `Scripts` pop-up. ![Online Installer Scripts](./images/online-installer-scripts.png) +When the `Online` option is selected for installer generation in the Billing Console, the system prepares a standard `license-proxyserver` installer. ![Online Installer](../images/online-installer.png) +This installer is typically provided as a `Helm` commands or `YAML files`, as seen in the `Scripts` pop-up. ![Online Installer Scripts](../images/online-installer-scripts.png) The generated installer configures the license-proxyserver to communicate with the AppsCode licensing backend. The cluster where this `license-proxyserver` is installed must be `associated with one or more online contracts` in the Billing Console for successful license acquisition. Key configurations embedded in the installer include: @@ -85,9 +80,9 @@ designated as `offline` type by an [AppsCode administrators](https://AppsCode.co Generating an installer for offline mode is a multi-step process, designed to embed specific licenses for a chosen cluster: 1. **Select Offline Mode:** In the `License Proxy Server` section of the Billing Console, choose the `Offline` option. -2. **Identify Target Cluster:** The console will then display a list of clusters that are associated with at least one `offline` contract, along with their `Name`, `UID`, and the `count` of Associated Contracts (e.g., `doc-preview` with `6 Contracts`, `prod-us-east-1` with `2 Contracts`). The administrator must select the specific cluster for which the offline installer is to be generated. ![Offline Installer Cluster Selection](./images/offline-installer-cluster-selection.png) Click on the `Associated Contracts` button next to the desired cluster to embed the licenses against the selected contracts.

-3. **Select Contracts for Embedding:** Once a cluster is chosen, the `Billing Console` shows all offline contracts currently linked to the selected cluster, allowing the administrator to choose which of these contracts' licenses should be embedded into the `license-proxyserver` installer. This provides granular control, especially if a cluster is associated with multiple offline contracts for different products or terms. ![Offline Installer Contract Selection](./images/offline-installer-contract-selection.png) After making the selections, click the `Generate License Proxy Installer` button within this pop-up to proceed.

-4. **Generate the Installer Bundle:** Upon clicking `Generate License Proxy Installer`, the Billing Console compiles the installer package. This package includes the `license-proxyserver` deployment manifests (typically `Helm` commands or `YAML` files) and the actual license data for the selected contracts. This license data is encoded (e.g., as a `Base64` string) and embedded directly within the configuration, as indicated by parameters like `-set encodeLicenses` in the generated scripts. ![Offline Installer Scripts](./images/offline-installer-scripts.png) The generated installer is then ready for download and deployment to the target cluster. +2. **Identify Target Cluster:** The console will then display a list of clusters that are associated with at least one `offline` contract, along with their `Name`, `UID`, and the `count` of Associated Contracts (e.g., `doc-preview` with `6 Contracts`, `prod-us-east-1` with `2 Contracts`). The administrator must select the specific cluster for which the offline installer is to be generated. ![Offline Installer Cluster Selection](../images/offline-installer-cluster-selection.png) Click on the `Associated Contracts` button next to the desired cluster to embed the licenses against the selected contracts.

+3. **Select Contracts for Embedding:** Once a cluster is chosen, the `Billing Console` shows all offline contracts currently linked to the selected cluster, allowing the administrator to choose which of these contracts' licenses should be embedded into the `license-proxyserver` installer. This provides granular control, especially if a cluster is associated with multiple offline contracts for different products or terms. ![Offline Installer Contract Selection](../images/offline-installer-contract-selection.png) After making the selections, click the `Generate License Proxy Installer` button within this pop-up to proceed.

+4. **Generate the Installer Bundle:** Upon clicking `Generate License Proxy Installer`, the Billing Console compiles the installer package. This package includes the `license-proxyserver` deployment manifests (typically `Helm` commands or `YAML` files) and the actual license data for the selected contracts. This license data is encoded (e.g., as a `Base64` string) and embedded directly within the configuration, as indicated by parameters like `-set encodeLicenses` in the generated scripts. ![Offline Installer Scripts](../images/offline-installer-scripts.png) The generated installer is then ready for download and deployment to the target cluster. #### License Characteristics in Offline Mode @@ -120,7 +115,7 @@ The output of `kubectl get licensestatus` provides several key pieces of informa - **PRODUCT:** The name of the AppsCode product that this license status pertains to (e.g., `kubedb`, `kubestash`, `platform` etc.). - **REQUESTER:** The specific `component` or `service account` within the cluster that requested and is utilizing this license. This helps pinpoint which part of an AppsCode product installation is covered by this license entry (e.g., `system:serviceaccount:kubedb:kubedb-kubedb-provisioner`). - **CONTRACT:** This field indicates the identifier of the AppsCode contract which is utilized providing the license. There are two scenarios on how this field is populated:

- - If a cluster is not explicitly associated with any contract in the Billing Console, AppsCode automatically provides a `1-month (30-day)` free trial license. In such cases, the `CONTRACT` column in the `licensestatus` output will display `0`. This temporary license is particularly helpful for customers during initial testing and evaluation periods. Each cluster is eligible for this free trial only once. ![Free Trial License](./images/license-status-free-contract.png) - - Otherwise, if a cluster is associated with a specific contract, this column will display the actual `CONTRACT ID` from the Billing Console, allowing administrators to `cross-reference` the license with the detailed contract terms. ![Paid License](./images/license-status-paid-contract.png) + - If a cluster is not explicitly associated with any contract in the Billing Console, AppsCode automatically provides a `1-month (30-day)` free trial license. In such cases, the `CONTRACT` column in the `licensestatus` output will display `0`. This temporary license is particularly helpful for customers during initial testing and evaluation periods. Each cluster is eligible for this free trial only once. ![Free Trial License](../images/license-status-free-contract.png) + - Otherwise, if a cluster is associated with a specific contract, this column will display the actual `CONTRACT ID` from the Billing Console, allowing administrators to `cross-reference` the license with the detailed contract terms. ![Paid License](../images/license-status-paid-contract.png) - **VALID:** This field indicates the remaining validity period for the current license instance. - **ROTATES:** This field indicates when the license is next scheduled for rotation or renewal. diff --git a/src/en/guides/license-management/overview.md b/docs/platform/guides/license-management/overview.md similarity index 91% rename from src/en/guides/license-management/overview.md rename to docs/platform/guides/license-management/overview.md index d8520a3..5cb1a9d 100644 --- a/src/en/guides/license-management/overview.md +++ b/docs/platform/guides/license-management/overview.md @@ -1,23 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: license-management-overview name: Overview parent: license-management weight: 10 - home_menu: - identifier: license-management-overview - name: Overview - parent: home-license - weight: 10 - section_menu: - identifier: license-management - name: License Management - weight: 30 - parent: guides -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- @@ -35,7 +25,7 @@ A centralized web-based platform serving as the primary interface for licensing While AppsCode administrators are responsible for the core lifecycle of contracts—including their `creation`, `modification`, `revocation`, and `extension`—customers retain the ability to perform specific operations pertinent to the licensing lifecycle. This includes `associating` and `disassociating` their Kubernetes clusters with allocated contracts, generating `installers` for the `license-proxyserver` through the console, and track the `clusters` for which licenses have been issued. -![home-billing-console](images/home-billing-console.png) +![home-billing-console](../images/home-billing-console.png) ### Key Components diff --git a/src/en/guides/license-management/troubleshoots.md b/docs/platform/guides/license-management/troubleshoots.md similarity index 97% rename from src/en/guides/license-management/troubleshoots.md rename to docs/platform/guides/license-management/troubleshoots.md index 3317fb3..2c8e2e7 100644 --- a/src/en/guides/license-management/troubleshoots.md +++ b/docs/platform/guides/license-management/troubleshoots.md @@ -1,18 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - docs_menu: + docsplatform_{{.version}}: identifier: license-management-license-proxyserver-troubleshoot name: Troubleshoot parent: license-management weight: 40 - home_menu: - identifier: license-management-license-proxyserver-troubleshoot - name: Troubleshoot - parent: home-license - weight: 40 -menu_name: docs_menu -section_menu: guides +menu_name: docsplatform_{{.version}} +section_menu_id: guides --- ## Troubleshooting License Proxy Server Issues @@ -26,7 +21,7 @@ kubectl get apiservice v1alpha1.proxyserver.licenses.AppsCode.com -o yaml ``` **Interpretation:** -Examine the `status.conditions` section of the output. Look for a condition with `type: Available` and `status: "True"`. ![APIService Status](./images/license-proxy-apiservice-yaml-status.png) +Examine the `status.conditions` section of the output. Look for a condition with `type: Available` and `status: "True"`. ![APIService Status](../images/license-proxy-apiservice-yaml-status.png) This indicates that the Kubernetes API aggregation layer is properly configured to route requests to the `license-proxyserver`. If this condition is `"False"` or `missing`, it suggests an issue with the APIService registration or the `license-proxyserver's` readiness. diff --git a/src/en/selfhost-setup/index.md b/docs/platform/selfhost-setup/README.md similarity index 75% rename from src/en/selfhost-setup/index.md rename to docs/platform/selfhost-setup/README.md index 564fd94..be10298 100644 --- a/src/en/selfhost-setup/index.md +++ b/docs/platform/selfhost-setup/README.md @@ -1,24 +1,25 @@ --- -layout: guide +layout: docs menu: - selfhost-setup_docs_menu: {} - section_menu: - identifier: selfhost-setup + docsplatform_{{.version}}: + identifier: selfhost-setup-readme name: Selfhost Setup - weight: 30 -menu_name: selfhost-setup_docs_menu -section_menu: selfhost-setup + parent: selfhost-setup + weight: -1 +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup +url: /docs/platform/{{.version}}/selfhost-setup/ +aliases: +- /docs/platform/{{.version}}/selfhost-setup/README/ --- - # Host AppsCode Platform as Your Own Welcome to AppsCode Platform's Self-Hosted deployment! Whether you're looking for a quick trial in "Self Hosted Demo" mode or gearing up for a production-ready environment (`Self Hosted Production`), you're in control. - Navigate to [AppsCode Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers. - +

Click on the `Create New Installer` button to get started. You can either choose deployment type `Self Hosted Demo` or `Self Hosted Production`. Provide the required data and click `Done` button to generate the installer. Upon generation of the installer, you will get the documentation how to host AppsCode Server on your own. diff --git a/docs/platform/selfhost-setup/_index.md b/docs/platform/selfhost-setup/_index.md new file mode 100644 index 0000000..2049f7c --- /dev/null +++ b/docs/platform/selfhost-setup/_index.md @@ -0,0 +1,10 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: selfhost-setup + name: Selfhost Setup + weight: 20 +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup +--- diff --git a/src/en/selfhost-setup/images/ace-dashboard.png b/docs/platform/selfhost-setup/images/ace-dashboard.png similarity index 100% rename from src/en/selfhost-setup/images/ace-dashboard.png rename to docs/platform/selfhost-setup/images/ace-dashboard.png diff --git a/src/en/selfhost-setup/images/ace-status.png b/docs/platform/selfhost-setup/images/ace-status.png similarity index 100% rename from src/en/selfhost-setup/images/ace-status.png rename to docs/platform/selfhost-setup/images/ace-status.png diff --git a/src/en/selfhost-setup/images/admin-setting.png b/docs/platform/selfhost-setup/images/admin-setting.png similarity index 100% rename from src/en/selfhost-setup/images/admin-setting.png rename to docs/platform/selfhost-setup/images/admin-setting.png diff --git a/src/en/selfhost-setup/images/awsStep1.png b/docs/platform/selfhost-setup/images/awsStep1.png similarity index 100% rename from src/en/selfhost-setup/images/awsStep1.png rename to docs/platform/selfhost-setup/images/awsStep1.png diff --git a/src/en/selfhost-setup/images/awsStep2.png b/docs/platform/selfhost-setup/images/awsStep2.png similarity index 100% rename from src/en/selfhost-setup/images/awsStep2.png rename to docs/platform/selfhost-setup/images/awsStep2.png diff --git a/src/en/selfhost-setup/images/awsStep3.png b/docs/platform/selfhost-setup/images/awsStep3.png similarity index 100% rename from src/en/selfhost-setup/images/awsStep3.png rename to docs/platform/selfhost-setup/images/awsStep3.png diff --git a/src/en/selfhost-setup/images/awsStep4.png b/docs/platform/selfhost-setup/images/awsStep4.png similarity index 100% rename from src/en/selfhost-setup/images/awsStep4.png rename to docs/platform/selfhost-setup/images/awsStep4.png diff --git a/src/en/selfhost-setup/images/awsStep5.png b/docs/platform/selfhost-setup/images/awsStep5.png similarity index 100% rename from src/en/selfhost-setup/images/awsStep5.png rename to docs/platform/selfhost-setup/images/awsStep5.png diff --git a/src/en/selfhost-setup/images/awsStep7.png b/docs/platform/selfhost-setup/images/awsStep7.png similarity index 100% rename from src/en/selfhost-setup/images/awsStep7.png rename to docs/platform/selfhost-setup/images/awsStep7.png diff --git a/src/en/selfhost-setup/images/azureStep1.png b/docs/platform/selfhost-setup/images/azureStep1.png similarity index 100% rename from src/en/selfhost-setup/images/azureStep1.png rename to docs/platform/selfhost-setup/images/azureStep1.png diff --git a/src/en/selfhost-setup/images/azureStep2.png b/docs/platform/selfhost-setup/images/azureStep2.png similarity index 100% rename from src/en/selfhost-setup/images/azureStep2.png rename to docs/platform/selfhost-setup/images/azureStep2.png diff --git a/src/en/selfhost-setup/images/azureStep3.png b/docs/platform/selfhost-setup/images/azureStep3.png similarity index 100% rename from src/en/selfhost-setup/images/azureStep3.png rename to docs/platform/selfhost-setup/images/azureStep3.png diff --git a/src/en/selfhost-setup/images/azureStep4.png b/docs/platform/selfhost-setup/images/azureStep4.png similarity index 100% rename from src/en/selfhost-setup/images/azureStep4.png rename to docs/platform/selfhost-setup/images/azureStep4.png diff --git a/src/en/selfhost-setup/images/azureStep5.png b/docs/platform/selfhost-setup/images/azureStep5.png similarity index 100% rename from src/en/selfhost-setup/images/azureStep5.png rename to docs/platform/selfhost-setup/images/azureStep5.png diff --git a/src/en/selfhost-setup/images/branding.png b/docs/platform/selfhost-setup/images/branding.png similarity index 100% rename from src/en/selfhost-setup/images/branding.png rename to docs/platform/selfhost-setup/images/branding.png diff --git a/src/en/selfhost-setup/images/deployment-progress.png b/docs/platform/selfhost-setup/images/deployment-progress.png similarity index 100% rename from src/en/selfhost-setup/images/deployment-progress.png rename to docs/platform/selfhost-setup/images/deployment-progress.png diff --git a/src/en/selfhost-setup/images/domain-whitelisting.png b/docs/platform/selfhost-setup/images/domain-whitelisting.png similarity index 100% rename from src/en/selfhost-setup/images/domain-whitelisting.png rename to docs/platform/selfhost-setup/images/domain-whitelisting.png diff --git a/src/en/selfhost-setup/images/features.png b/docs/platform/selfhost-setup/images/features.png similarity index 100% rename from src/en/selfhost-setup/images/features.png rename to docs/platform/selfhost-setup/images/features.png diff --git a/src/en/selfhost-setup/images/ingress-gateway.png b/docs/platform/selfhost-setup/images/ingress-gateway.png similarity index 100% rename from src/en/selfhost-setup/images/ingress-gateway.png rename to docs/platform/selfhost-setup/images/ingress-gateway.png diff --git a/src/public/images/selfhost-setup/installer-home.png b/docs/platform/selfhost-setup/images/installer-home.png similarity index 100% rename from src/public/images/selfhost-setup/installer-home.png rename to docs/platform/selfhost-setup/images/installer-home.png diff --git a/src/en/selfhost-setup/images/managed-resources.png b/docs/platform/selfhost-setup/images/managed-resources.png similarity index 100% rename from src/en/selfhost-setup/images/managed-resources.png rename to docs/platform/selfhost-setup/images/managed-resources.png diff --git a/src/en/selfhost-setup/images/nats.png b/docs/platform/selfhost-setup/images/nats.png similarity index 100% rename from src/en/selfhost-setup/images/nats.png rename to docs/platform/selfhost-setup/images/nats.png diff --git a/src/en/selfhost-setup/images/policy-1.png b/docs/platform/selfhost-setup/images/policy-1.png similarity index 100% rename from src/en/selfhost-setup/images/policy-1.png rename to docs/platform/selfhost-setup/images/policy-1.png diff --git a/src/en/selfhost-setup/images/policy-10.png b/docs/platform/selfhost-setup/images/policy-10.png similarity index 100% rename from src/en/selfhost-setup/images/policy-10.png rename to docs/platform/selfhost-setup/images/policy-10.png diff --git a/src/en/selfhost-setup/images/policy-2.png b/docs/platform/selfhost-setup/images/policy-2.png similarity index 100% rename from src/en/selfhost-setup/images/policy-2.png rename to docs/platform/selfhost-setup/images/policy-2.png diff --git a/src/en/selfhost-setup/images/policy-3.png b/docs/platform/selfhost-setup/images/policy-3.png similarity index 100% rename from src/en/selfhost-setup/images/policy-3.png rename to docs/platform/selfhost-setup/images/policy-3.png diff --git a/src/en/selfhost-setup/images/policy-4.png b/docs/platform/selfhost-setup/images/policy-4.png similarity index 100% rename from src/en/selfhost-setup/images/policy-4.png rename to docs/platform/selfhost-setup/images/policy-4.png diff --git a/src/en/selfhost-setup/images/policy-5.png b/docs/platform/selfhost-setup/images/policy-5.png similarity index 100% rename from src/en/selfhost-setup/images/policy-5.png rename to docs/platform/selfhost-setup/images/policy-5.png diff --git a/src/en/selfhost-setup/images/policy-7.png b/docs/platform/selfhost-setup/images/policy-7.png similarity index 100% rename from src/en/selfhost-setup/images/policy-7.png rename to docs/platform/selfhost-setup/images/policy-7.png diff --git a/src/en/selfhost-setup/images/policy-8.png b/docs/platform/selfhost-setup/images/policy-8.png similarity index 100% rename from src/en/selfhost-setup/images/policy-8.png rename to docs/platform/selfhost-setup/images/policy-8.png diff --git a/src/en/selfhost-setup/images/policy-9.png b/docs/platform/selfhost-setup/images/policy-9.png similarity index 100% rename from src/en/selfhost-setup/images/policy-9.png rename to docs/platform/selfhost-setup/images/policy-9.png diff --git a/src/en/selfhost-setup/images/resource-limit.png b/docs/platform/selfhost-setup/images/resource-limit.png similarity index 100% rename from src/en/selfhost-setup/images/resource-limit.png rename to docs/platform/selfhost-setup/images/resource-limit.png diff --git a/src/en/selfhost-setup/images/selfhost-deployment-option.png b/docs/platform/selfhost-setup/images/selfhost-deployment-option.png similarity index 100% rename from src/en/selfhost-setup/images/selfhost-deployment-option.png rename to docs/platform/selfhost-setup/images/selfhost-deployment-option.png diff --git a/src/en/selfhost-setup/images/tenant.png b/docs/platform/selfhost-setup/images/tenant.png similarity index 100% rename from src/en/selfhost-setup/images/tenant.png rename to docs/platform/selfhost-setup/images/tenant.png diff --git a/docs/platform/selfhost-setup/install/_index.md b/docs/platform/selfhost-setup/install/_index.md new file mode 100644 index 0000000..ccf31f2 --- /dev/null +++ b/docs/platform/selfhost-setup/install/_index.md @@ -0,0 +1,11 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: selfhosted-installer + name: Self Hosted Installer + parent: selfhost-setup + weight: 10 +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup +--- diff --git a/src/en/selfhost-setup/install/aws-marketplace.md b/docs/platform/selfhost-setup/install/aws-marketplace.md similarity index 99% rename from src/en/selfhost-setup/install/aws-marketplace.md rename to docs/platform/selfhost-setup/install/aws-marketplace.md index 2aec5dd..4acac43 100644 --- a/src/en/selfhost-setup/install/aws-marketplace.md +++ b/docs/platform/selfhost-setup/install/aws-marketplace.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - selfhost-setup_docs_menu: + docsplatform_{{.version}}: identifier: aws-marketplace name: AWS Marketplace parent: selfhosted-installer weight: 10 -menu_name: selfhost-setup_docs_menu -section_menu: selfhost-setup +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup --- # Deploying AppsCode Platform: AWS Marketplace diff --git a/src/en/selfhost-setup/install/azure-marketplace.md b/docs/platform/selfhost-setup/install/azure-marketplace.md similarity index 98% rename from src/en/selfhost-setup/install/azure-marketplace.md rename to docs/platform/selfhost-setup/install/azure-marketplace.md index 23d7d01..6297f63 100644 --- a/src/en/selfhost-setup/install/azure-marketplace.md +++ b/docs/platform/selfhost-setup/install/azure-marketplace.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - selfhost-setup_docs_menu: + docsplatform_{{.version}}: identifier: azure-marketplace name: Azure Marketplace parent: selfhosted-installer weight: 10 -menu_name: selfhost-setup_docs_menu -section_menu: selfhost-setup +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup --- # 1. Deploying AppsCode Platform: Azure Marketplace diff --git a/src/en/selfhost-setup/install/cloud-demo.md b/docs/platform/selfhost-setup/install/cloud-demo.md similarity index 98% rename from src/en/selfhost-setup/install/cloud-demo.md rename to docs/platform/selfhost-setup/install/cloud-demo.md index eb8bd0d..1e64e5e 100644 --- a/src/en/selfhost-setup/install/cloud-demo.md +++ b/docs/platform/selfhost-setup/install/cloud-demo.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - selfhost-setup_docs_menu: + docsplatform_{{.version}}: identifier: selfhost-cloud-demo-deployment name: Cloud Demo Deployment parent: selfhosted-installer weight: 10 -menu_name: selfhost-setup_docs_menu -section_menu: selfhost-setup +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup --- # Deploying AppsCode Platform: Cloud Demo diff --git a/src/en/selfhost-setup/install/k8s-app-demo.md b/docs/platform/selfhost-setup/install/k8s-app-demo.md similarity index 97% rename from src/en/selfhost-setup/install/k8s-app-demo.md rename to docs/platform/selfhost-setup/install/k8s-app-demo.md index 3c7cf0e..59653b6 100644 --- a/src/en/selfhost-setup/install/k8s-app-demo.md +++ b/docs/platform/selfhost-setup/install/k8s-app-demo.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - selfhost-setup_docs_menu: + docsplatform_{{.version}}: identifier: selfhost-k8s-app-demo-deployment name: K8s App Demo Deployment parent: selfhosted-installer weight: 10 -menu_name: selfhost-setup_docs_menu -section_menu: selfhost-setup +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup --- # Deploying AppsCode Platform: K8s App Demo diff --git a/src/en/selfhost-setup/install/onprem-demo.md b/docs/platform/selfhost-setup/install/onprem-demo.md similarity index 98% rename from src/en/selfhost-setup/install/onprem-demo.md rename to docs/platform/selfhost-setup/install/onprem-demo.md index 7530c8b..ccf1861 100644 --- a/src/en/selfhost-setup/install/onprem-demo.md +++ b/docs/platform/selfhost-setup/install/onprem-demo.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - selfhost-setup_docs_menu: + docsplatform_{{.version}}: identifier: selfhost-onprem-demo-deployment name: Onprem Demo Deployment parent: selfhosted-installer weight: 10 -menu_name: selfhost-setup_docs_menu -section_menu: selfhost-setup +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup --- # Deploying AppsCode Platform: Onprem Demo diff --git a/src/en/selfhost-setup/install/openshift-demo.md b/docs/platform/selfhost-setup/install/openshift-demo.md similarity index 98% rename from src/en/selfhost-setup/install/openshift-demo.md rename to docs/platform/selfhost-setup/install/openshift-demo.md index 0b523d0..e3dce1f 100644 --- a/src/en/selfhost-setup/install/openshift-demo.md +++ b/docs/platform/selfhost-setup/install/openshift-demo.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - selfhost-setup_docs_menu: + docsplatform_{{.version}}: identifier: selfhost-openshift-demo name: Open Shift Demo parent: selfhosted-installer weight: 10 -menu_name: selfhost-setup_docs_menu -section_menu: selfhost-setup +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup --- # Deploying AppsCode Platform: Open Shift Demo diff --git a/src/en/selfhost-setup/install/selfhosted-production.md b/docs/platform/selfhost-setup/install/selfhosted-production.md similarity index 99% rename from src/en/selfhost-setup/install/selfhosted-production.md rename to docs/platform/selfhost-setup/install/selfhosted-production.md index b4be45f..da1cd08 100644 --- a/src/en/selfhost-setup/install/selfhosted-production.md +++ b/docs/platform/selfhost-setup/install/selfhosted-production.md @@ -1,13 +1,13 @@ --- -layout: 'guide' +layout: docs menu: - selfhost-setup_docs_menu: + docsplatform_{{.version}}: identifier: selfhost-prod-deployment name: Production Deployment parent: selfhosted-installer weight: 10 -menu_name: selfhost-setup_docs_menu -section_menu: selfhost-setup +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup --- # Deploying AppsCode Platform: Self Hosted Production diff --git a/src/en/selfhost-setup/install/troubleshoot.md b/docs/platform/selfhost-setup/install/troubleshoot.md similarity index 56% rename from src/en/selfhost-setup/install/troubleshoot.md rename to docs/platform/selfhost-setup/install/troubleshoot.md index 2b22e5a..9e3f832 100644 --- a/src/en/selfhost-setup/install/troubleshoot.md +++ b/docs/platform/selfhost-setup/install/troubleshoot.md @@ -1,14 +1,14 @@ - +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup +--- # Troubleshooting Common Errors diff --git a/docs/platform/selfhost-setup/uninstall.md b/docs/platform/selfhost-setup/uninstall.md new file mode 100644 index 0000000..bef3c6e --- /dev/null +++ b/docs/platform/selfhost-setup/uninstall.md @@ -0,0 +1,13 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: selfhost-setup-uninstall + name: Uninstall + parent: selfhost-setup + weight: 20 +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup +--- + +# Uninstall diff --git a/src/en/welcome/support.md b/docs/platform/support.md similarity index 68% rename from src/en/welcome/support.md rename to docs/platform/support.md index b6f3b1d..1767827 100644 --- a/src/en/welcome/support.md +++ b/docs/platform/support.md @@ -1,15 +1,15 @@ --- -layout: 'guide' +layout: docs menu: - welcome_docs_menu: - identifier: welcome-support + docsplatform_{{.version}}: + identifier: platform-support name: Support + parent: welcome weight: 20 -menu_name: welcome_docs_menu -section_menu: welcome +menu_name: docsplatform_{{.version}} +section_menu_id: welcome --- - # Support To speak with us, please leave a message on our [website](https://appscode.com/contact/). To receive product announcements, follow us on [Twitter](https://twitter.com/AppsCodeHQ). diff --git a/firebase.json b/firebase.json deleted file mode 100644 index 8d85b14..0000000 --- a/firebase.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "hosting": { - "target": "nuxt", - "public": ".vitepress/dist", - "ignore": [ - "firebase.json", - "**/.*", - "**/node_modules/**" - ], - "trailingSlash": true, - "redirects": [{ - "source": "/", - "destination": "https://appscode.com/docs/", - "type": 301 - }] - } -} diff --git a/hack/scripts/open-pr.sh b/hack/scripts/open-pr.sh new file mode 100755 index 0000000..e56a9ed --- /dev/null +++ b/hack/scripts/open-pr.sh @@ -0,0 +1,42 @@ +#!/bin/bash + +# Copyright The KubeVault Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eou pipefail + +SCRIPT_ROOT=$(realpath $(dirname "${BASH_SOURCE[0]}")/../..) +SCRIPT_NAME=$(basename "${BASH_SOURCE[0]}") +pushd $SCRIPT_ROOT + +# http://redsymbol.net/articles/bash-exit-traps/ +function cleanup() { + popd +} +trap cleanup EXIT + +git add --all +if git diff -s --exit-code HEAD; then + echo "Docs are already up-to-date!" + exit 0 +fi + +pr_branch=${GITHUB_REPOSITORY}@${GITHUB_SHA:0:8} +git checkout -b $pr_branch +git commit -a -s -m "Update docs for $pr_branch" +git push -u origin HEAD +hub pull-request \ + --labels automerge \ + --message "Update docs for $pr_branch" \ + --message "$(git show -s --format=%b)" diff --git a/hack/scripts/update-release-tracker.sh b/hack/scripts/update-release-tracker.sh new file mode 100755 index 0000000..7184cb6 --- /dev/null +++ b/hack/scripts/update-release-tracker.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +# Copyright AppsCode Inc. and Contributors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +set -eou pipefail + +# ref: https://gist.github.com/joshisa/297b0bc1ec0dcdda0d1625029711fa24 +parse_url() { + proto="$(echo $1 | grep :// | sed -e's,^\(.*://\).*,\1,g')" + # remove the protocol + url="$(echo ${1/$proto/})" + + IFS='/' # / is set as delimiter + read -ra PARTS <<<"$url" # str is read into an array as tokens separated by IFS + if [ ${PARTS[0]} != 'github.com' ] || [ ${#PARTS[@]} -ne 5 ]; then + echo "failed to parse relase-tracker: $url" + exit 1 + fi + export RELEASE_TRACKER_OWNER=${PARTS[1]} + export RELEASE_TRACKER_REPO=${PARTS[2]} + export RELEASE_TRACKER_PR=${PARTS[4]} +} + +RELEASE_TRACKER=${RELEASE_TRACKER:-} +GITHUB_BASE_REF=${GITHUB_BASE_REF:-} + +while IFS=$': \r\t' read -r -u9 marker v; do + case $marker in + Release-tracker) + export RELEASE_TRACKER=$(echo $v | tr -d '\r\t') + ;; + Release) + export RELEASE=$(echo $v | tr -d '\r\t') + ;; + esac +done 9< <(git show -s --format=%b) + +[ ! -z "$RELEASE_TRACKER" ] || { + echo "Release-tracker url not found." + exit 0 +} + +[ ! -z "$GITHUB_BASE_REF" ] || { + echo "GitHub base ref not found." + exit 0 +} + +parse_url $RELEASE_TRACKER +api_url="repos/${RELEASE_TRACKER_OWNER}/${RELEASE_TRACKER_REPO}/issues/${RELEASE_TRACKER_PR}/comments" + +case $GITHUB_BASE_REF in + master) + msg="/ready-to-tag github.com/${GITHUB_REPOSITORY} ${GITHUB_SHA}" + ;; + *) + msg="/cherry-picked github.com/${GITHUB_REPOSITORY} ${GITHUB_BASE_REF} ${GITHUB_SHA}" + ;; +esac + +hub api "$api_url" -f body="$msg" diff --git a/index.json b/index.json deleted file mode 100644 index e69de29..0000000 diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 7264a3b..0000000 --- a/package-lock.json +++ /dev/null @@ -1,11905 +0,0 @@ -{ - "name": "docs", - "version": "0.0.14", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "docs", - "version": "0.0.14", - "dependencies": { - "@appscode/design-system": "^2.2.7", - "@bytebuilders/docs-base": "github:bytebuilders/docs-base", - "@vueuse/components": "^12.5.0", - "@vueuse/core": "^12.5.0", - "@vueuse/integrations": "^12.5.0", - "bulma": "0.9.4", - "font-awesome": "^4.7.0", - "pinia": "^2.1.3", - "vue-i18n": "^9.2.2" - }, - "devDependencies": { - "@antfu/eslint-config": "^0.39.5", - "@iconify/json": "^2.2.139", - "@rushstack/eslint-patch": "^1.3.1", - "@tsconfig/node22": "^22.0.0", - "@types/node": "^22.10.10", - "@vue/compiler-sfc": "^3.3.8", - "@vue/tsconfig": "^0.4.0", - "eslint": "^8.42.0", - "npm-run-all": "^4.1.5", - "postcss-html": "^1.5.0", - "sass": "1.32.13", - "sass-loader": "^13.3.1", - "stylelint": "^15.7.0", - "stylelint-config-recommended-scss": "^12.0.0", - "stylelint-config-recommended-vue": "^1.4.0", - "stylelint-config-standard": "^33.0.0", - "stylelint-config-standard-scss": "^9.0.0", - "typescript": "^5.0.4", - "universal-cookie": "^7.2.2", - "unplugin-auto-import": "^0.16.4", - "unplugin-icons": "^0.17.3", - "vitepress": "^1.0.1", - "vue-tsc": "^2.2.0" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@algolia/autocomplete-core": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.7.tgz", - "integrity": "sha512-BjiPOW6ks90UKl7TwMv7oNQMnzU+t/wk9mgIDi6b1tXpUek7MW0lbNOUHpvam9pe3lVCf4xPFT+lK7s+e+fs7Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.17.7", - "@algolia/autocomplete-shared": "1.17.7" - } - }, - "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.7.tgz", - "integrity": "sha512-Jca5Ude6yUOuyzjnz57og7Et3aXjbwCSDf/8onLHSQgw1qW3ALl9mrMWaXb5FmPVkV3EtkD2F/+NkT6VHyPu9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" - }, - "peerDependencies": { - "search-insights": ">= 1 < 3" - } - }, - "node_modules/@algolia/autocomplete-preset-algolia": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.7.tgz", - "integrity": "sha512-ggOQ950+nwbWROq2MOCIL71RE0DdQZsceqrg32UqnhDz8FlO9rL8ONHNsI2R1MH0tkgVIDKI/D0sMiUchsFdWA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-shared": "1.17.7" - }, - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/autocomplete-shared": { - "version": "1.17.7", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.7.tgz", - "integrity": "sha512-o/1Vurr42U/qskRSuhBH+VKxMvkkUVTLU6WZQr+L5lGZZLYWyhdzWjW0iGXY7EkwRTjBqvN2EsR81yCTGV/kmg==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@algolia/client-search": ">= 4.9.1 < 6", - "algoliasearch": ">= 4.9.1 < 6" - } - }, - "node_modules/@algolia/client-abtesting": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.20.0.tgz", - "integrity": "sha512-YaEoNc1Xf2Yk6oCfXXkZ4+dIPLulCx8Ivqj0OsdkHWnsI3aOJChY5qsfyHhDBNSOhqn2ilgHWxSfyZrjxBcAww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-analytics": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.20.0.tgz", - "integrity": "sha512-CIT9ni0+5sYwqehw+t5cesjho3ugKQjPVy/iPiJvtJX4g8Cdb6je6SPt2uX72cf2ISiXCAX9U3cY0nN0efnRDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-common": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.20.0.tgz", - "integrity": "sha512-iSTFT3IU8KNpbAHcBUJw2HUrPnMXeXLyGajmCL7gIzWOsYM4GabZDHXOFx93WGiXMti1dymz8k8R+bfHv1YZmA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-insights": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.20.0.tgz", - "integrity": "sha512-w9RIojD45z1csvW1vZmAko82fqE/Dm+Ovsy2ElTsjFDB0HMAiLh2FO86hMHbEXDPz6GhHKgGNmBRiRP8dDPgJg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-personalization": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.20.0.tgz", - "integrity": "sha512-p/hftHhrbiHaEcxubYOzqVV4gUqYWLpTwK+nl2xN3eTrSW9SNuFlAvUBFqPXSVBqc6J5XL9dNKn3y8OA1KElSQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-query-suggestions": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.20.0.tgz", - "integrity": "sha512-m4aAuis5vZi7P4gTfiEs6YPrk/9hNTESj3gEmGFgfJw3hO2ubdS4jSId1URd6dGdt0ax2QuapXufcrN58hPUcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/client-search": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.20.0.tgz", - "integrity": "sha512-KL1zWTzrlN4MSiaK1ea560iCA/UewMbS4ZsLQRPoDTWyrbDKVbztkPwwv764LAqgXk0fvkNZvJ3IelcK7DqhjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/ingestion": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.20.0.tgz", - "integrity": "sha512-shj2lTdzl9un4XJblrgqg54DoK6JeKFO8K8qInMu4XhE2JuB8De6PUuXAQwiRigZupbI0xq8aM0LKdc9+qiLQA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/monitoring": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.20.0.tgz", - "integrity": "sha512-aF9blPwOhKtWvkjyyXh9P5peqmhCA1XxLBRgItT+K6pbT0q4hBDQrCid+pQZJYy4HFUKjB/NDDwyzFhj/rwKhw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/recommend": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.20.0.tgz", - "integrity": "sha512-T6B/WPdZR3b89/F9Vvk6QCbt/wrLAtrGoL8z4qPXDFApQ8MuTFWbleN/4rHn6APWO3ps+BUePIEbue2rY5MlRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-browser-xhr": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.20.0.tgz", - "integrity": "sha512-t6//lXsq8E85JMenHrI6mhViipUT5riNhEfCcvtRsTV+KIBpC6Od18eK864dmBhoc5MubM0f+sGpKOqJIlBSCg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-fetch": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.20.0.tgz", - "integrity": "sha512-FHxYGqRY+6bgjKsK4aUsTAg6xMs2S21elPe4Y50GB0Y041ihvw41Vlwy2QS6K9ldoftX4JvXodbKTcmuQxywdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@algolia/requester-node-http": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.20.0.tgz", - "integrity": "sha512-kmtQClq/w3vtPteDSPvaW9SPZL/xrIgMrxZyAgsFwrJk0vJxqyC5/hwHmrCraDnStnGSADnLpBf4SpZnwnkwWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-common": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/@antfu/eslint-config": { - "version": "0.39.8", - "resolved": "https://registry.npmjs.org/@antfu/eslint-config/-/eslint-config-0.39.8.tgz", - "integrity": "sha512-KnDjLw6UEoHdEzB6CzQMm+EkA4ZI94r1Of1rRRw0qxhkFhD/+SQ2BTBgmF5d4wTsU0IT1Dk5JjJ6J/cVFKdXWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@antfu/eslint-config-vue": "0.39.8", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-html": "^7.1.0", - "eslint-plugin-import": "npm:eslint-plugin-i@2.27.5-4", - "eslint-plugin-jsonc": "^2.9.0", - "eslint-plugin-n": "^16.0.1", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-unicorn": "^48.0.0", - "eslint-plugin-vue": "^9.15.1", - "eslint-plugin-yml": "^1.8.0", - "jsonc-eslint-parser": "^2.3.0", - "yaml-eslint-parser": "^1.2.2" - }, - "peerDependencies": { - "eslint": ">=7.4.0" - } - }, - "node_modules/@antfu/eslint-config-basic": { - "version": "0.39.8", - "resolved": "https://registry.npmjs.org/@antfu/eslint-config-basic/-/eslint-config-basic-0.39.8.tgz", - "integrity": "sha512-HvxNu11NRpX/DHmcMcA2KenY/IIy3THEn5tpizg6vPIp3ZYSNkW3ov6sK2wxCd1S8Rwl/65566wplJ8xTYe0EA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-plugin-antfu": "0.39.8", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-html": "^7.1.0", - "eslint-plugin-import": "npm:eslint-plugin-i@2.27.5-4", - "eslint-plugin-jsonc": "^2.9.0", - "eslint-plugin-markdown": "^3.0.0", - "eslint-plugin-n": "^16.0.1", - "eslint-plugin-no-only-tests": "^3.1.0", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-unicorn": "^48.0.0", - "eslint-plugin-unused-imports": "^3.0.0", - "eslint-plugin-yml": "^1.8.0", - "jsonc-eslint-parser": "^2.3.0", - "yaml-eslint-parser": "^1.2.2" - }, - "peerDependencies": { - "eslint": ">=7.4.0" - } - }, - "node_modules/@antfu/eslint-config-ts": { - "version": "0.39.8", - "resolved": "https://registry.npmjs.org/@antfu/eslint-config-ts/-/eslint-config-ts-0.39.8.tgz", - "integrity": "sha512-oMkIzxxD+sdHpO7Ctk+ej1SCZAoSbPMGyqjfaGLqpaxh87gP7LSFlm6QpsdIWllnTyYB75Hk8LMqFQWCJU9dxw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@antfu/eslint-config-basic": "0.39.8", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", - "eslint-plugin-jest": "^27.2.3" - }, - "peerDependencies": { - "eslint": ">=7.4.0", - "typescript": ">=3.9" - } - }, - "node_modules/@antfu/eslint-config-vue": { - "version": "0.39.8", - "resolved": "https://registry.npmjs.org/@antfu/eslint-config-vue/-/eslint-config-vue-0.39.8.tgz", - "integrity": "sha512-BeBRdI8Bm0d9ppomvmPkrIim4IEW4ZHZHsGw2qSw/mSDZwprLyGi9tgNMnoHbN9OBGQwveuurdKFlJz5SlCjrA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@antfu/eslint-config-basic": "0.39.8", - "@antfu/eslint-config-ts": "0.39.8", - "eslint-plugin-vue": "^9.15.1", - "local-pkg": "^0.4.3" - }, - "peerDependencies": { - "eslint": ">=7.4.0" - } - }, - "node_modules/@antfu/install-pkg": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.1.1.tgz", - "integrity": "sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.1.1", - "find-up": "^5.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@antfu/utils": { - "version": "0.7.10", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", - "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@appscode/design-system": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/@appscode/design-system/-/design-system-2.6.9.tgz", - "integrity": "sha512-j9MA9Sa4ccXE0+IhUqyO8dN+BGiTuIzVzP2+ysGco7iWwIpVcvIFFliSWGsghCGiCztLPTaoZPe6y7DzjMli0g==", - "license": "Apache-2.0", - "dependencies": { - "@appscode/design-system-images": "^0.0.13" - } - }, - "node_modules/@appscode/design-system-images": { - "version": "0.0.13", - "resolved": "https://registry.npmjs.org/@appscode/design-system-images/-/design-system-images-0.0.13.tgz", - "integrity": "sha512-pJ0iiaD5xMtZ0fCtrGmyWAglO0kfZ6rOx/qLzk6OJkyMI0yRCH/fQRn5cO48F+sdKKF08KXXeMmvgsf1Y+ycUw==", - "license": "Apache-2.0" - }, - "node_modules/@appscode/static-assets": { - "name": "static-assets", - "version": "0.8.3", - "resolved": "git+ssh://git@github.com/appscode/static-assets.git#446167a5aecee32fb4ef2cd8d62a72bf28b47528", - "license": "Apache-2.0" - }, - "node_modules/@asamuzakjp/css-color": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-2.8.3.tgz", - "integrity": "sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==", - "license": "MIT", - "dependencies": { - "@csstools/css-calc": "^2.1.1", - "@csstools/css-color-parser": "^3.0.7", - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3", - "lru-cache": "^10.4.3" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", - "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.25.9", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/code-frame/node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.7.tgz", - "integrity": "sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==", - "license": "MIT", - "dependencies": { - "@babel/types": "^7.26.7" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.7", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.7.tgz", - "integrity": "sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==", - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bytebuilders/docs-base": { - "name": "docs-base", - "version": "0.1.0", - "resolved": "git+ssh://git@github.com/bytebuilders/docs-base.git#50bd63250b73577d61c7cd9f358bdbb753315874", - "dependencies": { - "@appscode/design-system": "^2.2.7", - "@appscode/static-assets": "github:appscode/static-assets", - "@types/jsdom": "^21.1.6", - "@vueuse/components": "^12.5.0", - "@vueuse/core": "^12.5.0", - "@vueuse/integrations": "^12.5.0", - "bulma": "0.9.4", - "cheerio": "^1.0.0-rc.12", - "font-awesome": "^4.7.0", - "html-parse-stringify": "^3.0.1", - "html-to-text": "^9.0.5", - "jsdom": "^24.0.0", - "JSONStream": "^1.3.5", - "pinia": "^2.1.3", - "vue-i18n": "^9.14.2", - "vue-multiselect": "^3.5.0", - "xml2js": "^0.6.2" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "node_modules/@csstools/color-helpers": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.1.tgz", - "integrity": "sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.1.tgz", - "integrity": "sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.7.tgz", - "integrity": "sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.0.1", - "@csstools/css-calc": "^2.1.1" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.4", - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", - "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.3" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", - "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/selector-specificity": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", - "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "postcss-selector-parser": "^6.0.13" - } - }, - "node_modules/@docsearch/css": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", - "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@docsearch/js": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.8.2.tgz", - "integrity": "sha512-Q5wY66qHn0SwA7Taa0aDbHiJvaFJLOJyHmooQ7y8hlwwQLQ/5WwCcoX0g7ii04Qi2DJlHsd0XXzJ8Ypw9+9YmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@docsearch/react": "3.8.2", - "preact": "^10.0.0" - } - }, - "node_modules/@docsearch/react": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", - "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/autocomplete-core": "1.17.7", - "@algolia/autocomplete-preset-algolia": "1.17.7", - "@docsearch/css": "3.8.2", - "algoliasearch": "^5.14.2" - }, - "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0", - "search-insights": ">= 1 < 3" - }, - "peerDependenciesMeta": { - "@types/react": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "search-insights": { - "optional": true - } - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", - "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", - "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@iconify-json/simple-icons": { - "version": "1.2.21", - "resolved": "https://registry.npmjs.org/@iconify-json/simple-icons/-/simple-icons-1.2.21.tgz", - "integrity": "sha512-aqbIuVshMZ2fNEhm25//9DoKudboXF3CpoEQJJlHl9gVSVNOTr4cgaCIZvgSEYmys2HHEfmhcpoZIhoEFZS8SQ==", - "dev": true, - "license": "CC0-1.0", - "dependencies": { - "@iconify/types": "*" - } - }, - "node_modules/@iconify/json": { - "version": "2.2.299", - "resolved": "https://registry.npmjs.org/@iconify/json/-/json-2.2.299.tgz", - "integrity": "sha512-YsHoXNK4tBfY1aABlnAxGv8BFNsXBRfTuhRqkXLC0AK+amM+IDPLpVyOPCttcEHKuAsmh0OVPsrCZe2bC0puTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@iconify/types": "*", - "pathe": "^1.1.2" - } - }, - "node_modules/@iconify/types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", - "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@iconify/utils": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.2.1.tgz", - "integrity": "sha512-0/7J7hk4PqXmxo5PDBDxmnecw5PxklZJfNjIVG9FM0mEfVrvfudS22rYWsqVk6gR3UJ/mSYS90X4R3znXnqfNA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@antfu/install-pkg": "^0.4.1", - "@antfu/utils": "^0.7.10", - "@iconify/types": "^2.0.0", - "debug": "^4.4.0", - "globals": "^15.13.0", - "kolorist": "^1.8.0", - "local-pkg": "^0.5.1", - "mlly": "^1.7.3" - } - }, - "node_modules/@iconify/utils/node_modules/@antfu/install-pkg": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.4.1.tgz", - "integrity": "sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "package-manager-detector": "^0.2.0", - "tinyexec": "^0.3.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@iconify/utils/node_modules/globals": { - "version": "15.14.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.14.0.tgz", - "integrity": "sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@iconify/utils/node_modules/local-pkg": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", - "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.2.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@intlify/core-base": { - "version": "9.14.5", - "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.14.5.tgz", - "integrity": "sha512-5ah5FqZG4pOoHjkvs8mjtv+gPKYU0zCISaYNjBNNqYiaITxW8ZtVih3GS/oTOqN8d9/mDLyrjD46GBApNxmlsA==", - "license": "MIT", - "dependencies": { - "@intlify/message-compiler": "9.14.5", - "@intlify/shared": "9.14.5" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/message-compiler": { - "version": "9.14.5", - "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.14.5.tgz", - "integrity": "sha512-IHzgEu61/YIpQV5Pc3aRWScDcnFKWvQA9kigcINcCBXN8mbW+vk9SK+lDxA6STzKQsVJxUPg9ACC52pKKo3SVQ==", - "license": "MIT", - "dependencies": { - "@intlify/shared": "9.14.5", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@intlify/shared": { - "version": "9.14.5", - "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.14.5.tgz", - "integrity": "sha512-9gB+E53BYuAEMhbCAxVgG38EZrk59sxBtv3jSizNL2hEWlgjBjAw1AwpLHtNaeda12pe6W20OGEa0TwuMSRbyQ==", - "license": "MIT", - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", - "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", - "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^4.0.2" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", - "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", - "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", - "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", - "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", - "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", - "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", - "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", - "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", - "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", - "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", - "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loong64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", - "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", - "cpu": [ - "loong64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", - "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-ppc64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", - "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", - "cpu": [ - "ppc64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", - "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", - "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", - "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", - "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", - "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-openbsd-x64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", - "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openbsd" - ] - }, - "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", - "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", - "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", - "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", - "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", - "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rushstack/eslint-patch": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.5.tgz", - "integrity": "sha512-kkKUDVlII2DQiKy7UstOR1ErJP8kUKAQ4oa+SQtM0K+lPdmmjj0YnnxBgtTVYH7mUKtbsxeFC9y0AmK7Yb78/A==", - "dev": true, - "license": "MIT" - }, - "node_modules/@selderee/plugin-htmlparser2": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@selderee/plugin-htmlparser2/-/plugin-htmlparser2-0.11.0.tgz", - "integrity": "sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "selderee": "^0.11.0" - }, - "funding": { - "url": "https://ko-fi.com/killymxi" - } - }, - "node_modules/@shikijs/core": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-2.1.0.tgz", - "integrity": "sha512-v795KDmvs+4oV0XD05YLzfDMe9ISBgNjtFxP4PAEv5DqyeghO1/TwDqs9ca5/E6fuO95IcAcWqR6cCX9TnqLZA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/engine-javascript": "2.1.0", - "@shikijs/engine-oniguruma": "2.1.0", - "@shikijs/types": "2.1.0", - "@shikijs/vscode-textmate": "^10.0.1", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.4" - } - }, - "node_modules/@shikijs/engine-javascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-2.1.0.tgz", - "integrity": "sha512-cgIUdAliOsoaa0rJz/z+jvhrpRd+fVAoixVFEVxUq5FA+tHgBZAIfVJSgJNVRj2hs/wZ1+4hMe82eKAThVh0nQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.1.0", - "@shikijs/vscode-textmate": "^10.0.1", - "oniguruma-to-es": "^2.3.0" - } - }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-2.1.0.tgz", - "integrity": "sha512-Ujik33wEDqgqY2WpjRDUBECGcKPv3eGGkoXPujIXvokLaRmGky8NisSk8lHUGeSFxo/Cz5sgFej9sJmA9yeepg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.1.0", - "@shikijs/vscode-textmate": "^10.0.1" - } - }, - "node_modules/@shikijs/langs": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-2.1.0.tgz", - "integrity": "sha512-Jn0gS4rPgerMDPj1ydjgFzZr5fAIoMYz4k7ZT3LJxWWBWA6lokK0pumUwVtb+MzXtlpjxOaQejLprmLbvMZyww==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.1.0" - } - }, - "node_modules/@shikijs/themes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-2.1.0.tgz", - "integrity": "sha512-oS2mU6+bz+8TKutsjBxBA7Z3vrQk21RCmADLpnu8cy3tZD6Rw0FKqDyXNtwX52BuIDKHxZNmRlTdG3vtcYv3NQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/types": "2.1.0" - } - }, - "node_modules/@shikijs/transformers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-2.1.0.tgz", - "integrity": "sha512-3sfvh6OKUVkT5wZFU1xxiq1qqNIuCwUY3yOb9ZGm19y80UZ/eoroLE2orGNzfivyTxR93GfXXZC/ghPR0/SBow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "2.1.0", - "@shikijs/types": "2.1.0" - } - }, - "node_modules/@shikijs/types": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-2.1.0.tgz", - "integrity": "sha512-OFOdHA6VEVbiQvepJ8yqicC6VmBrKxFFhM2EsHHrZESqLVAXOSeRDiuSYV185lIgp15TVic5vYBYNhTsk1xHLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/vscode-textmate": "^10.0.1", - "@types/hast": "^3.0.4" - } - }, - "node_modules/@shikijs/vscode-textmate": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.1.tgz", - "integrity": "sha512-fTIQwLF+Qhuws31iw7Ncl1R3HUDtGwIipiJ9iU+UsDUwMhegFcQKQHd51nZjb7CArq0MvON8rbgCGQYWHUKAdg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@tsconfig/node22": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/@tsconfig/node22/-/node22-22.0.0.tgz", - "integrity": "sha512-twLQ77zevtxobBOD4ToAtVmuYrpeYUh3qh+TEp+08IWhpsrIflVHqQ1F1CiPxQGL7doCdBIOOCF+1Tm833faNg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/@types/jsdom": { - "version": "21.1.7", - "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", - "integrity": "sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==", - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/linkify-it": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/markdown-it": { - "version": "14.1.2", - "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", - "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/linkify-it": "^5", - "@types/mdurl": "^2" - } - }, - "node_modules/@types/mdast": { - "version": "3.0.15", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-3.0.15.tgz", - "integrity": "sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/@types/mdurl": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.10.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.10.tgz", - "integrity": "sha512-X47y/mPNzxviAGY5TcYPtYL8JsY3kAq2n8fMmKoRCxq/c4v4pyGNCzM2R6+M5/umG4ZfHuT+sgqDYqWc9rJ6ww==", - "license": "MIT", - "dependencies": { - "undici-types": "~6.20.0" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", - "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==", - "license": "MIT" - }, - "node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/web-bluetooth": { - "version": "0.0.20", - "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", - "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitejs/plugin-vue": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", - "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@volar/language-core": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-2.4.11.tgz", - "integrity": "sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/source-map": "2.4.11" - } - }, - "node_modules/@volar/source-map": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-2.4.11.tgz", - "integrity": "sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/@volar/typescript": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-2.4.11.tgz", - "integrity": "sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "2.4.11", - "path-browserify": "^1.0.1", - "vscode-uri": "^3.0.8" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", - "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.13", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", - "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", - "license": "MIT", - "dependencies": { - "@vue/compiler-core": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", - "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.13", - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.11", - "postcss": "^8.4.48", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", - "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/compiler-vue2": { - "version": "2.7.16", - "resolved": "https://registry.npmjs.org/@vue/compiler-vue2/-/compiler-vue2-2.7.16.tgz", - "integrity": "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==", - "dev": true, - "license": "MIT", - "dependencies": { - "de-indent": "^1.0.2", - "he": "^1.2.0" - } - }, - "node_modules/@vue/devtools-api": { - "version": "6.6.4", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.4.tgz", - "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", - "license": "MIT" - }, - "node_modules/@vue/devtools-kit": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.7.1.tgz", - "integrity": "sha512-yhZ4NPnK/tmxGtLNQxmll90jIIXdb2jAhPF76anvn5M/UkZCiLJy28bYgPIACKZ7FCosyKoaope89/RsFJll1w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/devtools-shared": "^7.7.1", - "birpc": "^0.2.19", - "hookable": "^5.5.3", - "mitt": "^3.0.1", - "perfect-debounce": "^1.0.0", - "speakingurl": "^14.0.1", - "superjson": "^2.2.1" - } - }, - "node_modules/@vue/devtools-shared": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.7.1.tgz", - "integrity": "sha512-BtgF7kHq4BHG23Lezc/3W2UhK2ga7a8ohAIAGJMBr4BkxUFzhqntQtCiuL1ijo2ztWnmusymkirgqUrXoQKumA==", - "dev": true, - "license": "MIT", - "dependencies": { - "rfdc": "^1.4.1" - } - }, - "node_modules/@vue/language-core": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-2.2.0.tgz", - "integrity": "sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/language-core": "~2.4.11", - "@vue/compiler-dom": "^3.5.0", - "@vue/compiler-vue2": "^2.7.16", - "@vue/shared": "^3.5.0", - "alien-signals": "^0.4.9", - "minimatch": "^9.0.3", - "muggle-string": "^0.4.1", - "path-browserify": "^1.0.1" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", - "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", - "license": "MIT", - "dependencies": { - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", - "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", - "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", - "license": "MIT", - "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/runtime-core": "3.5.13", - "@vue/shared": "3.5.13", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", - "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", - "license": "MIT", - "dependencies": { - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13" - }, - "peerDependencies": { - "vue": "3.5.13" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", - "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", - "license": "MIT" - }, - "node_modules/@vue/tsconfig": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.4.0.tgz", - "integrity": "sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/@vueuse/components": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@vueuse/components/-/components-12.5.0.tgz", - "integrity": "sha512-aLgEW8bidRZ4qkVOIl958NAev+XKYTtbfsIj5ObjiDwvBDqxmGVCwMQvWHUQN37tb8JSkRF22gTUbXNt0iSwLQ==", - "license": "MIT", - "dependencies": { - "@vueuse/core": "12.5.0", - "@vueuse/shared": "12.5.0", - "vue": "^3.5.13" - } - }, - "node_modules/@vueuse/core": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-12.5.0.tgz", - "integrity": "sha512-GVyH1iYqNANwcahAx8JBm6awaNgvR/SwZ1fjr10b8l1HIgDp82ngNbfzJUgOgWEoxjL+URAggnlilAEXwCOZtg==", - "license": "MIT", - "dependencies": { - "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "12.5.0", - "@vueuse/shared": "12.5.0", - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/integrations": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-12.5.0.tgz", - "integrity": "sha512-HYLt8M6mjUfcoUOzyBcX2RjpfapIwHPBmQJtTmXOQW845Y/Osu9VuTJ5kPvnmWJ6IUa05WpblfOwZ+P0G4iZsQ==", - "license": "MIT", - "dependencies": { - "@vueuse/core": "12.5.0", - "@vueuse/shared": "12.5.0", - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "async-validator": "^4", - "axios": "^1", - "change-case": "^5", - "drauu": "^0.4", - "focus-trap": "^7", - "fuse.js": "^7", - "idb-keyval": "^6", - "jwt-decode": "^4", - "nprogress": "^0.2", - "qrcode": "^1.5", - "sortablejs": "^1", - "universal-cookie": "^7" - }, - "peerDependenciesMeta": { - "async-validator": { - "optional": true - }, - "axios": { - "optional": true - }, - "change-case": { - "optional": true - }, - "drauu": { - "optional": true - }, - "focus-trap": { - "optional": true - }, - "fuse.js": { - "optional": true - }, - "idb-keyval": { - "optional": true - }, - "jwt-decode": { - "optional": true - }, - "nprogress": { - "optional": true - }, - "qrcode": { - "optional": true - }, - "sortablejs": { - "optional": true - }, - "universal-cookie": { - "optional": true - } - } - }, - "node_modules/@vueuse/metadata": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-12.5.0.tgz", - "integrity": "sha512-Ui7Lo2a7AxrMAXRF+fAp9QsXuwTeeZ8fIB9wsLHqzq9MQk+2gMYE2IGJW48VMJ8ecvCB3z3GsGLKLbSasQ5Qlg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-12.5.0.tgz", - "integrity": "sha512-vMpcL1lStUU6O+kdj6YdHDixh0odjPAUM15uJ9f7MY781jcYkIwFA4iv2EfoIPO6vBmvutI1HxxAwmf0cx5ISQ==", - "license": "MIT", - "dependencies": { - "vue": "^3.5.13" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", - "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/helper-numbers": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2" - } - }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", - "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", - "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", - "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", - "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.13.2", - "@webassemblyjs/helper-api-error": "1.13.2", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", - "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", - "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/wasm-gen": "1.14.1" - } - }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", - "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } - }, - "node_modules/@webassemblyjs/leb128": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", - "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "dependencies": { - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", - "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", - "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/helper-wasm-section": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-opt": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1", - "@webassemblyjs/wast-printer": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", - "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", - "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-buffer": "1.14.1", - "@webassemblyjs/wasm-gen": "1.14.1", - "@webassemblyjs/wasm-parser": "1.14.1" - } - }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", - "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@webassemblyjs/helper-api-error": "1.13.2", - "@webassemblyjs/helper-wasm-bytecode": "1.13.2", - "@webassemblyjs/ieee754": "1.13.2", - "@webassemblyjs/leb128": "1.13.2", - "@webassemblyjs/utf8": "1.13.2" - } - }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", - "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.14.1", - "@xtuc/long": "4.2.2" - } - }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", - "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", - "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true, - "license": "Apache-2.0", - "peer": true - }, - "node_modules/acorn": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", - "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-import-phases": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", - "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.13.0" - }, - "peerDependencies": { - "acorn": "^8.14.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", - "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/algoliasearch": { - "version": "5.20.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.20.0.tgz", - "integrity": "sha512-groO71Fvi5SWpxjI9Ia+chy0QBwT61mg6yxJV27f5YFf+Mw+STT75K6SHySpP8Co5LsCrtsbCH5dJZSRtkSKaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@algolia/client-abtesting": "5.20.0", - "@algolia/client-analytics": "5.20.0", - "@algolia/client-common": "5.20.0", - "@algolia/client-insights": "5.20.0", - "@algolia/client-personalization": "5.20.0", - "@algolia/client-query-suggestions": "5.20.0", - "@algolia/client-search": "5.20.0", - "@algolia/ingestion": "1.20.0", - "@algolia/monitoring": "1.20.0", - "@algolia/recommend": "5.20.0", - "@algolia/requester-browser-xhr": "5.20.0", - "@algolia/requester-fetch": "5.20.0", - "@algolia/requester-node-http": "5.20.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/alien-signals": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/alien-signals/-/alien-signals-0.4.14.tgz", - "integrity": "sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true, - "license": "Python-2.0" - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", - "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", - "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "is-array-buffer": "^3.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/async-function": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", - "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "license": "MIT" - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/baseline-browser-mapping": { - "version": "2.10.17", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.17.tgz", - "integrity": "sha512-HdrkN8eVG2CXxeifv/VdJ4A4RSra1DTW8dc/hdxzhGHN8QePs6gKaWM9pHPcpCoxYZJuOZ8drHmbdpLHjCYjLA==", - "dev": true, - "license": "Apache-2.0", - "peer": true, - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/birpc": { - "version": "0.2.19", - "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.19.tgz", - "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "license": "ISC" - }, - "node_modules/brace-expansion": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.3.tgz", - "integrity": "sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.28.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", - "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "baseline-browser-mapping": "^2.10.12", - "caniuse-lite": "^1.0.30001782", - "electron-to-chromium": "^1.5.328", - "node-releases": "^2.0.36", - "update-browserslist-db": "^1.2.3" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/builtin-modules": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", - "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/builtins": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", - "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.0.0" - } - }, - "node_modules/bulma": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/bulma/-/bulma-0.9.4.tgz", - "integrity": "sha512-86FlT5+1GrsgKbPLRRY7cGDg8fsJiP/jzTqXXVqiUZZ2aZT8uemEOHlU1CDU+TxklPEZ11HZNNWclRBBecP4CQ==", - "license": "MIT" - }, - "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", - "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", - "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001787", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001787.tgz", - "integrity": "sha512-mNcrMN9KeI68u7muanUpEejSLghOKlVhRqS/Za2IeyGllJ9I9otGpR9g3nsw7n4W378TE/LyIteA0+/FOZm4Kg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0", - "peer": true - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/cheerio": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", - "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", - "license": "MIT", - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "encoding-sniffer": "^0.2.0", - "htmlparser2": "^9.1.0", - "parse5": "^7.1.2", - "parse5-htmlparser2-tree-adapter": "^7.0.0", - "parse5-parser-stream": "^7.1.2", - "undici": "^6.19.5", - "whatwg-mimetype": "^4.0.0" - }, - "engines": { - "node": ">=18.17" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chokidar/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/chrome-trace-event": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", - "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/clean-regexp": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", - "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/clean-regexp/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/colord": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", - "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true, - "license": "MIT" - }, - "node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", - "devOptional": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/copy-anything": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", - "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-what": "^4.1.8" - }, - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", - "dev": true, - "license": "MIT", - "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/cosmiconfig/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/css-functions-list": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", - "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12 || >=16" - } - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "license": "MIT", - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cssstyle": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.2.1.tgz", - "integrity": "sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==", - "license": "MIT", - "dependencies": { - "@asamuzakjp/css-color": "^2.8.2", - "rrweb-cssom": "^0.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/cssstyle/node_modules/rrweb-cssom": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", - "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "license": "MIT" - }, - "node_modules/data-urls": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", - "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", - "license": "MIT", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", - "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/de-indent": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", - "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", - "dev": true, - "license": "MIT" - }, - "node_modules/debug": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", - "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "license": "MIT", - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.5.0.tgz", - "integrity": "sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==", - "license": "MIT" - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, - "license": "MIT", - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "BSD-2-Clause" - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "license": "BSD-2-Clause", - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", - "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", - "license": "BSD-2-Clause", - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.334", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.334.tgz", - "integrity": "sha512-mgjZAz7Jyx1SRCwEpy9wefDS7GvNPazLthHg8eQMJ76wBdGQQDW33TCrUTvQ4wzpmOrv2zrFoD3oNufMdyMpog==", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/emoji-regex-xs": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz", - "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==", - "dev": true, - "license": "MIT" - }, - "node_modules/encoding-sniffer": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", - "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", - "license": "MIT", - "dependencies": { - "iconv-lite": "^0.6.3", - "whatwg-encoding": "^3.1.1" - }, - "funding": { - "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" - } - }, - "node_modules/enhanced-resolve": { - "version": "5.20.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.20.1.tgz", - "integrity": "sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.3.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.23.9", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", - "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-buffer-byte-length": "^1.0.2", - "arraybuffer.prototype.slice": "^1.0.4", - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "data-view-buffer": "^1.0.2", - "data-view-byte-length": "^1.0.2", - "data-view-byte-offset": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.1.0", - "es-to-primitive": "^1.3.0", - "function.prototype.name": "^1.1.8", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.0", - "get-symbol-description": "^1.1.0", - "globalthis": "^1.0.4", - "gopd": "^1.2.0", - "has-property-descriptors": "^1.0.2", - "has-proto": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "internal-slot": "^1.1.0", - "is-array-buffer": "^3.0.5", - "is-callable": "^1.2.7", - "is-data-view": "^1.0.2", - "is-regex": "^1.2.1", - "is-shared-array-buffer": "^1.0.4", - "is-string": "^1.1.1", - "is-typed-array": "^1.1.15", - "is-weakref": "^1.1.0", - "math-intrinsics": "^1.1.0", - "object-inspect": "^1.13.3", - "object-keys": "^1.1.1", - "object.assign": "^4.1.7", - "own-keys": "^1.0.1", - "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.3", - "safe-push-apply": "^1.0.0", - "safe-regex-test": "^1.1.0", - "set-proto": "^1.0.0", - "string.prototype.trim": "^1.2.10", - "string.prototype.trimend": "^1.0.9", - "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-length": "^1.0.3", - "typed-array-byte-offset": "^1.0.4", - "typed-array-length": "^1.0.7", - "unbox-primitive": "^1.1.0", - "which-typed-array": "^1.1.18" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", - "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", - "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", - "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-compat-utils": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.4.tgz", - "integrity": "sha512-/u+GQt8NMfXO8w17QendT4gvO5acfxQsAKirAt0LVxDnr2N8YLCVbregaNc/Yhp7NM128DwCaRvr8PLDfeNkQw==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-json-compat-utils": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/eslint-json-compat-utils/-/eslint-json-compat-utils-0.2.1.tgz", - "integrity": "sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "esquery": "^1.6.0" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": "*", - "jsonc-eslint-parser": "^2.4.0" - }, - "peerDependenciesMeta": { - "@eslint/json": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } - } - }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-antfu": { - "version": "0.39.8", - "resolved": "https://registry.npmjs.org/eslint-plugin-antfu/-/eslint-plugin-antfu-0.39.8.tgz", - "integrity": "sha512-VsQF1mofv0pg+9rhSohNhrxcufOzSsGyQdKqdyJHPMTT2mMwXAPgKW/v8SC6W7UDk1q/j2EHZ+UUOEAKRnkd7g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^6.0.0" - } - }, - "node_modules/eslint-plugin-es-x": { - "version": "7.8.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", - "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/ota-meshi", - "https://opencollective.com/eslint" - ], - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.11.0", - "eslint-compat-utils": "^0.5.1" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": ">=8" - } - }, - "node_modules/eslint-plugin-es-x/node_modules/eslint-compat-utils": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", - "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.4" - }, - "engines": { - "node": ">=12" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-plugin-eslint-comments": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-3.2.0.tgz", - "integrity": "sha512-0jkOl0hfojIHHmEHgmNdqv4fmh7300NdpA9FFpF7zaoLvB/QeXOGNLIo86oAveJFrfB1p05kC8hpEMHM8DwWVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5", - "ignore": "^5.0.5" - }, - "engines": { - "node": ">=6.5.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eslint-plugin-html": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-7.1.0.tgz", - "integrity": "sha512-fNLRraV/e6j8e3XYOC9xgND4j+U7b1Rq+OygMlLcMg+wI/IpVbF+ubQa3R78EjKB9njT6TQOlcK5rFKBVVtdfg==", - "dev": true, - "license": "ISC", - "dependencies": { - "htmlparser2": "^8.0.1" - } - }, - "node_modules/eslint-plugin-html/node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/eslint-plugin-import": { - "name": "eslint-plugin-i", - "version": "2.27.5-4", - "resolved": "https://registry.npmjs.org/eslint-plugin-i/-/eslint-plugin-i-2.27.5-4.tgz", - "integrity": "sha512-X3Z+dp9nZw7d/y41EDO6JyFw4WVMOT91SFuoJvL0C0/4M1l6NxQ5mLTjXHuYhq0AazW75pAmj25yMk5wPMzjsw==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.7", - "eslint-module-utils": "^2.8.0", - "get-tsconfig": "^4.6.0", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "resolve": "^1.22.3", - "semver": "^7.5.3" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://opencollective.com/unts" - }, - "peerDependencies": { - "eslint": "^7.2.0 || ^8" - } - }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-jest": { - "version": "27.9.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz", - "integrity": "sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "^5.10.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0 || ^7.0.0", - "eslint": "^7.0.0 || ^8.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-jest/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-jest/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-plugin-jest/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/eslint-plugin-jsonc": { - "version": "2.19.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.19.1.tgz", - "integrity": "sha512-MmlAOaZK1+Lg7YoCZPGRjb88ZjT+ct/KTsvcsbZdBm+w8WMzGx+XEmexk0m40P1WV9G2rFV7X3klyRGRpFXEjA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "eslint-compat-utils": "^0.6.0", - "eslint-json-compat-utils": "^0.2.1", - "espree": "^9.6.1", - "graphemer": "^1.4.0", - "jsonc-eslint-parser": "^2.0.4", - "natural-compare": "^1.4.0", - "synckit": "^0.6.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-plugin-markdown": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-markdown/-/eslint-plugin-markdown-3.0.1.tgz", - "integrity": "sha512-8rqoc148DWdGdmYF6WSQFT3uQ6PO7zXYgeBpHAOAakX/zpq+NvFYbDA/H7PYzHajwtmaOzAwfxyl++x0g1/N9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "mdast-util-from-markdown": "^0.8.5" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/eslint-plugin-n": { - "version": "16.6.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.6.2.tgz", - "integrity": "sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", - "eslint-plugin-es-x": "^7.5.0", - "get-tsconfig": "^4.7.0", - "globals": "^13.24.0", - "ignore": "^5.2.4", - "is-builtin-module": "^3.2.1", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", - "semver": "^7.5.3" - }, - "engines": { - "node": ">=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "node_modules/eslint-plugin-n/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-n/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/eslint-plugin-no-only-tests": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz", - "integrity": "sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=5.0.0" - } - }, - "node_modules/eslint-plugin-promise": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.6.0.tgz", - "integrity": "sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==", - "dev": true, - "license": "ISC", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-unicorn": { - "version": "48.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-48.0.1.tgz", - "integrity": "sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "@eslint-community/eslint-utils": "^4.4.0", - "ci-info": "^3.8.0", - "clean-regexp": "^1.0.0", - "esquery": "^1.5.0", - "indent-string": "^4.0.0", - "is-builtin-module": "^3.2.1", - "jsesc": "^3.0.2", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.27", - "regjsparser": "^0.10.0", - "semver": "^7.5.4", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" - }, - "peerDependencies": { - "eslint": ">=8.44.0" - } - }, - "node_modules/eslint-plugin-unused-imports": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-3.2.0.tgz", - "integrity": "sha512-6uXyn6xdINEpxE1MtDjxQsyXB37lfyO2yKGVVgtD7WEWQGORSOZjgrD6hBhvGv4/SO+TOlS+UnC6JppRqbuwGQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-rule-composer": "^0.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "@typescript-eslint/eslint-plugin": "6 - 7", - "eslint": "8" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-vue": { - "version": "9.32.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.32.0.tgz", - "integrity": "sha512-b/Y05HYmnB/32wqVcjxjHZzNpwxj1onBOvqW89W+V+XNG1dRuaFbNd3vT9CLbr2LXjEoq+3vn8DanWf7XU22Ug==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "globals": "^13.24.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.15", - "semver": "^7.6.3", - "vue-eslint-parser": "^9.4.3", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-yml": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.16.0.tgz", - "integrity": "sha512-t4MNCetPjTn18/fUDlQ/wKkcYjnuLYKChBrZ0qUaNqRigVqChHWzTP8SrfFi5s4keX3vdlkWRSu8zHJMdKwxWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.2", - "eslint-compat-utils": "^0.6.0", - "lodash": "^4.17.21", - "natural-compare": "^1.4.0", - "yaml-eslint-parser": "^1.2.1" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/eslint-rule-composer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz", - "integrity": "sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "license": "MIT" - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", - "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-uri": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.6.tgz", - "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", - "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.18.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", - "integrity": "sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", - "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", - "dev": true, - "license": "ISC" - }, - "node_modules/focus-trap": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.4.tgz", - "integrity": "sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "tabbable": "^6.2.0" - } - }, - "node_modules/font-awesome": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/font-awesome/-/font-awesome-4.7.0.tgz", - "integrity": "sha512-U6kGnykA/6bFmg1M/oT9EkFeIYv7JlX3bozwQJWiiLz6L0w3F5vBVPxHlwyX/vtNq1ckcpRKOB9f2Qal/VtFpg==", - "license": "(OFL-1.1 AND MIT)", - "engines": { - "node": ">=0.10.3" - } - }, - "node_modules/for-each": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.4.tgz", - "integrity": "sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", - "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", - "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "functions-have-names": "^1.2.3", - "hasown": "^2.0.2", - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.7.tgz", - "integrity": "sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "function-bind": "^1.1.2", - "get-proto": "^1.0.0", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", - "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", - "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", - "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globjoin": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", - "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true, - "license": "MIT" - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", - "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", - "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hast-util-to-html": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.4.tgz", - "integrity": "sha512-wxQzXtdbhiwGAUKrnQJXlOPmHnEehzphwkK7aluUPQ+lEc1xefC8pblMgpp2w5ldBTEfveRIrADcrhGIWrlTDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-to-html/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, - "node_modules/hookable": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", - "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^3.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/html-parse-stringify": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", - "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", - "license": "MIT", - "dependencies": { - "void-elements": "3.1.0" - } - }, - "node_modules/html-tags": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", - "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/html-to-text": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/html-to-text/-/html-to-text-9.0.5.tgz", - "integrity": "sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==", - "license": "MIT", - "dependencies": { - "@selderee/plugin-htmlparser2": "^0.11.0", - "deepmerge": "^4.3.1", - "dom-serializer": "^2.0.0", - "htmlparser2": "^8.0.2", - "selderee": "^0.11.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/html-to-text/node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/htmlparser2": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", - "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.1.0", - "entities": "^4.5.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", - "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/https-proxy-agent": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", - "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true, - "license": "ISC" - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", - "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", - "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", - "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "async-function": "^1.0.0", - "call-bound": "^1.0.3", - "get-proto": "^1.0.1", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", - "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", - "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-builtin-module": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", - "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", - "dev": true, - "license": "MIT", - "dependencies": { - "builtin-modules": "^3.3.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", - "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", - "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", - "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", - "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-proto": "^1.0.0", - "has-tostringtag": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", - "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", - "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", - "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", - "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", - "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", - "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", - "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", - "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-what": { - "version": "4.1.16", - "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", - "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true, - "license": "ISC" - }, - "node_modules/jest-worker": { - "version": "27.5.1", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", - "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz", - "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", - "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "24.1.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.3.tgz", - "integrity": "sha512-MyL55p3Ut3cXbeBEG7Hcv0mVM8pp8PBNWxRqchZnSfAiES1v1mRnMeFfaHWIPULpwsYfvO+ZmMZz5tGCnjzDUQ==", - "license": "MIT", - "dependencies": { - "cssstyle": "^4.0.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.5", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.12", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.18.0", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true, - "license": "MIT" - }, - "node_modules/jsonc-eslint-parser": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", - "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.5.0", - "eslint-visitor-keys": "^3.0.0", - "espree": "^9.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - } - }, - "node_modules/jsonparse": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", - "license": "(MIT OR Apache-2.0)", - "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/leac": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/leac/-/leac-0.6.0.tgz", - "integrity": "sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==", - "license": "MIT", - "funding": { - "url": "https://ko-fi.com/killymxi" - } - }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/loader-runner": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", - "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.11.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/local-pkg": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", - "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.18.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", - "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true, - "license": "MIT" - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mark.js": { - "version": "8.11.1", - "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz", - "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mathml-tag-names": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", - "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/mdast-util-from-markdown": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-0.8.5.tgz", - "integrity": "sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/mdast": "^3.0.0", - "mdast-util-to-string": "^2.0.0", - "micromark": "~2.11.0", - "parse-entities": "^2.0.0", - "unist-util-stringify-position": "^2.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.1", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", - "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdast-util-to-hast/node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "*" - } - }, - "node_modules/mdast-util-to-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-2.0.0.tgz", - "integrity": "sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromark": { - "version": "2.11.4", - "resolved": "https://registry.npmjs.org/micromark/-/micromark-2.11.4.tgz", - "integrity": "sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "debug": "^4.0.0", - "parse-entities": "^2.0.0" - } - }, - "node_modules/micromark-util-character": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", - "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", - "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", - "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT", - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", - "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromark-util-types": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", - "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "license": "MIT" - }, - "node_modules/micromatch": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", - "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/minisearch": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-7.1.1.tgz", - "integrity": "sha512-b3YZEYCEH4EdCAtYP7OlDyx7FdPwNzuNwLQ34SfJpM9dlbBZzeXndGavTrC+VCiRWomL21SWfMc6SCKO/U2ZNw==", - "dev": true, - "license": "MIT" - }, - "node_modules/mitt": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", - "dev": true, - "license": "MIT" - }, - "node_modules/mlly": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", - "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.14.0", - "pathe": "^2.0.1", - "pkg-types": "^1.3.0", - "ufo": "^1.5.4" - } - }, - "node_modules/mlly/node_modules/pathe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", - "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/muggle-string": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.4.1.tgz", - "integrity": "sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true, - "license": "MIT" - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true, - "license": "MIT" - }, - "node_modules/nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.37", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.37.tgz", - "integrity": "sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm-run-all/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/brace-expansion": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", - "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm-run-all/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/npm-run-all/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true, - "license": "MIT" - }, - "node_modules/npm-run-all/node_modules/cross-spawn": { - "version": "6.0.6", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", - "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", - "dev": true, - "license": "MIT", - "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" - } - }, - "node_modules/npm-run-all/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/npm-run-all/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/npm-run-all/node_modules/path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/npm-run-all/node_modules/shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all/node_modules/shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-all/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/npm-run-all/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "license": "BSD-2-Clause", - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/nwsapi": { - "version": "2.2.16", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", - "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", - "license": "MIT" - }, - "node_modules/object-inspect": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", - "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", - "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0", - "has-symbols": "^1.1.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/oniguruma-to-es": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-2.3.0.tgz", - "integrity": "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex-xs": "^1.0.0", - "regex": "^5.1.1", - "regex-recursion": "^5.1.1" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", - "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", - "dev": true, - "license": "MIT", - "dependencies": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.5" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-manager-detector": { - "version": "0.2.8", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.8.tgz", - "integrity": "sha512-ts9KSdroZisdvKMWVAVCXiKqnqNfXz4+IbrBG8/BWx/TR5le+jfenvoBuIZ6UWM9nz47W7AbD9qYfAwfWMIwzA==", - "dev": true, - "license": "MIT" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse5": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", - "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", - "license": "MIT", - "dependencies": { - "entities": "^4.5.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", - "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", - "license": "MIT", - "dependencies": { - "domhandler": "^5.0.3", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-parser-stream": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", - "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", - "license": "MIT", - "dependencies": { - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parseley": { - "version": "0.12.1", - "resolved": "https://registry.npmjs.org/parseley/-/parseley-0.12.1.tgz", - "integrity": "sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==", - "license": "MIT", - "dependencies": { - "leac": "^0.6.0", - "peberminta": "^0.9.0" - }, - "funding": { - "url": "https://ko-fi.com/killymxi" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/peberminta": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/peberminta/-/peberminta-0.9.0.tgz", - "integrity": "sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==", - "license": "MIT", - "funding": { - "url": "https://ko-fi.com/killymxi" - } - }, - "node_modules/perfect-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", - "dev": true, - "license": "MIT" - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pinia": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.3.1.tgz", - "integrity": "sha512-khUlZSwt9xXCaTbbxFYBKDc/bWAGWJjOgvxETwkTN7KRm66EeT1ZdZj6i2ceh9sP2Pzqsbc704r2yngBrxBVug==", - "license": "MIT", - "dependencies": { - "@vue/devtools-api": "^6.6.3", - "vue-demi": "^0.14.10" - }, - "funding": { - "url": "https://github.com/sponsors/posva" - }, - "peerDependencies": { - "typescript": ">=4.4.4", - "vue": "^2.7.0 || ^3.5.11" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" - } - }, - "node_modules/pkg-types/node_modules/pathe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", - "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/pluralize": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", - "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.1.tgz", - "integrity": "sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-html": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.8.0.tgz", - "integrity": "sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "htmlparser2": "^8.0.0", - "js-tokens": "^9.0.0", - "postcss": "^8.5.0", - "postcss-safe-parser": "^6.0.0" - }, - "engines": { - "node": "^12 || >=14" - } - }, - "node_modules/postcss-html/node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "license": "MIT", - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" - } - }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", - "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", - "dev": true, - "license": "MIT" - }, - "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.3.3" - } - }, - "node_modules/postcss-scss": { - "version": "4.0.9", - "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz", - "integrity": "sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss-scss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "engines": { - "node": ">=12.0" - }, - "peerDependencies": { - "postcss": "^8.4.29" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", - "dev": true, - "license": "MIT", - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/postcss-value-parser": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", - "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/preact": { - "version": "10.25.4", - "resolved": "https://registry.npmjs.org/preact/-/preact-10.25.4.tgz", - "integrity": "sha512-jLdZDb+Q+odkHJ+MpW/9U5cODzqnB+fy2EiHSZES7ldV5LK7yjlVzTp7R8Xy6W6y75kfK8iWYtFVH7lvjwrCMA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/preact" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "license": "MIT" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", - "dev": true, - "license": "MIT", - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redent/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redent/node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", - "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.7", - "get-proto": "^1.0.1", - "which-builtin-type": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regex": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/regex/-/regex-5.1.1.tgz", - "integrity": "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-recursion": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-5.1.1.tgz", - "integrity": "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "regex": "^5.1.1", - "regex-utilities": "^2.3.0" - } - }, - "node_modules/regex-utilities": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz", - "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==", - "dev": true, - "license": "MIT" - }, - "node_modules/regexp-tree": { - "version": "0.1.27", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", - "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", - "dev": true, - "license": "MIT", - "bin": { - "regexp-tree": "bin/regexp-tree" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", - "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "set-function-name": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regjsparser": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", - "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rfdc": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", - "dev": true, - "license": "MIT" - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "4.60.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", - "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "1.0.8" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.60.1", - "@rollup/rollup-android-arm64": "4.60.1", - "@rollup/rollup-darwin-arm64": "4.60.1", - "@rollup/rollup-darwin-x64": "4.60.1", - "@rollup/rollup-freebsd-arm64": "4.60.1", - "@rollup/rollup-freebsd-x64": "4.60.1", - "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", - "@rollup/rollup-linux-arm-musleabihf": "4.60.1", - "@rollup/rollup-linux-arm64-gnu": "4.60.1", - "@rollup/rollup-linux-arm64-musl": "4.60.1", - "@rollup/rollup-linux-loong64-gnu": "4.60.1", - "@rollup/rollup-linux-loong64-musl": "4.60.1", - "@rollup/rollup-linux-ppc64-gnu": "4.60.1", - "@rollup/rollup-linux-ppc64-musl": "4.60.1", - "@rollup/rollup-linux-riscv64-gnu": "4.60.1", - "@rollup/rollup-linux-riscv64-musl": "4.60.1", - "@rollup/rollup-linux-s390x-gnu": "4.60.1", - "@rollup/rollup-linux-x64-gnu": "4.60.1", - "@rollup/rollup-linux-x64-musl": "4.60.1", - "@rollup/rollup-openbsd-x64": "4.60.1", - "@rollup/rollup-openharmony-arm64": "4.60.1", - "@rollup/rollup-win32-arm64-msvc": "4.60.1", - "@rollup/rollup-win32-ia32-msvc": "4.60.1", - "@rollup/rollup-win32-x64-gnu": "4.60.1", - "@rollup/rollup-win32-x64-msvc": "4.60.1", - "fsevents": "~2.3.2" - } - }, - "node_modules/rrweb-cssom": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", - "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", - "license": "MIT" - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-array-concat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", - "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", - "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", - "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "license": "MIT" - }, - "node_modules/sass": { - "version": "1.32.13", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.13.tgz", - "integrity": "sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA==", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/sass-loader": { - "version": "13.3.3", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.3.tgz", - "integrity": "sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==", - "dev": true, - "license": "MIT", - "dependencies": { - "neo-async": "^2.6.2" - }, - "engines": { - "node": ">= 14.15.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "fibers": ">= 3.1.0", - "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", - "sass": "^1.3.0", - "sass-embedded": "*", - "webpack": "^5.0.0" - }, - "peerDependenciesMeta": { - "fibers": { - "optional": true - }, - "node-sass": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - } - } - }, - "node_modules/sax": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", - "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "license": "ISC" - }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/schema-utils": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", - "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.9", - "ajv": "^8.9.0", - "ajv-formats": "^2.1.1", - "ajv-keywords": "^5.1.0" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", - "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "fast-deep-equal": "^3.1.3" - }, - "peerDependencies": { - "ajv": "^8.8.2" - } - }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/scule": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", - "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", - "dev": true, - "license": "MIT" - }, - "node_modules/search-insights": { - "version": "2.17.3", - "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.17.3.tgz", - "integrity": "sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/selderee": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/selderee/-/selderee-0.11.0.tgz", - "integrity": "sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==", - "license": "MIT", - "dependencies": { - "parseley": "^0.12.0" - }, - "funding": { - "url": "https://ko-fi.com/killymxi" - } - }, - "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", - "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", - "dev": true, - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/shell-quote": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.2.tgz", - "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/shiki": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-2.1.0.tgz", - "integrity": "sha512-yvKPdNGLXZv7WC4bl7JBbU3CEcUxnBanvMez8MG3gZXKpClGL4bHqFyLhTx+2zUvbjClUANs/S22HXb7aeOgmA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@shikijs/core": "2.1.0", - "@shikijs/engine-javascript": "2.1.0", - "@shikijs/engine-oniguruma": "2.1.0", - "@shikijs/langs": "2.1.0", - "@shikijs/themes": "2.1.0", - "@shikijs/types": "2.1.0", - "@shikijs/vscode-textmate": "^10.0.1", - "@types/hast": "^3.0.4" - } - }, - "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.21", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", - "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/speakingurl": { - "version": "14.0.1", - "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", - "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.padend": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", - "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", - "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-object-atoms": "^1.0.0", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", - "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.2", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dev": true, - "license": "MIT", - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/stringify-entities/node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strip-literal": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.1.tgz", - "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "js-tokens": "^9.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/style-search": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", - "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", - "dev": true, - "license": "ISC" - }, - "node_modules/stylelint": { - "version": "15.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", - "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4", - "@csstools/selector-specificity": "^3.0.0", - "balanced-match": "^2.0.0", - "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.1", - "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.1", - "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^7.0.0", - "global-modules": "^2.0.0", - "globby": "^11.1.0", - "globjoin": "^0.1.4", - "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", - "imurmurhash": "^0.1.4", - "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", - "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", - "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.28", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0", - "resolve-from": "^5.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", - "supports-hyperlinks": "^3.0.0", - "svg-tags": "^1.0.0", - "table": "^6.8.1", - "write-file-atomic": "^5.0.1" - }, - "bin": { - "stylelint": "bin/stylelint.mjs" - }, - "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" - } - }, - "node_modules/stylelint-config-html": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/stylelint-config-html/-/stylelint-config-html-1.1.0.tgz", - "integrity": "sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12 || >=14" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "postcss-html": "^1.0.0", - "stylelint": ">=14.0.0" - } - }, - "node_modules/stylelint-config-recommended": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-12.0.0.tgz", - "integrity": "sha512-x6x8QNARrGO2sG6iURkzqL+Dp+4bJorPMMRNPScdvaUK8PsynriOcMW7AFDKqkWAS5wbue/u8fUT/4ynzcmqdQ==", - "dev": true, - "license": "MIT", - "peerDependencies": { - "stylelint": "^15.5.0" - } - }, - "node_modules/stylelint-config-recommended-scss": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-12.0.0.tgz", - "integrity": "sha512-5Bb2mlGy6WLa30oNeKpZvavv2lowJUsUJO25+OA68GFTemlwd1zbFsL7q0bReKipOSU3sG47hKneZ6Nd+ctrFA==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-scss": "^4.0.6", - "stylelint-config-recommended": "^12.0.0", - "stylelint-scss": "^5.0.0" - }, - "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^15.5.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } - } - }, - "node_modules/stylelint-config-recommended-vue": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-vue/-/stylelint-config-recommended-vue-1.6.0.tgz", - "integrity": "sha512-syk1adIHvbH2T1OiR/spUK4oQy35PZIDw8Zmc7E0+eVK9Z9SK3tdMpGRT/bgGnAPpMt/WaL9K1u0tlF6xM0sMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.3.5", - "stylelint-config-html": ">=1.0.0", - "stylelint-config-recommended": ">=6.0.0" - }, - "engines": { - "node": "^12 || >=14" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, - "peerDependencies": { - "postcss-html": "^1.0.0", - "stylelint": ">=14.0.0" - } - }, - "node_modules/stylelint-config-standard": { - "version": "33.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-33.0.0.tgz", - "integrity": "sha512-eyxnLWoXImUn77+ODIuW9qXBDNM+ALN68L3wT1lN2oNspZ7D9NVGlNHb2QCUn4xDug6VZLsh0tF8NyoYzkgTzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "stylelint-config-recommended": "^12.0.0" - }, - "peerDependencies": { - "stylelint": "^15.5.0" - } - }, - "node_modules/stylelint-config-standard-scss": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-9.0.0.tgz", - "integrity": "sha512-yPKpJsrZn4ybuQZx/DkEHuCjw7pJginErE/47dFhCnrvD48IJ4UYec8tSiCuJWMA3HRjbIa3nh5ZeSauDGuVAg==", - "dev": true, - "license": "MIT", - "dependencies": { - "stylelint-config-recommended-scss": "^11.0.0", - "stylelint-config-standard": "^33.0.0" - }, - "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^15.5.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } - } - }, - "node_modules/stylelint-config-standard-scss/node_modules/stylelint-config-recommended-scss": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-11.0.0.tgz", - "integrity": "sha512-EDghTDU7aOv2LTsRZvcT1w8mcjUaMhuy+t38iV5I/0Qiu6ixdkRwhLEMul3K/fnB2v9Nwqvb3xpvJfPH+HduDw==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-scss": "^4.0.6", - "stylelint-config-recommended": "^12.0.0", - "stylelint-scss": "^4.6.0" - }, - "peerDependencies": { - "postcss": "^8.3.3", - "stylelint": "^15.5.0" - }, - "peerDependenciesMeta": { - "postcss": { - "optional": true - } - } - }, - "node_modules/stylelint-config-standard-scss/node_modules/stylelint-scss": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-4.7.0.tgz", - "integrity": "sha512-TSUgIeS0H3jqDZnby1UO1Qv3poi1N8wUYIJY6D1tuUq2MN3lwp/rITVo0wD+1SWTmRm0tNmGO0b7nKInnqF6Hg==", - "dev": true, - "license": "MIT", - "dependencies": { - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.11", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "stylelint": "^14.5.1 || ^15.0.0" - } - }, - "node_modules/stylelint-scss": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-5.3.2.tgz", - "integrity": "sha512-4LzLaayFhFyneJwLo0IUa8knuIvj+zF0vBFueQs4e3tEaAMIQX8q5th8ziKkgOavr6y/y9yoBe+RXN/edwLzsQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "known-css-properties": "^0.29.0", - "postcss-media-query-parser": "^0.2.3", - "postcss-resolve-nested-selector": "^0.1.1", - "postcss-selector-parser": "^6.0.13", - "postcss-value-parser": "^4.2.0" - }, - "peerDependencies": { - "stylelint": "^14.5.1 || ^15.0.0" - } - }, - "node_modules/stylelint/node_modules/@csstools/css-parser-algorithms": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", - "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^2.4.1" - } - }, - "node_modules/stylelint/node_modules/@csstools/css-tokenizer": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", - "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18" - } - }, - "node_modules/stylelint/node_modules/@csstools/media-query-list-parser": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", - "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": "^14 || ^16 || >=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.7.1", - "@csstools/css-tokenizer": "^2.4.1" - } - }, - "node_modules/stylelint/node_modules/balanced-match": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", - "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "license": "MIT" - }, - "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", - "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.2.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/stylelint/node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/superjson": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.2.tgz", - "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "copy-anything": "^3.0.2" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", - "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/svg-tags": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", - "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", - "dev": true - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "license": "MIT" - }, - "node_modules/synckit": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.6.2.tgz", - "integrity": "sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.3.1" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/tabbable": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", - "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", - "devOptional": true, - "license": "MIT" - }, - "node_modules/table": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", - "integrity": "sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/table/node_modules/ajv": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", - "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", - "dev": true, - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/table/node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true, - "license": "MIT" - }, - "node_modules/tapable": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.2.tgz", - "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/terser": { - "version": "5.37.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.37.0.tgz", - "integrity": "sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser-webpack-plugin": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.4.0.tgz", - "integrity": "sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.25", - "jest-worker": "^27.4.5", - "schema-utils": "^4.3.0", - "terser": "^5.31.1" - }, - "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } - } - }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", - "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", - "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", - "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "dev": true, - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true, - "license": "0BSD" - }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", - "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", - "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", - "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-proto": "^1.2.0", - "is-typed-array": "^1.1.15", - "reflect.getprototypeof": "^1.0.9" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", - "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0", - "reflect.getprototypeof": "^1.0.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", - "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==", - "devOptional": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/ufo": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", - "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", - "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici": { - "version": "6.24.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-6.24.1.tgz", - "integrity": "sha512-sC+b0tB1whOCzbtlx20fx3WgCXwkW627p4EA9uM+/tNNPkSS+eSEld6pAs9nDv7WbY1UUljBMYPtu9BCOrCWKA==", - "license": "MIT", - "engines": { - "node": ">=18.17" - } - }, - "node_modules/undici-types": { - "version": "6.20.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", - "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", - "license": "MIT" - }, - "node_modules/unimport": { - "version": "3.14.6", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.14.6.tgz", - "integrity": "sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^5.1.4", - "acorn": "^8.14.0", - "escape-string-regexp": "^5.0.0", - "estree-walker": "^3.0.3", - "fast-glob": "^3.3.3", - "local-pkg": "^1.0.0", - "magic-string": "^0.30.17", - "mlly": "^1.7.4", - "pathe": "^2.0.1", - "picomatch": "^4.0.2", - "pkg-types": "^1.3.0", - "scule": "^1.3.0", - "strip-literal": "^2.1.1", - "unplugin": "^1.16.1" - } - }, - "node_modules/unimport/node_modules/escape-string-regexp": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unimport/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/unimport/node_modules/local-pkg": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.0.0.tgz", - "integrity": "sha512-bbgPw/wmroJsil/GgL4qjDzs5YLTBMQ99weRsok1XCDccQeehbHA/I1oRvk2NPtr7KGZgT/Y5tPRnAtMqeG2Kg==", - "dev": true, - "license": "MIT", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.3.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/unimport/node_modules/pathe": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.2.tgz", - "integrity": "sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==", - "dev": true, - "license": "MIT" - }, - "node_modules/unimport/node_modules/picomatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", - "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-is/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/unist-util-stringify-position": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", - "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^2.0.2" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/unist-util-visit/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/universal-cookie": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-7.2.2.tgz", - "integrity": "sha512-fMiOcS3TmzP2x5QV26pIH3mvhexLIT0HmPa3V7Q7knRfT9HG6kTwq02HZGLPw0sAOXrAmotElGRvTLCMbJsvxQ==", - "devOptional": true, - "license": "MIT", - "dependencies": { - "@types/cookie": "^0.6.0", - "cookie": "^0.7.2" - } - }, - "node_modules/universalify": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unplugin": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.16.1.tgz", - "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", - "dev": true, - "license": "MIT", - "dependencies": { - "acorn": "^8.14.0", - "webpack-virtual-modules": "^0.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/unplugin-auto-import": { - "version": "0.16.7", - "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.16.7.tgz", - "integrity": "sha512-w7XmnRlchq6YUFJVFGSvG1T/6j8GrdYN6Em9Wf0Ye+HXgD/22kont+WnuCAA0UaUoxtuvRR1u/mXKy63g/hfqQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@antfu/utils": "^0.7.6", - "@rollup/pluginutils": "^5.0.5", - "fast-glob": "^3.3.1", - "local-pkg": "^0.5.0", - "magic-string": "^0.30.5", - "minimatch": "^9.0.3", - "unimport": "^3.4.0", - "unplugin": "^1.5.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@nuxt/kit": "^3.2.2", - "@vueuse/core": "*" - }, - "peerDependenciesMeta": { - "@nuxt/kit": { - "optional": true - }, - "@vueuse/core": { - "optional": true - } - } - }, - "node_modules/unplugin-auto-import/node_modules/local-pkg": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", - "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.2.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/unplugin-icons": { - "version": "0.17.4", - "resolved": "https://registry.npmjs.org/unplugin-icons/-/unplugin-icons-0.17.4.tgz", - "integrity": "sha512-PHLxjBx3ZV8RUBvfMafFl8uWH88jHeZgOijcRpkwgne7y2Ovx7WI0Ltzzw3fjZQ7dGaDhB8udyKVdm9N2S6BIw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@antfu/install-pkg": "^0.1.1", - "@antfu/utils": "^0.7.6", - "@iconify/utils": "^2.1.11", - "debug": "^4.3.4", - "kolorist": "^1.8.0", - "local-pkg": "^0.5.0", - "unplugin": "^1.5.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@svgr/core": ">=7.0.0", - "@svgx/core": "^1.0.1", - "@vue/compiler-sfc": "^3.0.2 || ^2.7.0", - "vue-template-compiler": "^2.6.12", - "vue-template-es2015-compiler": "^1.9.0" - }, - "peerDependenciesMeta": { - "@svgr/core": { - "optional": true - }, - "@svgx/core": { - "optional": true - }, - "@vue/compiler-sfc": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - }, - "vue-template-es2015-compiler": { - "optional": true - } - } - }, - "node_modules/unplugin-icons/node_modules/local-pkg": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", - "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "mlly": "^1.7.3", - "pkg-types": "^1.2.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", - "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/vfile-message/node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile/node_modules/@types/unist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", - "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true, - "license": "MIT" - }, - "node_modules/vite": { - "version": "5.4.21", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz", - "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==", - "dev": true, - "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vitepress": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.6.3.tgz", - "integrity": "sha512-fCkfdOk8yRZT8GD9BFqusW3+GggWYZ/rYncOfmgcDtP3ualNHCAg+Robxp2/6xfH1WwPHtGpPwv7mbA3qomtBw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@docsearch/css": "3.8.2", - "@docsearch/js": "3.8.2", - "@iconify-json/simple-icons": "^1.2.21", - "@shikijs/core": "^2.1.0", - "@shikijs/transformers": "^2.1.0", - "@shikijs/types": "^2.1.0", - "@types/markdown-it": "^14.1.2", - "@vitejs/plugin-vue": "^5.2.1", - "@vue/devtools-api": "^7.7.0", - "@vue/shared": "^3.5.13", - "@vueuse/core": "^12.4.0", - "@vueuse/integrations": "^12.4.0", - "focus-trap": "^7.6.4", - "mark.js": "8.11.1", - "minisearch": "^7.1.1", - "shiki": "^2.1.0", - "vite": "^5.4.14", - "vue": "^3.5.13" - }, - "bin": { - "vitepress": "bin/vitepress.js" - }, - "peerDependencies": { - "markdown-it-mathjax3": "^4", - "postcss": "^8" - }, - "peerDependenciesMeta": { - "markdown-it-mathjax3": { - "optional": true - }, - "postcss": { - "optional": true - } - } - }, - "node_modules/vitepress/node_modules/@vue/devtools-api": { - "version": "7.7.1", - "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-7.7.1.tgz", - "integrity": "sha512-Cexc8GimowoDkJ6eNelOPdYIzsu2mgNyp0scOQ3tiaYSb9iok6LOESSsJvHaI+ib3joRfqRJNLkHFjhNuWA5dg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@vue/devtools-kit": "^7.7.1" - } - }, - "node_modules/void-elements": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", - "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vscode-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", - "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", - "dev": true, - "license": "MIT" - }, - "node_modules/vue": { - "version": "3.5.13", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", - "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", - "license": "MIT", - "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-sfc": "3.5.13", - "@vue/runtime-dom": "3.5.13", - "@vue/server-renderer": "3.5.13", - "@vue/shared": "3.5.13" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "hasInstallScript": true, - "license": "MIT", - "bin": { - "vue-demi-fix": "bin/vue-demi-fix.js", - "vue-demi-switch": "bin/vue-demi-switch.js" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - }, - "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^3.0.0-0 || ^2.6.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/vue-eslint-parser": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", - "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4", - "eslint-scope": "^7.1.1", - "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.1", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.6" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=6.0.0" - } - }, - "node_modules/vue-i18n": { - "version": "9.14.5", - "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.14.5.tgz", - "integrity": "sha512-0jQ9Em3ymWngyiIkj0+c/k7WgaPO+TNzjKSNq9BvBQaKJECqn9cd9fL4tkDhB5G1QBskGl9YxxbDAhgbFtpe2g==", - "deprecated": "v9 and v10 no longer supported. please migrate to v11. about maintenance status, see https://vue-i18n.intlify.dev/guide/maintenance.html", - "license": "MIT", - "dependencies": { - "@intlify/core-base": "9.14.5", - "@intlify/shared": "9.14.5", - "@vue/devtools-api": "^6.5.0" - }, - "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://github.com/sponsors/kazupon" - }, - "peerDependencies": { - "vue": "^3.0.0" - } - }, - "node_modules/vue-multiselect": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-3.5.0.tgz", - "integrity": "sha512-i758SEqWFcFshL1eAg0F3EFeFQ1mOCmh2mgnGCZv1XpHFVIAv8fxo8bQQ4ZnMoaPhMp8KI1A6gPBVHh3YzRg/Q==", - "license": "MIT", - "engines": { - "node": ">= 14.18.1", - "npm": ">= 6.14.15" - } - }, - "node_modules/vue-tsc": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-2.2.0.tgz", - "integrity": "sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@volar/typescript": "~2.4.11", - "@vue/language-core": "2.2.0" - }, - "bin": { - "vue-tsc": "bin/vue-tsc.js" - }, - "peerDependencies": { - "typescript": ">=5.0.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", - "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", - "license": "MIT", - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/w3c-xmlserializer/node_modules/xml-name-validator": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", - "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/watchpack": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", - "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/webpack": { - "version": "5.106.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.106.0.tgz", - "integrity": "sha512-Pkx5joZ9RrdgO5LBkyX1L2ZAJeK/Taz3vqZ9CbcP0wS5LEMx5QkKsEwLl29QJfihZ+DKRBFldzy1O30pJ1MDpA==", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.8", - "@types/json-schema": "^7.0.15", - "@webassemblyjs/ast": "^1.14.1", - "@webassemblyjs/wasm-edit": "^1.14.1", - "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.16.0", - "acorn-import-phases": "^1.0.3", - "browserslist": "^4.28.1", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.20.0", - "es-module-lexer": "^2.0.0", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.3.1", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^4.3.3", - "tapable": "^2.3.0", - "terser-webpack-plugin": "^5.3.17", - "watchpack": "^2.5.1", - "webpack-sources": "^3.3.4" - }, - "bin": { - "webpack": "bin/webpack.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } - } - }, - "node_modules/webpack-sources": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", - "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", - "dev": true, - "license": "MIT", - "peer": true, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", - "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/webpack/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/webpack/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", - "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", - "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-url": { - "version": "14.1.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz", - "integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==", - "license": "MIT", - "dependencies": { - "tr46": "^5.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", - "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-bigint": "^1.1.0", - "is-boolean-object": "^1.2.1", - "is-number-object": "^1.1.1", - "is-string": "^1.1.1", - "is-symbol": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", - "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "function.prototype.name": "^1.1.6", - "has-tostringtag": "^1.0.2", - "is-async-function": "^2.0.0", - "is-date-object": "^1.1.0", - "is-finalizationregistry": "^1.1.0", - "is-generator-function": "^1.0.10", - "is-regex": "^1.2.1", - "is-weakref": "^1.0.2", - "isarray": "^2.0.5", - "which-boxed-primitive": "^1.1.0", - "which-collection": "^1.0.2", - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", - "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.18", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", - "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "for-each": "^0.3.3", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", - "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ws": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", - "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12" - } - }, - "node_modules/xml2js": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", - "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", - "license": "MIT", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", - "license": "MIT", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "license": "MIT" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.8.3", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", - "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", - "dev": true, - "license": "ISC", - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14.6" - }, - "funding": { - "url": "https://github.com/sponsors/eemeli" - } - }, - "node_modules/yaml-eslint-parser": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.3.tgz", - "integrity": "sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.0.0", - "lodash": "^4.17.21", - "yaml": "^2.0.0" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index e33b5ca..0000000 --- a/package.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "type": "module", - "version": "0.0.14", - "engines": { - "node": ">=22.0.0" - }, - "scripts": { - "dev": "GENERATE_INDEX=false vitepress dev", - "build": "GENERATE_INDEX=true run-p type-check build-only", - "build-only": "rm -rf tsconfig.tsbuildinfo; vitepress build; mv .vitepress/dist/docs/404.html .vitepress/dist/404.html", - "preview": "cp .vitepress/dist/404.html .vitepress/dist/docs/404.html; vitepress preview", - "type-check": "vue-tsc --noEmit", - "lint:es": "eslint .", - "lint:style": "stylelint .vitepress/theme/**.{css,scss,sass}", - "lint-fix:es": "eslint . --fix", - "lint-fix:style": "stylelint .vitepress/theme/**.{css,scss,sass} --fix", - "format": "run-p lint-fix:*", - "deploy:qa": "export HOSTNAME=https://appscode.ninja; npm run build; firebase use default; firebase deploy", - "deploy:prod": "export HOSTNAME=https://appscode.com; npm run build; firebase use prod; firebase deploy; firebase use default" - }, - "dependencies": { - "@appscode/design-system": "^2.2.7", - "@bytebuilders/docs-base": "github:bytebuilders/docs-base", - "@vueuse/components": "^12.5.0", - "@vueuse/core": "^12.5.0", - "@vueuse/integrations": "^12.5.0", - "bulma": "0.9.4", - "font-awesome": "^4.7.0", - "pinia": "^2.1.3", - "vue-i18n": "^9.2.2" - }, - "devDependencies": { - "@antfu/eslint-config": "^0.39.5", - "@iconify/json": "^2.2.139", - "@rushstack/eslint-patch": "^1.3.1", - "@tsconfig/node22": "^22.0.0", - "@types/node": "^22.10.10", - "@vue/compiler-sfc": "^3.3.8", - "@vue/tsconfig": "^0.4.0", - "eslint": "^8.42.0", - "npm-run-all": "^4.1.5", - "postcss-html": "^1.5.0", - "sass": "1.32.13", - "sass-loader": "^13.3.1", - "stylelint": "^15.7.0", - "stylelint-config-recommended-scss": "^12.0.0", - "stylelint-config-recommended-vue": "^1.4.0", - "stylelint-config-standard": "^33.0.0", - "stylelint-config-standard-scss": "^9.0.0", - "typescript": "^5.0.4", - "universal-cookie": "^7.2.2", - "unplugin-auto-import": "^0.16.4", - "unplugin-icons": "^0.17.3", - "vitepress": "^1.0.1", - "vue-tsc": "^2.2.0" - } -} diff --git a/shims-vue.d.ts b/shims-vue.d.ts deleted file mode 100644 index 502aff2..0000000 --- a/shims-vue.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -declare module '*.vue' - - -declare module '@bytebuilders/docs-base/config' { - import { UserConfig } from 'vitepress' - const baseConfig: () => Promise - export default baseConfig -} diff --git a/src/_home-account.md b/src/_home-account.md deleted file mode 100644 index 2d6e6cc..0000000 --- a/src/_home-account.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -menu: - home_menu: - identifier: home-account - name: Account Management - description: Manage your account, subscriptions, and security settings with our interface - link: /en/guides/account-management/manage-profile.html - icon: https://img.icons8.com/00994A/ios/50/admin-settings-male.png - weight: 20 ---- diff --git a/src/_home-billing.md b/src/_home-billing.md deleted file mode 100644 index 808d8c8..0000000 --- a/src/_home-billing.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -menu: - home_menu: - identifier: home-billing - name: Billing and Usage Guide - description: Billing and Usage Guide for AppsCode's products - link: /en/guides/billing-and-usage-guide/overview.html - icon: https://img.icons8.com/external-anggara-basic-outline-anggara-putra/96/external-stats-ui-anggara-basic-outline-anggara-putra.png - weight: 20 ---- diff --git a/src/_home-cluster.md b/src/_home-cluster.md deleted file mode 100644 index d17a77a..0000000 --- a/src/_home-cluster.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -menu: - home_menu: - identifier: home-cluster - name: Cluster Management - description: Simplify cluster management with AppsCode's intuitive tools and features - link: /en/guides/cluster-management/add-cluster/overview.html - icon: https://img.icons8.com/00994A/external-sbts2018-outline-sbts2018/58/external-12-cluster-elastic-search-sbts2018-outline-sbts2018.png - weight: 20 ---- diff --git a/src/_home-database.md b/src/_home-database.md deleted file mode 100644 index 1bfc4f3..0000000 --- a/src/_home-database.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -menu: - home_menu: - identifier: home-database - name: Database Management - description: Manage databases with AppsCode's user-friendly tools and solutions - link: /en/guides/database-management/create-database.html - icon: https://img.icons8.com/00994A/ios/50/data-configuration.png - weight: 20 ---- diff --git a/src/_home-hub-ui.md b/src/_home-hub-ui.md deleted file mode 100644 index b851460..0000000 --- a/src/_home-hub-ui.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -menu: - home_menu: - identifier: hub-ui - name: Hub UI - description: Manage multiple clusters from a single point using Hub UI - link: /en/guides/cluster-management/hub-ui/introduction.html - icon: https://img.icons8.com/00994A/ios/50/hub.png - weight: 20 ---- diff --git a/src/_home-integrations.md b/src/_home-integrations.md deleted file mode 100644 index 2b15181..0000000 --- a/src/_home-integrations.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -menu: - home_menu: - identifier: home-integrations - name: Integrations - description: Manage licenses for AppsCode's products - link: /en/guides/integrations/rancher-extension.html - icon: https://img.icons8.com/?size=100&id=80695&format=png&color=000000 - weight: 20 ---- \ No newline at end of file diff --git a/src/_home-license.md b/src/_home-license.md deleted file mode 100644 index dbd6618..0000000 --- a/src/_home-license.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -menu: - home_menu: - identifier: home-license - name: License Management - description: Manage licenses for AppsCode's products - link: /en/guides/license-management/overview.html - icon: https://img.icons8.com/?size=100&id=80695&format=png&color=000000 - weight: 20 ---- diff --git a/src/_home-start.md b/src/_home-start.md deleted file mode 100644 index 71a00df..0000000 --- a/src/_home-start.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -menu: - home_menu: - identifier: home-start - name: Get Started - description: New to AppsCode? Follow simple steps to set up your account. - link: /en/guides/get-started/register-login.html - icon: https://img.icons8.com/00994A/ios/50/rocket--v1.png - weight: 10 ---- diff --git a/src/auto-imports.d.ts b/src/auto-imports.d.ts deleted file mode 100644 index 1d89ee8..0000000 --- a/src/auto-imports.d.ts +++ /dev/null @@ -1,9 +0,0 @@ -/* eslint-disable */ -/* prettier-ignore */ -// @ts-nocheck -// noinspection JSUnusedGlobalSymbols -// Generated by unplugin-auto-import -export {} -declare global { - -} diff --git a/src/en/guides/_index.md b/src/en/guides/_index.md deleted file mode 100644 index ad1b75c..0000000 --- a/src/en/guides/_index.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -menu: - section_menu: - identifier: guides - name: Guides - weight: 30 ---- diff --git a/src/en/guides/cluster-management/_index.md b/src/en/guides/cluster-management/_index.md deleted file mode 100644 index 931820a..0000000 --- a/src/en/guides/cluster-management/_index.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -layout: 'guide' -menu: - docs_menu: - identifier: cluster-management - name: Cluster Management - popular: true - weight: 30 -menu_name: docs_menu -section_menu: guides ---- diff --git a/src/en/guides/cluster-management/add-cluster/self-managed/_index.md b/src/en/guides/cluster-management/add-cluster/self-managed/_index.md deleted file mode 100644 index f280e53..0000000 --- a/src/en/guides/cluster-management/add-cluster/self-managed/_index.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -layout: 'guide' -menu: - docs_menu: - identifier: cluster-management-add-selfmanaged - name: Import Self-Managed Clusters - parent: cluster-management-add - weight: 20 - home_menu: - identifier: home-cluster-add-selfmanaged - name: Import Self-Managed Clusters - parent: home-cluster - weight: 20 -menu_name: docs_menu -section_menu: guides ---- \ No newline at end of file diff --git a/src/en/guides/cluster-management/constraints-violations.md b/src/en/guides/cluster-management/constraints-violations.md deleted file mode 100644 index 0930f4b..0000000 --- a/src/en/guides/cluster-management/constraints-violations.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: 'guide' -menu: - docs_menu: - identifier: cluster-management-gatekeeper - name: Constraints & Violations - parent: cluster-management - weight: 90 - home_menu: - identifier: home-cluster-gatekeeper - name: Constraints & Violations - parent: home-cluster - weight: 90 -menu_name: docs_menu -section_menu: guides ---- - - -# Constraints & Violations diff --git a/src/en/guides/database-management/manage-recommendations.md b/src/en/guides/database-management/manage-recommendations.md deleted file mode 100644 index 9c83a5e..0000000 --- a/src/en/guides/database-management/manage-recommendations.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: 'guide' -menu: - docs_menu: - identifier: database-management-recommendation - name: Manage Recommendations - parent: database-management - weight: 80 - home_menu: - identifier: home-database-recommendation - name: Manage Recommendations - parent: home-database - weight: 80 -menu_name: docs_menu -section_menu: guides ---- - - -# Manage Recommendations diff --git a/src/en/guides/get-started/manage-databases.md b/src/en/guides/get-started/manage-databases.md deleted file mode 100644 index 1ad2da7..0000000 --- a/src/en/guides/get-started/manage-databases.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: 'guide' -menu: - docs_menu: - identifier: guide-start-databases - name: Manage Databases - parent: guide-start - weight: 50 - home_menu: - identifier: home-start-databases - name: Manage Databases - parent: home-start - weight: 50 -menu_name: docs_menu -section_menu: guides ---- - - -# Manage Databases diff --git a/src/en/overview.md b/src/en/overview.md deleted file mode 100644 index 8429dca..0000000 --- a/src/en/overview.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: 'guide' -menu: - section_menu: - identifier: overview - name: Overview - weight: 20 -section_menu: overview ---- - - -# Appscode Container Engine - -Kubernetes has emerged as the de-facto way to deploy modern containerized apps on cloud or on-premises. “Despite all that growth on the application layer, the data layer hasn’t gotten as much traction with containerization” - Google. That’s not surprising, since handling things like state (the database), availability to other layers of the application, and redundancy for a database makes it challenging to run a database in a distributed environment like Kubernetes. diff --git a/src/en/selfhost-setup/install/_index.md b/src/en/selfhost-setup/install/_index.md deleted file mode 100644 index ab482af..0000000 --- a/src/en/selfhost-setup/install/_index.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: 'guide' -menu: - selfhost-setup_docs_menu: - identifier: selfhosted-installer - name: Self Hosted Installer - weight: 10 ---- diff --git a/src/en/selfhost-setup/uninstall.md b/src/en/selfhost-setup/uninstall.md deleted file mode 100644 index ba01a58..0000000 --- a/src/en/selfhost-setup/uninstall.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -layout: 'guide' -menu: - selfhost-setup_docs_menu: - identifier: selfhost-setup-uninstall - name: Uninstall - weight: 20 -menu_name: selfhost-setup_docs_menu -section_menu: selfhost-setup ---- - -# Uninstall diff --git a/src/en/welcome/index.md b/src/en/welcome/index.md deleted file mode 100644 index 444de19..0000000 --- a/src/en/welcome/index.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -layout: guide -menu: - welcome_docs_menu: {} - section_menu: - identifier: welcome - name: Welcome - weight: 10 -menu_name: welcome_docs_menu -section_menu: welcome ---- - - -# Welcome - -From here you can learn all about our Cloud Platform and how to use it. - -- [Overview](/en/overview). Overview explains what Appscode Cloud Platform is. -- [Setup](/en/selfhost-setup/). Setup contains instructions for using the platform. diff --git a/src/index.md b/src/index.md deleted file mode 100644 index d6dcad6..0000000 --- a/src/index.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -layout: home -lang: en -menu_name: home_menu ---- - - - - diff --git a/src/public/images/404/404-bg.png b/src/public/images/404/404-bg.png deleted file mode 100644 index 38142421901bc724326765e6144da66fa534bad9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72111 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

#Lytnv0;k26!>Yz_D&lzGCe0FXv*d~ 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%0AQ5 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 wDIqcw&?nv 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 Zvv}@60_~<_7Z?QmD9WnJR7jbH{vV6*5P|>z diff --git a/src/public/images/pattern-squire.png b/src/public/images/pattern-squire.png deleted file mode 100644 index 73d1652c478f3f912fd23058b2fbecfb3bea88ce..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 461 zcmeAS@N?(olHy`uVBq!ia0vp^g&@qq1|%QV`CI@}oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBxg<{)$B+ufw>LNDG8>ApI?l^+CplQL$!0wq1H~YnU?wQ^D_x}6s2g$K%2iE8QmSsO1{r&k}|NEaSZRXe8Uw@q| zv*CZz_vd%~ryo2nZ0K-=L6F&nM*xFye89S)toPT|4J;hM&}Z;;^>bP0l+XkKoaK%a diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index b23925d..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "extends": ["@vue/tsconfig/tsconfig.dom.json", "@tsconfig/node22/tsconfig.json"], - "compilerOptions": { - "composite": true, - "module": "ESNext", - "moduleResolution": "Bundler", - "esModuleInterop": true, - "lib": ["ES2022", "DOM", "DOM.Iterable"], - "baseUrl": ".", - "target": "ESNext", - "types": [ - "unplugin-icons/types/vue", - "vite/client" - ], - "paths": { - "@/*": ["./src/*"] - } - }, - "include": ["shims-vue.d.ts", "src/**/*", ".vitepress/**/*"] -} From caf53e35f457d21a8a9f461010b324414a7b7ff5 Mon Sep 17 00:00:00 2001 From: Tamal Saha Date: Mon, 20 Apr 2026 14:10:59 +0600 Subject: [PATCH 02/19] ACE -> KubeDB Platform (#119) Signed-off-by: Tamal Saha --- .github/workflows/ci.yml | 50 ------------------- .../account-management/delete-account.md | 2 +- .../kubernetes/credentials.md | 2 +- .../add-cluster/import-rancher-cluster.md | 6 +-- .../add-cluster/import-vendor-managed.md | 10 ++-- .../add-cluster/overview.md | 12 ++--- .../self-managed/import-private.md | 12 ++--- .../add-cluster/self-managed/import-public.md | 14 +++--- .../self-managed/import-self-managed.md | 4 +- .../cluster-management/cluster-helm-charts.md | 10 ++-- .../cluster-management/cluster-sidebar.md | 2 +- .../cluster-management/cluster-workload.md | 6 +-- .../cluster-management/remove-cluster.md | 8 +-- .../backup-configuration.md | 2 +- .../database-management/backup-storage.md | 2 +- .../database-management/create-database.md | 2 +- .../database-usage-insight.md | 2 +- .../database-management/delete-database.md | 2 +- .../guides/database-management/repository.md | 2 +- .../guides/database-management/restore.md | 2 +- .../guides/database-management/snapshot.md | 2 +- .../guides/get-started/add-cluster.md | 6 +-- .../guides/get-started/add-credential.md | 4 +- .../guides/get-started/enable-features.md | 4 +- .../guides/get-started/register-login.md | 4 +- docs/platform/selfhost-setup/README.md | 4 +- .../selfhost-setup/install/aws-marketplace.md | 8 +-- .../install/azure-marketplace.md | 8 +-- .../selfhost-setup/install/cloud-demo.md | 12 ++--- .../selfhost-setup/install/k8s-app-demo.md | 12 ++--- .../selfhost-setup/install/onprem-demo.md | 12 ++--- .../selfhost-setup/install/openshift-demo.md | 10 ++-- .../install/selfhosted-production.md | 10 ++-- 33 files changed, 99 insertions(+), 149 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4c40825..bba1ee8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,12 +45,6 @@ jobs: chmod +x liche sudo mv liche /usr/local/bin/liche - - name: Install codespan schema checker - run: | - curl -fsSL -o codespan-schema-checker https://github.com/kmodules/codespan-schema-checker/releases/latest/download/codespan-schema-checker-linux-amd64 - chmod +x codespan-schema-checker - sudo mv codespan-schema-checker /usr/local/bin/codespan-schema-checker - - name: Create Kubernetes cluster id: kind uses: engineerd/setup-kind@v0.5.0 @@ -66,50 +60,6 @@ jobs: echo echo "install helm 3" curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash - echo "install kubedb-crds chart" - helm repo add appscode https://charts.appscode.com/stable/ - helm repo update - # helm install kubedb-crds appscode/kubedb-crds - # helm install kmodules-crds appscode/kmodules-crds - kubectl create -f https://github.com/cert-manager/cert-manager/releases/download/v1.11.0/cert-manager.crds.yaml - kubectl create -f https://github.com/prometheus-operator/prometheus-operator/releases/download/v0.75.0/stripped-down-crds.yaml - kubectl create -f https://github.com/kmodules/custom-resources/raw/release-1.25/crds/appcatalog.appscode.com_appbindings.yaml - kubectl create -f https://github.com/kmodules/custom-resources/raw/release-1.25/crds/metrics.appscode.com_metricsconfigurations.yaml - kubectl create -f https://github.com/stashed/installer/raw/master/crds/stash-crds.yaml - kubectl create -f https://github.com/kubevault/installer/raw/master/crds/kubevault-crds.yaml - kubectl create -f https://github.com/kubedb/installer/raw/master/crds/kubedb-crds.yaml - kubectl create -f https://github.com/kubernetes-csi/external-snapshotter/raw/master/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml - kubectl create -f https://github.com/kubestash/installer/raw/master/crds/kubestash-crds.yaml - kubectl create -f https://github.com/appscode-cloud/catalog/raw/master/crds/catalog.appscode.com_mongodbbindings.yaml - kubectl create -f https://raw.githubusercontent.com/envoyproxy/gateway/refs/heads/main/charts/gateway-helm/charts/crds/crds/generated/gateway.envoyproxy.io_envoyproxies.yaml - kubectl create -f https://github.com/voyagermesh/installer/raw/master/charts/gateway-api/crds/gateway.networking.k8s.io_gatewayclasses.yaml - kubectl create -f https://github.com/fluxcd/helm-controller/raw/main/config/crd/bases/helm.toolkit.fluxcd.io_helmreleases.yaml - kubectl create -f https://github.com/fluxcd/source-controller/raw/main/config/crd/bases/source.toolkit.fluxcd.io_helmrepositories.yaml - kubectl create -f https://github.com/appscode-cloud/catalog/raw/master/crds/catalog.appscode.com_redisbindings.yaml - # distributed crds - kubectl create -f https://github.com/kube-slice/apis/raw/release-v2025.7.31/crd/controller.kubeslice.io_clusters.yaml - kubectl create -f https://github.com/kube-slice/apis/raw/release-v2025.7.31/crd/controller.kubeslice.io_projects.yaml - kubectl create -f https://github.com/kube-slice/apis/raw/release-v2025.7.31/crd/controller.kubeslice.io_sliceconfigs.yaml - kubectl create -f https://github.com/kubeops/petset/raw/master/crds/apps.k8s.appscode.com_placementpolicies.yaml - kubectl create -f https://github.com/open-cluster-management-io/api/raw/main/operator/v1/0000_00_operator.open-cluster-management.io_klusterlets.crd.yaml - kubectl create -f https://raw.githubusercontent.com/open-cluster-management-io/api/refs/heads/main/addon/v1alpha1/0000_01_addon.open-cluster-management.io_managedclusteraddons.crd.yaml - # virtual-secrets crds - kubectl create -f https://raw.githubusercontent.com/kubernetes-sigs/secrets-store-csi-driver/refs/heads/main/charts/secrets-store-csi-driver/crds/secrets-store.csi.x-k8s.io_secretproviderclasses.yaml - kubectl create -f https://raw.githubusercontent.com/virtual-secrets/apimachinery/refs/heads/master/crds/config.virtual-secrets.dev_secretmetadatas.yaml - kubectl create -f https://raw.githubusercontent.com/virtual-secrets/apimachinery/refs/heads/master/crds/config.virtual-secrets.dev_secretstores.yaml - kubectl create -f https://raw.githubusercontent.com/virtual-secrets/apimachinery/refs/heads/master/crds/virtual-secrets.dev_secretmounts.yaml - kubectl create -f https://raw.githubusercontent.com/virtual-secrets/apimachinery/refs/heads/master/crds/virtual-secrets.dev_secrets.yaml - - - name: Check codespan schema - run: | - git clone https://github.com/kubedb/installer.git - cd installer - git checkout $(git describe --tags --abbrev=0 2>/dev/null || echo master) - cd .. - git clone https://github.com/kmodules/resource-metadata.git - mv resource-metadata/hub /tmp - rm -rf resource-metadata - codespan-schema-checker --kubedb-catalog-dir=./installer/catalog/kubedb --content=./docs - name: Check links run: | diff --git a/docs/platform/guides/account-management/delete-account.md b/docs/platform/guides/account-management/delete-account.md index dbad1cc..2692534 100644 --- a/docs/platform/guides/account-management/delete-account.md +++ b/docs/platform/guides/account-management/delete-account.md @@ -15,7 +15,7 @@ section_menu_id: guides ![Delete Account](../images/delete-account.png) -This guide provides step-by-step instructions for permanently removing your personal account from the AppsCode platform. +This guide provides step-by-step instructions for permanently removing your personal account from the KubeDB Platform. 1. **Navigate to Account Settings:** - Log in to your account. diff --git a/docs/platform/guides/account-management/kubernetes/credentials.md b/docs/platform/guides/account-management/kubernetes/credentials.md index 4f44777..5bd9c67 100644 --- a/docs/platform/guides/account-management/kubernetes/credentials.md +++ b/docs/platform/guides/account-management/kubernetes/credentials.md @@ -34,7 +34,7 @@ Visit https://home.appscode.com/user/settings/credentials to manage credential. ## AWS -To create or import EKS clusters to [AppsCode Dashboard](https://console.appscode.com/), you need to create a access-key with the following policies. +To create or import EKS clusters to [Platform Console](https://console.appscode.com/), you need to create a access-key with the following policies. - AmazonEC2FullAccess (AWS Managed Policy) - AWSCloudFormationFullAccess (AWS Managed Policy) - EKSAllAccess diff --git a/docs/platform/guides/cluster-management/add-cluster/import-rancher-cluster.md b/docs/platform/guides/cluster-management/add-cluster/import-rancher-cluster.md index 1f4b3b6..738760a 100644 --- a/docs/platform/guides/cluster-management/add-cluster/import-rancher-cluster.md +++ b/docs/platform/guides/cluster-management/add-cluster/import-rancher-cluster.md @@ -11,9 +11,9 @@ section_menu_id: guides --- -# Adding a Rancher Managed Cluster to AppsCode Dashboard +# Adding a Rancher Managed Cluster to Platform Console -Adding a `Rancher-Managed` cluster to the AppsCode Dashboard involves a slightly different process. In order to import a `Rancher-Managed` cluster to the AppsCode Dashboard, you need to create a Rancher Managed Organization and a Rancher Type Credential. +Adding a `Rancher-Managed` cluster to the Platform Console involves a slightly different process. In order to import a `Rancher-Managed` cluster to the Platform Console, you need to create a Rancher Managed Organization and a Rancher Type Credential. ## Create Rancher Type Credential @@ -29,7 +29,7 @@ Unlike personal accounts, Rancher clusters are associated with Rancher Managed o ## Import the Cluster -Before importing a Rancher Managed cluster into the AppsCode Dashboard, you must switch to the Rancher organization. Follow these steps: +Before importing a Rancher Managed cluster into the Platform Console, you must switch to the Rancher organization. Follow these steps: 1. Go to [AppsCode Console](https://console.appscode.com). 2. Click on the Profile Icon or username. diff --git a/docs/platform/guides/cluster-management/add-cluster/import-vendor-managed.md b/docs/platform/guides/cluster-management/add-cluster/import-vendor-managed.md index b531e37..316d225 100644 --- a/docs/platform/guides/cluster-management/add-cluster/import-vendor-managed.md +++ b/docs/platform/guides/cluster-management/add-cluster/import-vendor-managed.md @@ -11,11 +11,11 @@ section_menu_id: guides --- -# Adding a Vendor-Managed Cluster to AppsCode Dashboard +# Adding a Vendor-Managed Cluster to Platform Console -Enhance your AppsCode experience by seamlessly connecting your vendor-managed Kubernetes cluster to the [AppsCode Dashboard](https://console.appscode.com/). Follow these step-by-step instructions: +Enhance your platform experience by seamlessly connecting your vendor-managed Kubernetes cluster to the [Platform Console](https://console.appscode.com/). Follow these step-by-step instructions: -1. Visit [AppsCode Dashboard](https://console.appscode.com/). +1. Visit [Platform Console](https://console.appscode.com/). 2. Click on the `Add Cluster` button. ### Choose Provider @@ -37,9 +37,9 @@ Enhance your AppsCode experience by seamlessly connecting your vendor-managed Ku ### Customize Feature and Import -7. Complete the process by clicking `Import` to bring the selected cluster into the AppsCode Dashboard. +7. Complete the process by clicking `Import` to bring the selected cluster into the Platform Console. ### Explore 8. Once imported, explore the cluster's details and capabilities within the dashboard. -By following these steps, you'll seamlessly integrate your vendor-managed Kubernetes cluster, unlocking its full potential within the AppsCode environment. Feel free to refer back to this tutorial for guidance. \ No newline at end of file +By following these steps, you'll seamlessly integrate your vendor-managed Kubernetes cluster, unlocking its full potential within the platform. Feel free to refer back to this tutorial for guidance. \ No newline at end of file diff --git a/docs/platform/guides/cluster-management/add-cluster/overview.md b/docs/platform/guides/cluster-management/add-cluster/overview.md index bb66233..9f5c414 100644 --- a/docs/platform/guides/cluster-management/add-cluster/overview.md +++ b/docs/platform/guides/cluster-management/add-cluster/overview.md @@ -10,9 +10,9 @@ menu_name: docsplatform_{{.version}} section_menu_id: guides --- -# Adding a Cluster to AppsCode Dashboard +# Adding a Cluster to Platform Console -Integrating your Kubernetes cluster, whether it's vendor-managed or self-managed, into the AppsCode dashboard is a simple process that elevates your cluster management experience. +Integrating your Kubernetes cluster, whether it's vendor-managed or self-managed, into the platform console is a simple process that elevates your cluster management experience. The procedure consists of two primary steps: @@ -20,18 +20,18 @@ The procedure consists of two primary steps: #### For Vendor-Managed Clusters -To include Vendor-Managed clusters in the AppsCode dashboard, follow the steps outlined in [Import Vendor Managed Clusters](import-vendor-managed.md). +To include Vendor-Managed clusters in the platform console, follow the steps outlined in [Import Vendor Managed Clusters](import-vendor-managed.md). For Rancher Managed cluster, refer to [Import Rancher Managed Clusters](import-rancher-cluster.md) documentation. #### For Self-Managed Clusters -If you have a self-managed Kubernetes cluster, refer to [Import Self-Managed Clusters](self-managed/import-self-managed.md) for detailed instructions on adding it to the AppsCode dashboard. +If you have a self-managed Kubernetes cluster, refer to [Import Self-Managed Clusters](self-managed/import-self-managed.md) for detailed instructions on adding it to the platform console. ## Step 2: Feature Customization -Following the successful addition of your cluster, the next step involves customizing features to be installed during the cluster import process into our system. This ensures a seamless integration and optimizes the functionality of your cluster within the AppsCode environment. +Following the successful addition of your cluster, the next step involves customizing features to be installed during the cluster import process into our system. This ensures a seamless integration and optimizes the functionality of your cluster within the platform. -Explore your cluster further and leverage the full capabilities of the AppsCode dashboard. +Explore your cluster further and leverage the full capabilities of the platform console. Feel free to refer to the comprehensive documents linked above for a detailed walkthrough of each step in the process. \ No newline at end of file diff --git a/docs/platform/guides/cluster-management/add-cluster/self-managed/import-private.md b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-private.md index e80ecac..5314a07 100644 --- a/docs/platform/guides/cluster-management/add-cluster/self-managed/import-private.md +++ b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-private.md @@ -11,11 +11,11 @@ section_menu_id: guides --- -# Adding a Private Self-Managed Cluster to AppsCode Dashboard +# Adding a Private Self-Managed Cluster to Platform Console -Optimize your AppsCode experience by seamlessly connecting your private or air-gapped self-managed Kubernetes cluster to the AppsCode Dashboard. Follow these detailed steps for a smooth integration process: +Optimize your platform experience by seamlessly connecting your private or air-gapped self-managed Kubernetes cluster to the Platform Console. Follow these detailed steps for a smooth integration process: -1. Navigate to the [AppsCode Dashboard](https://console.appscode.com/). +1. Navigate to the [Platform Console](https://console.appscode.com/). 2. Click on the `Add Cluster` button to initiate the integration. ### Cluster Type Selection - Private @@ -28,11 +28,11 @@ Optimize your AppsCode experience by seamlessly connecting your private or air-g ### Feature Customization -5. After completion, the UI will automatically transition to the feature customization step, optimizing your cluster's capabilities within the AppsCode environment. +5. After completion, the UI will automatically transition to the feature customization step, optimizing your cluster's capabilities within the platform. ### Explore -6. Once imported, explore the cluster's details and capabilities within the AppsCode Dashboard. +6. Once imported, explore the cluster's details and capabilities within the Platform Console. -By following these steps, you'll seamlessly integrate your private or air-gapped self-managed Kubernetes cluster, unlocking its full potential within the AppsCode environment. Feel free to refer back to this tutorial for guidance. +By following these steps, you'll seamlessly integrate your private or air-gapped self-managed Kubernetes cluster, unlocking its full potential within the platform. Feel free to refer back to this tutorial for guidance. diff --git a/docs/platform/guides/cluster-management/add-cluster/self-managed/import-public.md b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-public.md index 6e3d7e2..1db6d9f 100644 --- a/docs/platform/guides/cluster-management/add-cluster/self-managed/import-public.md +++ b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-public.md @@ -11,11 +11,11 @@ section_menu_id: guides --- -# Adding a Public Self-Managed Cluster to AppsCode Dashboard +# Adding a Public Self-Managed Cluster to Platform Console -Elevate your Kubernetes cluster management with AppsCode Dashboard by seamlessly integrating your public self-managed Kubernetes cluster. Follow these detailed steps for a smooth integration process: +Elevate your Kubernetes cluster management with Platform Console by seamlessly integrating your public self-managed Kubernetes cluster. Follow these detailed steps for a smooth integration process: -1. Navigate to the [AppsCode Dashboard](https://console.appscode.com/). +1. Navigate to the [Platform Console](https://console.appscode.com/). 2. Click on the `Add Cluster` button to initiate the integration. ### Cluster Type Selection - Public @@ -24,15 +24,15 @@ Elevate your Kubernetes cluster management with AppsCode Dashboard by seamlessly ### Provide Public Kubeconfig -4. Provide the public kubeconfig for your Kubernetes cluster. This file contains essential information for establishing a connection between your cluster and the AppsCode Dashboard. +4. Provide the public kubeconfig for your Kubernetes cluster. This file contains essential information for establishing a connection between your cluster and the Platform Console. ### Feature Customization -5. Proceed seamlessly to the feature customization step, enhancing your cluster's capabilities within the AppsCode environment. +5. Proceed seamlessly to the feature customization step, enhancing your cluster's capabilities within the platform. ### Explore -6. Once imported, explore the cluster's details and capabilities within the AppsCode Dashboard. +6. Once imported, explore the cluster's details and capabilities within the Platform Console. -By following these steps, you'll effortlessly integrate your public self-managed Kubernetes cluster, unlocking its full potential within the AppsCode environment. Feel free to refer back to this tutorial for guidance. +By following these steps, you'll effortlessly integrate your public self-managed Kubernetes cluster, unlocking its full potential within the platform. Feel free to refer back to this tutorial for guidance. diff --git a/docs/platform/guides/cluster-management/add-cluster/self-managed/import-self-managed.md b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-self-managed.md index c3d3280..b559783 100644 --- a/docs/platform/guides/cluster-management/add-cluster/self-managed/import-self-managed.md +++ b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-self-managed.md @@ -10,9 +10,9 @@ menu_name: docsplatform_{{.version}} section_menu_id: guides --- -# Adding a Self-Managed Cluster to AppsCode Dashboard +# Adding a Self-Managed Cluster to Platform Console -If you possess a kubeconfig for either a public Kubernetes cluster or an air-gapped cluster, categorically referred to as self-managed clusters, here are the guides to seamlessly import these clusters into the AppsCode Dashboard: +If you possess a kubeconfig for either a public Kubernetes cluster or an air-gapped cluster, categorically referred to as self-managed clusters, here are the guides to seamlessly import these clusters into the Platform Console:

diff --git a/docs/platform/guides/cluster-management/cluster-helm-charts.md b/docs/platform/guides/cluster-management/cluster-helm-charts.md index 0545b86..1c17a35 100644 --- a/docs/platform/guides/cluster-management/cluster-helm-charts.md +++ b/docs/platform/guides/cluster-management/cluster-helm-charts.md @@ -11,15 +11,15 @@ section_menu_id: guides --- -# Manage Helm Charts in AppsCode Dashboard +# Manage Helm Charts in Platform Console -AppsCode Dashboard offers a robust Helm Chart Management feature, allowing users to effortlessly manage Helm releases within their Kubernetes clusters. This functionality streamlines the installation of new charts, interaction with existing releases, and provides an overall intuitive interface for Helm chart management. +Platform Console offers a robust Helm Chart Management feature, allowing users to effortlessly manage Helm releases within their Kubernetes clusters. This functionality streamlines the installation of new charts, interaction with existing releases, and provides an overall intuitive interface for Helm chart management. ## Accessing Helm Chart Management To navigate to the Helm Chart Management page: -1. From the [AppsCode Dashboard](https://console.appscode.com), click on your imported cluster to go to the Cluster Overview page. +1. From the [Platform Console](https://console.appscode.com), click on your imported cluster to go to the Cluster Overview page. 2. In the left sidebar, under **Helm**, select **Releases** to access the Helm Chart Management page. ## Helm Chart Management Features @@ -41,6 +41,6 @@ Efficiently manage existing Helm releases: ### User-Friendly Interface -The Helm Chart Management page in the AppsCode Dashboard ensures an intuitive and user-friendly interface. This allows users to manage Helm releases seamlessly, minimizing the reliance on complex Helm CLI commands. +The Helm Chart Management page in the Platform Console ensures an intuitive and user-friendly interface. This allows users to manage Helm releases seamlessly, minimizing the reliance on complex Helm CLI commands. -Explore the power of Helm chart management within the AppsCode Dashboard and enhance your Kubernetes experience. +Explore the power of Helm chart management within the Platform Console and enhance your Kubernetes experience. diff --git a/docs/platform/guides/cluster-management/cluster-sidebar.md b/docs/platform/guides/cluster-management/cluster-sidebar.md index c67d138..e2e545c 100644 --- a/docs/platform/guides/cluster-management/cluster-sidebar.md +++ b/docs/platform/guides/cluster-management/cluster-sidebar.md @@ -18,7 +18,7 @@ The **Cluster Sidebar** is your primary navigation panel inside a connected clus ## Step 1 — Open the Cluster Overview -From the AppsCode console, click on your cluster (e.g., `default`) to open the **Cluster Overview** page. The left sidebar shows the default set of sections: **Kubernetes**, **Workloads**, **Helm**, **Datastore**, **Service & Discovery**, **Config**, **Storage**, **Monitoring**, **Security**, and **Admin**. +From the platform console, click on your cluster (e.g., `default`) to open the **Cluster Overview** page. The left sidebar shows the default set of sections: **Kubernetes**, **Workloads**, **Helm**, **Datastore**, **Service & Discovery**, **Config**, **Storage**, **Monitoring**, **Security**, and **Admin**. ![The default Cluster Overview page with the default sidebar navigation](../images/cluster-sidebar/sidebar-before-update.png) diff --git a/docs/platform/guides/cluster-management/cluster-workload.md b/docs/platform/guides/cluster-management/cluster-workload.md index 3c39018..de00108 100644 --- a/docs/platform/guides/cluster-management/cluster-workload.md +++ b/docs/platform/guides/cluster-management/cluster-workload.md @@ -13,9 +13,9 @@ section_menu_id: guides # Kubernetes Workload Management -The Kubernetes Workload Management section in the AppsCode Dashboard offers robust capabilities for managing Kubernetes resources. Follow these steps to leverage this functionality: +The Kubernetes Workload Management section in the Platform Console offers robust capabilities for managing Kubernetes resources. Follow these steps to leverage this functionality: -1. Navigate to the [AppsCode Dashboard](https://console.appscode.com). +1. Navigate to the [Platform Console](https://console.appscode.com). 2. Click on your imported cluster to access the Cluster Overview page. ## Cluster Overview Page @@ -98,4 +98,4 @@ The `Datastore` section is dedicated to KubeDB, an AppsCode product, providing m You can also create new resources directly from any resource list page by clicking the `➕ Create` button, filling out the form, and submitting to create the resource. -Explore the power of Kubernetes workload management in the AppsCode Dashboard for a seamless and efficient experience. +Explore the power of Kubernetes workload management in the Platform Console for a seamless and efficient experience. diff --git a/docs/platform/guides/cluster-management/remove-cluster.md b/docs/platform/guides/cluster-management/remove-cluster.md index bb91ee6..4835875 100644 --- a/docs/platform/guides/cluster-management/remove-cluster.md +++ b/docs/platform/guides/cluster-management/remove-cluster.md @@ -13,10 +13,10 @@ section_menu_id: guides # Remove / Delete Cluster -Removing an already imported cluster from the AppsCode Dashboard is a straightforward process, and you can also manage associated features during removal. Follow these steps to seamlessly remove a cluster: +Removing an already imported cluster from the Platform Console is a straightforward process, and you can also manage associated features during removal. Follow these steps to seamlessly remove a cluster: 1. **Navigate to the Cluster Overview Page:** - - Go to the [AppsCode Dashboard](https://console.appscode.com). + - Go to the [Platform Console](https://console.appscode.com). - Click on your imported cluster to access the Cluster Overview page. **OR** @@ -31,9 +31,9 @@ Removing an already imported cluster from the AppsCode Dashboard is a straightfo 4. **Manage Features:** - During the removal process, you have the option to disable features associated with the cluster. - - Utilize this feature to tailor your AppsCode Dashboard environment based on your evolving requirements. + - Utilize this feature to tailor your Platform Console environment based on your evolving requirements. -This streamlined process ensures efficient cluster management within the AppsCode Dashboard, providing flexibility and control over your Kubernetes clusters. +This streamlined process ensures efficient cluster management within the Platform Console, providing flexibility and control over your Kubernetes clusters. --- diff --git a/docs/platform/guides/database-management/backup-configuration.md b/docs/platform/guides/database-management/backup-configuration.md index fafc59c..799ee67 100644 --- a/docs/platform/guides/database-management/backup-configuration.md +++ b/docs/platform/guides/database-management/backup-configuration.md @@ -13,7 +13,7 @@ section_menu_id: guides # Backup Configuration -This guide explains how to view and create **BackupConfiguration** resources using the AppsCode console. A BackupConfiguration defines a complete backup policy for a database — including the storage backend, retention policy, backup sessions with their schedules and tasks, and the target database to back up. +This guide explains how to view and create **BackupConfiguration** resources using the platform console. A BackupConfiguration defines a complete backup policy for a database — including the storage backend, retention policy, backup sessions with their schedules and tasks, and the target database to back up. --- diff --git a/docs/platform/guides/database-management/backup-storage.md b/docs/platform/guides/database-management/backup-storage.md index 042735b..8fcb100 100644 --- a/docs/platform/guides/database-management/backup-storage.md +++ b/docs/platform/guides/database-management/backup-storage.md @@ -13,7 +13,7 @@ section_menu_id: guides # Backup Storage -This guide explains how to view and create **BackupStorage** resources using the AppsCode console. A BackupStorage defines the storage backend (cloud provider, credentials, bucket, and connection settings) where database backups are stored and can be retrieved for restoration. +This guide explains how to view and create **BackupStorage** resources using the platform console. A BackupStorage defines the storage backend (cloud provider, credentials, bucket, and connection settings) where database backups are stored and can be retrieved for restoration. --- diff --git a/docs/platform/guides/database-management/create-database.md b/docs/platform/guides/database-management/create-database.md index 96d161a..53f050b 100644 --- a/docs/platform/guides/database-management/create-database.md +++ b/docs/platform/guides/database-management/create-database.md @@ -13,7 +13,7 @@ section_menu_id: guides # Creating a Database -This guide explains how to create a new managed database instance using the AppsCode console. The creation process is a multi-step wizard that walks you through selecting a database engine, setting a name and namespace, configuring topology and resources, and enabling optional features like monitoring, TLS, and backups. +This guide explains how to create a new managed database instance using the platform console. The creation process is a multi-step wizard that walks you through selecting a database engine, setting a name and namespace, configuring topology and resources, and enabling optional features like monitoring, TLS, and backups. --- diff --git a/docs/platform/guides/database-management/database-usage-insight.md b/docs/platform/guides/database-management/database-usage-insight.md index 13d05ec..3ae27de 100644 --- a/docs/platform/guides/database-management/database-usage-insight.md +++ b/docs/platform/guides/database-management/database-usage-insight.md @@ -13,7 +13,7 @@ section_menu_id: guides # Database Usage & Insights -This guide explains how to use the **Overview**, **Insights**, and **Users** pages available on every database detail page in the AppsCode console. These pages give you a live view of your database's connection details, performance metrics, query analytics, and access control bindings. +This guide explains how to use the **Overview**, **Insights**, and **Users** pages available on every database detail page in the platform console. These pages give you a live view of your database's connection details, performance metrics, query analytics, and access control bindings. --- diff --git a/docs/platform/guides/database-management/delete-database.md b/docs/platform/guides/database-management/delete-database.md index 44ae891..302c798 100644 --- a/docs/platform/guides/database-management/delete-database.md +++ b/docs/platform/guides/database-management/delete-database.md @@ -13,7 +13,7 @@ section_menu_id: guides # Delete Database -This guide explains how to delete a database instance from the AppsCode console. There are two ways to trigger a deletion — from the **Datastore Overview** page (bulk or single) or from inside the **individual database page**. Both methods lead to the same confirmation step. +This guide explains how to delete a database instance from the platform console. There are two ways to trigger a deletion — from the **Datastore Overview** page (bulk or single) or from inside the **individual database page**. Both methods lead to the same confirmation step. > **Warning:** Deleting a database is a permanent and irreversible action. Ensure you have a valid backup before proceeding. diff --git a/docs/platform/guides/database-management/repository.md b/docs/platform/guides/database-management/repository.md index c7bdae9..75deb01 100644 --- a/docs/platform/guides/database-management/repository.md +++ b/docs/platform/guides/database-management/repository.md @@ -13,7 +13,7 @@ section_menu_id: guides # Repository -This guide explains how to view and create **Repository** resources using the AppsCode console. A Repository is the logical backup repository that stores individual snapshots of a database within a BackupStorage backend. It acts as the bridge between BackupConfigurations and the actual cloud storage. +This guide explains how to view and create **Repository** resources using the platform console. A Repository is the logical backup repository that stores individual snapshots of a database within a BackupStorage backend. It acts as the bridge between BackupConfigurations and the actual cloud storage. --- diff --git a/docs/platform/guides/database-management/restore.md b/docs/platform/guides/database-management/restore.md index 62f7adc..4d3c432 100644 --- a/docs/platform/guides/database-management/restore.md +++ b/docs/platform/guides/database-management/restore.md @@ -13,7 +13,7 @@ section_menu_id: guides # Restore -This guide explains how to view and create **Restore** resources using the AppsCode console. A Restore represents a database recovery operation that restores data from a previously captured snapshot or backup to a target database instance. +This guide explains how to view and create **Restore** resources using the platform console. A Restore represents a database recovery operation that restores data from a previously captured snapshot or backup to a target database instance. --- diff --git a/docs/platform/guides/database-management/snapshot.md b/docs/platform/guides/database-management/snapshot.md index 1fbf86b..db531b0 100644 --- a/docs/platform/guides/database-management/snapshot.md +++ b/docs/platform/guides/database-management/snapshot.md @@ -13,7 +13,7 @@ section_menu_id: guides # Snapshot -This guide explains how to view and manage **Snapshot** resources using the AppsCode console. A Snapshot represents a point-in-time backup of a database stored in a backup repository, capturing the complete state of the database at the moment of creation. +This guide explains how to view and manage **Snapshot** resources using the platform console. A Snapshot represents a point-in-time backup of a database stored in a backup repository, capturing the complete state of the database at the moment of creation. --- diff --git a/docs/platform/guides/get-started/add-cluster.md b/docs/platform/guides/get-started/add-cluster.md index d29421c..d162f9f 100644 --- a/docs/platform/guides/get-started/add-cluster.md +++ b/docs/platform/guides/get-started/add-cluster.md @@ -13,11 +13,11 @@ section_menu_id: guides # Add a Kubernetes Cluster -With your credentials in place, it's time to connect your Kubernetes cluster to the AppsCode Dashboard. This step allows AppsCode to seamlessly manage and provide insights into your cluster. +With your credentials in place, it's time to connect your Kubernetes cluster to the Platform Console. This step allows AppsCode to seamlessly manage and provide insights into your cluster. Follow these steps to import your Kubernetes cluster: -1. Visit the [AppsCode Dashboard](https://console.appscode.com/). +1. Visit the [Platform Console](https://console.appscode.com/). 2. Click on the `Add Cluster` button. 3. Choose your cluster type and provider. 4. Select the credentials you added in the previous step. @@ -25,4 +25,4 @@ Follow these steps to import your Kubernetes cluster: For detailed instructions and troubleshooting tips, refer to our comprehensive [Import Kubernetes Cluster Guide](../cluster-management/add-cluster/overview.md). -Once your cluster is imported, you can explore its details and capabilities directly from the AppsCode Dashboard. +Once your cluster is imported, you can explore its details and capabilities directly from the Platform Console. diff --git a/docs/platform/guides/get-started/add-credential.md b/docs/platform/guides/get-started/add-credential.md index 9b8c2a5..7defaf7 100644 --- a/docs/platform/guides/get-started/add-credential.md +++ b/docs/platform/guides/get-started/add-credential.md @@ -13,7 +13,7 @@ section_menu_id: guides # Add Credential -Now that you have successfully registered and logged in to the AppsCode Dashboard, let's take the next step in setting up your environment. The first crucial task is to add credentials for your Kubernetes clusters. This ensures a secure connection and allows AppsCode to seamlessly manage your clusters. +Now that you have successfully registered and logged in to the Platform Console, let's take the next step in setting up your environment. The first crucial task is to add credentials for your Kubernetes clusters. This ensures a secure connection and allows AppsCode to seamlessly manage your clusters. Follow these steps to add your credentials: @@ -23,4 +23,4 @@ Follow these steps to add your credentials: For detailed documentation refer to [Credential Management](../account-management/kubernetes/credentials.md) -After adding your credentials, you'll be ready to import your Kubernetes cluster and unlock a world of possibilities within the AppsCode environment. +After adding your credentials, you'll be ready to import your Kubernetes cluster and unlock a world of possibilities within the platform. diff --git a/docs/platform/guides/get-started/enable-features.md b/docs/platform/guides/get-started/enable-features.md index 4316e6a..78bff21 100644 --- a/docs/platform/guides/get-started/enable-features.md +++ b/docs/platform/guides/get-started/enable-features.md @@ -16,11 +16,11 @@ section_menu_id: guides Once your cluster is imported, you can enable or disable AppsCode features based on your requirements. -1. Navigate to your Cluster Overview page, selecting your imported cluster in the [AppsCode Dashboard](https://console.appscode.com/). +1. Navigate to your Cluster Overview page, selecting your imported cluster in the [Platform Console](https://console.appscode.com/). 2. In the "Feature Sets" section, you'll find a list of FeatureSets associated with your cluster, along with their current status. 3. Click on any FeatureSet in the list to go to the FeatureSet Management page. 4. On the FeatureSet Management page, you can enable or disable specific features according to your needs. -Managing features in the AppsCode Dashboard is a straightforward process that allows you to tailor your AppsCode Dashboard to meet your cluster's requirements. Feel free to explore the features and capabilities offered by AppsCode. +Managing features in the Platform Console is a straightforward process that allows you to tailor your Platform Console to meet your cluster's requirements. Feel free to explore the features and capabilities offered by AppsCode. For more advanced configurations and detailed documentation, check out the [Features in Details](../cluster-management/cluster-features.md). diff --git a/docs/platform/guides/get-started/register-login.md b/docs/platform/guides/get-started/register-login.md index fd5f9a1..78a1b71 100644 --- a/docs/platform/guides/get-started/register-login.md +++ b/docs/platform/guides/get-started/register-login.md @@ -45,8 +45,8 @@ After registration, check your email inbox for a verification email from AppsCod 3. Click on the `Sign In` button. 4. Optionally, you can sign in using your connected External accounts. -### 4. Explore AppsCode Dashboard +### 4. Explore Platform Console -You are now logged in to the AppsCode Dashboard! Take a moment to explore the features and navigate through the dashboard. +You are now logged in to the Platform Console! Take a moment to explore the features and navigate through the dashboard. Congratulations! You have successfully registered, verified your email, and logged in to AppsCode. If you encounter any issues or have questions, refer to the [AppsCode Documentation](https://appscode.com/docs/) for detailed guidance. \ No newline at end of file diff --git a/docs/platform/selfhost-setup/README.md b/docs/platform/selfhost-setup/README.md index be10298..7b2dffa 100644 --- a/docs/platform/selfhost-setup/README.md +++ b/docs/platform/selfhost-setup/README.md @@ -13,9 +13,9 @@ aliases: - /docs/platform/{{.version}}/selfhost-setup/README/ --- -# Host AppsCode Platform as Your Own +# Host KubeDB Platform as Your Own -Welcome to AppsCode Platform's Self-Hosted deployment! Whether you're looking for a quick trial in "Self Hosted Demo" mode or gearing up for a production-ready environment (`Self Hosted Production`), you're in control. +Welcome to KubeDB Platform's Self-Hosted deployment! Whether you're looking for a quick trial in "Self Hosted Demo" mode or gearing up for a production-ready environment (`Self Hosted Production`), you're in control. Navigate to [AppsCode Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers. diff --git a/docs/platform/selfhost-setup/install/aws-marketplace.md b/docs/platform/selfhost-setup/install/aws-marketplace.md index 4acac43..9939c53 100644 --- a/docs/platform/selfhost-setup/install/aws-marketplace.md +++ b/docs/platform/selfhost-setup/install/aws-marketplace.md @@ -10,9 +10,9 @@ menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- -# Deploying AppsCode Platform: AWS Marketplace +# Deploying KubeDB Platform: AWS Marketplace -Welcome to the AppsCode Platform's **AWS Marketplace** deployment! This guide will walk you through the deployment process via the **AWS Marketplace**, ensuring your environment is configured correctly for a seamless installation. +Welcome to the KubeDB Platform's **AWS Marketplace** deployment! This guide will walk you through the deployment process via the **AWS Marketplace**, ensuring your environment is configured correctly for a seamless installation. To install **ACE**, you need to have the permissions to manage **EC2**, **IAM**, **CloudFormation** etc. @@ -305,7 +305,7 @@ Click the "Next" button to submit your information. AppsCode will generate the i You will find an `Installer URL` for this installer. You have to give this URL in the AWS Marketplace application. -### 9. Deploy AppsCode Platform +### 9. Deploy KubeDB Platform The expiry time for this installer is 2 hours. You will find in detail deployment guideline after creating the installer. @@ -518,4 +518,4 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. ### 10. Explore the Deployed Platform -Once deployed, access the **AppsCode Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. \ No newline at end of file +Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. \ No newline at end of file diff --git a/docs/platform/selfhost-setup/install/azure-marketplace.md b/docs/platform/selfhost-setup/install/azure-marketplace.md index 6297f63..a506bca 100644 --- a/docs/platform/selfhost-setup/install/azure-marketplace.md +++ b/docs/platform/selfhost-setup/install/azure-marketplace.md @@ -10,9 +10,9 @@ menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- -# 1. Deploying AppsCode Platform: Azure Marketplace +# 1. Deploying KubeDB Platform: Azure Marketplace -Welcome to the AppsCode Platform's **Azure Marketplace** deployment! This guide will walk you through the deployment process via the Azure Marketplace, ensuring your environment is configured correctly for a seamless installation. +Welcome to the KubeDB Platform's **Azure Marketplace** deployment! This guide will walk you through the deployment process via the Azure Marketplace, ensuring your environment is configured correctly for a seamless installation. ### Prerequisites @@ -126,7 +126,7 @@ Administrators can globally re-brand the Ace interface to match corporate identi Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. -### 10. Deploy AppsCode Platform +### 10. Deploy KubeDB Platform #### Step 1: Create Azure application Go to Azure Marketplace and select AppsCode Cloud w/ Usage Billing application. [AppsCode Cloud w/ Usage Billing from Marketplace](https://portal.azure.com/#create/appscode.ace_paygace-payg) @@ -167,4 +167,4 @@ You can monitor the deployment progress through the **Managed Resource Group's** ### 11. Explore the Deployed Platform -Once deployed, access the **AppsCode Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. \ No newline at end of file +Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. \ No newline at end of file diff --git a/docs/platform/selfhost-setup/install/cloud-demo.md b/docs/platform/selfhost-setup/install/cloud-demo.md index 1e64e5e..32ac1fd 100644 --- a/docs/platform/selfhost-setup/install/cloud-demo.md +++ b/docs/platform/selfhost-setup/install/cloud-demo.md @@ -10,9 +10,9 @@ menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- -# Deploying AppsCode Platform: Cloud Demo +# Deploying KubeDB Platform: Cloud Demo -Welcome to the AppsCode Platform's "Cloud Demo" deployment! Follow these steps to deploy the AppsCode Platform in Cloud Demo mode. +Welcome to the KubeDB Platform's "Cloud Demo" deployment! Follow these steps to deploy the KubeDB Platform in Cloud Demo mode. ### Prerequisites @@ -131,13 +131,13 @@ Administrators can globally re-brand the Ace interface to match corporate identi Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. -### 10. Deploy AppsCode Platform +### 10. Deploy KubeDB Platform -Follow the documentation provided by AppsCode to deploy the AppsCode Platform on your system. +Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your system. ### 11. Explore the Deployed Platform -Once deployed, access the AppsCode Platform using the specified domain. Log in with the admin account credentials provided during the creation process. +Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process.
@@ -146,4 +146,4 @@ Once deployed, access the AppsCode Platform using the specified domain. Log in w If you encounter any challenges during the deployment or have questions, reach out to AppsCode support for assistance. -Congratulations! You have successfully deployed the AppsCode Platform in Cloud Demo mode. Explore the features and capabilities of the platform in your customized environment. +Congratulations! You have successfully deployed the KubeDB Platform in Cloud Demo mode. Explore the features and capabilities of the platform in your customized environment. diff --git a/docs/platform/selfhost-setup/install/k8s-app-demo.md b/docs/platform/selfhost-setup/install/k8s-app-demo.md index 59653b6..9451e4a 100644 --- a/docs/platform/selfhost-setup/install/k8s-app-demo.md +++ b/docs/platform/selfhost-setup/install/k8s-app-demo.md @@ -10,9 +10,9 @@ menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- -# Deploying AppsCode Platform: K8s App Demo +# Deploying KubeDB Platform: K8s App Demo -Welcome to the AppsCode Platform's "K8s App Demo" deployment! Follow these steps to deploy the AppsCode Platform in K8s App Demo mode. +Welcome to the KubeDB Platform's "K8s App Demo" deployment! Follow these steps to deploy the KubeDB Platform in K8s App Demo mode. ### Prerequisites @@ -98,13 +98,13 @@ Administrators can globally re-brand the Ace interface to match corporate identi Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. -### 9. Deploy AppsCode Platform +### 9. Deploy KubeDB Platform -Follow the documentation provided by AppsCode to deploy the AppsCode Platform on your system. +Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your system. ### 10. Explore the Deployed Platform -Once deployed, access the AppsCode Platform using the specified domain. Log in with the admin account credentials provided during the creation process. +Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process.
@@ -113,4 +113,4 @@ Once deployed, access the AppsCode Platform using the specified domain. Log in w If you encounter any challenges during the deployment or have questions, reach out to AppsCode support for assistance. -Congratulations! You have successfully deployed the AppsCode Platform in K8s App Demo mode. Explore the features and capabilities of the platform in your customized environment. \ No newline at end of file +Congratulations! You have successfully deployed the KubeDB Platform in K8s App Demo mode. Explore the features and capabilities of the platform in your customized environment. \ No newline at end of file diff --git a/docs/platform/selfhost-setup/install/onprem-demo.md b/docs/platform/selfhost-setup/install/onprem-demo.md index ccf1861..ce15f0d 100644 --- a/docs/platform/selfhost-setup/install/onprem-demo.md +++ b/docs/platform/selfhost-setup/install/onprem-demo.md @@ -10,9 +10,9 @@ menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- -# Deploying AppsCode Platform: Onprem Demo +# Deploying KubeDB Platform: Onprem Demo -Welcome to the AppsCode Platform's "Onprem Demo" deployment! Follow these steps to deploy the AppsCode Platform in Onprem Demo mode. +Welcome to the KubeDB Platform's "Onprem Demo" deployment! Follow these steps to deploy the KubeDB Platform in Onprem Demo mode. ### Prerequisites @@ -134,13 +134,13 @@ Administrators can globally re-brand the Ace interface to match corporate identi Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. -### 12. Deploy AppsCode Platform +### 12. Deploy KubeDB Platform -Follow the documentation provided by AppsCode to deploy the AppsCode Platform on your system. +Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your system. ### 13. Explore the Deployed Platform -Once deployed, access the AppsCode Platform using the specified domain. Log in with the admin account credentials provided during the creation process. +Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process.
@@ -149,4 +149,4 @@ Once deployed, access the AppsCode Platform using the specified domain. Log in w If you encounter any challenges during the deployment or have questions, reach out to AppsCode support for assistance. -Congratulations! You have successfully deployed the AppsCode Platform in Onprem Demo mode. Explore the features and capabilities of the platform in your customized environment. +Congratulations! You have successfully deployed the KubeDB Platform in Onprem Demo mode. Explore the features and capabilities of the platform in your customized environment. diff --git a/docs/platform/selfhost-setup/install/openshift-demo.md b/docs/platform/selfhost-setup/install/openshift-demo.md index e3dce1f..eb0766e 100644 --- a/docs/platform/selfhost-setup/install/openshift-demo.md +++ b/docs/platform/selfhost-setup/install/openshift-demo.md @@ -10,9 +10,9 @@ menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- -# Deploying AppsCode Platform: Open Shift Demo +# Deploying KubeDB Platform: Open Shift Demo -Welcome to the AppsCode Platform's **Open Shift Demo** deployment! In this mode, you have the flexibility to customize various aspects of the deployment to meet the specific requirements of your production environment. +Welcome to the KubeDB Platform's **Open Shift Demo** deployment! In this mode, you have the flexibility to customize various aspects of the deployment to meet the specific requirements of your production environment. ### Prerequisites @@ -131,10 +131,10 @@ Administrators can globally re-brand the Ace interface to match corporate identi Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. -### 12. Deploy AppsCode Platform +### 12. Deploy KubeDB Platform -Follow the documentation provided by AppsCode to deploy the AppsCode Platform on your system. +Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your system. ### 13. Explore the Deployed Platform -Once deployed, access the **AppsCode Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. \ No newline at end of file +Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. \ No newline at end of file diff --git a/docs/platform/selfhost-setup/install/selfhosted-production.md b/docs/platform/selfhost-setup/install/selfhosted-production.md index da1cd08..453313c 100644 --- a/docs/platform/selfhost-setup/install/selfhosted-production.md +++ b/docs/platform/selfhost-setup/install/selfhosted-production.md @@ -10,9 +10,9 @@ menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- -# Deploying AppsCode Platform: Self Hosted Production +# Deploying KubeDB Platform: Self Hosted Production -Welcome to the **Self-Hosted Production** deployment guide for the **AppsCode Platform**. This installation mode is designed for environments requiring high levels of customization and granular control. +Welcome to the **Self-Hosted Production** deployment guide for the **KubeDB Platform**. This installation mode is designed for environments requiring high levels of customization and granular control. By following this walkthrough, you can tailor the deployment to meet your specific production requirements while ensuring a stable and optimized installation. @@ -314,13 +314,13 @@ Administrators can globally re-brand the Ace interface to match corporate identi Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. -### 13. Deploy AppsCode Platform +### 13. Deploy KubeDB Platform -Follow the documentation provided by AppsCode to deploy the AppsCode Platform on your system. +Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your system. ### 14. Explore the Deployed Platform -Once deployed, access the **AppsCode Platform** using the specified domain. Log in with the admin account credentials provided during the creation process.After the login process you will see the **ACE dashboard** user interface +Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process.After the login process you will see the **ACE dashboard** user interface
\ No newline at end of file From 4bad7acaede3fa46b7b06b7d87e674c759892aae Mon Sep 17 00:00:00 2001 From: Samiul Islam Date: Sun, 10 May 2026 20:09:01 +0600 Subject: [PATCH 03/19] Add docs for alertmanager email + generic webhook config (#121) Signed-off-by: sami --- .../images/monitoring-alertmanager.png | Bin 0 -> 32582 bytes .../selfhost-setup/install/aws-marketplace.md | 35 +++++++++++--- .../install/azure-marketplace.md | 37 ++++++++++++--- .../selfhost-setup/install/cloud-demo.md | 38 ++++++++++++---- .../selfhost-setup/install/k8s-app-demo.md | 37 ++++++++++++--- .../selfhost-setup/install/onprem-demo.md | 41 +++++++++++++---- .../selfhost-setup/install/openshift-demo.md | 43 ++++++++++++++---- .../install/selfhosted-production.md | 43 +++++++++++++----- 8 files changed, 216 insertions(+), 58 deletions(-) create mode 100644 docs/platform/selfhost-setup/images/monitoring-alertmanager.png diff --git a/docs/platform/selfhost-setup/images/monitoring-alertmanager.png b/docs/platform/selfhost-setup/images/monitoring-alertmanager.png new file mode 100644 index 0000000000000000000000000000000000000000..9031a62914519cc0feb15f9e739bd93f7c5be704 GIT binary patch literal 32582 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
4dlX%(3;Gl5Hc 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 bPmr|c2#MIM`>ViX8?I^IxP;TN2;BZ}eqH#7 literal 0 HcmV?d00001 diff --git a/docs/platform/selfhost-setup/install/aws-marketplace.md b/docs/platform/selfhost-setup/install/aws-marketplace.md index 9939c53..2bef80d 100644 --- a/docs/platform/selfhost-setup/install/aws-marketplace.md +++ b/docs/platform/selfhost-setup/install/aws-marketplace.md @@ -277,19 +277,42 @@ If using private or authenticated registries, provide: * **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. * **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry +### 5. Monitoring + +Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. + +* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. + * **Enable Email:** Turns email notifications on or off. + * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. + * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. + * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. + * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. + * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. + * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. +* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. + * **Enable Webhook:** Turns webhook delivery on or off. + * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. -### 5. Settings +
+ + +> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. + + +### 6. Settings #### Domain White List * You must specify the end users domains, the system will only allow users with those specified domains. You can Add multiple domain whitelists at the same time. * Put Login and Logout URL -### 6. Self Management +### 7. Self Management In this section you can enable or disable features. You can also create an initial `CAPI Cluster` from this section. -### 7. Branding & UI Customization +### 8. Branding & UI Customization Administrators can globally re-brand the Ace interface to match corporate identity. * **App Name:** Changes the browser tab title. @@ -299,13 +322,13 @@ Administrators can globally re-brand the Ace interface to match corporate identi * **Favicon:** Upload a 20KB icon file. * **App Tag:** Toggle **"Show App Tag"** to display or hide the version/tagging info in the UI. -### 8. Generate Installer and Documentation +### 9. Generate Installer and Documentation Click the "Next" button to submit your information. AppsCode will generate the installer and provide the necessary documentation and further installation guideline in details. You will find an `Installer URL` for this installer. You have to give this URL in the AWS Marketplace application. -### 9. Deploy KubeDB Platform +### 10. Deploy KubeDB Platform The expiry time for this installer is 2 hours. You will find in detail deployment guideline after creating the installer. @@ -518,4 +541,4 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. ### 10. Explore the Deployed Platform -Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. \ No newline at end of file +Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. diff --git a/docs/platform/selfhost-setup/install/azure-marketplace.md b/docs/platform/selfhost-setup/install/azure-marketplace.md index a506bca..e68683c 100644 --- a/docs/platform/selfhost-setup/install/azure-marketplace.md +++ b/docs/platform/selfhost-setup/install/azure-marketplace.md @@ -95,7 +95,30 @@ If using private or authenticated registries, provide: * **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. * **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry -### 6. Settings +### 6. Monitoring + +Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. + +* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. + * **Enable Email:** Turns email notifications on or off. + * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. + * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. + * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. + * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. + * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. + * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. +* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. + * **Enable Webhook:** Turns webhook delivery on or off. + * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. + +
+ + +> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. + +### 7. Settings #### Domain White List * Add domain one by one for whitelisting @@ -104,11 +127,11 @@ If using private or authenticated registries, provide:
-### 7. Self Management +### 8. Self Management In this section you can enable or disable features. You can also create an initial `CAPI Cluster` from this section. -### 8. Branding & UI Customization +### 9. Branding & UI Customization Administrators can globally re-brand the Ace interface to match corporate identity. @@ -122,11 +145,11 @@ Administrators can globally re-brand the Ace interface to match corporate identi
-### 9. Generate Installer and Documentation +### 10. Generate Installer and Documentation Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. -### 10. Deploy KubeDB Platform +### 11. Deploy KubeDB Platform #### Step 1: Create Azure application Go to Azure Marketplace and select AppsCode Cloud w/ Usage Billing application. [AppsCode Cloud w/ Usage Billing from Marketplace](https://portal.azure.com/#create/appscode.ace_paygace-payg) @@ -165,6 +188,6 @@ You can monitor the deployment progress through the **Managed Resource Group's**
-### 11. Explore the Deployed Platform +### 12. Explore the Deployed Platform -Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. \ No newline at end of file +Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. diff --git a/docs/platform/selfhost-setup/install/cloud-demo.md b/docs/platform/selfhost-setup/install/cloud-demo.md index 32ac1fd..e36929f 100644 --- a/docs/platform/selfhost-setup/install/cloud-demo.md +++ b/docs/platform/selfhost-setup/install/cloud-demo.md @@ -86,8 +86,31 @@ If using private or authenticated registries, provide: * **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. * **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry +### 5. Monitoring + +Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. + +* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. + * **Enable Email:** Turns email notifications on or off. + * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. + * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. + * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. + * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. + * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. + * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. +* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. + * **Enable Webhook:** Turns webhook delivery on or off. + * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. + +
+ + +> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. -### 5. Settings + +### 6. Settings #### Domain White List and Proxy Servers @@ -98,7 +121,7 @@ If using private or authenticated registries, provide:
-### 6. Ingress & Gateway +### 7. Ingress & Gateway Configure how the application is exposed to the internet or your internal network. @@ -107,14 +130,13 @@ Configure how the application is exposed to the internet or your internal networ
- -### 7. Self Management +### 8. Self Management In this section you can enable or disable features
-### 8. Branding & UI Customization +### 9. Branding & UI Customization Administrators can globally re-brand the Ace interface to match corporate identity. * **App Name:** Changes the browser tab title. @@ -127,15 +149,15 @@ Administrators can globally re-brand the Ace interface to match corporate identi
-### 9. Generate Installer and Documentation +### 10. Generate Installer and Documentation Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. -### 10. Deploy KubeDB Platform +### 11. Deploy KubeDB Platform Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your system. -### 11. Explore the Deployed Platform +### 12. Explore the Deployed Platform Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process. diff --git a/docs/platform/selfhost-setup/install/k8s-app-demo.md b/docs/platform/selfhost-setup/install/k8s-app-demo.md index 9451e4a..9e05ac6 100644 --- a/docs/platform/selfhost-setup/install/k8s-app-demo.md +++ b/docs/platform/selfhost-setup/install/k8s-app-demo.md @@ -63,8 +63,31 @@ If using private or authenticated registries, provide: * **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. * **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry +### 5. Monitoring + +Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. + +* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. + * **Enable Email:** Turns email notifications on or off. + * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. + * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. + * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. + * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. + * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. + * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. +* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. + * **Enable Webhook:** Turns webhook delivery on or off. + * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. -### 5. Settings +
+ + +> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. + + +### 6. Settings #### Domain White List and Proxy Servers @@ -75,13 +98,13 @@ If using private or authenticated registries, provide:
-### 6. Self Management +### 7. Self Management In this section you can enable or disable features
-### 7. Branding & UI Customization +### 8. Branding & UI Customization Administrators can globally re-brand the Ace interface to match corporate identity. * **App Name:** Changes the browser tab title. @@ -94,15 +117,15 @@ Administrators can globally re-brand the Ace interface to match corporate identi
-### 8. Generate Installer and Documentation +### 9. Generate Installer and Documentation Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. -### 9. Deploy KubeDB Platform +### 10. Deploy KubeDB Platform Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your system. -### 10. Explore the Deployed Platform +### 11. Explore the Deployed Platform Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process. @@ -113,4 +136,4 @@ Once deployed, access the KubeDB Platform using the specified domain. Log in wit If you encounter any challenges during the deployment or have questions, reach out to AppsCode support for assistance. -Congratulations! You have successfully deployed the KubeDB Platform in K8s App Demo mode. Explore the features and capabilities of the platform in your customized environment. \ No newline at end of file +Congratulations! You have successfully deployed the KubeDB Platform in K8s App Demo mode. Explore the features and capabilities of the platform in your customized environment. diff --git a/docs/platform/selfhost-setup/install/onprem-demo.md b/docs/platform/selfhost-setup/install/onprem-demo.md index ce15f0d..cb55e99 100644 --- a/docs/platform/selfhost-setup/install/onprem-demo.md +++ b/docs/platform/selfhost-setup/install/onprem-demo.md @@ -62,8 +62,31 @@ If using private or authenticated registries, provide: * **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. * **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry +### 5. Monitoring + +Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. + +* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. + * **Enable Email:** Turns email notifications on or off. + * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. + * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. + * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. + * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. + * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. + * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. +* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. + * **Enable Webhook:** Turns webhook delivery on or off. + * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. -### 5. Settings +
+ + +> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. + + +### 6. Settings #### Domain White List and Proxy Servers @@ -74,7 +97,7 @@ If using private or authenticated registries, provide:
-### 6. TLS +### 7. TLS Configure TLS certificates for secure communication. You can choose the Issuer type from the following list. * **External**: Use this if you already have certificates from an external provider. * CA CERT: Paste the Certificate Authority certificate. @@ -85,7 +108,7 @@ Configure TLS certificates for secure communication. You can choose the Issuer t * CA CERT: Paste the internal CA certificate. * CA Key: Paste the internal CA key. -### 7. Ingress & Gateway +### 8. Ingress & Gateway Configure how the application is exposed to the internet or your internal network. @@ -94,7 +117,7 @@ Configure how the application is exposed to the internet or your internal networ
-### 8. NATS +### 9. NATS Configure NATS, which is used as the internal messaging system for the platform. @@ -111,13 +134,13 @@ Configure NATS, which is used as the internal messaging system for the platform.
-### 9. Self Management +### 10. Self Management In this section you can enable or disable features
-### 10. Branding & UI Customization +### 11. Branding & UI Customization Administrators can globally re-brand the Ace interface to match corporate identity. * **App Name:** Changes the browser tab title. @@ -130,15 +153,15 @@ Administrators can globally re-brand the Ace interface to match corporate identi
-### 11. Generate Installer and Documentation +### 12. Generate Installer and Documentation Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. -### 12. Deploy KubeDB Platform +### 13. Deploy KubeDB Platform Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your system. -### 13. Explore the Deployed Platform +### 14. Explore the Deployed Platform Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process. diff --git a/docs/platform/selfhost-setup/install/openshift-demo.md b/docs/platform/selfhost-setup/install/openshift-demo.md index eb0766e..d85ad7b 100644 --- a/docs/platform/selfhost-setup/install/openshift-demo.md +++ b/docs/platform/selfhost-setup/install/openshift-demo.md @@ -60,8 +60,31 @@ If using private or authenticated registries, provide: * **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. * **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry +### 5. Monitoring + +Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. + +* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. + * **Enable Email:** Turns email notifications on or off. + * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. + * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. + * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. + * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. + * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. + * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. +* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. + * **Enable Webhook:** Turns webhook delivery on or off. + * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. -### 5. Settings +
+ + +> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. + + +### 6. Settings #### Domain White List and Proxy Servers * Add domain one by one for whitelisting @@ -71,7 +94,7 @@ If using private or authenticated registries, provide:
-### 6. TLS +### 7. TLS Configure TLS certificates for secure communication. You can choose the Issuer type from the following list. * **External**: Use this if you already have certificates from an external provider. * CA CERT: Paste the Certificate Authority certificate. @@ -82,7 +105,7 @@ Configure TLS certificates for secure communication. You can choose the Issuer t * CA CERT: Paste the internal CA certificate. * CA Key: Paste the internal CA key. -### 7. Ingress & Gateway +### 8. Ingress & Gateway Configure how the application is exposed to the internet or your internal network. * **Ingress & Gateway:** Enable either the **Gateway API** or standard **Ingress**. @@ -91,7 +114,7 @@ Configure how the application is exposed to the internet or your internal networ -### 8. NATS +### 9. NATS Configure NATS, which is used as the internal messaging system for the platform. @@ -108,13 +131,13 @@ Configure NATS, which is used as the internal messaging system for the platform.
-### 9. Self Management +### 10. Self Management In this section you can enable or disable features
-### 10. Branding & UI Customization +### 11. Branding & UI Customization Administrators can globally re-brand the Ace interface to match corporate identity. * **App Name:** Changes the browser tab title. @@ -127,14 +150,14 @@ Administrators can globally re-brand the Ace interface to match corporate identi
-### 11. Generate Installer and Documentation +### 12. Generate Installer and Documentation Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. -### 12. Deploy KubeDB Platform +### 13. Deploy KubeDB Platform Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your system. -### 13. Explore the Deployed Platform +### 14. Explore the Deployed Platform -Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. \ No newline at end of file +Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. diff --git a/docs/platform/selfhost-setup/install/selfhosted-production.md b/docs/platform/selfhost-setup/install/selfhosted-production.md index 453313c..d448cb4 100644 --- a/docs/platform/selfhost-setup/install/selfhosted-production.md +++ b/docs/platform/selfhost-setup/install/selfhosted-production.md @@ -222,7 +222,6 @@ If using private or authenticated registries, provide: * **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. * **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry - ### 6. Settings This secton is for Persistence & Resource Allocation. Properly sizing your resources is critical for production stability. Configure CPU Requests, CPU Limits, Memory Request and Memory Limit for both cache and Database @@ -232,7 +231,6 @@ This secton is for Persistence & Resource Allocation. Properly sizing your resou > [!IMPORTANT] > Ensure your cluster has a **Storage Class** defined to fulfill the PVC requests for both the Cache and the Database. -If SMTP is enabled then put Host, Username, Password and From. You can also enable Send As Plain Text and TLS. #### Domain White List and Proxy Servers @@ -251,7 +249,30 @@ Ace uses **KubeStash** for automated backups and disaster recovery. * **Schedule:** Set the backup frequency using Cron syntax (default: `0 */2 * * *` or every 2 hours). * **Storage Secret:** Select the secret containing credentials for your cloud provider. -### 7. Infra +### 7. Monitoring + +Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. + +* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. + * **Enable Email:** Turns email notifications on or off. + * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. + * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. + * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. + * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. + * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. + * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. +* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. + * **Enable Webhook:** Turns webhook delivery on or off. + * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. + * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. + +
+ + +> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. + +### 8. Infra * **Cloud Services:** Configure your **Provider** (e.g., AWS, GCP, Azure), **Bucket Name**, **Endpoint**, **Region** and **Prefix**. In the **Auth Section** put your `AWS Access Key ID`,`AWS Secret Access Key` and `CA CERT Data` * **StorageClass:** Select your StorageClass in this section @@ -267,7 +288,7 @@ Ace uses **KubeStash** for automated backups and disaster recovery. * **letsencrypt:** Use this for production environments to obtain globally trusted SSL/TLS certificates. * **letsencrypt-staging:** Use this for testing your installation -### 8. Ingress & Gateway +### 9. Ingress & Gateway Configure how the application is exposed to the internet or your internal network. * **Ingress & Gateway:** Enable either the **Gateway API** or standard **Ingress**. @@ -275,7 +296,7 @@ Configure how the application is exposed to the internet or your internal networ
-### 9. NATS +### 10. NATS Configure NATS, which is used as the internal messaging system for the platform. @@ -292,12 +313,12 @@ Configure NATS, which is used as the internal messaging system for the platform.
-### 10. Self Management +### 11. Self Management In this section you can enable or disable features
-### 11. Branding & UI Customization +### 12. Branding & UI Customization Administrators can globally re-brand the Ace interface to match corporate identity. * **App Name:** Changes the browser tab title. @@ -310,17 +331,17 @@ Administrators can globally re-brand the Ace interface to match corporate identi
-### 12. Generate Installer and Documentation +### 13. Generate Installer and Documentation Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. -### 13. Deploy KubeDB Platform +### 14. Deploy KubeDB Platform Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your system. -### 14. Explore the Deployed Platform +### 15. Explore the Deployed Platform Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process.After the login process you will see the **ACE dashboard** user interface
- \ No newline at end of file + From cc7f62385998210cf5abd4de35cfb061c3f10f21 Mon Sep 17 00:00:00 2001 From: Tamal Saha Date: Sat, 16 May 2026 08:05:43 +0600 Subject: [PATCH 04/19] Harden CI workflows (#123) * Use dynamic github token Signed-off-by: Tamal Saha * Harden GitHub Actions workflows - Pin every action ref to a full-length commit SHA with a trailing version comment, so floating tags like @v4 can't be re-pointed at malicious code. - Bump outdated actions/checkout@v1 to @v4.3.1 (where present). - Tag-triggered workflows now check out with fetch-depth: 1 and fetch-tags: true so the tag ref is available downstream. - release-tracker.yml grants contents: write at the job level so the default GITHUB_TOKEN can push commits/tags back to the repo. Signed-off-by: Tamal Saha * Grant preview-website job the permissions Firebase deploy needs Signed-off-by: Tamal Saha * Use GitHub App token for release tracker comments Signed-off-by: Tamal Saha * Apply kubedb/installer#2281: harden CI workflows Signed-off-by: Tamal Saha * Remove Prepare git step from release-tracker.yml Signed-off-by: Tamal Saha * Rename LGTM App token step id to lgtm-app-token Signed-off-by: Tamal Saha * release-tracker.yml: gate at job level with merged == true Signed-off-by: Tamal Saha * release-tracker.yml: drop permissions block Signed-off-by: Tamal Saha * release-tracker.yml: grant permission-pull-requests to LGTM App Signed-off-by: Tamal Saha * Use node-version: '22' in setup-node steps Signed-off-by: Tamal Saha * Add 1gtm-app[bot] to kodiak auto_approve_usernames Signed-off-by: Tamal Saha * Normalize kodiak auto_approve_usernames Signed-off-by: Tamal Saha --------- Signed-off-by: Tamal Saha --- .github/.kodiak.toml | 2 +- .github/workflows/ci.yml | 4 ++-- .github/workflows/preview-website.yml | 30 ++++++++++++++++-------- .github/workflows/release-tracker.yml | 32 +++++++++++--------------- hack/scripts/open-pr.sh | 8 +++---- hack/scripts/update-release-tracker.sh | 2 +- 6 files changed, 42 insertions(+), 36 deletions(-) diff --git a/.github/.kodiak.toml b/.github/.kodiak.toml index ded81e4..b64a5f6 100644 --- a/.github/.kodiak.toml +++ b/.github/.kodiak.toml @@ -15,4 +15,4 @@ strip_html_comments = true # default: false always = true # default: false [approve] -auto_approve_usernames = ["1gtm", "tamalsaha"] +auto_approve_usernames = ["tamalsaha", "1gtm", "1gtm-app[bot]"] \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bba1ee8..b4a8e9f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,7 +31,7 @@ jobs: needs: label-detector runs-on: "${{ needs.label-detector.outputs.runs-on }}" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - name: Install kubectl run: | @@ -47,7 +47,7 @@ jobs: - name: Create Kubernetes cluster id: kind - uses: engineerd/setup-kind@v0.5.0 + uses: helm/kind-action@ef37e7f390d99f746eb8b610417061a60e82a6cc # v1.14.0 with: version: v0.31.0 diff --git a/.github/workflows/preview-website.yml b/.github/workflows/preview-website.yml index 55dc510..10a1bb0 100644 --- a/.github/workflows/preview-website.yml +++ b/.github/workflows/preview-website.yml @@ -14,8 +14,16 @@ jobs: label-detector: name: Runner Label runs-on: label-detector + permissions: + contents: read + checks: write + pull-requests: write outputs: runs-on: ${{ steps.detector.outputs.label }} + permissions: + contents: read + checks: write + pull-requests: write steps: - name: Detect Label id: detector @@ -27,21 +35,25 @@ jobs: name: Build needs: label-detector runs-on: "${{ needs.label-detector.outputs.runs-on }}" + permissions: + contents: read + checks: write + pull-requests: write steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 with: submodules: true - name: Set up Go 1.x - uses: actions/setup-go@v5 + uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5.6.0 with: go-version: '1.25' id: go - name: Use Node.js - uses: actions/setup-node@v4 + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 with: - node-version: '20' + node-version: '22' - name: Install yq run: | @@ -63,8 +75,8 @@ jobs: - name: Clone website repository env: - GITHUB_USER: 1gtm - GITHUB_TOKEN: ${{ secrets.LGTM_GITHUB_TOKEN }} + GITHUB_USER: ${{ github.actor }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} WEBSITE_REPOSITORY: ${{ secrets.WEBSITE_REPOSITORY }} run: | url="https://${GITHUB_USER}:${GITHUB_TOKEN}@${WEBSITE_REPOSITORY}.git" @@ -76,8 +88,8 @@ jobs: - name: Update docs env: - GITHUB_USER: 1gtm - GITHUB_TOKEN: ${{ secrets.LGTM_GITHUB_TOKEN }} + GITHUB_USER: ${{ github.actor }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} WEBSITE_REPOSITORY: ${{ secrets.WEBSITE_REPOSITORY }} GOOGLE_CUSTOM_SEARCH_API_KEY: ${{ secrets.GOOGLE_CUSTOM_SEARCH_API_KEY }} run: | @@ -91,7 +103,7 @@ jobs: make docs-platform make gen-prod - - uses: FirebaseExtended/action-hosting-deploy@v0 + - uses: FirebaseExtended/action-hosting-deploy@092436dca3ec6dacb231d965ae56f7ff6c09f258 # v0 with: repoToken: '${{ secrets.GITHUB_TOKEN }}' firebaseServiceAccount: '${{ secrets.FIREBASE_SERVICE_ACCOUNT_QA }}' diff --git a/.github/workflows/release-tracker.yml b/.github/workflows/release-tracker.yml index af433c2..e727819 100644 --- a/.github/workflows/release-tracker.yml +++ b/.github/workflows/release-tracker.yml @@ -23,32 +23,26 @@ jobs: echo "label=$(curl -fsSL https://this-is-nats.appscode.ninja/runs-on/${{ github.repository_owner }}?visibility=${{ github.repository_visibility }})" >> $GITHUB_OUTPUT build: + if: github.event.pull_request.merged == true name: Build needs: label-detector runs-on: "${{ needs.label-detector.outputs.runs-on }}" steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - - name: Prepare git - env: - GITHUB_USER: 1gtm - GITHUB_TOKEN: ${{ secrets.LGTM_GITHUB_TOKEN }} - run: | - git config --global user.name "${GITHUB_USER}" - git config --global user.email "${GITHUB_USER}@appscode.com" - git remote set-url origin https://${GITHUB_USER}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git - - - name: Install GitHub CLI - run: | - curl -fsSL https://github.com/github/hub/raw/master/script/get | bash -s 2.14.1 - sudo mv bin/hub /usr/local/bin + - name: Generate LGTM App token + id: lgtm-app-token + uses: actions/create-github-app-token@bcd2ba49218906704ab6c1aa796996da409d3eb1 # v3.2.0 + with: + client-id: ${{ secrets.LGTM_APP_CLIENT_ID }} + private-key: ${{ secrets.LGTM_APP_PRIVATE_KEY }} + owner: ${{ github.repository_owner }} + repositories: CHANGELOG + permission-pull-requests: write - name: Update release tracker - if: | - github.event.action == 'closed' && - github.event.pull_request.merged == true env: - GITHUB_USER: 1gtm - GITHUB_TOKEN: ${{ secrets.LGTM_GITHUB_TOKEN }} + GITHUB_USER: ${{ github.actor }} + GITHUB_TOKEN: ${{ steps.lgtm-app-token.outputs.token }} run: | ./hack/scripts/update-release-tracker.sh diff --git a/hack/scripts/open-pr.sh b/hack/scripts/open-pr.sh index e56a9ed..305248e 100755 --- a/hack/scripts/open-pr.sh +++ b/hack/scripts/open-pr.sh @@ -36,7 +36,7 @@ pr_branch=${GITHUB_REPOSITORY}@${GITHUB_SHA:0:8} git checkout -b $pr_branch git commit -a -s -m "Update docs for $pr_branch" git push -u origin HEAD -hub pull-request \ - --labels automerge \ - --message "Update docs for $pr_branch" \ - --message "$(git show -s --format=%b)" +gh pr create \ + --label automerge \ + --title "Update docs for $pr_branch" \ + --body "$(git show -s --format=%b)" diff --git a/hack/scripts/update-release-tracker.sh b/hack/scripts/update-release-tracker.sh index 7184cb6..c8bfc4f 100755 --- a/hack/scripts/update-release-tracker.sh +++ b/hack/scripts/update-release-tracker.sh @@ -69,4 +69,4 @@ case $GITHUB_BASE_REF in ;; esac -hub api "$api_url" -f body="$msg" +gh api "$api_url" -f body="$msg" From 88e520d74f2a1ae4eb85182e04899e52cc486e2e Mon Sep 17 00:00:00 2001 From: Tamal Saha Date: Tue, 19 May 2026 18:37:43 +0600 Subject: [PATCH 05/19] Harden release and release-tracker workflows release-tracker.yml: - Move the merged-PR gate from the build job to label-detector so non-merge closes skip the workflow entirely. - Add explicit contents: read permissions to the build job. release.yml: - Drop misleading permissions from the label-detector job, which only runs a curl and emits a job output. - Add packages: write to the build job alongside contents: write; the docker/login-action push to ghcr.io requires it. Signed-off-by: Tamal Saha --- .github/workflows/release-tracker.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release-tracker.yml b/.github/workflows/release-tracker.yml index e727819..1140f5b 100644 --- a/.github/workflows/release-tracker.yml +++ b/.github/workflows/release-tracker.yml @@ -11,6 +11,7 @@ concurrency: jobs: label-detector: + if: github.event.pull_request.merged == true name: Runner Label runs-on: label-detector outputs: @@ -23,10 +24,11 @@ jobs: echo "label=$(curl -fsSL https://this-is-nats.appscode.ninja/runs-on/${{ github.repository_owner }}?visibility=${{ github.repository_visibility }})" >> $GITHUB_OUTPUT build: - if: github.event.pull_request.merged == true name: Build needs: label-detector runs-on: "${{ needs.label-detector.outputs.runs-on }}" + permissions: + contents: read steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 From f51d2fd62ba9c7cad935f8eb9cf4d5d4ae845827 Mon Sep 17 00:00:00 2001 From: Arnob Kumar Saha Date: Tue, 19 May 2026 19:03:14 +0600 Subject: [PATCH 06/19] Add cluster upgrade (#122) Signed-off-by: Arnob Kumar Saha --- .../cluster-management/cluster-upgrade.md | 211 ++++++++++++++++++ 1 file changed, 211 insertions(+) create mode 100644 docs/platform/guides/cluster-management/cluster-upgrade.md diff --git a/docs/platform/guides/cluster-management/cluster-upgrade.md b/docs/platform/guides/cluster-management/cluster-upgrade.md new file mode 100644 index 0000000..d18d78b --- /dev/null +++ b/docs/platform/guides/cluster-management/cluster-upgrade.md @@ -0,0 +1,211 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: cluster-upgrade + name: Upgrade Cluster + parent: cluster-management + weight: 80 +menu_name: docsplatform_{{.version}} +section_menu_id: guides +--- + + +# Upgrading Your ACE Platform: Management, Imported, and Spoke Clusters + +## Overview + +This guide walks through upgrading an **AppsCode Container Engine (ACE)** deployment +across all cluster tiers — the base management cluster, the AC cluster, general imported +clusters, and spoke clusters. The example below upgrades from release `2025.5.16` to +`2025.6.x`. + +--- + +## Architecture + +``` + ┌─────────────────────────┐ + │ Management Cluster │ + │ (ACE control plane) │ + └────────────┬────────────┘ + │ + ┌──────────────────┼──────────────────┐ + │ │ │ + ┌──────────▼──────┐ ┌────────▼────────┐ ┌─────▼──────────┐ + │ ACE Cluster │ │ Imported Cluster │ │ Spoke Cluster │ + │ (management) │ │ (generic import) │ │ (generic import│ + └─────────────────┘ └─────────────────┘ └────────────────┘ +``` + +Each tier is upgraded separately; the order matters. + +--- + +## Pre-checks + +Before starting, verify your current installer version and target release. + +1. Log in to [appscode.com](https://appscode.com) and switch to your organization. +2. Navigate to your installer and click **View Details**. +3. Note the **current version** (e.g., `2025.5.16`) and confirm the **target version** + (e.g., `2025.6.x`). + +```bash +# Confirm current Helm release versions on the management cluster +helm list -A | grep opscenter-features + +# Watch releases during upgrade +kubectl get helmreleases -A -w +``` + +--- + +## Upgrade Flow + +### Step 1 — Download the new installer archive + +1. On the installer page, click **Upgrade to **. +2. Click **Download** to get the updated `.values` (val) file. +3. The downloaded archive lands in your local archive folder (e.g., `archive2/`). + +```bash +# Optional: inspect the downloaded values file before applying +cat ~/Downloads/.values.yaml +``` + +--- + +### Step 2 — Apply the upgrade via Platform UI + +1. Switch from the **Console UI** to the **Platform UI**. +2. Go to **User Settings → Upgrade**. +3. Select the val file downloaded in Step 1. +4. Click **Update Version**. + +The platform creates a background job that updates Helm releases one by one. + +```bash +# Monitor the upgrade job on the management cluster +kubectl get jobs -n ace -w + +# Watch Helm releases roll forward +kubectl get helmreleases -A -w +``` + +> **Expected state:** `current version: 5.16 → update in progress: 6.16` + +Once the job completes, verify the op-center feature set reflects the new version. + +--- + +### Step 3 — Upgrade spoke clusters + +Spoke clusters are imported as **generic DBaaS** generally. Update them individually before +updating the cluster set. + +1. In the Console, go to **Your Organization → Hub Cluster → ACE**. +2. Select the correct **Cluster set** (how you imported). For example, Generic DBaaS. +3. Select your spoke cluster. +4. Click **Update ACE Resources → Update Version → Yes**. + +![Upgrade](images/upgrade/upgrade_1.png) + +```bash +# After triggering, watch the QB operator start the upgrade on the spoke +kubectl get helmreleases -A -w --context + +# Wait for all pods to return to Running +kubectl get pods -A --context +``` + +The cluster set manifest (which holds metadata about all spoke clusters) updates +almost instantly. The underlying Helm releases take longer — wait for them to +reconcile before moving on. + +--- + +### Step 4 — Upgrade general imported clusters + +1. In the Console, select the **General Imported Cluster**. +2. Open its **Settings** page and click **Update Version**. + +```bash +# Verify on the imported cluster +kubectl get helmreleases -A --context +``` + +This path updates Helm releases directly (not via a cluster set), so progress is +visible immediately. + +--- + +### Step 5 — Update the cluster set + +After **all** individual clusters are on the new version: + +1. In the Console, go to **Your Organization → Hub Cluster → ACE**. +2. Select the correct **Cluster set** (how you imported). For example, Generic DBaaS. +3. Click **Update Cluster Set**. + +```bash +# Confirm cluster set version +kubectl get clusterset -A +``` + +> Before clicking **Update Cluster Set**, you will see the cluster set still shows the old version (e.g., `5.6`). +> After the update it will be marked as **unaligned** briefly, then reconcile. + +--- + +### Step 6 — Verify + +```bash +# Check every Helm release is at the new version across all clusters +for ctx in management spoke imported; do + echo "=== $ctx ===" + helm list -A --kube-context $ctx | grep -v DEPLOYED +done + +# Spot-check the search manager (may self-update from the cluster side) +kubectl get deployment search-manager -n ace -o jsonpath='{.spec.template.spec.containers[0].image}' +``` + +All clusters should report version `6.6.16` (or your target release). + +--- + +## Lessons Learned + +| Observation | Takeaway | +|---|---| +| One Helm release failed to update via the job | It had already reconciled from the cluster side — not always an error | +| Cluster set update is near-instant | It only patches a manifest, not the releases themselves — releases follow async | +| Search manager self-updated | Some components pull their version from the cluster operator, not the installer job | +| Upgrade order matters | Always update individual clusters **before** the cluster set | +| Ports need time after upgrade | Wait for all pods to reach `Running` before declaring success | + +--- + +## Quick Reference + +``` +appscode.com → Download val file + ↓ +Platform UI → Update Version (Management / Platform cluster) + ↓ +Console → Generic DBaaS → Update AC Resources (each spoke) + ↓ +Console → Generic DBaaS → Update Cluster Set + ↓ +Console → Imported Cluster → Settings → Update Version + ↓ +Verify: helm list -A across all contexts +``` + +No downtime during upgrade procedure — the platform performs rolling Helm release updates and +most workloads stay running throughout. + +--- +Here is a sample video on how you can setup the full platform: + \ No newline at end of file From 163f19b01e4f1433a97c178c113d65e3c35755ab Mon Sep 17 00:00:00 2001 From: Tamal Saha Date: Tue, 26 May 2026 20:42:47 +0600 Subject: [PATCH 07/19] Rebrand AppsCode Platform / ACE to KubeDB Platform Signed-off-by: Tamal Saha --- .../site-administration/ace-upgrade.md | 16 ++++----- .../cluster-management/cluster-features.md | 2 +- .../cluster-management/cluster-overview.md | 2 +- .../cluster-management/cluster-upgrade.md | 36 +++++++++---------- .../guides/get-started/architecture.md | 10 +++--- .../guides/get-started/requirements.md | 16 ++++----- docs/platform/guides/integrations/_index.md | 2 +- .../guides/integrations/rancher-extension.md | 18 +++++----- .../guides/license-management/overview.md | 2 +- .../selfhost-setup/install/aws-marketplace.md | 6 ++-- .../install/azure-marketplace.md | 6 ++-- .../selfhost-setup/install/cloud-demo.md | 4 +-- .../selfhost-setup/install/k8s-app-demo.md | 4 +-- .../selfhost-setup/install/onprem-demo.md | 4 +-- .../selfhost-setup/install/openshift-demo.md | 4 +-- .../install/selfhosted-production.md | 12 +++---- 16 files changed, 72 insertions(+), 72 deletions(-) diff --git a/docs/platform/guides/account-management/site-administration/ace-upgrade.md b/docs/platform/guides/account-management/site-administration/ace-upgrade.md index ff00bfd..e53c0ce 100644 --- a/docs/platform/guides/account-management/site-administration/ace-upgrade.md +++ b/docs/platform/guides/account-management/site-administration/ace-upgrade.md @@ -3,7 +3,7 @@ layout: docs menu: docsplatform_{{.version}}: identifier: account-management-siteadmin-ace-upgrade - name: ACE Upgrade + name: KubeDB Platform Upgrade parent: account-management-siteadmin weight: 60 menu_name: docsplatform_{{.version}} @@ -11,9 +11,9 @@ section_menu_id: guides --- -# ACE Upgrade +# KubeDB Platform Upgrade -Site administrators can upgrade the AppsCode Enterprise (ACE) management cluster directly from the platform UI by uploading a configuration file downloaded from the AppsCode portal. +Site administrators can upgrade the KubeDB Platform management cluster directly from the platform UI by uploading a configuration file downloaded from the AppsCode portal. --- @@ -27,13 +27,13 @@ Before starting the upgrade, download the required values file from the AppsCode --- -## Step 1 — Open ACE Upgrade +## Step 1 — Open KubeDB Platform Upgrade -![ACE Version Page](../images/upgrade-version-1.png) +![KubeDB Platform Version Page](../images/upgrade-version-1.png) -Go to **SITE ADMINISTRATION > ACE Upgrade** from the left-hand menu. +Go to **SITE ADMINISTRATION > KubeDB Platform Upgrade** from the left-hand menu. -The page displays the current ACE version and the upgrade status of all platform components. Click the **Upgrade Version** button at the top right to begin. +The page displays the current KubeDB Platform version and the upgrade status of all platform components. Click the **Upgrade Version** button at the top right to begin. --- @@ -41,7 +41,7 @@ The page displays the current ACE version and the upgrade status of all platform ![Upload Values File](../images/upgrade-version-2.png) -On the **Upgrade ACE** screen: +On the **Upgrade KubeDB Platform** screen: - Click **Upload values file...** and select the `values.yaml` file downloaded from the AppsCode portal. - Click **Update Version** to start the upgrade process. diff --git a/docs/platform/guides/cluster-management/cluster-features.md b/docs/platform/guides/cluster-management/cluster-features.md index b302915..e705cb2 100644 --- a/docs/platform/guides/cluster-management/cluster-features.md +++ b/docs/platform/guides/cluster-management/cluster-features.md @@ -37,7 +37,7 @@ The Feature Sets grid on the Cluster Overview page shows all available product m | **Multicluster Spoke** | Connect this cluster as a spoke to an existing Multicluster Hub. | | **Networking Addons** | Various networking plugins and extensions for Kubernetes. | | **Observability** | Cluster monitoring, metrics, and dashboards using Prometheus and Grafana. | -| **Opscenter Tools** | DevOps tooling and management utilities for ACE. | +| **Opscenter Tools** | DevOps tooling and management utilities for KubeDB Platform. | | **Policy Management** | Platform-level policy enforcement tools. | | **Secret Management** | Tools for secure secret storage and distribution across namespaces. | | **Security** | TLS certificate management, secret scanning, and image vulnerability tooling. | diff --git a/docs/platform/guides/cluster-management/cluster-overview.md b/docs/platform/guides/cluster-management/cluster-overview.md index ad4b338..470426b 100644 --- a/docs/platform/guides/cluster-management/cluster-overview.md +++ b/docs/platform/guides/cluster-management/cluster-overview.md @@ -88,7 +88,7 @@ Scroll down past the **Basic** section to see the **Feature Sets** grid. Each ca | **Multicluster Spoke** | Connect this cluster as a spoke to a hub | | **Networking Addons** | Various networking addons for Kubernetes | | **Observability** | Cluster monitoring with Prometheus and Grafana | -| **Opscenter Tools** | DevOps tools for ACE | +| **Opscenter Tools** | DevOps tools for KubeDB Platform | | **Policy Management** | Platform policy management tools | | **Secret Management** | Tools for secret management | | **Security** | TLS, secret scanning, and vulnerability tools | diff --git a/docs/platform/guides/cluster-management/cluster-upgrade.md b/docs/platform/guides/cluster-management/cluster-upgrade.md index d18d78b..f0e878d 100644 --- a/docs/platform/guides/cluster-management/cluster-upgrade.md +++ b/docs/platform/guides/cluster-management/cluster-upgrade.md @@ -11,12 +11,12 @@ section_menu_id: guides --- -# Upgrading Your ACE Platform: Management, Imported, and Spoke Clusters +# Upgrading Your KubeDB Platform: Management, Imported, and Spoke Clusters ## Overview -This guide walks through upgrading an **AppsCode Container Engine (ACE)** deployment -across all cluster tiers — the base management cluster, the AC cluster, general imported +This guide walks through upgrading a **KubeDB Platform** deployment +across all cluster tiers, the base management cluster, the KubeDB Platform cluster, general imported clusters, and spoke clusters. The example below upgrades from release `2025.5.16` to `2025.6.x`. @@ -25,17 +25,17 @@ clusters, and spoke clusters. The example below upgrades from release `2025.5.16 ## Architecture ``` - ┌─────────────────────────┐ - │ Management Cluster │ - │ (ACE control plane) │ - └────────────┬────────────┘ - │ - ┌──────────────────┼──────────────────┐ - │ │ │ - ┌──────────▼──────┐ ┌────────▼────────┐ ┌─────▼──────────┐ - │ ACE Cluster │ │ Imported Cluster │ │ Spoke Cluster │ - │ (management) │ │ (generic import) │ │ (generic import│ - └─────────────────┘ └─────────────────┘ └────────────────┘ + ┌─────────────────────────────────┐ + │ Management Cluster │ + │ (KubeDB Platform control plane) │ + └────────────────┬────────────────┘ + │ + ┌──────────────────┼──────────────────┐ + │ │ │ + ┌──────────────▼──────┐ ┌────────▼────────┐ ┌─────▼──────────┐ + │ KubeDB Platform │ │ Imported Cluster │ │ Spoke Cluster │ + │ Cluster (management)│ │ (generic import) │ │ (generic import│ + └─────────────────────┘ └─────────────────┘ └────────────────┘ ``` Each tier is upgraded separately; the order matters. @@ -104,10 +104,10 @@ Once the job completes, verify the op-center feature set reflects the new versio Spoke clusters are imported as **generic DBaaS** generally. Update them individually before updating the cluster set. -1. In the Console, go to **Your Organization → Hub Cluster → ACE**. +1. In the Console, go to **Your Organization → Hub Cluster → KubeDB Platform**. 2. Select the correct **Cluster set** (how you imported). For example, Generic DBaaS. 3. Select your spoke cluster. -4. Click **Update ACE Resources → Update Version → Yes**. +4. Click **Update KubeDB Platform Resources → Update Version → Yes**. ![Upgrade](images/upgrade/upgrade_1.png) @@ -144,7 +144,7 @@ visible immediately. After **all** individual clusters are on the new version: -1. In the Console, go to **Your Organization → Hub Cluster → ACE**. +1. In the Console, go to **Your Organization → Hub Cluster → KubeDB Platform**. 2. Select the correct **Cluster set** (how you imported). For example, Generic DBaaS. 3. Click **Update Cluster Set**. @@ -194,7 +194,7 @@ appscode.com → Download val file ↓ Platform UI → Update Version (Management / Platform cluster) ↓ -Console → Generic DBaaS → Update AC Resources (each spoke) +Console → Generic DBaaS → Update KubeDB Platform Resources (each spoke) ↓ Console → Generic DBaaS → Update Cluster Set ↓ diff --git a/docs/platform/guides/get-started/architecture.md b/docs/platform/guides/get-started/architecture.md index c54831b..dff0c6e 100644 --- a/docs/platform/guides/get-started/architecture.md +++ b/docs/platform/guides/get-started/architecture.md @@ -15,14 +15,14 @@ Let's first discuss some basic terminologies, those will be repeated many times ![architecture](../images/architecture.png) -### ACE -ACE is the central management cluster where we will deploy all the ui-components. Namely the `backend server(ace-platform-api)`, `kubedb-ui`, `cluster-ui`, `billing-ui`, `platform-ui`, `grafana-ui`, ingresses etc. This will be mainly used by the administrators & devops engineers. +### KubeDB Platform +KubeDB Platform is the central management cluster where we will deploy all the ui-components. Namely the `backend server(ace-platform-api)`, `kubedb-ui`, `cluster-ui`, `billing-ui`, `platform-ui`, `grafana-ui`, ingresses etc. This will be mainly used by the administrators & devops engineers. As this is the central point of management, we call it `Management cluster`. As all the UI-components installed in this, we sometimes call `UI cluster`. We also have native-integration of [OCM hub-spoke model](https://open-cluster-management.io/docs/concepts/architecture/). This is by-default enabled. This integration enables the cluster-manager to easily do similar changes(for example: installing a feature) centrally. -ACE is used as the hub of OCM mode. Thats why we call this `Hub cluster` too. +KubeDB Platform is used as the hub of OCM mode. Thats why we call this `Hub cluster` too. -The ACE cluster can be a single-node k3s cluster for staging or development. Or a full-fledged multi-node cluster for prod. +The KubeDB Platform cluster can be a single-node k3s cluster for staging or development. Or a full-fledged multi-node cluster for prod. The installer page on the `selfhost-ui` on appscode.com provides instructions for quickly setting up a K3s cluster to get started immediately. @@ -32,4 +32,4 @@ While importing, if someone make it a spoke, then cluster-manager-spoke features If you don't want to manage it from the hub, we can just import it as a general cluster. In that case, that auto-sync from hub will not happen. -Both ACE & DBaaS clusters can be of any vendors like AWS, Azure, Google Cloud etc. It can be an on-prem cluster too. \ No newline at end of file +Both KubeDB Platform & DBaaS clusters can be of any vendors like AWS, Azure, Google Cloud etc. It can be an on-prem cluster too. \ No newline at end of file diff --git a/docs/platform/guides/get-started/requirements.md b/docs/platform/guides/get-started/requirements.md index a3e05d0..b1d9aa5 100644 --- a/docs/platform/guides/get-started/requirements.md +++ b/docs/platform/guides/get-started/requirements.md @@ -3,17 +3,17 @@ layout: docs menu: docsplatform_{{.version}}: identifier: guide-ace-requirements - name: ACE Requirements + name: KubeDB Platform Requirements parent: guide-start weight: 14 menu_name: docsplatform_{{.version}} section_menu_id: guides --- -# Requirements to deploy ACE -We will discuss the resources requirements. networking requirements & best practices for deploying your first ACE & DBaaS cluster. It is highly recommended to read the [architecture](https://appscode.com/docs/en/guides/get-started/architecture.html) doc first before continuing. +# Requirements to deploy KubeDB Platform +We will discuss the resources requirements. networking requirements & best practices for deploying your first KubeDB Platform & DBaaS cluster. It is highly recommended to read the [architecture](https://appscode.com/docs/en/guides/get-started/architecture.html) doc first before continuing. -## Requirements for ACE Cluster +## Requirements for KubeDB Platform Cluster ### 1. Resources **Minimum**: Single node with 4 cpu, 16 GB ram, 100 GB disk attached. A k3s cluster will be deployed on that VM. And then the ui-components will be installed. @@ -40,7 +40,7 @@ These are the required connectivities to everything work correctly: 3. 4222 - NATS.io port 4. 4224 - s3-proxy service port -Here is a sample video on how you can setup ACE: +Here is a sample video on how you can setup KubeDB Platform: ## Requirements for DBaaS Cluster @@ -52,7 +52,7 @@ Minimum: Kubernetes cluster with 3 worker nodes, each with 8- 16GB ram, PVC supp Note that, The largest node must be able to fit the largest DB Pod(in terms of CPU, memory). ### 2. Networking -Literally all the Networking requirements described for ACE are also applicable here, except the `Port Requiements` part. -Only one additional requirement here is that the DBaaS cluster should be accessible from the management/ACE cluster. +Literally all the Networking requirements described for KubeDB Platform are also applicable here, except the `Port Requiements` part. +Only one additional requirement here is that the DBaaS cluster should be accessible from the management/KubeDB Platform cluster. -You now have an overall idea on the requirements. So, [Login](https://appscode.com/docs/en/guides/get-started/register-login.html) into your account & get going with our [installer](https://appscode.com/selfhost/). Happy ACE! +You now have an overall idea on the requirements. So, [Login](https://appscode.com/docs/en/guides/get-started/register-login.html) into your account & get going with our [installer](https://appscode.com/selfhost/). Happy KubeDB Platform! diff --git a/docs/platform/guides/integrations/_index.md b/docs/platform/guides/integrations/_index.md index 650099d..b9d4adf 100644 --- a/docs/platform/guides/integrations/_index.md +++ b/docs/platform/guides/integrations/_index.md @@ -5,7 +5,7 @@ menu: identifier: integrations name: Integrations parent: guides - description: Integrate ACE into your Kubernetes platform + description: Integrate KubeDB Platform into your Kubernetes platform icon: https://img.icons8.com/?size=100&id=80695&format=png&color=000000 popular: true weight: 40 diff --git a/docs/platform/guides/integrations/rancher-extension.md b/docs/platform/guides/integrations/rancher-extension.md index 21e2d58..1eae0c6 100644 --- a/docs/platform/guides/integrations/rancher-extension.md +++ b/docs/platform/guides/integrations/rancher-extension.md @@ -24,25 +24,25 @@ Before proceeding, make sure you have: - A Rancher setup with access to the **Local** cluster. - An account on [appscode.com](https://appscode.com/). -- The [ACE](https://appscode.com/docs/en/selfhost-setup/) platform deployed on your Rancher cluster. +- The [KubeDB Platform](https://appscode.com/docs/en/selfhost-setup/) deployed on your Rancher cluster. --- ## 2. Deploying the KubeDB Rancher Extension -### Step 1 – Deploy ACE +### Step 1 – Deploy KubeDB Platform 1. Create an account at [appscode.com](https://appscode.com/). -2. Follow the [self-hosting ACE guide](https://appscode.com/docs/en/selfhost-setup/) to deploy ACE on your Rancher cluster. - You can also watch this video tutorial for step-by-step instructions: [Self-Hosting ACE Video Guide](https://www.youtube.com/watch?v=1diG8qq73f4&list=PLoiT1Gv2KR1iqWFGkCozbLqYe31QMsQcX&index=2) +2. Follow the [self-hosting KubeDB Platform guide](https://appscode.com/docs/en/selfhost-setup/) to deploy KubeDB Platform on your Rancher cluster. + You can also watch this video tutorial for step-by-step instructions: [Self-Hosting KubeDB Platform Video Guide](https://www.youtube.com/watch?v=1diG8qq73f4&list=PLoiT1Gv2KR1iqWFGkCozbLqYe31QMsQcX&index=2) --- -### Step 2 – Create a Rancher-Type Organization in ACE -1. Visit your ACE URL and log in with your **admin account**. ![ACE URL](../images/ace-url.png) +### Step 2 – Create a Rancher-Type Organization in KubeDB Platform +1. Visit your KubeDB Platform URL and log in with your **admin account**. ![KubeDB Platform URL](../images/ace-url.png) 2. Navigate to **Organizations** and create a new organization with the type set to **Rancher**. 3. Provide a valid **Sync Token**. - > The Sync Token is used to synchronize Rancher users into the ACE platform. + > The Sync Token is used to synchronize Rancher users into the KubeDB Platform. ![Create Organization](../images/organization-create.png) @@ -50,7 +50,7 @@ Before proceeding, make sure you have: ### Step 3 – Sync Rancher Users 1. Go to **Organization Settings → Rancher Extension**. ![Organization Settings](../images/organization-settings.png) -2. Click **Sync User** to import Rancher users into ACE. ![Sync User](../images/organization-settings-sync-users.png) +2. Click **Sync User** to import Rancher users into KubeDB Platform. ![Sync User](../images/organization-settings-sync-users.png) --- @@ -110,4 +110,4 @@ Follow these steps to install the KubeDB extension in Rancher: ✅ Installation Complete! You can now deploy and manage your databases directly from the KubeDB menu in your cluster. -NB: Import your Rancher cluster into the ACE UI under the Rancher organization you created earlier before using the Rancher extension, or it won’t work. +NB: Import your Rancher cluster into the KubeDB Platform UI under the Rancher organization you created earlier before using the Rancher extension, or it won’t work. diff --git a/docs/platform/guides/license-management/overview.md b/docs/platform/guides/license-management/overview.md index 5cb1a9d..36197ef 100644 --- a/docs/platform/guides/license-management/overview.md +++ b/docs/platform/guides/license-management/overview.md @@ -29,7 +29,7 @@ While AppsCode administrators are responsible for the core lifecycle of contract ### Key Components -- **Contracts:** Digital agreements, typically established by [AppsCode administrators](https://appsCode.com/contact/) within the Billing Console, that define the terms of AppsCode's product (e.g., ACE, KubeDB, KubeStash, KubeVault etc.) usage. This includes the specific AppsCode products which can be licensed, the duration of the contract, applicable features, and the clusters authorized to use these licenses. Contracts ensure that usage aligns with legal and financial terms, providing a foundation for all subsequent actions in the console. Contracts can be configured for either online or offline license validation. +- **Contracts:** Digital agreements, typically established by [AppsCode administrators](https://appsCode.com/contact/) within the Billing Console, that define the terms of AppsCode's product (e.g., KubeDB Platform, KubeDB, KubeStash, KubeVault etc.) usage. This includes the specific AppsCode products which can be licensed, the duration of the contract, applicable features, and the clusters authorized to use these licenses. Contracts ensure that usage aligns with legal and financial terms, providing a foundation for all subsequent actions in the console. Contracts can be configured for either online or offline license validation.

- **Licensed cluster:** The `Licensed Cluster` section within the AppsCode Billing Console offers a comprehensive overview and detailed management capabilities for Kubernetes clusters that have been issued AppsCode product licenses. This component is pivotal for administrators to monitor the cluster(s) `licences` and `events` of licensed products across their infrastructure.

diff --git a/docs/platform/selfhost-setup/install/aws-marketplace.md b/docs/platform/selfhost-setup/install/aws-marketplace.md index 2bef80d..d58d69c 100644 --- a/docs/platform/selfhost-setup/install/aws-marketplace.md +++ b/docs/platform/selfhost-setup/install/aws-marketplace.md @@ -14,7 +14,7 @@ section_menu_id: selfhost-setup Welcome to the KubeDB Platform's **AWS Marketplace** deployment! This guide will walk you through the deployment process via the **AWS Marketplace**, ensuring your environment is configured correctly for a seamless installation. -To install **ACE**, you need to have the permissions to manage **EC2**, **IAM**, **CloudFormation** etc. +To install **KubeDB Platform**, you need to have the permissions to manage **EC2**, **IAM**, **CloudFormation** etc. ### Prerequisite @@ -267,7 +267,7 @@ These credentials define the primary super-user and the initial organizational s For openshift cluster toggle Red Hat OpenShift cluster and give Kube API Server endpoint ### 4. Registry -Ace requires access to various container registries and Helm repositories to pull necessary images and charts. +KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. **Docker Registry:** Go to the docker registry section first then look for the following settings * **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. @@ -313,7 +313,7 @@ In this section you can enable or disable features. You can also create an initi ### 8. Branding & UI Customization -Administrators can globally re-brand the Ace interface to match corporate identity. +Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. * **App Name:** Changes the browser tab title. * **Primary Color:** Enter a Hex code (default: `#009948`). diff --git a/docs/platform/selfhost-setup/install/azure-marketplace.md b/docs/platform/selfhost-setup/install/azure-marketplace.md index e68683c..1c14149 100644 --- a/docs/platform/selfhost-setup/install/azure-marketplace.md +++ b/docs/platform/selfhost-setup/install/azure-marketplace.md @@ -37,7 +37,7 @@ Click on the `Create New Installer` button to get started. Choose `Deployment Type` -> `Azure Marketplace` and give it a name in the installer name section. -For deploying ACE using azure marketplace, you usually need these four pieces of information to establish a secure connection. These represent the "Identity" of your application and the "Address" of your billing/directory structure. +For deploying KubeDB Platform using azure marketplace, you usually need these four pieces of information to establish a secure connection. These represent the "Identity" of your application and the "Address" of your billing/directory structure. #### 1. Subscription ID The unique identifier for your **Azure Subscription**. This is where the actual billing for Marketplace services occurs. To get Subscription ID: @@ -85,7 +85,7 @@ For openshift cluster toggle Red Hat OpenShift cluster and give Kube API Server ### 5. Registry -Ace requires access to various container registries and Helm repositories to pull necessary images and charts. +KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. **Docker Registry:** Go to the docker registry section first then look for the following settings * **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. @@ -133,7 +133,7 @@ In this section you can enable or disable features. You can also create an init ### 9. Branding & UI Customization -Administrators can globally re-brand the Ace interface to match corporate identity. +Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. * **App Name:** Changes the browser tab title. * **Primary Color:** Enter a Hex code (default: `#009948`). diff --git a/docs/platform/selfhost-setup/install/cloud-demo.md b/docs/platform/selfhost-setup/install/cloud-demo.md index e36929f..74cc5e6 100644 --- a/docs/platform/selfhost-setup/install/cloud-demo.md +++ b/docs/platform/selfhost-setup/install/cloud-demo.md @@ -76,7 +76,7 @@ These credentials define the primary super-user and the initial organizational s ### 4. Registry -Ace requires access to various container registries and Helm repositories to pull necessary images and charts. +KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. **Docker Registry:** Go to the docker registry section first then look for the following settings * **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. @@ -137,7 +137,7 @@ In this section you can enable or disable features ### 9. Branding & UI Customization -Administrators can globally re-brand the Ace interface to match corporate identity. +Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. * **App Name:** Changes the browser tab title. * **Primary Color:** Enter a Hex code (default: `#009948`). diff --git a/docs/platform/selfhost-setup/install/k8s-app-demo.md b/docs/platform/selfhost-setup/install/k8s-app-demo.md index 9e05ac6..1190f2c 100644 --- a/docs/platform/selfhost-setup/install/k8s-app-demo.md +++ b/docs/platform/selfhost-setup/install/k8s-app-demo.md @@ -53,7 +53,7 @@ These credentials define the primary super-user and the initial organizational s ### 4. Registry -Ace requires access to various container registries and Helm repositories to pull necessary images and charts. +KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. **Docker Registry:** Go to the docker registry section first then look for the following settings * **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. @@ -105,7 +105,7 @@ In this section you can enable or disable features ### 8. Branding & UI Customization -Administrators can globally re-brand the Ace interface to match corporate identity. +Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. * **App Name:** Changes the browser tab title. * **Primary Color:** Enter a Hex code (default: `#009948`). diff --git a/docs/platform/selfhost-setup/install/onprem-demo.md b/docs/platform/selfhost-setup/install/onprem-demo.md index cb55e99..1454c87 100644 --- a/docs/platform/selfhost-setup/install/onprem-demo.md +++ b/docs/platform/selfhost-setup/install/onprem-demo.md @@ -52,7 +52,7 @@ These credentials define the primary super-user and the initial organizational s ### 4. Registry -Ace requires access to various container registries and Helm repositories to pull necessary images and charts. +KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. **Docker Registry:** Go to the docker registry section first then look for the following settings * **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. @@ -141,7 +141,7 @@ In this section you can enable or disable features ### 11. Branding & UI Customization -Administrators can globally re-brand the Ace interface to match corporate identity. +Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. * **App Name:** Changes the browser tab title. * **Primary Color:** Enter a Hex code (default: `#009948`). diff --git a/docs/platform/selfhost-setup/install/openshift-demo.md b/docs/platform/selfhost-setup/install/openshift-demo.md index d85ad7b..28f0eb4 100644 --- a/docs/platform/selfhost-setup/install/openshift-demo.md +++ b/docs/platform/selfhost-setup/install/openshift-demo.md @@ -50,7 +50,7 @@ These credentials define the primary super-user and the initial organizational s For openshift cluster toggle Red Hat OpenShift cluster and give Kube API Server endpoint ### 4. Registry -Ace requires access to various container registries and Helm repositories to pull necessary images and charts. +KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. **Docker Registry:** Go to the docker registry section first then look for the following settings * **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. @@ -138,7 +138,7 @@ In this section you can enable or disable features ### 11. Branding & UI Customization -Administrators can globally re-brand the Ace interface to match corporate identity. +Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. * **App Name:** Changes the browser tab title. * **Primary Color:** Enter a Hex code (default: `#009948`). diff --git a/docs/platform/selfhost-setup/install/selfhosted-production.md b/docs/platform/selfhost-setup/install/selfhosted-production.md index d448cb4..9d5b472 100644 --- a/docs/platform/selfhost-setup/install/selfhosted-production.md +++ b/docs/platform/selfhost-setup/install/selfhosted-production.md @@ -165,7 +165,7 @@ EKS_POLICY_ARN=$(aws iam list-policies --query "Policies[?PolicyName==’AceSelf Create Role using the downloaded trust-relationship file ``` sed -e "s/OIDC_ID/$OIDC_ID/g" -e "s/ACCOUNT_ID/$ACCOUNT_ID/g" -e "s/REGION/$REGION/g" -e "s/SA_NAMESPACE/"ace"/g" -e "s/SA_NAME/"ace"/g" template-trust-relationship > ace-trust-relationship.json -aws iam create-role --role-name AceInstaller-$OIDC_ID --assume-role-policy-document file://ace-trust-relationship.json --description "A role to be used by ACE selfhost installer" +aws iam create-role --role-name AceInstaller-$OIDC_ID --assume-role-policy-document file://ace-trust-relationship.json --description "A role to be used by KubeDB Platform selfhost installer" ROLE_ARN=$(aws iam get-role --role-name AceInstaller-$OIDC_ID --query "Role.Arn" --output text) # attach Policies to the Role aws iam attach-role-policy --role-name AceInstaller-$OIDC_ID --policy-arn=$EC2_POLICY_ARN @@ -205,14 +205,14 @@ These credentials define the primary super-user and the initial organizational s ### 4. Release -Define the specific Kubernetes namespace and release information for the Ace components. +Define the specific Kubernetes namespace and release information for the KubeDB Platform components. * **Release Name:** Defaults to `ace`. * **Namespace:** Enter the target namespace (default: `ace`). * **Namespace Automation:** Toggle **"Create namespaces during Helm install"** if you want the installer to handle namespace lifecycle management. ### 5. Registry -Ace requires access to various container registries and Helm repositories to pull necessary images and charts. +KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. **Docker Registry:** Go to the docker registry section first then look for the following settings * **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. @@ -243,7 +243,7 @@ This secton is for Persistence & Resource Allocation. Properly sizing your resou #### KubeStash -Ace uses **KubeStash** for automated backups and disaster recovery. +KubeDB Platform uses **KubeStash** for automated backups and disaster recovery. * **Retention Policy:** Define how long backups are kept (e.g., `keep-1mo`). * **Schedule:** Set the backup frequency using Cron syntax (default: `0 */2 * * *` or every 2 hours). @@ -319,7 +319,7 @@ In this section you can enable or disable features ### 12. Branding & UI Customization -Administrators can globally re-brand the Ace interface to match corporate identity. +Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. * **App Name:** Changes the browser tab title. * **Primary Color:** Enter a Hex code (default: `#009948`). @@ -341,7 +341,7 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y ### 15. Explore the Deployed Platform -Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process.After the login process you will see the **ACE dashboard** user interface +Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process.After the login process you will see the **KubeDB Platform dashboard** user interface
From 4782b9229c7ffb380602ddece39cd622a7dd0472 Mon Sep 17 00:00:00 2001 From: Arnob Kumar Saha Date: Sun, 14 Jun 2026 00:26:57 +0600 Subject: [PATCH 08/19] Move the common configurations of selfhost Signed-off-by: Arnob Kumar Saha --- .../selfhost-setup/install/aws-marketplace.md | 48 +----- .../install/azure-marketplace.md | 62 +------ .../selfhost-setup/install/cloud-demo.md | 104 ++---------- .../{k8s-app-demo.md => common-config.md} | 158 +++++++++++------- .../selfhost-setup/install/onprem-demo.md | 108 ++---------- .../selfhost-setup/install/openshift-demo.md | 103 ++---------- .../install/selfhosted-production.md | 118 ++----------- 7 files changed, 147 insertions(+), 554 deletions(-) rename docs/platform/selfhost-setup/install/{k8s-app-demo.md => common-config.md} (55%) diff --git a/docs/platform/selfhost-setup/install/aws-marketplace.md b/docs/platform/selfhost-setup/install/aws-marketplace.md index d58d69c..6a5512b 100644 --- a/docs/platform/selfhost-setup/install/aws-marketplace.md +++ b/docs/platform/selfhost-setup/install/aws-marketplace.md @@ -5,7 +5,7 @@ menu: identifier: aws-marketplace name: AWS Marketplace parent: selfhosted-installer - weight: 10 + weight: 6 menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- @@ -18,11 +18,7 @@ To install **KubeDB Platform**, you need to have the permissions to manage **EC2 ### Prerequisite -Before you begin, please ensure your Kubernetes cluster meets the following minimum system requirements: -* **Worker Nodes**: At least one dedicated worker node. -* **CPU**: 4–6 vCPUs. -* **Memory**: 16 GB of RAM. -* **Networking**: A routable IP address for external connectivity. +See [Prerequisites](common-config.md#prerequisites) in the Common Configuration guide for the minimum cluster requirements and the optional k3s setup note. You have to create an `Access Key` and `Secret Key` with following policies attached. Check out similar [eksctl docs](https://eksctl.io/usage/minimum-iam-policies/) for reference. @@ -267,38 +263,11 @@ These credentials define the primary super-user and the initial organizational s For openshift cluster toggle Red Hat OpenShift cluster and give Kube API Server endpoint ### 4. Registry -KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. - -**Docker Registry:** Go to the docker registry section first then look for the following settings -* **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. -* **Helm Repositories:** In the helm repositories section put your helm repository url -If using private or authenticated registries, provide: -* **Credentials:** Username and Password. -* **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. -* **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry +See [Registry](common-config.md#registry) in the Common Configuration guide for Docker registry proxies, Helm repositories, credentials, certs, and image pull secrets. ### 5. Monitoring -Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. - -* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. - * **Enable Email:** Turns email notifications on or off. - * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. - * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. - * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. - * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. - * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. - * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. - * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. -* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. - * **Enable Webhook:** Turns webhook delivery on or off. - * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. - * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. - -
- - -> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. +See [Monitoring](common-config.md#monitoring) in the Common Configuration guide for Alertmanager email and webhook configuration. ### 6. Settings @@ -313,14 +282,7 @@ In this section you can enable or disable features. You can also create an initi ### 8. Branding & UI Customization -Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. - -* **App Name:** Changes the browser tab title. -* **Primary Color:** Enter a Hex code (default: `#009948`). -* **Assets:** - * **Logo:** Upload a 200x30px image (SVG/PNG recommended). - * **Favicon:** Upload a 20KB icon file. -* **App Tag:** Toggle **"Show App Tag"** to display or hide the version/tagging info in the UI. +See [Branding & UI Customization](common-config.md#branding--ui-customization) in the Common Configuration guide to re-brand the platform interface. ### 9. Generate Installer and Documentation diff --git a/docs/platform/selfhost-setup/install/azure-marketplace.md b/docs/platform/selfhost-setup/install/azure-marketplace.md index 1c14149..d72d8ae 100644 --- a/docs/platform/selfhost-setup/install/azure-marketplace.md +++ b/docs/platform/selfhost-setup/install/azure-marketplace.md @@ -5,7 +5,7 @@ menu: identifier: azure-marketplace name: Azure Marketplace parent: selfhosted-installer - weight: 10 + weight: 7 menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- @@ -16,11 +16,7 @@ Welcome to the KubeDB Platform's **Azure Marketplace** deployment! This guide wi ### Prerequisites -Before you begin, please ensure your Kubernetes cluster meets the following minimum system requirements: -* **Worker Nodes**: At least one dedicated worker node. -* **CPU**: 4–6 vCPUs. -* **Memory**: 16 GB of RAM. -* **Networking**: A routable IP address for external connectivity. +See [Prerequisites](common-config.md#prerequisites) in the Common Configuration guide for the minimum cluster requirements and the optional k3s setup note. ## Getting Started @@ -70,53 +66,17 @@ Put **Subscription ID**, **Tenant ID**, **Client ID** and **Client Secret** in t ### 4. Global Administrative Settings -These credentials define the primary super-user and the initial organizational structure. - -* **System Admin:** In this section, provide the administrator's following information. - - **Admin Account Display Name:** The display name for the administrator account. - - **Admin Account Email:** The email address for the administrator account. - - **Admin Account Password:** The password for the administrator account.You may manually set a password or leave it blank to allow the system to **auto-generate** a secure administrative password. - - **Initial Organization Name:** You can choose what will be the initial organization name for your account +See [Global Administrative Settings](common-config.md#global-administrative-settings) in the Common Configuration guide for the System Admin account fields (display name, email, password, and initial organization). For openshift cluster toggle Red Hat OpenShift cluster and give Kube API Server endpoint -
- - ### 5. Registry -KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. - -**Docker Registry:** Go to the docker registry section first then look for the following settings -* **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. -* **Helm Repositories:** In the helm repositories section put your helm repository url -If using private or authenticated registries, provide: -* **Credentials:** Username and Password. -* **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. -* **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry +See [Registry](common-config.md#registry) in the Common Configuration guide for Docker registry proxies, Helm repositories, credentials, certs, and image pull secrets. ### 6. Monitoring -Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. - -* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. - * **Enable Email:** Turns email notifications on or off. - * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. - * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. - * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. - * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. - * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. - * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. - * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. -* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. - * **Enable Webhook:** Turns webhook delivery on or off. - * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. - * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. - -
- - -> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. +See [Monitoring](common-config.md#monitoring) in the Common Configuration guide for Alertmanager email and webhook configuration. ### 7. Settings @@ -133,17 +93,7 @@ In this section you can enable or disable features. You can also create an init ### 9. Branding & UI Customization -Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. - -* **App Name:** Changes the browser tab title. -* **Primary Color:** Enter a Hex code (default: `#009948`). -* **Assets:** - * **Logo:** Upload a 200x30px image (SVG/PNG recommended). - * **Favicon:** Upload a 20KB icon file. -* **App Tag:** Toggle **"Show App Tag"** to display or hide the version/tagging info in the UI. - -
- +See [Branding & UI Customization](common-config.md#branding--ui-customization) in the Common Configuration guide to re-brand the platform interface. ### 10. Generate Installer and Documentation diff --git a/docs/platform/selfhost-setup/install/cloud-demo.md b/docs/platform/selfhost-setup/install/cloud-demo.md index 74cc5e6..2f3bf4c 100644 --- a/docs/platform/selfhost-setup/install/cloud-demo.md +++ b/docs/platform/selfhost-setup/install/cloud-demo.md @@ -5,7 +5,7 @@ menu: identifier: selfhost-cloud-demo-deployment name: Cloud Demo Deployment parent: selfhosted-installer - weight: 10 + weight: 2 menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- @@ -16,15 +16,7 @@ Welcome to the KubeDB Platform's "Cloud Demo" deployment! Follow these steps to ### Prerequisites -Before you begin, please ensure your Kubernetes cluster meets the following minimum system requirements: -* Worker Nodes: At least one dedicated worker node. -* CPU: 4–6 vCPUs. -* Memory: 16 GB of RAM. -* Networking: A routable IP address for external connectivity. - - - -You will get an instruction to deploy a k3s cluster in Ubuntu VM or you can skip this step if you already have a cluster. +See [Prerequisites](common-config.md#prerequisites) in the Common Configuration guide for the minimum cluster requirements and the optional k3s setup note. ### 1. Visit the AppsCode Self-Hosted Page @@ -44,110 +36,34 @@ Before beginning the installation, identify your target infrastructure and clust #### Additional configuration for EKS cluster -**Prerequisite:**
-* EBS CSI Driver must be installed -* AWS Load Balancer Controller must be installed - -Run the following command to get Kube API Server - -``` -aws eks describe-cluster --name --region --query "cluster.endpoint" --output text -``` - -**Run the following command to get Subnet IDs** -``` -aws ec2 describe-subnets --filters "Name=vpc-id,Values=$(aws eks describe-cluster --name --region --query "cluster.resourcesVpcConfig.vpcId" --output text)" "Name=map-public-ip-on-launch,Values=true" --region --query "Subnets[*].SubnetId" --output text -``` - -**Subnet IDs:** Make sure you have added the allocation id of Target IP as well. Run the following command to create EIP Allocation IDs `aws ec2 allocate-address --region ` - -**EIP Allocation IDs:** Give EIP allocation IDs for your public subnets. +See [Additional configuration for EKS cluster](common-config.md#additional-configuration-for-eks-cluster) in the Common Configuration guide for the EBS CSI / AWS Load Balancer Controller prerequisites and the commands to fetch the Kube API server endpoint, subnet IDs, and EIP allocation IDs. ### 3. Global Administrative Settings -These credentials define the primary super-user and the initial organizational structure. - -* **System Admin:** In this section, provide the administrator's following information. - - **Admin Account Display Name:** The display name for the administrator account. - - **Admin Account Email:** The email address for the administrator account. - - **Admin Account Password:** The password for the administrator account. You may manually set a password or leave it blank to allow the system to **auto-generate** a secure administrative password. - - **Initial Organization Name:** You can choose what will be the initial organization name for your account - -
- +See [Global Administrative Settings](common-config.md#global-administrative-settings) in the Common Configuration guide for the System Admin account fields (display name, email, password, and initial organization). ### 4. Registry -KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. - -**Docker Registry:** Go to the docker registry section first then look for the following settings -* **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. -* **Helm Repositories:** In the helm repositories section put your helm repository url -If using private or authenticated registries, provide: -* **Credentials:** Username and Password. -* **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. -* **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry +See [Registry](common-config.md#registry) in the Common Configuration guide for Docker registry proxies, Helm repositories, credentials, certs, and image pull secrets. ### 5. Monitoring -Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. - -* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. - * **Enable Email:** Turns email notifications on or off. - * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. - * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. - * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. - * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. - * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. - * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. - * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. -* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. - * **Enable Webhook:** Turns webhook delivery on or off. - * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. - * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. - -
- - -> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. +See [Monitoring](common-config.md#monitoring) in the Common Configuration guide for Alertmanager email and webhook configuration. ### 6. Settings #### Domain White List and Proxy Servers -* Add domain one by one for whitelisting -* **Proxy Servers:** If you have proxy servers then put **HTTP Proxy**, **HTTPS Proxy** and **No Proxy** -* Put Login and Logout URL for your app - -
- +See [Domain White List and Proxy Servers](common-config.md#domain-white-list-and-proxy-servers) in the Common Configuration guide for whitelisting domains, proxy servers, and login/logout URLs. ### 7. Ingress & Gateway -Configure how the application is exposed to the internet or your internal network. - -* **Ingress & Gateway:** Enable either the **Gateway API** or standard **Ingress**. - -
- +See [Ingress & Gateway](common-config.md#ingress--gateway) in the Common Configuration guide for exposing the platform via the Gateway API or standard Ingress. ### 8. Self Management -In this section you can enable or disable features - -
- +See [Self Management](common-config.md#self-management) in the Common Configuration guide to enable or disable platform features. ### 9. Branding & UI Customization -Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. - -* **App Name:** Changes the browser tab title. -* **Primary Color:** Enter a Hex code (default: `#009948`). -* **Assets:** - * **Logo:** Upload a 200x30px image (SVG/PNG recommended). - * **Favicon:** Upload a 20KB icon file. -* **App Tag:** Toggle **"Show App Tag"** to display or hide the version/tagging info in the UI. - -
- +See [Branding & UI Customization](common-config.md#branding--ui-customization) in the Common Configuration guide to re-brand the platform interface. ### 10. Generate Installer and Documentation diff --git a/docs/platform/selfhost-setup/install/k8s-app-demo.md b/docs/platform/selfhost-setup/install/common-config.md similarity index 55% rename from docs/platform/selfhost-setup/install/k8s-app-demo.md rename to docs/platform/selfhost-setup/install/common-config.md index 1190f2c..014054a 100644 --- a/docs/platform/selfhost-setup/install/k8s-app-demo.md +++ b/docs/platform/selfhost-setup/install/common-config.md @@ -2,57 +2,23 @@ layout: docs menu: docsplatform_{{.version}}: - identifier: selfhost-k8s-app-demo-deployment - name: K8s App Demo Deployment + identifier: selfhost-common-config + name: Common Configurations parent: selfhosted-installer - weight: 10 + weight: 1 menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- -# Deploying KubeDB Platform: K8s App Demo +# Common Configuration Sections -Welcome to the KubeDB Platform's "K8s App Demo" deployment! Follow these steps to deploy the KubeDB Platform in K8s App Demo mode. +Several configuration sections of the installer wizard are identical across all +Self-Hosted deployment modes. They are documented here once and referenced from +each mode-specific guide. Use the links in those guides to jump to the relevant +section below. -### Prerequisites +## Registry -Before you begin, please ensure your Kubernetes cluster meets the following minimum system requirements: -* Worker Nodes: At least one dedicated worker node. -* CPU: 4–6 vCPUs. -* Memory: 16 GB of RAM. -* Networking: A routable IP address for external connectivity. - - -You will get an instruction to deploy a k3s cluster in Ubuntu VM or you can skip this step if you already have a cluster. - -### 1. Visit the AppsCode Self-Hosted Page - -Navigate to [AppsCode Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
-Click on the `Create New Installer` button to get started. - -### 2. Choose Deployment Mode - -Choose `Deployment Type` -> `K8s App Demo` and give it a name in the installer name section. - -Before beginning the installation, identify your target infrastructure and cluster type. - -* **DNS & Connectivity:** - * **Enable DNS:** Toggle this to allow the installer to manage or integrate with your DNS provider. - * **Target IP:** Provide the static IP addresses for your cluster nodes or load balancer. -* **Cluster Type:** Determine if you are installing on **Red Hat OpenShift Cluster**. -### 3. Global Administrative Settings -These credentials define the primary super-user and the initial organizational structure. - -* **System Admin:** In this section, provide the administrator's following information. - - **Admin Account Display Name:** The display name for the administrator account. - - **Admin Account Email:** The email address for the administrator account. - - **Admin Account Password:** The password for the administrator account.You may manually set a password or leave it blank to allow the system to **auto-generate** a secure administrative password. - - **Initial Organization Name:** You can choose what will be the initial organization name for your account - -
- - -### 4. Registry KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. **Docker Registry:** Go to the docker registry section first then look for the following settings @@ -63,7 +29,7 @@ If using private or authenticated registries, provide: * **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. * **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry -### 5. Monitoring +## Monitoring Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. @@ -86,25 +52,37 @@ Use the **Monitoring** section to configure Alertmanager notifications for platf > **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. +## TLS -### 6. Settings +Configure TLS certificates for secure communication. You can choose the Issuer type from the following list. + * **External**: Use this if you already have certificates from an external provider. + * CA CERT: Paste the Certificate Authority certificate. + * Certificate CERT: Paste the certificate issued for your domain. + * Certificate Key: Paste the private key associated with the certificate. -#### Domain White List and Proxy Servers + * **CA:** Use this if you want AppsCode to manage your certificates with its internal CA. + * CA CERT: Paste the internal CA certificate. + * CA Key: Paste the internal CA key. -* Add domain one by one for whitelisting -* **Proxy Servers:** If you have proxy servers then put **HTTP Proxy**, **HTTPS Proxy** and **No Proxy** -* Put Login and Logout URL for your app +## NATS -
- +Configure NATS, which is used as the internal messaging system for the platform. + +**Expose Via:** + Choose how NATS will be exposed: -### 7. Self Management -In this section you can enable or disable features + * **HostPort:** Exposes NATS directly on the node’s network interface. + + * **Node Selector:** Specify the node label (Key and Value) to control where NATS will be scheduled. + * **Ingress:** Use this option to expose NATS externally via an ingress controller. +**Replicas:** For production, ensure at least 1 replica is active (consider 3 for high availability). +**Resources:** Configure CPU Requests, CPU Limits, Memory Request and Memory Limit
- + + +## Branding & UI Customization -### 8. Branding & UI Customization Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. * **App Name:** Changes the browser tab title. @@ -117,23 +95,73 @@ Administrators can globally re-brand the KubeDB Platform interface to match corp
-### 9. Generate Installer and Documentation -Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. +## Prerequisites -### 10. Deploy KubeDB Platform +Before you begin, please ensure your Kubernetes cluster meets the following minimum system requirements: +* **Worker Nodes**: At least one dedicated worker node. +* **CPU**: 4–6 vCPUs. +* **Memory**: 16 GB of RAM. +* **Networking**: A routable IP address for external connectivity. -Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your system. +You will get an instruction to deploy a k3s cluster in Ubuntu VM, or you can skip this step if you already have a cluster. -### 11. Explore the Deployed Platform +## Global Administrative Settings -Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process. +These credentials define the primary super-user and the initial organizational structure. + +* **System Admin:** In this section, provide the administrator's following information. + - **Admin Account Display Name:** The display name for the administrator account. + - **Admin Account Email:** The email address for the administrator account. + - **Admin Account Password:** The password for the administrator account. You may manually set a password or leave it blank to allow the system to **auto-generate** a secure administrative password. + - **Initial Organization Name:** You can choose what will be the initial organization name for your account
- + + +## Additional configuration for EKS cluster + +**Prerequisite:** +* EBS CSI Driver must be installed +* AWS Load Balancer Controller must be installed -## Get Support +Run the following command to get the Kube API Server and put it in the API server field: -If you encounter any challenges during the deployment or have questions, reach out to AppsCode support for assistance. +``` +aws eks describe-cluster --name --region --query "cluster.endpoint" --output text +``` -Congratulations! You have successfully deployed the KubeDB Platform in K8s App Demo mode. Explore the features and capabilities of the platform in your customized environment. +Run the following command to get the Subnet IDs and add them: + +``` +aws ec2 describe-subnets --filters "Name=vpc-id,Values=$(aws eks describe-cluster --name --region --query "cluster.resourcesVpcConfig.vpcId" --output text)" "Name=map-public-ip-on-launch,Values=true" --region --query "Subnets[*].SubnetId" --output text +``` + +**Subnet IDs:** Make sure you have added the allocation id of Target IP as well. Run the following command to create EIP Allocation IDs `aws ec2 allocate-address --region ` + +**EIP Allocation IDs:** Give EIP allocation IDs for your public subnets. + +## Domain White List and Proxy Servers + +* Add domain one by one for whitelisting +* **Proxy Servers:** If you have proxy servers then put **HTTP Proxy**, **HTTPS Proxy** and **No Proxy** +* Put Login and Logout URL for your app + +
+ + +## Ingress & Gateway + +Configure how the application is exposed to the internet or your internal network. + +* **Ingress & Gateway:** Enable either the **Gateway API** or standard **Ingress**. + +
+ + +## Self Management + +In this section you can enable or disable features. + +
+ diff --git a/docs/platform/selfhost-setup/install/onprem-demo.md b/docs/platform/selfhost-setup/install/onprem-demo.md index 1454c87..892477a 100644 --- a/docs/platform/selfhost-setup/install/onprem-demo.md +++ b/docs/platform/selfhost-setup/install/onprem-demo.md @@ -5,7 +5,7 @@ menu: identifier: selfhost-onprem-demo-deployment name: Onprem Demo Deployment parent: selfhosted-installer - weight: 10 + weight: 3 menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- @@ -16,13 +16,7 @@ Welcome to the KubeDB Platform's "Onprem Demo" deployment! Follow these steps to ### Prerequisites -Before you begin, please ensure your Kubernetes cluster meets the following minimum system requirements: -* Worker Nodes: At least one dedicated worker node. -* CPU: 4–6 vCPUs. -* Memory: 16 GB of RAM. -* Networking: A routable IP address for external connectivity. - -You will get an instruction to deploy a k3s cluster in Ubuntu VM or you can skip this step if you already have a cluster. +See [Prerequisites](common-config.md#prerequisites) in the Common Configuration guide for the minimum cluster requirements and the optional k3s setup note. ### 1. Visit the AppsCode Self-Hosted Page @@ -40,118 +34,38 @@ Before beginning the installation, identify your target infrastructure and clust * **Target IP:** Provide the static IP addresses for your cluster nodes or load balancer. * **Cluster Type:** Determine if you are installing on **Red Hat OpenShift Cluster**. ### 3. Global Administrative Settings -These credentials define the primary super-user and the initial organizational structure. - -* **System Admin:** In this section, provide the administrator's following information. - - **Admin Account Display Name:** The display name for the administrator account. - - **Admin Account Email:** The email address for the administrator account. - - **Admin Account Password:** The password for the administrator account.You may manually set a password or leave it blank to allow the system to **auto-generate** a secure administrative password. - - **Initial Organization Name:** You can choose what will be the initial organization name for your account - -
- +See [Global Administrative Settings](common-config.md#global-administrative-settings) in the Common Configuration guide for the System Admin account fields (display name, email, password, and initial organization). ### 4. Registry -KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. - -**Docker Registry:** Go to the docker registry section first then look for the following settings -* **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. -* **Helm Repositories:** In the helm repositories section put your helm repository url -If using private or authenticated registries, provide: -* **Credentials:** Username and Password. -* **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. -* **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry +See [Registry](common-config.md#registry) in the Common Configuration guide for Docker registry proxies, Helm repositories, credentials, certs, and image pull secrets. ### 5. Monitoring -Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. - -* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. - * **Enable Email:** Turns email notifications on or off. - * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. - * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. - * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. - * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. - * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. - * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. - * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. -* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. - * **Enable Webhook:** Turns webhook delivery on or off. - * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. - * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. - -
- - -> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. +See [Monitoring](common-config.md#monitoring) in the Common Configuration guide for Alertmanager email and webhook configuration. ### 6. Settings #### Domain White List and Proxy Servers -* Add domain one by one for whitelisting -* **Proxy Servers:** If you have proxy servers then put **HTTP Proxy**, **HTTPS Proxy** and **No Proxy** -* Put Login and Logout URL for your app - -
- +See [Domain White List and Proxy Servers](common-config.md#domain-white-list-and-proxy-servers) in the Common Configuration guide for whitelisting domains, proxy servers, and login/logout URLs. ### 7. TLS -Configure TLS certificates for secure communication. You can choose the Issuer type from the following list. - * **External**: Use this if you already have certificates from an external provider. - * CA CERT: Paste the Certificate Authority certificate. - * Certificate CERT: Paste the certificate issued for your domain. - * Certificate Key: Paste the private key associated with the certificate. - - * **CA:** Use this if you want AppsCode to manage your certificates with its internal CA. - * CA CERT: Paste the internal CA certificate. - * CA Key: Paste the internal CA key. +See [TLS](common-config.md#tls) in the Common Configuration guide for configuring the certificate issuer (External or CA). ### 8. Ingress & Gateway -Configure how the application is exposed to the internet or your internal network. - -* **Ingress & Gateway:** Enable either the **Gateway API** or standard **Ingress**. - -
- +See [Ingress & Gateway](common-config.md#ingress--gateway) in the Common Configuration guide for exposing the platform via the Gateway API or standard Ingress. ### 9. NATS -Configure NATS, which is used as the internal messaging system for the platform. - -**Expose Via:** - Choose how NATS will be exposed: - - * **HostPort:** Exposes NATS directly on the node’s network interface. - - * **Node Selector:** Specify the node label (Key and Value) to control where NATS will be scheduled. - * **Ingress:** Use this option to expose NATS externally via an ingress controller. -**Replicas:** For production, ensure at least 1 replica is active (consider 3 for high availability). -**Resources:** Configure CPU Requests, CPU Limits, Memory Request and Memory Limit - -
- +See [NATS](common-config.md#nats) in the Common Configuration guide for configuring the internal messaging system (expose method, replicas, and resources). ### 10. Self Management -In this section you can enable or disable features - -
- +See [Self Management](common-config.md#self-management) in the Common Configuration guide to enable or disable platform features. ### 11. Branding & UI Customization -Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. - -* **App Name:** Changes the browser tab title. -* **Primary Color:** Enter a Hex code (default: `#009948`). -* **Assets:** - * **Logo:** Upload a 200x30px image (SVG/PNG recommended). - * **Favicon:** Upload a 20KB icon file. -* **App Tag:** Toggle **"Show App Tag"** to display or hide the version/tagging info in the UI. - -
- +See [Branding & UI Customization](common-config.md#branding--ui-customization) in the Common Configuration guide to re-brand the platform interface. ### 12. Generate Installer and Documentation diff --git a/docs/platform/selfhost-setup/install/openshift-demo.md b/docs/platform/selfhost-setup/install/openshift-demo.md index 28f0eb4..b95e8e4 100644 --- a/docs/platform/selfhost-setup/install/openshift-demo.md +++ b/docs/platform/selfhost-setup/install/openshift-demo.md @@ -5,7 +5,7 @@ menu: identifier: selfhost-openshift-demo name: Open Shift Demo parent: selfhosted-installer - weight: 10 + weight: 4 menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- @@ -16,11 +16,7 @@ Welcome to the KubeDB Platform's **Open Shift Demo** deployment! In this mode, y ### Prerequisites -Before you begin, please ensure your Kubernetes cluster meets the following minimum system requirements: -* **Worker Nodes**: At least one dedicated worker node. -* **CPU**: 4–6 vCPUs. -* **Memory**: 16 GB of RAM. -* **Networking**: A routable IP address for external connectivity. +See [Prerequisites](common-config.md#prerequisites) in the Common Configuration guide for the minimum cluster requirements and the optional k3s setup note. ### 1. Visit the AppsCode Self-Hosted Page @@ -39,116 +35,39 @@ Before beginning the installation, identify your target infrastructure and clust ### 3. Global Administrative Settings -These credentials define the primary super-user and the initial organizational structure. - -* **System Admin:** In this section, provide the administrator's following information. - - **Admin Account Display Name:** The display name for the administrator account. - - **Admin Account Email:** The email address for the administrator account. - - **Admin Account Password:** The password for the administrator account.You may manually set a password or leave it blank to allow the system to **auto-generate** a secure administrative password. - - **Initial Organization Name:** You can choose what will be the initial organization name for your account +See [Global Administrative Settings](common-config.md#global-administrative-settings) in the Common Configuration guide for the System Admin account fields (display name, email, password, and initial organization). For openshift cluster toggle Red Hat OpenShift cluster and give Kube API Server endpoint ### 4. Registry -KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. - -**Docker Registry:** Go to the docker registry section first then look for the following settings -* **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. -* **Helm Repositories:** In the helm repositories section put your helm repository url -If using private or authenticated registries, provide: -* **Credentials:** Username and Password. -* **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. -* **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry +See [Registry](common-config.md#registry) in the Common Configuration guide for Docker registry proxies, Helm repositories, credentials, certs, and image pull secrets. ### 5. Monitoring -Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. - -* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. - * **Enable Email:** Turns email notifications on or off. - * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. - * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. - * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. - * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. - * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. - * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. - * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. -* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. - * **Enable Webhook:** Turns webhook delivery on or off. - * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. - * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. - -
- - -> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. +See [Monitoring](common-config.md#monitoring) in the Common Configuration guide for Alertmanager email and webhook configuration. ### 6. Settings #### Domain White List and Proxy Servers -* Add domain one by one for whitelisting -* **Proxy Servers:** If you have proxy servers then put **HTTP Proxy**, **HTTPS Proxy** and **No Proxy** -* Put Login and Logout URL for your app - -
- +See [Domain White List and Proxy Servers](common-config.md#domain-white-list-and-proxy-servers) in the Common Configuration guide for whitelisting domains, proxy servers, and login/logout URLs. ### 7. TLS -Configure TLS certificates for secure communication. You can choose the Issuer type from the following list. - * **External**: Use this if you already have certificates from an external provider. - * CA CERT: Paste the Certificate Authority certificate. - * Certificate CERT: Paste the certificate issued for your domain. - * Certificate Key: Paste the private key associated with the certificate. - - * **CA:** Use this if you want AppsCode to manage your certificates with its internal CA. - * CA CERT: Paste the internal CA certificate. - * CA Key: Paste the internal CA key. +See [TLS](common-config.md#tls) in the Common Configuration guide for configuring the certificate issuer (External or CA). ### 8. Ingress & Gateway -Configure how the application is exposed to the internet or your internal network. - -* **Ingress & Gateway:** Enable either the **Gateway API** or standard **Ingress**. - -
- +See [Ingress & Gateway](common-config.md#ingress--gateway) in the Common Configuration guide for exposing the platform via the Gateway API or standard Ingress. ### 9. NATS -Configure NATS, which is used as the internal messaging system for the platform. - -**Expose Via:** - Choose how NATS will be exposed: - - * **HostPort:** Exposes NATS directly on the node’s network interface. - - * **Node Selector:** Specify the node label (Key and Value) to control where NATS will be scheduled. - * **Ingress:** Use this option to expose NATS externally via an ingress controller. -**Replicas:** For production, ensure at least 1 replica is active (consider 3 for high availability). -**Resources:** Configure CPU Requests, CPU Limits, Memory Request and Memory Limit - -
- +See [NATS](common-config.md#nats) in the Common Configuration guide for configuring the internal messaging system (expose method, replicas, and resources). ### 10. Self Management -In this section you can enable or disable features - -
- +See [Self Management](common-config.md#self-management) in the Common Configuration guide to enable or disable platform features. ### 11. Branding & UI Customization -Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. - -* **App Name:** Changes the browser tab title. -* **Primary Color:** Enter a Hex code (default: `#009948`). -* **Assets:** - * **Logo:** Upload a 200x30px image (SVG/PNG recommended). - * **Favicon:** Upload a 20KB icon file. -* **App Tag:** Toggle **"Show App Tag"** to display or hide the version/tagging info in the UI. - -
- +See [Branding & UI Customization](common-config.md#branding--ui-customization) in the Common Configuration guide to re-brand the platform interface. ### 12. Generate Installer and Documentation diff --git a/docs/platform/selfhost-setup/install/selfhosted-production.md b/docs/platform/selfhost-setup/install/selfhosted-production.md index 9d5b472..8030c42 100644 --- a/docs/platform/selfhost-setup/install/selfhosted-production.md +++ b/docs/platform/selfhost-setup/install/selfhosted-production.md @@ -5,7 +5,7 @@ menu: identifier: selfhost-prod-deployment name: Production Deployment parent: selfhosted-installer - weight: 10 + weight: 5 menu_name: docsplatform_{{.version}} section_menu_id: selfhost-setup --- @@ -30,14 +30,7 @@ This guide provides a structured approach to deploying the platform manually. We > **Note:** Ensure your infrastructure meets the minimum system requirements before proceeding to the configuration steps. -Before you begin, please ensure your Kubernetes cluster meets the following minimum system requirements: -* **Worker Nodes**: At least one dedicated worker node. -* **CPU**: 4–6 vCPUs. -* **Memory**: 16 GB of RAM. -* **Networking**: A routable IP address for external connectivity. - - -You will get an instruction to deploy a k3s cluster in Ubuntu VM or you can skip this step if you already have a cluster +See [Prerequisites](common-config.md#prerequisites) in the Common Configuration guide for the minimum cluster requirements and the optional k3s setup note. ### 1. Visit the AppsCode Self-Hosted Page @@ -61,25 +54,7 @@ Before beginning the installation, identify your target infrastructure and clust ### Additional configuration for EKS cluster -**Prerequisite:**
-* EBS CSI Driver must be installed -* AWS Load Balancer Controller must be installed - -Run the following command to get Kube API Server put it in the API server field - -``` -aws eks describe-cluster --name --region --query "cluster.endpoint" --output text -``` - -Run the following command to get Subnet IDs and add them - -``` -aws ec2 describe-subnets --filters "Name=vpc-id,Values=$(aws eks describe-cluster --name --region --query "cluster.resourcesVpcConfig.vpcId" --output text)" "Name=map-public-ip-on-launch,Values=true" --region --query "Subnets[*].SubnetId" --output text -``` - -**Subnet IDs:** Make sure you have added the allocation id of Target IP as well. Run the following command to create EIP Allocation IDs `aws ec2 allocate-address --region ` - -**EIP Allocation IDs:** Give EIP allocation IDs for your public subnets. +See [Additional configuration for EKS cluster](common-config.md#additional-configuration-for-eks-cluster) in the Common Configuration guide for the EBS CSI / AWS Load Balancer Controller prerequisites and the commands to fetch the Kube API server endpoint, subnet IDs, and EIP allocation IDs. ### Configuring AWS credentialless mode @@ -193,16 +168,7 @@ aws eks associate-access-policy \ Provide the output role arn as Ace Installer Role ARN `echo $ROLE_ARN`in the **Ace Installer Role ARN** field. ### 3. Global Administrative Settings -These credentials define the primary super-user and the initial organizational structure. - -* **System Admin:** In this section, provide the administrator's following information. - - **Admin Account Display Name:** The display name for the administrator account. - - **Admin Account Email:** The email address for the administrator account. - - **Admin Account Password:** The password for the administrator account.You may manually set a password or leave it blank to allow the system to **auto-generate** a secure administrative password. - - **Initial Organization Name:** You can choose what will be the initial organization name for your account - -
- +See [Global Administrative Settings](common-config.md#global-administrative-settings) in the Common Configuration guide for the System Admin account fields (display name, email, password, and initial organization). ### 4. Release Define the specific Kubernetes namespace and release information for the KubeDB Platform components. @@ -212,15 +178,7 @@ Define the specific Kubernetes namespace and release information for the KubeDB * **Namespace Automation:** Toggle **"Create namespaces during Helm install"** if you want the installer to handle namespace lifecycle management. ### 5. Registry -KubeDB Platform requires access to various container registries and Helm repositories to pull necessary images and charts. - -**Docker Registry:** Go to the docker registry section first then look for the following settings -* **Proxies:** Put registry name for Appscode `r.appscode.com` and other Public Registries like Docker Hub, GitHub Container Registry (`ghcr.io`), Kubernetes Registry, Microsoft (`mcr.microsoft.com`), and Quay. -* **Helm Repositories:** In the helm repositories section put your helm repository url -If using private or authenticated registries, provide: -* **Credentials:** Username and Password. -* **Certs:** Upload CA Cert, Client Cert, and Client Key if required for mutual TLS. -* **Image Pull Secrets:** Define the secrets used by the cluster to authenticate with the registries. You can enable create namespace during helm install, allow nondistributable artifacts and insecure option for insecure registry +See [Registry](common-config.md#registry) in the Common Configuration guide for Docker registry proxies, Helm repositories, credentials, certs, and image pull secrets. ### 6. Settings This secton is for Persistence & Resource Allocation. Properly sizing your resources is critical for production stability. Configure CPU Requests, CPU Limits, Memory Request and Memory Limit for both cache and Database @@ -234,12 +192,7 @@ This secton is for Persistence & Resource Allocation. Properly sizing your resou #### Domain White List and Proxy Servers -* Add domain one by one for whitelisting -* **Proxy Servers:** If you have proxy servers then put **HTTP Proxy**, **HTTPS Proxy** and **No Proxy** -* Put Login and Logout URL for your app - -
- +See [Domain White List and Proxy Servers](common-config.md#domain-white-list-and-proxy-servers) in the Common Configuration guide for whitelisting domains, proxy servers, and login/logout URLs. #### KubeStash @@ -251,26 +204,7 @@ KubeDB Platform uses **KubeStash** for automated backups and disaster recovery. ### 7. Monitoring -Use the **Monitoring** section to configure Alertmanager notifications for platform alerts for the site admin. - -* **Alert Manager Email:** Enable email notifications for Alertmanager alerts. - * **Enable Email:** Turns email notifications on or off. - * **To:** The recipient email address. For Gmail, you can also use plus addressing such as `user+alerts@example.com`. - * **From:** The sender email address shown in the message. For Gmail, use the same address as **Auth Username** unless you have configured a verified alias. - * **Smarthost:** The SMTP server address. For Gmail, use `smtp.gmail.com:587`. - * **Auth Username:** The SMTP login username. For Gmail, this should be the real Gmail or Google Workspace mailbox used to authenticate. - * **Password:** The SMTP password. For Gmail, use an App Password generated from `https://myaccount.google.com/apppasswords`. - * **Require TLS:** Enables TLS for the SMTP connection. Leave this enabled for Gmail. - * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. -* **Alert Manager Webhook:** Send alerts to an endpoint that accepts Alertmanager's generic webhook payload. - * **Enable Webhook:** Turns webhook delivery on or off. - * **URL:** The destination webhook URL. Some systems embed the secret directly in the URL. - * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state. - -
- - -> **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. +See [Monitoring](common-config.md#monitoring) in the Common Configuration guide for Alertmanager email and webhook configuration. ### 8. Infra @@ -289,47 +223,17 @@ Use the **Monitoring** section to configure Alertmanager notifications for platf * **letsencrypt-staging:** Use this for testing your installation ### 9. Ingress & Gateway -Configure how the application is exposed to the internet or your internal network. - -* **Ingress & Gateway:** Enable either the **Gateway API** or standard **Ingress**. - -
- +See [Ingress & Gateway](common-config.md#ingress--gateway) in the Common Configuration guide for exposing the platform via the Gateway API or standard Ingress. ### 10. NATS -Configure NATS, which is used as the internal messaging system for the platform. - -**Expose Via:** - Choose how NATS will be exposed: - - * **HostPort:** Exposes NATS directly on the node’s network interface. - - * **Node Selector:** Specify the node label (Key and Value) to control where NATS will be scheduled. - * **Ingress:** Use this option to expose NATS externally via an ingress controller. -**Replicas:** For production, ensure at least 1 replica is active (consider 3 for high availability). -**Resources:** Configure CPU Requests, CPU Limits, Memory Request and Memory Limit - -
- +See [NATS](common-config.md#nats) in the Common Configuration guide for configuring the internal messaging system (expose method, replicas, and resources). ### 11. Self Management -In this section you can enable or disable features -
- +See [Self Management](common-config.md#self-management) in the Common Configuration guide to enable or disable platform features. ### 12. Branding & UI Customization -Administrators can globally re-brand the KubeDB Platform interface to match corporate identity. - -* **App Name:** Changes the browser tab title. -* **Primary Color:** Enter a Hex code (default: `#009948`). -* **Assets:** - * **Logo:** Upload a 200x30px image (SVG/PNG recommended). - * **Favicon:** Upload a 20KB icon file. -* **App Tag:** Toggle **"Show App Tag"** to display or hide the version/tagging info in the UI. - -
- +See [Branding & UI Customization](common-config.md#branding--ui-customization) in the Common Configuration guide to re-brand the platform interface. ### 13. Generate Installer and Documentation From c42424b396ba3541f1632845df2a65f27718a8bf Mon Sep 17 00:00:00 2001 From: Arnob Kumar Saha Date: Sun, 14 Jun 2026 05:38:10 +0600 Subject: [PATCH 09/19] Add selfhost doc for openshift Signed-off-by: Arnob Kumar Saha --- .../images/ip-reconfigure-openshift.png | Bin 0 -> 489866 bytes .../selfhost-setup/install/cloud-demo.md | 2 + .../selfhost-setup/install/onprem-demo.md | 3 + .../install/openshift-cluster.md | 113 ++++++++++++++++++ .../selfhost-setup/install/openshift-demo.md | 82 ------------- .../install/selfhosted-production.md | 2 +- 6 files changed, 119 insertions(+), 83 deletions(-) create mode 100644 docs/platform/selfhost-setup/images/ip-reconfigure-openshift.png create mode 100644 docs/platform/selfhost-setup/install/openshift-cluster.md delete mode 100644 docs/platform/selfhost-setup/install/openshift-demo.md diff --git a/docs/platform/selfhost-setup/images/ip-reconfigure-openshift.png b/docs/platform/selfhost-setup/images/ip-reconfigure-openshift.png new file mode 100644 index 0000000000000000000000000000000000000000..2eb05459185268141dadebc39692677d39381da9 GIT binary patch literal 489866 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
MdPf7ZojP&spR&!f0w9P?rWjus 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%0DZTdR7}(!CoulHN^5yk-fB_(_#~0&8r9uc+vK$ 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%0DCUIBZaHDU=+(tEnV>t9;Xch5~d1 z;w>ji+uwPeFD1Ye*glq`#49d?-vMlQC;l%1EQzC=Yb($;G$W~Xj*2jLySnmu`5^x7%K$w zWJ#kvBd(dZPf+G;lEFyTtH~}t4xOiN=-q8@71QgQC;Yf#>u3@%YmHpdv7WC^{q?Li zmAxYD{z<0^MO`#r%zfYGh7&=>u8~<-a5NZ+!XfBmaU$#!s&dB)5DnDgJM9dit{)Kop&m z2C3s)OLoexT}v%5X{|wfZhi)~jh>@voH4~PFH54}F|F{++`SwL5#AYKdQL1vsm(e# zj${_dtg;PeQKMJkg4WrRG2lK+W#aB@2%jQbg_jXQvX15gbKVEp$B0^$NyIZcbuO=o z9(WGb(K#U>(T^AnG>?zNH{}%yixEG$?g3}|2 zaIU5V!#((GDZ^qF$*~9Xg?4jdDUKTxu{lxHWsWsnJ0d!%o6Gac`9(>#_1k^Q#bn9H z<+8PJR*GsCH;|chX~_^spPbBATHc}X<;6jEitD(iB6q!wu1#g^Yt#zMz5laXImpgO zONi=%t!1~4kwefcUnI%!QXfdUIOHNuIjV^Hg65KJ>mJW|&7lHI?E8e)6rYhAvKH2D zgjL3&8K={srKBEH@7`Svt>TP(4FQ6vJ9|GbWESDE+PdP67b`&hUTHB666BGz*mAba zgg=}5D$S=V+llzJ1)%Cb*fuW-tp8A;qbhrM`todQ4xPH1Xi>yB*KqLJV=ak=6`yEcKz4%6u{Hnp~UPOO!(~-TWXln(@S}Js>V0A*Dr85twaSY+!i%p>LPd? zg#~|RwfE_Lqk(5QERR!`|9!y+0FR313WqpfbX!%=9G}klUfT8wZ-P1;hpy~$NC^KA ztmA)}Ps{ujYeB7I_WrlvmS8O}N%;(2MqJj9L?AK1aH9<8He7+6tD1~CdK>k1W(e>E zjw?d=|JfF=e(eu`VyCgcY5iL!%qr1>3kpDRl^!JaiUN*9i~c?A{VmDg>-&eTKmnFM zE+J#~_v+J99FSy<`gImlU(_P^q9FFutHs#AaNvKu`#(RCJM~Hu8nx!Szk-x^EpM?^ zUr8;A(@k>u9A84fD$YrT0xA+>>zGzRGMRh0g#F6}|Jzj(ky8WIhrgMX>hGl+PXoEn zILI>jDlKEcgo^vjqv|8;FZjOx{>Z;uY$q@9z$Kw$)%xEW@iV4{qk1+v)n|1g8@&3_ ztM7`%v=SDN#+wF4Q>_mV^(z5KCZBk&XT=Ye^>D^&gCU6(8+q(m9;>O=j5B%1jKA&U z-@J^mJ^_HOoMqjze{S#pNyNa;w4oY>A{~z{=^9ppxCSEfB2Aw~z-o#0Of`q0t&!+qz_UXTd{O7j! zugdgaL;indk^kQsvSbz>(>9IPtqVYWd2&v^x40Zoz zoW7+RfVqzMGd*MdPdLFXbOoZxr#l83|I2|Ol_aIi(yrlh{-=k~`w}t&z!cCzS%@JY z4H&Fu00NjU^4G7CpI_k)O7v0Sf5e@b7~s3ziHO<5{{?h_eD3ibVGqpz$A=J+GXMyy zfK~8A`M-ksC$#>rVE#aP{wtXO3I?#0|6-|u)lded3{2auo)hooZoA8Ya`V~;enSa*(ndGufUurNA2=^wXUTWU~!wy0K3w;vx_*NJ#OLy zT842EQEQPupQ!>Zc%cx3oE_k|Ej$70@($ii2|cw>f==_jL+w;`H=>TF zhQyAiW6&pE63pa{izLO02+y(l$)L@yn;y`My)H7%Cj$LEUDUBZqG<=^KE6sck5iV2 zS)T_OXYg(UP~&`7AKK7G>jg^jIhweY3S87(yXi=$4?V7*%d#$RteS5I+R8f?s+v)8 zOX@v}Qvr7eWCUDhJk|h48*;KB+iVUrPa%XzP>x%tt&bb?l7R?J*c=MSwSx*#qq zkr9hub5cDYra;ctrYxGP=0w zY~%KIJYpjD!iuMpfaGz$sz7{Y@WuFmLqY~tK;MJL`F6DtByao3Jl;V2?sJL#Z%lzk z?U*6Y2(&>p^L{pMZW|_DG;W}Vo$`Kht8L%}CEs|71hZ5^LxN4!M4j>&FseN%K|c{_ zo31C)x@+W4Z9@+d-fg)Veh<1IlcuTyDwS2py&SD>iUoN7s#b{w=V$RPJN1ZEf}Y01 zLOZn(9_L0v;FoX)`yof=rhW$^bEoS5U)TVBUlnLrz?Jh!rL(S#EMZBFVuA@W_5!+5 z*x=@~V@7ul_T2r7`K)?<<4oG-M#Ul+?<|nZJ0sznky+$pqIEhISk=8$RrhKlvZI*Q zIrLHWdU+b^&9i%6JGB-)QPiwJ7ty*#QmYT37;1pM=?v|ax~3OJ4BU3G1CC!=?D5E_ z+KOMyo5hYb?zo&Tm?oj|92f(Z+Jfzo3IuS*5O(MrUqM{L?m#lb1lxwa&LDdvQ}x8F zq>7a|J?%S~*yrI!7mO+Hi=lEeRAZTGl>kcIGa+o$5<1gmNw$}c*2XZwT8h)Nt*rpG z^?rbf3!WzZvHKmRWdpoj1Oy5p!Ik;bO1gws)hmpK+3plJ9~Ir6E+naU56Z{nS)-UhJZVH zb=^Eq1P_JGAL(ROZZyTyFU;#M_Iq&H8O*c>zJ10f?ydn!kQoW>ub$p3orbd) z>r*4v=!gmFPQNJxu`uK<<`Kc@%S`N{zPCsfuiii3Pm6Xb+>2Q*pZeIP9JTH!xus(AB=Ju8mDaQNn)z(yr!lGU8ihx#Kkg>0OT#s-YjlzN{Dzh znDKfs&$|sAa6S+${+t@!f+_xP)WB_~jOne~0xE(KZMWzeqn%i9;Lnp6Nq+0*NLj}NF1ga}HsbAy4Q$M{gN zEDtTvQUk|A3GQUX=D)UR+KaTiN9Qmc$b?U5zC!n6x1hS5To5QGK3L?`labxkG-u!~ ziXvEjCxd78T88kMEN$@IiJbi@a6lsK>D?fbS>VzDp$7g7#&KC^o?gBoKI-BrtBz*s zR|Gzz?y!)0pk<>8(}#dM4z8_dQ~60Ein}6qq>QlzdU-fWXZ0Xm$}(X7OCQ7APol=y zJ_UjsBp78Ei>zH&mQVFQ*fPy6Tb&y5oJTX594}nY1!fUx9ee8>btih!vk{9DQxm2a z8?C4((2QjnTAq>wAONukNl|GY=!w>m61d=`}q0AwI{Dzsk3puf>G zErLM#ptM=lv^z8HVwuHEci;rrjv9hi`d0;I@L@XN4@a|Jh=2#u)31_jv_b4av5hQg z-eo1S0dg!L4Q|P_dY}Xjw!;2_ufhjeBu-<+hz1Ma(YzlQENvNWR2*+}E3)y)rs!Rj zG{~+$9q2~GnixVU=}noEf-kNJZTB5>NKG)i3$*kZ+CQmpc1r8#3r?lr zZ1QenM0$wUK5-SrqST8ejC*hXLN^s3q{Fl?Biix43p7Sc8e1Y7&n1J(q(goAc}{@G z!?5_MfSq_wj?CcsytHwk;C+28%Jm%MNWx99J|c+9RuSkSvHhXb#^u8Xk_qbZSfVo_ z>Zx%|#uqKoj*xj$^+TRYt^|2;&`+k_Ou(|c#dKGyCOEbMypw>h2iGnG0>2$(V!wBG z2<9d7poEbmu13h0oN99_rAGUrX94qvMdVsYjUF~-E!{pjKd5cC8UHS-+86dh<{kK*b=PN6h$~Yq8>_sgF6;YVr7yM~c6nbz{Q)jq%9K*tliox&( z8osuH5!qPvc;!T7qKoK0-Q7n)k_KI`iA0SmYLU=SMb=}ZcTGXrBjuykVyy?An0$g8 zc>7+!jO~Zw80p25K7AtGOBA(KQK$`3l$nXwJHJk_Pe22E_-a>cqia%7uGW}K5+~{} zZ5)zrfaPaSUkpS9<(2Ye(6!ThLfI_oD6J)zd5J#*;AV4v&EQ0` zB4mY8ett+HALdi50YuJlwOvjaJZ*-98 z=<}$PsI&x))SE?#RhdlmlzdhY65aTc8N?yTn76caQ$N<&MsR;nUf|-d+V!%6h|g4t z`1e@Bn1C`n1nQDR^ z`APZ3YW0C}YrP>AN~gVLz1jV^iZ(nEK3U=(1&%JX+dLO^| ziTkVi#r+IJIipu_uV@Gmz7?x6&CM#us*Q=XT0+ zz_9(wTpoh7j7hEsb0dJfi~|HQ<_NYasy$sz$|XmQ8n*sO!M5x#kLMn{rD&&a)qJbq$M>p&>q~~_UX=!wb8k*$tg=; z<@vVUK*$IIGm6a6eZka`zWKHXa77IemJ|kPML`TWEdy?*=oPpt@NkD{6>Fz|UqRiv&`+zP$U9jCJgzFn| zfdM_efmK#)7&dR5MuDR!ov4Ls`mkY8gYw&(c&r7rrQcCN&OM`PpwOaCT&x?0O{5I%817@^czNF^ID9yI?pWPPX?+hBEjVgzK(??HZ}DE7^iw%- zvylW|^+j(W)=Csk-i`O#aa=(RDmhE;kWt{};^I84$V^}ztz%6`m4PHO`^o&Uy2LtI z8HtVQNTmn|la@)Y4uRbgT)QXlqN`M2@!R`Ou>Ds1ib{Pe`-TI^)kKa+=dlo-4-@>m zFD9*^cW%jTc@LcMh~)3Lpj&HnpPxYHPW#+Q&2Lz{BU9Q;u+M?;Gh(Lo5r5pCZmsLZ z`FgpjZ(LQJ%FH6OG*^z){)Q<2r3hZ;cD`->dNkGo zA;X~f6K2+P$J}BmQh;;g zA)Njg?sd&!P~fhD5q9{eVU6S-8mp-Nb_LC1k6!Ejp$`6)ThSaBR%Ru9@OnKF!ly!? zSkH%JKe(Myr3ju$4I>06yBp>{mbYu5O-Nj@KA99Gn9|gGBZe;-K14Ww2RHyV^rF7R zO3lm+ZznlWysvzu3VgToWb~Q=LzScs3(cXZ`H+1LN*Vk@``$HMSk$u z;GV=g8%JWgTd?b8?*uZLCpdN~Xku08!|{AHL1l|SGo#~&)htq6v>hVQR90=8IeVP< zU`-O*uX~F0(6!)qRUA7hUVU>J?&2c3Q22W8(3iK&xrX>uF={ zj+w(X)%R6=Hfz5u<{(7Sv8PE(g*Uj_w$s$pW7IQO;fv9y@5|fPpKC|#iczn3A|J`m z?!#IK_mD!lI431HFfX-H4=yUK%lBk1Y1l`r=OA8teUdXWa|sX{I?B~UZnRSuZ`Wh@ z>Q~8u7V&OsaMnYKe9tFzvFD@}kCz{t(eTK3I4M)Ce)LEaBIA47Z{*nhpyRRo+!7k# zGe%kmT}Do@%!TM;LMzO)L^^F2$(tiGjZagKqK~^CDp2**Gi_gX0hAUqR|D6ss5p?; zchnGiRPR3#+l6H`k*l7$poU$B!$tF#g|0n|zAfA`9W3!~NCHrOJbJPp(?QQ56V8Zx6AmuOby~qjCEE#n;#)*$4}>TZm|(-Y z$z`?76=>h*+$}T3%`hVKlZR6u>$={36fft(fX8;ufmqXyBX239oaYQSNqYqU%m@4G zgP|yRn=dcb;&w;kH7=aQeJ*4;mhxpDTwx~=`=dSv#VC)HL}8WLU____vo5^QEVrvQ1;et~P4O+CT>;GFcE!#5dT)5SEt@C9tC(<{Fdu%sWZJ{2*7y za;~Q+g}!F!(NkDF>LL@DS)A~W%VO&!sf&_;3Ptd>=p)f~0evnq*WEo_X{5dCBIDB* z24hp94g2BB3JTRuc{=}Y&o~~KFmfr*TPL0t7%``1QIW*KKX7aHmCD~7_I!qvM%N-Q|@;TN@$lDA*ON>(MI6Vm8-WYb+307wv(&5|a;A zfZBrRLITd#dXILfS?dPKBcvtj=(dR#Clbc@0h*s0X?Sw5K!+M}6#7IfV^0Bd6FnnD z32(faoOPs&bqdrvTZ0|$42$K$N zmXE54`B}2dIyl%Necg}c+izV8li9oyK)uG$7j4^KhSSM)T5Q{OP^iR}qsoi*YPaWpOuRea-V zP}#Wr#6Mt3EUOqS5R{m6p`=zv6s10C#e@ho@Kw4rFH zZZ`}1L@WE?Ea2#&IA8ZtUQh6}M*X%3qM@AiQp<(r^y>+@wuq_Ey~~nB!l$SXe_S{4 zAQ>q7_(n578JUehK8`d3(B{Qe2SHqM>93}9?mq12*y-{IapYSvA3EROBc@S(&Cz_Z z-_cG*Od66-e(`cpKwmXAmgQV14PUyNm`~o@JG3W$ML$i67F4<7|9K&5P95{d0XI`) z}&IgDm0yswODh-~rd16jx;&&KhGAlegV&%*Q=`o&I>jmhO)*30X&l6J$*m9|Vxrw#3yO zbSrJ>!?}pr!AJ1Twz71dG^|gwlHUI2j~AJ?d93`+bp~gOH?w+M9F;&lVIkKw@#0QO zXcZ_JiW9H36X}XtGgy9p!)*c!d{>eX^eyyU_S(&U?U=XITydhNq3hZ)6+%fs$hd4% zab2{Z$M-p@*Ye&mkUNVri<>RRVlQ2uH(# zD)Wge=q=0>k1S?k0bkRzDfxA=i$ObCGZUMoEI~)P@6U*;+c5A@wuav=zB3&`*wAdO z!EB#B%rWTJt5l7Bf*)-CW)o)??L%r540lhJKPKMo`h+_=$67q>^I`L$LSjziebDwT zQvhD0bUul|dHZ$kUz!Q|omq5NU|+|;AEPA~`2%k9q+@Ac?2#pg5WsTpYt;DJEA zMJ+QgN!7+HLr46B^$;VjfHkJ3p|=l+!-UWTWI@L7*Fvgb?hc?pN=M&B{Lf9M&n6qKRhu^A-KVxibL%qJxBqoi0PX? zY?TNIKdqO=g0MDwTgpiQ6NgY+7j-GNF*?Zd8m@g}6F!6ocsU0aaH|Nkzg}6m;E62k zfi3Mx-CU!?VC=+p_h-_oC51Wo)sKEjgtN7F0tz4f8H}CG^^%8 zn>XtZ&}7+0DPtMP=#zIL4WA7o(bpS*0YM^G<)OhqP(>i_o-R5hkhQZg^Kp$zM<>4P zL}tP2CmrGmR;MLzNnG#=3}Ol%%Dl^?PPi?MdOhg{C-m`}l$-3iNbJ59sgIc<8izrl z@_CNjVb9limadBnbyK_@yUU%VNPXZNFDc#o=cgIP%FVYGXs%V;GgQ1v+annKhM5Y! zw@g!!CqZsff4ZGhw1if|oId>$Q%4Zq;z5@h)%lYu&S2QiA=wj#rd(ogIHteID#TS8 zSSU_1f@2=aG*}o@#5(BL#57Nf6zPvSM2M?4P?gca9ucA3chdI1T=m;>k6yKtS__$a z-XD;-;)-~IVJm;*0GPRb6J+VwtG~58yGzfLNY}$7cV^m>{B_8l$Acd@pziTB+M0Wy zo*#(*2x|8Cw)_Mj6O0J9tj|Bt2O;LE9^kM0*ROWZ#{<2OGOn zh3V1P_Y>a0SsV{GgY3hVVq8aE_U&D!7;YP1s{*|>+x;LlUbagg#U5u-Kq=dcimjGu z|9byH43P^gw7JB)Q_RdIpdu(->1H1fb`n?NJx0<1=-n2#O~%N8O(59(68zw!y;hF} zDU0%DLW0!EH@k^DT011ncN^A@Dc1;B86jU|2eK_YC#ZMB6{zba87gisxq{3pX}#$xeJlsV*<>3&)_`zQc(T`J<0piikAJIHZG5 zwhz4YdW<$euv9c!A~_^15{sBPnZ)oR{z_apfPJodV=F*9oiJn@TuHJKl9%-j$a3HU ze0!Gd1ML6oi^ddpOk|8?$nhm<+X-i6lN#m%?%6(Zq zZX#03exbGGPX>!0!T4|vhYlXuw=Oqe4JmATAho?BnFCX4sU=p4cM)R$)SZIk@Hi8BOhzvYIFBM%5SCvr1`?FB7t-gQdtnLhoym z@~tXGR9#~rR2gyI5Z;d3^~Gi+Z4cOmIVw-7_)x?d^=Qiz0>gc>(qy5`ZXZ}q))syB z2grRMLQYE_AkuzRD>#1$=loQZ8JSbqPqUsL*~QSrre_%e5j_;`f5O=hU#J~CQo_$Ny_<@zvf7GzhEET?IXN@G55Jh({9uL^kvm0DwTjpddF;{L zrG=d!n5tJ;Oo`K?vE#Wwhln(}E>RuVa}YRAz(WRe1Mg(%bb;?2hp{&gnH9p0ZtIxS z6i!uThkRKz5|@9XuE3evb3R2#@<|7dT{LoTpJT?;C~n<2%%pkw)aY68fdXV-0Y%JN z4W{U-+twLM-JND^;e z7lt3!T!g$?&b=*3$6kRjrR)GVl$W>JYJ^T2iz@6)+UNeu=|ghd8(Q1DmY>_Kfpa1L zSI3p?L6J(oT5how>2C{m!3%jzdg)n56{Ty2IBj@5NTp+@q2gFGebQzg6bYiKb=%}` zwqCu@=PcTHxc!s-^UknI3KO%+0e6b}?Ugv~I+_-lik4*+?^`KGX<>?V|7%{?%^Yh)8t*onQ7K0wL`|B72k@3s~`+B&PVEa8RW?=`cCj?YawDVFY>I5B4RAV1R)!E00!Y}ASusy?FlO!)}ldj?Us1}BTn=bJ5lw0=-?miV*3=z5AnV|n! z-MEac0Gl*52)*JWCyss72qeEqkl4&4C9rD)S!rzsZ z3?2Z4Z|UJ@*BS2mB@p00GI_!BrLRy%TW!8I58m-vQ|n_sKyWD%pQm6^))#J?F2)`a zyMim*D$BBC;?r!WJ~HlSKpP$Jdsq9(7c?y&G94O%LY14A86Oqo1hIZmzIJcD_ zx*y{Z601ln;UPk0qR7H{W8q|?A;72OOHkqde{RE8;H51LaVRqpRMK(< zMuFEvCZk2g7K-(x%tBNNz8<{kRJgaNKAM}(W0$GB;&C$|gGPMx?M-P0(3>Dh_T%{G zoBQgaU+!Ig#{Hp$=8>T-Y7l$s*9n0uesI{JEWoQKVv9wv%td)Efkl3(R=XHrQ95bb z=qI6hQLp!JZoc`^1v}WAQu29g6wvmgSplS)Le44fZDnp%trxAqb+Kf)C{sh=8W=cz zVO9);A!n&>3Faud870sg75!basz3XhOHwNRvm-5>Y!%h`yqL>v@4LR~c zeR6W`MreBW=2t9cJSfq>poTbOiU%~UD)c}QJn=|wW%~UJuZ3sGqr!HAl{X>X6<=9pvL z;~ry3<1w0&$1-{;rRext+$&!Q6Y&m4p&4#wRS%=icgLy$f{_|`-Xfyut8?$k8%LCJ z(?_-Y13wx&?%WgWj&0NPxz)`d^Z+_D@|Yt)ghJuI@5zIyrLI`k4$Rn#9~5Jv)d9}~ zgDV}Q(IwKK+_X~h{NPXM_)caJa`_IcJ_f>hwHW_d_tOX44l30c2F!xMbXFR?Zr%O< zvM7a@%RX&+Kgbp^ky>kleQgsbF}vSB*jEeQR=;-&7%zI*9QXm^^-A2q1pSiC#yzy7 z(4p5ts%l0t@X?*qAw$J}{{c4qoYirW=V7CznmvR#rswcBDmC>~eWVCmzx;eJJ-rlx z_e1%^!Jn`)Ld(;?P1i8fXxn*?(8?x`RS?1}IW_au!u`Oxf0^`(x0e)0Ygw>}vB-#x z5#O1DKu6a&Z}V&5l+xyydlOp(d!^Wf>Sw_`9sRicQ149HiQ^kcxzLd8+?HW}EfwgXL8JKQ70ce` z=jOGi6hgN|A1D^#=W1ZTkHXu0I7J)_UFPx8xX}1ah@3@H(mU;iY<>e6Y-kK2pQZg| zvgnYd%FijZdzf-4YQFOwfXK^uiHh0C&G}*B%H^iNu#NciFtk5WV>L63L0B#5BI9BB zyzRwAgpfWr9ufae#PV2FJ~A#!4A$pG03)r?6>xvbDWOroX0)4k-}YOAfgJChkR4!x zoD%QR!di1nkUp;Loe|u*+1~{FG`Z;EZS-}9EW)X@P8K(~;5;yrvLIZ~yBsHqBE$Bg z{1`PabE7{1i@s6zdM=VIP-A4_{GetB3+`}4AxXPZJbD<6MnF}Q1Ub()^)o?qy)7DF1dal)}#41Bm)_u7?>N@q9>IQJSQ;?H(emxs}B zoFhKmhbvw@6<9jnG116qluuj~`?ww<$u|v`itN4}hCCd1Bt*-}0)~YpcwR={< zH)n>ZEw~=o#Z_$-B8SbEPnO>YR z2rk5>`Fuu#3^vL`;UTg~uPO8-a!qcoZ;6GcWVWxOEOnaM-Lql3CcNRkKDTEj{sYQ~<9`9$`N+BX_8|AO z1(89cx02)Zr~Vd5%pJja@$ig|R3eV$eu%_#8UsEX)@Sp@>EFyv@}kY!{d8wVv}tWd z&UHTp2M^1W-tj+wq=8+O)JcBticsAMwPS`g??ZY7YCP!0$SMq}4Xb#7{2ImAnzi%w z_LUP^H={!|(*ld<(N`C!IQJR4nV4@^1nBjuFkxGW#Zmco*TNKyD1WG9SwE;MexUh< zBo9p})~4V7)9|B^Tt8cOV_nJ()IoC>)ZD9!l^yrRNYq>R3b!;}7K2N_i|eYZXZ9>~ z89YM{bHK}4bQe+rmsrld8?1_zZr?GRprs&{_#P;Z=qes>ygNw4hMgkL{TM{2Zn|6*^O+9Yc+?hy7ta_W4V`)VHt5yi zF`M)wRTW1QT@OY~oaw03S=n`Lt}4$_Q?|VEnj+K1n5|Vk#b4b;X_eVz;aQo)qWauV z)2gM!;p$OeFnUNGuvY?6N1(wTSCU#%NgC85eM?&vMcqs9_-V}UGa2_xlcn0V+!T^H z*fvnnd5R581mmU%?0R;;Y>63XomI!_Wty)n9g)64K_3g^%C%Z&hl~cpcrva?l?s>G7a7emZmqSqAWeO;dkG|nYCR7=6t@hv}wUB3lKtLqh8{lJkV1~?VS1HTf^Sc zdk%Bw#~+QoY=JeZP8V+0U~!DSF%7|--efelot5A8eW_!~%PAD!S$J7hYCc!k5oqSv zExa4I79g-hNhdTm<-8OYqLDuTo$cVrcH)9UakM6UN__J2+?~Zj z?g`6uoz9`|{S594#k#@R^z}Ip9&e&eh)35wiMxiy&7q{LsX8(2I{SNWF1J_R6 zvJz}!OWu-_NwmT&FGpRHly=Fmj8d=pzzetF>PI6}7q1s0rwV2~1-;us;i z*^2sIAJ2VqO>O`xcT7xyKs39%3FGXcr^2*6EEp5Li_8m~9G~ORTk%{!W#Q%JL{JU$ zUi<2xM8oH;nigRkN(4nk#$7U zmmY}6%w{8R1hfH%&w^k^+<I>1~jT^m2rJyX5uk-&N;x6fjGsbj~hS^ajj1tEpJl6ZpM%^fvxS($sZ_JRu+z3mk zO6A9Q0UVs_!(|H;JZ!tyT;0q=k?38vqDvz`$)ZIHV|y8LF5~sXr4igK3h^I{GLtLO zLh6s2KcO+xSlcd$J>lwG^O0mMZ8=mg6c=z2fSUu0;GGGQ5}{=rk&LRxL~uWd%Aryig>Gjo=;M z^bNz3S@8)7D!!UVgrI0sS47c?VDdqp{0SV)IU#T?j@1*{n8w3z;6Ojok&Sg6F7B8P zfEvsMr!}CRQ2B_9lOZT72T3~om6XLtd~|&W#ANCvDH@Cqu1VTs;vB=S7l`N2+Fqo8 zNShgAyyQvU!ID~eQ3uF446K9Nj_~~mj?vM6P4q7>WmA>sKi_RSA1d_4Iyf2LXu>ysjj#1nSxD8-u<5{q% zj!$CZXEaQ(+(@Q#r&SH}bV}I|ws&|<_7gL(B!KG<{+_^~lNoL5 zrsT4+=Fi5PnuRoULlkX!Wt8xIp{$PL$xg2Rdl|fQ-d!2`O;Ty4f1#Pd928kO5xywV zo)1)SN@!;K4rC7n_MdorP4UfLelrbj{v_aF8S}3rONBrFy8Ylle>bCVRsBr?p--Fq z<>VC9Hk&81iHW~^TW;1c6xWrO$oCn%`R3i= zJZBhS9j8A?+Z_#%gsqF)up8~l%qv$8yw$XkUKfBnAj*Rj( zE|W(1FNVs?b5IapAL6R#L^N_ zx}%64)|i+c39o!s{z$DTt;{Hezmb308@F1JIMc`EM&fZi*enALF!l|mpI8oeyp#W` zx-N88;BBzdVRhHEEE0k$+#HA1gvLf&e*#>5<;xHL;3z~?iuy+ky;KB zHjGm+$ES(=WR1$*FZ5A7I&s7w=%U6*kI*S+i`%}vb{rZz?v6s1WfIl*EITi?gY>JM zVTe**7Sh~+@ZRFv17Zt~{#LGObDThp>(xaN*MV6JU=rXQ&8mOzZg!f&Th+a%BzbuD z;%Dfsj|NZqZCqwm3{oDja+&AKmYLs%9^Vfc)$~L8 zCSb=b+w#=v*y*t0@xtPyA#ofF_N)4rH#AQ0!@aEjL@yF0>VcmGGE|Fi1*LSq77QOw z%6U;)(dPT5oeKib2aA`S(c}~xX@|pO3#)zk#kxEbM*uC}4iWPX*>REXG$v zM=&*$oXS=A6pvYQYq6m}`LIP+Ut~EmAL=`hm3-ba`1{JWz0gZL1z~3j#yonb1#Yjt z{JFGdo!WU-gonP>^7Eiz{G_$o@ob}9fp8I5s84jCc+Y=D$m_hpHcH`IAQoORWz{Z> zpNga4LN`-A&bQ#2Zx+`tL8?A(DM8kFz-p#Qcbu$<>z7?ElDyc^hSiw6_>-&&Pv_MpsuQj411+QbNp`3)%otp zQhrdk4g%{}MkI>oNl%+ezuQCDsH?}>6<#e>`#hWJqJ0-`8 zrz;-2X{8-;C)H4vZGB$uzBpQLy9KEPh|t03IRCs}VKV!Ee}@@`lx~O+EUv+zQQFR|ik+qD{jps2LFVkQ(mVIW5b{&x^A9Roj zkF}~PDn#{y+fqHDiEzn&BOe#MM329b`{cGZ!o#p*3IkGiDxDnm!ebC^O}sO0X4FUf~YM$OskJl$}zx zdL6q(Bi3wnouo0ykdwkg=X7-_P`0e6MMl5)!26B`(~i0}*%IxhO{E=r7{&2VXP8_M z)6nO*yq+cfJQJF(X8(6V<%)4JTN$3`PD4h$!t&4Jgj>jtotEI)^0Mu4aeh!=mvt&! z{(`cF?DX}Cd27W%9D1(vE;jGaTz;3TPOa1&3cn4hfq1VG#p`v7MpfjTI9pORi=(ZC87=;(f#@9DrSU-XD@wOPjemTCP z5xVlZd(KPG_?m2qDf!Fn_ItXY?u?l|an6gg-yo#H!kX^K$|n!uWMns&{fC?7d3ODR zPEqo0+0Zsx)Tp>=?Uu&#YWxESHay=(a2a>xL#y8`0KW4t@~(_9ObQPhU}XG#>QR`n zwHMFg6Cx6uS7J-@yQXmz1eDZYuJB4c4>_xzX$-HviuwN#1>7fQsES7qELm)eYePY^ zmVM2Z*CI}M$7`Xf2IW%L)2ighJw#HX!gnX?H z%K_9d4NRVA!S5IxI^4PL=m!+W?=zB75BUPI?%hV&?c?8LjP2A*@|LDqh<|1fEWW6Z z^ySqD{~K-1MxQqK7r~{lUsGmP$%-Kyt9Y)@wh+0UO4&>9SF1jJ;TFImXqKU;e6RN| zPIRgiLYqo0?vF^ppx6xlp>YpJ`1m1u*n^&aP^!-c7BG*MXkB8OUi;%{Kt9N2^WLxS z>&bpvst%okjdI%=HT47WXCWv|G|!K|Vg&mhtGzK^Ch2E$&y|W-(Ps-Pm4BoEnuAd@ z?B0#L9+Xk>N8+Ps%pi9CPS*IJ5jEk*?CNCQjVrQUK1i`4A!}@D`?^m*bND&*m8#RG z&9prt#VLcudrOARD946YLNu{DPHi@5u z!-vAKsgo*^3Ofb4C9Nkl=Wz;Xy1mAiq>e8UIiu6hB*g|^X4tmDzRL8S42@w~Vvz(J zQQZw2IWKn^VS-`NrKz~Vw{(OV6R8D(k#lK4r&Hjvdf+$jxmgoL>FI*k!O|tL@>xh_ z#0DT$+*7y2^HE+yV?%oHdLM`7wjW)7(Qb0ZIx#~DJ~C_N>^hMJ1g71up^7>~X+I~$ zbMba4RzClFe(}5nRTKk{O`7H8{yE3ErX6mR(4jx|1=ijG*$*XJsm91-inhfD8^&>U zquEcDao3NTg~Hzv|3HfFh>}u&nl;xFQ%JTJ8@FyYh?yzh-O3J8jj&ZhYSJ0%JUJAS zvn;HxJ{xG%K9ia_+bQoS@<6+A4i^l7uaq|_wNPq6XmBD8o~B=9D! z(Q8?i{2PIsF!!8q2RE|sXQnQ?7mp9Wl8NfiNh+!-_radD!yG>^X%48*i1#*j;CHcj zbnxM;#_-HTi#yMAGbgf(Uywppo-Mg}Wy%MM&xf(e)!&gy9aPO&i~?m>UQ1RxZ4z9# zfK;;U{ritbghz4?QY8hyfm|8L7y8(_Y|H$M5=zVgGc73+7cbm=-|~8a;!weTPX(P2 zkBiYORhayiFG|w5sLg{dC(T-r*yAVQR6^Nn@WZiXkio0%!8507ETh5GWi8CH&r(9= zo!vH?Wl8hNcXo&z9@y9>pAx59X}(z=Hq&UXy?rVo9Ov{*{J>%R@bX=-$);Er-O0m6 zgEp6vs|T2x)?Ljj)BD>17Z^7x9CxK^u~?=Xd!bK#XX??Wjrt&W`gNxkNEkaRyclKV zl$-Z8!*&W?`rO{s1)!5;`wPz(wciD;nKoAmXwyCPOsp4MFhKXBsz!JrflelqUfu0j zSZ>s*{AOfbedqL69-VQ|yfiwB*iFe)^~sn<`|du=2`60i0xpnL{tf0J$1~KJIqz_` z5Xdd4u;M8W!W=dS^1%InMNeiwB=r-PZPo9_N_Knk<&7~aQ69T6QUh- z2U1X5cZ*M`=V$7A#PGwz+tRdqqZ040|KdR0LvSGOB)oe>_52;+s@;Duvi>IlF)BA*x2x^LT$0=6jWTY?iRKpq3Qt>DX{hw}pNB)7Im(nrXgK zY-jCLx;}DmMtY26zwixP%n4x4IZH$$un(XvGijx z#%Hy?QlVu|3vCvTmQcq|7wYJK#UM(#@Dp&o?H-KtljwgZxh+#Y__KeREV@OhSc$o# zv07@VjlBuku$tJi`U{qOi;x5To%4g_NB2)GgHD^sqVf` z(e>Pl#ek{^`#_QGGt&UY<7F3AZwix$(nkx2zo^5%`Eld4FWBmukpM4ImhdS(^OZ^Q8J*@s%>LvOL)sWvAzFJXx zr!O^Vy2)cQf{jAltfbJK%Eh61Eh;ALBe}SAj=8{mnHA0PI#42kI16NV;;1%M=hPUb z+54fRzxk$fsr8XY7=uv zgksL&195o2-N){&1L*ZT7Px7PMx9RkQGYE98C~rBWY->fefcDe+Gdy5xusfcc?nd6 z)}*YW>Jd62-OGv)zIIkJtTt5FUvUR}CnTR8hK6rJKK{;~n#5rkhz)UVE6ZNoh)L8M zNx>r($@Ig(JLN3pjhgIxw99)g*p=Xl$N`!r9TR8e<29>;bGe|BmyLTla@hW}xXyPi zR$16zI32924+#vlQY3V!Z*FllT{8R~=u~Xn0KjFi1fnuvm%`q^dg9{|0kHkS| zP>b_DQ;_Jm?FGTQ{tGf0Cz$>uUc;k^+uVHz)B>>r1dMGlaj%yq(yotl^ms)p^Y6v* z&h@b#xPj#Lub?Dux$ZtT>i{U^In8_)lorvMekiVU-sDaZerx6W#?vAt%_#lTidy#_ zS6TOD_rp$q$OreIoK2EE;_oPsgX~s{E>R2 zmpq*<;0>z!Y(?s_+>N(3u)Qn#zJbwh zH?Wg7HVK1O%hM7N2bhs7bVaFz<5-lsZ5ZE1aqnnWS={rXE|REE;Xh35BrYggdH4hM zg+PmR&}VDig{M>Dngn=Hi3kqOhhht1tBK79d=a(77A<@zZrFq?7WzVi5WMs9kNo%z zK$o>XDuA4e&r!}~Cx6GClNI>|Fq>veRY=QTA)$7dSr{!Y|tw^?14{ zEX1@i+j+&YgI-U2tcwVxfjSGpUuTcj98w&{Ot79bWyRGn4@KWR_4{JZ3L~;WdU{qG zM2XqVh3CC~v#j@waqwLfjT6fGy3X?Tq5#gGx)9ihNeO=6mD!!j=_2p1$E%lhZejlYxbEs)L2O@v@|O+`-+|LqY355$ZSH2JjNJt^wDON^V93_J*$Q_r+(hkWVcHWtt3In6!N$gUScp?vF?8enX5z=Zy72TS$w<5B@HZ6-=`SjcF(dQyf!WIN z1jyFrkvwi8e2@JiK?wqw53=x_OLir@AG8qs7>Nwkp){#-;gck&>IUe%2RHwkrl$3d zN7Gvto<;EkSJI(Bb6WK@7771)Eu3HY#&vX!ZU2V0p-KG0L%RP{D&4rfobrCJ z+DnNe%?aMCH*1v`jWwHE3u&|PlPk3Jya!7Ors=F#b}63WvGs4A*X?`VKnWBJYD2k8 z2-Knf%v+KvV!Vlh$ScKucj?m%CEDJV{^g$NbwASX8QS{h8V7uaxOn3-pb`?oT>xv8 zlNR18$2_f96IR<2fO~~zujCzj@P$w1B8sghqA{MB*v)ypSBC{L$9Cdtg^lbRr}uBj9+);Xg`ov+ zk;(XJNP8BI3BAvoKZo}t!%0QF8Sk==9v>C#8dbv{%E;Vjm76}C!;8|XH&f8w@h0j(+&|_O(M~=Q#otf9W+8I7C z819E%xQySNi>zL>%Utj(o_b#hX{Qgun`v*1aBc)1$;B;CjjUbFtzL)crKNG&27As8 zcrAEUXS}PwZcx!2J|%}g6cM|18`)OwgNT073CfzU$SM*t5j*#LOce4Dw~$cC6~7~0 zlL^`#u${EC!x`Sef2iC%RrgAM^*CUNtofu}{x0PBe#?8^0?oQHOgAO0FYI4OX3eYlni zKtf)K3_h|hc9lO79y=CR;2bfg_bBW~zWYg~{^f$YT5HD+`(*y*gYmUeAnYFB zyQj1}agmz$F4ObL2>i=hbgY&);*=V!Uk~gZxn?^=tlNDl*D!G(qa(>n%Rh1X+LgR< zt*J9Lu0nL#-J&zk{kUOpPiwQP)YP@of#f{r=rl^UVLZ!?>0*vb25y-#4|@$yjor1G zxuA9#o2jIBiTTX7hWylzMdS?l4Y_#k3?8!4>QL;WK{ zwt;|S<9D2h=(p4cc1w}xeYid&eaJyGn@)mf8niuGW;BiE2bF;dKd0r#g)0a_$X|Dl zHHKo|CyGu<(}=~q-qmzrBD)P)Ru&P*^@Z^ItFqlDky*w2T39XBRaJ#P+9=@pgl;}{ zdHt_P`9J-M*|>e52>ry(@yjvscogiz&5;H@t~a~zQ#TQC2uo>2(plZcNKn1aQL&7B zVmaDH!EdodZh6-|CLf58n{AV(e0TSdLNRAS86qbNNqJpZ{l!bGSolSL-bV>8Xf>8` z`HVZA!R^`hnly(!TBx~dS0H1@?1Fma>{}>)tKe&BvdLb7BD{NPEvo!r^7r68NWn;9 z{uhG$4{w*DX^PxfJA(RRtIN>}l{X(0M?XSZm2YxYaYJ!02CYY+w`36N0!;#_i!aAi zF2{PwlMK zB}6)>damF0fZcQ?w>qc5>#^HWFLx5?YTu^SCkwtqu5%ZKW7VwRW)6i45A4E30QGOp z^x*@=KnKuU*J$R`mA%J%^YiN!QV~zGb(;gu-B?%LSBV15CQA*#P+Zv_m%r#zFs|uX zzdic){g2-T z3$j%P>$d!bZsadQgSbBi^)-Gk_n9-8&)xY}P4fS^1d&w49u9{um1DmIGatQ3E+ZN=a9CW zP)3S_wLBuhqxiGU$V9OF|C-GIJxYfhSS4(dB^ehf0R=2XJi-F|_j&jUHWtqv-_H9# zFTsT#tXhFTd{~k^7_5bghw;T9K|$fL#r*p+{xhThHB@90SfyQ=4i5t|8{+i^Kbd~| z_lHG(pko;`o-wZ?{hrXDQU7g4hbmyzsg5K$VIq&fTBNPj{eH_ZSkLkkz=e)sP)n2u z!Aq#n@v`u|Ucq+@>Pz8IqK7~~w=US4rpoMS>9-ld$UfCGa~H@h(S-^~^fWr_d%QuL6#Zk?XH* z6N<-@7L%o4C#@Rc+m}lb!gJf87th@Y@pM)j{9>SD0@y3s(nWn`;TI=3#XXPy!$v&^ zGKq@yOaN?`|9Flj_U~Q#oB`(ay5+r^;X;%DDk$kx@u)cfgB>)#ez&ahihbY=RFg<3 z)Tl}X_54Ou3g2?>F`;s-df?mM{>K%+K`31V>xY3Nc!+~_J3;KXC<46;1bw~%pwwwX z9yNr5uH};^IVnAUs5rI~I6CaGCelyoDqI9)U-p zd+*O7-xv1QMB|tP`)Al4%k*nm=yIF=2-J*f-v+LKw&iTi4gbQ9vR17lXBZJD+A1B@ z3Fzn=4@w?P7iiZ{ttXaif!}YtzV#Z{a>5uprRB1kGv95z@#Nq7$WZh=iOYhG-LU65 zfXq@;ie7*HxH0g>mlt3_SG}cdf{xqjM;ke5i63zp5*s`&6VY(#TS%N*KjN+el1BLv zpX0W%=gsB({cbYnpSQuCHIKZvB$o_|Nv?ukYLy`>sMeb!d4_8#PF(QI(<<+leJ(!y zl<34hBk;J&VNfY1R4GVd2jJ#h#9Zbj!$iz8R%$vP4sDQo4hrj|W)j`R`ycvzvTc$dI4U1^~&f!!$a{Ai7McK9N*dC&8d z-wsj3v!2#Lc$1`A&SPc%$nqQz*z`TG4y5b=_>uqyubpHq<_lzLyc*EUcL9HBEz z5CHW-8xuhdP#wcjD8w-VYFcSAJyvctFJw6TsUZr{+{u_5m}m`<;UhY+@sYq9sjKWY z#r~7~WbW^{EN6^8&sXq4y~xXnt~6WWtNmv9sD8GCEUCsQQ?31m-sM|(iT%dw%X4c` zzcJ~FpzFj@&}0d+mA!(%$%yhV-ZSu~w(E2IAEcBOiMDUf!0dWbhdm_qxmGd$$kM-# z@E`eo4}?uJJ0CWH0<5i2MI*bsKPS0Cg!wKJu7JwBylTf$h*|=u;mNG79+Xb?rxw5t zC<#=dTlP-USPzuM;k0 z7-j;m-Rgv5YLf=2qvor%1`coq#kZ%#eufX82uzIRDbsRr*H?w$vv45_P&S1=1zD4KWZNN5~(yg9lJB5Bo z`bB7IHeST3rtMmduM?LJwc^ddsg7=r|&{5mnL*SD^VL!Dd}AbXqq`Q0~qPQ zo}d}J;_#hsrMpjC1qtWn$fPA%DD(AhXJ~~^9XfMbi*DG}dEwLV>qSc(>5~%D$ z##|*w<`-hkFZXML=e$4&WVNVv_v0n(i!j>;yXu1Wo6FwWkn6hr@|)0rxPvGEWP6Yk zfjcjAuwT=l9PuXe8)0vMYs{C*?L7~bl!sqWqO2U%%?}S;VLKpH5lbUS!0^_t@ z>1aw;$GY3L%1wrS=tI%CfjXIaGUi`lAD$@m^TQoI`8CkMk&O+dDj0`$%G5h?Z%<(l z*IC&?0%B3O5J1eqV2tJh>OA=yf;((=L|LA7w(35O)-V^4cVCaoDYN1PPzLJ9)JEM^ zHk$haef0IAN;dAC@^jgR1~9oX)p6x?MaU^AIjie-UBlfLN{Dl+zJQhRYp~QnCi8g; z{j)A9@0a+-SD>0uF9^TrGw^I)so?H|*T4;($%DE>P4l2(!0euq9K}(Xw9FpJ{Z(ul zX(|@@kh8*UymENA8ywnDpMWBmNPbhn0aBP%!?~g2ppy5n=_nK?x04TjRb!{@Aa^Q- zNh*aaJzl6`bonX<&A}?q%b|ZGRc-i6mVuMrJ)a(GTBD{(UZIdC#5$@r8iDrYLe9I* zus3m%Jeyt$`Zf>x0qW(zl8Zsi)#E9DHf=H`NNMR=__o6QgW7@ugatD2dYq&vd3{V_ z1#%kbGtj4mOLH>$#Z4NXZ>AQ4Z_L=qp4i3v?cqNjZC%vr#vS}Ihz%!-xCXFm0I-lR z^|#^Ut%qz&H?W?z8H7z~E>YnuO70~n#~_=7m6T7g&Z1Urd3AQ+I0iThYE;X34>=wZ zadeCn>&(ylW85=+wt8p^3NREG9_Dc>DkO;dd0 z6dS$E$yheep>X=9`XZ}QUOF4s+&)HfNziP;WAlh^j?9$9zT(Orj+S5=zi)kXC#=Tv zZlcqSO?&+4$yA$UwaS_~~bUf1qhwC&=B1$V+0mgpn1 zBhxS5-oO?TS4M$$+~4Fvrfmmw-EP%A6=&8r!zBaYd!@J}ke%VXq|p{j_la-~M+SO5 zmD82hlAi^w6>DgwD{a;MOx?9;v>I8166E6TD)?X8r$X0r_cP4cR4&(qZ%nR1CGLq0 z=NPgbpGWS}+ym=mFCf$_tI%pwV{452MVBh$_?CSVN1P;8^z5;Y#7E1~hMT`W#-e$K z6La?k=)(1@Z&}cLx2dEmdCkjG{`<}L$8HxF1ESAyk&qu63(P{}6K=JT-+wYed;BV0 z2^Sfnt2lc2cq(Lk@ow3bh<*mW^TDr}zB*7AtxYz8je13nqop|D;v^}6!Lb?Btf9#a z&4lhHL{pjkwKt1azUM}aZ@_NYIMCjF#0|%R>%a1EL6P2-Qn;338>{fBcodpC@>My@ zjnYE=*=97qZv&n;>%y0w=B>^80G!yQfb3W~`d&;9dRgKp4`&F?o^5K^yHd{@(0fbX zWyY;jQ4UfNW5}n@uihZp{@Ch{iYcevvnh?ALu{<_L8;lWKasN=#1daU7I*ZPoIN74 ztYu8hPo=jbWtq{mF0U5R=j%50S$ZUI>^yIe z6h;(qR#4VQZ_9xnKI8*zo(cQ)fiE3=2Zq%HF|m1U`oPCnEHqp@7sEE2Fu_<6w3-uO zcR#bP)r4IB0^Wk(beu!_Am-i%)v=5_aB_U!<@ltTqHVVl_f6hCf1MYe3$GT@Z4W2i z8R$z?(*$P|x~UGcU5S^|OlO@dnP+9N^jZo}V>Hi)e#FJorUhMV^; z_XLq(HYJwlm9JVzBxK&>mcVH`^2|_MdOi!sc%;VT;+PffGLNpV7HGL7FrV3m8_+%8 z+!^pd!qEbVs?a?z7m>p5liDjjXDn~5Q;e^iF`^5>zOj zI}mL~=DshA#X-+JkV|0>Oy+g2-n{W~9k1C?5?(eQT7S+Hp*Piv3=Hde-*et(=*I6f z%{LhH7~Y*2nYpl>SW)rOH6S&%rx3&-^q97&np`OJ;&&jnRKBHH2t>suhGtes>(=XL zwQkCo*d39~K9l41LBosV4aa9Yv{jhC1@y5+8Sm@TchA?-tnNhS`Oz!GR#nEOX$Q_a zC?nz#SfLifL@vb`oT5=Hz63F(Zj(yC;GFC3Bo8Qp)?1?6{IMXz?HIUyT%COsvqt3| zqVe8;j_SX=_lg4u)S|`>RviSqtWe{2yU9PsX`)CG03h#r+xvSCSoOrS8UoZR6t-_N zoK1MQZsd@2pxX7slvsXPaVm_Mn+v#2WzBnIxk}9exsNSF$FEESHju|PQDklpUc)bw zfD1J_ON)kj(azj0vIK0z(11^>!&p;HZ_D>FEta!>CcVwDbGY5Aawn{a-Y|vFq37oh zU;Xg7bvYMgA`sP9w(Dl9nouUTu4i?#0@|7-~$(2wowmCXzU zLY4^cgZx&PA|L;9*UJR`cpTgalyFfvdu%ee>{exufcrMpdJrH6_$m3liJWHJhwcwJ zz($P*9CL6~1`Me}Br$CA2fj=JKhXSfA{sYFnFlbpCZPUkOLWVz&&~+u#xR4SpXR}p zWu_L4Pk>>i5$oLsY$=-DPwP;ri}vyTKEy%XE*L`N2q)zqyLYEzSS1jNIReOCzyF#% z-v-qYF!Tu_)8_LH^&5kkfq3m4YJ*DbQei{}fwtjqzQl7+H3rx_%HgtWSx@waoL&I2 znp*f)u?@-?KbIo&u&*24t^+mDJMKB*KC>UCneE!EJCc7MYHxC%XoVHPtxnHy_RcI9 zlB^m`e1}|%MNG;JduN^!3pi5rJA1durVjojm;HC4{MSA6FHG^d4-iwzi49G*-!CAG zIWpf{vavLy$ppX*%&$F^)Xu>+A>*#9bjp1x0-Y5muRsB1$=g-nzP?LvPVg6CQdpT2 zqUbN;k26XmpKJ^S=6z1{kCHUci_QQ-T%QpZ7^dKHWS;uB3@z>$7O1Nes2Mr^JWHcd zDN}M4kS6V|a2jF_(hq<#;6$_m7i59tj951oJ(S zy2NQXJuba{&X<(t!YpseopubTLW&-@lT8C4|B6{YSz~sithglKdlw9 z&Lf4D8TE5T2pk607Xh#HJE9G%<69m3S?G18`?;-#i;{N@6p}x+g7!trWhLfEO)xz> z6lsnwC;3sqn!*D@ww7G9R5PM37$jeH*P>~>^a00adXa4o|Lv0#ptUVHUo;lWFbw1_ z0VXFgtG5KCOGV@u_+OQ$@jm87AHRoonVfI?zt$HS-X6H+BPpi^*wT9T1@E|Dw@hW2n_D$@&7cui+r& zcVsNp><{2?M}WR|eY`mxeAl4{-LZs_+YZg8m)-UX4(kIylC7Iiug&=dflpncg68MpQ=<(Rje+fFBR+@C_hLWL?roL592L}J2s0Yl3HfJFqX|Hl z>J#wpQ3*tJg5xqJU-GvP`1r0Z??C(_HFAC)+m|Ly=yI;EH-kzp7NdSf339{DwcF83 zoX*s%7+^M4#PF2a_!EU+0&A}1%S#By$iO(1IexFVv8XGCAqjpuFHF!^TURW%R%yHP z%B<*Plx_cL_Rp`-oSOb87%TO9t!Q?ezXr@scXZzp{ga^GLfQb=ysTR233i7EFot0B zQpps*Km0jUgyJqycT|)ZLiSjZpy^PGmQmNg5p4XjWbS|06#t{Pvk;LKTo)-n_4I+dBv3wZt+p0OI0gs<|4Ly>$<*oTBo>f19kkeFUMtKSW z69d51Jdw+S$cdNzp92%mv}0DL?Yd$u?NUa&J!Tei#uzdt#I z2ndDaZT$`i{gcTVDG0tdS+@ET<-H7;OJx@CAADsQ5%Z|q=8`A+hiCsC=^{r$7y|>H zntID%&5}jkuy=p_DJd`@-`j#e?&m-3g~%_&=JzL3QbaN#=JIKk=l3Tg%s?|7wIk>i54I;lCQ;FRSang79BK`2SrH$j6bw0K1^{O}%RcFKC%62hi#v*yr+b zQVa<#wq#_Y<_kNqW=Z?$Sf2n)e!b{d0nbPptk2X8yl^vQ+~H z>FzHKqW}?Ufc?j+gzx<;yLNz-fL~h+I<<^4YSnNU3c{QC9k(aqUFxLe$hB@pes#V5 ztx5j{q5Z#|sDE)%MT8LEM!WV>@*lI+4A{M4oq-}t06npk3@0&hoHC(h*KP9C+rtDN zI`C9$=KxW)7x>o?yxa699~DIwc{P!K`v;QO--~>Shzk*^7km^+MR3)k!xuSzKQG-K zSm1bu>4S|)99PExzm!QIl#;ef6wyz7SMZ0^_WY{FNWxI_>!Oj4HTrC#0SJU#^E7=yKwt?_;YQ|QMb@B$|` zKr7cV1QDhug@4=~q$?PvdHiCPBC+uUEo^0aK(A4}f<1*R5T9d3@K}05>noNr(^2}` z_3w8uIV`3tIf2-nsxh%4eELi?AabztU(;4Q&xZgE#tHg!`tWXKMfZS4rIu9*JT@8U zpi`|yPUHD1ahc^TAHPQjMPSSJ5h4ag%4Z*xu-4dV=-&p?v4?v=AgcooNIYepK&aV3 z(^seo;PFh_w3EV>*#Wl11#q9n6erLSEFO?q6A0N2<3WI?UtSH!yY@7w;f7r{3+QYX zqn#krY{d92+#dA%OhAy`B*TbW3-YU3|qxoUGZnNkh^i#5BRtpmO zISp%N;p{LeJ^8G7Zjjd>cMj+@J%F2LhG6Dsdz?VZ-giE7(-|$)7}xYT8I?R$tL{{P z0s=DLv%7IRp5IOzc9#&XlSn`}T-GFGIH=kZe{r%ky|xV4N;wGR76v-@_C9gj)|HHS zVsZImdfv91$q;a7!X~w?>=}2&`akSqo)o9*?@-QNOi7*&ogFOof)<2&d#JtB;Jx*H z34CIjcDnCk8ssqRTeBw*nh?9Cxr2bhR8L1H;QVDvN7MYOzxhga8q^2}^c3^s0t5=^ znVNg!km{PMz(499xyN}_3|%X^&6bo4L35&$`sWzTY!8@tkx0&-pCgWl#O~H zQ|5v7*mk!tr`c=QNfZwHcuoMrky~$)&C6i|w#74%74ExyK)KrT%M_!v(lO#%M$^cl z8PYjl0IpH1mI4FaHuP4)JjZe+$seiW+^A z5PhJdtc#|Z2R%VaZjxb`-P*f@`I~E}OrvKpjzA;c?@!V2+Mf8f`ZZ45)=FR738*eR z5PHK!&7^-nQR}o9?*QixBz276;r2@95C4^ix92$|G+kk~W@YFbu`x$!c^{2)%TDst zt}a_>Kybave2x-9rNW51Xg|$4NpNV!;BG-~m^}o{r}nG!ey>W3m)!kcqaNJvzTfhS z#R$x~3~k%~@Xz>|H_$L2d{B|mB!NEsVNZ?k^IO#zP++lisNuCsJEVb_LVaO}-T*hFVVOq4L2guE}L%AFruXF+&3~)Wbd7%TcJdx?47LJ-m`&>?7c@4vXzznJFnin zKJU-x{p$7k{quc1zJGlGlej&{b)DCF9_Mi!rvXNAkw}85ageYd?|YUa=Kkz=EjBUI z*N)5yq9k2=G=&pi||^DoMgbu->Gl)3X|W0AqGL zM<4wpL@2~??v5du0TL@ly@{jc`W8O{9kP1~^sIU$ zgXfw~t6317JZ=@*rS;TKofWP>ZA&P90D9Q*`S>K8Gakx@mulu@IdRa*!U>=xHIoREVMQfm9W*bBm zxMj&?PwfM4-*|K0$k}UKd#66E3k{ted-I%=7sibQ$#ChV->g^es!UW$(U@P1my2|! zl3@Kpas;lNk5E+6<-mVIU4L`DKHWFH?#GmYmYa7DLaVaJ1k5+0L51rh%4(ef<@iG- z)VTSHt~S>N{7YGBF_Cgc2EHbdDCY|dex1x3D*bFOsm(OgH}&Ku0DsONGf=^<;Kq~s z)CeEUuAZZCrrF-;U5WYXdFXt)1RsuY9$#^~clskZFXZ=#4`0wKCSUh1l>r8UyjcDG zNK<*3oAce#5;KMN1Yke&l&O@b)WwDWx1bf)Q>O`>lnBkt zWY-nKY03VZgpel3{!VJ)mD@Sbl=x<#HI`a3VxUf_$1AgSH~!!n5!^3yk2IwoA-|9^ zNmyUOiog0He~n28_btC~cD#J~*wbR~`>o&NwuBUWLrjXRPbrQv!1%L%93rb2WpjDa z@|(rRWvEdXCTJ|cuQ4c2<(Bv{w6nD9@r$+T5eAG}os598k&?`GDG)@I#~x(nGiOtB zv5g46Ins#zgnzEIC_h8+OtYEj49eu_T9A12zV$P3l$eG}sD(4dvZ)X9e*19hSC=%OvdY z08Y9T9PvgG4aRS8dj+w6J);*JQ)#IpD;>#92*DSOk`k)n9&}?BR()h5I1B62_uxp* zZ$z~X@@)u4l39yH@j3h4&ae;62icy)#5@WPZgm)52hW*y7Sh8!+u^r^{V~(uArYFe z8I@IT~d^@Z;&2lgZ^vXSn5K^%3l$e?u?asFA4 zevpH5?{%5)_xl!hqv^uDuf)k1UzvT-37uLuVO!`KSH>yc6RPF~XqEvd4uTQbunF zf5Q!iInjf{g0KF&W`L*^>Cq7B_)-;aLX-gQ=xnhMOI29h%`XztB~gFbo<(__dSazDW?OV4O^88nVV*jnWGKJizKLp8f5!;o8Lvgmz+KSWyfyyh=!E(@2oyHqs^bUAIx&1 zb7q7Na>I1vX2aI$`;#WjmIP`wh5A`&p=6rQov+U|zsty}SbCj`@o-9>;U1;y)?=g# zq$PzSRXQP?sv8zwxvT-nH=?_g(%X#sj*)!gZ}@P%|MiCIMcKt1vz>ORIesUmRhstn z!h-L}+0m)z`hP;%iRBbi(V1DNYp?k$K z`as-FPLtKG9Sl9*S*X=}@SKtIuj%W3%Ue%>*nh9kla@=vXcE{A1rjAT32)TWV^|-X z(3?}85VZgK?Y1?csmY0S`jbsj_;FYzrhWSIW;^w_F%Oq*$8KxnRl#ml6j^ zigU0FYQ91)>uCBl%k(mMuC~|53gfdVaZA2b>ej{3=Pb9H?Cv<+Ng&`gN7k5y9~LH& z#ku5P^Wh`hvGSG53UehYaucxRCDK}2Ol*gYtlAPCw1GO*Uo)QC4S8vn*n31>Df;Qt zdo1~=4p6shAePdPb2VInlgP!^v|!>~29%axUgKTxbzY?FqX+R4s&(#(>Z;jBx45P9 zgdFA$s;O0dJIGrJl^iF5Z-WEkv;IrV>$sAX zn+u={q-89loI2GaqHcHb9oLvh6ss(WEL!v?L;Cqp&~ai#jM`JRiffdT)ei1rPOGt-m1gSg%c)lj_a;%|T({jf zIp%VxM2uY*mb}4p%vH8Sp*O0A1bJ;I)z04ew9`R_fkCZbfo`@%%7vbg$1^@C9Q?ac ze$Blg8;k@%fJzi6Q9BN^O-VlLxW z+8vj7y^&&WK~RyEs}(TLw^D27VKwXru`}>A+jIK4eJPzoVK#6KsE|w!Ea%^=VX%a1 zv}*)d^rbk%)@qpojE{5>jt6ujUL7Ypf@Oskk1O{Pk|nbr+67YL4A$OWe^vba)q5r7 z>yam1t`J;msgqCiaF@D3-BZX^c`G5|Yba?ox^tx-Z%z~!)@I;(67)UbeGhbC-FK@C z8F%8MyyI2izmgO}oUTvpnoBku+kOELze^82(J92M5nWVkJ5t~StntZu++xCDH zl793~PCPq2W=;k#JY~$js21H6+6vkMU7Gz=I~Z1P_`u9mzwOQ$kQ*z1UWcLxu zzr$>Pe{VNY+=PrAgPNuNb7zz`C2G;9y~iLXkLFvCRRh6V-|b@ycRJ?m1h||KoqOv7 z&z1v$r-qY~)+pRe>spN@jb3wo0%!eD_MF&#(ml`%Eq7c^&JXVOVBlkoX$V{y9x(lAT^Ozj7w$W~lSIq4cQi%SM_)KKrv6p2Y1DhbVXI=+6=K=%bD;ge=^}q0at5ya??fB?IRiEX|L7)%{G&!rse$KYPcZvQE(z94#4@uA1u-MG-3eL& zUKb|?EJ2;p;izo^$4b*#l@txZf;w%@bbGH{4C#l^@Ji+DeqfYomN+>r4*H*an|M1{ zvxBE$&iC6v=}fMnKk|m@L2yaFlO_T}3E4QFbJs>FxgpB}_)UH%@HGw+Y!wV!NWM%b z+unDql~TngE-efLlyD;Ly*UAF)QNT*WF8#TvV z5<*J8%a6AYy;hLDvfs|5ysEt!%`s(l-k+>jNwN|-~3k!`#q&Im$ zXeyATDoE(JRbPgY-yWib3+oJg2Du&cd_5uq#V(XJ?-qIub6U7R12OBCRK*QnZo>6c z;QL)pZA^I)FA`d8oiB`+mKg$u9H#b+d;|~EI;`z4R~iG%7R&_-W7Tt0)pIX|C$Pqm zLhmP&pnmc~a-`1GBxfgs=zV(45Ag>rp#TZOk=EMN?v}H7gmzea5O6?|_%a zl7S%5rs=(-gC$HTZpTCgts^?$m-vKwkls*lA5IyZ4B|`L8&2XLUCI(xPjJ1a1O(WC z2JaSw!0uykP^8tp7UHtHL@=2X^UT+^UcDgO2CLv#zfsSzr4{^M<>3eeUj`L54vh%& zA74wwu{tdvGBO2(Mi+q$eN~pA_@2*Gnr_JQxfErhs_}=MYb&`sMlLcfZkOfW3R`HX zFZMnT5#GQ?UdM~PCueZshB$i`;_X;NtSmEQbwe-!Rvj!+>Zz;GT`wt8T&rozbQU-G zOy;SQthsY8T+}8Rs?mz=_T3KeY6Eym6m_j;AmlS=lpl6zp9qO{zKM~7X>s8X)3J4G zd?GHNNs37ZxIQKY!XfOud)rEVgx^@FO}F_q)j7^f+BS9$F7drkW=7J9n2kG??EmdyER;{+PV|B3ru135fv)@jJBUPAP3tOrqJp zIIBe$cI}^%Ay5%`q*@l#u8QWIb$N-qlF0h}%$K)Xs#u1b3NHKvP0L888U^mr%qE$$ zm=h#H(0cK-tf=ix1mS%)=?x`=f%>Y2-EWZRtU+LBx=xi*YHi=p2T2dAs!e{FiQ+VA zCKv$HB%`751Vy=>H`|mzw0qmp>CVhhO?G7u_;K%lLY}ok?eyz0)42{!{!2-$b_Y&M zai_eS50d}*IqTwNZV7@KCym8ZFq}f578KXYGXo?bP_P`i?cZyFrEOd)S>r)>*z;D0 zL)4bQr9O)0!mHV&7-uu&*v_qb`2yjYTE3M&x9kBpYttgn6T%cIm6kKkIxYJoqgTBi z5HD4*ETG{6+5*ypxG#xIWu{Fr(ittgSC{1?&k?#5eC4T5Ozv36O@YIhd%OzCAdpmX zY6|QDI(iEF6L;)6q}OI$j=x&{W1zeX6J!$RK=?9c`(ZgWsUD4S?drfB?1gg>6|5fi z$vx*t+N2}3*0m2U;Uvo-WsL?rRPdD{+#=Aon+EnCBaM^llUaS1q{9gpl=7aa0+vZo zX&#Oex~Se{uWx7PlBVN#x;}1>aKsiC{^jYm2{G&$EYiqk1!D_imOZvJ^8S%-zV{g9 zkFJmTchWq8pzr)$oRe%L=vUrA-IzeN*kWT0HhwhN^%~WVQ1`AJ*3$T;VAnpv)f{}# zi+E$2p#-(O^bV)>RcV1tI#XecVSI5QiJa8g0af>HHE*`wrA3@<5uZywt~rZLmf@aC zWPG|FMlZfGWJ%4JcQ9o%Y}{sJLSPV2VIDE^1+D(xQn{24iVrMhPc-{OX^)akw%?gF^rQ~a|0Wkn_>v6rVh zYnhPG%9N@7=vv#};m<)Iq%VXY`#gV8BjyXqffGC5Y#*Plf1yUuw9}u}Xfz`|*D=@l zrlWY%dFIxue*^O%{O1iKdtu&H^NAzZoaXx>V;et7%p}L0sSjv%$pAhy&07(HdS!3A z&sYD<=|#Y!c7710r#C$Io!004H*HBqfOsm^=fMH~7q*aj4w>|s-TOmo3f#fXAFi;5 zpq$q$7Q(z4loQ}{Ee40b086eCKq<+CuY3M@HLw5r;n&E4fLBW=cH>XVoks9>^r^f( zV$(qsuKif0e=H4SoMR) zz`f!pyMDJPQSlugUWd|DhpBhEtV+p7`M@k6U0$%w)oVBkCBsy}>U>unG9FlaQy8uR z*)x2p>#laqZ4Xm5=o{3uAJW`gnJ{%aTjkH?mDdazU%+HfL3uUX6aGG@^>^=bl#*0* zvQ2snxZ;7&J(OCqhwVw#0K*?@Fd{E1fMW{B4-qYZSgOo9eu!pcOa25Va1;-6RnUC! z!v(-|(aTQ~Xc+QAKJWgHf=w||@37q$;?c2p&|ODj3+_&@PMM1n+Mu4ejrhz4;9;P> zTKb$WxWB}WE|57aa=H=5c+iD~HaJjhaoc_H&TQ2RWYA|jl?pw}JsEY^K-nFP#F>{C zzrFgQcqR+=(n10+*{4(K3N3w)iq7s!?*wslRkhRF4726Otvl!`e)wcTNg4p9Db20H z4Zu(I<)VCm`B+j;5cHAD)C_L*l=JNP{4*F3-U<-4)q~2Ei{~0N;$}cC!DvY=^gJlU zx#u|7OJpH*nWWaY@6}*usg=eOlk%Dn5e~c3~yFpL@uw}u$=`Te*Ghg4utL7x<0nvGY zgZ0NHGS3q+RdywkoOz#IiSQiMEa78L^@KZn0V1iN`hv{FKz zz<<8|wF&7|m|Zc9TVb>50bhVm8ggRb?IYV$03y`6#anaDOEPx*e)_p z9gYyYb#jISU2hBC%7H$!Iu7G$09Z+QJhYVZafx1kIC8F_^X!}H)-4!hA+^V}_v2 zxZ$=41#>l9SBWb#*RB1#hsUYUhss3!009@jYK{rtCOBLDgCBfV@@=O~hLL7N4Qxh= ze#UKQAmrV=jLT9?QVDz|E7T#AAPfC}o{LGW{y=po2({5Hd%kE5Wb8nrlM*`UUSvixv$+ml-14rb-bbkV3}^*Wz5 zRiJP*%<1P^Io_*~U&v!_wLY~52xkzMO)&t1R_#NLLKtLWCX`0)MBbN2^pxp(v1@MN9{jk}ep_fl}dFgdTx zm|=!A2#uZv4G8ad{d5OBlQp;M@j22O>KSJtnHem&5}C0o&_>)7u6um&&+5BRSc&s(S5fGUgQ!I>dj^qVWLUMW}=}JKpcQS_R9Ynx$ zkD}*jSRJ6}JaO{GE}RL7pw%AyD7A5*5a+vOl&cN~F5;2dW?y*RiQ+DU5b3u{zTGAi(`qj5jDeS`4 zh6#4XS&%xX`%9#ukN$X~=Si_IrifI>48{Ze7ZXx|Bf*RDplhRH7X$St?xspKiiR3C10L?$vuS98otFLG!C2+}hIz93$^3eLpYlpWM1_dUKU zau;r_`tlB@Z#K*`B$6fEd&UgSHwywC*2qK2_vR303V_q+lHK(L*ne$0 z*_4C>@{RDjG{TY9Wz7ZO+9uNxA;bGG-a}Gwn+_r9RBKtLeZ7azDyKS%E==vYIR2&1 zJ&%|#tE7Rxz+>&0=;~T1{jNJMU5%ynS%bEZwItyGV*T5)1Oxf{~bDBh7aHt`FZW+0@=Oa|~er=);;L9l%{w!#Sr!^^QbxzYr#RJ^74TbiX@a zv+*zgMrNm#hCRm;C-5zGe4z=&CY{OPg=muPIJeD{hf>t^1vr8;zHc=8KvI8$dAZU0 z*V=bVxSsyPm1?12>ZBx{FhVk8Ws{RdE(n zzgN<0pjw|$lD;$?VktFT8~WH7*Y9i*v`1-Zox=$ zk0sd~1iCVK*~+N2&Ake9O7f3e9prLKYf+m!^c#U%=mneRaqhuR#S&dMJGEZvl9U2W zPXBUBVV&o|pJ49AqkGq!t}R;hhMXe%4{J#gxoB>s)41L7tS{k+sf2Pj_DXDY{~dJD z(LBWGRuk0mEZ4=-Tvee@iT$MzAWPV*u0WBSZQL2~DtpI%tln;Z^~a*uL1pR2%n12y zLO&CLy9gfNV|uS|Ig(?d0I+ZKHU+*?pfGgkkZ#6*eA(&A->a9&-VJEqz21k*#urt^ zD)YC*GwXr>!Ob`78-CCs-;LbH8` za!Fl0<9=Yo#tcCYF=rb-pD844JsE$_A!OyZ&<+vRdejb6X|wh%7&L=p<8!D zd_F56?Bawh3RIa);7Hv)w0z)#uF`dx8EXzwW!%J9g6K@n9Mdb8xE14-N>dCe)S~jt z+MSEYbR!U$V*)4TVkzW7Fz&U3VU53+c^@woj?@`SvUKeN&ZnoVoRTH65lQY7mD7rQ znSZc4E-lMZ6d`tL?a!%~R$+WjPI(M^vn6>KH0NHDIP?2!2cv1<*QrPRKzK0~Ri|$u zmq{M8-Rw5cAI=|1I~U7^*BT}VLByO{q;2Y7qe1%TphOKQp8~hpx?Cle|H{_Q0+_-~S&Am}s}ob+laOWz*#?L}V%x zv#V@$=7aYsvdOgl3_!(mqfY>FC1SIe%`(=m~c`P63NV~6kUNO`Et z0nL8R>&ceGwL>A6wY%nrPtvsC6uDlMx9^yEZpX`AI1-s=Prh{xoZnh0f(`ZWODP!C zT?FSMNo#pS&Uu(#{ii?86bRxyVhqVE(8S7qu0B@>z(m`2_L8pS_ceWVISNzMsBjuK z9Xj{mgT(8eiRNOu@?u7lpl_FDdVqof_{t_UG*tZjZ!=iKM)PihNsXYxJnob!vuLj= zaypaumgl(iDeHsA1)@0BwUis#`LtAzlPZ%gxU$NJffGSdef!#4m0>>nHqSw8=|gmX z3K!V`O&LA6yhL7!lHd+TOY%*+-Cgvkms+Z8FO0EU_Sz3)*~Un02BqM85nxs-=CV~i zs{m|lI^7Z;#Ezuv!3Ad@xk|XD@V%1Hr5%4+7E6zaQT!L})PcuHb*?sCSU4bdmrEAS zo14EBF7szW+g8VEGHKyb61~>;^BE@m}EGxBObZP?q@89tu?oNIv@;Ewkw zGJDWDdvp*NVvg4Z<>ZB0L1L|mb(W4jgO3yGMMgBWmu9N1&PnGdyFRfwBJUEcnyI%h zV+{!2(qPFsUI=|FL8tUR{Gkb=kJofxG3(*yBo{n#jrnG?D23smNR@$vXkv$ck&P`AiX$c zb{gm-r@&^1n%G3%4x0@|2X)&OTr=u}@c0 znvlcZ;QMB+pM?r)MbYN9V%MMr80r@2v@*aPBqi`I)6es;VCNo%Bz-;#cdP_{#?5bj zn9KV<1%jrsB$_Vz?mrXUj!PhN6k)C|<$$3LzN!>nf@0w`BE{RYGH3546gC zgeh&lf?i)=Bp4z}foHKCNoo;Dwq4RIKm;n&7Z|%T@o3wgound1uyrglt0XlF02!O{ zw6B-z7lQQ#3Tdnj{>1q9`}G_|&q< z3Jm&LBA6dGF`vSpNQGp{#tE`|9Kcp-U1uJs0@>kW(%ty|kxLT&noMI*=w?>UUiD?^ zNgeET(_G~0(dB3#F+E_CYp9-6{1T}=9OsM2N*$(HcaI9?L!n@j6~N3?Uny&^ zIN8}tCk#3l5b1<&tewPr3!d4Pgsw#sJ>wi7=1i-Z%4J`XyY>rP%Kx6bMHJl&AnML{ z6?`mvp(Dc6`q*}}ks;zCl1$KR{(Q#j+m3w%Yx%8537V8{k5@$evk4+MF0)W^By0&w z(1_7_2Ho_Sk3P;m$!FeX0dB$Iava$8llS}=$Dng=uuXY{oE590AW%a=2PL2RDd?9{ zch!fengUa62xxjXrgv9x3MF&dAa+qses+30gLTiE*)U)y5B5ql@lshP_t&Z`%n1QQ zH^u?KV4f}#)g`k~gq&WumF@QG6X~3wdwK9Uat-l;g*cHVdCz=ey797 zDRHBZmUg#8*88}QsfLo8=kOk!0h4-;E2WY^2cL_=0M&^pzcE5&JAbcTNw`id;UI6X zT#HG7LDE}?8)AxVj{+q1_HN;Kub-B7c=54X|R(%on!wC%C$%q zjT-X-qDvqINbGrG7Z)0C@PE%zZQ1UIJM^Bq6$|p5p1g!9iUP$Iw2O?2Y9#SYAWX08G)E(nIolUjF;?EsjLjv zfERB7{uu^J@)cI~5tqdYT`fk4VOi6AgnoV5c2>Xf zI0%4z0+z3~h^p(fOrM*4=i1k5_9I`j=Uq&Fc(GF;&SiH=%dIS7LIGYt&M{(IS0E&A zkz^IWH^VuCl8$q?j2N*943(fa&`Can>)*lPfYcBbOP9ra{7JLlSq;jJ4&9H6thP2S zgb|lKm+^$TOR!AE3>gQgjguY3eAO+J7K>USi=ij5NB^;f`4&x35aenVXJJOzv>2E9 zi%s~&ge*@vvY}i~@0!>w>vSffe2KgfHcI}G>}pK7%1u#D!(vfVyfnrg8uZB7(?T=H zBs7UV*4-(uz4AhRzzE-17+%6;eRYAKq4#2FOlkpC)*^o5WsEDF^H_Q2KXWl3|C(;9*2+u%QtFq zb;`+fTkCxrnlPEzMuU6}7*g*i@2y(H?0TtZHTADy0RK}yC}KiMv#>DHE#y$UXDj(v zv404Y^3S)V*c0>&Z6H_z?9%k-My2I{7a|gOI?5%7`_S z6gi;(KQ_pJ{nG_JNYc2MeG}YK(xtZ`th5PZmqJsOef!hW^QhAsTW~5xh7(9)Kq)>; zT0-b?5VUht`(RRO_nudwO6?)+e}9$%!xHtU6=LpOCI5-K;=NYbQ=853!6We3FEyXP zrw=#C&T)PI6*aL8hJZB#)%3`Bb}Dm6Pyz)o*|Z-CDF3sUlNS2r#I02UZhb)WZvOs*15ci8Z$9RGtkT@#E&jp@svtShZTs~(dGEQ`M;tvU6MyP$ z|M4iHy``*=>CcT@_p6@lBSXDLrFg2FmW?Ja9FlC)Gk&lM= z+%4~fP@8nam(}L$vs0Z2#VYo&Fa0L8c?X*<^$qxmMH<$A%;zgSQsfr!10>d`*EZ$KLwLLHOB^Mjt7f9n~% zwO3ECEB)th{I@>Gae4T|`*}t%L~mFyyFXvy-o0`4J7Zx*nblH8{Wb33?;DTMt?%1P z&WmnfsOF66W^?2^A_!cO%Ku+}o8_MLxw5UY_>k-cRl<3pG7>*OuPr*=_obSGHFM)_s2now&Mr#6!1RtGEe?%c>VeNMyWKMSz>Uw-?)u5%|Ma(GLTmuzC9X3#9$ zJzU7m`iJ$r`2=?2elm%$%)sKl*BkOveB<)HufXN67pVcj&7q#(yhm_W?jkg5*Dc@d zG<`Q+OgRrsx=yHMO`w6Nz0dDU%OAOo@C1p@bdZfr4_(?v#3NEo7We9=;hPHld!=r+ z2DHO5vf(C6Zv9}szHa%oE(vu8{lL5#Y*D=tJPQK@{014A=wT8BKypeTNmYg}fuq|f7>26@@4|!wGydH`--cXkIXrm1yYrnx zj=Fg%)+7bcx>lGw!QS?^34X;sI0*sBs0*i>Yo>+Y0VbfSkU?B!x{Jmr{mnJ}>w6W* z^2&zy&@~oE1bIw#^H^;B^yw|=N-p>2nnxuh#yQc08QwSHQ)}Ig_RQi1&{-Q$>_ja% zDo{Z7L>gjmOAcp)&R9VL^}-baceQ%xOU796Fcy5gXzVqf?LVRBE6D__S4(Si^Zeaa z?T3syV9S1g7Vmqo)tZco={H@Ueix|S_O{SM&Nl5cf!0d~0OUG(_Lbj0&sVN2PUiY0 z4KWAaddj=@5g5fuFy$wPps9xCw=zEC{O5poTVV-BHx$8Q60O_`2+MVM&f7aZHG>Om z1#9<<-y%No88MY@m=!Vi8yVSIHCLhfM z@3&c>OL4mO+2_RSnFZ9==*rZ8)dJ-vkPZ%7%UlH1!=_3x1?2F?{$~`*)DxmZ5vO?Y zK9iitByq=Kvtg6m{_S09cioVVT043I=3lfUN%%T+R--00GwykU>p&ABwAtDK7?p7e z+3j#IxqkOsbIk|dEH%6kweRqh9bW%6Kn;H?j02`9!RUzLA#iy&fFHR#)}9vS%c-v7 ze>Drxw!Vk!tG2cpmaAZb-vNs95$8vs+2px3gvb5_>32G8id>j#`lID+)L|blCPL>5 z)GdjKTddgGyr2bCwBKjrRXX)=VKEL!v3_wZF+*x50nKmNr)RZ)<&Vo3c6~RpLGYw) zJL-KHt(d!E^d~m=l8;C`nI||wn7`Qn!|(okKn#qbpys>;(*x3^wJx{}!>(d^!P8ZjT9hgG>3=41Fw7E z`PfPiq0@2h?xajRB-RgG2Wd?J^|rF!*geif@xDmblO&aBKfYE666+vzvsUyOL6*#M zEB#Zb(qJ)a?RUf(MD@xO$OmbX-uK^%8V1Ckla*tiqp+W^{l~;VWkq=ePJ*@q2KH9rDt^7xRYn zRXbHbq<2N6>iGe^-IZyc|8}7M&xGR{9E4JM_p!Ya%n&z6&MJ9qGOI9`S&WF{o~L?+ zt7$$eJThLG>`8WyB)jvTVwL|Rz0#7nJ^%(^T6R9A z!tDXa0E#V->GVg2AV6K+6EFIfBtRnFk@00X#;={xzx)}Lz0oljZ6}R_a_l1I-;DuJ zO?@h82M5(eFf@vukUkoiEt(MCG=o>e&(AghelM%O5mI2%Ykq)yBx=)O^hC^PL{Ut{ zcSvz3o*a-#g?gXgjv5furp?})6AC zbNY<|u`9>aR+3@t7j(k98ygYXUdVCj3g;Y&iCIQAtPAqIWMS!oT>vY)$JjDX5V-KS*PoPrG|{ z@$Pv?8E8omEN0utr|Ob#zWLDV^a4f|WNN1e6?>45#+@J$e#rTrIAFX3gG+|S&i38( zU-B8jC>bn8_(@~817^@bCJx`<%VuY1wy~;HyCdsql1?VzX$A;Lx}fBJ5ui(c!aQCf zHw{V_lVvo72Tj@F7)e^hD3)8%eOiI!U|aF#asQtwEHrwLL)1EQl2eo=2~|lgRy>>Z zw$pmVanZ*Vf_ns~klqA#c^91a-2>Q93E*GC1Xcwmnk{RY9v0)gpM>gv!DJF&l|0^V7aohD zfYfDij=seDH^tB2F9PC9OR~^Pg)f#AKDe~dRN!4?JwHGn#$=a)XEah|=v2`v1@b6! z;0nz5>s8CR4*WT5Vex(idnm+8z)j>nibHkwcbhkUT26#a3xh*4i}|5o(|mrV)E}V# z$N-tj)#E1b<`kEqNtr=~V~uP3;Iv*b_fU**5Q}NHC?~}Qs8>lx{6Kvqgr#W?-3P>R z9zpp?A>uYgF^%4MXI6s#=MezL zZxu#II-X`Pz<6%#-FsVSv1EvVSO9FPjF5#L76Ch>sd07e@MJ4SM2Q zpd$4}FL!6?dRdRRHyD>+WVSXB30)y)c-#|jFaV9viO1AJW^Ne?arA}5aJK;D2eaNL z^+2PK(}z}S7+v`B?BIIpK!qp%*(mfjh!$EK8=i8M0SNnb|4mOk&X zXeYgizir5E72GqkYOCaXdQLs^j~Lqj8aAYUvkn5w4y5>eh189C7u!8LJ(^I`NW8%t z)1tw!0Rq`<+sIjdV%e9QpTN?ahvR%w4C^Zb32)w2#QgroTR*v0zGqLqtgL><;7A{U z2Gs~L$E3~rXvH6!B>mXU>jXh&Jpt*X^!Mw~47v05FP{Hq{rGRS!c$ZOqd;*GNjbKi ze5tf?(h!?>Jvmb!7ZFNkd*a4xZVpW~0CpF?lDzrNzI>G6dk@Kp%FjhKSPu@w4yX}e z&bUbioGQVj5$QnQ(i?v4fgJZt$UH~2f!CT1!fpvCXuj|g3_aSMCC?h3nSd%HmuJzC z@Iziwxh-Cy9Dkj+-2x_>wBOv0=|-~PT7^|0belpKFjvB*3{vaUcMd(!Fk2RZV?5!8 z7oe$DIY=ZO#BVy84V==6;#U|!z|)&x9@M~#W#$nYJ#YhysR2$Kb&ulgw#y#n`br1@!vhs=Vne0OpP5oy^eGe$E z^f-Yd)?!JF`(xb@bJwnQ2uX>$bzv`UrR;?mTV!rYCH#(!Hy|B;;#kqy*9yxDHzESj3wJ5&CBlUZDfLg*-A zxGvljI!K=6`>dr}u%>x~v`6zP)~6tnb4InLHbywswJhEeVP}@ZlyMS&F%> z4*A}({)+g|Ph|7NZnv;6hYEcz{vzJJsZ-s}&TptP-$hvT1 z-_J_lZT4v-Rni*`R{7^ZC^=>jukX|=%+`DJ3#7yuP!KgBB_cWg?*`Yrl17pq{Ebl-3yW`y+|i-Y~*Ku4<~Hk*F5BnXlB>_I_9X& znO!uLPdMu1+6e6+AGVGeeFWG5FUMer!VIwtItuO3LD&7T^7FZV;3zoVbiBNFSRY{L zx{-O&^Er;oHmabBSOt@V$<;lu7UM8aKhrk@u8X|(lgZwa&XEkF{R9+6a0KbTQ!Wfx zQZsK82KSFIdMo))jAKM zAc#PK&0`mF1!1e<%(k0|lPlutOz#?+`==$hmAp|A9#*Fe)3$3Ys<1md8qGGfdwaQ$ z)mP;FP5Arwg-iS|`0XcB0Se#m-n8jH$mP9@ScdQfBrruAClnxygTlInEdR4~`ESuf zqyhCbaYKPQ>?&|~&s!hN{N+0@NtA-d%unCELw`Mjzr8?WCPHy&n?AAZtMG;Bqh@Z- zv-yA#o$0D^nZ4#e)TvO_TOr?b&aD3Ah$rShDvH`n`VSpk@8PI*u3{o?38~!VitAu2~|=&GUWRKSq#X0(ZsD{=DmX2<7eaJ(CqTGBhWZ_Rb#ec0E2|5(Bc@;bk z5I-TT*re2VGp{3uf72FSANKtxOcYj_DBP@y)PcuWSd`#>T9%fUZhk^D+#hY$!C}Y$ zP@)Nk0}oKgF2NY-+IuO=wl zlm^kq0cIj~zoS#Pdg*&c;iT;9x4{@xv>?G1sz!n9ITZc;ZQl&E+uM<|8c2{}l0+py zdZj*V9>wF+$a@Q%)mj{X%g2ikVe0;I$@rkQc6^AHtH^11Ij(mY=r?;}PYCELA@X&C zXB#R*ZD4rQw`ax(W(1=u+o?~_4kQ85!hZA=7eCV3(8LvjeWsLFWw8;mGXl7+2Er{3 zp9f%g9Uyu(Kr_Z5yoo`hqIb3E@#0QWjGPU5Io<_mcW2Uq!@!5+>B72Ee$>2o7PBz@N^EWw+$|&V+4h=l@&e+l(*BUbZ3Bq4$y{?67;2-9INE z1vXCnT(m7Y2HCl4#mz`|HAQ!g+a$J@CwGVPST#zEN=gBehXCa)im5h$7jrwz4* zJo}k@!7vOY39#o(^%$vx3F-ye4zY;z+|>u*@i^>+Oys8j9+wn1UoF3#L9WL5eP)|QY% zBrT_!9#{mJTShMc0W5|wr%buf&fH1=+f0j+CSOl1#vg$GbXfi!*F71#uu2*S`MDYL zUj7ppDguTmu*QhxNjsmQ@#zw$T(vg)asuRyC+Y=serh}DtUYjR1#=HN(cKutZ37il z+Lt3ap-t(PkVmBzAQIlo2<_Bu9E4R+ALWZ^PUkv%G{wqNAGYYq*N|jR7^KlF911ct z0{5uN3k3O)!u1}Xj-~mDvEuufdkA=e-mtIPf{OcnPz+|9mp{QJmWCQS{rKJxC0%8;JP$czJE&zQz)Wh|?Trvtf(cSg0(bz83S9jA z_4+UBf(S3fq?2MVh4$|BhmC4hvmMFf6r2;E7s zlOG@dvlk|dciS9=GDsOY-N5ct2YUlDagYL=Eb z`D1noUGqe7r#C22!pNFikfu+-n#+QJcR=@H64>!J-xJtbMdIDviek>o`ATGgbS|It zVr>OttXlMy4}B0-bL;`c>Foy@jb$6_r~3#)T!20w^Em8UwTab0-llWVXH?S`CRZeU*`J1L3} z>5VtVdQrZMH;4!#v&6h+ic5mw=npD5UV@3pp)kPbec5mEHfD)F$NVgHZOPpI6Sa?$ z6+~pT1pAuZ{B9|tUR@GEwQKlhUG880?!b@xsiJj7ljA0}QkJ+2Bam7~{2sno@ahBK zt4?@@GXcn0IJCRFE^8;tULlB|{lN#sH<<)S_U|-| z0F*T*=Eei$Y}|D7V=B~OyFL$|tB1T4h;(Tw z=0qH{QFVZ&7M7s=-D|lH*~%FY(df;#(SC|0NwL!8!{M_G{gNosxn7$tW1Gq|vAJ60 z{*5x)YEVKx$Mep%EkoZJyLZ)kP2nyB(Av5P{{nVZkBGYL!ai-bgs?Vf`fNE+0v?e# zhiX``dw`JH!G%bk9iVVC%F(v3*0TAh#1lN2A!Vjx=0CRg2E6Ua5ZdjVGzG1F5^f?< ziTiKeZx0@V7ff$S8YbUOK|8)@7ZDS6KRIkE7Adrg$LDwtbbvTnEM`d zr1%uFbmMrv9V8eXXb>Azvgr*`*M^(bzlHd5wAo%Ssyy~W;Hbr=URRR(=(|5tvS6W$ z@S=QP;nn-SJKaz)t=<;3@z#mnm?wPoaeD(r^}ypi5U9OXBOAD5_qH1`to3m_mZ!Us z5ut6oo|BLVQJmTqSxlqOtBsCoqB0NYd)2iUzd<8D&~K&Icm~U0IWq}r!E~Uj9lLqn z9CchFd(6FNxCTkLq@RUy)v{SYyCYuVlr4L#T)3Y~YkG^p(zQ5}EUk7h%qazWe2-uw z7t=f4y2GduebG?Dq#0^SIJE;0Oq)nML_>8+eQ!n!>l(jWBEPaRV8Hji1&Sz#_ON@q!db47bLc0+gCidAsZFb z_t-drHeZpjdR%nqDcP{`0*T645{JS05lCIjCZ<4pkcr%;ISztdm8no-yiPXAC;Oii zKUvdoTw16c>3Q6?JOK?4l+YzXvW1u!sQZsfej8AME=gLfNWrb|9f1k3>cX&6^5Tn! zh@Frasy|X}gKZ$1{YUF56m}w5P__B?T%BmdZB#XSoR!@?`f*sa8TGIq752(bY_?b@ z?1XO~)LVi1!{g8vH}^uyTj)rcm^dKZ#^-HHVSqwh-HvsuyR2{$-$9o3ohSU&?jZgQ zJfD1?b+PU%z`sE*#WTwIfV^()Sp{NbIACC|cm}o;ybtav;AaZZKU&XvMmZ@bntf(>+ z!~_Jqp1dy`)?jujGOuYFj3;XdE_lHGys{zA>NoMZ+{G@a)*VX7XZ$XkD@_lGuRISe}q+QQ~^r1|p( zpJB5VzDsKrJFPGG*#H@PJ6Da(MSA5b=m$gxfTPLP1eGk3bcg^CN!Vp1b3BVAzP$^O z$6;q<6`}L7I-ZWxvI{Xsp~Cb9IqVn-x4nEg2Ns7B6eHOmRtCA&w!MnqZ zfY%X!6hX9)-FmW}QefJE3J5zhLh42yiAIxr;#wocb|{?YEf^Z+D41Ex74^qxZVz^T z8YIiXc(@Cx@8}X|u^g-RHL*jg$!SRs7Jq`>+)(Rakl`KKv`upE-!8Ck2wZ)?Yh(+t z9!|&IJ+HZ0Hge0IuMpWqEB$=EGR-dq>k5b*Dp1S!3==2MRLqd@@s%$j)JMS-j5@+y zM9+@$d-?yd_ulbX|9$^(iN>L#azsODCsZOCp`{^Y9Ep(9qEbdiLP*#&WsUbDB{G5HU2 zym43l`e`IK)kTDEC79$e@@tIj{V%g)uN_L0fQFq2fhK1@ddEIh?E$YuKm4MV;vK1` z{~gKYB?9rjrtIpe-T|-#zk~Ry=%-pZ?cNZq&tg!D0azBoy-IKCp@qBu<)`&Wka+z= z{Gxjev3-S0gs>Cdu6tI>U`YHow0RP__#Y4C%1`d6hyKSWO;^kNPEEeY{WI{t=x;tS zcfph(s?TpPn1@Aq@@EtAKIVGs>aa1YP;%7S+Eh)&iNOQO{_kQS&GY{qi{V3}6>KAL zd5DyjfX#ObQi(%y3H^U{F8mEExHgij@*2|;X(l5a4_Q0w*cqGq8;TD1jB$JZi`vL>+TNHx)EiE09lI<0Fu$^j-3qTx|A`h-w$pzW#iA9vNiS}PTV6>S;F zlA3O3PojnkzDqHdb|H4IZ#m?Or{P-}xp2+FvaR`2s^9vaew3|;qURzmRk)UBm;3B= zp!}+~;AK4Sf1xD*Z8OT&;6pT4J4-H@O(cJjd2{P0>F#!i!S7jJz;$=iN{4?v)gPZZ zhp_cn=geZ?Z$-APjAJU}m-wlGT5p%7W|PspY|5R?+eJ<-!)(vlH)uG0j-I_~#3;_! zGrw7Q4$d$<7poGDju1!>&Qw6R^Y3zQG9)wKILP(o?sJ_0nY*QTdcU+eqa z84VsV;>HGk33h6mrg;T#>8wes>}ONo5dz{$-df`x?`4F9aNOqS`wnZ+*y7KZ3T@O* zjx9lp(OO6hF_vz-z$G5g<|d%=eLP3=rshrJ@6cI8;3nLh3zMYH^iURTGj7Pqse=zz z8Ax`V%6;!OI4pfPXl9X`g~tZoiire$>6#v*U{Pw_77PXRKjCQ|DA; zc?-@&4)-NgSXXL}KTxKz&`w__xF}MgIhS6;JQ{_H3UJgT{axb->#9J^S(|gn!Bde> z1dn~is^gS8MG^5bEj(Zb1FGbMcO;$f1|Aap=`kOvbamapABqpqm8^M%a$! z()RS1zGoHT_Xxs}TPyhBBVwZulW>`Z-`b%PP+Rj3d!f>6hn3b-q$b^9HKf1NyPz8j z0#*3R0NeO1>2n3Vn3}|GxNiXpVWLk1xL_ACTQ_y4`vecoy?J14jCpAqv-khFo&V#w zkTu51w>JBM4*P6Ebupbg&YW}JJCxVPpHh*vU@Ti)d z)^iE%JQ>|^rjFvXhC$XSV){o}`{1;JAD)8-xe~3i0kHAxF@FKz`d=;CM zdfZCZ7Cduwnu^AC9cI+P`hu@r$@z?SyBYh4)tbV^IP-33@ZPt}0+5^Zy4ECr$Jq+> ziUCebwq|V^VfW@=u5&q)We|OJIkM4yV_a0%4vEvJg$g8(>t9`Gy*lvFLt?Pt_d46lAgNQ zTu9hz&laikxhj&oP(Pk)Bcp9hBzy#lFdd_x>@%O9oxn-ERq%c2Hq++AL;@Cu4?$)> zR>V^cz_eM@{C;0_Uxss9%i0JtDMv|<=s`}Ex0Xpe)O~>b?IVtYv~w?x z8A{fOJ5NbPo4uMyzIp{(=Ga9N=~(We&2XXpec8?SC;bZHX=SwcK@Zqqe>KzJZy&B1 zg5PRe)H#|#q+a>y`BsG|loA}rPkeh8>|1_9Gg>14$J&BnU^+>cUqw7T3L9t!$20tx zpl8@=61mWjv+y$k&p^K~@N}6c(E5$2@X$_caM~b2=(B)pKoEo2H-|vY%TwGqb zmB|szgQ&;`O9rXc&rvpc)>2$Vr>&5O;W2;@!98bj<4hSbFq$3IX!}KJ+EQ@1sp>5o zw@j$H8bYos<=_5+Lea$oIGaOp*Nqzw{X~4so;NO;uj@e()OOsfZ3;(-axiyV-`pEN z^E)6z!!C=6ULbDL(pA~{(brkxqs&J~5h7wrQ1aRG=FQBh>K0cOR2mz8_?s|O$oT(d zWZz*%>%eJe$|f>1gaUQ3!x3LOC#|AUSzp8cT|rDZ*K>uZ^fvui*#>78P>lcQRcSC{6obl ziO-hQ_uYWGkhn=od|IeCd866wTC{&i*7uDgWeNQ>r?3=z_%1ujEIN14M_>Cp!Wckm zxcvx$@2d4Oabv%>bzJ9)r}LOf)!kUs4p!ln(qSIyXF+4S0KE4(a$}l$_yzc@8CBLW z9{da*sYHUOs$PO`{9Kk7v{vrvE%+u2r%~(zIEZaCVJ7=U3sJADkR2AENRhVy-j% z7zBG{YthaY+m*@IgO0GWgl9lNkQTN$G>^Oi67`vY+{7cd$fh$JX$edjQn_t{$*-aQ zc~77++ih*1eYwR)-E#q9nYg=;BNX?(KGU zemuVFCewVd&8yc?gj&;J2+}qw{7%;GipNv&|C%o~sI)9fzkZsZ@x$L|l5mv+N0+q5^ZTcrj2&{Z-#)m^tqF1|d+= z;aB`T(zw+Pw}X`%y;>~oI{ypffYx)K)ghO8X&B@>sl+nf@!nOh~O?CV`>HNNzgp(oa>;R-> zRG$N6&WaFjU}qaoz-^BBegzs2E$WNd5(9mG+Nrtm_&zFdW!4(#%7ZeY2)_;hmuk zs({~)LftOGIog0&XVg3`WhG{;>MSa55WyLhEa|J@9Gd!)Y|zG|)pR5-vWp~Y+O|)d zg&3Elqig`n(%p6+dH>iK{<~}3Z;vZyHE$sc6CY{`uIM=@wolfZ>_XTYb?$6(Q*mDK z|9c%2x8^m&dw5Myik`{S>Rmhe16-NN-jel~pM0i&|I+{SPY+44Kj*foooo(%!p#f2 zxENdZ28palY;^eY_u0|!T9~x^SLaAC$XSlx_uk#K97hK2|@UijDO(NIVr9a-t%F17+h$@b(UEf<8F_~a1>?n z_vzk?tTz3fSkXc}CU!L5QC{h~3`;-h%XiJmZNAC8V;CA({vm5EZjB@BNS4wcaZ!WfH@TefcPEBh*;_)sOAKe5+S*` zfWiVt>PDh@j`5Hwup^GQATTXC23AwCWb1SEG;zDw zz499vq%~z(K>0{6t8K9Ke6&s}9wq;~w5Kxafr{Mb-kogQmI!DiZnjuo*@3IC{KPG8 zw+>6izn(rEsW?3C#hUKS_9J{ox?>B^ ztXp*!w&>+IVZ8?6#YMu~TedzVBHaMbbV|)O(~}??{m$vIh}IMO)I3ygU4!^+l#($) zs+cgv5=A4+5?`UR3=$N53ux~+*bu< ze;ASdgOfK3mDwSA4Ke^XymN6vis#&~w&N29WG<&r!WGxvkD+JFc+e|9x@c>%ZZ~n? zj)B>B)fEzAD&Xy~CToB#55>`pn+7JdQ|+t4mSST-fbXUY*N` z=>0!0BC`F9i2+2~7A099AH0FZvD@<*qmx)N89Gw*UU$KMNjuCq%baGm{VB?*lw8(oG@hk7E1r`;i0+zh5^-A`c6bTPS7iiMAHalyS zdw~1)mF4Ke#_-f%WA#>UfBmjgSDn3{dIwmRNVevqj`Vn0qx@3LnkORh zJ0%4CmUx%LmkV6>bp?)dM62%IW4&o$Nu}v$fQjcPhHNJ|gC7TV83FEYZ;#1$PLo8a+q4Os848HNrW8VU!Sc|q zyXm>aS)|1(wDp1Q&)nlHOV8_pK-Jkb=VJC?pq`~ZMT_4eIKWah?ttj$i1a`M&AXb@ z-|4c>Mrd4ksI?VaF;aBCqGs>7NwC<`)vD428L|BKXbjK<3fF8xP`*oW4mz+ zu{x)x1{^f#akqa=*%X|to!U4^);t zAtH%ts|U200E0wvx=hD?9+?{Aj9etsNwdpWXIA67@a?r-xdi`Zapc^u-zWG!#Qz%g ze$gn4gV|NL5umS+f3^@jdego%^T_W$8H%~v+N|nB*hcEdRcn7B zwtN`<$>nyO3|g0kTi8eso_?`g)K!tI(6s^fB|*DNXOj!&@X+rcsO4 z*y9KR@hip^nrQB-wSK0@7RR{R55nj`v^H5L{=;#3>GR_HwH(4L#0)(uX%;F&{GUbv z*^~o^da!17TUTyN9}aqBJ8f;>E#Tow7$@y|L;&}lwBzr;crS-5=mvqXfUa@ATg$&I zy&o%<9EtRE3qRt2=&$@D*|{{u?_)|eJQ1i~vWVCg02iv& zdLqd)SLNG2TA{rHU&tdxi4U+8J)}-kE?G=E8e-mX?COzHgBA^1vMSWMmw+^IUR5bL ztgv${P2m?n&>CcO`+c-SVV|$kgm7AVUOlc$Xn%q zZG*X`L|24VFx{Rm9MnSsAz2~`CpyPUKQuE^^VK*w2PR`IZw z(-tlB>qjL{q4r%m6{Tr()4-2bmr{Ff5|^J&VZn}&H8$3)GjlooE)@FRk@+D_qZQ=W zLyq4bAwT*yfa#K2+MC04w5t~+XT2~lv*qg^hu01$l6};JxU(Y}%_C{R#aY{NrNBax@ zlOJhFoZO<^q;|1H?DNZ!U}fK%GN!Ndb+;eQ2T}KGgO@H<&N{o&z2cI%JGI9L#l-J>B=Dj^kRde6~SL8(x2vr>cd5oh+@O zkJ|X1_Nwm$f3@H1BdG;ybU2(QFzE~52@?u7VhQ2rZ?*s`+!}da+G6o0zo(uVZmZGP zHfhgRnl8liOYIiY6&{2f3I1JRL9-XEfJnvsuUu4Nn#IO4j$HtqUrP2j`?@6mcsuqJ z9s9d^87;p^H(#b;;xC?iN%j3c$3~9W`xk4k^(m~5rSscmp8m`U>u$TR#j$TC1DDF>FzN3OE;p2a2 z!PIfw9-8obBd#I`%Id$ILH_GB2B%{EW;L}JY{kL7CtxA*ic4*Y0^eGeP>$G-;lYKT zZqI033JSUD20v?oEF6OuaMc!`b8`p%eID|6;jXnbEI+AjQGWVqlI&wPvki%X)4VH? zLb#l&qOxDfq{;i`M@Kr>l1lKT1VJy(UwMm~sOFe`Do&TW+i4Bg{UWZCPI#ho&UXr< zKjXA@lpPb!yz1p)t$N!Cv|%CFAl+A&C;=lsdTw*ToJW^kK>qpN|ZE4o!n=F~f07;_pi zl)0CI?naFa-FbMSCAV`t;JgZ5i$7Q(LVl&o`*~(QV3qvb?pDF5n8)ZQl4z8!{ZB zoS?JEVecj6Cvy3lET{3kuyC&B$J^uGSdLr|@u?)W^BcE2QeyE7Jz&vt>iIHT$NAJy zR-q-K1{Ruzn$+HtAsTpTcdZz*`{augyZO>du2hG?d?Kl_{Rl^+6Q$pJ>oZ%Qjf4+R zJoD)eYTWc?@%dLkXlb-zd+NCT*!!F6)}r#qJGNR}G^-SLQLo!nGhma{fh2`W%=_!L z7Y-d&to`uK<6M#viycOOUjE+Lfh|{Qb7@6d=<6a34;VRaq`g-=p~RzAtdd6&8f|ph zsJryie7z8QtF+?|Sa@D6-HSPFJ7S*us*{vhR>j4}xYJ|!O_xS&2n{|<4x7$croa)K z?D!3%qgFri$HxZ~GLkNb({~CTi~ls{>DLys%r$RM0i%W=&vl={5wuLaU= z=3f&Iv%k1;+ zh^Z4%T|s1I{FKhGi4>q!G&Wj?(#zy;DkZRknWTeMS*O!=HeU;T?J+WtTg|^8MH59} zgX&BY2Te0g`6C&~2NQ}6=%Wh+ zS@sDgYF%y@w{>EB#D6q6@_6J1=HS;yyHmdHzCp5MR>?EBtq`1N?Q`&2X1a?+>w40u zRq@d@iih5ajm@Ia78IKwQmAE#E1MP+(O!;2lC#y6^GEk8u5XV$ccqAn?oi6zl)D3i zCk=xSO=SV6pOA)g$m*4BApb*ynHJ#}LQRZJz z9$_?d_tDIqGrXgjaVXTg3ZtORk7p>`ydd~dmj6YFq5-du2*Z&|VS_7mZsE@!#~)j{ zgs!2KUX_`*C+le`OjuY)3SPo6YStcy+^eHoatdY@sQGWI5zes@80jxrIyRO`zo)tD zC~aIM|91`;x9zW<@xp7?gUw&w0?;_A*?Tm1<;M2r7jMo|gy`=POT1~3;BG;eJ??Cm z4W1j*t_k1(dx>zPCb|+`vknTZm@v&}PisZfZrO@WC}ysCb>-8nTktJ6{CZ9G`x~@SI=Heu-Rw?p)vLW2t|5OM``9A z$*q83@FQMF{Le_W&Hax{DNdBxtva-3=>O!}eHT`!C-$PvbkPbiA{wM6Kw1&;&$Q-&yC?{A*#-x{T7GH$Gk=87BQa$2rc-JyLkTLk8=(_3bRSxG>67irh$7 zD$|pZ^xzGNtr-p#LzucQRa{@I?gggy}_P=6<_UG5?6}+#??Sr7R(;SvN(;L`V8fBIwUXB;}@S|GmJs zz&&x(+>mPtlO-we)x|p*i+Lr%;>^)EmhdCR%YCn)cj%^Ef=;;QmzZH0XGT7DGx)mI zq|#o#ytT%H)?i$DwtGaEYjcV#{_nSVwnsnK6bvK4r5t2+Epz(8rWxL3?gu{oOrCoB z^pTHO0HR%?GC6SK7+PnX0be4#;_lc=a@KZ$%XQ_19QWb(?<`7|$5cK0W{2q{pNjSu zbr=;y&J?vnuZ&m1bKR`794oJ( z_NYqaXok{E`;-7_KUlU>YgA+vs8s7*B_HLknk196oU8lB;8{|j# z5!~X>bLV}2@~I@y-OYeaD3H5dF+&N?8|Jrqds70IImka$2P929{Mg@SUl$S8BzW;0 z`wZ7KlKN0>exOc%j63+F7riscTBEf{EJ+C3I!Eo(wr}RFOH`%12e0`c8W>d@202d= z&AHeSTB(lN+c;N%~hDnFc&c|L6UAN8QeKj`bo3XJN<|iBjDUI_xCwia^tw49( zY9?wpG4xa>|F7Dkf9RQ?rO4J3$qiL%!oOR-aU{~sUXJ3n2BBDInP-?+sOu{5NjS!H zoa`md@B{XjG6DJaprOwEdg`$MK`NnCU4$d{gMvC}K9|k0(!cO?j!3Hw?WZd3P%X#f zB9)Y$3X(fP+5!{bK4G=>CHXI$H_Qz_e9Ei?%IpOEkHwzS0DrZ81X9lT8DE?9D}8W` zYOm_5ViGoSw9Zx?6usn~cFDTBQD8R$P8Lt7N=$cgUv&I^p^WT_qqMXA3Ux9p&8NP5 z`$u}Z-ON)WII9-#<_FT4L2?FHkvnDLzHW&EH|vOg4dPZ8Qb&qKGtswR@l4OAdj%hU zrP(ybSAo*D^x`NF3NPcKt6RnCEh$~c+Kr1T666dRH;wns%-CnDe7Rh|qpgcaFfeS( zFflPLDr||mnD4biNG-H$w{W9qyzSs$r%)SdrkMhVti2c%@t2(4d>%*$ zWts75!{NX+=V>&O3}L8W@vWZ9Unra*-QZ_J_X#@vl2)Q9{}z6;?`Ua7;@pHP6S~u3 zX82uq=Xu-`#cJYRh<=T^CzQPZmR8yRzLy8jCw~>A6)lsoNo_0T>GP(9dwxw#x{}nm z)OLNVDs467deu2mYJ!_WBa2A^20iA3vp?rKwh#}zAsfJp{kKf!iZnKKNe-i9J+yO+ zsAImD%}7hoN6T@EiQvP&Zl{jy7b!ax^wBz#elxSrMv`mk{e(mD8A1`>!o|_=(jWSD z?W^7CD2POnGn_fZX3X=-SB-Jg237g_8?OZ&w9j1o0tTxR6W@$3ZoIJFti3Eq)+0mC z?x5q)c#n(i@NUbI#|iwhYYR_?%xoMq7aX2DR?{LGJk9$OC7MLN97!>|XuG~Qxa&H7 zyMeg=*ot(3x3GCUyf+tA=zZLMk|Ty2RwteLywo@3wSl4|Q(B)BHbRqul8usWY^oJY-?LFvDLqZHzZ0Mjm0W)*TpQR)4R zT5ZXy!;fb;{d~TMwnhtv$gI@hisum@-MppQOe2^s;l{p9t?zeHXQ`%qPnxwTUK%UMw+W6R4A)*XU~cd483UGM2#*wO07`!+43M@a}a$gzfZ92`P71=E60{M zyMty}PRJEmWWb}Y-7P!BoZprbtn0~iX~gE-oHii3ESo+=bEh^T0NKQ(@o8$FvC(v% zoUSf+8ztHmmE5iCBucNoCq^7B%YXRP8d-a@6^nd@Lio9x=2NR^x79Az;pr(?*U`=t z$Ml=qjjtBYDoZc>tNqXH1Wb%B=d=0l=G}ygqwiJLj>(JU@F{Y|JP&T%+sEg_|D0|R zNcTAFWf=g1h9FOx5rfzF$61u?GyK$d9*Gn?Q!=DbjCp@_a+mqMCf((BakfK?rqj|# zkuP)+W19px1E<`zSeooM5su^CJ(cC{6ys?-Q&K$V#blQ)xJ{_<>8$(ywTGeQc(93y zsfR`FNferJ<#iF*Jm)c%EZ$-^74yJO4Vd$xCjw(D4-@w+)_kvZ4C2vJGK+UOaPqd} z%5LJ~O}J|oJ>P#DC4-t0hI}+f;l(Q$=Jx-i>IWlWFX_>~ARAaB1|R>-;ICdY#&xZP zVdYQe2D5+QB&ZO>$i0!K_hk9VS+wWc3dUJf2f72-xcJE%fBMD${_p+JgT5s<@&6GEIh_w<6C-T0H` z?fkIGf5F>}pCC8ByyqXbeh;BiN;i2XIA6pMh}w~n$~}oJol@rYn&CuJYKf!-ez)iM zIWLbQ<5Xfy&q9IyEATeLQ=Kzs&W9T^7@r;kzucN2TB)#xIrd!mbSR8YNM#iQN^6`=1L02d2`X#4DuS9|8PVF2cdd;z4rACkQM?YiUyfOgW(-Smj?gaJ@F6eJf= zm6`n-HX`%cu}*qO=vdm2X5AadM^5VdPM&;4WIU)gP8>LJ!0-@=jlYdq&|I#uBJno0 zC^Yp+yx1|rr1v^VJ{s-K-BfMadk$=CV&ZKmGfaY{VxdTud;|r_i}VdURDpekVbuE- z0V^9-{PuT0cJ07tCi7yD3jQ zpKD@9_Kbur$bfcleZD3&DZ^WP*^)82H(e=KLxxsk1Em+yI+=BU+c~7rdh8d;*CAwR z0)E#8o@!loz-)oUU)CO3XS}a)2g?F*Bn{EdZSoHgFBovR2yw?Y5D7WF zmFgu-o4?t+W}2j4tZqUTHDnfs9&{Tx7`8Gg+k{7)n7c+XaI1K=_ny5rUnPmHkAur} zS8lu5_v6>6vO>Cj6f1mzq^J}Z({oZJ=u0Rv2+;*7()7q{?<0w%< z*mvk)O6^!4ZHpRBj&|%99;kzewD7Ky`_Se$^9vb(Al+UP@|1Ny7zB?DJ(#TEJry01 zKJpQEPR%1~w5Y=`cNrebOe3kN7blRob@>UE=BY%T=8YH&&Q>(xUh|d+zjNvtZyq6Y z|GIbZ=1DfVML9z^sK*$)+G;*X$jdry(qw&0H@Lurssc>Xv&l8ES*RX3lkasg(^hKZ z8T;tmRyr_lp_On?TRsQTfg>SNKSXBAFDAfQV{Y8KIlX&X=%$G zfDWCxM%=|L9Jl{~!0d|p`)=@>ha9|#mj>}nabg|+@L5(*E`34Q5-|)gkP%>>LJ8rQ z)eO@VRUc3(5k75;@8K3i%%e^gLk&|I4z5(^9nSc$r&G1}6b!-^;2T-;6<=^Z2m zawgMvJ1zhhsyRP{KD^#S-I@PqjlQbl}_vz-BfTi`qTl{W<`aU zQjUG86g$n4WO$i$mLUjPTXeVJrVhvXZ$qRFeCR8$p2+B)=Iv&A#Bnc8^-ze4Z%Uo* zI5Pw%pIJiY&UCm@mpzUg3h}q-Nm({E#e>u{FQGloOwDrhxzv;IDONbBsuLgc%d}pf zYt#3lHgU@c0!z3El{TdogYt_wEBajYTUxOzBql;^w4F!cA3fk=xh#o#?o+eatEQrB zBuqt+Ej+Rj^rDA?>%xCzf$Oj?qvG_D^ac4hrgDkAt!4LkTr4=pTGIR*{(z=(FjM7S2?=viq~AxeJDyiFY3u zc1PH91gH&%5n!p&n_m$yJD9{veRnT zrG7Y6M~i@fG21Y;NA8l?KAWOGr{*lM)CZnsbXKRBCwpz&Si9djRe*B}gGsv!1cD6n z(3)#^8~dDVLDB2olbwmI9|~p>by^g3R(z@rj-v|~E<8kC#1u zTPo5Wvhk{2)>2V}XS=Q$kV}!MaKW9?a#gk_l=Bi6BI*JBW1K5>zP!0VHbCJ;@|u{m zD9Qq2^3lQnX}Gd>{3}O|>iYwNb39f0YBcK8KDuNY(YX>~Shw+5d}y%5$w+I!_CnW! z@7mEto~aZS=KT2hq>s&#wmFUe$+(@`wl^Ug1B5?ydBGnhq@mfo;k%q%#)2L0jTOi4 zYNZ=XtM|DrmMPuN%{C!dXfj`Ks>|aN%7ex*8S{O->u`-U-rz4~oQ2PTnx7-nP{Lf? z-B`>z2X=e$ZD@W2aXKLD|gGV@OT_XpF32m0_Ze8D@ zJk3rE@S18aPpChc_Y^YK8gVX*VwJ*siv@eLgTKET_iaLT;ay!=Ara(y+L1#2Wu&wB zBW9gtz&@IW0^_3~pnT-y?iGa|%uq5;hVF*cz%Rw~n~vI^Nnfzz&}GX`h%LNgPWtD4 z_$c*@IU6@yWgK`fYqj2?gVoN{B|zfEL-WM8rTa?D$e!dXw{<+U&z8 za=HUteVHCo7UsbnoBQhkSg4)x)Ux7*WfY669ew#SVl)pmRyGl{mcsWBA3h94hxrx0 z$z6}tY%_i~F0;MU0W8;@t}Ayk_mkMGp#pP%ladCj@YexZr?bUgwG~XYD2Q2;Tw`jt z+U!$A4t1n|JL4!nN%D)cn4G|S*($iM3RciX4?om>4vBuoP5m9=MA;n>&uluJmLC^E zchVdrl6Av#!_iqfKFYIbSE6(??fIVe(+{G7FUfM@>2lVeV<5OUEP&#S!_%a)#v78A zk-F?|*?Qt>1TcAVs+YOW!3@aqq5&x-@Aj0q5)Eg&9sVcu2ggvq1^kFgGyAfaQv-!v zYW0PmpYdUrbwNZ=4EMbON^->bxmy2+-owywjZw{g^Tl-e5UL&~>p>K}|Yv z1iTutA%v!wP8VUBD2`rLU@_RPk?^h;mC2!8*^SqaLh@p6J@$oUlb@j52l3z0NmObg zB-Xfo%rdktH zVh;&4KJFY=D*q{Zz;KmGemP{$)!WDBu!)Ql<|Dk2BrSXWj_GLNe0eD+m=H#HxvCfu ztduJdqMy_yGx0M&FH17KNtu>Q+7jZA6;V0y8S$#v_+8U!OH9CUH5`H!z6qa7gh~LD zi!hi=$)MbRa{7SMvD#(IOZWl`l?OXyq_~-$6T!j~(Y$}%z~t{yvSj$1-$ll zw>LJ>T%kEVt$nsg>s9PuGb;6pf+)*8`6v9R(W00Qcb_N?lz~e=^55yNNQR^Np%Ym! zk}TMvj&4RqCv$&;!T@0Gin;yztlRg?5sr`z?qe%`3Nm6SW8OJk=iGMh1?T+KW};ReeDhTOND~Ma9SDdu zJ`s%}*sMHZ^##g+{%55HQ0`J*rGX(p@;F?-d5^#&YA>tMs!)Ch`nI5N#Gaw*bgKVd zT(@;uS4*X@_6I4zHA=g*t z_>yeU2fnr$XHfcDG=40s;kZF^40vMau6P=w1qNxaZbIdeW@Q?8S^&Qb?zKL%m=1N? z)~&rx%$GvD4o)w@oM>zLuVCQ-x6yD2n7cW0o5dCy3rqedEbv<;^zZ**k0SSwnSsS- zW?{m)DKhn7zzRLQ?D=+Cp`Rk$tj5Wp#D9}JbIGr-=-y4ANuhY2{vfqiJ+_q zxKax>Tw)KUXTxg3cvpSD*Kw1o0Y)dgJd(Y4-PQbhRDOG)nU{Ikj9K%a?Ygrx(BC)B z|6y8v)5w!x`hNO|Urh*VKEt1_v3aVlmvEeg+rP|9YJPPubpL~u`koKZXGf1XFN4o$0lb{t8(P!sZWD2sk?NZn3^Zjm@Z0--=Z+Ir^6e{g#p{@x=}nK~u>e_d9DJZeDscZ~)6iO*HP_!i0}ZuXrx6niL2MKJK| zKfVQC_8zh$Z0=gfG7FP0{p~3a#&+o;P`KBb7v@v+1NddP*WyvXh#ZsJ$kaky38dG_ zG1iI)uF3mFcbej+evvClLG(^(0o!faoA`pyJiEVWa+&jb;l*YZUFZw{^V2gP^$U4a z_cQm-?&Y<{=P7D>x1RALRq=F25UJ~CpOT#@gH zzlMeT#Tx45oBi_^(!eGRMi(x)$L@e4B*LjsrX_3x;n@9;4$n2Hk zWm-Zol@r2>jD=zWc$7;i=5xvvmj*t^9`dN?+y%X;cKu|`;=Rb1@gfz;&S`nqS26XA zTtN2e_rTk;_VB*Ni`;rBi{VtsPW;vD_2Vtor(VU1_ZBP1w5*+e!RsI z=0f5*X03RiVW6}f?JHN{qWtrdL#IF8zT`ztbvW!f>9b|amM@^%o&_u!>F2jvj2kS7 z1j3aDzIq1O+nndGFlnnqTipSEQtZmTcgvtPA6VRkQ4MC-SMuxIh_I^CIb1? z1M(LIEC@3BAMNJq+NV3Z(n=|uLd%ygjkfM@Rvz*=Zawg%qc)>f(Odc=6fe=>Jsd?Z zr;^qLtD1JWu6AldT@r<&@}|~P?kT^c>CD(J54xt=m65~U>Oazjw^8;<}so-w=BzbQg;YyE@jB zdG%3FmHv^`S||d_fLC0AM`?fZE*oHS=h4ovw)B~CM9!TlO3m^6n?{XsmJ%mBtsB|^om5d5lb3 z(+{*}z-#iGm5~oK01hn2X1t0lnd2 zj#@KiVtlmPXvbN|KROU$7YS@9`QQT>h!T)};kmiWQ)lPO^7@ip#h+!t{6FRzmcKs^ z+S^2*Z-B%-&iH5XYHTjpezpHx2s8q=!(Fx$DZ~}kP{!g=uDn%d4xTR?slpxJzD`(w zl|;TU0WG?~S+Qm~*5o|Op~Own{+gx`{3QnN`~I_Eh7$lj3@yY*Be zzXU8U(!wKvB$`1%nAkzYpo;~Lev3c*=~*3p$)S zKm@EW2t+bA-fy^my=6nr0x_-p(56@a@79VOO-c(nwpR6st*pFcJ9-SG6leXGCg8$> z>+4vSVsXCsE}TzUZScGq?=jK;)s+R8^xHT#aeXaEC)Ng%M%x%LlQ2v#43Fh1wz*H~ zfQ#2?Orlg2gNzlJdr53h&4`IP<6gRKx1UvH974zFB$K8JJi?<7B@xGK)iSq8l{K^c zR^GH>@)O;cS`W__(Dg5%`-x{_p**AS3@9NO9vry*m-T|MUUYNrlJD_6R_$9j6A!g% zP1U)Q^UhTR=koI>^-|0$2~DFRZ=TZ4$#ZZ4FSeAN%N}`QubA!-tsWvFZC3_hjH%o4t3}Fm{UZVcw-oPFKfpL{6b28n@hD6>DiEVkZBv_W-2rIJypn->7#^c7qor+0Q>e$u z()Pv`bk1l@WderO#KI9v?e_R_Lp(_HhOoZKEBHD09|{RJe8D|i@>5R}L-hL*KN~MH zCYcUQ4-mOG@RqPJ-C=14cc)masl)_v9F_`RQsof{vG~YAh8`0EnX-Bib5x5$+j1Db$ zkVz#mnuGXiq?DL@k$K&C@7M7=6Xm#sNRKd8Wg>eJ=ccO4OE$Y^GTyE3%PwNjM&`5b zQSs@)q=L*Bhq5SJ5#8$;PC1G0Kft5;Z~P5^ma#9(+SJn~4P$eCTJzwhsV28QY@CbnL`|F0Tzc0>z%m`mW2| zH1*?>AgrRoIxeO!WHC!LIR!G@WVIIF_Cw6)+R2WZRpvI=sdHaLpJT}il`qWK@ri;i zMd&t(q?-_7S%tblA6M%jMuiwXki-e%9^z1q1;ZJU*0{9oSKGob8{&Xv6d+(+gH=pz zbF@iQ9^PzS6Ye9<6AWScpSK_H8Z4C!!3DQuP01PG`Ln)-u~crcym@OOel5jRdmIZm z-gd$U7C)}6+vpW1QKUR%S(0|o(k=`3a3u(@HY6oLM^#eM!N==QWc>VmNx*jeS51MM zt&*q2kIrDqy^&idfPs)mq>`S@8I-*!jY@Zf&<`4jw|`q$k{NYj>Vk~dRR<5+^5o=l zrY{6AzS?+q9mAGIiv9LGOw^VDuvxOhyJxCpL`u6?*t`2Zs9tmILa{qOx$~T5tfc$o z74-aL0^2Kclou;;;d^Xkg^JcwW%3V(j%)9iB4`f@$*d!x$dO2voL z_)@RMxD+hyj?Narn5k&|XTGf_aIi4!p)LQMz;+ENHU7j=OTm(qwOuJ!c*@WHS#g;>VM~3kmHJ{nQOF#i_y&zlcv(7tEE{I?3 zdpf{Ek-3m`GGj;XGe$An$y>kmC~xD`3vJK;z6MfX|6lPMxF2~vethcAojXS&b$6o1 zmNS(SQDP8P|GdCl$$6>qz5W#QN+NsNqsYp}=<*+s<*#yPWk=J|ID;pU9DJs5tk>;p z%2%@5{BPdm9~-liq)a??Xw@b=+1pt6?DPLcp|m@U-}iFGgXDeq*=KJyO_oG|u275> z@niDJjZZW85+`w;4<-y8{x$_aMtO^Z9PXmVJAqShKBqHB6Aq=Bfw3U-N|H2o>eCD* z#&BZ+KYN5-7O>B<KMtucS-ysNRY*vHEWV=b_8}-BSVDL z`7+zC=>g9jAH#p>fiW|W=buWB`M3@~ozN9>kzGNCJTpuU8EfOqD)JuC1!#c9Q@y8! z$9{wOR11SWxbt z%BTD$*>mRMYfpOlX$O0bHu+QA=W0d=_mNqJ(z~~OanunRs+!d`$cOTfDt;c%5j)$<4z=E_u!B)x%Ae%XECc zR7M~ZU<~y1SoAY5=$q;GdSoE&)06XHl}&+4$ttL|zbO)nL-XWO+P7%TRQRlGto!fN z!-MF~_V^(@3=`d2s!0IC@YLxz|S2)gbdX zifj}OFby989=vw9%v9H%s}=4llYDncKG$R9Px9`g3;jzENFR_IjP(`t`=i~H;&Al%cTp}n{lPXEVg)H0K_il!n@lG_?pf&L4g!c z#y2Gg?_#JuF|76@yFdOuw2%S=K+vjwP|v7|<{(GxC_K6gxnCXXirF&%&u1QEJ)b3u z;QmJSy}X;q^Z82;F$!)1vi}DMqZJ#+43pv%*a)TMYsQ|di>Df^l_^i($HM)#5-45$ zEGpGd06fJU_J8%4yK`mjJ3>+e^X)@D%N{GYUl0?J^Ca<>+I}) zwngs(ENa4&>i|XC2PSrqE(OL*y71?TMe3DwxlzO}y))1&`Rsc1T%V%f`V;%^npgWI(CQCHh8=QR?O}$E+ z$SU;^RF~t8Ab)xy#R&7Y3;NBP)F-aR=$o@Tpu?*qE>DuyBe5l*ow7}9{Wf_YnAX#g z#Z7oqKnN;;GiwjL#l$N`k20^ds@ts`F0e^ojY|y>-Q^nxkD1knmZZ9P{Xj5x43JMv zz^`Glc1)e!0CX<&Hhi#gl%qWpIG%p3Tg~=`tglk$l>V5mXK_~b-S=9y%2kh?TKC;p z8SRq*ZpmL=0`!F^9<1Ek4sgh(3B?WZ|h|nfbIIk(eTH z$m=2zSCPuJNf zoA0?GX9NBuz9#nyqYYb&CF2hITuylUhymxhsuc5xV>gq)tZVW(&N3@wZ15OPw60JL z7tDIza~{jIXUVtJF`T#Er13r(9MD|Ux>fRnh6)#!|HJ;uA!Es(Chr!lbXCSPETQU2 zOcwW%m!WP0W&7teU2ru-Z*MN|HlMInpxqKx@jeo^0yO zrTL(ABI#0e3P)d8Wg}d254f=?yrd;Ogp4+oekznzenOx4306@=@ZIVvG4C`46)~UwoD4 zJVd>g*u~;$0y^F*GY)$beCbBx)4NBezS0&Ds?*89o3nQF7U3w^s*rtW@*l9X;qUb) z+${G^y++QFp4=%WYwIf4csxz4^>)T!&xlNY@?@sz`~!S-lDx?F;%?p9r-%__K+ASU zJkfVz)GhT%xQjvX`16NhcfzCk8hy1m!(2#)uJLS)UX3>oKRfH^tk-Q*o-wocgyPX} zdoEou*X|JM7(}?&F}_SGf@j>)Xyl&U!hb=AUJ;RuNZ!)?`?3{ynxetF^^Egri>ZmoswFEFLT8iakH8pa4u2Je$@c!H4K$(RNu++{^$0pRk zwLt`bOOjiA>a)YneR;J+x+&1x#<)*8Qa97o+Y0x!*tS(oexu*#{=M(vy@~CaRdA}8 zfA%j}@~-k`%<*|$2`f?L@^%g*CitPb3u+}69CQ=Vhb7Uqo8DajkTJg8X0C&oXCe1D z`GW_eaoMO&i-2@vN%|#4?`}95A&@erYU|Y@{=+`kNd(?k`UP>8iD|qQZ1E+s`aqW?AWs`2q!pcFo9~*~9>rs$0JK$my1D5>Hu}mlEi4*(M zkuXr|>FTOms%7Ft(BKji`=*$`vo~Z@3AmrIq{+Jezb|!$B;(TzyU>|SVL-C44YVw) z-YC6nA{lZIPhdb491A^UY;BVBK7{SW=rjrs7d!k}Y=7xR z_hGhjk%%Z@9QiJGPo&$g5*aP%&MshyD@5NlOZIZ(IdUZpMQ=Iy$Q^DyX)yb(D#Pxt zL}^BHd(05V^Mc;)C?>crl>Ztb(aN*7Y0~MXnDrn>-fZ}??F0h0ww-vxY>U*Ek$^}o zGkEOxfS`HsX+7%ocEXEvG5Y>)&ZA&r!lYf0-|=f?9UosNZGQhCCqm*$Qf~?w3-y&M z;u}rl>r6mmh8gSCVK+rh@Q`87?v3O1$$SF%iL33x$*=*NdcFEl43ztZe! z!8O^_0B`Vg za8DD6MXggwLLm%}6RdH@r9c;`U9!({74>1id*fxuxoX1okN54GVmfJOi<_rGUY2)| zd}TEry>gQ~&6QklF$=aj$y@G}a-2cct%4XK`pZz2i3@2B{3hV(J2=CFZ`OE>@9T0h zwY*&SCVbzC7+4Um_kU@4pXq^4(Zcs69)K!vw4lwnPMB6y^ziM5xcS@?N8xgzD$(%f zIiL7r!0!BbDctuiTEWK!C@x;BP?* zb4|L7LG=HMcrMQNkHzs!pWT_e7mBk#0w){LI=-U;6{=cT2t4Pn}eC zt-4*OiS=|FjMvsH|3B<~cRben`+te(CR9XHbW|cEdloG!l650HQdah!QPQwZ1KA?u zw)Z9~ifpn;_TJh2u9wr@Ip6Q+DupP-6T9n zssB*?c$w%^rgVz`qBG1todcQbsmgn}X!RAd&aDpt*T%MaCtohCCOJC!AzjBdnLtmo z`SM>fGW8O7V^#iKAR%+a#YOZ$v4S;gJ4f-7PR^0F17t1nV$8d|yPX^R;!Xr)eMk=~ z^U!=O)0>A#+XXL4op$eXfMbbks)PYE!>*G0&KrCAy*3af17CqD_7nz|qVYnqS!GC) ziZz+Xoikh>1mtFANYCb?Wgb}P<%DDq#9|0X+mL*O^9X2!Oc5xxu4Y$y8M_i9X#Qpl zBE}Z)m3tjZ&L4WEtZ9Ipp-;7^tN%-@Kz3!PmoB^crI#-+mOwc(ApK~R38J196d6UeJ?7;eh0S7~kNXgSSz zsFAm;jSA7~I|0#W9GuC|tZzVg1?kO`Dz6T}9^MGPMJCLLZCz?uBIZ?QzR84b1 z1o{{mT)Wm1_lNGlPIBHmAL<8*7^?a#Lk8Od`P*ekgJT89lpxX(lnYj!2HaqR zNX;yXP^-Z&hY-(%H1H9F)Z7~b`X)YVk`Mt?&GgD3%xAd6UnvS50_3og)yhBdvY3Ig zfj7%o>yKbuv{Yp^=3Hd86Byz;oM{d-7hZoi+NA6vHhmz+|^gui$zl0jU*0F6!ah+#J zMz7t;j=tJh@lElA{DrplC%F3pJKV~FZV==jP0oLI5kSz3Wq)G!uxbZ&D}ixI351=? z)JRGbA={X0pIjIK7Mw`h*lM|rAE-lV3Z)@vwxA7w0l3;UOn2BHD29>qijJdT$Hs z+fdgeCEVcpB3J7W`SkChXSZL&2g3{0Ls_WWv*3Fu4mZ2Kyl78uQ?(h>Vh-YYgw4;B z-{7wy{m#<=cGRXc=EMVPGKEHq61bXX9T?$_+RZgzXxo)dv|M2g)W^z=Q-yXC*Gfxv z)d8w?W8vFBv*^!A~<6#`e2iFt_#(|hsq^hYX(yM&X^C!98`76$zppQ*mTb?VJS?P0jZ2v(J z&`$26hIl&w@)k@3-qmnH*jw4im*Mm@q;r&)e{k5El8 zL#O}cPPwHf2haIJ7(Lnn>>5b!DzvwxaZt3YH^MzfCUJUF5i?K?&0lR;O=!n86evfp z-6`i<8qYhTuXsYjWA}pz2-UK{k~habeGD(p-lH{j*)>`q{1mBB(-F0E)3&o1u8Xum zHmmP7J!DK1{iDNxx|K8L@2>QXkM`YJ(D)<6cyFkFDY!ST4Jn5KV7F}k<3Uw$f>Ea z-xp?{4p=&i1JBGt>c-enyi#t>W~j4;y8`(Mi%mk;%S|+po}pLH zWw!|y!Pt|Kkd{sz-|3I{0{GUem;>co52gysiUl%*EbYfW?1hSioKt8_)n3ME0)PX!@L@fcL)N{sIPvR_efP~sL+b>K> zb`rc9>Z#KAngX>mF5wgo6AqLx8_x&Sw9WNDxp=OlK)W1LX2%lAVfVk?hBEoC1Q3qd z6Th8LUYEb+KJdYD_A~Q67^h6^H96@AyS~FN4`oN@1RsID;T1OlcHN|>ZmKdWRjPNR zN7Oam8}*j*rHGv_d2LSCJq51;%2v+@U;Z~u>D3s&tysbuktxxf(1vihc+I=9)@NFG zQyevhg|LN`BTRWbcBkHVIQYYz?g$mI9#w>aLH!e-VyVI_(Pk8x0S~B62k@fIUkPR% zIClevf=tPy_8+_(8^%jE*QdI&2@+Jp)F%M@&jt!!-n}VbpVMTHv;9|5{Z5!2K7yjy z5D$35Fy4Uu<^&&mLNQGKi=jq0$Gu!^yRDagFL+=?W+LU^6K7>+5JJ^mvZEW1P&Gi6 z4?KAz`^Xn*$|*33&LJW_n0vSGd0~r&Z78WD+KVZEo`eb6rXu}x9WB{+4TxEYIiqIw zWDHLB-098}0qQzHUXm`RPFK@WO-mtY1Xb zisG>}ldk;9>8I4E$B`9dM?6-@inwuEl9~%9#W9I7XDd$j14%L3Z&)v}YO6$u?{owg z%p{PHP6lp>PQTk_^X=WvoRri%fOtq(T}yEIj;3EBNR-g|BoHwrD|HD>LOqoN<*=9F zT%PdxJOsJ2<{c|@(6p{fse*e!-BG9M^NVcIye^y;8V#N$c(L)sc$?O32x@rW+OBU4 zx`;d>EpwU^Po8K4$78O70`m&QSIF%~u#}??iqgu&;Lx;MD4_ zel_^T2sV-FP`DinCT-y!0RC`lb9J_u+0?Hr3^|SDjJZ5`b)-3RG54E0={R_BE|yRf zCHSXu$VWeRoqWx6SDmCKq2ZL}y5ub>J}l8I=QN#xW6qM&t^=zsHmBFUPy^b*-EyMlD|fMKO^XpG^m-8QXNt0T zt@CHF86ul&a}$93VD|930Q2%|iL0x?osG5SNp1+?00VJN7;!c3Uk^p6IO1N|z?`Cr zm<@tczPRy`Lm23&2H0)?KUCA+H_^ywt>b3;UnyjQBY zj9%+`?97N7X~*buXco3oFgvthvrr`ELnno9u64usAwUK^3w}Q8p#2!0UMkrNI4j14kx^e_SeG^nAZr!>B(rR*p9Th1}6lQ76CyTQjGi< zd?|pR^^DPb?Hwp&#e&su;x17=DhS{Kt5Tv}&57q3eR7J|W#Lc{NyR~ubp7RH*v0g| zqiJ^D+7afHoq08EAQbVT7y4f2#p1D^{{H;=>)2~ewr`%kz%@Y(>4=r{Y20qyeMG42 zv>&lQ>dXLufGzd{_Lf|aq}h|%rsT+>PUx9dlQX|qJJejAP@Vrh7)?2bS|sO3_9b?x z;q=X@5y7wK@}X+Q1V42niI!p%t-GSlsbNgE4VB1^3R;Ai`xj^kTCMf8NsmH%6(@z=lWe+iFn$n$}Gl75tLT9`3Z^Yaf=qI`lV?dNtM5PN_Y z+xYSQ@3$3{_3($8931Qf3As_3P%sX8__N)fL7XeiJ3)(I*xg_}MS5^uNWaPfm{K+J zf``S}*UsNJmpch{P~w``^;0Pi-lf3bu}p@4_uP2V1#o+RY+KlUC*dqw03H2qX+&so z1%5?dYJuO1Jx0`B+Y_z0oD`^MsE* zM;Wfh+h2K3GquqnIeLp+?JN;{oA=E)ywee~e(}%DSE&laq7}3W!_-2ML zI=}fLf4g=4?cnwEXXqgEnDG}TQ+&(y@6X9Uuu(n0! z50>bMp|2$Uh%rjiiVq+|=g?@e0aj?x~U`=s{kJN@f-`A2<+djBirTAU6(e&f4d%55K? z9R&6WnxdG=<0BA48c0v=yk7=DXx-5oSYhY<4ER4CfE(XNS*AeSj|uJt$&-n(M2!$A zg3$5#l!`?MBt$nBi+E*gkc1XQP%C?O{I*tdS;eCm1&)Wxkb8O>;PXpG zugly(q@Rf_&p@OxBDUpd21GKOF6)*pk-)|`6erqgk094EnJZUPjgs@qAzLM2R0u&e z2!-8$;J~^R^(onRXaSC_&PWwjhzSlO9}r-fbR&25m8qLRjY)!?%~wz-LBnULeLVPI zulvutB3=pCS-~cf#!Vjy3#v0JGVn#y2W|7rzsD7xhs+H&7M9P*w+#%%?tUnIK;Q*P zWe&)@qgSL6Ehe&bdS^<>Mn1r7jD;N&r$d(NE>hftGxnlS3Ru>F0*)Shz2vT-G1aD& zh=#C0<3t70Q^1sYaV0D248WvJ6JSy+W#fgVSV7vJo?RG6v66J7P?gvyuq`BW6?d9vKWWAjFwmK@>2Y#OR@; zu50Fv3z=*4Anun>0t3Nq?Liq$P70$czz)$jv{3)8%TgUWi-0ESvIapd*y2Mdxd7d~FI2`dgU`HJd*_t)~zb;%|RcwkHsIJ-#l8|&X3hFvEq#lF!7{6eDZ zEdWC`iXzA~2FA&jqKt0r`3os1BRJb;Le;b-lanS3yaGEQpr8vGW0*q6X%6NyXvYXk z+ff@W#|b_#zmifj${Pg*QLZiu@VIhHp86z+p5!(~`G0e!Y@Hu&X2_}Q^)wd{e8jEL z8JWEN-2e|v2B4x#p6k#5b^k{U6OKg|)P;MzbwvH^gLI_(U6s$=WjHB&B&A~bb~ zpw}|6$$Cjhx121e2ViUj&ANW+hy&gn>BK}^Mg_1(8(FtG)Zx=Agsl_hN9UxDsD@IjG5a&%p?(lz#iOUp?NL4j7XotS3jm zfjUm(?fHA2oGFRL2(kgrWYl%#&@*ccnV=sui`TO)6WX|avM$ba1k4_%Q`DiNP@R@s z*~Og~iF*oO=rz3)fGeb-eE`y7Y}SF2+88A9CJ3UP%z?O$Nn6ktD`gpCQP?LbTQ^LP z8?#MxW{5C4DYh{~A#iR<@)c`VbT+Hz?qF7-(L&gmUx+z3n!#<+tHx4Xy7p7IW)0&Apkv`m<5}QdX?O>w(?=9p{i`c_9H#zG9+qvHZzLx^bHN2Mv+67{dtN10-L|h6xmdLB7a>Mk@KM>28$ zu&?}k|NUwBt16SA)#rA`EpAedP=NeBmGs`jdzot%e8I#J)63!&d%qhg6O>mM2O;EM z!$W)mA|YEhdNx;GkLkL*l>;cIveg#FW*vxkli*}i0lol=hxsIO;^fKpixg-3H4{Me z_BG2$Ij0DS?=-AUGC*0q2T*X0VyOg?G_|`T_Hq`|iDP`*$#);a*3W>HRyn69(`f-! zjAB;tEo9xXnIBs!*P@i029YH;9rtqb`fATEhM;(Q%VQNU-EkXxw}W5)@3z0ZV3^l5 zSQ8p-JdAPzU_o}Q_v6b8KBWiX!JYI!qtpXuOs7S2X&;moSa%;3wW^u8LdJVk#O8~z z?c{iv#w&^<+|$y45g>Xe#Hqx~pJUHZD_B;n({l29XAEs2tLz2qi{V}t8OQ} zdE>vXgu?QGgI){zRe)q}>y~?&7XZqUg^ZT&CETbej5!gHJ>O`A+n)#f3+0>gQZkL( zp0`bC;6;jsdc^8;81iApPyFg=%S!sGq`Qoichp4HA{Y732>>dS39$%mnO^AxriQ9t zTNA#-QAU^fl^#rFj1!N>iS1UiA*9QSwgj;3LBMruH7PDc_uiO+5QbB2+^rj>(#C`j zo}e%mptdjLN6IDQ=s429Z}gOSkEkJ{Y2Omsj&?W8E} zsUk39NCKtoWZ^gU1YMvpE5WE?EA6VdSH4yej90}dM;LBzN6n!mfeDjLJN1dU7n+p+ zeA3VN^8zvcr6n+0!ag{bGd=K(+GNXC8NBDP#EP%Pvw+vo2?e(|8)RgDYG+nARy&?T@B&Up%UJln z&A?NL@RJ(JrH7W_(0;OJ#@cHgDEdyxal&V3Vr?uf8kW z2X+-zR8)%A<){?|(%iU@0n2UnCy6oFJa8(s-Rb-F=l!oMS(okHwYwE~6Su&e0#kDN zlZy>o7c(7qO?C6|wToCyIU`z`5!i9&lDZ!J|Sn=OZ#Xz3YYWjpmbj z$uW9S$eY*y$=71{C#u=1y`Mp>)Cz4iy}b3D8}ZRp7}WIRkV6Rs``%IIR`W-l&`=?4 zLqFq8@(*mgHTy*){2elApw3FGKmREHdk?@)owM&p6SPW-&%$1>`_|&>XXfx$$VZ-B zgeFU< zcxsxJ5^ed;nMJNBI?Gjw(y+*1Do73$vMkRG$z)ZR;UhysN+>Xg8ayVz zT=RlYbDZ3J_5yX(MYx#Wh1_STT)Z@$!D6n(EuoWI?Dp&66wwBSeO)_D28GM4U-Kw^ z#?l|F_p-AZAe95ufErtJpeQ#G#8HPZFZIVU-f4>SmhWF6E z5q^;8ypg0^1?&fq=lDf3E9ps9AGIp2*rrUcg{7H3c0p5|T^n$NZtwi`vL=>dyMu8H zr4#>!+HHtAF79NCjg74Z`)evkPuayxgPXZhn)B;C`e zB<_#*vt8Ne^~QaL=mR6>Y8@?89N|TU=u;%_Qqi9(GD^l@@bD~Z4r)$%+1}Z3OzIT6 z8=hXfJfZuQ+x}|-e)wTP!w=IP@*E5?9k}Wk6H^?`gq2wSiC8F82U;55tK#gSF^Q2? zhZ@tDf6`O(+VVx5{4z|v1(lw-R5)Ya=1Si#fsRvoL|*FrYUK+dw_!T0TN8JKs)O1q zx~f;F@4`D-Il^r#Jr^_mmepcZc-vuwG6jYaySIWAZcV6#7PkEO;wK9Ej*}5i6QSXH zxAK0k%2V3`F*^w2(a8VmuJ2t*Mk9FYZWh%25_=26?>{e7lJK6acrCZ>IrcLL<#Pe! z^d?lX<^A|S?M9FAx%)4CJ<;VmnX@gh$9)M(;Uj6@l-F|bLwF4Hf2kclCBb*?d^#|( zhAekLfRhN`_~5ANTiEq50snXX`vb&{M7a{z1vrC`p&xqtjs10eeGP^mT9{`}{Xc+x zPY@$k|JJ0hI7%cq*%Pu4|4?|K?z{lMSI|$lQ`{bJMFEU~a*fqhcaYSX z?6tloUNbd&5vBV2qbU&Z~*FyHWCNezpU@OQVd_BKbYr_pMPUCLZPXG*pB`W zW^qw)zwR_y&7~hg8;px5gIe%D1&G!CCHS!N|AhSO!*_jhaBzd;(|{>g45Loe;I1Jy?O)dBK*7_9dGA0B7QE1B?JFOgch5c;D6$61r2}*e2hT_x`XjP4YVTVRs6bXSVA+PcVNAYfSA?!#vAuw!Y}2j?tvYr31X>1 zLTb$datQ(}WV(<(fv4cX10Y}yxUc0J`G{@Uxjx2g?Eej}T_S=@xj`^Y_C(wrJ+-uf z9r)wZ5WPqf%Ti5^JusYP->p5mCHRFV{t4YlgGH?191vMa%8~B3gM-Aa9GRtp(aKR# zHPOSsDNY4m8eyzSXKwwxOi;#nyVoI}FT_;TDn|s(v~6PZT|!0vQZ}3T44G5@dp+8E z#rLCir+IegAvY~3Pko#xYIE@~^nUb0>jXXD@EbX(@3p(I_t9bGGp9sJ;Em2400Pde z>_gUHlZQYUcdrDD|CxM%D%wEDZ#=v*Uz<88H5Fw83+E0*oQG*82O!0^@Qrz9B=Xmz z(Jvf@^br7hkcn?&LnnO0Y&e8#x)P*cbMxEJ-c}fp*zVl<_2BWjs++LzO+0Yn} z>d9Oec&0tqG*SCIs1=fs77yk!;}oR*E&>Vkf*~}c*;lZ09Mx!-;|Ccrd zm*e`eDVkmFnFhK*V$Q5RxB6wTCQ2!DOM%wu=D9C0=-mUW>`4_6cXy_jf$vlHR^CMb z;Eu2nxeIm*)*lvNs2L*`Wlhy4?FPHc4-0F#xf@fV4gsa%qG!j+PrrH0<#zvaKjGlZgGP!xS z&fzOO?14DqQGxs|V}>9gD+Lzc!ZL}XP%dPJCbF_Nyxys#uMU_65E=z?tAX@Oqj-f( zc+Q?FOgt(PO}d3(Hf-p7_J@l44f9NK-KE^bH>WR^^N}!bQ|R7tkzU$#<*snLXaXC* zl3ciiT22_d9Y0T)Q=iZg#3O>ndcxG1KHI4DAKay>lAR> zsM$E_&)I`ay>zl?bHi5QRZ(Jj{neaKi)W;yE2Kcb)<^vF0-+5%VHn{D(qC|_ z^y~dzQTDkoXgpZIWc=ZPzTzpHPkzTt?6A#fvQzinPtJA+8!30IRkO$;&r!o+atawNkpKX-PbaVd6)JX$~l^ zdZ_3ff!3ixblKwwD0_}7te>IRpKpOTp}R(~kBr7|4ITk?l?LKXsxwXNd^!1dLCHFv z*(k%~L0ka_^W_cB$ifk37ONb^X><788$V+79%0v~z!1TA&u5PSj;};$yNB9x4M&I{ z%zNqu?GbX2XoD$id_^r&{}$w|bkXF0i(=&~26QgjFv^uP zbPfvd?kdi)HtSl@4Y$GQdSmgN0|oXK%3yvl@XA`lN-99S4|G3>`aijV=I}wG6^)E` zG1Ukz`fp#Z%W@~A4R0rvC`5~-f+Na*$jU-VKG^iSHxGa9#L?2ZhWFtvZ`I^nSpSs1 z0}@saSYhU`59^M4k@Nb1+X9e?Y1C7^VWix`$9s^22{MlC`~m8hi7!00Rvjx*Z)1VZ zHu{4T*gz2&EweILekz@gjJv+1%t-mXVwRdBt24wTb#zPw2RjIu&^QER_G0-I1!X2+ zV)RlWSFO4O)>+L*s*;7@vPz%I~I+V9dIuY_QqVBW~xGm{wtY^qO{_Q36(R8lQht-84#3iNkNcN~c+-+1KV4J@M3 zQQt4EC0Hj2Gn?||GorIlIFbLs*NF4GfKPXON%m5N95tnHHg6{Dxnz~JGPr#Mtmh;; z$3OY_+ik#F?Yh)?&j2~{a2iv%QQ2P%4-LX`a1$DW&ZMXS{vVL=b@}q9@kSn;+6NU4 z=PO_Wyqohf+ucqzU+viEaaEID-e?iLKDD`FYF1FiQNVUmk&gaLthb$i2syC?fUfqZ z<=$LUkMi8*y&`iByxwNP2S$?ec9S=h+5?2zefeD56&vwl)MY5km^>191ISB-F~-dk zzgu-jy8uXM3uKb$!5AOmyg(ZvUCSnm17`V{|XnviH23g(CWPD|6% z$8y%oNI6?kAgzB?7|&gqFXq-u-@c($ix76JRwCAC*G265DEQ`OuQOoH6q~Q|5zS{R zW}9NfN4wH7%qx~JL=M>>{)U;l$Bf~SO!=(|SgL1(Yw;zr@zbQxVsxN* z=*PP7q_JwpMce|M@4@Jk-orSHUbF>8zQX|7dr%N{oHIsB#*VBO&BODOrl$nscf4&! zsxtV``(oqdqgf?zmx(74-51GC6T5}JpNu@Bl{Kv_i95T&uQ*X3-T=V=mX86Vb3)g( zIvJ=1pJ=_TO1mOtDclDxOMXPOSn|8uK$=@Kx!|&1FsK;GH4gpFRv}Way%530aZ={@ zBiuI{SZ*vmyRnnvzIZV@3~c31@RQ33dI*Fv4w3WznC$9Mg|bRkh*m7-)6n@QmxZ~z z_WE~-N3n_*|7bUwJc!{mT-NJ>WxGCNibM0DCbLuUY#+QQ(pCFT9}m=Mbfzj)fSzv- zr9|zE1=4BHotlu56_8Bnf)0AGkLUF_zC_HI?{&h9jid&RC52+E;~D#!Pc*0W8RGiw z;Jv@3vEI`KcwMkMEMRZL%(6V?W}NNMc2h@HzC%F672FHEc@OB^gattSn2a3tWRmbQyT$MQ_I?ya zN&JQHukVH(;_~mA!5)1^efo~-^IYirl_25IRq(s=c`>4mCPX~}K7nlqXvhS-BkObl zzng&UFYEPDgCEj23gQxYhepe$?J#-RM3s6V^Y;>%2x~&9VIy}-TNaF#$UpWE@>PuM zmZpYrXfSMX z)N~7}K-Uk0sKsM;Ce?Wx#6F;bBXq{_tq2{jqfJfyePt1MgP}_$BG%LMA|tYjpZidL z89zy~Z1w4l=d|OrBXK)HpLJSCn_Vjr_Y`cQ)i0IUlu^?_vA+j*{FxAQf)DIe8i@`& z*VTqw0%2WkhzYxg+My~Q^l(T9eHSXno-%h~S2)#UzTL_lIh19biQ|40T%+*uo!P+0 zY4dxgFcvGmmT#thf4#OP`<`0PC7aw$C__J*6mGPIZ>|lQ=6aOMgexxqf>$#L7f}j7FFyV(cS_` zLR_(iLet>G%^Y_j-hQ_CCi{WpzU=_@Q(K|O-67MLNaz#bA=0Jp$1ho~AkgzO1a?K3 z!#WE^S*jJ-Bqa#O;qDh(Xu61bv(mAiihKGHrP#ovM--X8c2sJyaWOhIq`aBCvA(n- zq+IcBB{WreICnH{qg_YAm#oPs?Wh{qmQ5i&k`h`la#y|Xp1%i8!f1GqW!v%5)k-U) zUowXO1pfXWum5fk|665cj4S*{Qm^rz07!?06~G! zlc}N@Lzwb>9bdlpq(E%rmkCBzb3n=uE@y+JVSp@8P0j!q959yly;uluk@KIjSw`6% zXe@tswf9d-LFAKBLGoz;e~@&edLveXu-@yXi9k$Kfm89t<_;p`4{%OF`d2VYP(mm( zefT7Jf@TB3vmzvlQ4=*2A(l01K-cJJJx*hp;WXZwZ=Em!A$Q0R6czpo5r)+yDhb$6 zKABT|S0_M3mjdyxMm@zv)W8k3m0WXy>{5QCuWYC+BhoZXxO!*|gD6!MXg8Q@7DNzS z0K%mXL`t&to=O4V(Sl?^c8X7bM{^BYcp?W-=}l)i{kaxHJKf(JmnhLvdN5v`W` z2opJdTm2%p&Ib}SDn(JGZG-Z+BlIOWzW*{M34Gz*RDUbU(%`o1Uf21KP8FYV>zY3$_UFgAm>4#}rPsh2HBNs$~DMB7!cnrITEFcF3uVC%v znkkzV&1XQUZ{4xNWQ3JKX~fs)dG-C!Q-E~{fi1kq)Obd%&3fr&NqzwS4Uz71O#ZR* zqT)9z=sA;D-b}{kA=7}efIPoGBp&TKV%yn^Gevn07U!ijq70uSTOsLT?(ZkZf6xE- zD}yhlU^i=LMVOA3Fnh_m@TlK?1SD^Yz|P$utVO&J*v>{9m>&)I5 z7G)1eLQE4QAb@rZQv815HiEW#U3XqCp1*%0c6m3xy>O$4w|wx^3r=F{*`PDGE|{et zTFt%Foo@&Je1DyKs%%pS_tYNqr!%C0#0=OjPW4Rrv;cu1NWjzt2$g%aj;4Vk&oJkq zB@&sxMV=|O^98T&UK`S^BfvuO@4TAXeQ0uQZIm}|8KDe0$Qsw-o_k~gFqB4;M zd|DHkOsib4c`tzRvkKIA76Gle^qy&JYAIC5A>1MGl&V-*78B?+d%y=0%PEO9R^GT} zB^1f9Fxe&YeJO1+4j0MRgox=P(A+bb*u##cz?9t~-WW)A8BDnQSXzHRR$<;JFW z!$g-I10gr|KF0gC@LZw5&pZDCZI(G=bcGGTwcec5bq!kWy!#;xvQ-49n*ucy0;Qx* z-=!``7LenROk);+!}LIT(lJqh*=H*aw}ikI^Ac?sxQ191hj!WY*1Z;!lOo~-U>~jl z-QO$@sJzK=r?5$4;;Eg|#kMzy6OGk?lo`-A0>pVw-*0)Ht*| zTRsy%Mz$`8eFwP9<<`~rm}uNeM39TMtH-gZjzar6^#J#$H;?$96U*n;S;|fM9$zf~ z_8O5}$+S>K`jHKOs)j;{<#X>~8E*r0QtsOzhEv~B_Jv#nxl!g~!r#GErV>vh^I=l@#&5ajT zgOdk78!=KMeO#F~en(FE7^zg)pKq>Wa^N*!&z*tP)1eEufOTvy`>}>W@nbolP0Jbz z5ppeB*3DQY$QD%|nTC67i=A+~FDo@;c(r@@AbHYAAZ|3iK?i24PWe9E*SOSf5TJCu zZC`wKJnLoZWI{wVEC0%Xv$c*Dcp8w+z`k}8+!EaTpbU%y9V-XksTz;j7@1H*z-g>? zfogJEWfJT*21;iuT%2qh{uD#zuP~XeYKTCj6b$lNTP|l=of$Y;9P(bH@>fuxy&=Vz zVDXl~4;c)NnF8NDwJCjUsW#j!qJ9y-pHNUypyuSGfnAxEC;U4Tj4aN;UhjzVG9xg`i7bL29q&DIE-^+{1JSqWZ_K^uDv1NDrKWT1^9nSwihKpb zgYUIQTh78lW}LvicMjt0DIby{CL*SfZCBN}|9bzZAon!nXlHP94ulAK+Oe$nA=~|H<`)~K8r)j^{b>IY9}{>C zEp}D`;7I7HxL4r^<{B>lPVW9_-1Dt~q!vxb>d=%ai5`mIbC%t#4t$#2WWJWO*zZjF z={WR_um6#r*pK!Z$)A0e2^f@~G1t+a4J^}EomIZxdk#zcg<~3!a^(M+>11YeoqE*- zoKb95N^s(|CYUvrrC9i{tcpM0?V`waVOMZ!H;B!l z>EkGa%O2t|w3>rA-2}Yhe>={4+!nC8&Aa`ZnRGI2 zE3A>Ks_Ki4Jd&Kd&bn?mHKup=zKyrG#O`dK?Wmu0u^)qO7-6r~%02VV4DWlDuw`Uo zM$>hFw^je`(F8f^chrw;c`K!(-je7a-b#R(4xf0w7z`G{We%{Cws|#7l~{!v(Yo!d zS2jIk2H4-BEHW#bd&tTeHnO?zF^q;nJ!YiDH18q8nYMQ>qg`o-9QDc@HMm;!i}fx5 zBqoAH!esfjYp3$QrVUV}bT)Kt1iDZc76MSEuB>#c#w-G{w>du16rYQo0KZnt{JSpn zjUru8^*Gey#1jdgK+|T~d&7f;T2oQQ3fLa!UzNkqQD7KCrzIn{u@t42tXAb<)MkL4 zZ?YIwHB^_1y%8eFW!H2!=0=V{w^QSU7BDP16mhGrOTC^k5m7-YABJsw*5pW(Z(Ut5 za&bCwg~*6HFyySGO{#is*v-=Iyz~C4Y_n0zPx&Gvf$P!GM?eyda6fE|fV|kp5^54Jxb|)>T44N8 zW|40(c-|(122T2uMZjLTi;)hq`~GB~l%7!{c(4%l3VZZYIe3|1 zhT|=?0VLG;d9SLRJOgf#hX*v0ey+$9W}n3xmM z&5A;4AgD0u;8Z(G&irUSGcyy%^{69Q(%q-gm+)wFrs#6sP}pH(qt6x|OxRb7y%OxE zE^SaX`;b>5$U0mtN~@ySv6CF%w&^Zdkg$=6*;`WL+bMVoeF;9?!XwZqF#2=&rrj>@ zsgliN7Rp$gkJQSoz-OE)d$#ceg~_oBAn;qhL?{am5^j>iIM#6gg}ph@5|;sap+CRO ztsI>1+o6jdTS1FLnloftG_^MHAkr;9JRl=DN{Q))QLZvH_L@8H5^a~T&G>Ns{8$1X zEa2Pfrr;K)tFVZhA}RiihLRl3obJa+(VVN`rj}e-SygJeH7wUNHUj7dd zjc#Ri%Qvc81mQVO|M8mM7Z*lL{)(Feq1+l!*kW9F7UDOx{pd1EhCQU8catEZ0-w`% zuG5JjdE2)G4R=(+Z(egfhMIup;`lfj&oFc7BFRN#-Y!58D#xEEO3lyYk zFP*!2Z&f_X=Loyqa^>liK->k~$HV$$$^rDq{`_8hlg8BM!vJ}u1##>?vYa&%Ue*t> zXS52hCkGwiTc@Cgi}`f1A-86(^b(OWwYIlOkSADeSf+s&N54FZip zl&ap(ef9f3Nx)^{KV$WiY_)>`kq+0U#3MO9N)Yb`#=+_zJE=BQ!COmBr=9cj*o|(G z8XJ7p%Yv^mdd}e>ymcpBm}NrZk|PX8#?Wjs0ej`%Gv9#FZVVrpBKe8!#Ykxno@O7V z0WMCraxi()a0krRtz?f~?_(2M=wW zhOru|I-(967h?wvGQdM48xp^4P1(EDbIp1muX@pPm7xsE7MkR`CE!KBhRALtF677` z{v#(z4E0MR>RHp=Uwi8kirZlRYYOe#H15ph3Vdc+3hd0vl-PO8dB`-}t=caxo;ji^gePI2T zu{)e{8YLI}aGJ_-vd2Ig*SvuY{(T0NBW4f^gEBh16nZ~^w6S2+5e6>9X?kH=a$dtt zSPP|rPyNNdoKhIHBm0JyLJJA$ ztdq(fO8K*yBfQ0z56;SaD6$ZHN^uw!s~AcHD-nN4>l2Q=@Dv2vnXnF$pxBoYJ}e$Z zp=zjIo#p<><>m5&aY-e z?!hX^hsJCcs>eE-g$yxu5EkewpR?nSbPhz6ANszEyl_DNh zUO)RD6MI>JoilMrPT}44^8!7Yyy+L*F&ptLnK476X5a1u@Wo`e0R)2E1y-|gnBE1M z&RmYwqTpn1pL%PJXRp;6z*!Kkm!erDU3!_X$hXXF<8^bakU?u|BtKJo8X+AVn8XEO zY`SY#S8HvSe~!|}Pl>8;c6kT!U{w^w<*r+zWrKj$M#+KxsCPQx9`nahF73G!W;liN};+#FGE#$zJXVB?84 zX$S(bO$uWc?neuoEm|SS61Wyy&ejMG(JOeA!_MU+y|O26GQP48m_pPK$D3S1|DVhF zCc9aYeHP|MvkpnMu=Y@@l_=RLXoy*Lb3Z%QMV#k4ChF>w47Vk?!<*c4#nNJB9Uuk` zN`;tnvhj0RYX$1V8HP{b9g-$e+{zonFd zD{xaY1N?Uc!YJfcUd*3GIXCDSCB*)*j;wVou})-Kv8JOSt9h(4E9|tl1OM{>Cqx_l z4B8p1*H^oDxoyHhw3b4ohX2FjUhto2pA)o1`t`yVytAPIroK$rMD3OmW}dx;{aCAf zfK2(7VgwR8-XwPh<|lL|!3l-25kago@w4GL_Jc2DOf@4V&L;T3CMUi^TFG;APKdX5 zrI@Ny(Yg*G-w#=A*z_)PPeSM|_ zGN?bNubz|dlBG*|9^53YMI^8A_A0WNq{*6x*O}1Z`5tV17}MIII(^B2<*>n zIQ%5%)9}=@f2%UD(UZnA_&Vnc8$5ik`FaZ3@ozo6u2F5!w;&gLC74A(f9S$NB;*W4 zm>xn=hm@Js7 z@L9-#^NlM9Wz#N9bO^+RZ|6&M#T7o(h*(A8twE$;DHIy=#=q4x@KRPgMO;5$2m;pr z3%&{`&Vb7XQvJOTgsHlC_uBJg<3n1y9=p65oTlAiGsRyac?wd*kzTXXpFOzGe&*;J zXfq}Nfwzgh0l|uhf(=fB%@ASz+k)1BjICDw)7T1;+@P6V68$dxa*ta%Fk{*bLA`+D z38Ag;fEjus#dSSl4!nrNypNt0=1Axa;RSx9!n;4kbxoQCxA6;~M^lF8+~*EPM)*sd zi1D{^t9{=raPFwem1q7{&~PMZh2_g)ab^K*Ssvw)U4 z5KTChjZBP-a= zF0(bn=v>YL=G;xV8BF=8;Xe%i{mvk%-M8){c}$4iHc?we>3Z)qq8-k`+!Ov@Jj6;1XK|JDvu<{|UWO&-en z|=vukyFK*P36@0=4|@eP?;x^uqU@c-nISQ1xFTl?%?J*+X0c0K0# zS%(-O5W(e+!`W|ifpe${+R3hB6b(2#6{}MrnCpB1Ys0c7kf&b<8hT>LaQmYm0ONiF za26)phtIUYtUQSmV{IBbEzH{V7USOQ%H_N^Q!xR4G}ent%_%MexQY1LP}Uu=4QS+` zjlbrHnbB*;SVWjN#mSxblcD|rhG%*hv&vDBoZF;C?Fe3RR){bMZ!wOgHbh+uz3~;K zT3KLuTu>Q^Ib~>4Sd@$oWy_RSMzue*^GiJQ+4v z8wUxws4cvc-QxfVdyOlPzxHJ15%3NN!=$Dnwz3PpOx&Jf769Oh4ZDoIX*p6?z!|Cl z_pI3cHtdbZpPo)8k=R2FxdVoQ4#Y%E*rF!Rx9gvnd{w~S?ZH@Pn#I61$Kgm%^>BhL z%y&ce^|@$V)XF2UP|AM{ALfcoh+w@&)Y}3PhWJl$hCaB-I8${u1)_`av$xhzL(5{l z;!!KSB|-1uLgaB_ljNxXSkS2Z?IA&VMZj%()AXguRQW2SUp&Dk@s1svn`#89zIZF= z@h;+!w~gy!(@_WX(u`A$m7X2FbYVVRi!zw)s>?n;hr4^;9Itnrx_!~=nCiU$bii=^ zll>*!Z=ee1 z!Ka77nf2Vg?6x}wK*BWurf^~i4RZ)s)Qv#6P}NW}Q0hnEN7@hMgYiIYs7-tP$Fu-V z2bKx2U$WnX(j5L3p7~0?Gz)NvdrQh$cxFnZ_u+vCptE<4+ZoeCa?l8P^TdxcfWjjP z{vxQKDo=zjY3M9BhHt!#39+bra&Q%XPOR3(Y`}6M_y^z3`Tk~U!5Q{W(og|yg7o}v zHXOPeB1eDi)*8qFV+~?n$E2sI*aLY2O#au$3hm$RB#s79O*F+9PX2pE3t#QQ6+`(3 zTmcR9t1Hv*DH;!|8Oya51Iw3n4BVK+g-7F}SUZxEjPnNk0gbrDPX2MRxuy6=*1=UV zcrU10KJcX12#-Zy=WmPtDD=@s|2-T^ul*tBA`^(^GzDsf+14q7X{U6-9bhC-*C$>b zDL-QY1racXc%O!moRal>11fC^`Odc(YBwRC#c%awv1tq_A1brbU>_D94eB{DV9T6> z$eWDXbk`=!NRNZpATmWiV@?ZHO_{K<8gPcz!hWUR*QIHEsb}Ly&U``7I>!`gBM21O ztIxbAtFC$CD9zWbSpB2zulxV&LHP9xZ^pXzp2KvJ8tvi{Vx-b1>srGLv^w@|Juhxg z_5fJd^jcik4qTW^N8pxLxh0V(Q%eyNGl|nmS-(rA*B71p!qW&8n5R{u za_mKNq2p5pYqM32Ac=k6!c>PP$4Crwu9)O>*;G})KRPnY>5TdpW&`v)ppIy^QSZzG zmxbhXjc2ct3F%;=`jx7;Qbm>YrY1auBWrWDwH5D^lPJda-F~)1)9!=om3|h}uW&@A+F*U%MuUeegyl^+n z{^SHK1eR4qQ=YM{qp?v8jY5h0xjgFc&Yr!ADz7*nUd!)-+*!k`oo42Atn z^~xLYIn=lL825DGfKGG)2}Aktlgo7}4ptv$mz&3olCqTA4HJ@Zwu_%^lnK1Kp7()K zO8sD5;Jz}^;fMzo>j@Vh@54Qd7y@=dh@`M_(w_t0I)MJAvS%)f-@PAYd_85;Xz)|=fb+l@leoIqn##Ef;eWk!!1Pkw=~gZ=adTp{mVm%}J#R59^slQN z7$>fFE8&S|t2ncj&BJn9EJsZF-U3=`t};umk0$$0d9m0tktk_C71v#$s{9Dem!(WT zD3fRBi!Oglqs`)qDf98W?I`8-k|t_op}gUhcptp5ApmRo9AqLsxWMU4m<#=C?3B}x z$Z{PBa@vh6zb{cT#C*)G;HuPP8;F0txl|z*1Nf5g6esb)IiDC#fi5cr;jzRFReDp- zI$CDQ%?hf%G^*P3i4`P1T%k5x*L0fLC2ZLw%Go4r)$hF4V^z3aVcjex2{(>t-eq+n zAPjn-$^lReeo20Do&P4eVEJQjC7csM!PA!`(mIn{8JNy# zf}eC+&>tjpi-E2ChbpYo$PRHwcQy72rG#k~(Cd3Kjscah+vE`W{(r9@ZW8cN8b^0G z9V9qFNJw{f&(BBK%?5raB6dO7?BKCHk_75oA4z^(UYdrYU%fM(+tFOcIyF&n$cv{& zpNnrA@}a^ckFoi-tAuFXNYU8Cn|<&bTTVQE?lYELUDipJY;bktz4IlIzV#Vn50Ea@ z^4Q9p4;!bR@8%$;)9o+&<4cPwNeX?#Y2u^Ipdvp^t-!;X_F=yPXqsvleMU-|9@0n= z9#&R2|9Gdg1d`BsP((@mLAP=^^Aot~hCyjEH{UYjMJ<&n(yq1M`N~=3fIgcisV-(L zu+l-N3bugZCCuLo10@PcY-GmszuPT`4Q#OZIG)%#Q~!Qj@u#de8)IGTr=o;=>saxK zw2~i%HV6K?d`IAFt${Z2oiJUX1Eha7l8cP{dFx)vBM}7Ir!cBN22dQ0ZfU{jDQ?tw zlmRqRED{V}_q$P5OYxm<0ohZBaZ~w0q8qm*35U9&CRN_t_a+!{+0$@vj$DgK6Wwd| zaI*4PVVr_jH*J()`TkqAv>r3?QdURZDla}mJ~lfG$LY}jVedVoqS}IP(W9bb0vpLu zK}02qM9Bs~C5a$8C@48drir2`lJy{uFH?O`&rumTa>)6HNW%`*tD@@qiqJr?Rap zi}Y0W4sLKKU6^U(gNhDc_x(U&$B~M?ewC!-Tl0#8)f^zC8ifNPpNn$#*+(pVfjz%VcdR$BNSpr7GSH#d0Rgv9oyf~mjLu@G+Wc|e z{CgiqixCp?ta@s9RBfMu869-gbiyA@a>&6%yYBr>g)M^WvN=?z%W}17Ilo||t&2Sr zEEGd)*aue#wg57rd5Ko>L^Wv#*QdKObRv+WIL|_!C<_-unQ8|#jY4&?PGLeUE6|e8 z-r_o0&}8eP=b-nTdWju#(>kOKDpwqlFhLyxhOj&Fgv*uBLr{PDCHp~Ftn^%H-7vm9 zY@64vY+@(t%d-wyEAIj_tCy<@PXs59bI3E$Q`ntp5-@H{B6Xpv11W9@B84rXZ@pE$ zd>nU2#06nSR1S&Cu{Ejs_E5z>lDwOrHx=Qt?e~&IucBgU2?iSvS1AOm`!%hDC@N8w zzn>?hTf6CE)c5uf=zcZ+!oW12Y>6#Or<9{fm0dUN*9QqU5Yh>^X*07qPQ(|+C*}qI z_`}J+#ZeVAEtSWtnoTlGgOOgzeW8S;Q1e%01fKS_;mkb9Y)P3K$fSK4DNp5g1Y1RO zeKO!WtS7@v=U#L+mXMAf3NnqL;=J&=067y%636(0+`SOa{p{P$1gG@wf25rI4oW>U z{_o0~ZT$d&-_7UUd!JxwJk%uPW-sF_N+vDIUVnk%=e0F15KWqRJ64gjo|O{65d6Ih z7zFF@)*!h!Cz%(1?-|un))H@4EI6h)B;1(->#C2{qPJ~R2y&7jys+gRpAPkjpRXKY ze>HP_PpR9^=HL`0$2S14^W6ORD%?rm&QmnH`6@9DiJZ?f*F;}~ch2S%eaG|QLtGTlhGhCVX zz|(4nw7T@SUX>iY>gYgw{`PsWdmSh3V!YiGf!)j9?SVqRRw%mH;qp;fJQL--BplPX z8^G#lQ;E4c6Wv9My%)6Ia4Xi7+0JrV+C)6$n~XeEv6Ezb3Xp8n2uS<$L=&A9+772A z#53MYd7NSrpt@Z2`f;Hu2ZX0L#nZYdGAjvPE6e8Lvuj2(ypq;OdsS-{1*`1{gpuk& z(t9PUj2;v#>{ooU7Qz$$8a@{P*D%C_fyX|_3g6bZjb7B*!K(B?r-In$B}XBSbph>5 z&`Vw)+}HV(E63AcA9W0`|hW8SlsALij3d3X8O5f@GdJa&}r`|;Hy5Indx z*Hhp4@rO3x$}Jyjdi0vVA9@DG()@QM`+b;F)3R^&fF`_mRAlUxVhbeKkpb0{z9>FZ zvvYg>P+Q(pL7YXCG5U#>N+nz?Rvu?lLkQO^UFboBI(^mX!=pV$m1N4-HB1X1_~>OZ zNfP?LJnb_EnSwkt%P`4O3+!Ba?s9_lLXSwhlHwgXpXed3YTDMX!bDYu&$*`WImoJK{PWnB)!#8(yTs`3tb0opRd|0|vQX9P#7-AcJqVLfL+`31AG#$tGg{1FS zO|A2qSXwLJadCuzGxRB^kGNj=4rnY!T{#{{XK_xiL&nA<3kgyoeY<6H`G8(7>{n0v@<-(#m!!}7R@stIGc%&^GOUUphyP+|xAI_K4|R!b7l zmM=#vj6Qm}vW%pwW2oz?n~4&q?C{y_zfWHG1EjETKFGDlxpKn3Szy@n7d}>Y0;e}O zC9|dK>rWBezz$1-797gYID3#W z^L!#)JVq<2wHl2h6ps$9h`!hq+>& zgTL>51G?`a;bEOu@8Go5x}@-BB9)20&02K3yWAKAN+q) zA136nBjQf@%XKO~qy^HpNF;_QZKY`x81bD-%V{vSzb5Qn)o@AZH-`}NoRec}#R4Gw zQ-u}rYmZXD`eVFps_7&ishZ9Iqo!Zh}(RYl6^WxK&9}HmGc)-Xfu0S%bYEsq$qX z4c0Kf0TrRv*ed?AmxwUVD{_J0_g}UL#vTdCI13n=gG-78-pGzYLT2(j8Kh-D#`N!S z26DF5NZ$g=GF<+5}fS5)}Z2aV6d)33@% zpps62od`}5w&UaZX+@YF(M^f;-w&Apf-uJegglWj;E|PNa@3EH{_`fk*^J2Bx7~uL zKYQ)Xc#8$5%(exUf_J-ZiSRI&RUdWy!+tsTBqRpB%ev1a83v;eIRKoW>GA9`?%_6OV4@hDKvBV46(% zyyy4<|9q1_d@%YMJe{{fiPT*X1;!QVf9u!}3yc;8gPh6HY4iTWZU;_fr>}Pu%?d#&-8Q0x#KDLq&iMg%9Y= zaIN5zLr0}(`h9)~I{=4{PYaS1iLQTpGRp)lMUH1v?0G$zq{`LJUy|p^@92 zWjRZ}U(sd|c6jJ*;{5=`I!1tBaqumhggXK78F!H0;UuyMNTgTk`3Y23ab(J>rv_8I z_si12Rdx4)qX<}3~lMH)T$PIUa zI;b}6JhKhgAchhNPDa-*5^^J5YJ=wTm7&MMiv|cZ^*z^stGW4CcDH*bUoc1nk;{HZ zKj>NtKlVnQ4ex@2z~>OoH^9A#bu9>5rJh<1)A6zcZhvt$?t^}B0?p2>P!Av#> zxr_y!OL)zw<-Axqrd8how?VIy-mBH6!h_P@vYCId9$U!wRjVUnjR}gt&vr=&gy1b4 zcQtxoub;$UoR1x07}Dy1+qOc_t1#WRD$1b?lJ|U@bh0W4y-<&R#~?qKg+;xqy)(w? z)@|BWK`D_XSVIBn5=#aIgGMm#jn#St6`;K20zloiFub0xm+cs612d~b2+92crMHk0 zUqT>SCc*7#mGYGE6Rb!SnPH!mlj>dt!Z2P5LayLr{CyYLVKC@d)o|i*L%OFm1@(EE zw4C#IT-k+vT=x1s^-%e(rHkXh&^z21l25reAmM=W*Nq<&BVJCDR3NU$wRadUMI4yF z?w4+R8*Nj~d)xs5;z6l-5pILwp|k$V)gCfF2aG3|=V2xrbj>Nx zTt~Ux(SqcU6S)WElBpU2jn74)rSnZ)DCUV@I?mmVI;{vm>4SCyvv%*l-2K7h*j@W_ z>F3DEU}Pg_!c70xZL5SzwM2mAin?tYPt3$M9H36E+x+%~c&Sux2WY!DQXb)!RaC8z zSZcvt8S`G^dX#;T!<>^$+v;C%4Uuv+&AVteTLO2;BLR^1r6LHb5_XYmv!}mzg3+#s zCoZsP^A%TtpNh{<2;yC|4q=-{^kQ6~+)d=xpZox$m=IN6uUr7A5`oq@QxD+d-0BU3 zeSVPjs3Bk00`O?y03d$Kb^gR&;1je{s~s7eDBUZ7%gM9ap*(g`X1E+2OI-Hg;UC`o zSAO$<@%ZkNjXy^oP3P`-gvS;5z$v(@x+a!MS!EL_1#@o{ZSP?|05aAQe&uz;2Fy=- zpZ>QG?&l=$hnr@9vHHLzX&MeEgtg0gmLO$hKn2CnzNQs6o;sCCcG4##HPo%BBy?8) z<)QmyjQ5J`hpgpNiRvqgx3!doS#Vzn;9N%7N>1087NtL<;Uvj1TcEY30A#6em8vET z&eCF2=uArd(^6(3Cv>V<-ZOC|E+YE*HZVw&=q$}K%DhDo@85vLz->STG`l>#ra3|K zUuMR{N5I1dBavsmKw_7Ij2Ye7HFSI3ODXy{PhQa-;^D|`x-tdg{B(|(?$tXgT0zLY zl*;@51{LT{#CeF81GZ84j#3Lj?=k_W0{@l^-7SOVlhY6?V+zC=X{Oa}{Q$u~c+mT& zwa3BE?XVb3qH@nb_VAqs+n+n-_~a2tsh`8;I)Zc1cBxRl=P=Ipe%$96MZ_c8K+VnQ zxdiAYIjd{$>eqa#pj$tzWI#K5F+5?${QY7TZH6g3sTv0c6rR^%n_CUs5sA_DC7{~W zHA*$xxH~27K@HKv2x+ECT9#xF_;_ilonrOeoUT@7%3Oi@pr3a5e?~jeu1F-8$l2y0 zo(?~mFelUEchIT*)90Gjp{HL0@W5i}c^&FgPJ^4;p}OAZve5)&de7Zj2!~(U(mb1D(5^qF-!c;>Ul<99Dz^!Z$rZ1w06FwXz~TEh3~s?q z3`vPMun)aa)Q!-msf2E*4mNQPHW&?NeTQ7=*Wf2I2QF72ewMchyh$?o3c`xS_u(@5 zu!P^;@i4GEPY@V<{xKnU1FXsJA&*2F@fyLJR$pqb`vpbB2O*c9OaUvNH0x!R5Ne#l zQ%!3fr{{kuA$tcobA)E!U8NtoU?=&IYkm!ZRjh|U-|NbyFx-LwqD5K5?9RE^vn<+r z)RW+RI703?cLUtf3a5~QX@Z*m8)gX+eejr=j|Uk>agg-GBTH{5y6-zUetZ-}DoTY0 znody87LT~d+vaE>9@6gNS(sl0@J$7y1ZVb1 zlYpeMc5-1^6H@%o73kSW9{JN*0A7I4e9%~JhYTpja+l08ygxWdFwND}+?$01sF(YSj0ANP+zz!K1R#>yRnPUAqS;F^69-RjF6vjioB)AzqZz4 z%!K#|g8yzqmz#pg5C~^EkVA@nwX@eB&V3;fX!>9T+7%-|-j2z!LF8p>xx;{) zlrjP-igDJUKbBPB+oOFgh#oV|3J4<;b<0XJ*3F;i;+=dwBypVr@<$foq;qh5Kcl68 zkJWj>z752ocfgId8))b!10v4hl{5CPc$>X<(nfJ}-J@QM~$DU;3H{qI zxafd^EUdjHKb{2qO&WRDPyccD5HjCTd)xvTakivPyc3LnVx^4U(ATcdVZ<+9+q{ta zRLv72!Lza;tYs&*vyzv&vjsgKimmRvq5+uwY23UD^gefsM`E1LWl$POLyyKch7kxA zlMBiE*fLOCA-VAG@)&BCe~;{+>5e!7Ru~?Va|p8^rn#(1dipxv=Y@*95%B~!*C|f% z-Hx^dLbbl07Putuza|jf6$W_H2^WMOXgNS*dP_g)i{q;e$OVq@bX?0ZIE)5vrxl^` zE$lkf4C3GDhbCX;=fFDV)bmM$5_zGCSMIln+dr;)k`?g-@ri9enMpDj;-OhTP>dMm z)k&j`hk&GDp##C#*k@if&MW4UhG~Zk0!VKY@kBz`bfaff`jbsAK4k;2lUiZL`rn#_ z|7N8K2>%Gn;N5e2A!AVft3=dhq#PA!-ozjNEBS_vtBMm zbd}Do9@X%`G8@R>5?+g9UtA?h*3^i!DiQ?k2Xb5JxrDArB%7k~KEe|3FG01a?$LLK z-0CZ@$0wfTj??p*#L;t#&nml5PwA^wr&G=5XlE)(A+^T$(;gT zN)C~RbZ&v}#N1K~E%mw|_-k}r?WE_!=MN`{K^)>d*pV<)260;U3IuMiJ|XPy^+5zz zS%jPkQKnff2Ccw-a=RdjQK(VE4X)ezef--_Kn5)l20uAS+@Q$Ene+8xkcoE?_=HPg z6~O5w*vvOT)F)&c^m8}-`$#N8&T3mB6_O+sWb4mSt>A5C8lqpzEBrQ)c0yhh4_UjQ zXN&qw1&HoWrvtQ6PbBev4tge-=4Y0mhN^&X>@-S_4?e#jXQ|~urgwN^n)$H}YVWMf zu68x(p{B>1U zJtGf6=r1F{NzAgu9zREP1CG!@MuV2sjuzO8OSjZa-QeF-pfHt@7gDltHkwoI^P0NnmjET? z9%THK1HQ_|)12aRpThySE>h9{nB)fX-$e$|`CzztD@xSvj>p0KcxvA|h(99D;p}9w zk(Ju#2bVOY<8rDW>J3~K{7U;P1`pJDuUC5UZj45OV zFoJjlVyYzcMEUzJfz;(44-haDBa88@wrQH0>Qge&T+<{&jY-v}IrYH<0J8}19f1r! zM7j_DqXlF+tnmPV=}KWL3(8i~h1JK9zM8_0y6+GW=fm-bW3gi1>@_wMKvQm71Cn#LcA;;lbKQy!H73sYE z+x1w6^@!lN-tX=RXIt7D{cSP)dLR%G%XfR8CQ3!(DCmE%5%XG7;IU;T$=eD5!uc#R zvTM)pqP;}%gjXaTI1?B$v_T?Uc=P1^qkTlzfxUGQ9YY`sro&Z|GAHOR*XW*;M`?=G z>Y!_`Qj`39Gbar@tf9L>Mu=V-^qDbva02xJ-4qAQs zb;~9QT^c7M;V?A~3(<*p|!7{Ch=&QL9#ax&)2TZGY?EMhhMLd$1ZeXAF9!ABpRLwa*?Yjq}F` zH<^e;B6`6vnrp8$D%`|``WuKJDb3!MqGlLtkT$fWu@|b`KrO@uzEqFsX(jfOZ0pg% zha-OI)73{f-k(H{;4C3d%X)yuBc;4eIh&B~zvIgzu3XgLApifnK+mIUaBG~ue(#$T zH@6o${o5AH4R-9)W8JHEw7KrFC#d>A(qdE5Mn5P5Mp;83WS<}EjBhig&lq$_kcNy> zc7W~RRXr)+b;?-2DiRzCjysE4(iEwkUozsdwc)bTpC#N`A2^pV>wj`)7hd7dxfr0X@6rgy(uodY;(7w_bF5IanOc$4cOf9lnc%1h~`RoqrUJWovJ>BUv) zssW|I>Y^~a{5z2;p$(EoE$e5TytM!}yE1TfS_&T(qyRNUuFI= z(AhLyX2;G4xNYeXIY`|7j)=$Ygg<$pUidVVRr}F&&Z=f95S7uPM_*0>Fz~fiv6{5C zz0Lx9R0%(@1qVU+S8xa+Z&l6TaNEEaCRCN7{}^hokVdstccmk^Db%y#pGfED;L4S; z&h;1C1SmZ>l%elb7}Kblwl2Zf_x5bCB@E7g3eTcDg`nGc65<#A^YTcC+VlNG)-nMH zLZ4q+Duao0JiN4oF3qARA5wSTsa~dbuX;V~l<-D>`e6{`BkD%y+&qVbSPR$hPZ;8K zwuUL_II6w=37G!%gZK@@maFgkHVUoK9rQYWf;8N;l(pY|SY3Fs{muudr10&m6uM!pfZw1tEbDdy-o2dkoGZ_QU<1K8O2o=uNs+T1q=o{VZx|5N zjadhXVkc`iDsQ4%W=x|IwWBN-$$d7!sVuQy)#O$;qlk+VIx)egoc675q>MD+eTeUCJ6B%uv~ui)$D1d_l52_=$)`N!Z4BSUaVfNe{91zmXIg-^WW_g z5kE5~v#0xgnpsT93`;KEc0L&RiH3nP#R-I{O7?Z2nu~<;F+m#_jHL{(h-ue5;UYs%4l9!1CFD)_Aj%_B zy!28$3Q38%wc=y&=3s#k#kY3gENV>%GY{oQeQ7CsQQF~vT6$kKg4>{s zAhD?1lL?&-1n8`4PHl9-{trTQ8zuCaNKwF8sOko^S$~1V!Q(Cfy+bJeS{FO1>Myd| zh4Hg+W&+a8iZD9|cro)rW(n1c!Ia6Ckn3KD(2yf;S{jw>dwc-;kLlRjeA4IA)it?S z4<3-y48C`xLVZ8TW{oT$?Lr%mDzhs0prLL?f31tG)u)Ba}#CbWtl=cX%oqa zWGSfzMEa)aVXKEI$yQ{H5CODl@zqWNuU}&|gvTerZ1k$r!*4`qB4|xe zjK1@lU((5HD`*9(P3G6?7X z7pJbaAk@VI*(TFj%GUeUE!xppueC2FrrVCW=g&7@OwMp7? z0z)1)aJ9n3luzt72;Ch+!G^;klJl{n5bPmqP zDaa}t$CM9BOZia;G2W+A^p;|%Bss$sqc6inzXDrbOhNl zyvI*|OVNsV!Y11#@K*p-RLvBL)yA8g7EJ4Q0S!d5`Lr^d3z3IR5V%~?cUpxFq1K9^ zN7&LhsiMqF=n?bk^JA_RbGG(9pS$ek6d!(nmhep@3w*5bIY~xeh4tYlhRwudDC&_u zq*z1?g!LQQ?>nJ(CsIn$_mOUv(jey*Z&Y^JE-{S|H_CD|#&oRvo%5EeXe{Eus}(xh zheFk7i-Htg&{{QVCyJWA2j%|JuonqB0w~Vp9p!=Rv{Em%sbUl@8)F!Tt3U~$>HXa> z>zX0Yr{qdr)VA*j6O2ag+g%Z-D4n4*IPDgsIv`9@WXZ6(3PM9?q+$zgzhbT7lJQ%V zG1>%#TA3MWIN>{?swM`G7oqRgHr ze3BD=_Ho7BV?&70^YRvSn<-DcvN(f5fFf8Ar4dF@y(>GDQEX0hTu$KP&`exgmZn@9 z;yBMqdisjry~krS*<|yTt6E9UW!Q`5w(mG)>_u|v_Y#k6;9jT3G9V{(?^hF&MFPKD z`CucD_T8>pA-j&F7wXWi9bW`uUK%Or^wC4K#n#7j9E--1bbv7GnVx>|k5rRK7Nu26 zx~JPvQCKlT&Aa)^NND71D?!PHKA2}~GQA!QRH(`47IF0$_)=3#qp!7iX;1!EOBVeZ zCYmn6iqTyZ!JrL_Zc5<6+yNx4EpjB7)J+*C6qCI55Rw~nt~@K-DQHmUO8@jih9ByP z5cU+$6?d*<%OGD5Cs)1eF1+8$wmYw9-k7e~YR6E85~(T(u%T)dkq2k0buLA*^O{4> zdkcaCBW0)L?kSHMIWQ#p#Vk4T?5Q6=8oRkmG^j&+kxX`Um!`beA@@n3&sYy3o;RS>9bH6rvx zQoOit$_7%mCIZP}kZx)s^A1Q%BajS6$zSR?k0co)%3$40`z@%I2cTA3MEu``Z9d>G zOEDgf_&>EpG<6~UF}DdEWlu_)_$C+X#WheSb0y$7f+^!KO6vRWph;TIROHjO!zX@A zJ|_9WQ_X0Du0%(I)167?Z^HxENkVXv70r;4{TAB-SN#H9j|ky^qP-vT!~Zif`saWC z6Yc#t+5bO?_P`tw`Qh)P37Bf}e>AGL2q(Zo_m&!e61o7d(qT}ZME1M54dE>isfc?O zY&X*q(RN1sk??G|mWM_6v81}DKNF(SWvBMaCE zl{gyn_irn=r|EXVY9NSH?0fN~;4c%DrgZSY{k5qN_m;wpbg|Bwh$MBZm*7wgEzFiIgg(V=JAjT9mw06pO zHp_D%)XI1KD)(cye&p5vc4hs{@YPz`waiV3P`%V(p#i@t49An8GdppZ|jHi9!cUGoGhM8Nb; zv(2-rXg#RYF#;_F+d{V7ugCJk3VV@=DWdBbAqELS1K=7+JUkvkFwNWa9*Ue3L2^-c z^%V#jtQ`@g9NNIP!dV@PRBYGUA_cj?mw2`y!PC`%vE;-$_bTAe)2#f+{xlOSC&4U< zOQVShjKNA&HRR**Qo3VjnmYISAuxImfMiygY0!4k2;SJN<0>qXydZSBS}sE|Nyfp; z=UHh+XI;7X2huv42;OhzouZQ0htpvAa*WY+_;a_4d~(LU%IdBqR1eBavt?b&A@W&8 z>fg~iw%-(@v#5gb>e^q;p1UA&6y*>p(Cy_#K-fJojCj+oB10AuRxSvd{r8;TV)SAA zy9_sHF`>slAnl^2{j(Q zXE`&Gsv1y_rj^wFt^yWuuI}_mnuXHmKh=Z~ts=E^`gr5gIRRtRbMi-enFj*+o9J8% z8P)3y0Q5>+q0l)F^d0e)@kkC$&2O%$4k2yp<%4uem!O_V*-knAE95g%P#>DnWAaC~ zdkx{G%d>=zPa1)TiX^xH353cY0?m}=ZgrQGshJuuSgi=~Oza0mc)R=r4m3K~kt$Xn zY2Df>Lj&J+2PD8l=0HK;M7m8c){oD4?uE;b7y7l|D?(~8HPB>o(MZnZ^t4|VztUxl zx1j$ZAO#}q02QBjAPiNEEeQPF=<{e8+?cv%&X+S`aR@of{!^Pp%lU(gtabe@?TUFeX@$i40X3hg>ezdrFF*ZBjz)(ZJ@*omNZfD0*M(mb z55Y6+e(cDe-{l&hQoRKsNuC|0`Ww_`@Ac{IAgWJ9viAicsGDw);jUM@1Qn2P-{Dmp z|Msznjok8t9bnsaF6G)?5|}|2RMStTi{25$6oI9_QOA}e6SfYRsY)ma8ZfXE z#5TUjw>+aUe~pyfA<1nbLY*w=Sbbq`1!MQRm6)9m%|E<&B0m6M`u}qLf8&- z?&gRW zB3FKjSLFCHB1gUYYvjV4DWFiLk(SA!aKJ12HW=cm|6iZi6tHlcx|zw`?yK-q@0#VS zANziCVy_>$;p{|zGG3AVOLuVWG@P{J5y|HW%Agh-bM~i|^uX{;4_2T0)7eyt=xuz~ z&1Iv*z>^doQqICVQawm+_$0-Q_y2klkni}N-WD99-9y?xB@j(MNJ#K}p@X342G~s4 zT{3)W0?#v;TRlvy^3Qkp#eDrw(avr$4c^-Rds+NM{G74>Ru(bQ|IGNOJ>d8C|5Qc& zZyNdk_U!+5-u&mF5V!xIH~v>b^xx4#@ZUN6|HC=!?g({1+kK;RZ7siy-l*@~4caI- zY)deLTc^Qsy}l3r`^Fiizub$EWWAU}0spao!@K|M*u{6?Z)e?HGAa?*_m9R~TnCA2 zSw-R_@h8SEO?S9B>{q(;??F&&E9Jf$mgcfUD4FlaM1VyCWSzN7D?h8%uR)9l>O7BM zM6d3A5O(%H%KD*`=7Ge|@#z0mS@vWud|Bcb&D~rSht$P0*ybm!(!hkcwzgB_fiD{g z_ywzR#;>CAXk`dS^Zr&M+I4v`@HnQ`6uuREc*6EJfuY#$44-VufL{~~|FUURQ$0MP z|7aRqQVjfNEBwQyXj3UtJQaRQ&+fu^+c^Fjl9lyAmZ5r;NZCdaON&r*?3 zeYW|lwdFf+Vlo)~=>kpo#*|v)f?RXeBHC};I!Z@p3Rjnojg%1>Gk=dFu1=7eFX5wD zi)eQZPKeYmQYY(Qs6~IXaFZJm#R<4re+gsX}4V(zyBio0pemAl{JcvX{zMSXUccJzmZyy$t?eVfBRD5 zx|NAC-5f)h{UD~AbfH`)?B00pCv}>&07-jA*7EhOWz4LeeWLw3G$ysJy(erc&0gFK-@VjY+HMa)9Ngdz5gzU&}w z&~_%VIX)EgR4_P2=tipF_l;}OmVeXlp+M4R@h5<`@Hreb(Jn_+?;-se&3N0C+CP2j zhm!Jy{I*uc(t%>yKz+&!@A{{89?m{b5G&eZVb5y`xb1P>I8S(eja6~$rRlU$qI@r% z!}c{FI-zkt%+TgSoKe``7yAy@i!?8rSbpN2poP*~>|1>aS`MgtOMy~7Ua zcGtw`h6C4XD$VjcYj|4Io*3V;DQBI?b?J~^)ZAIvF&iX}Q;j{q7Fnz8XO3&PimoU!nBi%fwW;gE{4CE{nkG0q=u!r#AVw?6D&EOi$ zeNx6ZH?Po*Y|chBXC|CG6UA7+==apvyh+`C*E+KDBJ%=vJ&Fv#l90trFFV20Lh#0Gz_&2Ftv3 zr_Mtqa~0payn``=vaK@wS3|8*k`>+P;^SK*`lLA4KYt8Ml;2*ytiFAa##S)5w|n9} z=L-yGO}#X%Vlr)lHp?ty+);>5tswTJO%>Ot(Z$)S?ACiBJo~8=!zafIv|RMD6C(Wi zPTD0=TZ48769Jhk>0d6gdWYJ++ZAMIU(JgA!87{bHHp8gcI;NU>dTaa!| zjoul|6l4-v4JaQyLj+b~G@pR7)FT)obSBbrcw-kfz%Y>0yZehTGTos&$5{&}6jcbkSk1F^(;M?w;jwco0v2BjJ=-)nRR^SfyWeu%Ff2~ z+?tE2dEMXa2OQb89Qrsm)&(_Y!^*OnTFfGQyZ0@WiJUK8Y*CbTI~yTtd%w-UVM`v< z&=H@vyzqWLJfXQJLmJ9IZF`2A#PaOCU5+u{+Im^e3O!jwt6kjF63aWM`@vUSAr9K- zCpKVQUcxQ8u^D~t`-ZAwljT<$koXVcwi{d5I=Z6A`>|6jJ2x7|EG;gltH4fjNdIK)x9-}7-oTa)2f6L! z7{!(D@T7hdGcOa6ccUqv$te8D8Aj)G7hB@v%5t#HWW|@K_%cHm_$udU%cps+FZCIO zEwJmc#4XDKJ4_-wnVZYcKQ#9raocojp`MxRJLp)pdS^?obz;gsOjJec^&ci{yEC4<0 zIoJ!ZSflRtPLrIcoFce~MdRUz6w}PMX9g3g3?fVGt&2Cs4YsA+*r%4qe_*D;JgTaVR)Z zd}WS$FYk%7+evi$mBlgx9Rth0M>fBS8o}|V@g+B2X3}(at&_~GWHZEaTJzj@_(PEA!+HKJ%c_cS>*d+;^NM7t7C?-R%d!9l;Qbw zy;(DLugbUe8N@kWZ0fQz!#1Fx1f*5Pc=y~FLCTz#$LFs{7Xz$TtfBg|u0M)ADMWlE zUuZs5%Ij>vE3WCv#8Amr2eAOhJH8d`U8QcaZskiDQ*DC1jD5?P&jpEY{C-7?+O21O zMnpHx2IvaZMHhyBa`PECa!L$04prWqYA&|84l{ZyM^7irGB_7oB*fdRVyfvhk1E{i za&>C+Ik$b5JhtX&sMGfFt1WD4Lh|E-jm3sJE?V91r@uaFnHUkP3-NbdDWt`wl?^Jj z%7k=u>qe1R2GA`_7R@|cZb=G>lHJ+(*3UE7sV@Vktc7=TZBJ_NXM4?7p6MG5XU3+wtLKfdpNBWm z6|a)RBx`8bR|=Pt&Y8)^(|znXXiPbR$@13c$~MmJof_)RFgIQ%HCkN2on$ZkMBHjS!SH6lac)D&nSpfB zX>7A}r(u#*k)XUABU7?7Kgna;%1zlC-8o$t;3PY}rfv}V(yF&8TT~yDI@OSXQW|ua zn%WW(OfsVWY>^2U{6rBCN^@?_xbsZBc)GNvW!pVc?Gie_F(a|D;j3V!OSQgY5hqc$ zS#I=Y%#&A0q>N?6i95J4G{b3TWnvl2COhcaDl4X_9l*)maM4NK8aE!Reuv1;YV2u( zg6}r2OUw!z3sb@H#rlpqAgUP^PxacO}95ue)?5w<>uuLB8td&Cflw76V}B~ zwpB&j##TDD9kPv#XIa%X%c~rVd1gF^J%Bo9)Uw2Gqpjl^%z`7`mbNjoVhcAHm(kDO z7)W0&FSJod&#~XuSWu9-MCTImYVC8zwy^)p3kzjapD1|(WYWE(9_ z8gG;o3_4GJVGku6zp7Y*y6e&`4O#A2u*3=DaYs zRVLQT_M|0daKqJgC%`Ct<{r{_G^g=;ZVq>Or|fj&%Z&HRt{uEMB8KwVss%D>UKh@a zg}seDE`ts27$HZ3m6VW-?Rg!ohKhWau~L2A2lBHHs0yE`A&50yQxiiH!!w9@s`lG! zyJ?Tvr}(+qTBSxA2`>A-Vnr>)uWd08oQN{QYGNI?`_H*1YDZ5w3Ax&b8g*ob$T!YJ z;3D$Yohi%ht2bplrX_jnFJ9QVuQ=Km$2EO_#ih2vAEq!t^+02}gO5Ub zF*Z`GgrRI}Hg+S&aBEB3FgZxEZ^XSEcS*J#v*Fyuxyoi9;WmK7)p9S{&1P;FlH$l0 z29LO!Jk9OOHc`r8RW8C(t+r3l%MXqg!cxt&cLStM00bIov6&F@` zz+~9^s&iS|9mD*@nXaHH+ciEv9@<7FHoY+Hg)%8Uuc+QJ=7EI}bt4C~N=WAnZuy1* z4fOF=$6CjYAT1RK(GPcdOv7-ECWlAs zZ*A;T+G<>6ciZ&r8@D>1!0SQiw`JPl>jBMX8Rg%S_-3d-hQcmRye)|yOE?lxzvuI%u)UAD zkG^L2w5YAt6G^b}yE_`k!FA;(!LYi9x`|3SMJuX`VN64Vakg+Zc$4Qyg{I5usi`po zdLv86R}8JK!6DOjE=y6wtt+y7%7+77$E@{4B0sN4(e`5mrB~j{nN>4PY}>SC3fj~M zmy6_7;slpzr3^=6PS~5QXb({^#gj`@&OQ7db>5BA2iGXV+!e-R= zc3G$3rmsz$s9D4bH}RtBulqEFr7c~z*t|ZNZA_>u$YDMQxd~j@8OrTaam7h0-p!{~ z@)v6%cS~c7QYocB)s?;`RP1OUlFzcboQU0wm*(G?j#+A4j36qGn|c#w6;qkVe?@O= zXgi?VzvcnkdOBIyr`lrq+!Fur?-efmi5i*fEzUcNNOiMS`X+_KTOQdYMTju47Hd4v_!7n676 z>E{=;wq}iHT-YODuGk4PmX`<33!+L2fI7Vd2vV4B~u1BH0mJTY{d}Y8n5#lF}S`ZN_zlxSnWYXy1M2nhN(bhTcIMs zDKdBmRI_nT+g1uh#6fF8ohsPo@k@qx20ArnB98Ictx`?ZF4zVxS;w*ZXNvAPD2lIq zQ+CTd>nd+Dx8{9gqrW_7CH&P|Xv07%c1xXr+UF%l?CjE-hN=A+mDh}}*U2%RZJR5p zVmZSOCapsDWA+`xYdL2#^BM&f!%f>U#dlG@{!SrLBVFbuMsqI3tP9-?r90-Wn?u^^ zWeimdDJWXs_$^n}3_X)5dvCX-YzM{HmU#(-6yVLApOwZ=F`TXx8!$2RYP>Agjs0M^ zbLy@=6g^3L6Bbp8v1u6ixM-wmKhS~x;%+k8_1hE5tM;q7cc}~AmADbKPh(Z3SWAjh zoKd`T6qRFMlg{Hl9w?TZ%_XACTx(>ZGrl%;+P#XTYR6zf_}lo| zS~1a+5=ZH-a=%?8x-xm4-{$lq40+Mn^VdU)JA?EBTx0YXW*= zUp-G;!M@$_a=%dx}#^$9XktaAm!p zfBn$7`eRA-P0F=&Li4uv#0`ejYNyT3DEmVad=EyMAI9AHyYvdy=fM_>JnIe)Yr=pH zW|dpo>p^v}aZb4xLlHz-#y#Y5C$N)*HQcU?Nc(!c*Xy@oJ3aNZXrH#xPhuPb9Zoe( zUySzBh8@j5Vpyo06_ofPpsI`p{qB8Fec^`}&-VMB&k2)?oaM|h9ldvdb$^JRqQrog zDD84SMg5ns;nhvQwJIZ{LzNCoY?zUHH!82^`k1kYBM;n`AEe*N9y%DQttQ$);1_yd z&7c?8CoL~>Yq2(_}OQ{tGS2X<;ad(IBkF}}3VdCIiss$pxDFyFLlq$BOcaJMga`mac* z&u=e;$DUtvFR_p#%L+;oUk!{PPA9zf`H<}LH-W2449vrYD=8>4_pjtH?foHUoNeU9 zW=@upk8_&PoePzWupfUZw6Qg#9T-w}*_wkE9f0N{X{S|0aaKM(xYT3cp-`;Uu-S|i zl8hVZ; zK1u3#-p&$oaf-I;zF!cFb!bj6a`5LQ5p>@A=zv;vvM8JVI-;%aM17drmI__)YT~r4 zpqSm77%L;wp|8vb%-g(IJtcbd;@h!DQg>2jmbS6m8kt4a^BajYYwZ-~bLneyf$aVJ zNXFi1Id83t<_1S+)s&KZGufm+Ws=V|RvdI1kzgSfoYs2~wt!CKq}gG{s^q2zO2sEK zl(b953SQbFR`Hr&&YH*iY-<(<6Fu8Y#2_$HE{Q#w#}%7F#pxJn{qdCfn;NDOXgfoK zUdO7$iw5(4(axpgza0C{P-bzl8yQ$%vdcfS4 zaMaR!hk@pi%8p^q%s68TCHd2j98NA#m(J&Js^q0AXSP%&o{4;o-Q+GzU!z~x-_}Cv zn9@q=ly|RqbM<>_P2l7Vr|?kk@~PCFT)q8%wFZ%bx9@AJ=w?8%auq$R#XIZK8+HmikDm$0O~;d>@AcpHd_vl%(ae>4h?>l+Bt4VX zkD^*)gaQ2`m{5+~?c>=23r&*J>&$O+s~CVm^+QAS zVi`@`zSr`LI@>aMb<^eaUgpc;HbN94AH*`0e%@(_o?~CbhKZi%Q^RDNPd+HOivA#3 zEEY9dPx82`q=Jxm*8!GZ`|GkEXAmEHjtqRGQ+(VPmY=@yDPgWp^djb^J=RMQSA)x8 z;_wqD7@#`D?4Le5<;iL>8cb6ZA2@kA@QQk*R3Onsb^|hq$zLU%SzDcm496x{J@QG@~hW&RH6% zhjpnCkQ_bhf9TBXcju)^j>XH)D(z2O9P?Hr!t515Kk+_7(JIG%;C%Ja!Em*)=Gj89 zY3reN!5sb5uJ6VQWtt549+OR}>3u14V)F=FUTD--AdBz2+0QqsPG^#+htB%XG%PQ^ zI`wTC<+8buJ7_V%f;;_O%_`{L(A%Qkm1)b@oMCLQC>4fNnsPkRmk;fi>#Ps!uxSxwqEXG>k9`pM{ahMl^tit@Fl*LENEm(ctqm9Xgtwp-K){EQ3iF0GfG&nnI< z*zP*joMpICDVb*IrWz-rELgADu=nK!$Gm$kA{_elK9wi(`G*Q67V>V6=ujen`MlL%2>~ zCz`7=M9(MAmv=ApxbC1{hKx^r`h3i6!l?S{WxW!&(kbu2{=l{V$^F+?g8$C!WKe&W zwq03Q?;o;}`~YtMR?r`)o~h*g=sT~VR?>J&NM!hh*;dx+J*`wyN7qIUd6nn)u8oT7 z@%wp|tz$;65$A}uknhyZyjA#8r!MtrQ9jaAtJyA&u&6m;a4y5Aq`K~zd0|MH)6m%Y z=9+!6rKT+gn$6$3%B^1d(nxHE`Zn{^vJDt~<*6%aKB7CaB~3*E z+f2h|EDasn@YRj?q;7j|%q?tMlq)kUa|r75UXHCAF_!u?(VMgV&PQjuVBm;KKFQDpoC*&btEHJIEq%|$!{w#6 zc~$6=d=%YbYUYc<{P%Lc^GC#Oe)>eVVJbmQV>T1%_>FvLDR5o^N8Wz;$c%ZhFl=c4 z|CThvn+n#`ecNIHw~2HRsIDvaPKX6J?h3 zej!o*!9zj~o~ito2EQ_3Pn-y~PLy?Q*Kn*QxcF9pz2w!QtriatyRwFEEI-Tp|dj`MUjfsxh3t0(yw#?*(8Tb5`JXPPqJ zl6LS)yp~N;_bl+3dWU)>&4b=KrhOZL2yPmBX!@{$wJmf5qi*BU4jE=O|I_a+2qM!7bH4-Gvl$k{#TnH$bDCsM8N zTNrzn)KnTN5CegYH`CWvYr+*wO;}cN>Cw%Dbet_6PjzG8S4&kI`R19KW#-piFfo~4 zp<3#&S!J+W36Y_eda4`w{&h;T&A3suY*UhBUb}X+iWYY2poR5LkHL15_aPNfA@YUmJkOt|7BOomd4MRyugACoz z9?#*N@ALUS_kI5X&;5(ei-CQuy|1-bul2?}^NJ9uYeRK@<(+J2fptHT`w+7Fp@LTC zcA)KKVW1%@%X{3ZYs=9eF&P|k8l1r+%wTOyk~Gl0t`1}tCBh{7nTzh-xilB)5&pwJ zzn^lyuNRMUopflN9D%px56g9UoG7j$$bJH}v4jfY##|0XZtMNHN3eV#KD@NhO=pkm zMkI-n7aoPC6i;!l859Z6u?sC%idxl2?!1HX{K0)c)R+`8B6j#gB#YBLywZ|j`lA}6 zR!z`>TWq7^jQ`GuPN`z)_!o^0--^yD;O*3rF$wvnsfh_$y%me{iM7WwWIA|@&CyJ3 z-(3;1V#l-y_;`)#ZRlRxwnBZ097;FzcH1MYvyc*v_Yk(W(9f_rsR(ptC6e{f7dRKc zzq*67P6Ml3h&?}|UXNme-v9=e=daqL#@lRn-7^MEec{ZdcnOHtB576%3@Qoop1eN` zqFH?7`BUg#sNee>E4C9j!c>!}g>u`Prr|&m39%)X_w_Vxz7h!Pp{iTYW!^Hn*A9u5 zwD+IcDydk%?j5X_HUuo)`D=1rrItc=aian+&Q(q}7Siase5x>Nvl0_BeHcsqR_L=2 z{Z|mFd{iX8Fp*%GuR&xIa^BSAvD9>&T;l5F;^HtYzA}8kclM$ygt0VG#5HG{iZLijCXtk+El9U zkx}U$2D})k7#VXn=4-2bDMB#7ERhaT9nuzdoK~57hcFa7VYLpg)R0IYGE<6Q$%EvU zU&#=@x9*10(;~?yEez|e^KGT;6XzEYaSm?3KSFc9-Kqt(l{spzTQAQ1?niP|=~ilONl`286y>|yYz-X^axE@Wor>9;5zkxd=_AI>lYMe>qZyjq%AOS<9}anu z;!m;*yfEJHvF>GXzegaVV_!MVFHzZFyY(^cOz&rmPXT6s5w=qT~o$`5_&9IRaL*sf{FAs@o=9ush&yh9UfG*vdO*xw&hE>^a^y)y=Z4Y~tfDBW9f7 z3b;g)Oc8QeKO5_Z>dy_M<|2d{pg?~nR>dBm($@ErWc*_mf5YhNUDId4Qv~k`JyhbgL_>H>s{a<~fEpcr2g?P9stRp3dK2;wK zJiqN)U+r*V&EuzM>UZBAy@Hr&`7jjZ;5$(lH0HE9L)@uf<5Y6_37ug>iT#}X$NZoI zF4k2)tv*3bC<2nALP8ji%QBy9Jtkdtpv?LG&$#IGzH35SaD>JWZCnZ$1i@KdR;kAm zlFUCo$MG@`Y##1}z&+~RgcX!Exuuw{cacI@xZ>WFEeLG8Nh&G4OrC@@+!&d#QRCZu z$)fd*1fN1%*P=F?Qm<&mZHfc269`9}C`BV@Yqx7&P0sC~b-8MZF6usKsyq=KH^*QM z)KI!RMl3WTjOgL9E*zZar}9^2%ZTu)B0>URY-6oI$;|*u9KKcRF47eX+qS6JB)0T$ zL63#%z{w$t2S15A()Tl_DW@UyoOvVEXaTb!li;GMEa})vBc7(QgTW>xztRa5TV2~C zFy&FM$Gx1Jb^2TQ^{1~72(BXbFyXB{>B&`XlV|&-r(O1cd`=kVXcnD$4at3$ z3!}t~zTUIqUl_)jhoBu9-66AUp!a^N(8#NNlJGNV8i(%*3U>P9Apgb4&?1Nkh!6`W zEx-0ZeUZMepJXvARMhy;eUEy1;PK?g(u3YIp8?t4w_8z{`nFh$ACqAibmttH8<3OQ~7GZ+(b#+Y=OK!a`5Cy^|8m0Qu}&CL5WeAx4N%qlbx>b8VK<3j3=-+^N4n2*h7#%^H%=sW z=1zM<_aYjOQoU0jS-bT~^9vBGUhBw9Mt;PPX7}Dbl$+GbqFy22{gASC(ms%KCB?Ey zF5dZeqyupWbGXX2ZwyN7Zez*kl>5~CCv&f>b&`F$MfQKKdsp+;$}V{+%#`gQSvv+| z_u_G1wtjt8tKz+PecegsDgq)~ibqSW7kp-RH;axwYsybcLt-xGb(+}>?c4bLHN2b* zPru_5Ro%M1^SyRu!BzJ|p+s&_z~~8#yWlX6aj9jjg=}yY+W{Tkms- z^@+Hge-|aUw%b$U>rLy@Ve5jW1-p_$JB8+ANG)hj9mWa4yCRhR&wYX4~Rl>w7; zx(o`(_Te+@IQ8+S;bYcxv2HX~+d!JN*m=w3MwA6rh+oFO&aJG;`%#ys?FLDpr1c{o z-qU`laKR)oJPKmXu`jO>Sg#T*{?VB4CCiAJoE>SCQF?M~7 z&<4Bt9KE#KN{U&Wz05ygWmF8Asl%c{+&p_>sGZW#Hf`U}cxgR{b9P2o1ommVYEunP zYF4gBInh8*U`H65+7_IlBkt{mw-F@JX-10# zFGEgLN$ce+2%aAfxPOWGBp~9Gif}G1Nn*M6i+Ts~1-CBz=2kq|e7UmG*ZD0w|MuDl z72&Zn2XfxyFkR_zh_zIx{C8q#h2nvQkzT*w2W=J`F1r<2b#KAG=vP-AQTwX-qK()< zSsALmBXGIUDH^yOzH-690vn8Fq5iIG0A>?7b2Z24Vaj*IGAYqsi7)ubmMx zuM+CtxV|zlng05;*(2>ENAc&!KRKC_HV8tGqmn)IUvrGR%qADyhU%jiLxsHysNiQG z;^BLi_7ZcW@+f|9rUQEKvQz`_f~}^nZbl!xds$%0iti>v6`R#uMF(%jnWUz5IGXJR zDoWSy@w258TTZzxZ*BN9Y;H^R3ttXc9Qncs{W2aFojYAJ3nWO3rZQc%-8bMfD1*AelD#l*h30YADzP4trO<{ASwB^!R+g8Nju+fZVw$9t0f%mX(Y%SR< zpFK34&@ry*Ql%1W_~N{3cEdp8+uq$%X_Ri{gGC9f0VB?FTO2h?kf}`Nabe>S{FdI} zD|Vc9I@pc+`%EOfV^peNtj`k&ZaG@Zb!m1bRqe~Z-foXLbq$9#2@5cakNLK0j3f{R zZ5F;N!2F2TLczK`nR>@heoBL8ZD;vOz8z$1ZO2J7Sd|Hx=hP8pkJs zEoVuzc`wJ#+cG6wA@~*yWO6!no zPYMADxJu8eu9%_)AWj2Y8468po7G<@ofdM=cC@@pf{j~w*a~Tmw^i?1svJ!g;zq62!nx(O(SNRti(b7HgRJkt>tY#yg4ue`7*a)AoPfc5L9T}t0@RCK6 zYaQhkM5n#3Ps!k%EV*98z|p9BcOe8rR3D(7i){oDWOSRJA=aYOi5}4l8{e!BszG9yR z8gkyaz7f+Zo5F`P{NIoXw`kpLcjh)a2X5`vB8^V7?0^_MS_cj>gMklCSVl`Wi3(Rv zXz6fcn#r&$88pCF>x3R!4|Q1iYM>*G2?RDucOwX#SC1_k=lXJZ_5_Pj>!*Nw0IvKC zx*yYDlXHh2&C}OXe)sM|1;0=BIZ7P|A=RmOtIL75o5rexqI%&B-H*j~lL(u?pnC=^ z$cPA9i*)8aN(Xdhfs52?7sY_m7Ebmg7oiP#pLADB>4=S8ILYF^gb9_tpFh^ceQN|V zXvHIn2`76vKoiufcg_?2Rt4azrYmR#)V;GGc{kQQ+pF#RH*fudb8ku=5wpKL*vsp! zR#Kbj4eT>*>Ab%--@x71Vszv6c2w3=q_WnVlB)<}?v+62F~wEF{jT7sUG17s=pIL2 z3TJ|Jf4Iy2b&SU*T-x^oh?Y0Z5=oKJfS8Kz8gs!miZL`{;QM2K%%4@c#~b^Q{bh9u z>gu_gPP)_1FkH)-%#r+zzB(7Hwx+HVevEQ)so36O7Ik$OEyrcz%Zk~2CvUh}97*p& znO_<-sU;Z8$2Z{7>`s&!GdF;&!Qx1~H%{XFK3&5rYpXhaP z``4w*J3r>qw?jk7=bHXd8BKB->}g1hs+Wa(xl59w%lf2FM0wpEV z{ZhG9B7KP2cuq0ggaSdObnOxJ@L#*vDGs7vH>pSKGwZkNB8afZlI_qJpTT|y7k?cCENh?!wIPMKT)7(N;?b@q4JW zO_>^6)Er{VmpHgIYReXiT7%1jGZ>Z=gx9MaZ`89HB&6yTxX-?EKTVxwEu}J`u=Y~? zvNz*lUnLW5kd-@0DDz9<<&)s;**TxN@mt4*H4wtD6vuRWjB&$NmYKT&I!%hd+*Y+{ zCq9;TlVn<~i)OtB);KvUS0M{JWao0+i@>Ad0q@3w&DziLj--`ac5+9K$i2M!Aus0O z-_E#&ygt1=t(OXYIK&yGN~*DOp$O^{KRR@8zALLE~pcvOeBlUBBN$*5MNwMM-4>cq;n-e{ZZTCYw^ zpDz6Xh;1gVL zyueLV0;Q{MNksUUq4rP=+~UJn$7@&6iNKa~<#^Qpmm>mHStBuUIOYOPrkpU65AQ!- zD6ut5c&P`ljs`kCKioC*n7;4oo{`X(acFpjMJUFtBRbA^O;UIzlTT z9gB_8=*^F3-x%g>eENDvjNS{keZ03R&^r62h8~jYz-upJCymN38znYHYfr|#TzPBf ziwDWhHLiG8*A)2zzFA)9k`V?CXv%UE9zLUkOL@&s`N&L}spTZ3d5GJ7Z|n22vPHJs zFgU?*L_MC7Wz_8Rj`D{rWF@!;)I`L+5VjoO^6W5)QC2eSbY`0*`+ggGL@;OfNk!b>Zjrv))=b>$eu4fw@bJSa99G!HF(ZgeM~BUdL?ClAENTiI^2 zd9VkMC^T-5`&jPl(@JIl&01yiCH!;4esHf?!NdUa=h+%Jou}aDk_hu@oN!?7Nz>6m zL}J=P?;>l%N%aEvN%ueq*h;=xk&MC(n`W4O!OEOEIN`=Hon#xH-9#`w`}$h zT*r^0>w|J$dt18H+PnI;u6n+*AfhvkmPAMlLh>e0=F>T&ER^cMWJGrzH79w^yPk)? zFD!sEvXy}Nz@MP9R=%-*6n|9^zJ9Yn-sfIYa#rsKhlB~xtl9>zx2Ds`h>WN?WXVj1 zxQ7-Fqn~|iG`;P_Q8G#03*rF5k#`pVj*N9a0_ycaNDIzeR~qmsQSn{b-`_k$xnlKe zHZ?+R)aS%hbAmoE^S@-*et(uh67_Mt&c%lHf8$ zKXEipt{4@I3f!UNCXx%sWnuE{^U{C0R}8A36P7f`I>tY@ z=s6D1Mfg2e6LYg3dbD6Mgm4WOev_|RejZnPYkvw2lEhlytW)5X+HH?&CYvOnnwpQqnk&gFXG{e%2&C`XO-l)LcH zM4d_hFkIcbGT~U|2&42ufl@1Sr#yS5LauI0yiHV+_b=Yp<3m|mEzf2+*{rL()#kQcO`9x7I!PfzVww42kdl0g zrzurDsCa*ENhAi{Qr#1Mdy}DWerM<1&-}ZFKTTwgn`zdIkJj>f`Mc}SW=XVcBk8rh zzGJLy4e8a(OdzdaHZ7AKQ?;f%*merJPyXaiuXvT4t2E}6oZ2@1SR7OW?9QL}2&UzF zMP}vr)7Uo?Kk&D;cPo$uNhk7}5NX6n(stm7O1|2PBPfESGdGm9$jjWe?YopsxUSk^ zWVCLqFiG5~@$~jypkP)QXp7j66E2zbo)oxyS;eiPj@R(wd?&@WZB5H#@_TE|=Ys-Ep+B{aVpucs|THVi838ZeINrFKxtb0T{GpsYlp} zVc&9oNN+B{kg)clyM)C_FdlqW{$BNlqe#|h7n7^9i+kqo>!oc^T@WtuT8fK5<@#Xn zS^s5q6f;N6K7x7Z0}Sg!Z^gVDbZ}Vt!H(q!!9Klh+p*2uK`VjU(W2=t=Qevo+5rFI zaGvV+#9Z$vF}aaPkH*F>SyJ{h$@My6eCzz|VpsiS!+CP;_4HP8ObR*QQ1Do~V__Yi zs_2mORx{h-*|MC;BnV(F6=gckr}d30lDh9AIC=}_WR9c~$@GUs4H~nS+!cBs&VbP` zHuXjECSM=T&{Is=xnlj&`4>BVFtbp(&6)<9d9Bt(Lr?n3pKALyF%mw)$?eVC@1-gV z6>IAjqFs`|%sb!JZ}?kW4!81Q8HO ztSOfmdC@|Q`y@2z@m_u9gq+FLj@aWa53{&W#f`dN!h44M8gz=MTo|{*dZy1Gkk1ox zI{$c~UjvG{?BB()M(AdYb@5p?DJ6;X6mu%f^JtRzo1Mavk!`Ni9DAFMr*ZqHG^9^d z_}<0CW);REW2YK&G;n3-P=vjQjitKE9qT6k?@;(Lh(Jh3JnIv=&8EiqsEDmO$yGIP zFZ6gti4UR}51A{=Ff1B5tecRMNLQK9y{R!i)a{!0SCNBQI^Kesm}f6R)>FBsfl{e@ zMs~YR!Pa3O1x9t2ZNX(OCet3=D<0DyHsbZ_$!5!{j$bvlIBwQ6^|sH|T^d2kt@lEA zN6HNhLx(~>kA1F?Fp1q%h8C0E-F1qe+L#l}RGVd+%;LV0 zB=jmC-C69@*YJ64w=VzSehw{g#ZrxF4p)oXsynihrc{I+e#UiJ?Z%Xwzl?KGpHtZW zll5|{aG2s~Oc}l}yS?quoq-RNgmItJ8Z=g}RuZN)81!~V$Wbk2g(O)k&!hRE9_~Tn zmE|s0t|EymWc7=ct)| zN@@KW0o&X#dWG-d+e=sUl~X2@)ow#8sw5o*em`T05ybq2a;xN7uW%8Gqhjz#-u_)m zd3#9*BbbqD{l7v`rM`J4666rIGE~8 z%9N|>Uc9K6OPOT2A(SIsH6oZ(CeQNQNZsMO3{OX9In|?RXVQdG-g{fu`!GFZRnbWe z)9GWg(LP&KZ#`m3;DO>kw_*E>Bv%lp8Z1?i-+$|j54b;3Q!|4EXAC55yL&!-`g@bO zI}gEEBDzbam6@#{ z|F0;$@(*A_xGtVp?mxXEr9IxlR^Mu#(JsiANOn|K~$+-0lTJS=(NW>4=)fTm?LbfIuAJxjdwzmPwa5_ zZUp2v%v})tv!CwdB`&CsoF*Esd&1^gqN0{|-}O^KAF_ zlR18eH0v>Iv>VNw_SGDs=YuMuLuGa~#YQ zAj(y5rqtse4Y+KI&BN(}aPez^ZfEGH_fk6?V5!rtwbooF1o5}vW)g)+LF5yhdfj6}u#U$|0tC9xCr{t&b^uIXXzxRQqixDf}h+h!j zy@K`wpLm&Y!!KWK#{{~ZN?QT-+*Oz_g%4Q%Y{xHIy>1?B&4^Z(-v{*U7T zA0x4exuC~E_&Bzb;8XmaD;*bPricJ`vFUYsr1d}VM;s+j`9^#n%Wz(1pbho!hy1(E zi=SL9{x=`}ON=7+_@!f{ufFBQ`U)!ezNQz%qmr;pVp08x`G01Thp>!W;wi`2>(szS zFLy!tzuUa{$;IOTQt&s4^x*h)X_V7^#pAKzaL82&t_$K}YS{Zx`b_@re+aAJLi69yhDJoz)HW9uL$uEd6V*uQ{uE(B% z|6j?Me^;k|?0Own({y=z{Wpw)xlP`Y(?I1Wf+9UnmInMJPyox^b}`bOhku zJytT!tN-JE0L6osah<8b|C2hO=l{yI{Z`?BZ}b0RiHl>u*h|Vk_v=4o9w2^Q0dTJe zk|5{eGX6KK0Wosvf5phZtorbO#mL32xVT{dD@OkFKL4*6`A>=RzhdM)^a z@<-YsZXH10*#OAoI}EnU2_|4~006DE zb5a8vPQG5@?WZ9_{jDP_<#)`iudF-?*&q1Z{uc3_?_;cK2U z5%(P!17|mY$9bm1csM?NHXPch^UP6ZKiK#rEp^q&$r{&hzZ=Xl{)ru{-$Z67Bl4M& z2@8fFfvtNO#Q#}Cuwy_ETzxIJ)?LOAoYiD5HT0jg7PY9Sa zKV;i@x)&>)U>cjCRi$(k<)mwT#D3?d z=c3RCz}aKJ7F~LT5Jz%G_`SyPo4bM$`$ykF$yw*S6|m6K_UCAPEN*9K7cl@0aw;U# z{HTRq1kjs5=xD}0x4%!y-nWe;?cM~n`6OxvRBLJ=yW_4bWMs!9iPB~7tt-xHL<1a7 zmaKyMVST&f?C-XNJ3wl5Q9ra;>#Z;+u%56V4$o3xGySP5Up0~g{ zn6V48xsTL?f%&fQ%zy1~Z7<$S0@IN&;TQOv=~^C{D{Ttk?1EWL!vDO2AeM&V%z`oO zyR#yAwevUC_TEvS{Hd^})e9JdDQkgYmZ|k9UNw#DhB}DV*~} z`0p_I6!!~gzwe+%vr{yhp0hm>1u!y|1%ZEld0sUSvGoh z`;VA|GXNlx9RmijEd63x_8>} zFnwH8;IwiQ&^KN9QK-@@pzXc55CT1;!^1vTK zFteo-PF?gy9Ctv1egi-x4~iTurK=ioEVwvjMrr5PPNejI(h=VVKqx|N@Xydy{kUgg zZJj___jp9$ZfltuEO6N0AyE@976PE@b(bDeg(5-s7h+AP@hB=Dz%QIubSgf;LYwRZ zJg@_I2xp!fD}Z`eeHo;{kT@8qavZIL(#;3~x0uh{@^PkCmzQ-v78GlDVYkcpte;^$ zJ3Yh+JGY)bR%WFgh_CBd&2_{NAe`xq$-V*byr0=Ec{d%2l2HKRl!PJGXkuP~j%v6m z0gPQ&-QT&;cRqx$ezpDDPVufImNPCtwQAGRGrMaXNTP=C`qMHrc$mmgHDWQ>IBuuH zTXBJ{NPM-ZvElqF|0EWc(YP#jRQ2GGKC#_$V$-~7?fV*ogQ2nN;`{YSQnCGaA#R34eNdTSvB>F*QXT_Ae^>oi9d@*q< zICjHC#2yA8DHEkt6H2pYv|~FIY`(#LuqWm92K_J!k;E|=2nGrzGIWhw1p3N~s7(T} zcXn%^(OmZln2>0aa>Y4CW&8bn^i~7+ZBH!ZBVsx|LDJ=>m8NV!#B_&e(+21Np(ES*k&!F0%e_VQ! z^D#pDxoZQ&<7u>2(DkNO3q2=6d&<6+6C$|>GgR<-A|>sGClLq;B$$9AcrYw~KMtuL z;l={RgM06lCi~Z(>|wnVZDX%p(c|*w79ub&w3duSA?AK1u)+6@K9OuhtII_cI!4@6 zZ^DViq$!Nb7QleG!9uPc2CcYJI2$t;5$7^~RL1#Q=GxR`AYAjB&N~*C7Gx70;kGpR zM6JNH5&=kNv1rb-0oH<>?3!|P83Q7)wD#7=%4Y)DSiGb8V@=li^nW)>SV!PAl&@T>H@sbE{&6g5djmP4x; zh=FJmkJH6s$o8UtZrK8E+NRk)5O@*Kv=t+LAfxh31*OXp0sxx(PG`v)v+-#(qBa_# zXSqVe&U!wNGzyMRSxJkGL5|l(IK6C1H0&Y29oCed1ZrUIHJRC(Kg~Y0yp9vhJ|Nv!So+JI&!#U|du8v@(gjRo+2dqAxl-(z#tPZ(woy zqJC9=qENInJ7>mhQ5mXg)sIAVDPrEOQDgp4JKKeU;jVse=KQ!6j=vVtFz!3+Pp2}VErR`4wk z6>17wxwg(8F+D?iQ3x%W)gXA$?UiiqIpV{hZL$?vv%eZu+wYg6ap&>B7S-XE@FZJ7 zF&&UqtXBc1g?+SG^*^@7t+yE+b%I&Y^)HaL1xk&nW*cI~h>bkpc|)+XkNw)bvo$Ezrax+!sG2dyp}Xx`MPyAhru z8Ig%W(rx;8ZUPvWdW&YdUQOb>QlIagaq`n-dP0V{bvE~BRQ2q#UISIOKHK(QwqBx z3aFUM5Ew?EC0Df8Lgry)0s%M5QJ0vwKF67x$2c9;rln({do0ig+&j`F8TT zGv9>6JJ;h(wD*4P^r7u(#C6`ubFLujr^X9fitB!LDX~#Zux4=8{mQJSE=vvmu|% zCq^aCiD9&IN7=R*bRh{of0^2p;KG*Tey%hfF>xmyT{5r`PhDxxmGeLIw@AQsrXQvz zc1rB0ZqNqZkc_xJfHs7iYsTk0MK1k$rCVWk=5a{=dT|evrrgtLt=3j$uO1MGSlbjS zH^YRm^opi}7o<1H(+ki^MR6W_aEhPiV<_-nxu{Yd11E)fmbUydMw%|zBRC3IVd~EJ zr(_G93hO~D#YaYPR!uRYy>zsF5(TKv=+V+!HTuNF(RldXzRrSWh%;9Bt={x7wM)y! zljNAC?7o!MJl4(VwaXB*(Gp=t zhum)zPOj3*n0k-So^Vq2}82Cdh9J}fT+cK1Q;H1No4h)3jAmq9vO!=poH-!g1b z>RW-E&02PG_?Z>n_|tQ(>ruDL1t>~8Ys>s9i2Z_NSw)jr^+UZ(Z=MWPNl%>*F^u2q zOp6%R?^SSj9eAZN@g&n<=_sFXN>Px(GC8UoP3X~To0+1Kqy^YgPHeBczmNu|%q+8a zk?91X0&MbgyYu56sT3-ppm%W{AN&(4fS^=;Wm#~8?m~;x@P^f-DFbw(-Ta`Ib{Eg4U)h&72-g~qVxeAw#Jt2^vgwx~b8^{rEs`o&xN@3OsX8h< z)7};?Pf2)HSAS1AEe~3H06>!Ul7D765MQ<8l3D)f@j&B1{YsS~owKq&K9p&y%!{~K zUOGL9AHKm&6x3wRr4*rGQuRh*_Oc3d0Lh-{^BuL9dU%?q#Dt&maGO9&9rOsd@iaO! z1g2>y$rE&sE~KO^w;Q?)1BIF2G+yeK(zvwr3}vmnk+w};Viz{DANPYOkhHqmF@~V( zMPR6hLh}rl7hGf(NZd^#QG+cZj++|H98vMC9km+tm25)0)jFu#?o}0ZN z6-AUBn}9uhC?h+F=k7EJT*mPe*^l9`ntI}(o0gtXX)bUo(e%^Jyu8OdQBe}Ls1jwb zQR>#e@_wZXeSK(wP9gCjptYNf2}j{VhotMW@joCOJVrnmf4 ziL=%~=<}?E_+0*qDP+bE-W-7%Y#Q5=6}7Kj=be_#rIyFAQnXTjND8m}Gp-FZ$2t0Lx0kzqHqa8+>J0&|FW7Jsuj!A%$jJquYMAz-@o^fyXRM0MHMcTs-kc6 zr-s%`M>t8Inat4|iq=%Kk(FZ%*>=F6qOBhuau@U!gX>LLKc8M47(1yX2qCIq6EV!7 z)JRCZ%{oQsk7IyWYLNstSCUN?t?fSha(9W8Y#e_mZWRIyc=7`GUeCG`?5^Bm2BXXMkv%JyUzm#(sxN0_Hxa>jbO ztm*l4GONYk68E2&5Cn1W_P@pBy&Krt4p7(Q3``I_xx(Rr90=2DZE~Q{lui*wA)jh`BM8I#>DEW{}= z9Ca$(3gB5LE2{|lM}*1@*hL^y-#_}OMD@rh3Y7ZTYa_o7N`Hjk z3~JNbtc9rCOBrwyZ6PP<~Wl-2;K&((x=}g&_)8 zh>ZKcH!U3Ai2gRP+eEKS|1$DV<*uXHFN|zYkbfQjj=lKvBXZ{5|iEGWoC^Jb1v1_O0qtwT303439!n&|@E& z%F@BGGCW5^?mN$bv{;x?Y0`>kMOyHbt8mqxhp)UNynRZrYRZ^fGPlQMZwlb%lF4xL zHafS>NeBAh&89d#d0@p6tSjOut(&BOP1}e?ia;hM)d70PLH-S`h6#)qsyGU&4Lg<6 z&0m(&ZKc*}*_97zpAi$+oX#_dZH=d9vF+LtM+KPA3am%Gfvg8AFii_+#^O{VfbnEBAIV^n>o zr<2Z8@6Rhnsf_T>Wy6d_jfd?ULCiVPs}O=|Pi6IV?HJtlM;?RL#Ut4aI05 z3HeA^AJAD^E*#NO!7{UeucUJ_&_BlJ+bZnk%3twRjHKZ~+ObOSeTvEs=(Sl!Zv6Uaby=p@I#nu8>HwUy$CJF4G1^lvM)SwvtM65AL4rh`RY)X2r~3 zA`u9Z8w{d%L+czB8FR(h_+re7kF4O*v1mpA=q1U87&)kx+5@5rz0~(D{h52O0IKV* zvD8}&#vkuJsx+Tlvvgu^!(NtuSucjJJej>(zLhF2X=Ggf(K3$jtGX~X{#=t=d19tW zNOJn7-s*d4i4_wJKBPP{AAb3k$XpzXbA3u)(R$cRJ9!``U@Jza#=#g}!S=)kRQNZP zpWL|5+npoYm5&IIkx09y_gkj7wBd+KFr8y6Tu4AINFrLVw z*>k#=$QV6y+x!Y^yg-*aqEcsbGZU(T{?;@^2EBLTBmrC)3fjR7s9KBScMNCgNMazA zMU_Rc-<&I}^POn;P{8Q(p=w`y5Gpzlo@?#i zbU}6-vW*oqc(orhg~iu*-$w2~Q4`UEYd}Ol+m%rT_R5sEnjxdpdIMb>yv&K9E7eCJ zGWP3Ki?OMczenucGs|t(OtXy2piWP0A*`=1a`gcs2a6}GX=K_R7r;8Rg9&U&E^#9t zFYQ40DaDS$+lj$-c4pr?`#34wL= z&kz%kV@aY#-SU;iW1s(~xVJlEtb>dlqH6_!s&#D=Z1uU+KjJZy?!(1&8j*=4`0qMNp#f>159V_Vsofp$LdgnfkqllHny73K{UkCe z0)}fK0Q$^_&=02qHE!sZ6cp4+jJ+7dkLq^%m9&%;11-xsn$_=_OM#lM!_o6Y z?6wf4M)zbK>x@)jczf&7Wcd6xhj#0H+!7|VMviRkUU9l?4G+@&i|0~*Xi#lOHbO(? zSH|-Vp+t?}$h^%hLz{n90MV^WZaD@EYA%i27+P;IWS`&-t))5?CZ z(y~scYaRrIK9@ITQnH{e{6LG4Ok^XfiC1bp1>Njmoa8FK6?dCeK|EuTvYep=#OcO8 zIQNYkPNOR?L^nDlQ2B$+c-JF$Spkrc@w!t%EUwu&0mFIF;!n)bnXR@T6&KFmEKa=6S(n_;aAVr3h&%xa<{R5X?haTs=kii+}GE@+jqlA6aW z(XjvY!h5H?807rm5@p`k`+^@^MVG|vA{5p&klT2F{9CSqqQVxb$q9VI$Bo1mg~dXH z2rfK=LM+d>I$#)Bp0i1?*uRkZe&rJIblJ4rCS67jmwNfvL7+>ZUuQlB@D(lnSl*eCdMYo(O(DncQ#LJZPT{H6Mu59wpf@0;%a*`#-Yh1-~EeXUTE#IY|r0V{86kgT< z>3-Mp$|^m)dqwl!Yt5>IhA)%3^zP+&?&VolI@>XD7fq^#Q`IzFwj$;i17jA+hC}uX zL40iaK~$0&4*I&*a>_Qbr0f&MAiMROWnT!9{A8G5M-S^gNKN5f3tn?W_STs|zFFGJ zlS-J3W+~k(BokL|(S7O{OKzVATrq@I-nJ{9un+8_K+5Iw@?dL82A8$nabiIZy*IzQ}5*k0Fd-P1?gdwqR^^M{lBp@R@wIH?fP#s$iOf$%T{eoqa9%04w zskqOy*FO9w=3_SAs~|x-TolHhc)g2YrI8T7y%C7@^JRPUDa31k|&Tp;Bm$V zm6t`D_xGC$GVByaL!=cy)b@E{p5>UuXsJP&EL^109>BYCze7~Y)gp|x7V4$!6UxE- zwWY_FOq;*rw$|NUr1w*i%@OOxZB*V(>>rzvh9eE?(wb! zUGNqnvGc>;Ndx=(1&|kYY;-O)R7*}}%({VPdZ(3~tRwoFh`JNTM2G{y*j`qOh9%b% zAqI((pwx(!ME{#&^arT^wPEut_|qG`IXZGiKBq35W2%eo+aHkvH`$(DgDP9Z;)MKi zw;YFDlP6YPeLzz0XT;OIN3Q^-aHqJ>`BK`d5t%9S|B&~VQCWR^*RUWeh)T(YbazQe zhti$WB_Q41AV_z2Hv&qBloA(k(cK{3-Tf}kIsVW6-p_c(c)!1&)Ujoc&E9MMV*ciw zOGd&;`NOjJGlC6X?ff9Sn57zztS;$!3UX_Az^wtWJpKBU70CCJfdkJ{$~RLWd8F>u zv%-lgB*Q?UsR*BRrZ6{(KFaeTZXmhURUOyWiFItsy*<5Z%e5S zyldamr+di3vd(J)|GVjLzi1w^RlRI-O4Q>Scd4vlvC2DbQhy4Ldata|v>r}u8FHNs z1f860>3ZASR0|_C)?`)1`B$sFT$VU9VL0!;4ICRMopN~gRqfNT^InV1f^*LXRGy5y zk=Oftx{a=--uw-I>;gTU)C@tAcNEO*TNpPu*;tzji}+~zM$f*J68wcYSD@lVaW=B>qo3O(#5T#+Y%fx((hQaw z0yzZcS1g-OmA$&1>$P20<79f$dMW~0+<)QR2amVXKT-SZ1rQ}y;t1wBb$~%sZHwuW zG-WrydwVWtJj&oBLM{c5G{=9{yZoEswG0`3oSOH+u1FIXi4}`Pfca)#!gpud+cSHo zF(nnHJ)1dXbh55id)BQe*mtGv5rnYk7+8e<0!P-=BZC^6(OuoX!RT5h)PHgv$G@xm z087|S8KhR_k9fq(xg0TPYAxA>$`+dPJgkSDSWNu`COGXRAvF0tgF{_QU!o9HxGC!CI+7_&80~^p$sNcL+TbY67 zgxU7eglS%YNVTM^HDIYA#~e}QB-aH;yx zBl=5WpizUmhhx&MF71|0x+4!=4#^Dq{^qJT7=6!25R%1?*fyabbd(OcYQ|^EZ&qC8 z?7DhrfoehfTUi1^oDY_gedk1L4p#L(e}AQh<|x9>}YQnKX9*5zwS(; zq{Vn=(rs}3Nkv3m`cY<(KR9mwx0_#VCzkXXKN$RhUj9a$Odn&(WTKBmdE|455a)JD zWq1l0=hMoAVXmkQMhmQgK#ZJ*sS?S>V?yZUf#27`@Z9ZUF`ywq+qL^yDY@~-FSq9l zEfrPDnuw}BBk~;7wT>&N){{_NN`@x-@+A6!(jYu~H1ljc=}A*tISgYOerb|8-DD{+ zl*lgX)?#rPmRD=v1*y4|u9RXZFCKezC7NRYV>7UywOfq^X#Nvs6wzeFgkJ*LGj#C) zfplS)#(|Ngs)LEjt>Z?TJh#9@R9+&zJJX?pDc-FJGwpRSzaU)bXFk*t!plOE3X(QZ zHR56wq4z z!Df>kL~$e^loQVohbq+>{=m}%n5mc4rBbuO=~W$=Aws6T_ZyF8C>fg!#r23ETz59oq@z!eA7(7Wc(pOOX@Mmu!>2nw9x*OFMOSEcCA=R*-Oo(@`+8ZGaQ^e#?FHK8izg zBh$9u^SNSJB|}8&!)FW)tZGNnJ0hk(Ymh@@0O>fGv^5EXVfvm~(fi_a z2^A_Sc}h5~jO6+~Hw7~qOs7UXXy9NO3vT0d#Pf1IFE{H1I1<6*yH%J8hL zQqox=HTZaSfu)jN8{m*;uS!^Ak+jtvt0=QM z?|E&Z!vOo?(uPmCp&O zvVP5-ZQ4EXtA5tD>aX2?ysjui8tD6}m0OCu{D6C#m>YXELBDQ2>kU4e%6g<_LoHLi zibFYhp?KZKl-rC|PU0b=Ias(&6Nb~^>k$S`P-o+-YTOO%r>8*x6M6Pw!ZVeJRwKY5 z%1L8)-Z2VwdfF{5V`Xe=$s(6v9g`K}!uOGjyuAgG+333YtQHgdUm0tnH3y=)>W{yX z)TTWxG1UK&TT@}oTf@q_tax602XmGGUcwqrZ#Gjvx>fzElqHhfMZJNt*4GD@D`nmXlQ7gjnq^dH`Y0f<$ z3uy<*#Bd!=lV#0BOEPS(oKp9#{1zs7x1~mP7Db6ppJbtp*=F}HtFZ&3QCCf3^~z=h zp^671=|H$MP8n%~tZT46wjbq5m@MzaoFN2h}k^n>P9Y4SX zlrX#xyN#vM&5%AJeORLS5ReEH)F+j6?^yOY`2DP@mSqc}wd6%@i&j`ni9=T5!zEcntU`&XAg)sr#k9>>i7tR42)WwPx7P1A7T^Iqgaz`Z& zdR_Ycd|ZpFs0Y@rN8Q2v8Mo=phzDa-yc7v5{aC{2{5Aoqth8wW1>Be68$dx<_KjGy zsa7$ql|scJ0G2NH%?LE#7SJ(#^J^r|KW;F|bqZS90qDy$gH4*?e01%5{aP|#gl?*E zjr1VZQ0ktN3q7l%3k)MO$l0RBe_KZ!Y2V?o; zTnXrd+T6%pPvPzzFlr}gUa_zT&n8h1yLZIe zMY+dnyPzMF4ig>aOSBeU#-39FD71adRYk7d(H^KPryNEZBvtduC6iSrTjLLl?v$6v zPCKD;htQb;kt_2sl`#m*vY?ZfceHA;|CYQyvGNP8p{ za@Y(FUk7Z@g&S-Ld;Zy)o|=sfAZ-D@MW22z)_^#&B6p} z5U;7i;#`6L#|+Rg)ZeF(e$Gx{h)$0hTj;K|hlKFA!H!P`07>d+fyA$LhYs(bQE2}| zBb2!ba40r>Caf>-dme#8iIlO=@mf^?+sjL`aXJCv+izLQ&NqlXy_NTqkhwpb&T zxZ1ED*S!hO6H-kst1-|`ap@zmF(XlmQC%|X85s{Q0RGIhdybqG#6DY1TS`<2R5O)g zAQCf2I?G_hCDX~GU!Af`x}bl&8{I3$k9^iSNUNf7wSq0@qjFsH4M`=aB_)YJPxe%2 zm9AWkWu_#Tr(l<*JQ;~>b?)PmqYG0iU~I5d+o21`(+lTV8HPG49yM35PPvnSl@R(D4A`9MSO?{j}cbH71AXQ)M+^Pw93}u;4-NZmh`IgHFE_?<7y>bm|}My zn2Yh>_6N;ZW!N0Z*emi=GZWxfn3M#L-;JxbnTTt>fEV`>Dg4U~|L@$C%MYMEGSt+= zNZvc(VGNCg#r}f#u94sp0iAut3-4FNnX4l!eII>ZyNt#LaL^|e8HiT1*2IgAD44uK zQ2+3#T>YH^J=QmaFAlQWfLeT)9@{y<($7JffVH@#%6*ONkb4i4o&Q|D@-yDL32>!o zC6UZ7mrK&muNY4?>oFf*gAen>|59^3@-}>U33L_h$liAkB#Zk=JA=PZ$Mpp~-76}x zXhd%Ua_fhd7a;$XOy?s~EMeSBfuysbhQf%b#DF)zcweF{eexjJiP@Nx>iG?{NsFG{ z4l@&G8KY5mv^FjVvo@Xh#pq=K;jXJ5S1&dt)cHS*8UB*XaUYVLzXBNwY9R%9qU2`_ z|HaTSL7Aw;aRCp9ScT>dLg+MrIbaXWOG|(<@ELr4`qCDep)PaAy6t6CCzMTsL44B| zo>U~%I!83ZvACon7?;c5IAOiU^9&q}h2#VV8CTcV=`L%Bnm{(BdEd_P>I42}OY7}} z0*g2RZ;1k!mH{xmvd$o04eEBd+w$6G)sd8lG5r~y^_P)#KfS{&~&+{C5BCO8@nhyum@wndPLxK|%sVSm5`r zw?=#O7cl(C$@1@Q|GV7&*X{m4nuz@Gb@87b`0qC%efTDUdL&V(UBaO7V9-SP$8Tcd z;Zij^Wy@da=l|RR|9Pae2lIh~*w>rB?;i}pD=SIJ{t8xj9~=r$AY5vHZ~H%D?Em|( z8;IaXxw8|+$PjG7(oICh^8QQK-FOEsxs|qeGyc8p|Lu|97d)u`smX=8h$A1Y19wUg zk^b`=zejlx&V2QgiT``s|Ld#a@&P{@PDO!^RPMtr@ve0pYsF$dh7nLZ~NcZ z`~R<{Qk9Z>i>{r~7no6=oQc19S+k$1a77@IdNf!ct*n=GczqIRx^ zdIKo6q{Tnd4TBrgb?13{JfPs0>lq7_{UFPC_JL>fI4juwbIB7X)qD#iM~5V=2wdJ^ z!OKvQ5C2o+w4fQYe^>@e(p3PNV%GkZQA)2?fN}A~h1Y4Zj?1F5BIEd{6+*9@@^$7R zAq<17@;|jLx20Ivz6oQG_W_)ZvA4CcJCq~JeOt$Q+{?lp^seD|iHyHXw;Q9T$LZKz zK)wjftrOqLKG}H|C@XQ$VZN7xXFy+h2)MGlP6OZ;^}?nBc(#EVWSWLa2C37*meq!b z?AivSXd%UF8CQ$$8NeNJD8qRv$Py?4t;X}F+2)z2A9K`L9I~aB{S|y#ek;nieJIQq zFM`LTNF#WLc~1rfl_qZcotl>!nlF~Vd7Q15*3KWbism^1p=V7)QAXO}_&dx;QBJJh zjr#ZD{pJ`L3mcP_LE_s*g&}9}(w=Vq@VYII+0bpiT(b+ncU0A&Xu&iYWy#&+Manp8 zOq`JTlokn9KHA7PJ8iYnEu~^~8xPdk&W(|=ef;cI=)TPD{Du{W>yRV(K4*u74x{px z4<&h%^8Dj4zKjzAZrd4)TFxe8YQ;2T|99%5$x->vso;*z$vroBK=N7l7=@=yHWsKP z|05KYo%wz2f|KNa4QR;A!p4a94_3%&auT`!SRs3YI$)?CoE6hK;9$sO3X=4zoo|i?6W5})>XyUp9+;w%!UW*uJ2=vlo%WGMI_)g< zR@vLmhK2KTbMEiPo@rx8R0+^c8rRp5gryN3ZThmZsgF0gdNSTX#)B*3o}B?ybVO$h zgb@cL5!%_VpW=g)8^_{|RitbLN>il9?yU~jJ!3TMWHBsoE-I|tU?tpA_=u1WPs;*R zr`5hOqQU1N-)MYDGW(nH2FoAPenBQvNu;{%x(_k~u!j=Z{IUx+>!kQ#?1W&Br@bc- zXnD9uepYBtCNDIzSGWW^H(T|s&ky=ou=Zu6N*vlb`RGifz2Ky(nAPp>9x+>@l|efJvyWAw?~hOh1%G8w{#Zw&+S)Q-;= z%1;73_@OBp%Z9W>tb0%7IUC`;2IZogd=ZkLD{_AOHQ0#kN5c z#_*)Enq9Nq+?9rEaSz+;JOFC2UE#{G@Pa?whmm&!!$g(VlgW+EtHP_6JU4tnVfj_7 zt-aCZNf=KC?r$g`8Y>$#qLO$p9K4Pi{h~;UziDyWAJ{tqOD08ZJBnOfURHm^;OB|0 z9Kn|Cl5(B7wl(M`kb83#%8%UW8v|#V_%4z8hZqtDbevkgt4y7E%b;8%sQm?x%yHZ= z$Cxfc`QkpKiN(9tlIH$G;^t7E**ALP1SZ8iFhZ;EFC~nveLVX zJdf->`G%;(w z?%3^Ik1zD6$)@Nz8v*&=90}_gDT6+5f4wiXJY1t-m{CB#Ao3%JK&BHaYF4?^kpL4K zyuf=zL^xt11XomVPZCy{WL9cmIlzn70Yr=6b+dLsu0&DHmkJUkuq^xi^sC%jT@ujf zaPx5kh14^(%W2c%(xu}8k3GA^Zpw^MQQ`^>>v1)smq083`O90-JdeD5KHzCR+bZjI zH3FE_|SF4gh(My95aK*Gdk8nIo%s0En{)GPK*LEZYbDI0l6jB7i|H6M;TG zhd=N+*p)hsUf@H(i#8L1+-%)A%^%)4X`BU?s}h}%#!B<=)&6qO##p8Y z2VDVVi{M(k+Mo_TMiAP?s^m5@#+vwn(6bFpXCcR*0fmzG#1o2bgb==-)#YR|56lx(rLj1w`F(DZQ)w`6Vr6hup}e?@K4Kq zFa}wBL}1s;BsvM2qP7U2;Z|j!<{!1VvG}=}zve#pt^hA49n9;ABiBdeOQJG0Nq(q+ z^g8T(w8(Xl!;{|xp4VUr?I@PJ`OuHio!B$Q^=WhCgUX)pLBapQq=%lgDhnhG?W(J8 zw0*=&{|?MDI@+E;Hj92((3&_~LCz#lP{F&@g0TWhQKj$oug54tv^cYFmpexMxbw&9 z=NF=1_wLVXTRPnH2{UhrJ@LLuPUXFnAg>Lz?uA@7L2=9w!pA!V@K3+oJVm*B0ketv z0%s7#hEJRG=fhno=KL;cC2AFI|p-ea5_UqdCpX!N&dOuv34boxO;5J=IPIPgE}cw-?Y@hOU;= z$*f>P!a22r+@J`tr4_9Dr3Z@vgyEv{L+J|7y6m9pRW2BmGA{@(yF{P!i@LcEeYswE zd4kW_bfU1sPNlI74GS?~;Dt?T82i$x7L@i-lj_`VskDJyMX)SWUr^d6Kx)x~w4CsO zI(qs86**fY=%x?ZT|V69c{;248ush6fK|NHHKfIw_%BV@Y@VT$(VZe0+saSP= z#Q5gCk0+>b2jCRPX8oJ0dGG2gWzfTP1u#?r8Hqn>vLLPS@$K3JpIohR%vE)j*V$& ziOx#+Zda^wRt!L!tO^0v0%aVI1~(G;MyaCsl=~+8s7J+niA8heURrqc9-$*tUMB{< z5mXVQkFS)rb_9^=UpoRjkVKK=7&n9dj@i(fXf{7KUmNUY0~pQ1G^m$xf3N?U+?$Mv zP@yJO-PR2i%8=oogQ=JH;cmDkp0DQa0)cge2g2zAm;yLIru1r?jqpsZf21#faZt+5 zUw?PC-R3Z%g>_AGMSLYR92V&mTAla|Q(Q(z@wH5vk<$7UUvKK!B#g0!%`dNa@)5{0vjCbLbg)vp^p-mh7*f9|CG>&PW6r28w!{s*e1Wok( zWYceDz;vSH@Q%ItFpOg@FGJt+a>%>>X9B43T?TpP=9$iDaY>gbYJYSmWvoD>nhAJ- zAxS<5TYi(M4%}0)=K6>{{PJd?QjG-`IsAEjIi;B;Z`bKlSXAG%+2pH=9w39J1 zKJ_LVgEG;MiA`HCh#a1a9BMII4K@AK;b#~bx|4Y2mQ%~2cQ2vYb3MJ4X|P0UHR6e zfu7Xmk=aV3emD{`UD^A_b)9eqC=7Cky|2hu+%Ic89p$(d5ZXc2mK)P(l6M9(HtEvpn05UU{oj9nTS3$k zHrSWusN{lQBf%^X9fU*FBN^p~4iTA;{Bo{3j;kW+k&@n#9QgQR>0TUUTDU zQSQ5R)^5fOuaL-VqoT}Szq&6VPxy*JD1PTjspe+UUHD1Arl*UoLWjYCWeaCJwnR&n zr@#_DX%|j+z!OdwD(v86@WB9mC)JsJMI6#D+$uz~X|yB5u@`ZU5AUsL)J7ha2d4po z@Z4U*{@zytdmY2HmmS=YSs22S8Cv}=(ETHUZsiKqssMnjn4;<>@*5^yM9OQN3y}NL#BlV zu85cu6XP_uxRK3@hrAmwPgNV6>+XNk2IfS+CuJe0Q*4BiL7zA|YFN%n6h(+a zv2{_S?=|iEl%970;u_{J)CWS?lD~gy)geBc;aiAqD#~Ura>#9H+NRf}@j5$uwP|O_ zQKHp*ifj+j;G^*JC7?rG&OzI^yGkbZ9(9&8O5gojIztd+wE-VoR_5|iJ^c23YnEkC zk3olGRE3Vb;PbbiHoiovY_%1vYIs!0y~MX`)NCF*0CZl}UPhzSz1$ctEnf8CcscL&faO-J zJKj_(e78HWvLgJ*K76rqcXmv(7FOfZ8qnG3C(U+JV1#0hS5|Le$-UHew(vv1xTLsE zS5uk~GKR%AF$IO$Yo_Idm>79RkA$!Eqx3+TwXuefJn%1j@v!l0`gGjqulHTjzBAs> zdyH|Z*M=U1rSg#)rCV%v2a(!2vb}>KP0A4{WP8bAn}`lXVRW+cDo1=n#o6v3*wt`= zI(Vilvr(|8;n(^-W`CH+7n#Mg9JxB*nk)~IN9KmlL-Dngy8!HL=xUF z?pct;Ip?YY~g;8McC2?h>mQ(yFfW`TPNn54e_II%^qSI;KA6xbQ=8dOjrSpqhS1sh&UO(b}?)1 z<@mc7W=p~3PZ|Ab2UK?iZOmIqo|2K5{d)f9QgHS`*(w&@jxT{f9~VTeQNj>gzsxCw zsCXps{?8BWEVT2QU)=&PPQ#hIZJ5)`KIRe`z(u%zXe@i>qwq?AY4wpX)pOZllMqeR z7FA~fpb8W#+0)Hx^|cO^q@jbPD7}qc-x2yQU|eNg7^14#5&SqzFE+NU4(2pjS`t#^^~e zSbQE^;D5G(7+vz6CNujBC&zw%0jaWxJTGMVGhk^y%Lgj?Arj*xB{eYwI&>oUwk{F_ z5InJwG905h1ZcicJ!L{6&ySi=xEDbPA;h^*sSbVP{nYEv`|0xWXNReE(T-cJ4l~He zX(F!KC|~P@)v3SM7>@)GDi!b+hLGCi{UDD}n-!uOP>s~{j^_%*M1-YU5l+ro-l9A3 zRc8kYKfbcua#UYf5;eW+`8`B?b&0p~N^H7{nvQHH9}dxC-ZopO1pe_B7INGuY2ZXn zSsG1`1y5_O@mG^|V~nz1JHX*P3cPXz*z-+Vzbm_X1A+o$~<-4~E zxsjz?=$OO|kuN64^y6Wfl;G7(fcbGm$MF)xhyR?I{U&;iDh*LY_*|n2*7d=rwkInDHxOSOb`Z*?s`zB+U zC7VCdPa&$BaGos`+YQtq&mrIvBn`+>Vz*sfGB0D1u3GG{3VV@|X?n|2sBCBFXY1t&qOsKjk8F{vz+b$vMKGJ(5;3ekKNkVZSr5Opo8}^w9O@KEBqlV!dAXJ< zCx9!eCB!f0rAd}wX_AjieWbFAy-W-XT&RMoTBpGwH*TYZk{A6*dwqpHEU8A9{I!xZ zna#M(+e#L%u#$pvH}JCBOiMst3;&fewgm>$Ch0vIqV$Ow#bzCsDAq{-4OszxcM>79 za`r4~uWdx*L#XV{#_=EK3G zVWb6xkt&ED6dsQ$JFSPG>+?fHdQS(P+&mmW{WoT}0%f9r-4+WPmvHm1vp94*RC!c+ zf9l17yZw$ey{Y9mMb3BC`^!Ympy14zzi&_UC%=?Kc;C`DCs4ngJc9>#hA1C({9nkz z_ZK4ZC*OLstDDFHR{>IRVlqs%S5z*yp#5F?%nE&oz!=Ycay_#ggId=+iQszgNtVTg?f#F8o->DUv z_Ep%Q-;rjZpJ(R;HVKD)#I{(lax^#$eG>J}7h2VK5YkvhZ`aRhbfXFOx1E~yasN@I z-*(j~@;&&W&vIxcMB8Z(B#$70MYDs02<_(Rv+~Lovgk{7^ zBh#f+tts~94u%=!7+~!%1x%kxl$__`b?3^lFi3_;Ew4Ay(#u<%rBdYMlp3F^;qecs zEKZF*QJQ#7*@Q> z)#}%)j9#1!!vdaCK_L)F*FO4A6Aq=G!1HHWa6V>9egymDdupiqJQLK>0e&+(>UpKd zzEDUW)G+-CPCM=)?UjW$!ynmF}-1kG27e(1(8ep1B46dQUE zQ`5_Vg1(!v`ik;)sK5##f;P~{haRF@twt~GE~y&rBq@rNc-0(Y+vM*rM})DkwS3M2 zu;{|GmHd~{k3R>*c0p@@qwyrkDu^`2hN-3W$?{}Hg*l}cu6EyVa^Gw1fwGM?v|?em zzjC{(bAHQ$tN&C#yb3R&qiM`8{83)-1t0Y0eg0CHoiE!Ao9Sx%5C#shdN1pURFw5^ z!xtqv*xvrEg8o#vwCc0wuZDWHEOqpCCz3K$8*j#1sY6JY?d`EgQ?g%5p4`@WdviWo zhQlbPT*1FBTz$Du?8tIIR?UVYE6Ha!iJ`?jt3$9S!hzJhiN|U+a`tL zOB?RVO3ozD#Gj&WpIa#e0~1t>YRkQwdg?2pUZB5R7FvQeD5Y#iMzGdb}gW) ztp@uQKHN`ujA@T)uUw2PF8&4a86~!FvZ)+He7s@>Geukyf0STimKjkj1D0fyb033p z`l5<*Hi`@rb^S#UBjtxsh{nH9^`tT{b>bB<xu5yxkQ(Re?7FlJvfCg*?0*GNGu5OkZK*5JE|P_oy3|C+1r4 zG1R8Xt4=J;`3sk+G-5GSP(Qa}k@Q0&(J<`a3=TR*@|>qV`!o_lvPW67ZcAk@R8ah{`W}qswX$ zKZRHg4RPO>RXn(Rw(HQrV?&wU%4&o=5aXzw^*kNgL_+HQ9 zD(v;s`q#M$sp`gwgMZBny{E0&;d93+PKcuP6`RBsMix8*X}aFMA+!3*GE94TXu&8% z4mpe@Va{g!vDsSeXQBUQnh`?Zea+mB@3vOcsruTW^0ChoBIrsfLbmrX%^@A5ejaKcbbQ?gs^hILMJRY^Ckg1zan|IlQ*lMV? zoE|UlY}Y6+B=eN;i1DX`o(lh@icpiV1ZFD*a?Z@CHf3Rz%^qUQ%BN12ZabaS4(pU@ zZ?3`X45c%$bL7|7|H|kQ7=;0W`;( z{+%n(m@Y;9*JL7yaYgeqNF;Y9!{NDi?zr}+%%co%w37nNq+?(+}re&alUE-?hkRI0Z@mu>46hoLx6RLHh z6MG)Zk(?vgHDni=Kg*HttV%fjQb2#NuHQLk&>YXwvRGTR0@NH3rDeK* z)f@~DHHYOqmEk`%$9oi_!D3$#l$R3xbhvrSa=l^FcXmi&!p~h|-3@PhWd|*etQIUC z4ZJ(U;f`0rN%Cwet({ej{f7{t$GEF!R+m{b+$cBi)BP#$KF8_T320!1>Z zD+1fyV7!}#zhRK~CRpVZkx;mE#Limv*$}ZstA?uuc-y(N%;(|mZLb?0+Sa=S!^wmi z-=Qk*LFi|NI^W%|E^T1mHovSLaEm66PcF~?gB8@PRY~jnbQ-rEN-C`E)aygD*GTB8 zK{&t*&*XarC3I*Iv+c3LQ66Jnx^;*d6r1TCDpBf)s8--tn&xVGzej(ru4)(t)4(xM z^r@~Ep<+MRyvAV0OmWE z^p>Aq&uy7H5Y^%jm_*FrySWPJtF^@DH>5GeR3jVQ2HY!yE$^=z6Rxt;)Uq}%U+KQx zEzhS(y5~xg*ktvrlS^N=?RWFcj_EN5on2C%Bke?U|1=9O>D#BiL>AF8Y*tL&0Y-Lw ztqjv-Q7rsS0;J3Dy{^7=EQA-G_{zAg|0un};U_q{gY8XecCCHLopY&KRRLT5s-@yE zEbOs6rzNFDE=mQG9V29`>6Cpw=^`wa)8=G_Cq+=zWvT0P<&EKK;s{#e*My)x`D8R4 zyDOaL1QvekV54FV*PilET%I=6n$G%V z)9g6zvmZ0#*lIASeCSJYMm>YkwS(gUelLAKbo@Fm2#de)y?I2Ry=&FfKF7)y+L*M-FKw!;K(m<||4 zvGhIbUr}b2_umY{?yWbrO9;G0qhzq68^$;rmd2NiU7|Hak&1)U8EXg14p|pIeCw@T zaOAx3D(1N2`)y@?nx&eO7F}ksBUcc*vcWkWlq37>d_3UlGP#}2hAvw{LRCX)6qJRZ?cZ!evW60tnf+?f_J+^X|A@1yz4@h% zZz3dTPbwV3&hw+PF!cJPIyIV&EN4#mhg=q9MaZj$Y;lYwCx`WT{Ufy1t5|Bq9gHCw zc!+kHIXu&ITDWx0q>vUgoF-dVB@#C?&F1EJB7bsf&S^keBnOb)=<8>$D5U3w+A5<2EfNLRavC90k|V9`|$ma?sWX9~F@r&|!9F7^Cm&cRyg_UB*)9dT=KQWgSqi zx^y~~pd|^*SP=*3*$x*)Bs5E_ z(i(S~WGB8K%umiUc1za??`zR2jz_Z_80$ixD;q@23iRvwCeTEyxbd$-U?_a*WTD1S zpLU_~cqNu3`YR>RGzk!HyWzGu_e2!odS3J8>`h{Thhsv}JotqZiFM_1MZ8sw|E$Xm zDtuC|uoWww~u!F}H z3%$VLXFXta^3+=?CfOeK4fE@InB(<72}X=Ky9GyF0>X^CgjmJf8_X9doGXzRg>x>B zV`qsGYMe4XMIC)d9W7Rr79u>A2T2PDorza*D%vJhL+Ozj7^0-Cu3BHiay-;~hcV;3 zHj!cNP=L{dU6jsD{GoL6^wD7~UD{x8inS1{u77ik3yTWcj0!IKs*!f&FmW^11S%vD zAC?kW&IU}jUufVOU2?|s+4bq+?!p;Viv27?roAG#c$+|Esj72Mwvt^hCjX`{-Q_kJ zZS7XRM%dt80lxV1pP2(044m7#pT@I04tRGS;S3bg6V~WB#r-I^lMCCP?z5$y_5wOa zKi{_2{#yQtZm08fhn=Z}q)es&CXh`LI?B%dNbs-Kams^v!24*kvM~+jNFJ$_Y z{U`KaSJU4$ZGvc^9~^L+HAlo+!}9%jHO{t2{8eQ4kO^~y0Y-5~TmI&^V>hyEL8u`* zzoyqUfgtRI)>RSmND!(jQ?Ye{54`1Dduf0f{#F(V$&OQdk zex9=VTw8@X*&Sb4H9ehD290+&)y+yV<$g_|X&`t{nukPRTH=Z0#&nXQd~7n!6gc3bP$nbCTCqN~*OV|e_MOEqqAqZ3Xw?rZzbYLqB}393bj z$Ju^;Emy)>Wf8ZhhK7#Q&So3TB7(XWP@b%K^ycXH(HS6{ljft}RU6cm<4aPH@fX5V zTDW#?8uVrP<0-XEbLSpv{FX&|EK$j?XgIt!-SZAxrpt*H<&T#ox_V9UraQ{PJiRt_ z(w_(FL>JFI@i6Yqu69IxVct)2dlJ$cVy-0i_3$pWp4kL(V*{?Am_7Eukq1Ea?el=km!*EbH4Ferp159Ve2c~i(uDp5(L)$Y}+ zsEKRAW?lRDW@Reha5Gn|>wr_Z`2CC!&+E#@;X4Dgb#?mRy*xYU<(2PxPAJai>l5M8 zB0n6%@K|34!%aKxB$$6eRB6nv3PUucSgZ7f!kY2IH;K4Q7w%;)wg4agE0a)+%z_Rd z`pXtz`VKWxT2}9v6FUtcVO8$NuSbKw^#eoU+c=%zhY9h&Yx=jnh$l2zLx{vX&TXcc z&sp0EO-$sHhMNP4)|}S!5a1PAb3UbV*knJ!`f6_S=I_ z6bSWZ>PV}G#^_3(3JE5c3_-FFjh2vPs=@8&iTYiCQS3x@jjFkOguP{H?J~)lor?;Z zsG`b?kK~Qa?CFWWY&583h<}xriE^3C58tH3;d$+pG%cHsqlCbUos3q0_C|*}ZSNOT zjUM_&{Ph9|40V1o6)kMdScL@G7lQ69n7OFf91JMBA6{<9YTw9zSP6^z(uCVmxDz)t zFI{=9EFpBG&@b0MPF%biug`r{5}Ih1n_-W}@ytu3@C}kc&HzS9wsi@9BC!bkv1RZc zrz3I&e7tnX5yj~;mNX18OoZo4u82m=^TSlYFNxe=jYVr^YZV*PL)(`w+7J46hgc9B z=}%~Nn>WSu`Cs`vC;%413iF{TtA5b)JO<^tV7ke8zo9J`hH&j69ifAR&xRVm z4smf{5K`DuO641Q2t>lUq-+v?gztI>L!4=i@827no^&m}xZ1)2Dp2!j5-B<$LbCFj z=2rJrR+JxlWsUOa!lkR$_{11?+e$cZPg&6nfd1D^xbWfYU z2$PWEnV`SD`S~Ids~)+Zi(2tvr4=ccw|*L!W?(bfqOKUy#pz`w8$~7=_avD;Fybzr z?8xNyO{1;h^&S(AOg^RS(P&ufmkk{hO13Q`!S4W5ZWj;t!!?4aOh7QxOM z($Mgi>X@BF7OhkK5osT4=$fxh&U#e=t`~vSYO!suJ;tE+E#>E1=-1H^V9HM;7tokF z@R`MtU5v5@?osw}Li0&pzW(s6V|#(0n=F^m{W^P1zU9b5sXd4Gee5`S>rv;xzc*>; zkGV_nVn<)A)n1g{NliMQ<%JN+qAO3@+V3vzoBTXB>HF##txbgYj^D!3EsL3bQkc6p zS=9R~Lz<*e{In*_GO${;*CfgO2 zzV!~w;7^nz!Sz&cm<+8?J{?#7Y(D*(tv306pcFg9GYI z`w>FYIAmTO#%Nax{5~czKp6-@Am?s?kNS!5?&cHbO9O`Jd{RF1qXCUf8WLZ&!|9_q z9WtpnwnzaYXp$fGkDDVKpGRL?YrmJh|0Q$bNC#26&8LUAZ6|ro?+679<11aja3erR zFv-`(rk>!g14PNz!%jj%!fFy$b+xZ2NFS)kWv;AmJusg{Mad(k9JP}a22sMfJ)uTG zteiC*f7FYjLZ^|{D;kVQz~i-BJ%Pimx2?|C=7mYF_o|z+77rILv+(6%@LKF(;@1}X zHxaB^QSJu_nOv8~E`o1Lr^{)O7wCSKi}?+r3_eS|I1A_?C?QN%g*^U~T{R`-u=Y7fZZP6l&0r{Z%K^*^3_fs*?=MPO&Z?|1 zwMuUezAL%y+-hJmk{-F$D((G6(2Vc}^eLhLsg?<*obxfr=#W{O^c>>-1lp}2%eA%5 zE6amOc-x`C7dX%&6z~MxcmYlC>D#=Avw^mkpwGKxA2>|Q&Rbx=t`)O|ug?_aaU2NS zu2Xut|LJ7+-7Nj{`n0@`se99`*Q(g8;dqB@x17=^@7T1Zz9(T>`H;~qBCi&Z0qC0< zrr&?|#lmwI(3in;3mO!2wY|bw$WTejc!Ql|>@I^hsQdP*;De0BxSIRUc|AkzZrO;- zanIoaR+=to*_!09EoB)F)7>uBXYv2=4Ucno=CrE+>SSeBqrucODMa8?=MwMny=4$3 zwGT%8|HIx}hE=t$ZNq|q6Oitllr&OGNOuZ?0uzxI1f`KKfk{YALO>cx10*B`=|+%{ z5~RCRI=*|Xy_fF&9D6_C`{Vuj{#)x%2E#G#aoyK_UT5sYFwHvKiN&@}RF>MT{s4ad z+HAS?`O6MA-+71YOVBr47wN?J=AP2j3=Xv(6_2N7ls#2CN+^HgQm|E$xhGtId^h50 za?zxj8QZ=~-InU!F#NsRPE(y*E!Z;zh=+#TArjKzz&` zp4ynv+xANC3zshCLI@-0V9n#@_)z-Z;IgLc>}RF0=o(u(q4fzz{risg_9=tpb*lOw zw+2-ev!ouUasUFc$#X^q*}3H|&0KJD{wGgjnGao2eA%J+M`IFMa@_T{%{#6?7+35R zi_|S;%s{#rHqi3j{mJ9g#qsvmZ0ya^npm?^?5#w_0Fp#TLfy)X>;W-lHRbicWnboIlQ>TI<}P3 z-*`-OOvjIw&e~Gk)FtSESi4rmPE_d9_2WauZV5dDM1h>uJ_hayjNGPxV8_&Lw@%e> z8Jo}r7U}Ds7=(gmvcq0=)--0y;l}R2tU;9YKcM<~vV<;;Dad7JQ(fp_F^+9angrFp&AAAj1j6#_Fu1{#Y4o6ev{ZvJj zylL4k4UFDd(Q&I z&#(Uqab!zzT`r|)vSM|D#OjI0Heiume-K0CMRaCV&w(lsu z3+A$z{6wUEkoy82(kwkKs16V4PM0cNhV3fVtk&~xMu=q5m=<1%>F-Uu6QgNidUVIm zP9%@YP=)g|7|`L@fBg73{aXLEHGiF)F#Kz3$3him5!doUE9pDzr3$|dwGyIKYW7}n zZYTphE`w5@Mvju!_#17!Z=zGkb5-Lfj*q=vfzbB$KA9BlXf&20Yl70*<^#GL1)LTv zZ+jWmQ$2((wBHjeP2J4e6XvR04sS^0=k=Tgj3nni@zL$x8@Gr@K6s)aU_OydexP)& zfilsB^1FYo-8lg3oPSmd7B<(@)qj)F9)#DQFZx{qz@7fSEZ6rSmrwtD5jvN(V)@}p z3p>m>Uw^{v5$Z+WcCRq$4YDyHnPD zKDqrT?w=YOn^3Pof|~@f=RFNZ^)ukjaM0j<%Bo8%3_=UHK04YbqYi4J1OA1`4z{OS22hOkjq83ltUo5ijn6Ij&}MuzN>SfQ+(@#-EP;qUDOFezI!1} zPkkrFvtgDt2fNg$(;3;y$gP}+(4Vc;90#0hiuhIWx2gV`fE%JA%4&bllWKBW1e{qh zxs@4$v3pC>=W}mfY!FgAcfqV>Wul^$a>75YMSTxo37sAM3XCl2D5%|oy$VP(8_IWk z_p)5^v##TkvX+H&4>L?F)2cf>kvBCUolh%&kN8#YT5lyIS{dPvjyJ{ZL)(d5AmX~p z{!z=w>+|`+_*~NqiR`-!K8llXyx&;aD{g)mqo1Eu{&~j#`795=|E4$~C=qE6JR_HO z-)c2znfDlTb+7z!EM8MaXoO$~i z$J7|!?6m`%!eS={+LFPUkLpVabFN)5M+GNXB%!Y>eeqKpYbM$*$$$m*0(d!>sIB46 z%$VnW7c$i9LHq%~CKTqBe~xE43{}SpLR12u8r2`!=TB(o+dV8+R7>9Nj{6lo6-ytd zuLP7%IV+ZlG)lptzo?+cg0x7*x_DH~#_1#5?zo3Kn-~!E_t~O_H&r0rVh-O&Lf2iL z68B+EdnxE%xFtx8`V&Kzl*4?$(2rNoK7@2OF>R+l@;hY+9E2Ag+%XdCAGwZG+)7ZK z$J>+iWW+YA)`gn}epJGsWt%|36FcDE(^N@h=v9Ii=~y^KHR&PCT));|Wo@sqB zdeOP3XGw$LpHt?N#-iq;M$v{PRq*QAbz*zvAl^6lyOjDD-@$Z8+qZN(GY(rkawl#! zo4Y=SDEtt9R!=gTXWAo#G@9dw;+Z9Mh7mz}ZvUipisoYO>T$*iulZRMRF0a32fs?K z4u0ZiBUs;mKfAf)Y?^A;rFvtqKUE<1`xC+?sGK;>D*H4m2llLW<|kPuTSwPffkX?` zaM^LN%0HP#{j*O;9w^!M{@BLm7-o6mi<$zU|Irc)#rMVmd*`Uh&q?#d)Jj=Wq?sl9 z8mno9%bH-?zuxP8zaR+WdH#j;naVQg+`In$iJFvoJG_|rb*m~byDefr7}AK@fLc{gW*kMkP0)i73kr!CidQ7_3i$hkFMpgcQ`p z8o{}_4?^LOxk&Fz7FGpfsGJnv(q&5Y_uG zLnPFldYV@1&BasJ^lzRs_Kx0N#pE(UYEI@TWlpn|!vc&+)43P#J?Xq;(thm|$j7Rg zPD?T7ea^x3(uu{CNWZ1&Q$E}94~_Gz?R%4%((+c%iuo2=yUf#^u9qZKT&rg-(_}wj zymKGF!|Q%tQcCqv_Lq>oY4!|45Td=G%b3q%Ac2l9E_$^BsYaRdX4 znBm%Gk(Ox#_02rKVI766gw(fIDEBwNfLcE4t9?bn_nmc%y72h@!SHo5L;-tx1tzm8EV&orn?B>Cv}`rA#w>jjvsK}3iC1LCIOy|<3# zu2D-pZ5N`pX+6#x53X}%dw*U03`8d`XLhP@8Y5rZtu>uh2Cq#TT*;gKR=usa;kCL!W#Tr|}bYY=O&*kI6mXGHM`bqV)`T;MAoo=7~xb$#Yy3u4djJ+K1P_(|CA*VB^InN0$yBAk{Lg8CFe z4Dpk0P`!Wr_pyr*eL|+;RZjI@&Kqh+VmWcB0KycPK!EOHa{BvMQ% z-47@F4QQ=m7FRz#Ey@dVmyLZx`-$QHLLwoGz;c9tfijoVLuf2VLsYRJ3+?&>g#|^c z{g8Q?^EOtdX-GF4Q#u&$#QvRHUBcq{704BWn3dNWb>E{W;E~Y7S#~=||h7Z~a zYb~v?TZ%SKSyzz;p})Xh-y7X}mQ}3(F0Y5uaV>=pU?aj9j zXgB%q)6v$%zt(B8P?vf1v8b&Hj+;e;AH5VVB#0-B%E^RxbpU%u`r_%XD)imV8U2K7 zW!GF5+0y%9$2jT?BQb8>Xr7L=azBI3)9+FRCqlX1mMipKyYH4o&99D`Zx`M%W=@@n zFxUE$FaCAq8GtQxX74Wsmr&V~F5s#q=?F2$2Ms;z%}3>bcTc&U|H1q+#;X0hNYujA z=Zy{r^R_SH)xkGrvhK=Qds{78!JVJ;TO(>uQtBwuaH>hi0OuI@ecCHyZR@v%Ng9}D z$@*RD&G61CQ6H=wx=jxu&#U|R^O(+_``2__kUHBN$n@-S$AVZCr=3%q%SF{m9L#Vb z#bx5Uo1X}^%eD*uYcEE=F`y)NEL(Ut!2BDkdrs=#4|Y;^KAZwujC*(1fzsDecqfdj zkTPo0O6(pc14b|vTKt?T)|U{e*ThzyA|IORZx`K@0+Fb9oV*>_h-c>FA1bWNAK}Qs zNEsW5c7agb5Det7VxQBamA9w0KWC9csyFkaV8a*180^-OS8@op1G@b&Z!{N|_paX5 zmNj?DaN@u~HdrY(M3s11uS+HK>y06=z)ao~;%>ue@J1b2sJviDLI_V(<8c)J23+_n4Hw2Qr;CZQ616yl!Tpm_he-~h4+ip&=@k7}-cNxAyOF1z$Wg0>^yECou ze*UPn$a{e+9+kzrTlA!d=$_Y4+6*I~ul*ggF^^dG8L!bjzxU`3uV>K{d*&B9ZGc~H zK}ajMQFedSWcuBvT_`MaLR!ZZ$Nxh94ZQ8*{AGa|4@NLkL*6zdzF7|UXQRbDFE8@p z=>~=>L0i8Z_L&(Z+WW-Yv_*BN?m`*cFIrnP=zrOoMm_gqm(5;47Rs9JGeBTir&_N3 zA219ZtRz>oL4NXiNI_l*@`fQPd@!&FW-Y$&2=wxi!(l>WR@ueV0k|lB`M96H@?iDA zoo(Icydj;rt4|S-Hk+RR8i7wn9Zrvo{_+LnN%?0)WqZ>Cc0a4q!&V?!xK*neFcQIm zWX0x>yf_2G)Qy=NWZQtM{&X8CX4^}8LF5(9N3Ei=0aeq;+r!IiWxqVPF*2V;R~(iKh=^ar3FoOmjDk7nts=Vn zxu#ZTxl5E`ogmtnG#wCIl=lrGH9ZoWq*~T;{wwnYJgiUT*5xmG*uEGIC z#-Dv#mVpL*Go_iYlo+efahJl}u18>8$vf<*p%P!`;LGA(SN>SX(8|mEaljuWZyi2p8S(iMIsXPzyGc$ z8uY<4QjlKzKYbf~q~Iq)%(B>I-%LT*n{vLlL-G51)zHlw2I=|#x#Pco)qi{!Fn=5H z3c7(K!(|f2D)PFCuWlU)O1UMM(l<(tR${0i?zv+0xyaz5p|={yhjdW>rtT$NPrf zVdAC0?rb=3FbHA4m1ha+3JgR>8E(W)0I$>;5Vru^`zB_8G}XA0?n7oF!#hXMvm&00Ypc8f1}iLGbeBKgUu**_ zY#iWI^OQCP{A&Q`OCxUv>K2-%gzmw$K}%3{C_{T|M7h)LNyF^ zK&yMw#svLW>m$A7-yffU7xai7FV7DNpvdqhRj!Yub=yI_4>Xie%^xeqI6Y4xmkn%Q zQPb*Nizr{p-3tW~OguWb%SwlV? zf0?BeZ#UtF0C$8B6_)}8_JD~F2bKNE^XzD+yfdNxY=M_q--=}n`RSI++%cf=5i{)j ztlrPSiPje5Nn>YDL*1t~l4{|PbbjmS_CYF#R_oAp%EygpSu9OO#hpOv%t2(mxHYn7p(gN?8H=De@UodOLnj*X#HOIl%n8IuV=ymTj9Dl zh^D23{3#MJv9y=LDj}UP^gI7$x;x)#%F>}mZqGEpAv*^Qk|=?N!^gx5@MZ(eg1I%0+*mvPxSE4Ev{o6Z^GE%!Pi6m(0(7tdWY3=~Bk9#o9mg?Hw9JKA^} zuIR|l0jdJs#ZkLdn~>?}g@pW+f;z`3Tii%+_Y+v9@Yzw@>)uBj`yutG6I)Gw7ke4S zz%>4`zRjw?ARcTV;zlpo2df!kMzv_UZ#vj;;)BsvT$G{Vg~ieXp4 zjhkydQkpBZBcWDew#=5e3*c!bF`?R2Nw67-x{(V1=gr7O1Uj>b+#41~Hf)2$$W&Mg;kciN!5wJ}c_BHy$Yup)VEt$v zxZ=@2wy*^Om|?vo8i&A&EI7rkn#1I?&EH-~qrkAQ37`+c?Bb`5j-gT@+q)TP>}hz$ zcf7%`!3TYzD*~*~9{rhkW@(kL!2X5&;^MHrJ=+HwIPjS^A&bF;I~bfUB~MO&^!kzm zYlb@aOW@TMw3Oi|ISI;GQ(%*!V=Gy+B8}~><)lk~S`7Sx7w6j{QV}~h(&1;**P6j` zlO7n-S2%#NYs+#R5j9jvLTK#2@Sh#``r%KX_!D?DaG&=_1#9{(3I^_eecQRY7CW?A ze|gd1STo-U&JmQBz_k>Cg2p}D;QpopB1c?z?B7OQ4^yV_z4r}TAwsgg%b6jw5>WU& zZR8Tv^Sw|WK&84(ddv{`9m$E4Q_Vh(feiL`5c`LaA1h+nU&D}bRNvX#R4%S^?3o(7f2wEs2qUpL|*YvdWgq|rR7+DSPGbPaZ02Iov% zh>AW6c8=^Ir7j_tgLm1er&UXNc4NMmr&A$NW6XcOPKHWRazB$G=&Ah?8fP4 zjs0BZ1c<{UoB1ZTRhF@H2UxEnp;os~@O0)Y%$DuK9(W!?O|;Ti6rd^Fi~=*mCeTek zGol^=LG|@BO}M-f9;za7Tw@PlrBkPqhgmg-z~Ur2UJTV=2M#l4zL&szDiXt>z${jh zD@0+6iEmb+Ht%lG^Dj^#22Sac4(dF=QUxF<^p>pvF+0(`l&T4z!wFMx0=Qm=2F;^@ z&52+W@VB5D-;=`^eXLv)4KT)bg{z5Yc5lS%L0u~0&PLJ-+dV>n7}lnC$%7Kg`hEBg zrdk)JEzU{`u#B12+K%HN8++h1r+g#@vaQU;@UgtZt1E^dK5MPxIM=YF`t6?cU8A~$ zL7m3`o?AzLZo)&(^G9cf!YFG7my>4TZzC$Ls$l`awiW_D=@)q*HlU4hUTO||*Q*&% z_&Qh77pFup5zBfFa*-tyUXtk|7`@Nt;F^Ii>t7y%xh>JVQecs_ggf!T!)lKGWD&gk zqCVU??w^dtXR{RM=hNvzA$L@hax&T<-mpj%ko6qcp_rrDW}cX9k0Jo0c@_0NhygI+ zJ4Z7W>XLBa@4B3Q_1rfpv=0#+k^W!0Msw&`+ODd>l?INx;J>u(xIX?aMbfqyCqaGg z!&me-chO|=J{>QngxFU6$cq^UhD^7JUxLGGIV0{qcQ+iws`PIF>&Nd5xVsIoNOg>G zhZm#n;Df+a)-__7l+g%ybB~3)OAhHVQZspb{`UM=NSf8*>~#hES}e})P?2xBj8)m8 z!bsM0FJS9JJ83+0N@3*Am^T7@Jqee`g0U;BT6r(T>otK5ktRZY>D-avqMg=RokcEp zYu%0R(-?FvcL1qA$s;m)p<>1tyRWasJQ!=NPZJPeH#0oh0Y0L7cOFukQRWo8V(gBB zGDZ`~KoCaCOE|}_MCd7=*}rP_<523jQ!^NRaG%y)yp7&QKvcDv{qLG^;z`g0+zItw zqLZf2mUv;4go6}UmQsL>=Tme#p z=UCAvi+g)a&kH*##?xRv{f_Mhh8+W0vh-6frdMNLu=Y3wSc;MN@oq1kS2~zS<#3(^ zaB9cZr3#?4p01Z_vZ#{#ygq3QG+B%z#M%4UDBcRQ2CvBzmsC zzg+5=c-gny(D#RI`fp7kA1e|2Kz@`8L!1>OUl_D0ky_-%GW~AapVRv@F&Qt_YfH$J z*Xv^#Tj$0%QGmAa3K0_1rGS=EL20%^&5Gqw0jufIb%8!m|7eQ8g-E}9@x^2pG`m57 z$IBJ#gm^LKv6Pl=p&W{Z;1g`3?Y*xSi9j?n5ut0na42~wPj8ZjgB$V>yOB_ZJ73`) z_z0xDcDNP-)!c+g8f0{c3+i7NC8rdPrDF6O2Fv6{c{xZ4;gFW*SHX^C%kXw8n{M;s z)-|2LUW-Hcoq%!(SGfr)s5(nOf^uajltR~N;P8MZUwi8Ko7=3WvZok6!aR^NNI`fO zEeW5?E&2yAp-f)BNpb1g71~-kt_Kr{c2O^GQlJV}UsI81S1HCCLA~HXD&&O1kgZa6 zQPLQ}A{OW?QBw%Vz%w~fzr~~{O~A31jDeUbo$~R;S@~0{MgkUt<{;OOg75?)YU>PT z66+j^1}EzIR;cQgoCR`dD_Rx25>nP4FL4*4lO zLA1;lab^-}BBF9pX1S3E{i{MPAHm{h3;rrqFrZHp6fY5qXu;+R97fF*h62f%8dXa& zbHX)au$RkhG%88%#>mJ&8hAW^b3px4W?a<^LuLRd=adcbS56G3PIRBEigSb`#>ynG z;ARiAPQSAQH@+hDH76xFegv3=4m~^}Eg&{e+v`_? zN9wYEE!bOZ*;zBb^bAC*ilK&-oBU0lw1_Jwi3{%_71MRVL=2d#DAQPHs>e|1W-OD` zW(l#O4)AJ*R|u@XGQLfbUX}|R<9BW*lidMo5GuHq<;n;nzL_;ucqszV`N%g~Ax7zP zy1j|**jET;RHU-F&JVnXk4MTktzV6b$Q+wRpdT2q+tUuAye%74ck@#0#@z4z+zxSh z)OK@Fv>@`Ngy7difjaPLkXOGLWii_z)Gb~K`7!#UFV8fxTv^_VTUMd>Kc9X5OOP){ zUPb0U2c_EN7C4H}S$#9iz5Bb>w4y;{?k=ah7lOWxRP2x;G-m)EjPF||>fJA3$Su!; z3J)4JLqEnNrbYMYLZ#FKr{FAubn`}gVBkDc!Du-|U>3nPD2+ZHszbgjYDAPpYWGDN z5kMRLkf9k5gYJxQgh|avGIhTW-=F!{_-ZAaRL;C6Y7G#=&6r`DR!9&6d=yr&uAjQ| z$WkH9O{e2&bQXivz2R`~LYY2+EFAgvtht)CY0z~m_bOupQtw6Az?9t=22M$EB<*K{ z%M0;Z`oy2Sz?8L5ixB719+Y0ql6aAN^>gsiYn6Bb?fH?{;R3SRm2a-0(U^V2CdXkk zVN_TsOe>SIK|Tn|X=ykrZj~y13M3Ap3%AGgNsPC?yHbU_M$0mi%g*kRpTB!D9p=69 z%s3oF0{4~qnss2UmzNtbqr4Ux1k<(a38QJ3lk1jei1Bz4k7v1)oLPRaY5wBu+gs}%^w@gd);1KB&5mMY>0!bR zA{1r}JLPYu_gW_sR?W#VoW0UdfG%u)wadIlmJ0dUU~uu_c!MxQ+{xVf*D>y&55)lc zY7Yz5rwGVacX4u()^zj?$(nC?BX`e1MZa|;jQU{u7U-FmH8213vO;6zOCV$)comhq z|JTBTjsaHPI=L#p7uGT*I`_T9Sjx

0yR99$%h*XnpA&pK`~GX@V@Y=dn0DvGtnAFKN^PqFTaM3tTKOsm z9enS-#0?1y=Eq2xF9?cw#EE|^WZu_&$xft zNoVRhYJaCw=;ixl2=XW-);x3FQ#I4A_Z)tx0H{816m{s$#FYK=Z_O8ce%p1!8wdct;brq0{iT(KBssvnNlbY$EPS&_Bk$`h@eT=xOM;rlk zg9Q(ek_%WzJnYf7ksTszQFkaISpm;!xEJH^VL)HJ^pm=a&Vn!ZfpjT_Zq0V&VZS3 zb-la-whO#(H%nz(-R*XWKNa|JG?#K#D$PLErY!(_iYXBa>waQx`b5sjr_!= zTMkJs*?Pt=peRp7#^zzOozq<}YVewf%Z)TF;wrQt z=|Hjl_X-%|4^6Ujy(^Nb!A&I1g}DBrCJ?GQ*)maXLwMt3jqSm&NVjEp6VZX z4e^6f>jh`LC5FX37u>FRN&A+4uQ!Vzz8?O@H_up#AjLxg=`H^Gw@FL4N_Q59T#A@X zYsuFTCme_<_Dac5zmk`!J>+{Nbmy+N5#;j1n_^XKEw1+^XS2&%!Pjs*( z#LtO_wl9()Dm&}mWt0Xi<}A>qcP9W(IZr#G#Y%n8hzjhmpX;;XY3#l7 zw3bDNm>PI|FZC;NBgAiRPUo#jxzh~q*l6Ye8R$s|9}xJEH7$mazMEu zU<}f-0}AN(6A?iq>Ct4f6;AEYx)Po?>+%AeqWvLCs61&)t%y7zV^&Ao1+D4^tVHo)PYrIc{PvDTVP zS(8c)U15ji4$YN{N!>ixbhThcJujuX4BVX7#&3MRCA%>+tV*F_mBMI!?{sZCf^|-1 zMIWhRil?d(lqd(R2z2JJNuJX?)~^ek*TB?NbnRd2C{LBX2x7Mmj@`IuDzvq4cbGN8WkC@-!*ukn_V)Fd>Aw67yUy!M@(YoqQ=)>=++i#= ztYJh*wM2lfLXobtEdR}j4UAoH&hSj zPJES5Q^8h#-()_cf~YXb@T`B@hCDsmPB=+bj$%IYFnvsX#DD1HpU39L{p}}I^NXGe zFWCrR4x0!?R1lD)c0gFJ3;bzRfeH{TVi}G;th9Vsf^+~}v!hjigkaWt@_f!HtfE7l)oN3|-3P?$@Z6=rl5 ztO<pMDe<#fW=!!46H0HjiiD-|^_ zREykuojv$f;Fv*VRkq)r%S*@y2?5fojWTou=OJ}%_lZh?0m-ozfJl;`;f~n@CRVm3 z6%|X`h?0|7I_BUH)LsY>t9gy;G4~ww00dxJ!rkcVft37z69aseZ=|v1BhheQT3rKc$J! zLu2OahtZ=zPI_v0)QAL71+Wr|EH1q077W+mEgk$LuGj(Rl+zf{r1_f zlSPJ1xW3_V0G1JbXBm_`vCv=-&wwL@rtb1ijFQ-&h)~n=!cGn*=dCxjwmku(pd&=l zw!AibxW=FhulZRnCPA2Ai3jx<3EV|(RkSM$I;`lsgKz$)6|GRy>~L_@s^1)7%rj!D`^C=0fBn(W>BkBq$v2jv zpQgeubA7yeYD3#dW=r~7_Z(ichf(TgU>{B$!_Nd#H=gsDy%0xT7S1&KU{GeDj1O&% zChegH?!ljfLE-ea>Ss_S)pDtCzdzf_K>J6B=$@0Pn^BDc`FOye^r{6| z!dw>QoJjY)Rl3`2s~?jGlStzVw+wiBh?_u}f;RFnf}_OGXLilvGK2oqgF2t#L+(nb z6A{cLyIn-VBloK}&U++=TUWDbhh9ZQ7T%ahp^yZPwdYKll9%x>##i*;G%vGv^uI-O zycEoOcpX(vNko%RhkY*B{RGBYehaZ~X0LE9O8A~et(rw(0LI>Uqxix3UAe%ht#U|Uz(V$O zGV=<;tJSYA%L`g+V`?bQuWrk?0dV)u2zi>t3L3Ox>qylyQ8ndA~D+;G-@ zzl2YpCR-n~^Cs75xmDB^omEKW1o7#vkc4~RD`R+_B)exY<2BAR4eGh87i@AQ2UgOn z2CxR>uj)+}U-})`cb1bL;<5|eZ`BiM%n%l{9W0CbiFDsOa!qv0dE#(G_W7h}9K;c1 zasO`F!8Iy`bY&oX_VworXH!h6tvBe7V%&S_U3sqAo8~N2NSbD!v@xm_SAB>F6CdZ6 z7uJKsgVi6No`K;E{WVn2d96>3=^xF7JK=45Uw3KBlRee%!K};Dc=X;l&=h!8;)%v%VLO!w?167`U5(&Pk+%bx4crQ&xgTAjCaVe=2Ax!)>+a%bxK&AGqHBM2}}3hfVC= zJ^g5`J8~)dR-u7ZXkibSh&YaZgZYIx|7K*#5Z0c6Md{T44I(noccn7R9f$RLQXOBS z$Yd=vYz89Nedb1=s$t~HH1<$`)h0xKRfiVBgtW!pRtL&J)w>B=oq$VKDdW<(cJDzz zr-p3>q;~knskG9xpPtbkT21WoyL+t8<(W3aHs-TsLKPR&eE~B28%H9`PYcz3ah8y= zzc8pO!sq;7*g(??7HyJLhindQ=)G?X(tS9kDKG7ptz)Ax-Y8wq;snuw+g;eColr%W zo$R&&TD3ZwM1!U>%VKKj9Sv)oQ5%`E!)q$plJ3aHy(~27C%73Cv&k%DUqj`Q2^i5J zVJA;daZ8TEf9mDOD&Sy@GmT-@3|q=>$JfT(&vHNLtNHwhr16d0Z+ZHv5F_szEg$7N zi;DG-K!<6HD`Fp5Je5pInCQ=@zaqq#G?b?SRN>Yt8i?>dJyiotL_BTS`QA=_97D=G zf+ez$N#l@3k^Xv*3-W`r$}--*i7M=!z5(sH?9{!p?EX`0p0L^QcT}cXBM)&3<;Yr| z4`knEAQ)1noIc~AH2=&e_MI|W6T~hRloaH&j(zNJsH0y z({gKAWlosRROcbdg6>dsFoC{?DN1?3Rm1%1?>?A*0_BiGfQ&XR(;Zgm7ryHs7!+5q zhn%5-C1Qc&@vsj`4BRk( z?CF`Pj&{9XCBIBali}MZ-q*n?4Se$xT3Kemw{o@@{|^3hm5+}tmcsav`FKEPwUFCT zO7+r19&Gaj#|2lB0z|;9W$UN&wyb*?kua^(j^X+Wjvh&&_AaS7^rQEIO+t747^IeD;7C4o5qoY_`N8B6Ew&&~3<;KzDK8V>P+BW1wkVO|NU!HPRpHWDrJ&Jiu0Y@wS9 z8W9CkQ}7&KPCXJ-hyJ#@oe!8zo2$_f0ud7Ly%9X(g2lDA9T`0YhODMWBpeOxH5%F7 z{OR@)lcxMS_{s{_qE2o*TS<0%or&GQ${MWd=s+05 zDOW%#?s|(MRT5np&-JpEK-u9%eQuVmg+**#_2V!-3k#;Ri5Nw~E`)r07=uW5m|ge{ zr6kV%un^4;vf(T*BfV0SwW{fqH_KmIE@o#iw1{`RR6CSbCt9dsVKqQK%nL4Kl{^yDS4wD-r3X!b`eGYKn892hA=@A!HX zIzWA4?({evmX4#w0HtRGQmB5U{c`rOr__|Y<>ch}v^IHq=@;_iFPm!wa$y5xLu_`- zXCLk^J?#ACJ({?ZzEL?<9ku)8DkzxQONj+>!+b=j*n2#6TDm7TRVwP;aLAb+?U=!0 z<`6E*KT%B*5TjiAEK=}<$3&6WD{JS{#zr%iX4a}a)CF;(K4Vr;8_^imh!p9y@h@?# zT+&*p%h?bLo@bv35u0YzOa9uW8~HKO^!ezUfFU@FOm!qSov^t$-ruzpn#xN(+WE#N zXtK`-CA+vNwWTxy+S^s>)!ua$uc$(0!EC&KGhUc&(d;FONp-cQ;UQDmbzB$ ziCXh}dlR=CNNxxz2`DvC=Z7 z4ez{{SBa3fVMrf_UhhLK6Vr^vtB4Fb=+Cw%TVS8B3|~MEdML;=9C3JAQtC}%hZ6LA zVV5-nG~}-PXz@nnj_Hvskwe{REPN)cRj249oOlBhRR@KQr&ShccWy8-9FPI$w>a+Z z$vSHY+c$14)~h6q7dhh*U(wc9V_Vu?gqo?C6~505?5hMC2-deI>r&9ha77y_^HdQ> zVd!(ElW9SSOsw%lY0+xVMkNIV*~rQsp;7tH%lot4{}lnRmDnlfI?Itg&Q>W||QdRNN(d z`FRQ$0I4aOHeCW*2}6-2=Ao5}24yn-?VfrKhQj&7+SyK;sCXuVLxv@!jDMg{H&%Wu zmA`sEjSO=SHS7aayIy5pGGqoc(k-qSj<6NFs$Bb9IRheK_NgnS{Rust?^ZuLw^2+= zjIqzAR6=aL-|H6qlADw<>pz$IW55}~^ZCzf>BtI!;1@wdF3mVL|MmiqKt zftL4SE*m>f?tHrdb<%;E$J!i>>1Aa3e1yX2;dg=?^dl*#?}LK6S3cE0MhfKH_L@RG=^Gz1A?w|Y~9=XCG)3qXIWx7acM zPHYZFJ`2Y%tMkNDt)8*Up8Y5}e(~4SI$SaM{Zm`fC%rQ;z?;U4O2NFn;`#ppbU*Ra zrQ*I5$;v(D@1ohAa0_9d5Q)Gm&p|Y8Z=fS#?1jLv<(OHwL7JxtyMIx{2sc6wA&X$< z(d;`YM5j%flp{zSu^pM`A?l{p&Rp73^D*`=&zoe$K$0`i|DFa+Fk&Q8wj_Q$xU?(R8fMq3fF{T643L8Q5MW8qQ?z}hJb8H)!T=J2+ucZr-)5>rz zOXsq3f1sxq%#U&ARsrLLRo#$KzrgfYd>X5$k*)Syg`}&YO8cg)8lO@Dq-<(#H)QW3 z0SZr_$gn`DO!+2Iz|Ri#LZSCR5|xPE_xrSO?2l`Z&QUZtC!v>O%#cd10tT8`Clt-O zCBE>?I=QY9a6AC!L~0C5J|8td ztK2QG9k-Uq)LUETdjsosJp*lVTyzB?F2nmL>UQnL^1SE7qc`dhWELKaDbV06=u4zD zwrUIay=9B9{_ULh_e^3=t`NJIR=CWX{a4SW);Z=kXSOdg)t!gVOt)1e|uhFKU6X73*Q| z`4md+roV#c_ol`0rK-UwdKMC9J~mPQQ?m85kej{!@W((0JcvK`Jtfc7&p+skl(GZv zc%)R`?%Xh$p78Y4?CMO9ED?F{>QCp@hMG6s^Lw*ggyc$*6s44uHZv;6G-qQD=S6i6 zGQKC(9xR!43WwXw(8)}&DwuIwRGX7A#(d?JDq(hNZ)C|+ftRXuG=`4YC^cdb?ouBT zg(nIPw?MCE#LW%^-iFMR8a#3vX=lr;eh1v~Wk(DJ*f&YiXF>e}&@whLu!icK#+inD znr4RF#OoIZ;PZ<@tIJ9)65TDmFULDY-2!BaU-zx;naneoAbGAt_RJA9MDZnSHhgYv z0ZJcCqUTf8zh!8HJryHAZC<55P{BM%c(QGwMRf6c9ZQ%TRc3P&V_`A?K})65$8fiN zj5mTzKnL1IuYUZ@e+V~O$RTceG>u%z<7io^C0c>r zkZCRjhANy+zw{Cqn1nSo_^6om3uv|bta?4{8;1 z^Lnc>S*Q+73-4GhjBEFl+Y;*}#Q`POH~ac;tZEm5PcbN{(P&A(E_Fp>fl2AghTeLR zw-Cl*iLTw$PNSXhpE708@&0}I^j!E*NE3{uGD^=H?B+JJ>I?beJ!ov6{i8!uioj;P^Dp#_H;rt}(FyyMmBiC* z`1OdvO_udSD8Aw3N+I!FUPyW~~59WeG+|Z}eqeno1J02ku6nPQ z*MlS;TF8CD8|k3jErz7yl)>MkPiUJ~4=8%uk#Z6^&4$f?j>-OQr=3IoT663WL6TZk zfAOSG$VEEUV|Ln%)M{b)TJtlnfso>vsl2*GCi3GxkFilloCp^+{5hlIta=fR=Y?%- z3B~AH2~zAsrw#N@7nt_7jd_pUe2-0>giQ3D4IGLg|GnAt+VaizXd52{w}e1$OS3)v z3m>jCFFJB!?#p*7SBXrD3%Bqsa>c1X(Y)3rcG5V2D2s$en7k(Wv5Z4pu(8Kn`&CuT z>K*a&fz15d@MpzjlX9l5=44=_R7tASYrQ6-RCi9M$5(uFC+R6*JiOT4cuOx^w6HJl zVmNQGQ!{fGfMizYM%0@pqD7AF{F0hin0eG*1Et{kQ*hsJj8JGGxR4WFucOF&lU|D znsZ>~DqXlbqtO*OTG(aaMNNKBm!^u4X`a9}&)X=jvGx3ty7>Eq2PwJ5EhWkd%O?G) zcT45a-Eh94M40zvc1F<+olo}3)9b+??zOAl5e0@UJfdGqh(=MxKl6G3DEAXpi8zXf zsnN+3CzlxaVFno#i?_oL-JCFdyl-cZLW#>qrj#Wz;~0!>;_E#>%SiN;zd%@9E#@+( zb**^^)E!Gxs;|zC$o#|8Kg%SFvzBHl|`7ANl(fgwX{|pFB3H7 zzr+rMzmOV{MpuFCb)_#r3(%vmqJTe$@%dO%2{xTT6i1P!q21J+p*d$3 zoBznj$xb{sLYrq^F6jq~VXe;PQlEDETH7w;^SjhLQ>qA;j*4;eE*GnD0<<(= zR0yem`_%D_{WnC|206e+@6O_^e*y#~Pa+$(vSv2-(b!Z~k(l=SF2KLs*uqGaP}k(W1fUodtr6X=~RwugUM(VS{E ztvd-i;qOiGw1k&F*DTFsAz5c^E!2{|go|Fy?MY2J;w0O=axA9s(VV+->eleRYG@0$jZa zDQIsj8>tGAt_m+eKTLYl4%cZr*UM++-$5Zh?=#6}fopPnr5lG@_|^Bfvd7=GDF=F+ z1|G31BX-))SN~liPwpo;9T~?=sJ8K0h-49zrvYyrb>2h4{ePB>nN z|2?%RMnRbuD82Kq|{=LX*J~ zSd~>;x=YYtp$ssmhiw$Yf$xwA2iaDH3C>(Qa4(nZ2;dI8y_FWor?2s$ECQV_oD+`( z%JABz!?)uVB$%9Jw`#*n5Q0>6UtzW6(zMBHLXD6q2dPcKZXqiD<%Qa{a}SJe>xm|K z8r<%O-ufe}lM}8$ANP!Q6KKevw#OM0+fV4daYSPJX2ulh#V?NW%pYi*u7M* zsX;B9AKWZQo`$AY3n4mAV~$vDLh%C6 zjmLLo!ahY2<%KPEA~8Vtbx`Cq?ytGk_ZH%HOQ0@!k)Q@p#$gjU(_>%-AK?te5=r-< zzIaNp*AMC!wL{XHiQWhCMZ;ukc#c%=5q7e=O>ge!YV73}`38qF_)KxtjeNAr62?3B zE<6C1E90;-@vH-c_(5MK7z9FuWgrHAR^=mDlndeS#K6vqn`{xo0g^o&W((bm`IG)oP7my$(#A6p(@(8xOWxm3170TnA z6}C2}y@75;uA_M4D`uI@ZLW4WxC?Se27=zkD~JOVjj&TAmOpG~!a1~99kk&{LuW#0 zXDPX>1cJrfk+FUE`8ox|U}bV9WQSefxW0EiWOItUj;OkwP6qST}zGqu4pHyp5Awd(=)=(n{c8nZEQ~bEB31g^P0%4mq&ct)nNeLn6pZl zRaEIY_s4dsAG;*F-F!jN&wmHCR`6Q@ZKTaSbLrLp(pkQ}YO*AY^8hrTI~HnKuvjsc z`XA0O7<-LQf~Mp&P~2Ox%&(?7pd@=dX8h9MJ3g)uT;y^Y&was;D{A6B%B{2@_7xX7 z$xege<}fn(E-q*w<)&Dg;ocK@f~dtdmz%i6$v@XMycq1qq<0?IHE1$&X2drX*c+Dx zqw8gT3G6i4Gvw%ky!7UL;-jco?mJ)<6I$)xW9S=w&KE%-Va_blZz5RmvT1#{;;Gt1 z7EW2n$HJw@R~Nvts9@IS}fqsOUm5#tc`ksT9+u&fbwM3wa3-6h9~yLxi15!()r|I_RZ0cK(fDwK?|I6xG1WTS6o7$6g`lG7Ca0IA zLx-EqF?9seBbz@^`I!^fX5Y2r*dO&B;hGxpAK<*7ZvkM~SBWap%E zoQ3XY$_Xf(pPT++F3Jr)`_@~Aa=A30#d$GT?MBrdec{N@;X;$p`b{Cr3F=0?$J3I=k*lya@*L821y5sCF#k6kyX&baP@u^VKQQ?(`#P{<@-qEJad1DECPr#=KEP1-YV7KnZNdR z3G>%1b=I9603DcH3@ci59el*<1~YgC8Pt$X^hEd5E{VdK@wo0bg%+u%PQ_`$+ntl4 z#~cW+q+2e!2uJK)2xv7gBY&QFeB1(l^@4h583>Pu%y|PnSZLXT-jKE2urUREn?21b6TG?guwkO+sW76F9Rmy{Xj~5r_&_Q9E}@5`ivJ<$9~jv z;&u$zIc#Pn^zo%IdeS8+ktIWH9aMa1en^~qF@&b_^3wImtC8WjL?Ql_&l8*%v- zKEb49FgI%L)O0dVOE`peC#yw4%k1$CX!GPPPVIjE<%<0`Dt z2$ILQt)uu(jYLrvLxpm}R;eRAYcjKM9 z{U!k6JeT*y42a@mpTqXOL#Ejt8Uxe>=JfiaOlED|Czj1u(S21nV{_wr%ildcl;vT2 zXK;G{+@vtg@C%!49CkM)@?$LO=T9^F5AC6*t&i4WtBgz|=}6zQl$~ zgMWSak3PgCgI0?t7&*6e4&?^)!6g;|@yc=j_*@u-TT|qWE7{+|>Wq++pUI&5m1?%W zw0{s1hkhzX)aHWj7QISDGM6E zOkvO$Vn0vPl+t_oF0`|&Qjuzap`N`w6zMD^fRj3)Nuk@~VOE_aa(Y+*(PZ>l0Lt!z zSmHC=qp-ca++}EhAu+9><2IUiHG<4yJj^ir;MZIU#nKwyfQW`naVHFBPU5O;dbH1-x!O7sNL4a z$`Vi{-zj?&#&qcXJ%e{xhMwz1)7rch&HCor*kps2%MWC=Jo#3ie`Cdi zC!$^g*5P+l2_I-mrM;Ym7k>8@x8PwfA+zO0_c@F^VdQIJ=JI9N4X3wbB9NotA5;Z* zUXNMbL*iPF5{#}l5yww?1 zaEPGnt&fpoG09%5i+n3t01+IG$$tNKiElTEJcl_@?lbGCDkEt zQ0g+RNjNy0DJKMbTZYQs?mi1&zvj5fLSjp#PL0N$oFZkkc?A;l8vJUP82u4D@>m7{ z3v(vGO$-PK^Y7@ycVG-jPsZM$3c2&$gO9V>jDJmw0M%?&gXsvf&CPIdW$@OT8i5SC z6s{}5?Pqu22528~rgUyL8{c*q!?>!x-HC@poQ=spc=_n|yZ&6}EM3vLE(<9t1JH`5xSF zq$1qV{VK&6`OD2@%vcR=W7ar(Ln&Be&%ImucgF=-yY!s)9m*I}sjjVyELwbYu*b0Ls3{PDtg-FTZmPg#?Z;hwF?8d{m z;YTh@q`HGp9+Zt+`$}lvb(>Rpi%tp_$IJz6)-$f&-iA*#SFB^5&8|i7$t$KJt%nIx zl_XbBjzwJAKrgk|EBFE&nFB*&tiCprjGj-$w767q*tR;i`QNT`gAAF)uCK98NNZMG z0}p)ryEFEA*+FROS=Iy^Yz+)tf(;8A_R{bO+gW1MuT7F-YIw+*iIWSvi+b69WOMDh z#jvXAX(YSP_OV9&@a24U`GRI8o?LjiMfuh{%;(2}+1cvFAOO#0^wWPW+`!+*xz zv7~e0J_!LZGkd}vH&fAIiHm2*zW$xw&o|N0uNMhLk6PiRv3I_H22@CrqEp85&y*bW z*d`Y}*4GpUDA)w=OG~M6kT2i7(a*DW3e^@`mM~`sywOc5x}0XqMlaFn`7@SY-&IA{ zx+!MpO7?CRdf`38yU78jC?Q`p?nM28?UKYr-mnbRH+MuvrlBC$i0&_cG*eR7^=t`2 z?Rr=5LWf}_*yW8L%gQxrmf74piy%>RsS(V)8TlB`5V^LX6E6FSg)+(IWy+T@##_SZ z{YKqkP@25)FY-<3Rv>{5IULYQ`_BsyJV>}0DRiaL!zorcABc^_w^L??JCwQl75?!Y z;8dnAL8udUFn@WqM9T~4X)6t6fnf+o%O4&<}q#hBs zg0LIiKOB}hyMNkSagMr_<+y#N%{?lN$=j$SnGh^vvInVuN$k_=dBQ>|Qn$xfOdh>P zB^0zDp1aDR6o9b02U(X{(_&X)2R{VVgs4c6jyc*(&{#Oz4%q#U*Yv3Oq9syU1=Q?u z6jX%A<8I{R#DmFWfCvmF^_VAH(ztqB;-Y=ID zqlyb?@TSJsoxn!+3Pez|)C^>bf7hOLLI3yt^s)wy;)b$!N@Kc>!{h!w@1?J73Cg&u z9k?}ZJ`WVl-WLJ746QFakZwI1jFQ5A@Fj6N^bQKp^nu%fR{GIrArQ1M`z15gFMFal zWIZAZRazI10jy}ICS-D1>Ty)1>aq5}#`q?oZ{P_oRIt5&@xsV4k^0z7(hp|YaERvG zMG=%aCqzKn5LERN7x~Y;8XVgkfzaap?h*dBXILGZ2nzB;)422!d-uh6Gys*8gnfHi=(H6pFeV_onTha; z9^(73gkme{vxQ=)X#PRpIbuOhcx9o(P07yLC1ndPZ0!yJxVfOI2mD4k-N8eVqywC$ z`>Ex>2bO-r?Ed`9f5WLM;rR0H)KWEqJU?PC7Xz@e)jO4VH@B}ZTdv0@(C^oSo2iSy z))k8tqyNU6cq8y?-gJ!F{~JX5Z=Y=N7(s=TrnCOxoP~fCOVgVF_&t1?=MT0{j6oE5 zVE>x4`rDiT9pye~4>r~ocgK5hOA*M7hI@6Czj1N!+u)zh^DCp({_lRDZzSULsq!mh z#v=U?ud=gZ6#sf_8ZKC8H9z^3zb)JUdYQuAh)$;^Yzdq~VzbQEiFlYcJoHeATCxwA{75za?@UOS}%7B8e#%)fw-y8b>gE2I4X=%({%s8qQ8!Q8HWeQB!!v|HK$&S`4u-FC%y`D9)W&|4y4 zIC(fA75e-NA!c9-^q#d85DH6n09-KYJ=KRmAOT*n>3RMpi|{N^fcCXlL10oJ z6M<|(GeL0lu>j>^JZ;r|P!A<*6K%;2O#B1@QRIr9&SyOgcp&{;RR5}dAqd{Sp!9yb z=PkVbr=jMP$LmXUd3T#qg#bT(0gT+2$fD2P2i14y8Me#c-9dkD6jg-d3j6#e6?+X~ z|F>q!mB0S^f9SrX2o@yiQ-8GQ2%a0++zzn1jFE*z;*nm9Z*_Sr1pB8 zrh~8$-I9Bo`q%DCUwr@yDFBr~Bkkt}SjxMrNsbEJH8Tj_5GG(%`L_GFTj!|?3#Fw!Ztf1&?fQVhRWmvs*`1F#RQq;)bP~);9U@e`T z9dW2F0Mb#&Yv2i$8v?<`dkE?VW%_HtJR!N@(F=3JtZZm$3t#M1*RcL_Bq{e7QV0) z!dg+4Rx>K$5KW<(Fs6a_GkU~e_WlWw5yS`2So36qBo~77H4Yw(3_QSSp%_Wsos^h= zbK@Mr@R8WUSJx@SCT!TQ)_yE2V%l5&A`b1@BfzX7Z8_~^mXwVKXKc{m+WyDlL$gLl zpHE1)P|(BLp@Vr>c6OSZ&(SxqJaP%7$xakBqo3dIR!p_;dI+GiNb)v+-Nawk-RwQM z(ee}@Zc+@oBARquC2~-HM|Lyf;Hj|5&=q6?V6ve8UxFP(6ymJ3j3)R&Q2|81%Ncs?%?d+`#YCsTy|6mbqpD1G?N zvNq_T91QW73?mf)e8_g72}E2JtIVzOjTo>G5vC3;X2jO}FmVro?+46D9)_|G+yy|P z^Qzr#KBp8}L*V(xflSBE*n!52y&$1G2=zVNUNc#TE8Y4?qvw0Dnep)!(SI zAD95MchJoENG#9!n}(n%11t4>dbJH`0zp<0*7F|rtrbvb--FtEX70=&tcD$e-0%uJ z;bOl`(yYU83Iy}*KsAFfT=)vXc0^F!U*BH`JeI5ay)CJD_A4NXfsWw+^;*6L!c|KG zQqK?;rbu8FVVK_$NNte1%-@RLxjO0=3JkjS^(P>_*wUgEP@x~=L9l9> zrV*sFUO*9a9@vulCSfvki69iZpZB{q;{lNp6OoQhgz4D>H2(mIn&y*206yA(XyO69 zzpnGUoa5vOE@S>-d$@`M&l7&2lxhe#xcC0h)c}P-uFvulw-8Ljwi58*u$X*}4!-St zikEsSUbqYN3zyU8xkYyYjPV{q7C-~2A!Z)O2a&ozt=9&2FH>kzHf0(pQ7!;PKf1ve z+QM6?}ty!n!duckp^1rQL1Iq{~j!&gEG zLQ@{*CxYZQoPIs0nKAbg5(UK4t4kz1?~=CGrdeNlhHo3mrLYi95oE9Um?|%xun@Cgon=o z?N)kHtSdlAqZMZGI_%?WzrLKi?&SYw(@LpGb6!h4Q4Jq^n!os!W34FPSWB6I2VZDy_qe zQ9TYiPj7h1%x!ksW$_benWfu-s38F8(g-5DV83mLdmm*6-`x)LK2u4BN1y1q&e4J~ zued9pi_?Ak(5RmeoZp!ZhwJTP(JlcYcm9>1iE|gG2&m+XkB&}vj&G85Xlx>&T{Gt} zq3>kPK}qoTlTyNstI|9{(&9@)dM`9DcDON67G9Wml?t5;I2sF0wDODzqd?HJ_Wmep zSPlC)_yhDFGf6XGM0T^T1LPYKVxYcszl%5s;7~7`-hY^WHyC##BlUj<2bBnWJB6Hy zjDswIunPi^M>3(mBRfmbEY{V0= zIokx7_f@E809#rS)(d)d1=T9PV!Wg>7HT_w!3mvLn3h1vph1aH_>2H7{=r-Y4?~vZ z_}8{Vt7$cm(?M+_>Ni4wno*7}zF#F+-hb1u&r_8`5By3(3xj z2XjTwtYVo*)^oOec8aY;mYhvg(3*PNj5&H!P1_p(w$aip>6hAA5%Vv69~;ykg6(V$ zb@JDfXaU_2cO#2%_VHUlV>fB{Gi&G`MNrgEA#d+_A$-8`h-~?Y-#km~;38{4`&+k* zC(mQSVEugIl{6v$`HwW9`z7UCa)9C?QNGXOjYv0yrqc3sFnQzNk9yG8F#-<|NkJn` zqgm_zOog0JhAR_0-xZFZ_YwON^u7f$tfs5@cOmpcluW4~ncro_J221faMG>VBOdvY z;S35!*|S3ftoQtTUmtyw8jHbP_nViGzeFHY5g_`CLUyl`E2T?Ay(bUB4vw zOe9X{zdHLOQ$J}n(*`s$fW|~}-}o4^Ldz|{nysp}0dg4$5~7M-thcJMJ8h+(Ul~QB zIu(XTcG-GuY9rD6L`ab<3Olu0D9PNj0!%dC(hq?@IM8L)b)6xPr4Jr~ANbrDEl-76 zt--|JicFq`Y^PA9XISZMiToM0bhr|g*&U&bZg ztp%|(U!9wvIZT5TFio8?n`mhxSxQ6So6v7OxD^6n>e4PhvTZCM zjfWjFPhxGc75x{uMpg4eqHiu6EQ*seAuQm2iqChG$+wY)(o|~X<{uGQ*-Gr^3B$Y) ziExc9hT6nzFxu#|EEGP7ex-rJ-ui*Y{a#OmX;qY~zoEaz#w~FZl*Ul@;O6#&^xGjj z`BkzW>MJr6!)gZyNVNB4Yu9d4apDU4OG>XV-*g~wj%PPSjb?ey2R{I(WS_OA|L}8B zs&S*UyCU6#y9^*v=4= zy|R=b16Y!$t?|w11yRu>_T3~8rfw13{l@I}LUruNneERz_;imt@$D2wS9awI406Xv1adIHh{?N>`qDSsQctyv8d&tT?dv6 z9a$q4jA*zI;0l=@h}$_P*2L$Gor?|WR}H)w4DL6u3V?WY(OV_8ePt$0cPyK?O^gWc zL5ChCg4o08`v51k!JYnboEIGK_d|L$Mh9@u!+MFuOwPWs{rmI5hH}~!fk-6%A4{sf zdX(%hW5NTx9#`d=4Un4%hZ#nG?ZAtCfsBEYkI z`t2XVRAIs1{OR8|ZmDzf3a16Wh7x|G8K`HlVemYBN57PWbX+dP7Qn9 zC%N4@9owX(KNxaJAr7IZIzlskTq@O488VHf7l?GSfh9uGaYca3`@%_wgoNh$J6ZKC znS1iMG#S<^qKbxOpXe=UiAO+;jqt%WjMm4j*`fdn^_~uB=)5TJ_Snf0y{fwcNiPgI`wKT7=wIuaMD~9vke-KomsihT)ybSfHJhdAH2rsVEDVC{-*C59t)LY`~zaAcDmOgF*k>j&U38Avm4;ZV_=l1Pw|aC0S7vTO0{ zAmpITAfa%y)@c+k+4zU+Qzz`)CZ&gxEn9KCKTK%LhT{Ti~+3eFu#{HF2+< zx-?Yw+Uk~*od5a6vcp=4Y2)J+kjqB91PVe;1n2I1a1ce|QY;c%4PEg>Ol zr_aAQGrTd>#5RmfMrCB6!4V?xFYl1PkBv)y!)+nYx&k}?gK;mi9>F)i03IrbY_(ok z*04BBMXI+BS&ZF*My*}J5eUuqPcS8%eW^jXgz<)> z%t~eFSu}PhvOw%;D7tuJJMt5$FQN*2v2tDsuninCw38-DGti*@IfU7E!(Wr94VgNY zrGmj`5i6u%?Hhz6gzo}lm+W111GAKIQG)|CNHuPxxu4ra> zs*B{*(o@&RmUk9rJ~r(hUq#s8TYkkyog{d>Af>WN6}G{997OwJSJRAvuUJ9sh0nOV zkA^DQIjf2?;2$3cLEv{bmVo>Iu$u~zF`c2N(^tQw=AmLg*ba_41>pQ=28@Jd-W{Bz zh}`G`h~!U1Ms|uy_Pt(gXWRVKu|x>=;UiMxly(QyC;&79dKhc%qS^o2e1J!?hA)~~ zgNwXw2jtZ((C?vOq00p0L~;{_QnfX{9-_>8r<^G{q6a#RV8Ba+y_NPAzUK+V=`&0u z8NOz>;h09~l%mC8JeHLXq%A80U8X4(3u~((Tb(*U%j6`&wOW(C4y8C ziaks|?yTjW{7K~M65s}Ig%RJ%Rn05Fei`x=WMj#0*PG6;geN(Ia8~LW@q%bh+0t9+ ze5}dk-I_=39w4J9`QZZz=0K#khN9TTxAJ|F1FR44NmjK?>}UNvfNUF;eH_(B(;Esk zVRL4^2lF{F()|U;IZKo(+1sej*3xm*iPKMt~B84sX#9vDvL`V!8>3ybA1E4U;i=$obI_Au9=wKY_ z1Ka(nbN)7}o%gtA483&flWPcd%_gGARH~04-}?D<3$z^tgn@fc)(Tb+n%t{Bq% zsVQ_6WX0l34$bQRbbg^W;=F-1LI!tV-nH)Ss7T+y3fTbMq8#rHte&3_qaR8=PX&kf zw4^U~Kbcn>Xx-J@?7qx-NX1SHB(4lWX81iZyOoZGzhuQ|<0oWHaoJ0P<`zJR`8L?} zKM%oeL|EcNk#FZOybFq6M!V4gF95XrmmuU3IdYSz848iM_(69%zHcEuC9aeM+=#A> z!4y;7Wm-dzh?~Fxg!f2(JtVHv%8qE}n3$q^L||TxHBEAhrA1OBiQ9fL&4`-Eudnd= zkI1)Qv%W1ZYXu4~UE((dz4psyEKG`fB5)z9kbc2~;R3XZ8HjXfUB%?*=eZpjntqHp z1~XuLk*~!Sg2ag-h>Xfo8TFyxE2kZLM#30Re6_rO#FLDCZNecEFb`g(HuqROd-72S z_jderZr00`AJ1bt&)69l4h)imT;5B_;3*nZzbab8!F+28I#IkPVbhM{?8{AvY}W^3 zD7K`=tb2NZwZGluGZc1$3wiQv5moU6r`S5{Tj{I?MQ$%-V781qloe0-hS#OK>!F?r41th5Lrx|9A`O!~1{-m*RpB^!lUJe{#j zppI^gPF9|5cE+7Z5gao0~EpWNIZo(|@=)FSaDv+&!h@Zbx?VEd0%uE zv=a1w^1Zp_!sWOk$7cK)yFqS*7&0=Bm9U|u`a|-1Hagt5D_rPm9FeQ%?9Cepu>@M{ zL6>ZAa(D(zo($&skkNHy2}PX|cn8?5M)hT$_wIR}ex#fW^3gmUpj$j=89BE%_c5jO z-)(nlW;;4bWzwx5U$7i6O}{)0(ZB7zGhJ7P@dJhEvLI;{o&3#T^6=OuK%HEflms3q zY>JFR#O7#3kAf|H0|^EDDX#BRR3eX`Tjun1PvF@O85Cbu9+V{XD-Y+w%;C=isPB&} zKNVdlP^Gudr_9J

G@8kgq8)chz-_;k_sg@UZQCk6-rnL+cwTCOfI?wEYUmC)y>B zOZmW6lG_nUo)hmq33IQbF;^s_07(UaRK6}s5>gK!L?wnK_t;{Hk~sFVu9UXl3&AWt z-84SnAHEUPW=}-M0XaH&tK}_pvA*sH>8ebjdu>6~C+;h0&E^GnYLJC!CUROQcopj} zTYO#CVdv_E(Y@Pv-I`;m*?m{Rb^{rzr5|JK*GeS6P@MKrzpATboa^nrv9>6bHZI8b)aD*#~q_2ipmSP9yI?53$B*?u@=)>o2?F=H-BM^N3F3R*=+l&_WB zChj1*QrP$>3jizey=tqVym?{HMm2^AysxA*+9FL^ zHAOqGFiPO^q}h;`quk7~rdEjfy@CtchKFpX9rCYs$rMK_kAw(L=gR8tu-BJn!_ZGQ z#|DI)MhEa&AfNQF^O0eeybosP?wc_eSyW9?&vZZaA%ib?LsUjm0So%YNk+O@P}k){ z`kBL@W2@(-fkkFpiF;mv2zT5_*^H&qME0Ql#E^IHp>6Y7PLrb9k*YwWR+WX%-Q})V zHj`$I3?agq$UiYAH@&lk#IoThUuqQ&kimZXV^jU{2Rb^o*_}6gxW35P?}yMQBn!8crOLP>dm4|A^U`ZhKH}@*ji=) zVLOp!PByaRdtj!@V%!_YYJca7J+wUtOEEvguv`$%H}-u7Lo0`f;IO9es4m9`q`Jqp zqB}8?>vGH`q(TW7^h__~%-@LlDseH^iN2!&y2WPt7qo7+wF_v&mFC0a?pMq??N*oi zpJ0@k#bT%df@jNk=d#MEcO8}Mh9GPz-Ia>+MjHvp`pJB*)hcBLF!}4N%Ngx545(I` zrTB1TLyl4u@=I9O2n<5+2+CtqHJ;%Bf8UlTszcY;qQ=o_+n2zx#3{=)mmFJSE z(>?(LOx1G(hI0YlPm0Si*z1K-^Yk%(t}G^et2?_Ed&{Rj;|d9Q0pSGNGb%N;a-^9T zUTdO-y!P@E#X^{CY?-?W_0F4c?p{ zZcyMzH(sC=-NtVbk46M>hTtnt)!5nsX)4NX!)I410-)5CjZd5H$XTlnp~95_p|0bOuW*g)@tD zfeX|xPsH;r&Xp$QUV>FMS_*?b@BQYoBg7A1*lU$ggkSS$4^#$ zcmkX}C?*oKR^{iTjgg+>96H$5Nz{~DIJnl~I(B8=;Xmhb_@RE~o}Ygo(6>7F!?U8l7|_i1e^Vem*SDdtsNW zDRVs6pY4&ArJDOUBy{a6R??)et&F>udxI?>v zOE$BZ#1DgIAm1pivYFxi8RA~kDIJ?}!3 zViO`WxmEA2TSU$}UTCV@8Y65o&iMvGevV(Xz?r@+wwn4pK+<|sy=Y`pTqSR_;f43k zqa&}!J`b>6$J8`YiSQfM_8^z&)j&Pi_!0GJld?)IeTSZ!@3Mi<<(Tq?;88n3)@xl} z-+prXiu!tb$Zf}``b?1hr%&9squF&eGq5+WU_B#XQ=Tk2U2m`YhOaax*r-Q)gFL^^`aClvpQq0fxirQh^r?Ils*rj#@gWvnIA6 z1?g2O?XZRUWzrQG4rjsW!bV+J=WTP#2ER{ZNYv%8TyF3hjwK1wi%4y&q_WKj9qE;t z-#I$_zREuStSQ`#|5DhH?v0toAiIVx}NQR`gtd}P}%q8PBzESP+;xt5EUZT8TMCb9CRa?-N$;;)!ul#2QT}m z2MHbG9CYt@?utFQ7}3~h_y%!vW`VPXi5}K>TUs4I?3bvLYsN}0ExT4xp!O+VIp1Rz z6TmD$%li@UNtWXv#1y;RuG+$Oq+0}A!B~aM`*@F@G!ztWsgJmhl;~!Ap9o}ZAG=ak zeTkx(I#<~9DJ`{i7rO61_G%Hddjw;)Z|-^lg{zVpYDJviZmRGN-|r~s>^UnPTIkDB zz#MxLF~Z;fayNc3VRs5=iVZTasGcdsG+B%mnpcCmE^f=X%Vz9JruXw~Ix^Twb{f== z7^8CS!QPjIQOLZ^lsQa4S)EsY>WjDv*5>OkS~*^F)rzySioy#|pf$z15RA~5D%{2( zaN3YyDpEr#zl~y=yX)Ug@{K4S;IatbSF|_>ZR*jXQCC2Cc5*Q&2_NiV0rkei&`}y4S z`f8^zpi7tCRISR$f&q4&t^phXJ2(>pb$v_V$D6Acj&aU>YAjly6?0ZUSfC4#UK-KC&m-l}Y4wg;NWg6aS3IQB%55 zCZcQa_H}5Y_1rk=Kca!BmcHdzCnM!MLg!L9d_MrUO*Wwv< zl2AtA`Ff(WTfBF=JOM6TV!lf5fA$} z+kZdK-@IW(A*#c`e##HR?EtQvB%EKT{jw7HxO=P<_{gYC!f!G^-HIFT@j!eOfN(XL z0`4BGrTn3Q-MnxGC}wrW?xXnTVeWYm9^+*A1WxU=SaLk_q$#-Dh(CapI_Z##3-~Q(Jl;eP!50rH3 z*U=-~3Jw~EQ;HRoe>|+e-}>v-fht(qlzWe6B+1`_rFhKU81Uy6V4E!y{hvSfuix@J zfbg{fR=_l~yZYDHQ`!UH2h%&4N96B8?Z5pxUw(XW*||5RYH*|}!5+JP&z9oPvlHwE zw7&(!|Mp&R6~Q^+n$5y6n?%Wp!Je5|D`Wh%W$rhE|M4Sxset|0#s2FK|MRcpim2%9 zE9;-WS)+Ua0k@oAyY^rA$5*oWpFjNXzaRtLB-Vr_(Gu*>l3*P<-K|1?tsW|~a9Y`X zP#m84zrX8mU+S|8xNJ9GJ11h_$6&#t=JyEx^l-uLxBOq<3wG;oxA(ud|G&5Yzfb>v zpZ-70&wq{oe~tft&;I|O{r`V;{Sdi7di7#b2%c~*|(k62GdPv>YeR-5E<;@YU`<56Xnv|AB&@TU#(|D8+R?Y5$9wku zdf^eWz(KG3Zmf?kE(Sb&_AXz&KkIPfsPB0O*RZ}Uc82sFkLlY!z%e^AIaqb0KqCT4 z4r{)qLlB-ON8QlN_=YH0TeBz|N~%BM_*Q>)Am{}rM17R0ny&0Csf*c7>QTtEmiAT- zY@NQg0L;EC6j%AiM>;W#%+04SwIvQg8!rb5pG&Wqkd^=cVQK#r zJPA{RtA1y!5hi?vh;--5GXJb+E8PQO#&wWfTG=C}>Su!D;9`5?7^=_vllh2eF#841 ztsKE1d`IlZpO4@Bc7c|S?x%5eK-esLtvQGCdj2ie*1@+-sl<(uf{z+BGpL!8&}UIJ zikt~US`fVgkTBU{(jfbfQIoGf_;9?TJv3xDdawg*gTlh7eqFE|x;V#RUc?}1T{FF} z00-jmp;zUjmF6nLRhDD^zUg(2s|g_KGW#^?6p**#KrJ;MbPNt71Q$&~tE&9hc$qZi z;c?I{dR-}!4_dir?21rPp8fE#P0Ipwi9y}KmVDy8_(l zxaU#S@t_-Hz!QuLxLjyeni=-nd{)U8;i%&<8%*n1nb4tn;-ZFzsk*Ni*6MQbg(eYT254%zm&Ot- zbYrA-&zGYVw^X2rbj&Wnlu-&mSeA{o(&VENk@;NMYd_fsca({>7?6Lm-PY2Bwu(KD zH%#98f?oXwl6HNc%Mo^+z&##{q?nlWWGE*fSl*igk z-O}^eHUWHTHJ?bYE6`Pz2;|?>I~*9ttt$F@!KB$qmT##lG89Aacx!^~h!EDFBb;K% zyOJ3$Xh8>oEfbg=<&kGjf_XV}gnU%3SFNL(#&AGorQb9Va^P$zMz(i|jdtZt9e(y--XfdN^d50dcJ4v--jo#jVes0P$Foo%_%MUDGv}i=Dmwyw;AT~gA zZjA}i34lgS&b3F?q&@%fw855E2S%;_WnsAR5lDnc`h>1g{IYziX~L>Ep_DxEwM=Uc zu7Fu;xi|y*OY^fdk+*V}@Z;m}oRG7I)fA5{N7Pc)$TFAh$!e`dFu!Pd(+i^k`iN&p zwOHqDplFe7=q@`c&|#CjzDvkLPLQFJrr6!I6vnsJfBthjkzM@Z+}l0%2{fWA_2a|J zVTFnqkTtjOPvZG$(ByGa9dmak@>OpfPQks}>#K8Od9lK@96C-|d9tOUp-9szGSo%@ zb?|L&APoXRfxy4D2; zm~aj-=p5#yh<^kBsUzcfw~h{#&78?utzkP_W@(D$vll(iY4+fYN-jJf16_2y#GfHQ z6ok0*eIDm)R^(_Gbr@-)5jnF!GjoE~<`D<~Pa@?JNr@PRzkqajk*sA}i?_FmOx*cSu%5eWYX#UK4{XT)RK`N3#KKKOZvkbZLY#s(BQ%BU-}Y$`8d8n`o#xS~CrgL(O>x>b_S z3cfsU=J54-57?c&h(s7GY;g%Oay1|&bYTJH#yiI`h*M8}B~kBk$d}LE&ro6M+g3M< zU1MHgdRo)N)DY);^H!J35A2yvQ9G{b>c6c6FVEK6Tor7n_dI~9K3z|*ra{W>;lCp>Im#e;!-v(to4sfuBVZM(Y?FNX` zPDJyAi$_a%UA^R1nCw}ZX&(`>1-(ht_*D4|$T#t#@taVGeW65*TG(W+7H$op8B|ucsBuhiDhj>RQ>YC)sa#m^}Es&Hl%$PNs-FZt=1PyDRkN3b00=qyq3i z*T{qku|_$Och&S9W3V{zoj)?^7WRQ=P8(Ha)|l${dwhiQA|#_1gQ|4+MEJ(4DlAG! zt!Q_N#@Fqua-Uxq%C?*hGYcIJiXr^*>hc9pUbR+N zxuL3}aNdW73O5w-A$eeCHCh<|?R#@J2Sg$1naTSzAPi}8GuLo)lX)FW=%Un1HodZ- zxc;jk7G|S2I0aY0>_das+^$h^ab)Qg>c_rhzOkdtG3HwCg-zqJEHEH)DpU_9jlZpF zIm@fWH*AhD${y9aA6pQcsv4-N$ZyV;ACGF&XbBYjNT}EL?J+RwhfO@4reg zf^2VIP-+yj5_nWmc}tW2Oye#~A|6$)>#ivq%pj7K!LC4sa32|Tjj&*~-=rlA3R zuUauWtM#1pW-xkDm`K*q0PJcn=sqH?f#x{4AUzXeSSwjZhI*sQUwd8G(fy$HthHNc z8-FS9T=YHw=9&LKf$0sW%a%q%*j#t1V4+4?TOMV0!nJpCF;2tM3vUL{L2`$XB`vz@ z%H0FF_Z$eop*|+^06O~>miPz{pYw)s?%e2y(oc?W`kTLB$}ec?D#E8N;0FeuxU3rF zJ~jcHEtyJIb#-~37_4WoKLJm5SyVV}4-^szX5$n6D=mJ3MBJ z)NL830-TAaSy7-56hsDbANAb7SOLaB*?OAufw#eaipLHsVxTMO3*T;|5!iUfAI*u( zty`Sdhcw13Tz6-4fb(TPtGVP zI$eTRD(U7j!#?|P z-0lD?&HL)snqv?RYl?XlAo;+oVJ#y>4un68^;t4@F!YZMgX6i1WEB7;&}F>}ld)I; zb7fW%9l#mvOah+2ivTJfm`)t8wZ1TiU6!V`yx;|g&UhlLk>tDPhRZs~!<*20H9prJ zD|LjRfqa45|HIyUg+-NhTf<6=p+H3>C`b@R34$U~kRSpIQb18vu zoC+v1l2H&;P$cJ!ijsqYpu~S}kM!w&U%SuUfAw8;^;1}T@3q&OYtAvp7%LY>A3}xt#feBL`mzCYuf}{POg5<$lZOC z8;jUA=RTTGhJ&AsVn#=;=jAIVDc1g8RsSUcdhLyDrjmE#c9LC!PnQnq{VG9rkR?b} z?_u!%{(cWa`5)w0?UV0rKW|~xn^%GbKSTd20h^lzc$p*&)(V9GD?$dD&y%cB)`$&? z(4ELLZJBL}b>3c8@9#1;L8W2~(aZ!~3TWNmGF_u(!XIk2BQUQ5y|plC9mY}##*+LX ztyC9HCrMzctUFsh79k_cdL>~fbUx>S_;DP1*UQ3Bup3fA@9hyeZS zjjA9B7A=UI$L4$!EXvvNX;cwuX|nxAv3Wb2ZG4eO^4Ls58fRy$upM)@hgM|6_0j(g zbpP?mAIi8w`-Vt5^%7l{ z8LL$z{0b1S4W()6Ut`;pYhMGCkJWZKaIXNV?!)?zZ#D*s?{gtj8QonffM0~OeGJ!N zzGl*{bEah|#u&)~^R+DO9?{(y$f|n$C**<)&e9&hmsBf6aK#{X;>9m758IZM7Z_N- zuRq;#Hi9!F(QP`bPXeF=h0Y?AYhtD-7Se}t*aHk*m?#BEDNra$Sd3Odq26qGkI6J~ zt@~)n^MeA@PB4q-vM*}GxFeMhs)}7V3~wwuEne2X20TnK(X#o=NZ{MdO;|)#mr)kE8_!kRbVZE z_S?PRXrbct)GmgSv;K0!eH@uYKJ7}!tl{_;Y_I9LwoH?O7TvPxD8fvvXW^GC=h`44 zd^uN>!;ELgj(sGM*0U_)fO+wOZcrh@W}rCWS<7-jwnxl-cqfWd9~_(5*SlGS<0}$o zE;@RakGEWTyQI@wNMJEv^b4r9QtJJJK_Y z3_KY2D26ZyeyB`G`IClRK&Rh8Jn78Mu}jEyNCY8gmT@d+KF0w?$;Q7PoFYU^FV4OJ zHeB=fFJsNU`rb_LYiVIh=OI1J(=4@)*{@_<+HdO2l>3gWFzc%^Fs0{&U`&hf#}Qf( zq)rWeUgup?EFDSK8C(H*Q{Sh;BJ zn;@-~TyKDVuF_43f8XNYOhY!;mh3kLD2}e~+92#0zOnUO0@HC$^XVl>B3)haD7~k* zf>R2B7W_A;z@vcI!Q@ZBwlrfFc~(C!s+9A4rll9}x+@&27mdIz&uo5fgL486XFtX% z%yeai<;oBmE3cAEO#)U*$< zOLee`jUeFB8=;_ecN9HII*mAmcY1k!Vr&lsEfv;8(x&QXwn!OEEkY@U-%m?}!+tNY z8?9dc0h=*{I!_yK)8~72Hr#4C=Ku`M-ERtjk+6{NEsH7~)y*#-UO5N9Ad3trJ=4?AX?~`RU(}>nsIr`~^Y%TY9kfV-!-% zFr0M@lHvk{4T~{i`ZX3DT0YVg0(5gyZl{?k1;)X33A~zP5MmBzKK{aEV4I{fM)F@WI_zz(hR;!+oOc@|s{JUXjA*Y3x04od<2PMF?+(!4kxSEBJR zYjO(mLq+xAr9=0t;ZlzA{)T zVEFHZ%)dR-4l-F_aTIdgix1m{eD%^e^p9{T@&&6qT(Y0B zXwR;cQviuto{;wbm8`I;!VsSjJO;;C{nNz$`Grq3495|2Wh#y%$lddY$L;-f_u>BV zO_7R8;(t8vfBx@vq|@MjdHJ>!LgkaQk(oUB>lb7c03J%a>(}y+Q}2JipgPRjb|m%P zJ~DEU78DxX4LyA6SAtrEs8{GnvxonWhnNNU$<*#OGu3?p+;nEh-i_^FxQZ~cy6oGI z{_800++_sAWlVGNQj!5uKs2e`Wc&4;Ds=G8Tj>bTf1Lz-Ssy)vE6?ul|AP#JJWk1> zWXWH@K*b3o`Hbt*d8otrYEc(Y7^=o*F zAW}s?JMJ#UY6&-;D#W(9=hruE?C_FQUtBW#OD_AnB=sn9QyU{I4Iy7ljKH;fA36Ez1D*(FW;Tr>63{(&cOXPmS4YcKO9CjknsU{ z=G5otR`nEH_jh#V>(_h`RlRftTn6togLb9~d~9_;Pe>ZqQ$D%=hWaP$e)+(KG~bsO ztX(OdLTPV0^3>HdO4ph13X>Dgl|>?ZELW$Z<05#lIkQZ}yCn1*1@ROOurM}IGy!yQ zMyI?jN2{c99h4nJ$S{deh1}rY&m`J4a$>_Df%`26OLJ>Ds9T*5fE=RKGYi^%Cs$>F zgZZ0smxBfd!T)?{+#WJ-c)InszGmCQDYXy2V!zsGQ>$qfZ{oGJ;R33rvYY!e*P*W= z0J|q2n0{qcz`>$e(NU20#4?M!_3ao3O_uqherfLIdk3890W3SeQlVRPoGNfGH zUkXBxrbTEd4Xv&=a_2{bZo30V!o3*+_9XG-{~JCM1<7LI(eFfzXnE$!|CDS`_aEifnzC zVW)AplrTK65Rwat(LCH9mA}nb8YHNt95GcYdX22}{@V_fzy9tK!sT3idb7e=cGu6+ z$Dtdq-rre1Tl5xe&1_Uf*~!PiGHYkme1YK$Md<5d2YCAxcylf%@x`c)FL0i52Prv& zXT3JGWd6vCSqS0bM>v%MTBd^tCeRdj;YnRxDip>UNXQQ+i$LABEqZe*`E-gC<+hGwf%b_j;oC&3Fr$!l!OZk#mB){phts9TUOzrz6W#87uJ)k++3pGJ!SWkp z)~{6j*-bFHS|!#lZ1s__>Tez&@NEE`gQ?M$PKPLo-T-HCn;!?>Yc#JF9u4Mh*Eil1$u1K7pO*rknE%% zynMpcY_IL(eHEeSz2U^~@!h_v)Yr*rx=a4XHMO@9a0@!}k=2QTlmgRFhM&2+4895C zt$bZ<)yr#m540wR-@tt?8tDpOgnq$3zlXIz%yTBCd@39iW)wDuFzkc#ggg61T)lUr-&KPjaDk>emY@sxpAG)PJT83!XH_U&;{ zgK>Dp|CNyU1hU}eJFNizglB}P?NGgRwFG9^Cu>x@5lTSo>CMd>a1KQu=PeKdTH99t z7{4hYdJo~Of2}&eb-wM^uhfVDR<3osUxlIP^4up8Ac;ZH@;dOmqt2_){1JlE03^LM z*=HRApR^`-;c3f(9>AGsl|p+3JPDD?{6!M#V>XF>|L?XuA0uQ#q)ctPKo<*FHe$Td zLjUXUI;c68rN++ItQ*xoV6qx-iZSM%%p!CFL};C1Bmv_ZrbRMJCf4ed+b6fI$7rRWm+PQJ*pH@&>~0D)xNrsKhYd(28|mkZRh%rax2!OY?V zh%vPgWy%CEaP55;(IA zs*7@)4XM;2!Q7>cL@!Hjx4F_mTe$|bP{|U~2*)amn@DV}J3Ik|yehs&^6TppA@#Q4 zs~Rkpp!ZsT2GKa10;+Tly7xt$FQ?ZR50ViGnue`9>tna2mEaZV>aaj3U&;Xr>UtiE z>S%HIQdel)|4gwmf<~a*Z;fw2+STI9=|4ILe%ejuqApnVocRW*?;sMd)$pB5*&8#f zk^llULqkmag9@pV_)ZO~_1VR8xOy~ZNnS7nLCQ>*fh9pb$mx;x1pu3f{l~MU{?8L(?2Q^*^UFDvq(3mr=4?emt<5JJY1cdB@L`L-KoKssM zb!D@Ns40+0E3$@$)AE2Dpi3dEIb&~&3}4)JZd#foNCY9xu(Px$5pAwDm2z)-eJ-%i zg;<#=BPxWg4^f!u z@*T$@dg(z8_W+>lx6wvMf71)W-d_4O*{(ks8&F{M~pcHR6U z7UUtKyn0`X4>rv+#P)HWUr7Y3jgQd*0j`(C=MTt)K_E`&FCo-_J&f9pJ2UNFh%cvM zE}*`J=N`F_CPsGgbQ+i04l53p+HA23*nO0o!6bcbS8Sb7fNvCPj)Nm6 zlO0vXA(EjoB!4>o`ejg)?9xuzVPOBPLy!CRk#!GbBi`i~zv+dvf&Nh2JinsDjJg;> z=heL`dbjQxVj)uj?1Ew556to2L(&Vf8X|AeQQ7aJ2zeO>6jcfN)vK1N&l9AJQSs!l zE$HNY#ItUmhg`a(MutZ-qRKJnn>o#~Wc!=3Cr6tRo!J`&FIw!YrY8c{-bnl=s6&Zb|mipaBKN zg}0Yi0%g#>59YHCYt?PSTFh{lUKLoKyEO|Yn?rXkHa?L;Gc5xG2rv$@Q9TG$&*(?VXUsAT_-E9qHwJh)IB)Hg0k-HcVrNq6O51q<}fk4QT%kIq?{!)8rp0pi85(3x!S=MgL5*Gn+R zNB)WC{&hF~OCq{mCTveL1=OxT)Y*GEhS*W3D;_-{^CB^4yi1hU<~5+FyMrN@CP&ex zVfLm&mSPHPfS+WUZgAh14dqonZK`Dd;_iOA{eX_Gxq2i>wL zWJzA;!W6L#gZUDffxcg{R7$-?Byv({G?xY`RHLAxAY2>LR|kha!+S@`&*I;s@#knu z2fzh=nCqw{i7X+zQ3%<9GXk zs-ijNy0^g%@RP_;83P2?%DLZ!Ui+vM(gz>v+QZap$NMzRlPfOWAgNSc1B-2)c5AQp z@6UVTBtK=`P{qD_3P{7CJuwf9=fZc_BR&_Y zqzuyc4EH#R)3*Ax7L&Tqv9%(e)s71)JCu%#={6K~9GRA&$=Q`TmiFx^{;JL;TnYH> zJl9jMeBhh>9$>lw=FYtGFZU#_F$nuF;(V|zt4%X*z}9)}3a5R|ISp5Px|hjMrq+1@ z+FU)HNUGL@K0xx!8wKM$qCutf6B1SS0(~z{6IP$PqzKZc=uMjTRojlG%yIACOHU!( zIlEd&uDknJQ>bP+YYs>(Rp+UDwsh51C(bdh|E_G1N_xI)-P`VL0d~xhibD%>9$B%) zIFVnaSQ?v3j*lGr(44P4LUX_fiuclNV*0K|Gzs_@6SbFO$u5%S(}|Y&+S~U^)kV;? zgzL?CdhQviRB2Vzz$E5<3G^jT&8W?ale^Q*W3lFn$MX%atdl^*Dh(PewlE$Z67}l4 z@|K#M;YA%972LR$C&1CmHbXsyk=J)2PJ(D9dXQ(p|5~5c%uNPK`!Kvc;tf>Us=bhOwS zs3z>BQ>!y+-#i+_IZZ#le(W43v%=_~3q((rL7M{UR7s|yt%}}~56U(Y3*hQt{5A&p8HX?znd2xc4v?^7j#qcNz;BhnaCA>yq?Yq*4}0=1Oek82K++v~Z0is(x*esG~) zO)!|}>erVCmHp$bQqY1+MO^G$BAMrK8m||iuX7Gs301?dKpt+>E$;1|R~Z$_juNeD^Szsr2d= z*(WYwwLZ5?+JSalP<>9xIG-~R>aauEcZo}oZE}6cGD;i8^`mLmeQEdUCh?tN&Drs( zVj{uHB~>AdKs_uN|AdT0`kImT#P2=6EMaSsG0iQ6<6<^du2!GpJZbL~Y4gX<@;$<8 zDRISxDJiRh&a-{xQ+6AVu0uy+Iv1K6Y>9P2c@~URPht2ewnkHIUHB($KnoEAogtJB-crQ2%9CH72t$#w1% z$kQlf6Jl}@J#JT%zna6rkvGF{?Plh!yX6}GM~EnWND$fBsuE5R?T^L3QcHY~BS^Gr zsV8!J@-7ZPwv>H`Th4b{xB7OM(e@lVRtW8c?fGr*ob@dE`Y7hpr+sY}U`GTx&B9&# zD7JA2pPF5Pf^FX+r5m)kPHWC6>9wxU>Mao~=8`wno1f_UY0r`XdkI%XmOpvoEF9kp>Q=QT%w|U}C)ZkcrksAHB4gEHvj{OE;Td%Kji+oYSTSkbB*7?n4P34KhLY58F2ndG zd!Y#eoP4xZBkJ8M{uvKMKHS$RP&PTo8=3Ps0)4x`>90++h=++B-4#pe--V+ zk2aha_V!qBOyG@+G*@s|=Q(@C+_5*=J6NW5c(KNI{ctY5&U|U-P4zEeyu~=w@@)CC zv0;Qc?JVvV4vWdQB#jp9B)a3XaC?PwEShLfQ3{!b&6^3tOQqIhR|It(EKzRL14FQg-{A=Sbl*0&Q@w^z?IX&;)n zgza5RUMUixTl=k0FewFaQMJXr_8z-#A}H+&adsO|MqOpaJj%MQ#J7mkA(tYrskhE4 zqOBdkD5f>Mc1O5 zN>8uPwR;9h5w!-!r+V*`e5MKN*J#3>A~b2MyPeX;rSY}TQ#>8U4$|v=8(n$vc-6xn z9Wr0qoBAL2s?q3wGIc#Hxcmzprof0m~YH zd$nD8mnsszD`~B^b-agA5We{^pBr__yrLTpUi+TRM}Aj;){NNf9~_F8YH}R46;qEv z*Pc?p(eW&55`%w>6Gu1a%h8u^Qk;Eikj*(QPR`(m6_ErngIok-_sv7*2=lo4^ZOTb zn=~?bR>AmjvJik%iHO-`XTLzU(=`eKOD#RTDef8#>&@;>@RvX6037Rx$%nqTNTr$Y zqVw$NS-A^8)RUhNPanXm>zd>ndn??a@47}~j-yh>p4l@9jE>;Cd$mag6lb{ZOsac3 z3|7quV8}0#OCSdDgIUqE*KgVY&?*G5UzEEA3x9bAgEhRb^|Gm;;F^TF^LkM)+M6QKy=a(Ie%m~rEOw%?|fx1O)IL2*s<O zhV?HIxK{5EIBaG#H$*H!x~OsiF@aKC;V0N8wJ%w`31uILEv%ro7t*(Ry4dUQm1|I$ zWP!DT35D@@E@r)!8q3jq(sX<0AJ+L$%sg&;PGs@z4Xn)IrpdQ=Eh1Wdgc(ti9lreR zv9;vX(}{UT)OsZ zM~Y@qyx^v-Jr2zl7by&g)Kn$Z@0@A>d!4hd3Qf5>RXPN^<+(A6e(*Zzn z!*ZG37ivQ;)ykiJcHQsHLGeYEeX)IkjEPTyX$S`4NR9l&)>aOVN)B-T zMgL`v=P9h$M4QR0I`&_)XdDI<lc5tbHUZPMpI^k7hfY2H_odq@3&@-G3g zkrnVqLU$%>G6J1Ng$2n4oxI)%;-0QMSzQn@suw2W~-ldA90%}azE-hJA#u>I@?qWwJ$s$dxzk}%sVsNr+f(mZw5P}p9mmmPc50P? z+t%*fF;SJqAVi`gcU+PDyx{&4qRl}o5?7VcD^w@2m;1zpte+K_fEkkRtG3Y@`_ITc*)hWJ@(n~Z`!a(W$u zKX~47g;&hc7KbNlox5M=wc*xT;b8Uz?0MF_c*#Ph6JyVp6&pMhH-C49=p#q3=uma- z)o5;Z1JLGepDrFej0#=t9YWfc8Nxl)xHp(u$(kQn?->Ft9MYC^zyt%m=kg0KHiS-Y z`tG@pbF2YJBl<$Fupic+dq>uEDC%;FWq0H5tsx)XBuxIs?E<~lSmD;yNmu(sExMld zf?=d8JRrW<)@K=`bD~m?mW1o9E>^Aq)rLboI(bh0<2S!{AU2$bHpWAn@p~)2$Hmm& zsB&}DXljXEDD9+7{603mBH2IhF^1z7;G&x3lDdnIpI83^yzF-JLch+g(_#$;D~^dB zj?3WlCb?BL285~7+M0rmlUk7$N$tA)t0V0b!!?rM8&vyTz$D_7wWZt2Gvbop1hMsY z9g!rRb1s8)e!4pKcE$i4t#X)RX@J~&^E*&WX|sE@^k}aPe-Q?+ueCHOm%e9BxeX_N z+x7av3)}MOl}DQ=R8*m9C4V^b&t4cGva(4XDP+PZJB~-03U_S@nvxf90bVw!qDN^x zc3ARuI!c!`N!)Rtu)GEk9V1$o^v<|QEz(C$GB}OXOR(FHtNGwJjw9-TT&fCJ{iOCA z;IZX}fWwtmCPrF`>h(fE@2Xz6G(h!p$f#$jvb!Jg@24TClD{<;RuiQx<=De8>NdlZ z%4KZnb;}%(KDkbGHd`E7DTzTH`VM_rKQ7e)c|Qj5e2!(kl+$@eiOU(ra3a?O=Wfu? zHSP8+QAVt<@a%A)n%Eq!xN^RP#f2%85bIkE08u^Q8VuyMTd|?MokNsJ4wCx4Q?Q$svX3@cTu}dMSeIpFucW*e{mJ zz7J4W%cYd8Uxg^Ie-4YZ(k3s&B`Y3J2f|$+Rd`JZky5Q&x)+C6K+~4}ia@2-zRHY_SKxB=UI6+LLB&Gm8aB@($Fkj@>o{zPkzn?y$p={W3m z<2l?*Bhalu;-n;I-3PX~rT)w+cJFIltkx~)NF13kRUi0%d8ZcM8hfo|U=;d)b~HIR z(JhuO%DriMelYFIa(#7?mg;dep3V!LNfW}b^M4wsAyKbR5IN&%KRTilPxyOv3)Dk` z59oA%`U7_KH^hC0C#&!Ih~u#=K@#hdkqgH$c11(0N;Q&Pm*KwQxlU zX#|qi*e8NSHp*-2*8G!jB`17YqRc}OgFQsDmt3hKpspCVY8rnasaUea0I@ATJ3Mp3 z5@kKT+GZxTH96kG0~5<%h<3c&X^fDakZn=7!IgkmuSY`^`?~{?{ z2bM4A&)>?rXbNg4!8#;YG1po!z)rT|t;3&K>vsN_T9XA*TcVYqWZUGP!;t+DL!8ko z?EcHN9laBmlGTUpx>pycjK^CO7u3+-k34;NQisn^*inMSmDBJwk1FPpOaC_QV7m_d zIhTBbA;~m-SueL&MhhZU+P!-%+uAExigJ5-*_G6k2V2nM9-MO8cpkHwvLjU5E$^$5 z#ug5v?30$1OlF1B$dryA^}QspCBEgV@u>b_oVhN!qd=~mhBi>wa?fR~)Db=R56Zn= zN0|XO8sx7=ox5;WU6vp1#HCDr?IZDs0PW-~+~$@{q$%+ir1-Os{e7AQohj5`6NvL(czv7m0HA}pI)4=B`T#-N7Pxb(eBjktgwhRxUYVR1myL>=i#GQ%Hp}~ zEmv*mwH)3KBXx*$2r90kG0;}OGC`2&g}=O#z`W7=KzjtprE88*kILaWop@_YfmEB? zc#Ah~rY4^?iEA&COm2S2NjM8aE+|k*o~vkMR%Nv8`~boyWWVyP$4unbSx0Od3*0Eu z8@J_W98itRs#n3HZ-a*eKziUC!1 z5DD+4Mx?C@i=pyD%qzoqKf-*WsJg$1lVoRQKpxi9wB&)}23I0_{4FPv!XfH1r|XmSWHI1N)HL*fXIs_0ch|a#%%M2j zIxNoMa>OXjQ!EuP<|>!<9@MuiQUcj=5?jWU9sj<{J9A=TCblT^4RRN-uoe1<8StWE z#-3BEZLxlFnqb@eBkMyfQ7R%pGTz2wLw?C~NxSAD2 z&}(h(a())D(|FW;u$|{-);ld2xXBF!=TW{S1%sk-AovO3lWxAR^DnLZ2)$l9#+7#x zI!W#Rqd2s(k1~F54rulQcBIujJx8<{UGLm!juGq|o!C*-!J&(eOT6!KTX*J61vNBGOpvei8moX<(_@|C^Dvddy& z#%tXdXmRQW@qcnnPhf7Ip5CPQgh&KGf8hoB21P9^E5vo^c zo4UGsED4pXFApm#T2uj~IS^=~<=U2XN$7fH$6a|f)kpHQZ1|l}6`4AVema@`O>H+B z!B_2)BwoMj$9OD%-(|PhU4MjR*#euISjjYVoQl@x{fm2y_(r_S63oNmozt0%AzthG zfs+W^a4Tcia0ZQi#&4CPDjW!J$mHaOgS$4VS=+uxk+*I~G9POA>e{1^OJw)}Y$hgG zEmtc!qP|W^rTeKsd=^)jMU^9gEC^bz&*FW*gUYXjwne}xpLhbeG%Is?H)%r^GxT2- z)pst|7iq!>g2l34UoxW$lgM z0d#%a(4%W<~;H_;L*4|z4Z+A=GiYa{#Td<`bC`5rC zwBFzWhx3(oj0p`|8-qUEYyh#Og%e$iSKjPyr-=sHR1Cl=@u51M0T}~8;xVD)(Yg+K zvGG8ORn)X;&b`0!Z2mTf+7UCc)oVL$lOa^g+kTCl+dIcR@)#|l;=g^5f7U{*|0<)0 z(BNn=xviM`>xKXKj->wIEg*~e|Bb@`Powa)TpN_*ey%_Xn>`xmJYZo8Cp^C%d-5ZD z#;PZW4~RyBKzYjro&kE(?SyYD#32)qo?j=a=QIDPmV5M&_n%h;)lrBQkB_26eL?gN z%O^OLX?r;x2a@xdmzdl>2d$^K3K628&1s}_Yza1lg-nf~Cue$c`4PewvXp-S&8KOh zW{Y_+tOY3DO5+gkLU`VO3PZZSAb_qr14+jGGPLl705_L+yN{SCd>LzC{E@woCulp= z2b{o8T&`9(Pvg{BV+1$iE7A-^r#UZheK&j&-hWJHZ5AW~!>{0k3L^rz8#K@N(QVfy z{~fTNB3^!Fm#;J&y2=4X@$vn3f3D?v(Dre?E|E&!#XxI{Fk!;J9)l)05ynxzSAL=y zbhdpeAL1@Jd=RPvDnK*zz?sXMyuW~6E*AVI)`C7Hj6#Fk6x0U6+L77xo~w&|K(Tu` zXA3qS2#2w-H%0=(q1LMkm9hfUJ;jH$&VS25{x_1qCmCJHf4i>S-#q>Z;gT;l_icOc z2VRA54()fo5KkhSc&!Y(%(Wv_ZqQnNyD56p_8^EE;5g@?3m^|{hTOoE`=C;+P_rU* zCFpi<4vub`0{`cB&Or%aBk>zNzuo5r!T5;={x!7XK~@n1r1ycj#fJ=}@p1s>VnGSi zg@`N>6(G@lWgfUqr2%td>dK}qaTa$ek5ZRa>5wxZvRSy6P?cT$sKnarVV7gu79@Xr zsQ(#j6-wB5f(*kiG#CMiS;P87%a3g&Sqr}D{9yEnjru##E1FkEz3pE3)OPAY<~{{D zn(k1glNBSBykYY*i0?QhV6ous@*)mABZxpmDl|SxA;2{Y{eFZ5HD5Wyiv`7>!Xm@`Ymj_0xd#lt$MbcJQWNAJ{N46tuDg!iS;`m$}z7& zqWKQqI*k6yG-_CHSmPEyS!mENxTB<-V~oI7H`dyN5S1|wp8Ms^GO0Bd#4{+&*GjYp zA?YDo=>v&X^D?bjOtK{Y*broz%>Yo?m2JR*l*Vd#Iu_hi%y44KIOu%>bM+&YdEp50 zZ=K4LNAdQ@MC=WE?sfEe!TAS>-;ik-T8Ix(kD$(zpsUK|=nBPbpHml0ytk_$+E^S; z@ko_2gUY)ZM4Pk84oA(qHl2(9E2CU9H%;c8UN7g`@AtXYlO?B%hQ4N?% z7Ye$fIkCj($0x2tYDif3onv(7{!(90jvC`M{{dz%cb?h&5&l)RytM=&F7KWw?K7fa zG|;K`sBq_Az6D1*6JQ9%mn+XC{N!gtO(}F_00_&Sz*UT68PCqIF7i>C6Tu{5c6KAj z2`=}c?l#IM0CgySe@^*^`O+{J(Ze;I9R_KS}$AK(K4m2OLX z|F$#6pF!<^0}O@^1OuPilkN6iM^qgA!lm1OvTO(oU*eD95-W8v&o9aMm@V^wXIbt? z(lP=QgC>NmeuI&FR=1$ABf*MyGP4&(G%ojf8T8B;@R+C2KC($tqNSrZM2!uE@i_dD3-1Lrv9mtP$g;wUw{21{`ysr@L|2G@Hh6iw z2kyS|S|(WgX!A@woKB?hB^`um_x1;$>OKJy*SPURanp?0YH*Qi0xp(WhPiV*hE_?} zPHe6?OgnsO3}$2VPY;I)MBl1F*ew58B%Lan9TrBLKBL)LW4Aqn43Vrf@rx&%_uYi>PBU<7?BZz2xq&?_9tPQGrb{Gq^N6g@ z?;8q8e!NY@x!nhub=Zobz*~ya^{@5ql-vTWvas5GUbsUROFpuY{oMGTi;FX&SRr zLDwC4nyI-5vQWqfiMC~0;W~q6JfOwB*8z?iGwt>klKaO&VogNSh)(l%^(Qf1^PPovp3@U*BCH%7j*mss)fpw)AM8{*ahPjWy zid(Ht9y%fSG7^A()-(d~!7}#&(gK6n+%+^U>qF6LjtZIjRn$j&vwhX;Apx-X!G za~s`ixq?YTnIyj~0kmsQ*24{$WQXwzi@jUk%PqS`8ZEZAuA!af3^Id^S-E#hQWcqb6ri|=LQvrQXd6T+TI=07sroAKa+hoQ`N$3Wjkj}7D$s$A)X_^52S)ZCN9C{s0%1$=%E z{lL#vxVAfs-jREjLGu{v;DNNjRe47;-$F(-;~6Qk zy&>cxQ$y#s|0>`x2QK->^V>U3fw#NQFO-VoF?S4yi^7)~RgvseL<$5M*qdd}qspoy z;GbqwY0g9`$8`)Q)Z=5Bi?zr>HcKBokHIulTm0I(CY{PAu9m4%E6L=bO&$NT3?v<= zr=Qk?@7*2;02>LA3SWt*m_NxTFap8|)6MlCLV@XNRR)j0bMC}_LhR%qz!VHSe~5c| zF{JY>L0LYTi+Vw;%yur3_Zvvy9hyMeYa@0kIln2S!JPF_GG=BH_`<~{R~|CkK**`d zj1+i?*oui07ZBO|w8wcdTX74XU`AnH1^bA}EP*brgBL&F4mni`h8_&*sY-a)B=h(t z-cbJTnuJuxv>!^{8Wwy0VH|&s?jtT3!z?y=F{;;~Wen-(rw`us>+gNeoK(q_Hg;8f z1-@nGsZCi6VAVrNeIVKx%pll!M!$MUjum%Ox<&`M=B85}=|W6Tt~Xo{I^2d+W-~bd z3ErgOwa7Dk5G~F_mK1=S1F3Ha$I%N^#wXxOI|dQsx<>Q#2L~d7LyU?OaXl< ziwciw%e)#B7@d`}Hx{Hy=&T$w#seNO%&Vc+D);dYq4tQ!-C$AT1JO3TbQR(&2ZstN zOls*00G~B=G9imA@Yr-m(h8IiG2sn8p8ss8$G^VPq7@Zo&2h+?S<+)GG(aQVuJ$kU+cIW#FNSo{9qQ z=V7O65a;d-nQjQUGZ1O6sX8zvbElq`TP+%PiOdU~HQwGJ=XI}|lL%+loC=N5`wsfM z5Sh!4W3O?IQ(!&7Ab+20KZC%zKthZ;$yi()VVhL3uQ7248g-G6D6vV8Me=A{zia|2 z#xU`ii*Jrq{X^0%2>b-Vv8u4kVljNAhfq!Mkg5k`z<%VUTdGVq;`D&ah*Q%?96198 zvQmn_Kwk1>(BmH?3^FsmM!*nMx13qQzurZ~K;gPv;j%q=3hcMrG`Ld2^^)%2f-3TS z=nEZ;mY(brib!ySd7*Rby+7jZsg_dpG4z^srLjx=0D<4^0jBr`n03geNxDdACf|Ti zBSfa(@PMfqEC$~Z_&|4do|+5s6iJm7kOVgTV~0W^>O%}pb_!J+ATl3t$2!&`3H$hX zOT3j%;2gwV2?bPBT3crEASjHo;<*DNLeGG+qUvlU`vNH4v-`eWzkW$wGshdO2&>j$ zI%)Z+iVat}2;XCN%M|Cu*h9KnGPtU8@|tXM*Ad#KCxF;4$8|XCdoFc5uZQyKHqKss zl@fB!cyXr6M)>SNA^?N548s*TZ*DDOiYb@n1Vpc(+%??F75BfarT_Zq^YtW*SHj{H zBiYpP+i?15UNLHWUL_!_YhC8SQU3ZfdQU|VaF zGt-B9ugE^qoogZyMr24ZrEbEVT;ueAva9ZvtnX-Fp>gxqPj7>C*$Nj5N^Q^!5}twa z4pX_^4Pe6<6n~Ie<>YHbZ|MO}SG8C*UR?NdAWPARO=OtxI-j?H2RsO&{ft7v$MCxQ z5~u|>I?8Vt^TY9tscYYYR2h*STx~k;oT0CGBgga@cnDfP%$i5eTX&M^kB7-}G~Jpv z_vK**q`-?kFp!^r-`C4gb}O#*l^IZNYF}X1kPY?QN0xQ4n##ddI?ris6+9l|n6iUN z7a}_ETo>Hly;L*&bTV4?j(UzpyJY;=IYcJHkz#&^j&mV+_wj$r13q2dkz9D}eW&2A z4jBmFXaftn?VW3#6~PX@Wz8zva1NwhzZeh?E*(W=CZsivJIewt2#N>U#FL`Lj`I`7kB7v-=+fOvp*OF1 zj%GU|{BCoRl0d>~gXX6MR6K-|ea~NgzA62zT(l?cdEo)|Vi*R*H3p&&j=$!|7W9HR8?) zx>7gWbN<_pvSz~_nJz7!6WMzQ=Hd|)W5o6|anQh3{Lgm|o&L8UK$117yhHHBB}a{) zQgI-UJQZ9{wtZ)0ryvGA4{Oc6{7-4!_Oo6WgdI31fqC~H9~F4g%Z91c+ZXnihBvNa zN?5z|yS#Aw2av_{S`co!LdZCno-7@_HxoVoy5x{+77^g4)szqV`AKoW^CTBw{+xc& zF#R+*_?tbY|F4()kpXU6Czh|C!lwgS3oZA#|D10I@T=q(e+-FkzxM4X-F}1HK|x9l z$x5cD4DG4*%EBPi2ytEdbzv0_s8l-@Y))AI2-WNnmB)Kfah>H~q*8 zZrZ`7{>a%~3a4QtMNi~y-)+)u7$v&TA01{il?}il$P~CxNRnX+wXO40@TZNofTJg` z&mwyS;#_ro)CT1FqmT`}n)|x{UoR|m0Ettz^2V>JIFMWAye+c*52Or{Suy)#V*W|g zb0~J2?;kqxvyUM78vF#J!<0lhZ(0Mz1UXshv1i#0NGM{!>AX_6x>NBTsEY)U?gylQ z0>I^0a}7ocL&8rPH_!TLCyemX z+luttv*9Bzyse>lF}Z}%U5HW4H^^`ZNH$Om8}2Mw-$UNe^? z{*|h5CTnkj@S+(GKb$Su8?x{CwSL*xmYkPk%Jvt^eRa0{wplM^H)0LRpV^7sE>j(^ z07K_lScqZ#Z4~TB_QF_Gzd|WiK^Qyii^po)Q~xyDpE zh^~(_^!KJcgiot|9e-Bku2OJI{9#}zDg6yPQ3S9Ge1RM|dJ)Vg#({aAh)@B4c1aL_ zZ6$DIGxB?!B;>v6@vTSO?r1t4P-TMJS#-cA!5oZ{t!92ibd4ZR_0VlQ&0Q-FUO_}@ zf7Cd%wlkhB*E8CI<9rSum|&knoO^-x>#sj->kVM@_~R?gd_WQt8c@@QqBZKmTydu& ztfnB{{6D~XP_R{U>*-GkIigHx$ilrrSb0;Sh;!lKjfgUvLDM|Y)mFKK+Bp`Q^@H~x z%TyzlRu5*H_*>7MQbZaXAga-< za?Z`oU$bgU^0@#M$}`w6D7xXOX;1iNIpa*-s!|Khmw8uO6V&GS>am!P<{s+qcF6jY zWo`}IdEwxy2(*=WI$!U!JAp~YaFP(@OWWb|yIQ2drN>==5$cC!y^?yQvES+mGDOq$ z?_Zq7Mvg!pCh-jrhQ2Sr1xPmq+%3pbxaoli$M6)QCG`Re z#uOx}U3_!qJn+_ymvsw(ckHg$x(tP%&E`_Rx2&!tbST`1M>m&+`Rzt7rY?S{Tuuq% zEn2vTG$z-f0VOwa7TO=!LZeris};pzv;3>@7y|;M)Hz7QGZ9~sT=4@cb2OA<)-SPz zU#=A`h&~%!l+XhW<`3v;&N`4*;s$!FFbl7fKH_@>LuZd{tX(r*1HCI>AZ7MzcO((? zO!Nlr$nplsafLc(DPcd|hEPBQK$h0xUwZ5aJ>&aM#~G|oV4a*c5V}90xmJtJTF?-K zBwu%SA!WoNblkC(rxPQz0yl zgDMhrpm}qXy-IFfZt=h>SQ1!yA6{zd7L#5Odxm|<|J@cdteAUfV}W90VRyuJwmpNW zf2df)k?0ch8FQ3OQyx|tcZUC^?S1eO4-!B54~ITJS$Z`gZ1(*}_L>z$>@W^ChRX;0 z7i&YiKG5z9h|;+!FGC6|z5#2!;i=AtkULk^;RHr^IMwbW#}|uQUvksgzCty!o4r3q zLl3g!cLfCv(OjHgW>*!m?0P+?wX-8Vr;FvKaqeY#KiCE0vj7)JOL&W4hI~k?gvvi<{Y~I8lVE@UL8At98)1A{Q(G_3kPI9t#}3H_NAEc*oK7nJV=7;Wn^#d&P?^DN}ELMULt>-@C zIuUc?;l=Z+XJ_y3DgstsL+(hL{9%5hm-k=0>X%R9PabFp-OElP--q8f;$AePK^=XV z;e_A)LI5SNL~pHw`rPbf!vk<8S17@p-W+Ow!jt?~J{g2Tffdez^r5fUsb_RQB)0a< zoomgUmj$&#PPX|RY;i5NYb@{|A)`r!XqWh&kRIiyY)7?c+Ud6%i{$Ep`9}H_#Ju3p zguZLgDrRgDi(7R|nu8$}C;_Fq+90U*t0 z)M?0s-KF9iP+6zHfdxb1R+3cBAc6~S z>^W?E#^d)H_y0!e|Bc+g60DoPQfD5YIlVi<*pIT&(sOND(0gM>zZr4uK+xXQbMk7B zWZqvAkSsdLjJVX^>-3#uq+=Cn; zg@GTX=$$Z_gck7?9d{ky5s-v7>u-Lg=T^Upb5I?H7Of>>ik9DbFU9(TW;T%5)o#K5 zE#3?^$TnShv+p}Nx4i&>c&5dNZP3BcaGeIxG@BI3PBz62SQx=6%~=QlAm>{oCd)$2 z!0sc@h8(~c5`4-Q`myH`U!FN^U5E@tV(Rn^^U2|?s{f3kvOI`(8^5uJEYU@$S|YDDNBeDQ9Yoh`J@=yNG4Vo|oq zn7Wude6kn1qF-Kdue37=PPn;b-tp{}KjjV$qgi+Pg#}Tk>AuXnn`=@Fbf+n@^9!s_&K~JD zi~bN45SWlzk}+|OEF*=3^pbi2pARi(H7_-sZ0bq+F&?xLdm?CiQe=6J+|EG;hg2gHKLh%R@6p~;(;e} zU63lS8;;(v)R(RKvGu({GUrVG$_&86bNmYwAu)O<7^1fFlq1UXoH@6XzrU9P?1w*Z z9Uy(=z5saTN2DCmiQ%l@PPe5hsO--xRXFNN#ji@Irb!3f$m8%YIxKopx*K4l_@W}* zQ^`y&lW(AoGE0v~&XEzVZktSLozf0Xx_;>mJr^%oB8%blfK|RAuxv|w-@uN~M0*rN zmhw_w_7?7AId@)pU1{pUH}?Q<${dcmI(Y>btV7fH*s%HwK0-g z=-%P#D!ozQ>|$ij&@f7NXLY;~eWRqRki!v4El-oB;u{jkHhDpl_lSw&#Ku+cOK-3f zZ&f`icwS)wUX+G>1 zS+2P?<0uiQ*T?To7VsGM6lP~HsOx)n%kA!Ri`39ib%ka)n0E*UzROtb_qu`Ec-g*B zQOVq~otZsK;T-ny5oa(U*Zg9=IN7dN(BTkvjlGF~dcKvOVW~QN=$OYr&iJCkV|CRt zUV!|pdD&z5b+=X{%Xxk%$u7J|Qpp{Alk>R17$<2Mc$i^nlLGZ#iR=Np-Hi9;m#ZP6 zlv)2Ddv6|2_4@vg?p+#aBuXTO6&8_9MN+a1%eYwPsZbe0W)ZfcSgd5sJS_8^d8WZw zD)Uq*lqn=r2)NX|yx-6JdG7mlzlI^P^&4_;?Jc{g z$$(S(OFM+M@SRr)uJDK!(xOw-5PCv#(FtF+jac^O7s7iu-xWG##IZMSPo)g9Is!wK zye}p)9-X!V-!`vZO6~D&NMNJYFUZ{R^4Tc;w>Dy(%6Oecf7LBz7qr2#a3*%hKPlO2 zb(`*N^T7&X&r;afFuEKUxd&4G&xOfJPlXJW}sSExT`u4 zL6I`{ohPYf|}ER4mjRpA@))`yTPWyJjSLp%aJ${HGLF zG9F-l!QxHK>yI#nMQI1c{bYN~=Nd zc?^EWa=F=q-~^5tZl+|m{j2Yks+R7qAf$_YL9fE_#pAk@@_M=l7_dZNp+h%VWU)uA zIM}mR2pkyxis3k6T%A4TF{K^gutQAl=Ue18VG2`h-W~fi(w8`~8n9Rm93|CRF?m0{ zMx0q&RfSpJwKzggAiq%f5-%y=troMEYrkG@lcSWc7EPj=WV0WHO6~r|MC37#7B>e%50&Hzq0=G>pkt+yqwSuD^=dekqN@|er z4f$;m3a$R#E*=u4Ig(9cI`9m2rIGwO(uF8|+9+qf?vXPfEnZ2kU7R`PheX&nJWo9tj#SCi^agK)4f7?bmqL_Dj{bAs5o^7nvw5@#3f9a0mPkmti zQ0$-27C(U76ax-vT|V&yp=a&41T?q0`m@R>;(mKP=Ve;<5`3^3aUu93x#7pWE-&|q za_H7WAX1Y)u(Xz3IfYiuMGUSmJ>l!_?JU+c#CxYap@w6^ zTSihU+W+pCJsc#bWx(d6z`X2zXPk$09hwwg)Q``vVYu^}nk<&*Ye&MS5Mw;rSPR0$ zh(X_f`l`bofHdd2!t|yE>+wp}FCEmBffdTMq73<}=0yzCXSM0iE3t(n>uUWpa|5npO<1@)40AMN z!sJHq^7k_RPntq+ z%Vy%96M>W9!paGcuvF6K+N6EhC|8^A=Cez**EFD&T8K{ZOt=jd%F*>NVVbW@$W)D^ z6nusAt#23B{`n!!Kp3xBcoCJ?Ei@rHE%^N0*3E3f11J_58Gc48Ng?E@O1ioON3%iA zZCXvUg&i-U-;4zNsqmvM(7BVPWf=VU_!x4R);H+;RNKmaQi|H~!a2ii4)Tv3>|#wR zkmIhwUTqEK# zNQ(hf{`}?gG+j}IxgC91W3|^XIVPL1)l6!es|}!_C-$1-4y~7OfYFwRpl#{Af!W^q z05R#z^9Kh`1-Rwe(W5B5qE;5v>d-f$c$2M>Z zU}+P(SdFV3zZ#9CUDaUao6hwlzjtaIC;~^FAL(+QGf^K)52gQHoMMwm75nV)bXM`} z!#gqqWx=#e8k{YaGhlW|l6EFz+A7jhEhOVwBU+fK1!WdlO1x>A-htENn*PMVIF&=s zChEq)w)Lwu*1N%>Dp0{S@Q0MinSIO17L?=V7sx_`)=^2PPgw+{6_u@0D4DM z8`j@0Fj4O}g^}ixvvd%~B**LH;@5x12)tnm!5GIPeDZM)l+1;WHyDp>ZEZT25vJR5 zPzJ7FxP1CKfO2z8xsEE?g;2g`B;(EWA<2QDtHOXI5?yZ=PrpL&BKzSPfaMWQa^@+) z^lS>}3`7fL7*slq{y>q5$iJ;JFWsGwEn)u;siY-zsLLP8DQZUS;4mCuCf4-j_|GUr z5hfpnjZ+|9I$FkM4)0eSwEEQt$9g%D(1@AI(J5>&q@!oU9K@f{pqDSsp={81*}y*u zzh8Hr+{hq*8vK#-mw~oc7P>njcN(0#CM!Erf-hmJAlc-FF!Rd(g3jtLu%S)8Pz^C3 zWH!@GDj%7ARfo%d7d#v;Q=c}*oInzYIl$U%NKZ)M;Am__=HF*1@F>LqOw~VzZj$~$NPgk+MDhk4=6~6t_NqVJ04as zQ@la;KAJQ_`$aqe8dn-Ty{7j?i8U+&x>4TA?Dpw2DYLz67x%9npWAU|J!u>6T4+Sx zl0zOafGe!ud;mEZ;_W+C@>-69RcisQFUB}aGDq0RqSIB?RJD3mzj=WPBJPG=?MeGSzj&?9iWd4);k7vKbL*ynj`7NvF*P~f zbEBLg^@IDlxZIk_6+6-rMho9>>nJ4ScW+WQ~4CglKuGfz5VJS2KN3Wg>(5jC<)=y(nfPLrtX zsCD;K7t4I@x><1Ct#ak-ucfBixSI~wflVTa z@cpSF330lVqEi|)m(iw8QUV_IB*$9rypLE{PgLicY{tx@$G0KLId7RRg&SlJahYOP zv_Gu-hD`RPcsS4A&hgBb_i0UEdRZ0tvPSmjve&9+(9^u3J$~=8VC7J7wg9ds*A!Ev zq^C#dQ|%mG;X;(ehX5Tr`ggL&@629|j#*n!OvW++{$3Vc&(qjrEHY$+^ zGNp3KJ5zkEbLEnQVot5dxBEcTzgvxX*+9^7lBidYQ|$*0#vAa&p3X;(o?JdR!5-jN z=art48jOZnfO7x0cf!E3#oqwI@}<#lC>9sA0LL(F6(Mw&=qK_4`ZzQitswVDI$ zo-(PhU(Mm7q*NF-)9?&a)T16?YNI%0nWhl!#Bp;u@Wl0mo%(9zF|G3K@^@`kBR|1v4yZP!*_@ zT8?Q^CIDGFaz3>v2@7cX|6$QFs3zqC>$Je zqd~w?cCyz7H$e>5pnmPaJ;fB{ecDfl;JQvJ&T)<_qf$uimV0Vcnm6PRu;7P{*++hd zIHNw=q*p$&*=oH0whX<#QT_b5?UP>ODXJ5X!7PcX&|HLZ&tK;hs?MiUlY4*TAjw&) zuIe;11iz;j78t+{`%*4%z~E7)Z3J+U1I(8N3~T9vgx&&>9SPOm`+Qg**#Q424~Ooi zY=o9{su-|j)vUG_2Wy0G6YrC3$?|L@5{}dp@0rQt9O=o^(Ka>t>*joQm>&P`Fttw> z9w5Psb}TIf{Nl9%L28lrD|j_Jxrd%QJ1JB208^SN=dqxk^8UWS#bBLAfy{?u9Cx&X zIJ=yIG&QYHUqMg*<>;1?;?Bwm+dE*6F_S86S!-{&r`OfHg@Y)sI$gX>+@Lwni?nU0#Ktv2J_XU)R0>ZSdVH1jGHRc5>j5{I&Xgq5!{5 zXf#%9n=-!r1R60$*A(mTk{$y_kn+LXv-|y~o~MVNx7~j9cru$Hcz(~znCI8?9SXL2 zU=uX+w|lu&{guPn!K?MtVZT=q5Cj$XXfpZydCZ(JLS6W4#V_6N@ZavcpWDsCoOCv; zVUT@e=0myDI7C6^bKka~xX8#ubwbqx)w6iu*h`A&EaR|RwS$+iP}is{U4>~FiiQZf5ti!+HUlyl^}l1& zbf~@9jmh=;`>FURy3|AuC!k_bD(i03M{pItXm=di`YPuU;dCX&1c{> z<$q}H5TI&D3@0ly^S>_FT|~b-P}n5#_l5Ph%l*d%8fAyiyBni1lhKL@E~_*jH@1K_ zt{}KXelF*>aQuI~qQ4(RUUtylX zpBK*TD)!(~Km3)t@AST{yZrb7{KENbhsyyC|JyzNuW#mc7d|f{u<(@x10qLB8U6Y} za%;(A&_halfOG4H{kuvw* zJ8W$V|Bv{T|8zP3&v)b!h0pu^Anwu0$0G2T`4xqiTmO4>J6eko^~1~GAUV7TYK2pi z(m(}O1e7}IQGUqLZHOa+n|eRVLEixqpW5awzi^Vcur1{ zc{#EA(E6glK!QmZs|zc%tm!6Sy*Uwf91W(r(SW^1K?YnDu;1%%DQ+9V9WgKk!WE-q z4Vc^`A16X1IM|1#yH7*e+tAJLbZ@&Y^)ms!sBDQjz{Vq>Az)x00$)RtUu``fe)t*K z&a`YlaN#PJn0^&pYfOM)9xiRg_s?4lS__Zwzy*%HsT_DvP85EH!=Y67t>tEiIE2b7 zMjxK%fqf?kVw>X-b>dCco%y{|Ci?pF@jnow11uZ^;^F~Si2{epGuF(9IF*HhSv626 z2sE=Bh@gP9xe(L%I^7j+MOs0vw~u zTU22iUJ-g>^HShK<@fAJ<-|FZuX8ijF}%9kdY~c_glwT>IqjnV`h?P)}OZ&)>5uaNKcv(Wg?NTO+gYNR-Q80p(I3@50t2{3j z=}izjoxB2|!x=;aLn>9J*$QC#AE`9l7C<$)j3i(^}*Lkt4^06hO0K!C_U;<41Bq z9q9^C(ppeJCX)82e<^aJS1LgALKOBF!20Hg%#Ar5cD(*jZf_;QA_=vS5;SD@ zo^Vu2UVlaZdlt%#;gsdB3U%ED5Zy+C>la6RN%uO1Qk+BQd^hjWvMSiqTp`Rg*rr7~CDH8D^ftB)m@Ff5t)z@rCv38InbG2q;)l%FO0XKfjhOLYp+(Mb_ zup9LYr;P`YdI31Zv84X@qqcQsG>O3~(h2{5Qlt znU*`-3Cyul<5;nB8BeaTbHxy3(Pv3iSsV#FjC&DE^;G*_SXM}S>p38q2|}VdPZ*+c zYLpHE{3VF2Kc`DpLymnu(j1{8xnAVSRZtC2Z8VzC$bFpm=V(R%8jbRXZE21xzz~j= zn*AZI;bycUGz?e{*E=tI4DQa=Yf4*!{ekqY1s+5pqfQAAS3GB2x4YJ&(}}_sCoL0( zTFNhwN$hL!@{NC8e&uY9xZMoOZ3kzC+JRaW-KcBntR@u~Lemx3e_A2vqsX1_rtiHQ z4o&eJqO{dQ+Yy<{T>YWUk29wYH+4fm-fmabvE)KIh5{6MAkt;*^Xn(kNR+;G+;#jU z3_(82#iJk^MDS!EwivC8XQn%Yd5kw(e2ut`;4(bRO6upca+fyHfAJRaZcxx{2iD*7 zTV!vAV^)wERtG`9kAfpZK5uras~nw^PZoll(icMAixY>LYJYxL;F$u-jpYSso=o=L zH~IGs^i}Mo>{>1U<;w!U?7ozsh)MzPz*k$Z9~FnQp{3>ag=-4c3hm+}0fO184*CRQ z$)NkH^iE77VT^%n4F_&M?HduRep8O*^IocF+hL`$W*qt;2SOXJ-ykXI;j|{5CP;;E zN!P;O(92~;*G2DW4Xj5Q0@i>)e~Gh?8~+iZ=t);Rfbn|+rZFO}QQ~=G!7svjb%rya zte)0UBOF)Pp*L?$i3tCNGf_yJ!=71`3d3s9-Z&5>2F`v3VJps*qV=KuD(Ge%2F{z z(OFMjSx$AwO%jPRxV4T|Rq1NDFFl6NK%jhYAB6WJOP_xLW9EQt>p=0DbIb#T7fBQb zuvVyES_!M;jqKwug=|RzkvP}$VH!3iO)+Ap3@*D<|A$?gk!Yk9&XZ`W%}}jE@72!F zbiaW@X-cAVG>{Lk|E<$prziu{4Y9$GZ^J8F0qtN<=g9%;sbCpmM!&LzG+WU z$f?UIw__`R`#(r=P4~c^yA?^@@T*rR+T>XjbhqRYCk`O^{)QT>+gAZW@Y~?wmjHm6 zKo`g%(R>{X7J4Dbfq?yf`_HMd$utvU!*zqs4{wgVw-@9LkrUfhs-?UUwy4c$4|Oa(Kan68K?5;9&Ig!aI%?xCr%W|@jj zELy})@*9fTH_DpWfN4)>nOgBkZG5OjCFGy~&w|zDfJ;@I@m$wgS`R{%Wea=dQCa1O ze?3rizf$w~XrmO;(C_EkDC1uE(^Hfe7&R3FH4OQ1v}+to=~VSc{Y=pimtfHkNr8=q zhi0#QkCYY)Lw;^@){~7X2Oep>lh;_?o~QP<)FgAsz*lJ7KXwSB6AebRWs zn_=G!oRvl2KcJGwX~3~ZZa|y4!p3W9dw9k$sbK$xZZEEoR`aW9**)*=ZL|T;E2CK_XC$V^(CRKd@Qc}?v zvRNWfDTaZ~Pc$$Cb*Pmr`3>dMTDjzP3JOTwPiqGqY%2IgMQ|C!WO=O*6$d#b_Fz)T z&Wyq?qLar?L2b3U#U9H)p9NejRZFkzmT8q*>ogqRV%*${x;z zw@vpL_yKN8R_w1DnD+b&@`(LZz9*{;9h5r&e=Xcj(by_;zk6Rwq#^TV8c;gY zn`}vEM1g`TofVOAB8kh5?!`|obJCeKhYmas3(t#aO5~eJ!A3c`V0y-^&{L2cX?7PX z;+!T1Oa132myZKBn@Qe1o~!<9;KrM%zRkM=?Xmo`Hk@(z6JeoavUI%Wx0LmHloWK#zCJs zC>2~J50ZnVPbpPBf*mpqr~`Cs@hZn>4Z1+vPp2-(`Kry&O7@tox6-fE2TWJKf4%_+ z-x6?EB}_xrbn8>dCE_V}e_U|LXunenk90}6sZ7o~^bDd zET*$Rru&jDWT)$Sly$L6clRDjw1t2e5w+x1YsjsyI@voyl0Kps%loSZ$Yko-_^~?* z)M#${>vKdd#Mr;hUk=KSh?s_D*fqHm(_aq*<;CcL)?V-!KtA2C6tgsGH7psNhWFNPpF4f43hJVDR&aPLv$Bz-KdwA)$! zGnBRgzTOox;9y_!ZW=Hm?QC7dA^jx^pN|5xM1ket6#5}kIHx#gcM%+TkC_l&8ZGYMabSNFcY7DQv0($S6y^x%~n_R54Qt# z*0&;dH2mV#37~=EX%*f3e|Eno-tDH(Y}G#A!L_0q9QO(lf(f!L*OO}Gmk9kDDMpL0 zQQrwg?~Mc823g)Gn*DR-jESQSz%oEi(Gz`zY16C03Vit!NyQ@yQ68gWq7BkDm`?7` zC2T3&#<5EVw!>*lVOXsmjBe;~DO9R{hK9qA%2gr6G+U04GFc zeTTCP=!&B};U-0r_=Q$8TtFVJsSYhqZF6!dgRM$%vj4d|K&wBBD^a)ou1z7YIvTJP zuR}y^nE}XWm^;8nuE`^NpOLf#Y_vJrOj8vujW1y5)5uf%9v(XR0aq{u`LYCEliD(2 zI-7kf=C#0;HDf+aSiCGF_oYy2ad91GCzNAd%m z#>}kcfbPPGN%w^D$N3bK$^J7xJ5CB=B^F^Ml6*2H2bn>A$u4|bFqMPzKP)rR`2X(O z*IYV9Xp~nat!jbqefskccCSy%1idt-mL*M|`c)Pa{@b|dsBD9}cNP4K4oQ|i&CrXu zDfKyac8ekTp#CKv8S0yK@x)=jn@gs2taO8QGDFao1`v{QVNiKSLlY_XDV&3hrAaVC z*?>TaJ#?NUQ6OTcxZU@6WWbo-6JOIk<0#euhj$lwzcuA5n3F$2DjdI_RZdRm&3pu# z?U?Sf#2)3``Bqv@6)w)k|nfr!7}L-apU+nYy|ho5Nz)=k`W#5Sqph{Z@Q0W%zs5m*RM9E(AoQ1>gv;A2 zXCWbIuJK0Gd*kgTMdc(WPf_Sm@o#;R#y-b06(&`JD63?sW1D>xDoOTw?OeA!%on6S$Sk6ho8z zRWn5}4lS`%W>n48NlRcR9Z!=f|&lN0;UwI69}W}Pwokdj@{Rw*}6 z08LlZ54Gw~d!8Xp67s-{pX4(;@UO#%|0s@ilmH^nN_+TxYwJ@TL|dQab}$PQAe|W_ z)t#mGeojeuBdL8Em8HHJ{2JIVf^HcbzhtfOD4BKE^PM$(dcZG~4r>rphoqww20UWs z$4GP;#9}P)NZP}bbKzL*j(eh=W{bvzni2LRPoAZiS>|$4Vk@5j&hX|{NIV!?k9u^0 zL)V}=BpZCq3|$e|p}p0ets^2v5z`#FTGuGOlU~y-H1yonXTLDJ3-rDNw3W^7gPu+G zb?dTE51KH#M}iAE5-j)@Sm>Ezc~kLQ+y?eVObcq&xaiWCiY#MALN`^))s-T0KD2q$?HpbZBC3E z8T3qxK=@!l%pJm%#JQP*ukT{ccPK`ltrron9hP2G#wxgV{tqB94YVg233AK_oA}_b zK4I2?omE$a0EUthjRtVIM>D z8L$je>j7JfH$2e6+-=6Uts~pTo+7ePnu&)eU9&?=GcI3^Rv{r|H%B73wu23_ULv=S z@A1Nyu0!awbhA}%E@dxPEJ^K9T0z;u%iK3F_lvjaLl~pA=%n6qXQ_>mcnx69y5@qD z_o$pl;9FeJ%`_~LFg3E z;bxF`1Uggk`;A6`q+1YnmQhwPT^(x5TVpIZy@=Gkc-^W5QUX4)98jaNACDj~GvC8=9w zma^iEvloE^Z606&+~ViAmaz^HE;pDZ{>76MC<3niOX{zAzE9E09;2<|D2V6veAApP zAEF4Yz%6o7y>)x(QK@&bMMxMEbQ9u=Wipa5soYBQkTm-w zbufV8VW^bWgfFwO1-+oFVbxoV1=!ALiM&cm7HfVC-j@$ER1>ADut0;Z$zM(_=2}r8 z{L1h-x9T-8^h~c~$ydyO1DIcL@Cr8H6Guh#mQ0Zk=hCK|r(=Fq5E9&iqNSPV;H-Hd z({`alr!!t!49CbIOC9QWm^#_$?wpT7$LgL_5_uT179~Hor!aL)|Ah@qazZ8r+w#k& z^c`gV8iH{O{xy;28`d$O7f(OeH!c}83Kk5B-2BcYxc;y6w-vN8)s8)>ayR5_YKrl@!4dxXg&0VqM8a);DjHS){A zRV$pv;!`P~{)Z#)f9yY@QjAmNC=IgPhJTZjeh1D53|{ZmMElj$-CQ)IKy$DXTY;88 z3T<^xIrM#`o$}num(-Hj95lf?fS9Xa{$t0nf1f`*zKp;JZzZjRO$Xuj@AXP$-dZMh zh&W*VmN^N{KOgV@RdP6?vPLETVk$^Ute^ZvC;0Exbg;=7-c;wp`MvwLodg)^0hO%q z)|=AYhc~^}BIpc5Vfs^EKj-te`oeyfqkA?S=of$8DqBZR->N;rspG-*|lm6R3!4`*(zff| zYH1QqKvjOYPRJhYUHz&gr*Iu>8~zk5#@ z!awa37Y*3E?HamX7}>v`RhoP7)h;UvivF)d^#A{&{KGin|7#b;LwO$RFeBiWM5RY( z5t1HEfL&OpfYaG4S7EQc0Xl#$D61VHoRZkzsl0I55wL$1!qr?c7*6wCuCtuN7f9F64As3qrpv1LzkzfQifj}D+IeV}Amfuphoq}*n2 z&y57Ajx^QdFIbj~T5egI-tOtKc!c(!?c<=OIPqJzN zJPZOHcWghBcygZ>1bYguZb$L7_%zyG3k)Ct*ML#`2P(pVb6(O;l`3V7dN=XZ!aDjNn(Ks2n7qs=CO!U~_( zD+$PiA3YlhFYGhP1WK5gcLSHyO1^rW)Cip3=GIknGJEWRn0pp+PiJ@H%r1Z%g7LN* zOoD#(3Ww^_xj3iNi-~Cme-OtTgVt~bjtK@Kt~QZ)%8lXiS>bf zIDSVmR}Nl1$C4B9RFL;ns!fe1wT=%7y^B&|7cE&IPtG{Zgu6uhyEpsid7xfk!rn@V z?mmnEYgztr68!N?y!4UWP@%A1`{ZLrxJPy8Y#Fu=gdKSJRhyj069pFSFQ9JXv|`)g zyo$+8I&oD8euI{cmEc@o|YE~e)U z4XN5s3!$Ww-*J!9o*X?5Gpg5Fm@L)fS1^dMv{Cd@{#e`8Ih7|rm#~y>}l4SDV=lhrE2-<}_fNk4_0apW>}{O-W;-lp@;G>A@Kv_uKNHVadIq_E`$(1Jz- z8L(gVK^=2z@-1Ms)xC>i2~%+{KW*n%DL4^aiQ3&sBPJ2E)@R7w)mHsu!!6z`yVgUi zlVk%+mdBlQLeu&FX}+%vB#b7H+u*Y@2kcEjWZna;8TA%$Z9Lc&(EW%a-wkne3)Am= z;trW~t-v+N={%*wsf}D3rzUGgNU*xaTAyif=0422gaY#Co9jiU#{_M)FBU zgKyw&E&w*#@zZ1AeR3Arit2!EIU2~5yEi2_<_>fKqEI%15JD?cH3_}`LG!fO05x9! z^4?wk6b8HyQfi)l(&*p)8G+~5iE~o}m8D8Yk7uW?oA%`M3n_!#4W$QYp6!&dTt{@F zFJQ$Zg5S=wOPX%YN6MId<>XS#_n zV>DeJ=qU?*AgV3PIWiX@6#A?olv^DMrKa65hOS1{(MY@mETJ2G<)guJS+1gdSXa;S zb#`i{DK})CXgTVANcqgJ<1SZ6`(2p*E?Oe}JUR@NI#}*5qg-FE;P_YIucCQNV(JG> z&TbmIO$*P%v`;rqck{G=w`X9Sgo$CEScPN`PC_thdrB5ekSdh4@)nK2W!peA_3Vun z#B^Mry7IWF^z5rG_QHlTvdbF3(>kAd6FK>a&UuK# zV=}qX@QB5-CuWf458{IJ`+srNxO5_k%C|Lw@WElHR{)|N?!Fjz*wLkX@9o==-E1&d-d3#cP^cc7>!HV`^6~!|DY`FMU(}b7q{M*y!i>5 zu#(2k__`ytWkMwz0;Q*a9Rn1W_f(MlZMg6A*;T{2i?tfa0wU;2@Dc|PMz<~*tdaZ- zIBV>+MZL1?F1-KaC+Vh`Ai`(K&6U9O!@lfQ#{M$!Vo7&doqDgya97{I4l{R68B(dCvgEo0d*2)W;1!N6b3@pBZl-|mQVC|~ z&XhJ-tNn95zH!$EET011pckBmu`azWFc}MAm8|LgeV&@@GTAMck012XNnzMi`jmDC+^-J7v1|)0c1>1#b#A<1q$$ zFthg!h!T{4fNCATf?HMjy8@B8Nwc%dmfAeZ2FFV5tVS+RhJd?1WX2tJ0AmD4MK%o> zhg&6I##s{=q{E2NQXN@VK+@0oFAy9e6l;uC#`u z+hT@@r(^1hOEzVYP&Ynt%2h@`s4mslD;F$Vt~1ykvcbIxX`MQP3(=seETGR3t!CE% z3JvRG%yY2($fu35R^_I9T3hui|V z9&qR+woy+_u0n2Vq5bJkgf<%F-nI7V$vEGq0fy@3dZ{)^VSdunOy5#h8OhagcIMBj zZPMaSU&k}OH#WY#JYcnORXAZN2B==R;*{}f!~>By<)_!4$J6{B&_0Q1UGZEi`SGZm ze)X>ViS*SSn*+DkZ%CODjp%X~`P58R--N9-?zBGkue;bG1f*V$ym;cV4%Cg2pOtL3 zR_-XONm>-aMMC1njh2XO9X=Nkt>fN<-)S9}z2xT)%^t{9enDU|NZCu)YUdWhS{Q># z|1I4??Y5%36Vj9<{vj@lq`J(j3(s7ZKh*`hjNNa9VT{-pzehSIYC@M%Nc#poZ&y8c z?|DMu#FC7w=rqkbBRJ^6@>cDx<+S{xkOXWqA(#Maz7fahZ??EIoz<476?{YVzZ{`< z3f`uHaJpzd?e{gUTr0}+v!u}rIpSmqm$x~G{M0PotGxUw8x<0Oz5Ip&R*NK;IF^mV z#-6DpQR^Y^#FCZEFSN7qq?giiYI~ZT_5M_m63&gE-{SLvy=7`2vF*S*e!IMjg+8eF z=X`#N4Fv7*9EH)|Mo{N`elE{z0Y4J{KrXRv#(lisErBa){41NE-izoTYqV4&)$EuJ zzj%=5?e4K>%;Q+iE*B04t)A=!GQ;Wi>Ud!h&jCN52(XMu@4wHz!FcBCZ>S*(yN{t> zyZ#52Wb#gqU@gb%A!;%ml>x_9>Lxm~flB3C9;o_C2kP{CHu_bxyk+)1o0ZKd0dCvW z(8Ygq9B$g}<+3SBkP%Be1oa&92kW>OCbKoXZ91|on3g6VmAG<6_#!UX1h%AdUn9Rx zb)poGmpGTyup?!+pDF%yW>FGd1s+RR#zDzw0Yq4)OkI-C{dRVRazq=eOPI2dA$5pd zf8f`YweKBsVl~J>q;2kAhB3p$)bEUu7;k!ca|IRMlj&3up#?BN{g+AmEPnzO(|edZUuY$y@*u=q+J)o_2~6{q-2fa>Sm!$xxz`5<(N(7_UZ}IUa}Ga%V4f{9eSD| zhgq>NY})-H=09A(lbO9Bm!c;|t4-_0z@mnm|EMtW{2Ip#xW_fVvvCqQCe6BQ3{Sr6 z7u4kLJM1}~rfvqK_q(Lf472Eea~?KD#OhSP4pypml#;L>F!Ada9DD2(xcMjfTRa)> zW+Q%DXo3nt`Y4@Jk@5|;|3&RO4IFNC5{L6*vkSu zE=poP4RE&g;l-X`G@0IY{V^OG!ohr6Jv^(?YO9lyMgaj`ns<)b4`)!RQESz7YPP!| zi<+`^ht__{uTNjLKpJ_%n{+nX+b|y?G~)YLfOv8p$0h%a^evSwQaPhzeOSTw&yzP; zVtNmmbU1@6*kca!68fe{Xe@ef)-{K06wj3`>Q_26E9=svZfKw|`lHRZSPz!zhdPbm zf>AX1TrOh9Ad%RK7|a!ZI(IX8n7tdGT1ty@>h$3Vp`EA7mFiXIbI+^xU$2$B+9|F~ zxHz&Nx8u4+ZA}RPkj2%Qrcgns>NI*%A4TlnLL{56 zZ=0iftY4ER-H^KwMLHE`7Q~w@X9v;RS11~a;8w@ReMO`BNMj6rF&J+~-yn{K9oNbT zFbEn=cPN2DgWbbh^s>~BC=NNSls;cTlj(z;4`m-`a_Fgx5Byrs0Uw!}TWy^?76N~R zW;rZYaCWa@ctye)hE}CI0MAi9RNq}Dp}hd!gI#S^Ss?9Z&3_lSH%5!eGDp%VE*tu`wn8?^bCeHrCtI!vr86BBGE*I0 zPYmrOE$D*($NS{LKG(p8V4^|%Dm=gEOq&ieQ)>iCFYf2fK;0j0kZKS2a7ynt(y)0 zL3rI!Uf6VjfLg==L^N*Ab z|IsU)miu7hhw|+CVe)<*1nPXTtGhJer`^E4Szp#3W!c^{VFiSP?+r~@0*15< zwWNn9U$9B`5`858MGT3b#GM(QtQh7}5G4`$@gXHcKDg6G115(TlG3kZmG>5iQ{VmJ zIPlqGElkVMwh}_tMNoQk(7HBrjjt;l3VQiM-HvmQd>EJvm^4%LPIGsas}+&-AbXyy z*1cMv6Xasqr1Io0Byqhjs?MBEt66-%rx58hAbSZ4==1jQ^y$#UrfVgCH#mV6o~^S< zt1z;=H982n0=+_=q>qeQ-r(}YvVM3XmNRwrjSDgpPF8PjdrtSjGt*l}K5q52TC?}n zbo!6@&D_Oq3T{u*@{WHtgZ^b(B!b7d+ZVQbwE*L|<(Q@G7OC&VF2p!?YQO8HXzmpI zk&^BSPzISPfO44|OUx!_A&=KE9^%PA=r!Fp%M#0E)-SLGIcS;6Z)yj2Xl|$^}`JgLwO!v*7vU6^Jh=7burDEQ4 z*%xY{&Aj&{v}`sx({x8AguG}+%CUtue3Xrw7bkMOg2}q>$!^>)U3Z$VArj<-iwQLu ze>2PN$W2Z&iMhH%nyx@ny`dh}S8y2D({VSGs~|1pv3{j;a#szNqWmo^l(iWe1xZGH zP>wL?C}*V9zhZd8rnQ{C+itF`d}_cM>myTq)P`kBKbM+(fWG-wp@QE+#u^@HOMAt# zEAx8Ky+JPk-bEn$?sWH0V1}A6Fdv>eZwMKpMm0xdvg{^Anz zHT@JAc6n}2-s#YOt(&S6Z;cteYUELQZO}1O61d&-&<^0(iY!>xg4EY9zWAmR*7^e) zFjs2py5JygU`WrA_+34aK|^5m-WXef76XH_%NC7p>kRbv!mfy@>cV z1pfy0o|3N%gXbj*Ol2zvno18TI9zI@Js|n>HqT9YHe%=56g3SXvV>B(Koih!iCK~V z4f!h%EK6S8_+cUlr+}NByLk*q<^;tcJ@Ba<*31ZqAi)C20BTB}m%v2i3<41QO{!n` zLGBgYdL>2ZIo{?2AW^;?>0H_*-X-8K^}nX4or0h2sPXD&Z1(8LJFVVyALQrL9`-oR zPM@&wHW$}+(iy}z#(VWGEc^n44;~O3KfyjTy!I--jqAQtlA13ME{{?rAE69B$-~#J>ApJuK%^uoF&I z`pVbpUzfN@B$|81m+R>m_K0lD|BWP(E=|ZFvH9-iV_?`^?z351nT-^;pKUo~KNC7@ z$g>=G-ZB2&Mf(|ur1pHT(enQ4{e55Iax7&T)C&(dm#8a`eLwa@H-XR*zDDCt^X3)T z`QKPB=Z?OBfsgjIdwM1r0e!`SQ<0BTUNmGLoJzxJ{m{`+T3px2I^7yE;e2}U(5q{p zQz`<#RBc9L&*Fw=*lc5nORb@Wn@{(6#Vc`+^X zL56FD4NW-rrHBtiN0pQNSUrf0GM@@SSXW`NctD$MWaT9@{WU8NV|3**eh1cF{n7{o zO@3!J@WrjGjw^LM&cr~Fd=ug7O$d^=uDs_sIR+L!!`tj@Hc_mPBlx{fC$VN~ewj^y z9gXiohPm|mM#UF&6oWRE^hl@A=hl^rpg*ziq6JoFwEmnx$i^s>8Ig-{?ZOJDsAPRX zH$t$SfbStwIbN>%O(u+1`0#4%F*D*1OCT!GM8Nmy7wI=k8h6=|0-8{I=a_BAG)KGP z1nG}^{Q|(7sTY!y{!!cHXcAX$%1i~v*Pn?R8!(d{2RMI8eM#Vs;pGG0ZmSkU}(+=wA{|E35TyqR^2%m~wT zfcKYFvesUHS03e=`*Yq%FF~MVR`=X`Rc;dUr=6S`7|%;typ}+SfB7-@;#7H;^QEyp zwL_nlSE0Q0Z_pjH?#YdX5f*QSXsqnJytonK>G#eCE{~q}n<{k#jDgGZB@?^HokREU zy@GjB@@7QO5cm(3NkH8`6B9L~m*~m#=aTsQ`tgCBPi?bnZv!v=gf%oGI!5|)fvHMu zyJnW`U188};10Ag#gk`+cRZ%|AY8?0s2890d3X1>*Q`m;9;9B>bj(%UMyB~1z#`tg zVW5%Ezqd8LV(75mEm{Lzjk+SfsyHbr-LWh}N)$=^q@d3QdQExjic+hRz6OoRy0rYUh5~c@ei% zZ@;JaHLQjtk)bZkibfc#n08yMmwtD}$9sDy8L8_fXIj%IQo3%k%5+`?SECvOyJigE zu`hwto|ZI@_fMuSPh&Wb4Y$bLXLOtOA9;ir3lZ6>?6CES(_7ugZKJG4LG*r24 z<*ss9G9;dsCCxb#8<#2BtTg1sk~Jt$oi#{XGhvW@H8<}5XsUC~HaFpFm4Z7xn0TWh z7N3t@7R*Dp)`d@jkgIe;JRKWlp=ID0mes^m6Zq4iyI*!K)slv9%0`c|uBTE(Lt;F796FS8rF0FJGg7Cr`rm`E#0UB^8m}%>!;U*N z)k-7Ts!4GSN`kSuFLW5qh?f+@zBzbC(P_QAo;gvfzG!gytj0DC;VT+0o%8ATpDP)r z>|Q?l-*f1B?s+;r_ukj*zV09Q`LAgfzu))wT|UcuvASm6 zVLJVd%8r#$*LazQNwQinusQ0{tiE!73ueq@8&g%qwMDvGj;aU$xr1{mEyMaNcYTyw zT!w6}Z|GOCueri9!#f#oE;o7ZsIjfa*iq&+$)s;MOxzpcU^c@)@We}&iat`lw`kr# z;l>8L1vwLo54?D0d2YvJWr)T*G)ZN|_gDU5{euIo##x;zFR2dnr1m%@d#+yGf#1PO z`Sd1F^Ag^O_*_y_I@C6ZpFMRt+nHVld8+YHnF{P`4)8vZx`08wPJC!C?z^$(HxIg9 zc?%6pEfAmZlsoFS1gpd;W5uA(ZVIP>W=p-*@t^KPg5Zgp_~f3~mgg_Pzx*kikeJu% zby#f$w_N$4AM9&uxC2^H~#cSwghZ9?BSA%ScJdl*BM|fySkq~mW8AF#=9Qk zPY>`P>t#!iGOVP%{GwQzGw1=F-Q;e*`lgf>+{}?Gt4Q_#@)O`pzx#g|@V^oGe{%#r zI;7}2PmzK_*vstIw~{P?nfESC9&j!|O9>3zO*5%#8Q}G59y5mesX*Tlao8JrzAxtL z(Ode{*9N?=Lr^i?xw7n#Sqa-#1^}1TwZhHMgp55wI?HhKkL1*MTC zM_fURvqGs>dE;O9+;McUIPD_$t_W_XXEQ_+18AY!H(oHHwz^eIE>yUHH6>6(A3;X+t9cic@GlH#J;``Ql>swc&>gfYU;LmLp~6-;Kgg{G)-K3`8-6Kt z`0=rJt?DVzeA6}?0|ZVb`0MJJIp<+p3S{d-4?Ua0u!aML!@LPF_f!B>sdnpGiQHvZ zIy(vNSpnLk)a2Z+L9E4*aAmk>c0j*vv-gB>PV{3}!^BJ`i@aAq5nH zYZZK<(V#2W2;$x1khPmQWgmXA1h9@a5RGX!>dgjZc{ALAQ9@$697R6&dtY7Y^F#Uv zem;IZ1lXEB9TweAb7ntmO@?>fz1OxTezY}}D1USfPyg-rP|KpNS+)Zz;?SZWKI%Fr zzbsBXZSY5p#_8MJZDUkuyikt?5rD1*n_YuK{SD5?g=c6F_Em?EDT+9ZYUd9n=eJvn z(z1425`Etx9kyGMxchg_z;+kPE)Ok9FB5SOP{;x$DIU#Ty#3B?(Aco_)mnx;&lL7< zYNN?}FwGf|evT<3r@?)Q_ubBDP{gNA|T?JWtRT&U}o4eDgC6=Mh1PuV?~0}dBWVs?&f-WYe_dSuil8I~E62*d=g z8kSAlASiPXhwK=oirEl`ej;8_AuNG3$7`)d2Ev?E1%GMIcazq6B-R3^Qxd`8M&1Em zGB1SmKX0n`B#AEEY2ty7ZS5Iz-)Ro$&?T_lfONGPF7|6TUFmqH|cM_Tk&`MxUzah z*dWod-*vbhvTp5WzC`;AsuAB_JX1`6|8SQUM8G=tYtPRm-s%FomCuJ~k|;IJ`4p9C z3vhz->;QGo(P$b^*Trs*rGrDAg|2wBDY&yxKI#-tcKc;WHq*IGMM1Da*f*D+cq<(+ z+M{fktOc8eXJ6}NU5^z0EHGu1ib#b!p&Kf1*}l5Us{~g+_~$mjY#&FglvjOj{<2mE z$S9@M>-?l1*5lVx+xp<-&xQ-FVUkoy?S(w{7-3Jo)0}nv32p2ngsD?eR2@7THC~Al z&l7o_lzv}h<9djHS_#4(Oe27RS#IJn5mWWJSVWf7i<$K?AUUae2oe@>@*Pc}A$u7L zoLPVx$klQJQecsmmme&DQAYssnN1J3Ov4s<0UD%9Luy(r%Ca0fN!Hpd?^JX8!Kx(- z33X&$`M5*fjnJeZ=#^bW0H5ioAs-rfy?SD{i`W;i6{?ds-!%>P2Z8PcaDhlm7$(1= zx^3QTi24wY_Cg)Ds^UG5PZgc=bjjsq^N1RAD_{WVS_<0DgZ6o0hNxY$Kt_RIJZw#Rl5+NTJTAM`h`UJFZ)t- z$^5Qg9vmtnna?4?A@Ca|YH?(D14C8sPY`GO;A=}bJ@Q;)=`@389 zct*;WKogFo+}X9D^KTKB2X@Pfqpe=byO!-zoV;*WSe>(BUp+expM%#P>{$TyETOGr zQp*M99g|l9MTVHPxZeQt4+c|L`@$TP=>*B*mI)N44k#<=@DO8{un`J-I|0u52@E?D zjbl}n&i8$M!S(!w(s?dHlC0`2xsxS584?$H;Nfo`UqyDZEF zPNH6R5BXAjk&NW47bAIDMLuGP=f3qGipQ7dn+o&nSYx4rex?nbmne$k?ZbiA3_)WTtp+vVD*pg*^#~1CF3MR_9qm_b-$gT@*o!UxA+e?oo zsC)uu=927;*2(w8Zr@Z@>gG^&w+~KPrW?FkUde{t9OTM}M=CIwES-h0cSQv|4=Pxa zXm_fqIp@G&C&6C*F`=WOvPBFh684dQ`SMK%0Q^*=^!`nrbe-`4jTgA5xwny>nJm>< zGzr!3P9#XD>ZyvTtXC5BxHhF*=g?6Yj2y^Omh;x$wLN@!@{l-K>UGExE+%o2sYI*V z%|^vzPun!6PVK7=wQv3CT#@OstiAY8+dMk65|0|lM)1O}*XSYEbo#Hv*6r!`v-Gcg z6-wn_MC&Q>ZOeEuSb%%RH5um`fb2occhRz93q(KP+MxYjhJ>$gh{V(#hsK3D2dy^{ z-3pCkiBw4shX!EW3#lH+v2~Nt>4uHmyUGff$+>*U#!xjWDjK)v?#WmE5x?sy(aMm7 zR8>7rdE6qtRw0!$(M<4&*7V0(Q0+;>s&?fvUaYy4dl5v( z0Y7iY8V#7MT3W&syGlP%uYn-c@^0i9kmOXcr!x0@ixdGsSX}+8YUd%^-vyUaI!Em( z^J$mf(x`e!3VNuM1c@ZNXT>EZiD`GaEQ724%p&-MXU;;3J#})b<9vMLrO$wf)ra82 z@@`%%R8!xu;td%)!f4*5D+dc0C=ws==|u4FlBIpzd8041KPZ!@feBanN6jqgGqgne zNDlHwU-j5edOZP7bNO1aGoF-Nl-~e(D6v^n62PNV<yf}n79hm) z${uOPe>*qBKt;_hVkl748#5r1NiNy5Tf{Pg%g~>5C#P*t~-EFZ|z^a zxtFL%!0s39NTBg8=v9fd0wiT^GtfK-c(3RTC;i6$_&6^VonhxMY z(1Kt==JuUh9khQ->ovn^}3!~6mf;u+4fKuNHG2@QU2Gz-u?b~bVZS={CzHz zy_rr!ka|)>lxy{~&mT&~Y+}W3RLwb3Po|h)0uNvDH8N>^86W@DPZ}4bD7LLW6l}+n zDPg#y#>UEm94}NJ$3UZn>*$~Khrv(CNe-Q^17a?%_0Knxk`j6DKX(cllaHkF%AHN1 zv;ctMS$@!T2F-2EZVGEKB|V;NHh!I9Gjfb=hPwZN8nj4BB!X{w1F@@a^ZBU@)!qf- z1|e2=CCQa-DwSe1t?3hFpe zjIxVe?v|rwLa@E?Hav4H|EmJw`WZQr$TLE*bLMb3$4G47X%aTWC~(s^YdeKec@`$3 zE672HzLIaP{_Cl3yKoVh(#g1J$_7eMVo;_+bv$qinZXA4|kmokm#JAi?C zXUrwX;-H%h2T}d{5>hdM3Q%s}>6P`?pvpK6@^(3%;bJKip;1tv-il>gm>lR{wvYP~ z<6cwndkRBc7N|#oWhi}95*&Y3c(cq_sN@a1EXX~+sR-NB(gzoR9s395*s2(x(VoSh z6cr&ibJKvWxumG#4C8$gJlDi_?QQG-I(Ov=5h@$JT*Rtjn?Cs*m^ygM3*V1cP<9d| zTo{i1K8c;fQ`0Du@kaC4XwT!lUb=G|2jQ-R@{e6P<(iOQ(MCt;VVj{|hRy`T(kW01 z4t-VWn#^;*XXbmMb6kRwTZ#4}b|V`gM8_^C6$8QHVxo74Tn$4enf=_=6}Dw4Xu>n3y2EE#eg<*Qlanvx2^K2qIagkU|< zgfFK2;crxrAEKzR#_BfN3)8mn z!k#4+=j0KIFB`nNzM~?QaEv{m$h89$`$)azpsJQX6EEEvui0Gfw24(!hr7wHEB{Pa z69D&#;=bWox^C)(qsb11qf72|ys0Qvz~xi263Fotf*#HqBsH}Y%d^o5>2ZboDCu#7 z5d~$@D|@24FW%_&J^Ufgp&E)~ItM;DJ5Hv4IusJ26BVCWY?nJ(8~O;eVt>+);$(aX zRXmLVSdeLO%0BW9ezQi zf%&wYdI>au7|&akNo(q(gN#47ogoIV*9)S8?> zYD~$BXZFsfIm4Qf>d}TY>QratdHkiK8FIOpzQ!i~meRYyNAJy%_OQwcIA@vb+>aHyUCEjw0I?eY1y%{^tVn4m!?Ez`6!l;ZY0g$-W0Vh1mZ zY{M|)YFHG*lMEIiPtUe&wI{{+`hJoJ8jRv-)B@Xd#`6tcNMz6G=FLoq*aB%PF~fsP zQOt^a#x~SY);WS8QtpVBStbd8CM#^cgsQO%ZfrcC!^ME<11g$#bkaGy65o@)7W{50 z5_%Ih%h1pNxLHCGg!vk;yHp}N=X$?hUOVTEX?$4?AK8Quz2v*L3lf|YKi7jK!w`)n zA6m>i$a zasBi9Y#jVQ-)Bg~jS#N-`dP1Xy|}Z~2KLBCfXQrAE=bD?$Ay772>Erm z0IfKSPG;aX!$Z5_=34NY_>y(+#Nx}Bb6X(A^wJkqEFE`&vuWFBkG6WAA;;v@RyZy$ zA=#;fqP`jG_gyXyOE;IQ@HH%ZGme$(DW&d!ZSAp1$T2g($v;ha5n#NcfWzNi=x4() z4?5RD4&qP-m84H3^M=i|9fBS&gHkRJND`Mspmi4QaI0}nsUNsCS3qJZsEtss&dtas zL~@;UYXyc-exY#dUd8S(6OQ7c)JH#$D?Cs&Uqq|wk(3S;vJ<&)BtKmJ;DLScB*OGm zKAhIu=|KeU#t>yXK1z3Gd5Pfrl4z!^s%e6|b}>+1Pnb5kj&=~LKdg>`C8uLGtPpCz z`dqVDuYFldF(nH@O01>tCAdQ|!Y-&$i)R}iSTL`7uTa)K#RXh#E#mwHtHF?x$}B_* zYM6X!ES6H0LdKcThu|VuH$5qm>PDgv6ux-g%RQ?8bt9-|<@3^! zzVU1S?XunN$!#&@G`icj2FM}w8!E)Qknkw@IcwS8@Oq0*N8DSShE9sEM0Vv$WzA*} zHmqb4L{@Fg1q_oj(yqb{MVLqP?H~aw4uJg3eodCJZ3)F+TV-8!|EcD$2Spp^M*occ zO1of&4@rlbtkp0+LJi}QL7dZgBIL!qm&l$EA@2+^8oWx_leF&n@~%xzOhu|JDNr!8 z2P)$MTclr=vGe@#+9Y}GE&1l$!P`{{5uruT0I#Vw@zpq-B&ZS@2;o>cF*5Oa8&tA( zllW90m!1DD$+4~>8C(Hg&5fOexET9qA*Ulx`Xpxa)jAk)dhy{)5CF&&=^?I*Gq543 zB~#F9PJ;ny841>|J(_rIH$*MhN#i6!eXzqwE0t%c6jsJHn5hK|+FBpD#p3QWf3e+W zA{zyosh3WgWwV;8iwKBr91*^@!?0ntTnl^rS!XYXb9$h@)J&e9<8J3%4`UBP(KATS zMhwYJ*tR2?Nf@A9vyZBo3!X`X_m&UNt+P#bo}~YOl4p&dOny3G`M@5(t#p8yw{X!~ z`1MPMuGuyfk7R&Xon5nMj8}W<%hd8eMdslE|e`yA_BC@`VWrcgbbm zVlGf#Ru(zD?Tb+#pW!TI4Y|&lx_a55U32zfvWMz=lSJ%G;ySeN z99Op_w-X|%Ey(||NPo&IZyH&cL&^AD^Px_TMG4A8IOW|z_3Z?Q*O%$>CB1RRc?eLn zAH;Z{8kOA?q}>YjK;-ci7*W)8HvcWx$A9HU7CfpdsG>>6rfgj4o`J;J5?T2Wa1=%xk;&&yH0tq`{;=1&bjZL$h z6-3r^{8bnKdr%f}3FSgE6Ykr7*ePjKp%}6 z9h#38DmE$CH^g>{E>2%wmH^W8uJP~ArXZV%kPwuL{-%3wGD-6EI|mD}G|ys7O0xmP zBVrbzywJ}g==!K?zpTZeklGTWDIm>`D(vP6^N~>3H`AoJ zoLggC3KS3d8|`I@+ique-FSN29Lo7>Wa(&}r!GWK$_`AdMA}n=5~VjS=E+Nqx{hWm zwM*XR%D#3c3;DSgq)TZtD@FGQLkfzKPBasr+N?(RNa=B%UhNaVy)INqOzuhw;42o2{TIK8%_)}El zlzk65pOteaU6mkgb^_L@coS%zspZp>-o5Je(;9|QC?$)~mC2q!_N6bD*SoIL&3EO) z}hq@aZkrZ#F zX-k?9K6X{EC?l#Ykn__zq+tjnIz}zkFdPJJGJinM%6_~ zz8MAM7zSEnj*$e2AGMT=8JuIqfQ)bEBf{p~nV@rABMsQ9njpx3TkvZ^J>`oCgt>;V zKlQ@N7d&8bJA7HRb+(W;kYb&}@P~1x`)i6=g2OoqxsW@kKv$nF3kn;}uQxj#sI?6C zn@TQ^@%h--^$%UG9(72JTqH#I(7fk_t_+Ke+uB5ss>Qs(bTOG3aKF^Y>@>!70Z2RN z(sSwS14T!%a?hz|*a#!kbgj8nHS4@;e>f237{@Bu{_3GN3+VDbq2m-A5$jc~G!g3kE? z*^6`a7UyTgn0j!F-6lDNLw3K?Bbd|=t%&_QSMz-)FUUNic4NfcrF3bD zzY%>q8;}bvT%v()b@j)e?`wb7{UXNE=4MfWWxTHiL)!jDn_(^2l!Mpje%lp#CL-t! zB*v!gIabr)aoLh*JMe{)ZKT+clqnmo^2=V1 zoA;!6;jh{#ceAXuB3WQ##R@dE8wO&K^{31umM0UVYC3i##G5ruNXnAS4fXwb*7awK zrPPi_#L=mrohBFJor*JF`l~k`aT!KUtwPBr`YJ9J%6X0eaUOwoDP_Tb~7^DoO^qDn= z*RUl2aJf?G;pxBosZSYhKGj;N{k#x{ae_mCG<5>q z+NS`U($zop*aO}xBasS&i0LJykH7$UjjR|U_KH45EzmM@5 zTz)`A?zYu0KPSWMIyT{(|InaV{jvWJB2xe7$NA?FT?RZ5%YGq$Y0iUi`TQqscCUWn zFaci2h?-BbuHE`ir$xjf45;45*;sjXb@oKy(an9$sWtiKD7sCcTJo}f1-n`p zJhrkuHlr-7gO<+7Srb6ZoWGiptj*)UpWKYm@I98aTqYWRgnrr@RK9j|MyP2~X%*e{ zpEv&RKh}E`27j?MKs@m{JT_n9ukHM+gLVaFopeX+&-}REpFT%U8T9xs+i-2XyaQ&$ zPQ3rgzrNsBhY({y-7+b^9>xD{4jUQ&?`;l0d!ql_5NNjiZ$sF^`M(VT;Gh40ix&R3 zA^iNH|KEo2e_=!5CZ^m2oAYx2qvu7IIF`pZw*hovXQKxP^AU|p&_vm)p4%HH;n+$J zHrF(BPD38)9z39T4BW13K#4r!XI=~Ddq0g0{tN^-QCOgydJDY9AR-Bl?2%auk{D^; zvl%+|`l_3P`&t%s$F*V=Lx-Uk^ENUgqA;HBf#=UHQ?HL#76^M z9*eVLw&i=Qx&|Pw>dmf6{Cwj56@)!Tv3W?d$QHLKM4o9VKGnB&>&dj9qBU_+?SN7o z29#wsfW}(M3W1lAMHiiS2jCO938)WGN{|U~ssnIa2dJ}zzY?3SMgS$I<~`!}rf-u| z9!KDIQ2;Jq=CN!{heyQXX%Lf=aRwa4V=Z3W2rKBnLI?9sf8Hwd>cD)+t5nmLWBDLK zu6@dbjNcYiC>8a z_nGP-A+te0P*F61YM^Dg-Q50UDgEm{(EAPK`m6ywsN*u_6vKGNOOYGA4iP0bP_zev zDMrS_b(u&>2MDYKLXh}YWdW=zKaKjl1?;T^Y0p%H^x|{3l1ibr3WT|_jm-j#;8UZ7 z`oYxozqmVVEX3alY^D2@UO_VP(808S_v)i&a+6Bi#46Y^2~BEKa7E0HJatbj{+XiK zM`Td5OZR%D89nsR*0kOh@V`ja;e5Yue5b;o{%+Y zY%i`Ls0F~(!|bs%-?f%c>^w}Cigv$Ka00Ciw0yKFp4(3Sx14$3oZapAkPE#30(AP5;7RY`;=N8>^I*`c`le~iH}I?Zvpj5KK|Yw`-BTWdOVVP@Cq z@lST#D?K(M54#Zp2?vhqcDq1_9sBat?3affxlAuni83M70dxp6xs!9ET5r;FU~}Y~ zyu}6&i}y#|j;chCBQ##MWlVHIl5>DgaxC%#OBsBZ&BQ&VC~E&<-@QLl6lb+7++;dZ ziekivQ*Va?BF7$4;6XJzNj*i^yliM(1_TWq;LYN8oQEFvbmhxAgQpm;K+iOeUu-)) zs2(9HD7uU0J!EicA|-CRYdPT)43laEvT~UQI&(02nH>nyJH?T~1@Kv>0mYiXuFX%& z+z6&@bXz0XU^6$1K8@kqDT21Tr;g z%SsBKxc-bFWHo~(OiPYc_mSMXC>;0vwVU1?5)V?^klP>mL<4syt(v%hQ zw$y6J#`3cFfILA5j+>NZH$ZtqIG%qR@VX`{skcq#x^@D{(&KJ^QfkGUHiAJtE z@=Y&RC+@$e^#7XpbIfO_T*p4n2#UajdB+X;ysky^-PO+?IH>f7?3}~J_A8$)3t26(|h?hJT4^e@nw)zGXo}Vay8}J4FK%s_4e?^Gkh@a zhDicihITd!S0{=$vm*D&J!UVJ%T5trEC1J9gH>*!Ty;;X0}h|W1^$T5YlqJ}n)fV* zlT?;!P^du6fnkvG%h+R{voG?pe!)4I%*KO#U>AA7_6&7bUsdQ3Icj>n_{cb%M)_Q^ zf=g+dKu0Ik8<><0Lk9uiNVWu?HmPW7Ut}FZcbB|JpLT(1T)xSZzh)Mo*Jnrv5F1{6 zFfKZ36zTaQ+reP7tUw)?x!&5Fgft1n3A?Z`47jM;tX5{H2<6g#jh}Pu*0!fu*q%f( zbD3$rp+0nJV8Yr0et>yFm;e5TIACFH--_#~Qa1uZi`HQd8uKlLLy1yB((ah`^YKBB zKqRL;@=x)TkFZ)LL)_t=mC~o+9sxZj21N`YJK$&ei2OuNunf5dunHPKPpx$QaIj_; zR&*<9abCl$#G?XrRtc-g>Ao-l18<1XEC8}mePYGQ^?`BWL;jln;-tZ0fUo)~30i@O zMDoOoEDzt~yC84`VNi-%FpVeZT3MF|F2ciluw!BMHhwl)r6Qq%#w_Re{dXk?Se-*v zVccu1#;seJPDNPNy*LNt*6gb>cF;)G^yk${7bBBHySL!yhpNG%1Q4_AjsS2Oft_t8 z!3=0W+0cy^nrGv^veWQ+i~^O(6fpbjX1*k~2Z|1$#M%tR7P(_JaR5OSY;0sYGS#K- zA&gZZs-A5;zogS9`Z82X|DfFPTAle{i|Swh@_@)z2yjDLvz^Sy& ztptD{Z3wvVG7JoW3|l{g=TjrzF1_fkG4j7zNaDbdfhKfp{#81i)h5>B0vABi+kZUZ z-waWqHmw}VQh^GyrEM=XT#5Oohvuh8hT7{0&yL8FEE1EXyFs&1NAM$B@84}wseY!8^@ zW`Y6B68%hNpS2Dxs~rR8FcR4twMT;6hQ|Hl%gBK>A8gW$+e^n>;V}i42#Pkujz9pH z3Aos*5lyWKB)gOfv3V`wf&>Wl-NE@RYsR~v_2!{MI;rZ5|4s!67!b!u%vfWBIU@bM zhW(T}zX)og%?M9u55ToR$Iy|DB&0hka~?gDrYd+4p?SMQhgel-0ZDAu3h#5F_8(jEfN3lPtbfX9vH$vn7$ z_LMASyG7d3@Op^j1wsP92wzmSq?s*;UpQh5qrLLB|G(Cd^|PKxHIM4b%;p9Is^$0_yD; zX`Hx6;^s?1qq-NZTk+oeWgb}$*`-i;{GAafa&pdDWw)VcuCUk05d?t=)#c=@nP zBsq+I0w)XMkuO0Ec#38mPLXVaka*Q5c_WFkzp5u&!$1c-WG&_Vx8~Ge3$7teil3I% z8T*=^U91_gg04K}7W(>3e!U>!qPD7hn6XHcR5t`E2I{&uV)7e|6Oyh0WGn-;)Nk<@A+cr* zQb&8NK!@8~2GVowtG*<6!4=nU5cj4-I=HxkUD0Yqsv$sZNy?I}$GYImXz|XO?|bw~ z9rc^fITAhi&Wm*2G4yZAFvyqc0~69{JJ4D4k@nWS0YQH3HoVN{7Z>`$9F)$S+)`ou ztL4Xe2qvRwniV6>86F7h;_lt6S_@ir=pd|9#!ehm4C$A4#>{Yy_ual(a9LmSwYTWk zfH+OPyzd7$vw~yf&U}!5ZyyD4!ZF$}MfR(^pee|8+GE!*36V4!8d_TY+KCS)kaslg zxUumB%Lx}`>t(}ycLKcl{EgR3la3KHWeJhP!O78>r`5;5KY9%b7nyP!QCB)cCbE-7 zon|f7-|{)B8DsE+r!fqJIY9N4an=Bwd(=R(s&3+4-%h9RUZK`yT;@I-=tbV(?FWLw zCp1YrsrOO`T+H(Z4mzBO^nxuj+Dk$8!h)xtW*;}+IG0Q|8N3kr>wpJZ4gu#0RUT4S zsMz3b6|rk|yH@J) z0`Xcj*Js&<6YB{lldNi1ScT1pao4UL3l(zt*Y5wH|B?!UeX+aYtLBz>KzrohYmn@| z7Hi?)k)7V`ZT?@nl&|67Pv^L7o=O9It=i`ZoATAa@;DdXsYq(x`HPelY71^6@V%1w z%1p-lvXBKFuhOPn{em13UO%8`>-aBSN=KMwS5LfazeEfDqr^8S`~23rls52ApjO(U zUq#l?SGGc(N!4JJeT+VE$=5@2!7k~~bN_i9yxzeslJ{RalhZJWrpLI=AbnGud51 zTB|&rMmN|0rq=A2qv)27I+N3oq$}dBagZ+;w8>6c@peqxtc^Q^SBA&xW&013a^i{T={b zCSIV%gP4a%8(gL|bqyW!AEEl26?pEmD?A#~5!x`N{L0T-uR;2i7~L+@;lrRxD`Zf` zHnduWrOh>Pt%IsZ15cP$$?hyjGG?h~<{Uvwy($K5FtY~8!Hun@ND>UJX}@|eH`DmMu#n!BgGLRZ(p--8f06;wLI zM4#r^{y`BQuD$N?+CGInC>2qg$ON>**OO0Sj4KevMtvkPtCSd7gF>ozFsbNPw?ST(`>kryNiT&3D>& zy$xF$p1|4@bMH%E+df!f9+nH#ut+)wxy*wf>Y*Bzs4KY&5&ZJ0FFLm354t`7EDKwl zh@tJ;YW>^omLa^&g>CzV-K5;%w>Q$SLBQ70Jb>SZpOD<{BzFMTm#^H{A+*_%5*>FK z9%+0MdGY7VRcRDmlk=V2LOHZwKZvf9Slh2lXkwTQk*p)(?cq#)Z_yH=mMc567m?%~ zm}HtlHkY|q;%1KB@;$OHWXJg(rI5UJs%e=C7JdZ(MWt+~`GMFru-$C8jX@_i2!yww z28DRnot=rmhpt`jaxaoV))GsAu}TB(Rgu{s9Ni=EV_6`^a3^0)D-5RifG+Y*LkbAN zGI>BRMR40@fWDhS9&BBDe6={4y$C@zO1;|C$;98a@l0>3y7oJWwh#W0lhp_H$cWjka4 z*=_Sdwrl`XsoPCJ*+7uTBm}YY5raPoxX)V`28)6GV1fwluTe!53><^P93|+W!tAgx zlmmZXqASOD>SCb5ACdbromhZ)z66#I_V2dKqROcOWaY0AK72G6g`}o$ZmlQxag*vr zkg(VE$3x*F79;f_6@j*z4hN%$JXvS$G#ZB>L_>x!f6}TQ4MDeJ3NotDi=FSE?3c~! zwW$(4G_O1RuoDXGLXOj>Guk7NA-H4?IFEx~VD8vA&_6~kqBPW1aakATufLV- z86A62l>yt4X1JttyQ6ep`ILp%*uxTqv9l7{gHY7`L9GuR&;B@8ZSfB$rxYxN8}y8a zPr&l+6(+ZDUp=mRlp}~VUeRND z?X|mjw-Z} zO3M6gMayb9tyJdZL0YI7@OLb0h7T4LFF|nx7h(fN5m~qT@p+dU;PA?u*n46qnr1TyD6%O7qmM4fOY?o7~Cmey8%t5v@>O*x~NV-CcOB z`fQ#gS!*o38+s_mVhY_aV5$$?YiF7mZc4eBSFZ^L^N@3`?CH&nE)3Azm_E!BXE^}( z*H@&2QNcxgE%wJ;)rF?qC=Mf(1^aTBCx)gfRJ;kA1b+%qMVWOuD9j|kxo8a)=x$T^ z1$kXF%sENmOoLK~hqNb@K+k2qNu&uJj4kqs*92Dug5Kb`^EebvTS@9Vz4q#ttiOGE zPo?jGS`R^QsE0iE0r>p^uf*mTeOwod8vy~|Z&SbwwY#{8%aoZj6A~*U7Ool4MG(A^ z*S<)^+EbrjJ+Ea0%O-!^w2WQjAA$fZ zO4Fk5g$Ey1g$Z$0EVZ3^Z9>R$k{%yDVNf-41POX4j5YylMfK7EI-8O5AjMUz8?;si zaF0Cg93Xt^`sB;a(Ii79KNr+=`PKmk$YpF8DOS(%m9BiSy ziD5WpBGCdgjzpHJUg+nm_cV*0IPqL7%v?rS#iLC){Qi$8YxRM zBVJPM69Fxhi~+e;XH}>svD3Ovb<}F$#xwt{Q+|+*P(CDHKuM1(a=U47TU}5W@9vhD zY(e>a1FCEJJ{X%p5f5(CInsJf4|;4K8~^1yf=~qG`0D-ubC@!)^x|^}jVVTUuz>n> zgB`&C+ej^$(2W@lB+fQ$4xBnZm^(=zaXTAoQCYC_4b`SBrB6eC@KZ$`GKbS#z&h>nk5FvJW!xf5gEMGuXw4AGp z_RB(d0_9cgtq{tU!QAl?AVJxd-XTpa3VFQ2kE91t7LW;wg{O-_cleON4xJb-d zAB0g;S132Rx`}#R7dv=GUk3N~3baZUq{+DemKpc$RT&6rSNI6u&179^)t9j7^~Yt4;WjAj9vEe`{`SOZCe$fu6A z6)@6^NCWw6-WqKb7@R7eInV2ALQJA=zFlnWv;6z=QeySTlct3X|D-~b4hfpt^sLQH zFM>87FZIor{wr8@JHD04Btn^5$~3G@IweS(L41FNRDR$})c09V4NAPuj{;9GXvQ2< z=U3t&@)J%bfB|rxRCHV9;JqSwW6J&5h|nO4wb2Pdf>(m)Gvklc*7h<@mn%Et zD*8EIQCR)Q$QaM%S6#M6f!c?*;f*Vt#}84{j;Zy^3VMt$rb{}m@avc4a2lJULiEidBun{ncUsjuu~P?<)kfW9 zoYg0fH#S($X+;mdL=mI-2vpXxtl@Hv-CB<{6aJ z6l=|c1Z)RhCmzn3*I&uPRBOuTXN^q_>028PgvY`{>hN*b3G!C2zh+PmGmrdPO^IKJ zZibM3K4%#sCi%E6b3g^lx%31_=2Gydcwn&elU^pHHzEZgXhDms6MmDM_Xg{G!|XQzGRa z1gVH`d#xCR|Hvd%{(|d8V&7>3bq7h1zata>+av@6?FE?UxYO~>n^;K)lvLU8@q{dE zQuUobtNJQ#-p0Z>Lg5?qBdNwY47Rs;X=#KCv~r!N>k?P4ei|09&r`vJZj!H?Q>7!wGf6x((YG%2Q6ipbiX?pl zLW5~MSu(lN?a~<`x4h4M*&6*)(Krnk$XFWF^ktz7eRiVPWRdMIQ?Xn?JpDYfD*F7! z&HNd8oOCOlY!ApK84x`<{(ZsZrvB3TlP^IJ?k%9EJ_~X6KxiUfs5L3By5f67ChFnU z+|S|lMBioT=hTaFUuP8}6erch7CC<;oYW>+R;Z`)>qICw5dk)d zHw|^zoX##WiBds9k1fubq>JkXIx>sO5>XM`ETd9rv_UVz3Z#6f3A>cTjBVCg9 zX4@^1QIImvpc$kK74ey>`K2$_%JpN`^!U3}F_U8-dM&)%M}pF|$5;lfmWyr*s)8nEUrjZEA-m2B;05O#XCW($iocK%Xg;$>y$yAM@v!OJ61$H+p&w?n z@~)3lyU#gxXPS;zTV=V)xN6QJsEK*rB;;9bDOFq%tn48#8DS!?S0SAz87b`(b>2l} zSKil^3QdxRZxoFHyq6%7MZ|?Pd5ANXxIg z)F<1v2{YD(JoY49jrA_^Q;DS(ufE;Yab21+@3h70T%8YJSu7=_6jhe(n^}cHUn~EMC%5r|@?MKd6vUQ@lj3q3>C!j+{9$k^L3;kAbe-D-B8X1H6tKw+OcNI%NZGk@6T@C8brWn0c?tAiL zZW>v?2w^Ym3Mkq+ugSfK!ky}9vzc~~nz`Es9}9+RwIRfguy2MRmQyu{yWWogbo@Xv zCX$?g%`kSI=0rm;r0J%3l08U@>qHB!Xoo+sT}m-~?dolVzy<158A9wLaLw|l14Xu7 z{DDV+#_3vR8H$spJk@CiEYelrLV9cY;wED;PcbbZ^ELPe&ZcJA^7e)`5?m9F9+R9^ z`bcyO)?g6W3i4UcEEVz?x-y;}f1m5UHP*Y4*hD!(f!$1%bdZYg!st@2s?^%ePYx*4 zwjt#safIV#!I^yQ(AMN zsB${?Li&{lD86#0k2PuZgtk}kJXuXOg8zot9Ma_^#3VU9U?2>!b!FOveBn%pk+T_3 z;%Ey9v;T=YrT;b--ot0bV%UH$Mv`JXyz7@-pjS8Q9NWkB>}$eiX3CCBP)(CnmyqvH z2#YZtJ<%qm5Ajve3@8;e*~p&ydtGm}IGm39ieAhMzbl~0Olso;%GvXFwMF_0Mhysbx~@5yM1Z z*HHJd>lAG`leP*c1vFfeDIxC93%E>U2TTA5!ASD|-nK~0nFk%dl@{XFRH%HKXVCaS zzxO4gZr+^i?_zl1;tEY*WvU=;1ifev`|iGab_yO;rlu!!g0924n+E08PfR(g3!rnS6IZWps6g7y z|1kMXKA8@0ylqmaQGg!NXocy;m`2(l+Yi8K2m!A)jK zHVn1vL6KBntP_$3?b!>Pah$KZ?(WI6>Ax2)saZ~0&Vgp3tXm6~TP^2ODkXHU0~i!F z)QZK1IRNpQ9tqsX-8PMot zS|(0uyxw0lQ-u@{3dBYLA)-Fg(d~0Fu=D+1!)*yy2glw(xTKxLYBI58um|+|Exf{> zpuA|3zE&Wruh}Pae!sd`?tDt0z_Z8p6VBuRR5wK{_=e9>2lYUhKioF$xoga>4@#)I zlNSmo&{n9TbcAwkjJXsYM5BmFoh5Vmklrc}WhP#V(uDCbYdW!I>V(HLCsiqBQE_4VR@uGQTeaZ$ zW8WjW`B;M;6OGD&^RCXj=RE`TBF>f$vCxV^HCjHqu%z8b3-SbSC{i^UoNoG<)w{!x zcy=6O9tZ!4yEnt|p?MY<9S|q;@#C$DvoT?FlDg2j*~^V#{w|g+Glgu599Nh-L;jNL|cBtwtYUZYxgBL3FO%2o^Vm;K6GE60|&w!Gkx#;2(P@HQj6hv^T&I2nhbsoK~Z<|KMF%)W+h}ii1!cm)+UJ{(YN`iAcLR-YC;CGMt$_&&-OVI&D zDTwuS(Nm3(dCNrW!c_1DbWExk719lUY5lF6Qim`0D%#ZG1$y<7;O4l0BXWyiZ>k{<05=8a5gO->CT zwSZFIO#Y!oT|g6iah&)BXL#=6KjPS-F~3XL%(|%R90yU)9GchDP)`)!CuIW-`xfw5 zc=FQ0oC8~x3qV~$y}+StBPk+s-gZE=B$t9he8*E=$P$==KpWw_L zRnL7KR3s1TeD@oTPQDcy8A@oQ5})vCp;P(}{k8G8CraaS_`yJR(n(rcL7@V!o*U2u zX#*8q;)rO2BxPOPK(RAt1&9C8n5FSGk4dIabZt=Jw*dHobwZKxUDk^dy9Q$|2A_TU z?Pl0iax;XgBky*e2l;||*X8fw=7V~nLr~cB&N4cQRV0y=^*;BIrMf___%p@npoQui zD?r&r)T8PrsDiKK0W{z7sb%B!Aw`m+D2W^Y*m9s&d4*pY!H%Si@Z2U_6{9)m_&9 zltwtipxT~VOC<5P@%d3wB4>T3f=FlffSxP01r{m^|FZuiT7-yNP_fZDWdNO&3~5ScM5K3E!qvRSa$_ zO89_0VElltAoj+=8S+>kXt0gYlw-~(3`Qk~;x_J{K1H3LlvJ8kj(i7EFE<_+5oe%Q z8t?hS`}@g}@%FCtPr^670d3=G(h&EAE|H?CzfTL!Sh^c4UAgLCVF#9V?wee0a=k-r z77_itNB7}cTlMeI_FGc>tJl%=B7X2<$#d}^br8&R2q}Dygdo)J;Q%RXNSMacF0p^; zdIt=7scy!9DA02zZqT$TCP02vG$dR zoK*W!52*;6^*X*%4RRybf><;$n){v{)LplMiSFou?SGJO{r=!-+~Wg}UC*heuJcv7 zenenok-6aBSfNJ7Ohr)3!mv%%f<(2bfaA5spv+Gf{4Jb^bULlAAKlu{MqZrNp zR7-U4mf`QV{_BA>D3A@0vH)R=Cvm z6;`xjsI6vdw7Fj4JzP4SJ;cz<#Y=oe8eSIV=eJm^Bo5EWW1)4_bkTzp@)8pRmTHpX;A z01P7ZsQYZ>KdAc712nip1L zMt&5PzD-Ak(8d=k=>;5(uQ;2$z_H`xy{}CB9Ztjly?CFK6oI;sboba$Yrm%4xAX$& zq38Zy&7Rr&Ei3vVRAP+==DSw!zfNt?<1>I}oRDk*sKt}M662fARsFe3ouk+gFap-j zVKnsN{5D_uGXHoR*JwXrRWrtGlw~26>Ac4Hs>XGP%>RHa19($-vivu-bCjK+hx@}Z zK(qM+wk}JX{&)?P+UY_nYBC;e4qZ`oP^iaMq)wnCxcNg^c~L1 zodu8gyYSmgmwxMAkLIhs&A0h&D&)6^Db1PKzk!7!C!?Y<;+tQ+!4GksUrz*F&k+^x z228@=4^xOKms{Ug$ASfq|8sqMe=We)RnVCn4 z$8#iOcJ%Mv?OD!D&$v}DFgs}0YR(}(E;!u2ce}eM3@mz5t)nxFT4TRIk(t=f8;$_# z$@hKR;L6SMG|<3YW$ay+?b#Sz4yUjficQehw^cy~df%VrBwS?~f;!akG$DpF*pbEf*MA3Y3}i2^SB!60`XkDe;S>bE zVZ{t3LVXHBCn35?~bZt=eZnUJyv_Ir!Agj z(+_ZQ56Xmt=Sz2ZfKQsxxDE`YQQGMiD~(L4M3hPa*@8UND4Rt+6%*22s)hiRL z{x=y#HK1o1-0sEFHzU%9$c~1itiA09D=L|3a?8xPFB>DL6Q*HmsqXmoN2xnDP%jj= z$eVIX#-~C~FGUlfnN4PP#ni1RSD&MdIlBrsKCC}20m$}8iAzXtKB*i^0F~9(o!a-#uZy-zUe#0q!7;jA00)cIoBoqYt6_(Z!L9Ee+VH;)iGl+<;jf zn{@NrHUHbS)fFCpm{&5+KC9G0SO&ZvSj>}tKSyKejULG!rvjFvY+ResUQLcd|2cT} z+k3H1f+l_Pqj`G8`?zCeUc8DOI?U$y`I9~T+j;z5lMfSeitLePNq8opE?$1scq!r& z=mGBrorXVwy0-$0yVHM?N#y(h>4 zwmw%$t4#a%2kxI{O$=P`Czbm!tN9(~RVvX4Xk2&l0AHE;OKL;H&wMy|?PT8rBL+NC z0u-UofnQyE?)q5c?zoMrTtS9$mi(Q0E5q|RW7dz(&;MrD>`Ffkc&FZ9?mAnz;#)em zS2FSRkJ;CL!9;U@rk!W?p7$rtD$|&vC&jscvFW~;Z;&DyfbsKu*kB+{qTe1s1hhZ0 z@kQ6oU1ZH!@6!d59ZFv$NV7AW6i$4Uw=(B@bjl3j<$O%tDnRO#JMp2XEkRH?A}RJ4 zgm5}R@}p3na>^3gnfJeEi)t4L&Q&_qKMZXw=FmjLQ40m8UyVe-kKFjaO0yj25mC@@ zYG=nO9X(^a*LVz`F4O-|M|U2%tz!=~{){GqK&Qvuh-3~CHu zE@*re%WoblT~X>V&es^|ra>5HL=@78aWPC+sC?R+b@ka#jGu$$QzDOwlyZ>VDEwNR zM=?z55f=@NCESW3j;4sx?F0l*5jI2sANo;2*8tww7E6azef?$( ztd)U?A`KrlUX`7+Dp%prY3qVRNKB#f^*o(W@8%w;T{h>s{9iNLd*5VQV(*4(+U`p_ z$S~^1H|_`Vs7{j{+9Ol^CR=HcnN@t)QJ$VYy=F93RIIFaC*Moc>8D>+%L3=b?A#ZC zh_1e9>2@r_XebK=zceFd zq|A|u&(m4Dka2d;%Sgqlcga#>)Bm!_UzsDLhC$Gug^1$d2SKAJ|HU7VYm`V+9Ma}v zz=F|Poi2_1-dwEgRNX@!JSdT*#_GWJ%-oG(psoUZ2Ss0r48w_ncBT%dGFH8h`UR6h zokL}oKy2dA73sYew! zQLQTdHZ?)T(vLsOGYO(*lGe3>{VW;dF%~jr9D+?Im^woD-Ro1z;zG6j;d;) z<`2L`7JRrThA1!=JFM&$`K9flHGYgIkfLmG`02dgqe&pH*YoTi9&Kkmd+3pP@1!Dj ze%CN@(jceP3b_V=i!^lQVH)AE{w}$h4jlEfVTG&9n_(lSWY-orU8$qOavHF1?Q~$w z(TiA*j@Cw>wLxmPYCx*zjFpfA202?ow1S^*N61)V;zr6OzGJd~o5lU+IzL)VgkI^# zB89;LJWLm5d>&*Bpen_WI*l3_f_!ufs&6bLmM zI)>V$Fx)cjoZ<;htDJqh&x+ccHB9yzZosrG^WS}`;1I3s`*mxq_BhIoX8OE3g~Y+o zsp1R*wJzI?ijzygEE|iK*n9-#YJ1->iR~nvj^ywEH5vBV!|z{LK$=x#y0v{ ziAHX9AvaDq(dTmq(0gS!Jv^b(psUUTG7(-5jbIZ86BJGrCb~2P4MwLN!q@cB4)9yJ z2fYsuZ(@b7B<5zWjQ?@=SwqoOg^BEC*|A6>A=)N%D)uX2d>LG{J?|$dqdzuvEPQsb zGfBGF0pPEMpHsQnn#YSua8&bUNwdvYU2L~^H&{^agcbzrICHj{MIBP8D0`_uSB6@4 zA1-szKEgF?{yWh9L5q%l)8+beFIq)3emAMxKfYlearnm%`(4BUlb-g}7ur|;U!pGW zo6O~%;M327S_;ZChEjKidp1(eV{iL(n=i-YmQgCtc4!YIH-d@Aby zLir^Jz}9}n*->er<9{|ka@&P~!!nH`%#0h$kkRAGgxI&bTuD#S{-F;DZrB6oHLjwf zDT9z0H%iWcs^zD+y-Js z^6vVG(v=itm`I4+{b=j#DDNEq*cW#|o240O5et93l9s)A$@+!1uj6$MEPp0CaxL?l)t)=kJMZ3foP(`DXGqr_bIXH76&eY`ztt>~-G?{R~jlR)Rjz4c}SvIfZA zl}gQ>LYVlsP&4u*!t8n=dN+P1r<1`5=Dsl?T}eeJN}S(ajDmF;Z)LcVHI{fM(M zs!GaNUlfY+><(_uWqFEtUhbLpMkAS{CF@D7ov-{0f`i1qerBh&GJ>$1WJ8f;FA zT*6jN^T(04%zqpQ+DaOlO)x*hQAeOtda(Qw8%q809O#0s)LMcf(pmK%I#t0WM>;7y z^RxQ78)2m<3dW1=kk>?^l&ah*aengV<%?=R5Wzhse#~h~UA{KMHVpo&BnK=_hkE&QIcrY2@|n zGU!;T7WfGG4x&TnWzz!BAN;Y=`2m3|G?AH8V=g`={)z2Y9TOUh85dL+{j%)Kt}N-N zUx^7{(2JJw8DZMFb& zVg(od;zioZPyYw;3oSmQoq0(elUSPq5I*fnVvr{w)YmO$6Mhos961Z)=ILlL98rJ! zakv5`c(lrZP4R{I@}nOx60{M^cpY*Hx)XZZ#ek$%|{8HPd7~YVi!QrlWI*`Y;ZYcBTeWnt8Vej16*b zrKJOpivZh;nD4`&g-PA=*Lo~5shpfRCqeG)IscFqzesKdWjh}45aj3aiYXWdoWCL3 zbk}uwS+H+rV0M@uR;}eNe+|oM|B1NSd9iM<>2F5KM;Ky8<={1vF^qsV6dt{&vON}0 zT558uMn-3tK zFT+?TVr?}tLE=BhNPJuE!kjCmX!o^f-J+5TIKsi}x4u2tu)O}4*n}70RpKl~rr6BE z(58Q;>eU9l_y1C#6rdaAvx<+U92JdaCMadmXqxsYDdoGivlO}b=V$ceD_ZGazC#r+ zksXKvo$``D{$KkM2XEU5;^p-Xmuu6d>I+Mk3~PL!np`~*#@&pEY`{D>DR6(8QcAV; zYvv1#C7T@%>spqU+BV=)M?9*ieW@_*e|K}#v+=VVa`5pN$ZZRaj9wqi%D(8eEJS($ zX-`TL7VwEkzi>-|&<)MODsl&;QdGa3LACz-VZ#x zCbcAjnW=|JXN1p)Mr>uwZNpS%w-mF1eq8w#}(K~335nQMqY ztO?qlg3~~`95JUa={RtOJ4$-ln73qfvBI|w;iOL^#5PzcE^$J1x$*w0&Mq7fYA{38 z9T}+(0x7NALR;Y6!BU-xcwgd#%lR1u3qz7`D=E^)O1@LHC4ho44)Jp1o|j%qc}o4( z#vqd1-KT6>0fw*It!w0D825m=#GaHe4G<>Xi$rrg8O9Rkckg=7I?f|sDZp{CorfqD znFMJXs(;){sci&7l_Cp+v~S!-v6e zzsmyM4L?!@FA{dS;8`H5(OH(koeYE&T_MPYGUcll!ZBh z5i%qRat>IkZB$juafCnqp^2bd8@e3~)_lwuN4g}jVa9;-*-?#}UIP?(U>=%+hFBqd zMrP>=j`bEIJ@S0`$-%tOkX@WOQJ@zGf5T$Q_Vc(38sB8C8L3-Ex}`WCON_onzdHP; zv@~hNi^JsbYF;%>Zl8dnQAft{%QoI~^7QBUH_yzC(25XuM2H990;o&CGi*_xG4{d5 zxTgnwU-d+F?s1A4%x4IZhaHtD#B#iU{dt~m@xD1;yDVxr;mae|af@=fRA-S73v4o) zHA##8X!>5OMAv5l*BG)A=K0mk$FjjEMjDTJY?ldK1SEsgVJDU^-P)ozAv*Jt859 zWS%p(chTfQEif6CB1x*oAUHm+S29sd#nEWEWd$YAz0QxQ{P2k%KC5`~yNA&C2@z`^ zyY1hU(A1c0s*@MHBlalg?@DUBeB@moxrVJrB@KBUel&~z*Y5BPrh>ZiwX`p}+4P)| zon+59YCR(nt(lYLIVEB-PWiZpSWfTdq+y2g(k~I^jz%LBctbZ=$%Mn8lP8yWuENVu z2XFnu`FKCh8xBGWYj1MaArZ~s{q8_knoYJ9o}8DZeUvL1?e^7s$3l_h>v#Jyvfirt zue>GNmQoJ8;-un_NBm`^inf=8M55*CUwzS6X6OpHC2;#{8L7FEgYf5@BEOnLyCWRD zRnu+$7iASDvSJRTc-CdgS$*HBxNL_TF>@l>TY}neku{4&if^eeX zMN|UM%zVO1K@L%)W;>3r^`mVsWxKIX#q9V;g;1-WQUwDFbGcG z4zTGN$CK+~I==4KVAM}`E^g{?6HmL$aw;bEC*M=#W`8(p3qDJqX!!V!Y>fsK$t7f_ zSMVT10QZu7DR$giMr>DkF^e>1@176+|4ZY9tEBYSLmzUy{pfw)@ANb2FwHvhQ1t5M zcC}F~lRiGJjmuff&&~NP&BPEX8*hba@xv(Fe6r=}dsV-3j0wqa5Zj+rx^map<7y1U zGqD#&{b_hC(V6SPnq2X5p2@Go0$qm1ae34LOnt@F5EG^Z(PAbK9MlU>u@y^;vjzUV zCv0MxwHGbN!_UyOvLIL2qr3H!kRt7qiE|1g(Mb4b@_;u6^tjOkg>;`P45^79nRVt7 zQq;@{Cy1;5rfWgk`kh4O#StAo4i=BxHk1@p2xv!yy(r*d6+EOqSnu*M=coLEq0nq# z6S)pbro!pF zeS7t-J8I}44SDpAh{8HUu1vF5Q+(1nX?%+1(PfY#A#ZH(e&?M-j=5yFs?7Rc`o&f2M-0yU-x)Ym~(ip<5 zif^_BQW-lJspc}KO|~abHYJ#hXXSJJ=dNZ&+WVxj0Rk`1=a4ggY(G@lFsV(R^geP_LxH%u8*DcOg!SpDu8woXU@FOGnW_Lv$#*O(2}1{5$_nPkkKM%Q>{b@N&G z_FN*w-|H(_U8&SPOqguQ5yr(xW;ugrMS~w&Kj6nR(q>i49F1(VZ?PJByi?S$^y6!Y zk6V(~%pQfXl;Tt%+v6|_d_Kr={PUbr$r!jolH`fxI*MUHVD;0R=OQ!s%j=!|}y z@`5z)V5)2lD!NIXC=`mR`dY=5GHL7CdcwK`WL9Uino(${a=6%xw$YyLR@RN>*y4B< z=*!Vk^$z;1*Z)=?7X(e-h&GE#1pOdc^(VMHfyNl5G%H`n@*8^xqDtXkw8cXfb!1kb zB~9$FV$3#`x9D=vprK#n7EY-&noHvtsbc{ zUB4ena7Qc_C6Q(C3{Q-1s@LAq-n_BB%$kFy^7zr0Fu7 zD~k5g{B45ju2C#^_0SdFfzoA7keZEd2!hA!QSXjSTLjIYb4+TPJgIs?8e2xe7n~gc zz>2i(J^Jdf2K6`C?w9!UL6a%k;*eUIrJ&NBEcLiy@7}0#eotJU&vmj3V*IbBtwZnt zZ#jYiB+sW+g$5nw!C#3w1I-b)#_>{AfX++YkxN-Qm{rK zSZWD7p(B$~jF4SD-n62-+4f2GF}{PxcOAt=bNqxoX2ujGfa2IJ@YWgDB`@_3pqV1zaIo<)h5%&;!AoTuxnAiTM$<>aLqoJ2m&Axz z(*WkFd!|432z<}hrR+kYM=ij=L<=>!d4gMpkZtXK?311HB9E`r9+AnNnKkAjg6 zyJiGxac{3j2>4hHATx)*`0_g7z@aq?P)1kwJyhLZjfeEnfb>PQ!Ke;R$&Kq z$sDTrCW%}?euSF@FGnGR4pH^zBcwkFO3nb^|9QG*|BzW1ZHp-8o)OHOaGDMBpmu^6 zI|?DjN?pQ9=rQ4rD3oNmWs^OwYdXgtORI}j9c?<xM~~yQrZ*{=Tv6q7>kpTh zUXgUE)woB$&nhmY3Y4`otK0lu<5miq}In=BUUTP|})MP<>*jex&^sPrWlI*3mi32YriY-*KYegQcuZK4kNZ z^)w+t?E-JgwZTwD?8)jg!yx`1Zq=OgHrDu=WJgZ%79_2F9p%LD51Md3QWwL?7(LO+ zF&$f(r97WkMXlJ8_ui}}la18>GZhGhzN9)YcRe-VUypx=#5T2EWdjkW^%70t1wNsf z0nM)xJ-xX=nt*!{2@Te5I2g!nGw+GN2|0^oezKNiZQ#ywXX(XxD^} z-w7vB5F#h&A+MjI5vWiaoT!4m0L^6Qn3whes+3VvQ0t)+p8&{Qf#6UHZ$h*zOOyQJ zSKl*)YuBd???`QsZwBz+SM&zd#FHU|Rl1kvobSLjn$HswfVZSlfhhJu{O0FSy?hCcz zKFL)Apnh&ND3pJhAsiB7r747@+=ew|C0NVr^!$APR+J?#)u&5x_iN0Ai>EBJ{Vm<| zXl7-PiF1VQQ1iS}vD(kDx|h}%xm#E0>j67VFvFv@&9nM zRw;ttl3fx|SPLxQs5|9S@*e~wq7@}Ywis_Ha8(hym6H!zczyd)iQI71{0^uGRrF$8 z1F+;GzU}+rpv;biUJO7_xCbof_=zNilOUc>CXlef&Nh044jBBC%YdEhCF6|m5vq-4 zuMWsEOm2o{-=&A$f}i;bT*T;p1A=aNeLIE)E=0MJn#}lOk<48WmmYIL=w{R1%_C2L zl^cm*-sOsq2+AzQO6g-pH$k(y%eztEFSkXFLUB1yW>e3;QjVd;Mm5-Ol@vFyz}ni; zIJ)^&s@yu5*6e0i#_Ic6nkhwoKZuOJ-BNk&Q0{RqRfc*~ zj}o4&M6XT*_7c&tHTYa>f|ZMnW_bL7`4 zJ*k50G_^M?1<2IDnN^{gPW0|N8@Z!msP`8w@!;(Szk&F{&X!l(Kd{|upnTR| zbl2KBGZUowY{8pu;YB+j=wIkS+t$6a$_2=Ug#M6_>k{s75sX@KjXe0?24gDr7?V%z zue>5_-^vGw6ps7*&Jof$XZK&<<#!BBG>iON*0EKrrE_Xnmr?*BW~(9hP}RGp6+NQg(bmPpbl@7;Bl|N4ji>7#10`T^!!RQrEJugtCP60#O#j2;y=q zo>DexcN}9pCe>&B?|QxIzsm2y+Q?YnD<|YS*@lP?9p2l!U>P%+gOG+qmC!V`y1>%JDt|%X8=L7mPGq-ep=NXV zy32|fCn^ELVn#?Ik5@XC?rEx!V$W|9T_oR-+4Vsw)yG-yKu+ri_TxHTaU`I7xep^- zgcOeT9F%7x7JZ>=ls{ib>!T76F~Xv{T*A8fc0fDtj5j0>sF!k{=kg(kpa=m%8pd2c z)1DVrEbc5gOwTrb65mle!6pb~1>lU4SD=gh5674so2nB@b9_D<4RTh?wVCT=t>dd| zZl!&=DZ8=?%i!cVDKGisPgAGdFwU-Nr?|0GAYDf-w4l3rHw8P!Q><<9nV7(n1mIwr z*%gF8!%!+Ni8Ug1v{KnahP`I#A6<=nH9jyxhJy!mzwoUHvr;2n{ph!kF9F?(3XD}^ z$14^?HgF#~^6Jq>v|puMH(_!*cw5%$FEB$r96;Lshwn7W(@c|MQQ!z{sg;8>1}O6` z8#M{8S?R7o<9*_=ap@GGVbSg4T_h(5l`7O#|66L}=)zbg=GOR+n%t_jWK|9Lf57&09}%|jg@%yRK_ScY^SeJ-l5;71(*_9@AlATuw>!D4HPDVSGhzsX1QF15mR|``<{M z4*v{=E5H;c8iy0>sRiMGC_POlp{jSSgBt3uN^82ohOLFNo@*3-zx3S@O%b7l<_aO9hab4N_r| zziLIeX3E8E3iwS_ED#!*l?|^v?<18&aH1_SSP}q|Q)O1UR^)LmpBH2rh-FIo`49Xr zMr}pOO9d;&w8}%z5M~FLQ8h?#qBLTe`H2~O+f#I)l2J)wnbma=NkEDScqWc#IIyT~ zSZ1o^->@(VhQ*PE&hjF5@9`<|Z5p=&Gh+ z%SDM8ePTATccT7ft3NLzkxHava}cWr!1kH^)4WgeA9uCZ?@_-HvTpV6D`2PBg#f3j zQMgmJ(iOPni#H3FR+6(aXZY;UXO6!^;jG#NUqUprL(`7-^6PZMMNT&=%QeY2@^$C4 za2MAQV5?!)oY17`-{$O>irgdMtU=m^+~-u*%`3jqp2|B0G&b{D4vzGGjfvT zX35hCsV%2_iBDqxViWkLJtCzTfw&90!CkxGr(!Hy;%fr-@+?}y2;aCEeyaZDT1 zcyGhI;jo({p-EM=K{{VrZYIV(HAu@qpIydG%{y~xP_djc{O)y@HASuyB&W2gA$SnG z(DyR^n$q=xy5nKN0frMqWRdOg&1l%=q?nB>%kb-IS|Xj{x0YFj_|uU*_}Z^dkTrlxDHito$mJ9>r+Z@@2?cx8p?gK<8?F)q1_FCjkC_x92qL zyq6&pc#=WT^Xk4x{Q6FWly^Lrf)oDO7RkV5$9m@%bITYP9K%gulCEbd0?O#N2qd8O z(59VF!%<=T=Y@oNN%x)i3+W7E=zpK!Ufj>}41(dHp^tP~Kq}f3)kFTT9ky7Q3=Os~ ze|XMp8KwAj><!6I|W9}sxC}Hqx7sjk);uoSQ;qNa8q9{D!ZC|6SVW;!6Ah<%PHz+Dj6vh&0Q8%kl$ND?8Y3&j?Mfyh77JM+UNluX44bPnEAUdUNsE^<$2$(eYIvS_dn zQYe`y(gvyfk*CsN287?7RpTSpu9D{eXW%8ZJYJe@VJ06psq3;?n+FrM+bn;p~0 zjygnCJc$DlRe?WNO8ym|wyWwYsW!A#$6m-?C;T2Ym`Xf=L-vy^a@nh(yxb_)U4O5!{Kgutu%9gmATD15*0kzqqMx67-8>}~CA@&?!YxaRlKI+tCIlHjtnBB;yA3zk zolt3%4dc79YDU7jGJrWNH`8sj$Gdk(j6hhHm3(dI{==LpcUb#IwG67iIt*=*Nf_k&+6|5h0*_2BA6FcOaZ@ybfa&UQZMlCHK4Q(v|UV^mH)dRl? z7wp%Qn-%nQ6nidG3i^s*>Pe^LDKQzzlZwIM%xb6FU?J{Y0Z0$WQ&@MO|jL_bvZ$35Jv&zwH zBPG+1Q`{)5eOinx5Bt>~BwIB}P1j`Gc>!oy)%ou`2iuWfd`8ixB!0jH?TL~?IpNkb zw72UtMA+Ut^u3^J{$O{n5U=t+=$%>7zyZLg@%rCC%hIcU_aOT}gjz*7fgWIwN|;BJ z77G58g;^454u1FN7%JP&>z=@0EQ+_Tj2Gbt!18R*dgU`}L1LT4~5LnbJ;W+(J z<6rJZa(UR|M8)Q%%E?}OS!!RhP%|FzvR?4M3&_n0OV6Zx(xi%DWG)xA3woG~^9RDV z$1{Q*6*o%MxHU#V!FT*&z71sbUXto5C1?d$Q&5sTXAimyjB>&nfB#g8x{DQ+AA%YVcUGg}tz{4N%dFnkrcsJO>Mv%xFE8Nxixy?cqmW=) zLx$J&&)5^7ADm@9Qbf_&u$wL8W>u|DrRSBUojBk`#%|7wKP7MH1l``%&L*#xO}uqi zar+TG*y$~#sd+>_JzR=|17McuuIe?Zv)bZ;Fa8DPe@!E}lJi5Ce`ZD!DxslplpYU> zb>`Ql45{^3_{u-u+@239mdAETpanXQDkCduxX$8y>RsZ-ev!Fh`E__1A2PHE)DG^+ zjLuIceNF1%L+!0Ql?on|OTmRnZ*UqWolgaFE>zbhs$MgB8AUuOA_Of~6&xvvj&Hiv zxK$TMe$gLhMR^taC`f()sO4!1cXmY^jyfWWjkSHE(YIf9V-lTLOD^pUE^n^KR#Pp$`fRs1j{`scg z(@_SCXp3FvGbUW9Op>RAP&zSfUVwGKDH72ls+?+SW?4Rc}o6Bol z03y5QCihTNd~2w9oc1DeXiEnt;S3$C*k=3C?rU5uRce#l;dl z0ZVBrRIt>#uIZ41qv%)kp!T{mIoEA79~J{-cIA2I{?+B^jg$=Z{5Ok>SR~4KxrQ~D z1W{5@xdZx*BtNBQxvNk=aWxw#U%1Er)B}0-(YK_okW^yPkJe`def~p6Wr&v*9XgS- zdWYYpnW2g7_oITgxPTFOV*Je2{{P6eIKshC_RCf!c@b@5ok|1<1``5|CmaK5Ok`=F z$mBKX@wD*8mSc}^Av8eV(8J*uj?A1Cm$mm9rkoD%f-Twc`0=<8#xZIkM7oUp2mMS^ z3J)K5f=v0I(ZShaUPE&4>_;`Pp&jeF5AfB#tH(@M2W@%z61|HO&7H8S%_^T6y zL2Y+oF;Y6yd@eD589vTgQgG++wlD=hTNS?kDR=xB8*E|--$_h@jIH;iO~PFLPd7rP^9~tRIk81vljSirsvVHOA=4;daQOb7O>`>RuiO?cMSR_-kL znh{ViiqSO2Nrg9MHNib(trV@W=uaVqHJa&;{W$GHJDs2%r+=Z$AFI&*(I9iJY0C+u zn~-l*w=%5^qlstA=9^v2Oix7J7M_#BSBvQaZ4Yx&-FjL z1~!1yHGCl?dgdDs7UbVek`mIy1soR|HDzWKE z=@jl1iY)9W!{#l^efkRjOL-Dr4Luu8v|*1^nZGKd;P|AeX`SnAL3!~|8j1f7A6g4h zUehjwxEBW}nFb$JcJVd+zT$N^>?U@LJq%q&?g1*nD$rfj4~Dw8|EsPEw3h|ErlI?$ zy*DJwT!RD!t%=H&M;t`@mN~1!?z0|KcAh)MiSK3Vq@dJwX>yKP%GT7MA6icPWdIW& zk>!-1$07il5Kv#lR{mEUjQmaYFPxdO!2Kt(lBknibypy)tXhG`8x%(W=EE{4j7$tz zE=YtEea;}pAad+NYesH_@Jv|-(w?p9zRQJiB&8Vyi-st^h~sq*RKwF(v0{q0f-j2% zxCrIA6z^oIipB8rO{me?uYU&;)* zniI+$e`6`Tn7{)bOB!>WtX6F5YObzXbgY>=%N);qSqY#0>aRawNOlO!<@JpwFq&;x zex)ii%QqR(+kWzQ>y<&{H^&0AOwkAn#4#sK{A2O<@-%l!_Kq_b(F1fgmOe}Bbb}Y6 zx`KV=Q35i{o>7oUu`S}V-#irjdewsb+S-^+9}%-82-v_r#fDeBC6Mu!BhR%{W|Q?H zuF-6ZVHF3z8-BczVfM06GLlHw)P-7>wXH?pzScsl6gsPr+WP@R>44a1BhP+Gs8Eg9 zRTlK7Y0*XXNwr#c`x;ADkFDY@-iCHoK8@`An7kd*T7{`cio-h)T z^x3X-j^p&Ms0yd?T^ipmj@h zr->nd($R*`)Wyb7@A$MaWKVtW8}EF8;_yA)_&8$=Hak94HgszBBU~KoK*l_uj~KA> ze(@Mv1Z_Rtc}4cG5j`<(eIcyDW+9-v=`tNqAVe3K8%Co?CSIeM((yKz3gk_6H@^yc zFxz=B6NDzdto=PA#DG7fITs>_uf#BS$b}39%*whm&B(|>kxxOFp$23_XOVCPw4y5^ z>I3#g!0Vtgc)x7@_j5G1Muh;71%OYgB=_nKK$WJ8z=)afTI%^0>kM-uQk#M4cot2*#J>?l}GHDM0*;>2K2`=Sd{mz`Ty$A&JO1*MUHD zO5O7v^mV5vVs*N0)vt^8-qiOCXwt>z3Rw3lQy26X->kh06-7V#JSV$NB_ys5^#@%U zH9^U;+|s4KI3y&5{CT8d|AA3+Di1#@yX~D|@Kc5q3K>QxSLoK^*@lNfV&WFcE7&Xt z8NF6X->_x4wp+ z-VmJB`&ns)WlvNzwg(8oz=VDwmsZ&$P|4PlGo<#3X+#gAHM=k}Qwxx_>&Pthvx z7)Egg|6=w%77t46h~wI-3{qatv0@a`8FV{NP9oZ7?ckj1vyQmx6U`C zOzXc~3=6(pN)8nVspQkg{-J-ku-?vD_$USgFyzWX@ex%?U2#71qWhJC<9 zwiqOcVf`F~D4|_5PgBBZV1Td1w!~=0OdktO5;x995WBBO)|j@@gdJ6&L@1d+OOJ|E zZxBpg4%6^4b?Mb24>P(|9&l?^AaC~RBBr}|{#nJOn8)rWJ;h8%ZHencIxjnXO^7L( zFlgz@Hsdw8@KqbRN+;P|c&Qz)YM7_u^>W0SW|agn?80 zbDV_9UB033J0r({1ZtG0e4x2XH$p!Y$kluy70YSrk8*Jdn{Dcs!-rqVRXaHdVAu;FS_Ea`Pmn zGEH!#Nr9ecoyK#%Pu^T8a)iK)?xPBJ2-%lmCNU`XbRp_8*U{6r06Y@?y?W67)nt@7 zwsl_ls&^9lJKr$)zL4SlsVoQ77Dd}02)i$kuP`!-<%*9jb?Em(burE_8i#5>^3qnF zVGx6~ThvWdd7H!97ShUqoy}o=XN5bcQB;6CgB?>$bolPu2*E#edz$|8R--cUUwdr% zaB03Duz@Tf{}QuYjMZ;FFG*g-RR_|_xi)0bIZ5dIjdZ+xJo(FsQ932)G`#5uhz`}5 z$iw=+64K-{EaY(fvvy4}?~59|Q$9q$uw`(>Dgxx7 z`M6Gb0%@=1^NlQlbo~UnwLZd-Te)*naGiWf*`iSuw6ZrS`ZS9vx*Qhmta>3YGV6Ob zqiviS!gKR6({)&hRcHbjbz`ZE&bH|7LH5*U^D5{Uc{oNc`F5I4eo`KOOH0prBX}x@ zGOCTGJ(RyiW8P3_U@}!3xC8R1;A0LhRSHwt(7g?<=qV?REM=`9TN^YT6#94ziKP9k zO0yHA>#7NhIqn+u9&(bdTB-jQvUpOo1zI6VWjk=vnf~Y?#6Gl9D5c3)4UaZ#EOx7K z3e#*7mOT(S2=QCj7-DwT$2h@S!{YoKs$~`tw!m&#RUOpsaUxl?)4od!^*PR(Ja)ny ztl>WKb(mP&kQUN?g-%wO2o6Z&{kB*qvkvGI13P~B#2z<&*!uw-2*NDJI3$?n;r>R?tZ@ZM2=lF? z0h;N1?Q^g3?aYdjaCjmu5pg(Q{-#QfUwPsutR!+YjA|^iZ`Gz!pxo?x zPXv*(vyNV9j_FicV%mG_yT~D_A|dbn=rs1*em458l?t62uL(|CCGP+0>)fNEOyf9S z(z;bR6V~RMonjfRyJ%R6GA?bMVvO4)_lY$!O)|rXMaB$vD@l_`JFUx18kS<35{Vev zLlc@&n2AY?RBKTCymrsnv*&E@pYI>f@43A1bNM~L-{)(VXPurfY)Hiy-7^gj6>b|j zl6UE6ttV~6IfTpazi{PwUvtaTN?&rIaNI`%E^k!-fyxLTzK@ts?KW9~VTxW1s_!vl zBx&!DJu_uBdp7^VAa_RV1v4dd2{&)hLk?`q!rwd1D>>;m{nYaaEN-J!kcMs0zMJ5% z?^}0;c(6j`?pUQiMjAl%Ri?Yi(yXy1my#T7$bO51#|-Y?DS8#3T%H@|c#V31JY~)l zSuA(uf4HBp+n~zZP_|ARc|d~q5c?dprE{bA=^B$XuJ`ZcR4?1L#Sc3jq@a%L5seI}yV~FHv;Z%$)07pfH|BlD#hbGqMzl#~G05J&u+55!l^BJBwf@TTt7n51x4x+}Po=u3Oc*!^e&ZK87(TW(}kbk1P z$MTK^BF`kl-ax=EbRQkE{6cV)J!kgOVYCw`op{7RqSO?Jg(H$(sXrlA|2Vtgw{VCW zz+)Hmdok&e<=+`9VKd4eI9%=g(Ygok`as(jA*x;i#?2V$&~3N$PWqYLhRtN1_)Z%= z5ToDf*|7V)EH?j_3UPzbCVRQJRC$)aA@9jWGzLj(1_iY z-HG-Hv032HlV~H#9OKLZ75-+@#;QhY4ynCa9qfQeHb`#krEWXAH#mpu&t|+b7|ynP+?NzOk{nW0jq& z-E`)>4z>$P?78(fFbk&8lv3NvszZ3pZKnr5Z`>~Mm}M7?VKtJPmBS{DO>ExNF?rW7 z)l7&$blvmT>BB6a8@;>rStS-!#^c6dnzvH?IdA0`MVHew2&Mv%d7~uB(|7KF2Pg6; z^cxM{Y~@?f-vU&GjTP;*lLF9AjGAvi`4TIm=0fXA`-2L~+jS`&Q07|4ii7_}`CrXm z2R1N7KEg$3?3R;?RC)dJLjuPhNH0K2XeNyZBlzHU9163h{46Hl3)k+q3ye2GvI~4b}&zZkKU9{X+NDS;i88Id`mA@xy zM5;~1g=szX?I}%uQK)us$9+ePn#=Z09WjUt<5vZ>owJ62@{~%RK7c$7#dI?XaW12M zo3N-gWY6uRF7d50bu9wY{qDmW(~RQ`rCe^zHc>jX3;+U6Ra!2lcYS?} zxQvr({=mLKa~)-Wb_6w>l|E^%lUNg#(b8A|bxb;@OBxO+C=U75eCuf!OiW#LvM#ze zoFBJ}PP0Hl%BqdyJWjPei>7eiRqC{vBCHWe_7=;s{^l*ndDW`pBOA=|W{&P#*ay=Rx>(1=(Nfn_MJs@xbow$61%0~MD9NQdm4 zf8VbpH;k_ch=7}|5T~C3bXytF2Rq?M{2H%|ZtQrXvf7?nRYja6NbAa@{MFdq+BC&g zhC&I-G7br#ME2o}-GNWG=t7skO+YqC%&ek)^*Sf9al@%T?!1((PG7xrPqDaxxt z8w@}~af;L0-yCYh4pS+Vz8v56llNi;Ioz=#0VT{+5y;KVvLF1J1}?OqTb^KVUw&3s>Hd ze^&3E(8Uj|pIoR}Y67a#r-{4UEpJ*72{Iw$UOcoGZ}nLS8XE~su%z@D37!OP6=X7D zU!8nX>4$-?IISRlDE}P)Q=2sk#otzV For Red Hat OpenShift clusters, see the [Deploying KubeDB Platform in OpenShift Cluster](openshift-cluster.md) guide. + #### Additional configuration for EKS cluster See [Additional configuration for EKS cluster](common-config.md#additional-configuration-for-eks-cluster) in the Common Configuration guide for the EBS CSI / AWS Load Balancer Controller prerequisites and the commands to fetch the Kube API server endpoint, subnet IDs, and EIP allocation IDs. diff --git a/docs/platform/selfhost-setup/install/onprem-demo.md b/docs/platform/selfhost-setup/install/onprem-demo.md index 892477a..ae22f66 100644 --- a/docs/platform/selfhost-setup/install/onprem-demo.md +++ b/docs/platform/selfhost-setup/install/onprem-demo.md @@ -33,6 +33,9 @@ Before beginning the installation, identify your target infrastructure and clust * **Enable DNS:** Toggle this to allow the installer to manage or integrate with your DNS provider. * **Target IP:** Provide the static IP addresses for your cluster nodes or load balancer. * **Cluster Type:** Determine if you are installing on **Red Hat OpenShift Cluster**. + +> For Red Hat OpenShift clusters, see the [Deploying KubeDB Platform in OpenShift Cluster](openshift-cluster.md) guide. + ### 3. Global Administrative Settings See [Global Administrative Settings](common-config.md#global-administrative-settings) in the Common Configuration guide for the System Admin account fields (display name, email, password, and initial organization). diff --git a/docs/platform/selfhost-setup/install/openshift-cluster.md b/docs/platform/selfhost-setup/install/openshift-cluster.md new file mode 100644 index 0000000..5f4927e --- /dev/null +++ b/docs/platform/selfhost-setup/install/openshift-cluster.md @@ -0,0 +1,113 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: selfhost-openshift-cluster + name: OpenShift Cluster + parent: selfhosted-installer + weight: 6 +menu_name: docsplatform_{{.version}} +section_menu_id: selfhost-setup +--- + +# Deploying KubeDB Platform in OpenShift Cluster + +This guide describes how to deploy the **KubeDB Platform** on a **Red Hat OpenShift** cluster. The deployment types available to you depend on how you want to reach the platform: + +* **IP mode** — choose this when you want to access the platform over a **static IP**. Available deployment types: **Cloud Demo** and **Onprem Demo**. +* **DNS mode** — choose this when you want to access the platform over a **DNS name**. Available deployment types: **Onprem Demo** and **Self Hosted Production**. + +Regardless of the mode, an OpenShift deployment always requires you to toggle the **Install on Red Hat OpenShift cluster?** option and provide the **Kube API Server** endpoint. + +### Prerequisites + +See [Prerequisites](common-config.md#prerequisites) in the Common Configuration guide for the minimum cluster requirements and the optional k3s setup note. + +### 1. Visit the AppsCode Self-Hosted Page + +Navigate to [AppsCode Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
+Click on the `Create New Installer` button to get started. + +### 2. Enable OpenShift and Set the Kube API Server + +This is the common requirement for every OpenShift deployment, irrespective of the mode you chose above. + +* Toggle on the **Install on Red Hat OpenShift cluster?** option. +* Set the **Kube API Server** field with your cluster's API server endpoint. + +Run the following command against your OpenShift cluster to fetch the API server endpoint: + +```bash +oc whoami --show-server +``` + +You can also read it from your current kubeconfig context: + +```bash +kubectl config view --minify -o jsonpath='{.clusters[0].cluster.server}' +``` + +Paste the returned URL (for example, `https://api..:6443`) into the **Kube API Server** field. + +### 3. Choose the Deployment Mode + +Pick the `Deployment Type` based on how you want to access the platform, and give it a name in the installer name section. The specifics for each mode are below. + +#### IP mode (IP preferred) + +Use this mode when you want to reach the platform through a static IP instead of a DNS name. In this mode you can choose either **Cloud Demo** or **Onprem Demo** as the deployment type. + +* **DNS & Connectivity:** + * **Enable DNS:** Leave this toggle **off** since access is over an IP. + * **Target IP:** At this point the load balancer does not exist yet, so just provide any random IP to proceed with creating the installer. + +> [!IMPORTANT] +> The LoadBalancer IP is not known yet, so the random Target IP must be fixed later (see [Deploy KubeDB Platform](#5-deploy-kubedb-platform)). + +Once OpenShift is enabled and the Kube API Server is set, follow the standard configuration sections for the deployment type you picked. See the [Cloud Demo](cloud-demo.md) or [Onprem Demo](onprem-demo.md) guide for the full walkthrough of these sections. + +#### DNS mode (DNS preferred) + +Use this mode when you want to reach the platform through a DNS name. In this mode you can choose either **Onprem Demo** or **Self Hosted Production** as the deployment type, the latter being the recommended setup for production. + +* **DNS & Connectivity:** + * **Enable DNS:** Toggle this **on** so the installer can manage or integrate with your DNS provider. + * **Target IP:** At this point the load balancer does not exist yet, so just provide any random IP to proceed with creating the installer. + +> [!IMPORTANT] +> The LoadBalancer IP is not known yet, so the random Target IP and the DNS `A` record must be fixed later (see [Deploy KubeDB Platform](#5-deploy-kubedb-platform)). + +Once OpenShift is enabled and the Kube API Server is set, follow the standard configuration sections for the deployment type you picked. See the [Onprem Demo](onprem-demo.md) or [Self Hosted Production](selfhosted-production.md) guide for the full walkthrough of these sections. + +> [!NOTE] +> This guide only covers the fields that are **specific to an OpenShift deployment**. Each deployment type has many more configuration sections (Global Administrative Settings, Registry, Monitoring, TLS, Ingress & Gateway, NATS, and more). For the complete field-by-field walkthrough, follow the guide for the deployment type you choose: +> * **[Cloud Demo](cloud-demo.md)** +> * **[Onprem Demo](onprem-demo.md)** +> * **[Self Hosted Production](selfhosted-production.md)** + +### 4. Generate Installer and Documentation + +Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. + +### 5. Deploy KubeDB Platform + +Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your OpenShift cluster. For an OpenShift deployment the generated instructions are ordered specifically, and you must pause partway through to fix the placeholder Target IP: + +1. **Create the LoadBalancer service.** The first part of the generated instructions creates the platform's LoadBalancer service in the `ace` namespace. +2. **Wait for the external IP.** The LoadBalancer takes some time to get an external IP assigned. Run `kubectl get svc -n ace` until the `EXTERNAL-IP` column is populated, then copy that IP. +3. **Reconfigure the installer.** Update the **Target IP** with the assigned LoadBalancer IP and regenerate the installer. For **DNS mode**, also create or update the DNS `A` record so your domain points to this IP. +4. **Run the remaining install steps.** Continue with the rest of the generated instructions (flux install, `helm upgrade`, and the ACE install) using the reconfigured values. + +
+ + +### 6. Explore the Deployed Platform + +Once deployed, access the **KubeDB Platform** using the configured IP (IP mode) or domain (DNS mode). Log in with the admin account credentials provided during the creation process. + +
+ + +## Get Support + +If you encounter any challenges during the deployment or have questions, reach out to AppsCode support for assistance. diff --git a/docs/platform/selfhost-setup/install/openshift-demo.md b/docs/platform/selfhost-setup/install/openshift-demo.md deleted file mode 100644 index b95e8e4..0000000 --- a/docs/platform/selfhost-setup/install/openshift-demo.md +++ /dev/null @@ -1,82 +0,0 @@ ---- -layout: docs -menu: - docsplatform_{{.version}}: - identifier: selfhost-openshift-demo - name: Open Shift Demo - parent: selfhosted-installer - weight: 4 -menu_name: docsplatform_{{.version}} -section_menu_id: selfhost-setup ---- - -# Deploying KubeDB Platform: Open Shift Demo - -Welcome to the KubeDB Platform's **Open Shift Demo** deployment! In this mode, you have the flexibility to customize various aspects of the deployment to meet the specific requirements of your production environment. - -### Prerequisites - -See [Prerequisites](common-config.md#prerequisites) in the Common Configuration guide for the minimum cluster requirements and the optional k3s setup note. - -### 1. Visit the AppsCode Self-Hosted Page - -Navigate to [AppsCode Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
-Click on the `Create New Installer` button to get started. - -### 2. Choose Deployment Mode And Environment - -Choose `Deployment Type` -> `Open Shift Demo` and give it a name in the installer name section. - -Before beginning the installation, identify your target infrastructure and cluster type. - -* **DNS & Connectivity:** - * **Enable DNS:** Toggle this to allow the installer to manage or integrate with your DNS provider. - * **Target IP:** Provide the static IP addresses for your cluster nodes or load balancer. - - -### 3. Global Administrative Settings -See [Global Administrative Settings](common-config.md#global-administrative-settings) in the Common Configuration guide for the System Admin account fields (display name, email, password, and initial organization). - -For openshift cluster toggle Red Hat OpenShift cluster and give Kube API Server endpoint - -### 4. Registry -See [Registry](common-config.md#registry) in the Common Configuration guide for Docker registry proxies, Helm repositories, credentials, certs, and image pull secrets. - -### 5. Monitoring - -See [Monitoring](common-config.md#monitoring) in the Common Configuration guide for Alertmanager email and webhook configuration. - - -### 6. Settings -#### Domain White List and Proxy Servers - -See [Domain White List and Proxy Servers](common-config.md#domain-white-list-and-proxy-servers) in the Common Configuration guide for whitelisting domains, proxy servers, and login/logout URLs. - -### 7. TLS -See [TLS](common-config.md#tls) in the Common Configuration guide for configuring the certificate issuer (External or CA). - -### 8. Ingress & Gateway -See [Ingress & Gateway](common-config.md#ingress--gateway) in the Common Configuration guide for exposing the platform via the Gateway API or standard Ingress. - - -### 9. NATS - -See [NATS](common-config.md#nats) in the Common Configuration guide for configuring the internal messaging system (expose method, replicas, and resources). - -### 10. Self Management -See [Self Management](common-config.md#self-management) in the Common Configuration guide to enable or disable platform features. - -### 11. Branding & UI Customization -See [Branding & UI Customization](common-config.md#branding--ui-customization) in the Common Configuration guide to re-brand the platform interface. - -### 12. Generate Installer and Documentation - -Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. - -### 13. Deploy KubeDB Platform - -Follow the documentation provided by AppsCode to deploy the KubeDB Platform on your system. - -### 14. Explore the Deployed Platform - -Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process. diff --git a/docs/platform/selfhost-setup/install/selfhosted-production.md b/docs/platform/selfhost-setup/install/selfhosted-production.md index 8030c42..13493a8 100644 --- a/docs/platform/selfhost-setup/install/selfhosted-production.md +++ b/docs/platform/selfhost-setup/install/selfhosted-production.md @@ -47,7 +47,7 @@ Before beginning the installation, identify your target infrastructure and clust * **DNS & Connectivity:** * **Enable DNS:** Toggle this to allow the installer to manage or integrate with your DNS provider. * **Target IP:** Provide the static IP addresses for your cluster nodes or load balancer. -* **Cluster Type:** Determine if you are installing on **AWS EKS Cluster** or **Red Hat OpenShift Cluster**. For openshift cluster toggle Red Hat OpenShift cluster and give Kube API Server endpoint +* **Cluster Type:** Determine if you are installing on **AWS EKS Cluster** or **Red Hat OpenShift Cluster**. For openshift cluster toggle Red Hat OpenShift cluster and give Kube API Server endpoint. See the [Deploying KubeDB Platform in OpenShift Cluster](openshift-cluster.md) guide. * **Credential-Less Mode:** Enable this if you are using IAM roles for service accounts (IRSA) to avoid manual secret management.
From fb75a0a864cd005c1f4c8044d2a5755c7c4d990f Mon Sep 17 00:00:00 2001 From: Arnob Kumar Saha Date: Sun, 14 Jun 2026 12:25:51 +0600 Subject: [PATCH 10/19] Trimmed marketing fluff (e.g. "seamlessly", "unlock its full potential", redundant intros/closings) from the cluster-management and database-management guide sections Signed-off-by: Arnob Kumar Saha --- .../add-cluster/import-rancher-cluster.md | 22 ++++++--------- .../add-cluster/import-vendor-managed.md | 27 ++++++------------- .../add-cluster/overview.md | 26 +++++------------- .../self-managed/import-private.md | 19 +++++-------- .../add-cluster/self-managed/import-public.md | 21 ++++++--------- .../self-managed/import-self-managed.md | 2 +- .../cluster-management/cluster-features.md | 2 +- .../cluster-management/cluster-helm-charts.md | 14 ++-------- .../cluster-management/cluster-sidebar.md | 4 +-- .../cluster-management/cluster-upgrade.md | 5 +--- .../cluster-management/cluster-workload.md | 6 ++--- .../cluster-management/hub-ui/introduction.md | 2 +- .../guides/cluster-management/hub-ui/spoke.md | 8 ++---- .../cluster-management/hub-ui/upgrade.md | 6 ++--- .../cluster-management/remove-cluster.md | 5 +--- .../backup-configuration.md | 4 +-- .../database-management/backup-storage.md | 4 +-- .../guides/database-management/backup.md | 2 +- .../database-management/create-database.md | 8 +++--- .../database-usage-insight.md | 6 ++--- .../database-management/delete-database.md | 6 ++--- .../database-management/expose-via-gateway.md | 6 ++--- .../instant-backup-restore.md | 6 ++--- .../guides/database-management/monitoring.md | 6 ++--- .../database-management/recent-backups.md | 6 ++--- .../reconfigure-database.md | 12 ++++----- .../guides/database-management/repository.md | 6 ++--- .../database-management/restart-database.md | 8 +++--- .../guides/database-management/restore.md | 2 +- .../database-management/scaling-storage.md | 6 ++--- .../guides/database-management/scaling.md | 6 ++--- .../guides/database-management/snapshot.md | 8 +++--- .../guides/database-management/tls.md | 6 ++--- .../database-management/upgrade-version.md | 8 +++--- 34 files changed, 104 insertions(+), 181 deletions(-) diff --git a/docs/platform/guides/cluster-management/add-cluster/import-rancher-cluster.md b/docs/platform/guides/cluster-management/add-cluster/import-rancher-cluster.md index 738760a..ec69d41 100644 --- a/docs/platform/guides/cluster-management/add-cluster/import-rancher-cluster.md +++ b/docs/platform/guides/cluster-management/add-cluster/import-rancher-cluster.md @@ -13,27 +13,21 @@ section_menu_id: guides # Adding a Rancher Managed Cluster to Platform Console -Adding a `Rancher-Managed` cluster to the Platform Console involves a slightly different process. In order to import a `Rancher-Managed` cluster to the Platform Console, you need to create a Rancher Managed Organization and a Rancher Type Credential. +Importing a `Rancher-Managed` cluster requires a Rancher Type Credential and a Rancher Managed Organization. ## Create Rancher Type Credential -To create a Rancher type credential, refer to the [Credentials Management Documentation](../../account-management/kubernetes/credentials.md#rancher) and follow the instructions to add a new credential of type "Rancher." +Add a credential of type "Rancher" — see [Credentials Management](../../account-management/kubernetes/credentials.md#rancher). ## Create a Rancher Managed Organization -Unlike personal accounts, Rancher clusters are associated with Rancher Managed organizations. Follow the [Create a New Organization](../../account-management/orgs-members.md#create-a-new-organization) documentation with the following additional steps: +Rancher clusters belong to Rancher Managed organizations, not personal accounts. Follow [Create a New Organization](../../account-management/orgs-members.md#create-a-new-organization) with these settings: -1. Choose the organization's Origin as `Rancher Managed`. -2. Provide the Rancher `API Endpoint`, which you can find under the `Account & API Keys` page. -3. Click `Create` to complete the organization creation process. +1. Set the organization's Origin to `Rancher Managed`. +2. Provide the Rancher `API Endpoint` (found on the `Account & API Keys` page). +3. Click `Create`. ## Import the Cluster -Before importing a Rancher Managed cluster into the Platform Console, you must switch to the Rancher organization. Follow these steps: - -1. Go to [AppsCode Console](https://console.appscode.com). -2. Click on the Profile Icon or username. -3. Choose `Switch Account`. -4. Select your Rancher organization. - -Once you are in the Rancher organization, follow the standard cluster import process outlined in the [Import Vendor Managed Clusters](import-vendor-managed.md) documentation. +1. Switch to the Rancher organization: in the [AppsCode Console](https://console.appscode.com), click your profile, choose `Switch Account`, and select the Rancher organization. +2. Follow the standard import process in [Import Vendor Managed Clusters](import-vendor-managed.md). diff --git a/docs/platform/guides/cluster-management/add-cluster/import-vendor-managed.md b/docs/platform/guides/cluster-management/add-cluster/import-vendor-managed.md index 316d225..4b7d568 100644 --- a/docs/platform/guides/cluster-management/add-cluster/import-vendor-managed.md +++ b/docs/platform/guides/cluster-management/add-cluster/import-vendor-managed.md @@ -13,33 +13,22 @@ section_menu_id: guides # Adding a Vendor-Managed Cluster to Platform Console -Enhance your platform experience by seamlessly connecting your vendor-managed Kubernetes cluster to the [Platform Console](https://console.appscode.com/). Follow these step-by-step instructions: - -1. Visit [Platform Console](https://console.appscode.com/). -2. Click on the `Add Cluster` button. +1. Go to the [Platform Console](https://console.appscode.com/) and click `Add Cluster`. ### Choose Provider -3. From the `Vendor Managed` section, select the provider hosting your Kubernetes cluster. +2. In the `Vendor Managed` section, select the provider hosting your cluster. ### Select Credential -4. Choose a credential with the necessary permissions for accessing and importing the cluster. If you don't have a credential, create one by clicking the `+Create Credential` button [here](../../account-management/kubernetes/credentials.html). -5. Select the created credential and click `Next`. +3. Choose a credential with permission to access and import the cluster, then click `Next`. To create one, use the `+Create Credential` button (see [Credentials](../../account-management/kubernetes/credentials.html)). ### Select Cluster -6. This step varies based on your provider: - - For `Linode` or `Digital Ocean`, directly select the cluster. - - For `AKS`, `EKS`, and `GKE`: - - Choose the appropriate `Resource Group`, `Region`, or `Project` where the cluster resides. - - Select the specific cluster for import. - -### Customize Feature and Import - -7. Complete the process by clicking `Import` to bring the selected cluster into the Platform Console. +4. Selection depends on the provider: + - `Linode` / `Digital Ocean`: select the cluster directly. + - `AKS` / `EKS` / `GKE`: choose the `Resource Group`, `Region`, or `Project`, then select the cluster. -### Explore -8. Once imported, explore the cluster's details and capabilities within the dashboard. +### Customize Features and Import -By following these steps, you'll seamlessly integrate your vendor-managed Kubernetes cluster, unlocking its full potential within the platform. Feel free to refer back to this tutorial for guidance. \ No newline at end of file +5. Click `Import` to bring the cluster into the Platform Console, then explore it in the dashboard. \ No newline at end of file diff --git a/docs/platform/guides/cluster-management/add-cluster/overview.md b/docs/platform/guides/cluster-management/add-cluster/overview.md index 9f5c414..6269c79 100644 --- a/docs/platform/guides/cluster-management/add-cluster/overview.md +++ b/docs/platform/guides/cluster-management/add-cluster/overview.md @@ -12,26 +12,14 @@ section_menu_id: guides # Adding a Cluster to Platform Console -Integrating your Kubernetes cluster, whether it's vendor-managed or self-managed, into the platform console is a simple process that elevates your cluster management experience. +Adding a Kubernetes cluster to the Platform Console takes two steps: -The procedure consists of two primary steps: +## Step 1: Select the Cluster -## Step 1: Cluster Selection +- **Vendor-Managed:** [Import Vendor Managed Clusters](import-vendor-managed.md) +- **Rancher-Managed:** [Import Rancher Managed Clusters](import-rancher-cluster.md) +- **Self-Managed:** [Import Self-Managed Clusters](self-managed/import-self-managed.md) -#### For Vendor-Managed Clusters +## Step 2: Customize Features -To include Vendor-Managed clusters in the platform console, follow the steps outlined in [Import Vendor Managed Clusters](import-vendor-managed.md). - -For Rancher Managed cluster, refer to [Import Rancher Managed Clusters](import-rancher-cluster.md) documentation. - -#### For Self-Managed Clusters - -If you have a self-managed Kubernetes cluster, refer to [Import Self-Managed Clusters](self-managed/import-self-managed.md) for detailed instructions on adding it to the platform console. - -## Step 2: Feature Customization - -Following the successful addition of your cluster, the next step involves customizing features to be installed during the cluster import process into our system. This ensures a seamless integration and optimizes the functionality of your cluster within the platform. - -Explore your cluster further and leverage the full capabilities of the platform console. - -Feel free to refer to the comprehensive documents linked above for a detailed walkthrough of each step in the process. \ No newline at end of file +Choose the features to install during import. The selected features are deployed into the cluster as part of the import process. \ No newline at end of file diff --git a/docs/platform/guides/cluster-management/add-cluster/self-managed/import-private.md b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-private.md index 5314a07..d90e85b 100644 --- a/docs/platform/guides/cluster-management/add-cluster/self-managed/import-private.md +++ b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-private.md @@ -13,26 +13,21 @@ section_menu_id: guides # Adding a Private Self-Managed Cluster to Platform Console -Optimize your platform experience by seamlessly connecting your private or air-gapped self-managed Kubernetes cluster to the Platform Console. Follow these detailed steps for a smooth integration process: +1. Go to the [Platform Console](https://console.appscode.com/) and click `Add Cluster`. -1. Navigate to the [Platform Console](https://console.appscode.com/). -2. Click on the `Add Cluster` button to initiate the integration. +### Select Cluster Type -### Cluster Type Selection - Private - -3. From the `Self Managed` section, choose the option for a private or air-gapped cluster. +2. In the `Self Managed` section, choose the private/air-gapped cluster option. ### Provide Kubeconfig and Get Import Link -4. Provide the kubeconfig for your private Kubernetes cluster. Click `Get Import Link` button and you will get two commands. Execute either of these commands in your Kubernetes cluster. +3. Provide the kubeconfig for your cluster and click `Get Import Link`. Run either of the two returned commands inside your cluster. -### Feature Customization +### Customize Features -5. After completion, the UI will automatically transition to the feature customization step, optimizing your cluster's capabilities within the platform. +4. The UI then moves to the feature customization step. ### Explore -6. Once imported, explore the cluster's details and capabilities within the Platform Console. - -By following these steps, you'll seamlessly integrate your private or air-gapped self-managed Kubernetes cluster, unlocking its full potential within the platform. Feel free to refer back to this tutorial for guidance. +5. Once imported, explore the cluster in the Platform Console. diff --git a/docs/platform/guides/cluster-management/add-cluster/self-managed/import-public.md b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-public.md index 1db6d9f..ee764ca 100644 --- a/docs/platform/guides/cluster-management/add-cluster/self-managed/import-public.md +++ b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-public.md @@ -13,26 +13,21 @@ section_menu_id: guides # Adding a Public Self-Managed Cluster to Platform Console -Elevate your Kubernetes cluster management with Platform Console by seamlessly integrating your public self-managed Kubernetes cluster. Follow these detailed steps for a smooth integration process: +1. Go to the [Platform Console](https://console.appscode.com/) and click `Add Cluster`. -1. Navigate to the [Platform Console](https://console.appscode.com/). -2. Click on the `Add Cluster` button to initiate the integration. +### Select Cluster Type -### Cluster Type Selection - Public +2. In the `Self Managed` section, choose the public cluster option. -3. From the `Self Managed` section, choose the option for a public cluster. +### Provide Kubeconfig -### Provide Public Kubeconfig +3. Provide the kubeconfig for your cluster. -4. Provide the public kubeconfig for your Kubernetes cluster. This file contains essential information for establishing a connection between your cluster and the Platform Console. +### Customize Features -### Feature Customization - -5. Proceed seamlessly to the feature customization step, enhancing your cluster's capabilities within the platform. +4. Proceed to the feature customization step. ### Explore -6. Once imported, explore the cluster's details and capabilities within the Platform Console. - -By following these steps, you'll effortlessly integrate your public self-managed Kubernetes cluster, unlocking its full potential within the platform. Feel free to refer back to this tutorial for guidance. +5. Once imported, explore the cluster in the Platform Console. diff --git a/docs/platform/guides/cluster-management/add-cluster/self-managed/import-self-managed.md b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-self-managed.md index b559783..2841e9f 100644 --- a/docs/platform/guides/cluster-management/add-cluster/self-managed/import-self-managed.md +++ b/docs/platform/guides/cluster-management/add-cluster/self-managed/import-self-managed.md @@ -12,7 +12,7 @@ section_menu_id: guides # Adding a Self-Managed Cluster to Platform Console -If you possess a kubeconfig for either a public Kubernetes cluster or an air-gapped cluster, categorically referred to as self-managed clusters, here are the guides to seamlessly import these clusters into the Platform Console: +A self-managed cluster is any cluster you have a kubeconfig for — public or air-gapped. Use the guides below to import it into the Platform Console:

diff --git a/docs/platform/guides/cluster-management/cluster-features.md b/docs/platform/guides/cluster-management/cluster-features.md index e705cb2..df47064 100644 --- a/docs/platform/guides/cluster-management/cluster-features.md +++ b/docs/platform/guides/cluster-management/cluster-features.md @@ -12,7 +12,7 @@ section_menu_id: guides # Manage Feature Sets -**Feature Sets** are groups of AppsCode product capabilities that you can install or remove on any connected cluster. This page walks you through all 18 available Feature Sets and shows a step-by-step enable flow for the two most commonly used ones: **Backup & Recovery** and **Databases**. +**Feature Sets** are groups of AppsCode product capabilities that you can install or remove on any connected cluster. This page covers all 18 available Feature Sets and shows the enable flow for two common ones: **Backup & Recovery** and **Databases**. --- diff --git a/docs/platform/guides/cluster-management/cluster-helm-charts.md b/docs/platform/guides/cluster-management/cluster-helm-charts.md index 1c17a35..d0c3747 100644 --- a/docs/platform/guides/cluster-management/cluster-helm-charts.md +++ b/docs/platform/guides/cluster-management/cluster-helm-charts.md @@ -13,7 +13,7 @@ section_menu_id: guides # Manage Helm Charts in Platform Console -Platform Console offers a robust Helm Chart Management feature, allowing users to effortlessly manage Helm releases within their Kubernetes clusters. This functionality streamlines the installation of new charts, interaction with existing releases, and provides an overall intuitive interface for Helm chart management. +Platform Console's Helm Chart Management lets you manage Helm releases within your Kubernetes clusters — installing new charts, modifying existing releases, and rolling back versions from the UI. ## Accessing Helm Chart Management @@ -26,21 +26,11 @@ To navigate to the Helm Chart Management page: ### Install New Charts -Installing new Helm charts is a straightforward process: - 1. **Choose Chart Source:** Select a chart source from publicly available URLs or provide a custom URL. 2. **Select Chart and Version:** Browse and choose the desired chart and version. 3. **Customize Installation:** Provide a custom release name, namespace, and specify a custom values file during installation. ### Interact with Existing Releases -Efficiently manage existing Helm releases: - - **Modify Releases:** Adjust existing Helm releases based on evolving requirements. -- **Rollback to Previous Versions:** Easily revert to previous versions of Helm releases if needed. - -### User-Friendly Interface - -The Helm Chart Management page in the Platform Console ensures an intuitive and user-friendly interface. This allows users to manage Helm releases seamlessly, minimizing the reliance on complex Helm CLI commands. - -Explore the power of Helm chart management within the Platform Console and enhance your Kubernetes experience. +- **Rollback to Previous Versions:** Revert to previous versions of Helm releases if needed. diff --git a/docs/platform/guides/cluster-management/cluster-sidebar.md b/docs/platform/guides/cluster-management/cluster-sidebar.md index e2e545c..7b229b6 100644 --- a/docs/platform/guides/cluster-management/cluster-sidebar.md +++ b/docs/platform/guides/cluster-management/cluster-sidebar.md @@ -12,7 +12,7 @@ section_menu_id: guides # Customize the Cluster Sidebar -The **Cluster Sidebar** is your primary navigation panel inside a connected cluster. By default, it shows a curated set of Kubernetes workloads and AppsCode custom resources. The **Sidebar Settings** page lets you fully customize which menu items appear, so you can tailor the experience to your team's needs. +The **Cluster Sidebar** is the navigation panel inside a connected cluster. By default it shows a set of Kubernetes workloads and AppsCode custom resources. The **Sidebar Settings** page lets you customize which menu items appear. --- @@ -59,7 +59,7 @@ For example, typing `cert` instantly filters the list and highlights all matches ## Step 4 — Add or Rearrange Items (Drag & Drop) -To add a resource to your sidebar, simply **drag** it from the **All Available Menus** panel on the left and **drop** it into the **Updated List** panel on the right at the position you prefer. +To add a resource to your sidebar, **drag** it from the **All Available Menus** panel on the left and **drop** it into the **Updated List** panel on the right at the position you prefer. In the example below, the user is dragging **Appscode K8s Management → ProjectQuota** into the current sidebar layout. You can see it appearing as a floating drag indicator (`⠿`) in the left panel. diff --git a/docs/platform/guides/cluster-management/cluster-upgrade.md b/docs/platform/guides/cluster-management/cluster-upgrade.md index f0e878d..c226c57 100644 --- a/docs/platform/guides/cluster-management/cluster-upgrade.md +++ b/docs/platform/guides/cluster-management/cluster-upgrade.md @@ -15,10 +15,7 @@ section_menu_id: guides ## Overview -This guide walks through upgrading a **KubeDB Platform** deployment -across all cluster tiers, the base management cluster, the KubeDB Platform cluster, general imported -clusters, and spoke clusters. The example below upgrades from release `2025.5.16` to -`2025.6.x`. +Upgrade a **KubeDB Platform** deployment across all cluster tiers: the base management cluster, the KubeDB Platform cluster, general imported clusters, and spoke clusters. The example below upgrades from release `2025.5.16` to `2025.6.x`. --- diff --git a/docs/platform/guides/cluster-management/cluster-workload.md b/docs/platform/guides/cluster-management/cluster-workload.md index de00108..62e4f2c 100644 --- a/docs/platform/guides/cluster-management/cluster-workload.md +++ b/docs/platform/guides/cluster-management/cluster-workload.md @@ -13,7 +13,7 @@ section_menu_id: guides # Kubernetes Workload Management -The Kubernetes Workload Management section in the Platform Console offers robust capabilities for managing Kubernetes resources. Follow these steps to leverage this functionality: +The Kubernetes Workload Management section in the Platform Console manages Kubernetes resources. 1. Navigate to the [Platform Console](https://console.appscode.com). 2. Click on your imported cluster to access the Cluster Overview page. @@ -94,8 +94,6 @@ Select any resource from the left sidebar to list the resources. From there, you - Graph of Connected Resources - Resource Manifest -The `Datastore` section is dedicated to KubeDB, an AppsCode product, providing management capabilities for various types of databases. You can create new databases, explore overviews, components, connected resources, and manifests for each database. +The `Datastore` section is dedicated to KubeDB, an AppsCode product, for managing various types of databases. You can create new databases, explore overviews, components, connected resources, and manifests for each database. You can also create new resources directly from any resource list page by clicking the `➕ Create` button, filling out the form, and submitting to create the resource. - -Explore the power of Kubernetes workload management in the Platform Console for a seamless and efficient experience. diff --git a/docs/platform/guides/cluster-management/hub-ui/introduction.md b/docs/platform/guides/cluster-management/hub-ui/introduction.md index 7986b83..1a748aa 100644 --- a/docs/platform/guides/cluster-management/hub-ui/introduction.md +++ b/docs/platform/guides/cluster-management/hub-ui/introduction.md @@ -11,7 +11,7 @@ section_menu_id: guides --- # Hub UI -Hub UI is to manage multiple cluster from a single point. In this guide we will see how you can do that +Hub UI lets you manage multiple clusters from a single point. ![Hub & Spoke Model](../images/introduction/hub-spoke-model.png) diff --git a/docs/platform/guides/cluster-management/hub-ui/spoke.md b/docs/platform/guides/cluster-management/hub-ui/spoke.md index b2f20d4..68494f5 100644 --- a/docs/platform/guides/cluster-management/hub-ui/spoke.md +++ b/docs/platform/guides/cluster-management/hub-ui/spoke.md @@ -16,7 +16,7 @@ section_menu_id: guides ### Steps -1. Go to **Import Cluster** like before and do the necessary steps +1. Go to **Import Cluster** and complete the necessary steps 2. Select an existing hub cluster before importing ![Spoke](../images/spoke/spoke.png) @@ -27,11 +27,7 @@ section_menu_id: guides ![Homepage](../images/spoke/homepage.png) - -This method can be started from Hub cluster as well - - - +This method can also be started from the Hub cluster: 1. Go to Hub → **Cluster List** 2. Click **Import Managed Cluster** diff --git a/docs/platform/guides/cluster-management/hub-ui/upgrade.md b/docs/platform/guides/cluster-management/hub-ui/upgrade.md index 7e7bbb4..4b60e87 100644 --- a/docs/platform/guides/cluster-management/hub-ui/upgrade.md +++ b/docs/platform/guides/cluster-management/hub-ui/upgrade.md @@ -19,13 +19,13 @@ section_menu_id: guides ![Upgrade](../images/upgrade/upgrade_1.png) -2. You will see a new interface a spoke featureset inside a hub +2. You will see the spoke featureset inside the hub ![Upgrade](../images/upgrade/upgrade_2.png) -Here if you want a spoke to intentionally have different features than hub then you can configure them from here +To give a spoke different features than the hub, configure them here. -3. Go to the upgrade version from sidebar if there is any latest version available you will upgrade button click and Done +3. Go to **Upgrade Version** from the sidebar. If a latest version is available, click the upgrade button. ![Upgrade](../images/upgrade/upgrade_3.png) diff --git a/docs/platform/guides/cluster-management/remove-cluster.md b/docs/platform/guides/cluster-management/remove-cluster.md index 4835875..682558a 100644 --- a/docs/platform/guides/cluster-management/remove-cluster.md +++ b/docs/platform/guides/cluster-management/remove-cluster.md @@ -13,7 +13,7 @@ section_menu_id: guides # Remove / Delete Cluster -Removing an already imported cluster from the Platform Console is a straightforward process, and you can also manage associated features during removal. Follow these steps to seamlessly remove a cluster: +You can remove an imported cluster from the Platform Console and manage its associated features during removal. 1. **Navigate to the Cluster Overview Page:** - Go to the [Platform Console](https://console.appscode.com). @@ -31,9 +31,6 @@ Removing an already imported cluster from the Platform Console is a straightforw 4. **Manage Features:** - During the removal process, you have the option to disable features associated with the cluster. - - Utilize this feature to tailor your Platform Console environment based on your evolving requirements. - -This streamlined process ensures efficient cluster management within the Platform Console, providing flexibility and control over your Kubernetes clusters. --- diff --git a/docs/platform/guides/database-management/backup-configuration.md b/docs/platform/guides/database-management/backup-configuration.md index 799ee67..63719b1 100644 --- a/docs/platform/guides/database-management/backup-configuration.md +++ b/docs/platform/guides/database-management/backup-configuration.md @@ -47,7 +47,7 @@ The list page shows all BackupConfigurations across namespaces. Use the **Select ## 3. Viewing a BackupConfiguration -Click on any BackupConfiguration name in the list to open its detail page. The detail page is divided into several panels giving a full picture of the configuration's state and linked resources. +Click on any BackupConfiguration name in the list to open its detail page. ### 3.1 - Overview @@ -167,7 +167,7 @@ The top section captures the core identity and storage references for the Backup ### 4.2 - Labels & Annotations -Expand the **Labels & Annotations** panel to attach custom metadata to the BackupConfiguration resource for organization, filtering, or integration with other Kubernetes tools. +Expand the **Labels & Annotations** panel to attach custom metadata to the BackupConfiguration resource. ![Labels and Annotations panel showing Labels and Annotations each with Key-Value input rows and Add new buttons](../images/backup/config-label-annotation.png) diff --git a/docs/platform/guides/database-management/backup-storage.md b/docs/platform/guides/database-management/backup-storage.md index 8fcb100..2456e09 100644 --- a/docs/platform/guides/database-management/backup-storage.md +++ b/docs/platform/guides/database-management/backup-storage.md @@ -111,7 +111,7 @@ The form starts with basic identity fields: ### 4.2 - Labels & Annotations -Expand the **Labels & Annotations** section to attach custom metadata for organization and integration: +Expand the **Labels & Annotations** section to attach custom metadata: ![Labels and Annotations panel showing Labels and Annotations each with Key-Value input rows and Add new buttons](../images/backup/storage-label-annotation.png) @@ -121,7 +121,7 @@ Expand the **Labels & Annotations** section to attach custom metadata for organi ### 4.3 - Backend Configuration -The **Backend** section defines the storage provider and its credentials. This is where you configure the actual cloud storage connection. +The **Backend** section defines the storage provider and its credentials. ![Backend section showing Provider dropdown (azure selected) with Auth and Spec sub-panels for Azure storage configuration](../images/backup/storage-create-backend.png) diff --git a/docs/platform/guides/database-management/backup.md b/docs/platform/guides/database-management/backup.md index 875f8e0..6acb0af 100644 --- a/docs/platform/guides/database-management/backup.md +++ b/docs/platform/guides/database-management/backup.md @@ -18,7 +18,7 @@ This guide covers how to use the **Configure Backup** interface to manage data p ## 1. Getting Started -To begin, select **Configure Backup** from the left sidebar. This selection determines the available settings and workflow. +Select **Configure Backup** from the left sidebar. This selection determines the available settings and workflow. - **BackupConfig:** Use this to create, delete, or modify specific backup tasks. - **BackupBlueprint:** Use this to manage high-level templates for enabling or disabling backups across multiple resources. diff --git a/docs/platform/guides/database-management/create-database.md b/docs/platform/guides/database-management/create-database.md index 53f050b..758d890 100644 --- a/docs/platform/guides/database-management/create-database.md +++ b/docs/platform/guides/database-management/create-database.md @@ -13,7 +13,7 @@ section_menu_id: guides # Creating a Database -This guide explains how to create a new managed database instance using the platform console. The creation process is a multi-step wizard that walks you through selecting a database engine, setting a name and namespace, configuring topology and resources, and enabling optional features like monitoring, TLS, and backups. +Creating a database is a multi-step wizard: select a database engine, set a name and namespace, configure topology and resources, and enable optional features like monitoring, TLS, and backups. --- @@ -33,7 +33,7 @@ You will be presented with a grid of all supported database engines. Click on th ![Database type selection grid showing all supported engines including MongoDB, PostgreSQL, MySQL, Redis, and more](../images/db-create/db-type-select.png) -> **Tip:** The console supports a wide range of engines including relational, document, key-value, search, and time-series databases. Select the engine that best fits your workload. +> **Tip:** Supported engines include relational, document, key-value, search, and time-series databases. --- @@ -60,7 +60,7 @@ The main configuration page shows all settings for the new database. At the top, ### 4.1 - Database Version -Select the database engine version from the **Database Version** dropdown. The version determines the engine features, compatibility, and runtime behaviour of your cluster. +Select the database engine version from the **Database Version** dropdown. The version determines engine features, compatibility, and runtime behaviour. ### 4.2 - Database Mode @@ -151,7 +151,7 @@ Expand the **Advanced Configuration** panel (labelled *Configure Credentials, De ### 5.1 - Labels & Annotations -Add custom Kubernetes labels and annotations to the database resources for organization, monitoring, and integration with other tools and services. +Add custom Kubernetes labels and annotations to the database resources. ![Advanced Configuration panel showing Labels and Annotations sections each with Key-Value input rows and Add new buttons](../images/db-create/advance-lavel-annotation.png) diff --git a/docs/platform/guides/database-management/database-usage-insight.md b/docs/platform/guides/database-management/database-usage-insight.md index 3ae27de..fbf13a4 100644 --- a/docs/platform/guides/database-management/database-usage-insight.md +++ b/docs/platform/guides/database-management/database-usage-insight.md @@ -13,7 +13,7 @@ section_menu_id: guides # Database Usage & Insights -This guide explains how to use the **Overview**, **Insights**, and **Users** pages available on every database detail page in the platform console. These pages give you a live view of your database's connection details, performance metrics, query analytics, and access control bindings. +Every database detail page has **Overview**, **Insights**, and **Users** pages. They give a live view of the database's connection details, performance metrics, query analytics, and access control bindings. --- @@ -29,7 +29,7 @@ From the **Datastore** section in the left sidebar, click on any database engine ## 2. Overview -The **Overview** tab is the landing page for any database instance. It is divided into two panels — **Connection Details** and **Insights** — and a **Nodes** table at the bottom. +The **Overview** tab has two panels — **Connection Details** and **Insights** — and a **Nodes** table at the bottom. ![Database Overview page showing Connection Details, Insights summary panel, and Nodes table](../images/db-overview.png) @@ -69,7 +69,7 @@ The **Nodes** table at the bottom lists every pod in the database cluster with i ## 3. Insights -The **Insights** tab provides a deeper view into database performance — including Grafana dashboards, slow query analysis, and collection-level storage metrics. +The **Insights** tab provides Grafana dashboards, slow query analysis, and collection-level storage metrics. ![Insights tab showing stat summary, Grafana Dashboards section, Slow Queries table, and Top Collections table](../images/db-insights.png) diff --git a/docs/platform/guides/database-management/delete-database.md b/docs/platform/guides/database-management/delete-database.md index 302c798..dcfab2b 100644 --- a/docs/platform/guides/database-management/delete-database.md +++ b/docs/platform/guides/database-management/delete-database.md @@ -13,7 +13,7 @@ section_menu_id: guides # Delete Database -This guide explains how to delete a database instance from the platform console. There are two ways to trigger a deletion — from the **Datastore Overview** page (bulk or single) or from inside the **individual database page**. Both methods lead to the same confirmation step. +There are two ways to delete a database — from the **Datastore Overview** page (bulk or single) or from inside the **individual database page**. Both lead to the same confirmation step. > **Warning:** Deleting a database is a permanent and irreversible action. Ensure you have a valid backup before proceeding. @@ -27,7 +27,7 @@ Navigate to the **Datastore** section from the left sidebar and select your data ## 2. Deleting from the Datastore Overview -Use this method to delete one or more databases at once directly from the instance list. +Use this method to delete one or more databases at once from the instance list. ![Datastore Overview page with a database instance selected and the Delete Selected button highlighted](../images/delete-overview.png) @@ -42,7 +42,7 @@ Use this method to delete one or more databases at once directly from the instan ## 3. Deleting from the Database Detail Page -Use this method to delete a specific database while viewing its detail page. +Use this method to delete a specific database from its detail page. ![MongoDB database detail page showing the Delete button in the top-right navbar](../images/delete.png) diff --git a/docs/platform/guides/database-management/expose-via-gateway.md b/docs/platform/guides/database-management/expose-via-gateway.md index 3871318..4b4bb86 100644 --- a/docs/platform/guides/database-management/expose-via-gateway.md +++ b/docs/platform/guides/database-management/expose-via-gateway.md @@ -13,15 +13,13 @@ section_menu_id: guides # Expose via Gateway -This guide explains how to use the **Expose via Gateway** interface to control whether your database is exposed externally through the gateway. Enabling this makes your database accessible outside the cluster via the configured gateway endpoint. +Control whether your database is exposed externally through the gateway. Enabling this makes your database accessible outside the cluster via the configured gateway endpoint. --- ## 1. Getting Started -To begin, select **Expose via Gateway** from the **Operations** section in the left sidebar. - -You will land on a simple form with a single toggle that controls the gateway exposure state of your database. +Select **Expose via Gateway** from the **Operations** section in the left sidebar. The form has a single toggle that controls the gateway exposure state of your database. ![Expose via Gateway page showing the Expose Database toggle and Deploy button](../images/expose-via-gateway.png) diff --git a/docs/platform/guides/database-management/instant-backup-restore.md b/docs/platform/guides/database-management/instant-backup-restore.md index 7783fea..3f6342b 100644 --- a/docs/platform/guides/database-management/instant-backup-restore.md +++ b/docs/platform/guides/database-management/instant-backup-restore.md @@ -19,7 +19,7 @@ This guide covers two workflows: using the **Instant Backup** interface to trigg ## 1. Getting Started -To begin, select **Instant Backup** or **Restore** from the left sidebar under **Operations**. +Select **Instant Backup** or **Restore** from the left sidebar under **Operations**. - **Instant Backup:** Use this to immediately trigger a backup using an existing backup configuration and session. - **Restore:** Use this to recover data from a specific backup snapshot. @@ -28,7 +28,7 @@ To begin, select **Instant Backup** or **Restore** from the left sidebar under * ## 2. Instant Backup -The **Instant Backup** form lets you trigger an on-demand backup right away by selecting an existing backup configuration and one or more backup sessions. +The **Instant Backup** form triggers an on-demand backup by selecting an existing backup configuration and one or more backup sessions. ![Instant Backup form showing Backup Configuration and Backup Sessions fields](../images/instant-backup.png) @@ -52,7 +52,7 @@ The **Instant Backup** form lets you trigger an on-demand backup right away by s ## 3. Configuring a Restore -The **Restore Configuration** form allows you to define exactly which data you want to recover and where it should come from. +The **Restore Configuration** form defines which data to recover and its source. ![Restore Configuration form with Repository and Snapshot fields](../images/restore-config.png) diff --git a/docs/platform/guides/database-management/monitoring.md b/docs/platform/guides/database-management/monitoring.md index a695f19..c30975a 100644 --- a/docs/platform/guides/database-management/monitoring.md +++ b/docs/platform/guides/database-management/monitoring.md @@ -13,15 +13,13 @@ section_menu_id: guides # Configure Monitoring -This guide explains how to use the **Monitoring** interface to enable and configure Prometheus-based monitoring for your database. You can choose from three monitoring methods and optionally customize the metrics exporter sidecar that is injected alongside your database. +This guide explains how to use the **Monitoring** interface to enable and configure Prometheus-based monitoring for your database. You can choose from three monitoring methods and optionally customize the metrics exporter sidecar injected alongside your database. --- ## 1. Getting Started -To begin, select **Monitoring** from the left sidebar. - -You will land on the **Monitoring** form, which is divided into the following sections: +Select **Monitoring** from the left sidebar. The **Monitoring** form is divided into the following sections: - **Enable Monitoring** — Master toggle to turn monitoring on or off. - **Select a Monitoring Method** — Choose how Prometheus scrapes your database metrics. diff --git a/docs/platform/guides/database-management/recent-backups.md b/docs/platform/guides/database-management/recent-backups.md index 675d4e1..683acc1 100644 --- a/docs/platform/guides/database-management/recent-backups.md +++ b/docs/platform/guides/database-management/recent-backups.md @@ -13,7 +13,7 @@ section_menu_id: guides # Recent Backups -This guide explains how to view and manage **BackupSessions** — individual backup job executions triggered by BackupConfigurations or manually created on-demand. Each BackupSession represents a single point-in-time snapshot of your database. +A **BackupSession** is a single backup job execution — triggered by a BackupConfiguration or created manually on-demand — that produces a point-in-time snapshot of your database. This guide explains how to view and manage BackupSessions. --- @@ -46,11 +46,11 @@ The list page displays all BackupSessions in your cluster, both scheduled (from ## 3. Viewing a BackupSession -Click on any BackupSession name in the list to open its detail page. The detail page shows the session's metadata, linked configuration, and all snapshots created. +Click on any BackupSession name in the list to open its detail page. ### 3.1 - Overview -The detail page opens on the **Overview** tab showing: +The detail page opens on the **Overview** tab showing the session's metadata, linked configuration, and all snapshots created: ![BackupSession detail page showing Basic info, Backup Configuration table, and Snapshots table](../images/backup/recent-db-overview.png) diff --git a/docs/platform/guides/database-management/reconfigure-database.md b/docs/platform/guides/database-management/reconfigure-database.md index 56c106c..f8b777f 100644 --- a/docs/platform/guides/database-management/reconfigure-database.md +++ b/docs/platform/guides/database-management/reconfigure-database.md @@ -13,15 +13,13 @@ section_menu_id: guides # Reconfigure Databases -This guide explains how to use the **Reconfigure** interface to update your database configuration. You can select a new configuration secret, apply a custom configuration directly, or remove an existing configuration — all through a `MongoDBOpsRequest` that is safely tracked in your cluster. +The **Reconfigure** interface updates your database configuration. You can select a new configuration secret, apply a custom configuration directly, or remove an existing configuration — all through a `MongoDBOpsRequest` that is tracked in your cluster. --- ## 1. Getting Started -To begin, select **Reconfigure** from the **Operations** section in the left sidebar. - -You will land on the **Reconfigure** form, which provides three operation modes via tabs: +Select **Reconfigure** from the **Operations** section in the left sidebar. The **Reconfigure** form provides three operation modes via tabs: - **New Config Secret** — Select an existing Kubernetes secret or create a new one to use as your database configuration. - **Apply Config** — Define custom configuration key-value pairs inline, without needing a pre-existing secret. @@ -33,7 +31,7 @@ You will land on the **Reconfigure** form, which provides three operation modes ## 2. New Config Secret -The **New Config Secret** tab lets you attach a Kubernetes secret containing your database configuration. Use this when you already have a configuration secret in your cluster or want to create one from scratch. +The **New Config Secret** tab attaches a Kubernetes secret containing your database configuration. Use this when you already have a configuration secret in your cluster or want to create one from scratch. ![New Config Secret tab showing the Config Secret dropdown and YAML preview panel](../images/reconfigure-new-secret.png) @@ -62,7 +60,7 @@ If you choose **+ Create a new Secret**, a form will expand below the dropdown: ## 3. Apply Config -The **Apply Config** tab lets you define custom database configuration parameters directly as key-value pairs, without needing a pre-existing secret. These parameters will overwrite the current settings. +The **Apply Config** tab defines custom database configuration parameters directly as key-value pairs, without needing a pre-existing secret. These parameters will overwrite the current settings. ![Apply Config tab showing the Configuration dropdown and YAML preview panel](../images/reconfigure-apply.png) @@ -76,7 +74,7 @@ The **Apply Config** tab lets you define custom database configuration parameter ## 4. Remove -The **Remove** tab lets you detach and remove an existing configuration secret from your database, reverting it to its default settings. +The **Remove** tab detaches an existing configuration secret from your database, reverting it to its default settings. ![Remove tab showing the Configuration dropdown for selecting the secret to remove](../images/reconfigure-remove.png) diff --git a/docs/platform/guides/database-management/repository.md b/docs/platform/guides/database-management/repository.md index 75deb01..a5d9451 100644 --- a/docs/platform/guides/database-management/repository.md +++ b/docs/platform/guides/database-management/repository.md @@ -13,7 +13,7 @@ section_menu_id: guides # Repository -This guide explains how to view and create **Repository** resources using the platform console. A Repository is the logical backup repository that stores individual snapshots of a database within a BackupStorage backend. It acts as the bridge between BackupConfigurations and the actual cloud storage. +A **Repository** is the logical backup repository that stores individual snapshots of a database within a BackupStorage backend, acting as the bridge between BackupConfigurations and the cloud storage. This guide explains how to view and create Repository resources using the platform console. --- @@ -43,11 +43,11 @@ The list page displays all Repository resources configured across your cluster. ## 3. Viewing a Repository -Click on any Repository name in the list to open its detail page. The detail page displays repository metadata and all snapshots stored within it. +Click on any Repository name in the list to open its detail page. ### 3.1 - Overview -The detail page shows comprehensive information about the repository: +The detail page displays repository metadata and all snapshots stored within it: ![Repository detail page showing Basic info, Backup Storage, Snapshots, and linked resources](../images/backup/repository-db-overview.png) diff --git a/docs/platform/guides/database-management/restart-database.md b/docs/platform/guides/database-management/restart-database.md index bb75625..df2f702 100644 --- a/docs/platform/guides/database-management/restart-database.md +++ b/docs/platform/guides/database-management/restart-database.md @@ -13,15 +13,13 @@ section_menu_id: guides # Database Restarts -This guide explains how to use the **Restart** interface to perform a rolling restart of your database. The operation is managed through a `MongoDBOpsRequest`, which ensures the restart is carried out safely and tracked in your cluster. +The **Restart** interface performs a rolling restart of your database. The operation is managed through a `MongoDBOpsRequest`, which carries out the restart safely and tracks it in your cluster. --- ## 1. Getting Started -To begin, select **Restart** from the **Operations** section in the left sidebar. - -You will land on the **Restart** form, which contains one main section: +Select **Restart** from the **Operations** section in the left sidebar. The **Restart** form contains one main section: - **OpsRequest Options** — Configure how the restart operation is executed, including timeout and apply policy. @@ -48,7 +46,7 @@ Expand the **OpsRequest Options** panel to configure the restart operation. ## 3. Review and Submit -The Preview page displays the full `MongoDBOpsRequest` manifest that will be applied to your cluster. Review it carefully to confirm all settings are correct. +The Preview page displays the full `MongoDBOpsRequest` manifest that will be applied to your cluster. ![Preview page showing the generated MongoDBOpsRequest YAML manifest for Restart](../images/restart-submit.png) diff --git a/docs/platform/guides/database-management/restore.md b/docs/platform/guides/database-management/restore.md index 4d3c432..e6755e8 100644 --- a/docs/platform/guides/database-management/restore.md +++ b/docs/platform/guides/database-management/restore.md @@ -109,7 +109,7 @@ Once all required fields are filled, click **Preview** to review the generated ` 1. **Submit:** Once satisfied, click **Submit** to create the Restore and begin the restoration process. -> **Note:** After submitting, the restore operation will begin immediately. Monitor the restore status on the detail page. The target database will be updated with the restored data once the operation completes successfully. +> **Note:** After submitting, the restore operation begins immediately. Monitor the status on the detail page; the target database is updated with the restored data once the operation completes successfully. --- diff --git a/docs/platform/guides/database-management/scaling-storage.md b/docs/platform/guides/database-management/scaling-storage.md index 04873e4..ab3eb19 100644 --- a/docs/platform/guides/database-management/scaling-storage.md +++ b/docs/platform/guides/database-management/scaling-storage.md @@ -13,15 +13,13 @@ section_menu_id: guides # Scaling Storages -This guide explains how to use the **Expand Volume** interface to increase the storage capacity of your database. Two approaches are available — a manual **Expand Volume** operation for an immediate one-time resize, and **Storage Autoscaling** which automatically expands storage based on usage thresholds. +Increase the storage capacity of your database. Two approaches are available — a manual **Expand Volume** operation for an immediate one-time resize, and **Storage Autoscaling** which automatically expands storage based on usage thresholds. --- ## 1. Getting Started -To begin, select **Scale Storage** from the **Operations** section in the left sidebar. - -You will land on the **Expand Volume** form, which contains two method cards at the top: +Select **Scale Storage** from the **Operations** section in the left sidebar. The **Expand Volume** form contains two method cards at the top: - **Expand Volume** — Manually increase the database storage volume to a specified size. - **Storage Autoscaling** — Automatically scale storage capacity based on configurable usage thresholds. diff --git a/docs/platform/guides/database-management/scaling.md b/docs/platform/guides/database-management/scaling.md index 7fb6a82..61613aa 100644 --- a/docs/platform/guides/database-management/scaling.md +++ b/docs/platform/guides/database-management/scaling.md @@ -13,15 +13,13 @@ section_menu_id: guides # Scaling Databases -This guide explains how to use the **Scale Vertically** interface to adjust the computational resources and replica count of your database. Three scaling approaches are available — **Vertical Scaling** for manual CPU and memory adjustments, **Compute Autoscaling** for policy-driven automatic resource management, and **Horizontal Scaling** for changing the number of database replicas. +Adjust the computational resources and replica count of your database. Three scaling approaches are available — **Vertical Scaling** for manual CPU and memory adjustments, **Compute Autoscaling** for policy-driven automatic resource management, and **Horizontal Scaling** for changing the number of database replicas. --- ## 1. Getting Started -To begin, select **Scale Vertically** from the **Operations** section in the left sidebar. - -You will land on the scaling form, which shows two method cards at the top: +Select **Scale Vertically** from the **Operations** section in the left sidebar. The scaling form shows two method cards at the top: - **Vertical Scaling** — Manually adjust CPU and memory allocated to your database nodes. - **Compute Autoscaling** — Automatically scale CPU and memory in response to workload demands using predefined policies. diff --git a/docs/platform/guides/database-management/snapshot.md b/docs/platform/guides/database-management/snapshot.md index db531b0..326b57e 100644 --- a/docs/platform/guides/database-management/snapshot.md +++ b/docs/platform/guides/database-management/snapshot.md @@ -13,7 +13,7 @@ section_menu_id: guides # Snapshot -This guide explains how to view and manage **Snapshot** resources using the platform console. A Snapshot represents a point-in-time backup of a database stored in a backup repository, capturing the complete state of the database at the moment of creation. +A **Snapshot** is a point-in-time backup of a database stored in a backup repository. This guide explains how to view and manage Snapshot resources using the platform console. --- @@ -47,11 +47,11 @@ The list page displays all Snapshot resources in your cluster. Use the **Select ## 3. Viewing a Snapshot -Click on any Snapshot name in the list to open its detail page. The detail page shows snapshot metadata, verification status, and the repository it belongs to. +Click on any Snapshot name in the list to open its detail page. ### 3.1 - Overview -The detail page shows comprehensive snapshot information: +The detail page shows snapshot metadata, verification status, and the repository it belongs to: ![Snapshot detail page showing Basic info, Repository reference, and Invoker information](../images/backup/snapshot-operation-view.png) @@ -92,7 +92,7 @@ The detail page shows comprehensive snapshot information: ## 4. Deleting a Snapshot -To delete a snapshot, click on the snapshot name to open its detail page, then locate the delete action. The delete operation confirms your intention to remove the snapshot from the repository. +To delete a snapshot, click on the snapshot name to open its detail page, then locate the delete action. ### 4.1 - Delete Confirmation diff --git a/docs/platform/guides/database-management/tls.md b/docs/platform/guides/database-management/tls.md index 6ed12f8..53d7ba6 100644 --- a/docs/platform/guides/database-management/tls.md +++ b/docs/platform/guides/database-management/tls.md @@ -13,15 +13,13 @@ section_menu_id: guides # Configure TLS -This guide explains how to use the **TLS Configure** interface to manage TLS settings for your database. You can update TLS certificates, rotate existing ones, or remove TLS entirely — all managed through a `OpsRequest` that is applied safely to your cluster. +Manage TLS settings for your database. You can update TLS certificates, rotate existing ones, or remove TLS entirely — all managed through a `OpsRequest` applied to your cluster. --- ## 1. Getting Started -To begin, select **TLS Configure** from the **Operations** section in the left sidebar. - -You will land on the **TLS Configure** form, which is divided into the following sections: +Select **TLS Configure** from the **Operations** section in the left sidebar. The **TLS Configure** form is divided into the following sections: - **TLS Operation** — Choose the type of TLS action to perform. - **Remove TLS** — Toggle to strip TLS from the database entirely. diff --git a/docs/platform/guides/database-management/upgrade-version.md b/docs/platform/guides/database-management/upgrade-version.md index 7f1b82e..55e03ef 100644 --- a/docs/platform/guides/database-management/upgrade-version.md +++ b/docs/platform/guides/database-management/upgrade-version.md @@ -13,15 +13,13 @@ section_menu_id: guides # Upgrade Database Version -This guide explains how to use the **Update Version** interface to upgrade your database to a newer version. The operation is managed through a `MongoDBOpsRequest`, which handles the upgrade process safely and tracks its status in your cluster. +Upgrade your database to a newer version. The operation is managed through a `MongoDBOpsRequest`, which handles the upgrade process and tracks its status in your cluster. --- ## 1. Getting Started -To begin, select **Update Version** from the **Operations** section in the left sidebar. - -You will land on the **Update Version** form, which has two main sections: +Select **Update Version** from the **Operations** section in the left sidebar. The **Update Version** form has two main sections: - **Version** — Select the target version you want to upgrade your database to. - **OpsRequest Options** — Configure advanced settings such as timeout and apply policy. @@ -59,7 +57,7 @@ Expand the **OpsRequest Options** panel to configure how the upgrade operation i ## 3. Review and Submit -The Preview page displays the full `MongoDBOpsRequest` manifest that will be applied to your cluster. Review it carefully to confirm all settings are correct. +The Preview page displays the full `MongoDBOpsRequest` manifest that will be applied to your cluster. ![Preview page showing the generated MongoDBOpsRequest YAML manifest](../images/update-version-submit.png) From 0fd39bf2128ef3428f74a318e899cbb2a3b81a28 Mon Sep 17 00:00:00 2001 From: Arnob Kumar Saha Date: Sun, 14 Jun 2026 12:35:40 +0600 Subject: [PATCH 11/19] Remove helm_release_ part from feature key Signed-off-by: Arnob Kumar Saha --- .../guides/cluster-management/cluster-features.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/platform/guides/cluster-management/cluster-features.md b/docs/platform/guides/cluster-management/cluster-features.md index df47064..acbd3c0 100644 --- a/docs/platform/guides/cluster-management/cluster-features.md +++ b/docs/platform/guides/cluster-management/cluster-features.md @@ -87,7 +87,7 @@ Fill in all required fields and click **Preview** to advance. The modal advances to the **Values Preview** step: -- The **left panel** lists each generated Helm release file (e.g., `helm_release_kubestash.yaml`, `helm_release_stash_presets.yaml`) +- The **left panel** lists each generated Helm release file (e.g., `kubestash.yaml`, `stash_presets.yaml`) - The **right panel** shows the full YAML values for the selected file - Switch between **Edit** and **Preview Changes** tabs to review or compare against defaults - Click **Compare default values** to diff against the out-of-the-box configuration @@ -148,9 +148,9 @@ Select your required database types and click **Preview**. ### Step 3 — Review the Generated Helm Values The modal advances to the YAML values preview. Three Helm release files are listed on the left: -- `helm_release_kubedb.yaml` -- `helm_release_kubedb_opscenter.yaml` -- `helm_release_kubedb_ui_presets.yaml` +- `kubedb.yaml` +- `kubedb_opscenter.yaml` +- `kubedb_ui_presets.yaml` The YAML editor on the right shows the `featureGates` configuration — each selected database type is set to `true`, others to `false`. Use **Edit / Preview Changes** tabs to review, then click **Deploy**. From 4c089159293295eb4be8a03ee3a79f023dded217 Mon Sep 17 00:00:00 2001 From: Arnob Kumar Saha Date: Sun, 14 Jun 2026 13:41:51 +0600 Subject: [PATCH 12/19] Add feature reference page Signed-off-by: Arnob Kumar Saha --- .../cluster-management/cluster-features.md | 4 +- .../cluster-management/feature-reference.md | 283 ++++++++++++++++++ 2 files changed, 286 insertions(+), 1 deletion(-) create mode 100644 docs/platform/guides/cluster-management/feature-reference.md diff --git a/docs/platform/guides/cluster-management/cluster-features.md b/docs/platform/guides/cluster-management/cluster-features.md index acbd3c0..6079db8 100644 --- a/docs/platform/guides/cluster-management/cluster-features.md +++ b/docs/platform/guides/cluster-management/cluster-features.md @@ -12,7 +12,9 @@ section_menu_id: guides # Manage Feature Sets -**Feature Sets** are groups of AppsCode product capabilities that you can install or remove on any connected cluster. This page covers all 18 available Feature Sets and shows the enable flow for two common ones: **Backup & Recovery** and **Databases**. +**Feature Sets** are groups of AppsCode product capabilities that you can install or remove on any connected cluster. This page covers all 19 available Feature Sets and shows the enable flow for two common ones: **Backup & Recovery** and **Databases**. + +> For a per-feature breakdown of every Feature Set — what each feature does, why you'd enable it, and its prerequisites — see the [Feature Set Reference](feature-reference.md). --- diff --git a/docs/platform/guides/cluster-management/feature-reference.md b/docs/platform/guides/cluster-management/feature-reference.md new file mode 100644 index 0000000..a298e73 --- /dev/null +++ b/docs/platform/guides/cluster-management/feature-reference.md @@ -0,0 +1,283 @@ +--- +layout: docs +menu: + docsplatform_{{.version}}: + identifier: cluster-management-feature-reference + name: Feature Set Reference + parent: cluster-management + weight: 31 +menu_name: docsplatform_{{.version}} +section_menu_id: guides +--- + +# Feature Set Reference + +This page lists every feature available in each Feature Set, why you would enable it, and the features it depends on. Use it to decide what to turn on and to understand what gets pulled in automatically. + +> **Prerequisites auto-enable.** When you enable a feature, every feature in its **Prerequisites** column is enabled for you if not already present. The chain is transitive — a prerequisite's own prerequisites are pulled in too. + +--- + +## Opscenter Core *(Required)* + +Core platform capabilities. Must be installed before any other Feature Set. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Kube UI Server** *(Required)* | The core Server that renders the UI of this particular cluster | — | +| **License Proxyserver** *(Recommended)* | Fetches and serves AppsCode product licenses. Required by KubeDB, KubeStash, Panopticon, KubeVault, Scanner. | — | +| **FluxCD** *(Recommended)* | GitOps engine for declaratively syncing manifests from Git. All features are actually deployed in the cluster via flux HelmRelease. | — | +| **OpenShift Adapter** | Adapts the platform to OpenShift. Enable only on OpenShift clusters. | — | +| **Opscenter Features** *(Required)* | Internal configurator that renders feature definitions. Platform-managed. | — | + +Note: If you are an ArgoCD user, AppsCode provides a way to convert the flux HelmRelease to an Argo Application via a custom operator called FargoCD. This is configurable in the [selfhost](../../selfhost-setup/install/_index.md) page. + +--- + +## Backup & Recovery + +Scheduled backup and recovery for Kubernetes applications and databases. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Stash 2.0** *(Recommended)* | Backup and restore of apps and databases via KubeStash. The current backup engine. | License Proxyserver | +| **Stash Presets** *(Recommended)* | Ready-made backup storage and retention policy configurations. | — | +| **Stash** | Legacy backup operator (Stash 1.0). Enable only to keep existing Stash 1.0 setups working. | License Proxyserver | +| **Stash Opscenter** | UI and Grafana monitoring for Stash. | Stash, Panopticon, Grafana Operator | + +--- + +## Databases + +Production-grade database management powered by KubeDB. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **KubeDB** *(Recommended)* | Operator to provision and manage production databases (MongoDB, Postgres, MySQL, Redis, Kafka, etc.). | License Proxyserver | +| **KubeDB Opscenter** *(Recommended)* | UI and monitoring dashboards for KubeDB. | KubeDB, Panopticon, Grafana Operator | +| **KubeDB UI Presets** *(Recommended)* | Default presets for the database creation forms. | — | +| **Prepare Cluster** | Pre-pulls images and prepares nodes for KubeDB. | — | + +--- + +## Observability + +Cluster monitoring, metrics, and dashboards. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Monitoring Operator** *(Recommended)* | Foundation operator that wires up cluster monitoring. Prerequisite for most observability features. | — | +| **Kube Prometheus Stack** *(Recommended)* | Prometheus, Grafana, and alerting bundle for Kubernetes-native monitoring. | Monitoring Operator | +| **Grafana Operator** *(Recommended)* | Manage Grafana dashboards as Kubernetes resources. | Monitoring Operator | +| **Panopticon** *(Recommended)* | Generates metrics from any Kubernetes resource (generic kube-state-metrics). | License Proxyserver | +| **Kubernetes Metrics Server** | Container CPU/memory metrics for `kubectl top` and built-in autoscaling. | — | +| **Prometheus Metrics Adapter** *(Recommended)* | Exposes Prometheus metrics to the Kubernetes custom-metrics API. | Kube Prometheus Stack | +| **Kubernetes Grafana Dashboards** *(Recommended)* | Prebuilt Kubernetes Grafana dashboards. | Grafana Operator | +| **AppsCode OTEL Stack** *(Recommended)* | OpenTelemetry collectors and pipelines for traces, metrics, and logs. | Monitoring Operator | +| **Thanos Operator** *(Recommended)* | Long-term, highly available Prometheus storage and global querying. | — | +| **Prometheus Label Proxy** *(Recommended)* | Enforces label-based tenant isolation on Prometheus queries. | Thanos Operator, Gateway API, Service Catalog | +| **Tenant Operator** *(Recommended)* | Isolates monitoring resources and access per tenant. | Prometheus Label Proxy, Thanos Operator | +| **Inbox Agent / Server / UI** *(ALPHA)* | Cluster event inbox components. | — | + +--- + +## Cost Management + +Measure and allocate infrastructure and container costs. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Keda** *(Recommended)* | Event-driven autoscaling of workloads. | — | +| **Keda HTTP Addon** *(Recommended)* | Scale workloads based on HTTP traffic. | Keda | +| **Opencost** *(ALPHA)* | Measure and allocate infrastructure and container costs. | Kube Prometheus Stack, Monitoring Operator | +| **OpenCost Grafana Dashboards** | Cost visualization dashboards. | Opencost, Grafana Operator | + +--- + +## Security + +TLS certificates, runtime security, and image scanning. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Scanner** *(Recommended)* | Scans image vulnerabilities and generates security reports. | License Proxyserver, Grafana Operator | +| **Cert Manager** | X.509 certificate issuance and renewal. | Gateway API | +| **CA Cert CSI Driver** | CSI driver that adds CA certificates to the OS trusted certificate issuers | Cert Manager | +| **Falco** | Container-native runtime threat detection. | — | +| **Falco UI Server** | UI for Falco runtime alerts. | Falco, Grafana Operator | + +--- + +## Secret Management + +Secure secret storage, syncing, and distribution. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **External Secrets** | Sync secrets from external managers (AWS/GCP/Azure/Vault) into Kubernetes Secrets. | — | +| **Kubevault** | Operator to run and manage HashiCorp Vault. | License Proxyserver | +| **Kubevault Opscenter** | UI and monitoring for KubeVault. | Kubevault, Grafana Operator | +| **Config Syncer** | Sync ConfigMaps and Secrets across namespaces and clusters. | License Proxyserver | +| **Reloader** | Roll workloads automatically on ConfigMap/Secret changes. | — | +| **Sealed Secrets** | One-way encrypted Secrets safe to store in Git. | — | +| **Vault Secrets Operator** | Consume Vault secrets natively as Kubernetes Secrets. | — | +| **Secrets Store CSI Driver** | Mount secrets from external stores as CSI volumes. | — | +| **Azure Key Vault provider** | Azure Key Vault backend for the CSI driver. | Secrets Store CSI Driver | +| **AWS provider** | AWS Secrets Manager / SSM Parameter Store backend for the CSI driver. | Secrets Store CSI Driver | +| **Google Secret Manager provider** | Google Secret Manager backend for the CSI driver. | Secrets Store CSI Driver | +| **HashiCorp Vault provider** | HashiCorp Vault backend for the CSI driver. | Secrets Store CSI Driver | +| **Virtual Secrets** *(ALPHA)* | Virtual Secrets server for not to actually keep the secrets in k8s level. | — | +| **Virtual Secrets provider** *(ALPHA)* | Virtual Secrets backend for the CSI driver. | Virtual Secrets, Secrets Store CSI Driver | + +--- + +## Policy Management + +Platform-level policy enforcement. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Gatekeeper** | OPA-based policy controller. | — | +| **Gatekeeper Templates** | OPA Gatekeeper policy template library. | Gatekeeper | +| **Gatekeeper Constraints** | OPA Gatekeeper policy constraint library. | Gatekeeper, Gatekeeper Templates | +| **GateKeeper Policy Grafana Dashboards** | Policy compliance dashboards. | Gatekeeper, Grafana Operator | +| **Kyverno** | Kubernetes-native policy management. | — | +| **Kyverno Policies** | Pod Security Standards implemented as Kyverno policies. | Kyverno | + +--- + +## Storage Addons + +Additional storage drivers and integrations. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **NFS CSI driver** | Access NFS servers as Kubernetes volumes. | — | +| **Longhorn** | Cloud-native distributed block storage. | — | +| **CSI Volume Snapshotter** | Snapshot controller and validation webhook for CSI volumes. | — | +| **TopoLVM** | Local LVM-backed CSI storage. | — | + +--- + +## Networking Addons + +Networking plugins and extensions. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Kubernetes Gateway API** *(Recommended)* | Installs the Gateway API CRDs and controller. | — | +| **External DNS Operator** | Manage external DNS records for Services and Ingresses. | — | +| **Voyager Ingress** | HAProxy-based ingress controller. | — | +| **Voyager Gateway** | Envoy-based gateway distro by AppsCode. | — | + +--- + +## Opscenter Tools + +DevOps tooling and management utilities. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Supervisor** *(Recommended)* | Day-2 operations — upgrade recommendations and maintenance windows. | — | +| **Sidekick** *(Recommended)* | Run a one-off container as a pod (sidecar-as-a-pod). | — | +| **Operator Shard Manager** *(Recommended)* | Scale operators by sharding responsibility across instances. | — | + +--- + +## Cluster Management + +Cluster provisioning and management tools (Cluster API core). + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **CAPI Catalog** | Catalog of Cluster API cluster templates. | — | +| **CAPI Ops Manager** | Day-2 operations for Cluster API clusters. | — | +| **Cluster Presets** | Preset configurations for cluster provisioning. Work with cloud NodePools | — | + +--- + +## Cluster API AWS (CAPA) + +Lifecycle management for clusters running on AWS. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **AWS Credential Manager** *(Recommended)* | Manage AWS credentials used by CAPA. | — | +| **AWS EBS CSI Driver** *(Recommended)* | EBS-backed storage for provisioned clusters. | — | +| **AWS Load Balancer Controller** *(Recommended)* | Provision AWS load balancers for EKS clusters. | — | +| **AWS VPC Peering Operator** *(Recommended)* | Manage AWS VPC peering connections. | — | +| **Cluster Autoscaler** *(Recommended)* | Node autoscaling for Cluster API clusters. | — | + +--- + +## Cluster API GCP (CAPG) + +Lifecycle management for clusters running on GCP. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **GCP Credential Manager** *(Recommended)* | Manage GCP credentials used by CAPG. | — | + +--- + +## Cluster API Azure (CAPZ) + +Lifecycle management for clusters running on Azure. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Azure Credential Manager** *(Recommended)* | Manage Azure credentials used by CAPZ. | — | + +--- + +## Crossplane + +Control-plane framework for infrastructure as code. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Crossplane** *(Recommended)* | The cloud-native control plane for provisioning infrastructure via Kubernetes APIs. | — | +| **KubeDB AWS Provider** | Provision KubeDB databases on AWS through Crossplane. | Crossplane | +| **KubeDB Azure Provider** | Provision KubeDB databases on Azure through Crossplane. | Crossplane | +| **KubeDB GCP Provider** | Provision KubeDB databases on GCP through Crossplane. | Crossplane | + +--- + +## Multicluster Hub + +Central hub for managing a fleet of clusters. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Multicluster Hub** *(Recommended)* | Core hub components. Foundation for all other hub features. | — | +| **Managed ServiceAccount Manager** *(Recommended)* | Manage service accounts on spoke clusters. | Multicluster Hub | +| **Cluster Auth Manager** *(Recommended)* | Authentication and authorization across the fleet. | Multicluster Hub, Managed ServiceAccount Manager | +| **Cluster Profile Manager** *(Recommended)* | Manage cluster profiles across the fleet. | Multicluster Hub, Cluster Auth Manager | +| **Cluster Proxy Manager** *(Recommended)* | Proxy traffic to spoke clusters. | Multicluster Hub, Cluster Profile Manager | +| **Cluster Gateway Manager** *(Recommended)* | API gateway for reaching spoke clusters. | Multicluster Hub, Cluster Profile Manager, Managed ServiceAccount Manager, Cluster Proxy Manager | +| **FluxCD Manager** *(Recommended)* | GitOps delivery across the fleet. | Multicluster Hub, Cluster Profile Manager | +| **License Proxyserver Manager** *(Recommended)* | Distribute AppsCode licenses to spoke clusters. | Multicluster Hub, Cluster Profile Manager | +| **Hub Cluster Robot** *(Recommended)* | Automation account for hub-driven operations. | Multicluster Hub, Cluster Auth Manager | + +--- + +## Multicluster Spoke + +Connect this cluster as a spoke to an existing hub. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Multicluster Spoke** *(Recommended)* | Register this cluster as a spoke of a Multicluster Hub. | — | + +--- + +## Kubernetes Native Service + +Components for Kubernetes-native service patterns. + +| Feature | Why enable | Prerequisites | +|---|---|---| +| **Service Catalog** *(Recommended)* | Exposes the Databases with gateway. Controls all the gw component provisioning for all modes including client orgs | Cert Manager, KubeDB | +| **Service Gateway Presets** *(Recommended)* | A preset that holds the root 'ace' gateway configurations | Cert Manager, External DNS Operator | +| **Service Connector Backend** | Backend for the service connector. | — | +| **Service Provider** | Service provider component. | — | From d34c917e1baf4e1f36e1ae6d98ceea54877eb2c9 Mon Sep 17 00:00:00 2001 From: Arnob Kumar Saha Date: Sun, 14 Jun 2026 13:50:28 +0600 Subject: [PATCH 13/19] Add additional notes in openshift Signed-off-by: Arnob Kumar Saha --- .../selfhost-setup/install/openshift-cluster.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/platform/selfhost-setup/install/openshift-cluster.md b/docs/platform/selfhost-setup/install/openshift-cluster.md index 5f4927e..2cf2081 100644 --- a/docs/platform/selfhost-setup/install/openshift-cluster.md +++ b/docs/platform/selfhost-setup/install/openshift-cluster.md @@ -108,6 +108,16 @@ Once deployed, access the **KubeDB Platform** using the configured IP (IP mode)
+## Notes + +- The Prometheus node-exporter DaemonSet will not run on an OpenShift cluster unless it runs in privileged mode. Since this is not our chart, you need to grant the required permission yourself: + + ```bash + oc adm policy add-scc-to-user privileged -z kube-prometheus-stack-prometheus-node-exporter -n monitoring + ``` + +- We also run the cert-manager `csi-driver-cacerts` feature in privileged mode so that it can add CA certificates to the OS trusted certificate store. You don't need to do anything manually for this — it is handled automatically at the chart level. + ## Get Support If you encounter any challenges during the deployment or have questions, reach out to AppsCode support for assistance. From 39d93c32bdf97747258ada37711eaf9f1124b7da Mon Sep 17 00:00:00 2001 From: Tamal Saha Date: Sun, 14 Jun 2026 19:39:55 +0600 Subject: [PATCH 14/19] Rebrand AppsCode Platform / ACE to KubeDB Platform (#124) Signed-off-by: Tamal Saha Signed-off-by: Arnob Kumar Saha Co-authored-by: Arnob Kumar Saha --- .github/workflows/ci.yml | 15 +--------- .github/workflows/preview-website.yml | 24 +--------------- .github/workflows/release-tracker.yml | 17 ++--------- .../account-management/delete-account.md | 2 +- .../kubernetes/credentials.md | 28 +++++++++---------- .../cluster-management/cluster-overview.md | 8 +++--- .../database-usage-insight.md | 2 +- docs/platform/guides/get-started/_index.md | 2 +- .../guides/get-started/add-cluster.md | 2 +- .../guides/get-started/add-credential.md | 4 +-- .../guides/get-started/enable-features.md | 4 +-- .../guides/get-started/register-login.md | 14 +++++----- .../guides/license-management/contract.md | 8 +++--- .../license-management/license-proxyserver.md | 16 +++++------ .../guides/license-management/overview.md | 5 ++-- docs/platform/selfhost-setup/README.md | 4 +-- .../selfhost-setup/install/aws-marketplace.md | 6 ++-- .../install/azure-marketplace.md | 6 ++-- .../selfhost-setup/install/cloud-demo.md | 8 +++--- .../selfhost-setup/install/onprem-demo.md | 8 +++--- .../install/openshift-cluster.md | 4 +-- .../install/selfhosted-production.md | 6 ++-- 22 files changed, 72 insertions(+), 121 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index b4a8e9f..da5934d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,22 +14,9 @@ concurrency: cancel-in-progress: true jobs: - label-detector: - name: Runner Label - runs-on: label-detector - outputs: - runs-on: ${{ steps.detector.outputs.label }} - steps: - - name: Detect Label - id: detector - run: | - # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idoutputs - echo "label=$(curl -fsSL https://this-is-nats.appscode.ninja/runs-on/${{ github.repository_owner }}?visibility=${{ github.repository_visibility }})" >> $GITHUB_OUTPUT - build: name: Build - needs: label-detector - runs-on: "${{ needs.label-detector.outputs.runs-on }}" + runs-on: ubuntu-latest steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 diff --git a/.github/workflows/preview-website.yml b/.github/workflows/preview-website.yml index 10a1bb0..922a7b0 100644 --- a/.github/workflows/preview-website.yml +++ b/.github/workflows/preview-website.yml @@ -11,30 +11,9 @@ concurrency: cancel-in-progress: true jobs: - label-detector: - name: Runner Label - runs-on: label-detector - permissions: - contents: read - checks: write - pull-requests: write - outputs: - runs-on: ${{ steps.detector.outputs.label }} - permissions: - contents: read - checks: write - pull-requests: write - steps: - - name: Detect Label - id: detector - run: | - # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idoutputs - echo "label=$(curl -fsSL https://this-is-nats.appscode.ninja/runs-on/${{ github.repository_owner }}?visibility=${{ github.repository_visibility }})" >> $GITHUB_OUTPUT - build: name: Build - needs: label-detector - runs-on: "${{ needs.label-detector.outputs.runs-on }}" + runs-on: ubuntu-latest permissions: contents: read checks: write @@ -91,7 +70,6 @@ jobs: GITHUB_USER: ${{ github.actor }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} WEBSITE_REPOSITORY: ${{ secrets.WEBSITE_REPOSITORY }} - GOOGLE_CUSTOM_SEARCH_API_KEY: ${{ secrets.GOOGLE_CUSTOM_SEARCH_API_KEY }} run: | set -x export WEBSITE_ROOT=$RUNNER_WORKSPACE/$(basename $WEBSITE_REPOSITORY) diff --git a/.github/workflows/release-tracker.yml b/.github/workflows/release-tracker.yml index 1140f5b..e831425 100644 --- a/.github/workflows/release-tracker.yml +++ b/.github/workflows/release-tracker.yml @@ -10,23 +10,10 @@ concurrency: cancel-in-progress: true jobs: - label-detector: - if: github.event.pull_request.merged == true - name: Runner Label - runs-on: label-detector - outputs: - runs-on: ${{ steps.detector.outputs.label }} - steps: - - name: Detect Label - id: detector - run: | - # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idoutputs - echo "label=$(curl -fsSL https://this-is-nats.appscode.ninja/runs-on/${{ github.repository_owner }}?visibility=${{ github.repository_visibility }})" >> $GITHUB_OUTPUT - build: + if: github.event.pull_request.merged == true name: Build - needs: label-detector - runs-on: "${{ needs.label-detector.outputs.runs-on }}" + runs-on: ubuntu-latest permissions: contents: read steps: diff --git a/docs/platform/guides/account-management/delete-account.md b/docs/platform/guides/account-management/delete-account.md index 2692534..0465658 100644 --- a/docs/platform/guides/account-management/delete-account.md +++ b/docs/platform/guides/account-management/delete-account.md @@ -11,7 +11,7 @@ section_menu_id: guides --- -# Deleting Your AppsCode Account +# Deleting Your KubeDB Platform Account ![Delete Account](../images/delete-account.png) diff --git a/docs/platform/guides/account-management/kubernetes/credentials.md b/docs/platform/guides/account-management/kubernetes/credentials.md index 5bd9c67..4beabdf 100644 --- a/docs/platform/guides/account-management/kubernetes/credentials.md +++ b/docs/platform/guides/account-management/kubernetes/credentials.md @@ -29,7 +29,7 @@ Supported Credential Types include: - [Scaleway](#scaleway) - [Vultr](#vultr) -Visit https://home.appscode.com/user/settings/credentials to manage credential. +Visit https://appscode.com/id/{user}/user/settings/credentials to manage credential. ## AWS @@ -261,7 +261,7 @@ Details: aws iam create-access-key --user-name "eks-cluster" ``` -Then add the credential [here](https://home.appscode.com/user/settings/credentials/create) you got from previous step. +Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create) you got from previous step. @@ -281,7 +281,7 @@ To configure Azure credentials for accessing and managing Azure Kubernetes Servi - Save Credentials
The command will output a JSON response containing the service principal details, including clientId (Application ID), clientSecret (Client Secret), subscriptionId, tenantId, and other information. Save these credentials securely as they will be used to configure the AKS cluster. -Then add the credential [here](https://home.appscode.com/user/settings/credentials/create). +Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create). @@ -292,7 +292,7 @@ To access Digital Ocean Managed clusters, you need to create a API token from Di Ref: [How to Create a Personal Access Token](https://docs.digitalocean.com/reference/api/create-personal-access-token/) -Then add the credential [here](https://home.appscode.com/user/settings/credentials/create) you got from Digital Ocean. +Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create) you got from Digital Ocean.



@@ -322,14 +322,14 @@ To access GKE clusters, you need to create a GCP service account with with conta --iam-account $GKE_SA_EMAIL ``` -Then add the service account credentials [here](https://home.appscode.com/user/settings/credentials/create). +Then add the service account credentials [here](https://appscode.com/id/{user}/user/settings/credentials/create). ## Google OAuth Simplest way to access GKE clusters is through creating `Google OAuth` type credential.
-Just head over [here](https://home.appscode.com/user/settings/credentials/create) and +Just head over [here](https://appscode.com/id/{user}/user/settings/credentials/create) and - Choose a `Name` - Select Credential Type: `Google OAuth` - Click `Continue with Google` @@ -349,7 +349,7 @@ To access LKE clusters, you need to create a API token from Linode with the foll Ref: [Manage Linode Personal Access Tokens](https://www.linode.com/docs/products/tools/api/guides/manage-api-tokens/) -Then add the credential [here](https://home.appscode.com/user/settings/credentials/create) you got from Linode. +Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create) you got from Linode.


@@ -357,7 +357,7 @@ Then add the credential [here](https://home.appscode.com/user/settings/credentia ## Rancher -To access Rancher clusters through AppsCode, you need to create an API token in your Rancher system. Follow these steps: +To access Rancher clusters through KubeDB Platform, you need to create an API token in your Rancher system. Follow these steps: 1. In Rancher, click on the profile icon. 2. Select `Account & API Keys`. @@ -369,7 +369,7 @@ Reference: [Rancher API Keys](https://ranchermanager.docs.rancher.com/reference- Copy the generated access key, secret key, and API endpoint from the `Account & API Keys` overview page. -Next, add these credentials to the [AppsCode user settings credentials page](https://home.appscode.com/user/settings/credentials/create). +Next, add these credentials to the [KubeDB Platform user settings credentials page](https://appscode.com/id/{user}/user/settings/credentials/create). @@ -380,7 +380,7 @@ To access Azure Blob Storage, you need your Storage Account name and one of its - **Account:** Your Storage Account name, found in the Azure Portal under **Storage accounts**. - **Key:** One of the access keys (key1 or key2), found under **Security + networking > Access keys** in the storage account sidebar. Click **Show** to reveal the key value. -Then add the credential [here](https://home.appscode.com/user/settings/credentials/create). +Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create).



@@ -393,7 +393,7 @@ To access Cloudflare R2 Object Storage, you need your Account ID and an R2 API t - **Account ID:** Found on your Cloudflare Dashboard under **R2 > Overview** or in the sidebar. - **Access Key ID & Secret Access Key:** Generated by creating an R2 API token. Navigate to **R2 > Manage R2 API Tokens > Create API Token** and ensure the token has `Edit` permissions for the target bucket. -Then add the credential [here](https://home.appscode.com/user/settings/credentials/create). +Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create).



@@ -408,7 +408,7 @@ To access Hetzner Cloud resources, you need an API token and an SSH key. Ref: [Hetzner Cloud API Tokens](https://docs.hetzner.com/cloud/api/getting-started/generating-api-token/) -Then add the credential [here](https://home.appscode.com/user/settings/credentials/create). +Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create).


@@ -423,7 +423,7 @@ To access Scaleway resources, you need your Organization ID and an API secret ke Ref: [Scaleway API Keys](https://www.scaleway.com/en/docs/iam/api-keys/) -Then add the credential [here](https://home.appscode.com/user/settings/credentials/create). +Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create).


@@ -437,4 +437,4 @@ To access Vultr resources, you need a Vultr API key. Ref: [Vultr API](https://www.vultr.com/api/) -Then add the credential [here](https://home.appscode.com/user/settings/credentials/create). +Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create). diff --git a/docs/platform/guides/cluster-management/cluster-overview.md b/docs/platform/guides/cluster-management/cluster-overview.md index 470426b..9142c42 100644 --- a/docs/platform/guides/cluster-management/cluster-overview.md +++ b/docs/platform/guides/cluster-management/cluster-overview.md @@ -18,11 +18,11 @@ The **Cluster Overview** page is your primary dashboard for a connected Kubernet ## Step 1 — Open Your Cluster -From the **AppsCode Console UI** home screen, you will see the **ALL CLUSTERS** grid. Each cluster card shows its name, status badge (e.g., **Active**), Kubernetes version, provider, number of nodes, and age. +From the **KubeDB Platform Console UI** home screen, you will see the **ALL CLUSTERS** grid. Each cluster card shows its name, status badge (e.g., **Active**), Kubernetes version, provider, number of nodes, and age. Click on any cluster card to open its Overview page. -![AppsCode home screen showing the cluster list — click a cluster card to open its Overview](../images/cluster-overview/cluster-overview-1.png) +![KubeDB Platform home screen showing the cluster list — click a cluster card to open its Overview](../images/cluster-overview/cluster-overview-1.png) > The **+ Add Cluster** tile lets you import a new cluster at any time. @@ -38,7 +38,7 @@ The **Basic** section at the top displays the cluster's core identity: | Field | Description | |---|---| -| **Name** | The cluster name as registered in AppsCode | +| **Name** | The cluster name as registered in KubeDB Platform | | **Endpoint** | The Kubernetes API server address | | **UID** | The unique identifier of this cluster | | **Provider** | Cloud or infrastructure provider (e.g., Generic, AWS, GCP) | @@ -48,7 +48,7 @@ The **Basic** section at the top displays the cluster's core identity: Two action buttons appear top-right inside this section: - **Connect** — Downloads a KubeConfig for direct `kubectl` access -- **Remove** — Disconnects and removes the cluster from AppsCode +- **Remove** — Disconnects and removes the cluster from KubeDB Platform ![Cluster Overview page showing Basic info, Feature Sets grid, and Nodes section](../images/cluster-overview/cluster-overview-2.png) diff --git a/docs/platform/guides/database-management/database-usage-insight.md b/docs/platform/guides/database-management/database-usage-insight.md index fbf13a4..a21022d 100644 --- a/docs/platform/guides/database-management/database-usage-insight.md +++ b/docs/platform/guides/database-management/database-usage-insight.md @@ -81,7 +81,7 @@ A condensed stat row at the top mirrors the key metrics from the Overview panel The **Grafana Dashboards** section embeds pre-built dashboards for your database directly in the console. If Grafana integration is not yet configured, an error message will indicate that the dashboard link is missing and provide instructions to set it up. -> **Tip:** To enable Grafana dashboards, ensure the Grafana datasource is configured in your cluster and the correct dashboard URL is registered in your AppsCode settings. +> **Tip:** To enable Grafana dashboards, ensure the Grafana datasource is configured in your cluster and the correct dashboard URL is registered in your KubeDB Platform settings. ### 3.3 - Slow Queries diff --git a/docs/platform/guides/get-started/_index.md b/docs/platform/guides/get-started/_index.md index 679b582..e7d2804 100644 --- a/docs/platform/guides/get-started/_index.md +++ b/docs/platform/guides/get-started/_index.md @@ -5,7 +5,7 @@ menu: identifier: guide-start name: Get Started parent: guides - description: Basic information and instructions for first-time users of AppsCode + description: Basic information and instructions for first-time users of KubeDB Platform icon: https://img.icons8.com/00994A/ios/50/rocket--v1.png popular: true weight: 10 diff --git a/docs/platform/guides/get-started/add-cluster.md b/docs/platform/guides/get-started/add-cluster.md index d162f9f..3c94e77 100644 --- a/docs/platform/guides/get-started/add-cluster.md +++ b/docs/platform/guides/get-started/add-cluster.md @@ -13,7 +13,7 @@ section_menu_id: guides # Add a Kubernetes Cluster -With your credentials in place, it's time to connect your Kubernetes cluster to the Platform Console. This step allows AppsCode to seamlessly manage and provide insights into your cluster. +With your credentials in place, it's time to connect your Kubernetes cluster to the Platform Console. This step allows KubeDB Platform to seamlessly manage and provide insights into your cluster. Follow these steps to import your Kubernetes cluster: diff --git a/docs/platform/guides/get-started/add-credential.md b/docs/platform/guides/get-started/add-credential.md index 7defaf7..c38e551 100644 --- a/docs/platform/guides/get-started/add-credential.md +++ b/docs/platform/guides/get-started/add-credential.md @@ -13,11 +13,11 @@ section_menu_id: guides # Add Credential -Now that you have successfully registered and logged in to the Platform Console, let's take the next step in setting up your environment. The first crucial task is to add credentials for your Kubernetes clusters. This ensures a secure connection and allows AppsCode to seamlessly manage your clusters. +Now that you have successfully registered and logged in to the Platform Console, let's take the next step in setting up your environment. The first crucial task is to add credentials for your Kubernetes clusters. This ensures a secure connection and allows KubeDB Platform to seamlessly manage your clusters. Follow these steps to add your credentials: -1. Navigate to the [Add Credential Page](https://home.appscode.com/user/settings/credentials/create). +1. Navigate to the [Add Credential Page](https://appscode.com/id/{user}/user/settings/credentials/create). 2. Choose your `Credential Type` or authentication method and enter the required details. 3. Click on the `Done` button to securely save your credentials. diff --git a/docs/platform/guides/get-started/enable-features.md b/docs/platform/guides/get-started/enable-features.md index 78bff21..773ccce 100644 --- a/docs/platform/guides/get-started/enable-features.md +++ b/docs/platform/guides/get-started/enable-features.md @@ -14,13 +14,13 @@ section_menu_id: guides # Enable Features -Once your cluster is imported, you can enable or disable AppsCode features based on your requirements. +Once your cluster is imported, you can enable or disable KubeDB Platform features based on your requirements. 1. Navigate to your Cluster Overview page, selecting your imported cluster in the [Platform Console](https://console.appscode.com/). 2. In the "Feature Sets" section, you'll find a list of FeatureSets associated with your cluster, along with their current status. 3. Click on any FeatureSet in the list to go to the FeatureSet Management page. 4. On the FeatureSet Management page, you can enable or disable specific features according to your needs. -Managing features in the Platform Console is a straightforward process that allows you to tailor your Platform Console to meet your cluster's requirements. Feel free to explore the features and capabilities offered by AppsCode. +Managing features in the Platform Console is a straightforward process that allows you to tailor your Platform Console to meet your cluster's requirements. Feel free to explore the features and capabilities offered by KubeDB Platform. For more advanced configurations and detailed documentation, check out the [Features in Details](../cluster-management/cluster-features.md). diff --git a/docs/platform/guides/get-started/register-login.md b/docs/platform/guides/get-started/register-login.md index 78a1b71..19a45a4 100644 --- a/docs/platform/guides/get-started/register-login.md +++ b/docs/platform/guides/get-started/register-login.md @@ -11,15 +11,15 @@ section_menu_id: guides --- -# Get Started with AppsCode +# Get Started with KubeDB Platform ## Register and Login -Welcome to AppsCode! This is a new version Follow these quick steps to get started: +Welcome to KubeDB Platform! This is a new version Follow these quick steps to get started: ### 1. Register for an Account -1. Navigate to the [AppsCode Registration Page](https://accounts.appscode.com/user/sign_up). +1. Navigate to the [KubeDB Platform Registration Page](https://accounts.appscode.com/user/sign_up). 2. Provide the following information: - Username - Email @@ -33,14 +33,14 @@ Welcome to AppsCode! This is a new version Follow these quick steps to get start ### 2. Verify Your Email -After registration, check your email inbox for a verification email from AppsCode. +After registration, check your email inbox for a verification email from KubeDB Platform. 1. Open the verification email. 2. Click on the verification link to confirm your account. -### 3. Log In to AppsCode +### 3. Log In to KubeDB Platform -1. Once your account is verified, go to the [AppsCode Login Page](https://accounts.appscode.com/user/login). +1. Once your account is verified, go to the [KubeDB Platform Login Page](https://accounts.appscode.com/user/login). 2. Enter your registered `Username` or `Email Address` and `Password`. 3. Click on the `Sign In` button. 4. Optionally, you can sign in using your connected External accounts. @@ -49,4 +49,4 @@ After registration, check your email inbox for a verification email from AppsCod You are now logged in to the Platform Console! Take a moment to explore the features and navigate through the dashboard. -Congratulations! You have successfully registered, verified your email, and logged in to AppsCode. If you encounter any issues or have questions, refer to the [AppsCode Documentation](https://appscode.com/docs/) for detailed guidance. \ No newline at end of file +Congratulations! You have successfully registered, verified your email, and logged in to KubeDB Platform. If you encounter any issues or have questions, refer to the [KubeDB Platform Documentation](https://appscode.com/docs/) for detailed guidance. \ No newline at end of file diff --git a/docs/platform/guides/license-management/contract.md b/docs/platform/guides/license-management/contract.md index 0f347e0..4a38541 100644 --- a/docs/platform/guides/license-management/contract.md +++ b/docs/platform/guides/license-management/contract.md @@ -14,7 +14,7 @@ section_menu_id: guides ## Contract A contract is basically a digital agreement of the licensing relationship between AppsCode and its customers. Each contract represents a formal agreement for the use of -specific AppsCode products, such as KubeDB or platform-enterprise, with defined validity periods and feature sets. +specific KubeDB Platform products, such as KubeDB or platform-enterprise, with defined validity periods and feature sets. The contract management system within the Billing Console provides comprehensive tools for creating, modifying, and monitoring contracts. Administrators can specify product details, validity periods, and associated features, ensuring that customers have access to the appropriate resources for their needs. @@ -23,7 +23,7 @@ product details, validity periods, and associated features, ensuring that custom Key information typically contained within a contract includes: -- **Product:** The specific AppsCode product or bundle covered by the contract (e.g., `kubedb-enterprise`, `platform-enterprise` etc.). +- **Product:** The specific KubeDB Platform product or bundle covered by the contract (e.g., `kubedb-enterprise`, `platform-enterprise` etc.). - **Org/User:** The organization or user account to which the contract is assigned. - **Status:** The current state of the contract (e.g., active, expired, revoked), managed by AppsCode administrators. - **Start Date:** The date from which the contract, and thus the license, becomes valid (not_before). @@ -34,7 +34,7 @@ Contracts ensure that product usage is aligned with the purchased entitlements, ### Managing Cluster Associations with Contracts -For AppsCode products to operate with a valid license on a Kubernetes cluster, customers must explicitly associate that cluster with one or more active contracts +For KubeDB Platform products to operate with a valid license on a Kubernetes cluster, customers must explicitly associate that cluster with one or more active contracts made available to them in the Billing Console. This capability is a key `self-service` feature, allowing customers to dynamically manage which of their Kubernetes environments are licensed under a given contract, within the overall terms and capacity of that agreement. @@ -58,7 +58,7 @@ To remove a cluster's authorization to use licensed products under a specific co 2. **Locate and Remove:** In the `Cluster` section, find the cluster in the associated clusters list that needs to be removed. 3. **Confirm Removal:** Select the `Remove` option (often represented by a `trash` icon) next to the cluster and confirm the action when prompted. ![Cluster Delete](../images/cluster-delete.png) -After removal, the cluster will no longer be authorized to use the licensed products associated with that contract. Any installed AppsCode products on that cluster may revert to their community or limited functionality, depending on their licensing model. +After removal, the cluster will no longer be authorized to use the licensed products associated with that contract. Any installed KubeDB Platform products on that cluster may revert to their community or limited functionality, depending on their licensing model. **Audit Trail:** The Billing Console maintains an audit trail of changes to cluster associations, logging which user performed the action and when. This feature is vital for tracking, security, and troubleshooting. ![Audit Trail](../images/audits.png) diff --git a/docs/platform/guides/license-management/license-proxyserver.md b/docs/platform/guides/license-management/license-proxyserver.md index 601b453..7bd0944 100644 --- a/docs/platform/guides/license-management/license-proxyserver.md +++ b/docs/platform/guides/license-management/license-proxyserver.md @@ -12,20 +12,20 @@ section_menu_id: guides ## The License Proxy Server -The `license-proxyserver` is a critical component of the AppsCode License Management System, deployed within customer Kubernetes clusters to validate and apply licenses to AppsCode products. +The `license-proxyserver` is a critical component of the AppsCode License Management System, deployed within customer Kubernetes clusters to validate and apply licenses to KubeDB Platform products. ### 1. Purpose and Architecture The primary purpose of the `license-proxyserver` is to: -- **Serve Licenses:** Provide valid license tokens to AppsCode products (e.g., KubeDB, KubeStash, KubeVault operators and provisioners) running within the same Kubernetes cluster. +- **Serve Licenses:** Provide valid license tokens to KubeDB Platform products (e.g., KubeDB, KubeStash, KubeVault operators and provisioners) running within the same Kubernetes cluster. - **Validate Licenses:** - In **Online Mode**, The `license-proxyserver` connects periodically to the Billing Server to validate and rotate licenses. This mode provides automatic license updates and ensures that changes to contract status are reflected promptly in the customer environment. - In **Offline Mode**, The `license-proxyserver` operates without connecting to the Billing Server. Instead, it uses `pre-generated` licenses embedded in the installer until the embedded licenses are expired. This mode is ideal for `air-gapped` environments or scenarios where external connections are restricted. -- **Centralized License Management within the Cluster:** Simplifies license management for multiple AppsCode products within a single cluster by acting as a common point for license queries. +- **Centralized License Management within the Cluster:** Simplifies license management for multiple KubeDB Platform products within a single cluster by acting as a common point for license queries. #### Architectural Flow -1. **AppsCode Product Request:** When an AppsCode product (e.g., KubeDB operator) starts or performs a licensed operation, it requests a license from the License Proxy Server running in its cluster. +1. **KubeDB Platform Product Request:** When a KubeDB Platform product (e.g., KubeDB operator) starts or performs a licensed operation, it requests a license from the License Proxy Server running in its cluster. 2. **License Proxy Server Response:** - **Online Mode:** If the `license-proxyserver` has a valid, cached license, it provides it immediately. If the license is nearing its expiration, has already expired, or is otherwise invalid, the `license-proxyserver` attempts to contact AppsCode `Billing Backend` to fetch a new license. This new license is based on the active contracts associated with that specific cluster. - **Offline Mode:** The `license-proxyserver` primarily uses the pre-generated licenses embedded in its installer. It operates without connecting to the Billing Console for routine validation. However, if all embedded licenses are found to be expired or have been revoked, the `license-proxyserver` will, as a fallback, attempt to fetch new licenses from the AppsCode billing backend. This means that even in air-gapped environments, a temporary or controlled outbound connection might be necessary for license renewal or recovery if the embedded licenses become invalid over time. @@ -95,7 +95,7 @@ Generating an installer for offline mode is a multi-step process, designed to em ### 3. Verifying Product License Status -After the `license-proxyserver` is installed and AppsCode products are deployed, administrators can verify the license status directly within the Kubernetes cluster using `kubectl`. +After the `license-proxyserver` is installed and KubeDB Platform products are deployed, administrators can verify the license status directly within the Kubernetes cluster using `kubectl`. #### Using kubectl for License Verification @@ -105,15 +105,15 @@ The `license-proxyserver` component functions as an `extended API server` within kubectl get licensestatus ``` -This command will list the status of licenses being consumed by various AppsCode products within the cluster. +This command will list the status of licenses being consumed by various KubeDB Platform products within the cluster. ##### Interpreting licensestatus Output The output of `kubectl get licensestatus` provides several key pieces of information for each licensed component: - **ID:** A unique identifier for this specific license. -- **PRODUCT:** The name of the AppsCode product that this license status pertains to (e.g., `kubedb`, `kubestash`, `platform` etc.). -- **REQUESTER:** The specific `component` or `service account` within the cluster that requested and is utilizing this license. This helps pinpoint which part of an AppsCode product installation is covered by this license entry (e.g., `system:serviceaccount:kubedb:kubedb-kubedb-provisioner`). +- **PRODUCT:** The name of the KubeDB Platform product that this license status pertains to (e.g., `kubedb`, `kubestash`, `platform` etc.). +- **REQUESTER:** The specific `component` or `service account` within the cluster that requested and is utilizing this license. This helps pinpoint which part of a KubeDB Platform product installation is covered by this license entry (e.g., `system:serviceaccount:kubedb:kubedb-kubedb-provisioner`). - **CONTRACT:** This field indicates the identifier of the AppsCode contract which is utilized providing the license. There are two scenarios on how this field is populated:

- If a cluster is not explicitly associated with any contract in the Billing Console, AppsCode automatically provides a `1-month (30-day)` free trial license. In such cases, the `CONTRACT` column in the `licensestatus` output will display `0`. This temporary license is particularly helpful for customers during initial testing and evaluation periods. Each cluster is eligible for this free trial only once. ![Free Trial License](../images/license-status-free-contract.png) - Otherwise, if a cluster is associated with a specific contract, this column will display the actual `CONTRACT ID` from the Billing Console, allowing administrators to `cross-reference` the license with the detailed contract terms. ![Paid License](../images/license-status-paid-contract.png) diff --git a/docs/platform/guides/license-management/overview.md b/docs/platform/guides/license-management/overview.md index 36197ef..935f673 100644 --- a/docs/platform/guides/license-management/overview.md +++ b/docs/platform/guides/license-management/overview.md @@ -10,14 +10,13 @@ menu_name: docsplatform_{{.version}} section_menu_id: guides --- - ## Overview
The AppsCode License Management System simplifies managing product licenses for Kubernetes deployments. It offers a centralized billing console for efficient license administration and secure validation, supporting both online and offline modes to suit various needs. This guide explores the Billing Console, covering its key components, contract management, license-proxyserver deployment, and troubleshooting tips for common issues. By the end, you’ll know how to effectively manage licenses with this tool. -**Target Audience:** This guide is intended for `administrators` and `personnel` responsible for managing AppsCode's product licenses. +**Target Audience:** This guide is intended for `administrators` and `personnel` responsible for managing KubeDB Platform product licenses. ## AppsCode Billing Console
@@ -31,7 +30,7 @@ While AppsCode administrators are responsible for the core lifecycle of contract - **Contracts:** Digital agreements, typically established by [AppsCode administrators](https://appsCode.com/contact/) within the Billing Console, that define the terms of AppsCode's product (e.g., KubeDB Platform, KubeDB, KubeStash, KubeVault etc.) usage. This includes the specific AppsCode products which can be licensed, the duration of the contract, applicable features, and the clusters authorized to use these licenses. Contracts ensure that usage aligns with legal and financial terms, providing a foundation for all subsequent actions in the console. Contracts can be configured for either online or offline license validation.

-- **Licensed cluster:** The `Licensed Cluster` section within the AppsCode Billing Console offers a comprehensive overview and detailed management capabilities for Kubernetes clusters that have been issued AppsCode product licenses. This component is pivotal for administrators to monitor the cluster(s) `licences` and `events` of licensed products across their infrastructure. +- **Licensed cluster:** The `Licensed Cluster` section within the AppsCode Billing Console offers a comprehensive overview and detailed management capabilities for Kubernetes clusters that have been issued KubeDB Platform product licenses. This component is pivotal for administrators to monitor the cluster(s) `licences` and `events` of licensed products across their infrastructure.

- **License Proxy Server:** A lightweight in-cluster component that validates licenses, either by connecting to AppsCode servers (online) or using preloaded licenses (offline). The console generates customized installers for deployment. Depending on the contract type (`online` or `offline`), it either periodically refreshes and validates licenses with AppsCode's central licensing servers or uses static preloaded licenses embedded during deployment for the full contract duration. diff --git a/docs/platform/selfhost-setup/README.md b/docs/platform/selfhost-setup/README.md index 7b2dffa..32375ca 100644 --- a/docs/platform/selfhost-setup/README.md +++ b/docs/platform/selfhost-setup/README.md @@ -17,12 +17,12 @@ aliases: Welcome to KubeDB Platform's Self-Hosted deployment! Whether you're looking for a quick trial in "Self Hosted Demo" mode or gearing up for a production-ready environment (`Self Hosted Production`), you're in control. -Navigate to [AppsCode Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers. +Navigate to [KubeDB Platform Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.

-Click on the `Create New Installer` button to get started. You can either choose deployment type `Self Hosted Demo` or `Self Hosted Production`. Provide the required data and click `Done` button to generate the installer. Upon generation of the installer, you will get the documentation how to host AppsCode Server on your own. +Click on the `Create New Installer` button to get started. You can either choose deployment type `Self Hosted Demo` or `Self Hosted Production`. Provide the required data and click `Done` button to generate the installer. Upon generation of the installer, you will get the documentation how to host KubeDB Platform Server on your own.

To get detailed documentation on `Self Hosted Demo` installer, head over to [Demo Deployment](install/selfhosted-demo.md). diff --git a/docs/platform/selfhost-setup/install/aws-marketplace.md b/docs/platform/selfhost-setup/install/aws-marketplace.md index 6a5512b..df53938 100644 --- a/docs/platform/selfhost-setup/install/aws-marketplace.md +++ b/docs/platform/selfhost-setup/install/aws-marketplace.md @@ -238,9 +238,9 @@ AmazonS3FullAccess (AWS Managed Policy) ``` ## Application Deployment -### 1. Visit the AppsCode Self-Hosted Page +### 1. Visit the KubeDB Platform Self-Hosted Page -Navigate to [AppsCode Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
+Navigate to [KubeDB Platform Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
Click on the `Create New Installer` button to get started. ### 2. Choose Deployment Mode And Environment @@ -286,7 +286,7 @@ See [Branding & UI Customization](common-config.md#branding--ui-customization) i ### 9. Generate Installer and Documentation -Click the "Next" button to submit your information. AppsCode will generate the installer and provide the necessary documentation and further installation guideline in details. +Click the "Next" button to submit your information. KubeDB Platform will generate the installer and provide the necessary documentation and further installation guideline in details. You will find an `Installer URL` for this installer. You have to give this URL in the AWS Marketplace application. diff --git a/docs/platform/selfhost-setup/install/azure-marketplace.md b/docs/platform/selfhost-setup/install/azure-marketplace.md index d72d8ae..717799b 100644 --- a/docs/platform/selfhost-setup/install/azure-marketplace.md +++ b/docs/platform/selfhost-setup/install/azure-marketplace.md @@ -24,9 +24,9 @@ The **Azure Marketplace** installation wizard will prompt you for specific confi If you encounter any issues during the deployment, please refer to our Official Documentation or contact with us. -### 2. Visit the AppsCode Self-Hosted Page +### 2. Visit the KubeDB Platform Self-Hosted Page -Navigate to [AppsCode Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
+Navigate to [KubeDB Platform Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
Click on the `Create New Installer` button to get started. ### 3. Choose Deployment Mode And Environment @@ -97,7 +97,7 @@ See [Branding & UI Customization](common-config.md#branding--ui-customization) i ### 10. Generate Installer and Documentation -Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. +Click the "Deploy" button to submit your information. KubeDB Platform will generate the installer and provide the necessary documentation. ### 11. Deploy KubeDB Platform diff --git a/docs/platform/selfhost-setup/install/cloud-demo.md b/docs/platform/selfhost-setup/install/cloud-demo.md index 9c9c645..a8b1177 100644 --- a/docs/platform/selfhost-setup/install/cloud-demo.md +++ b/docs/platform/selfhost-setup/install/cloud-demo.md @@ -18,9 +18,9 @@ Welcome to the KubeDB Platform's "Cloud Demo" deployment! Follow these steps to See [Prerequisites](common-config.md#prerequisites) in the Common Configuration guide for the minimum cluster requirements and the optional k3s setup note. -### 1. Visit the AppsCode Self-Hosted Page +### 1. Visit the KubeDB Platform Self-Hosted Page -Navigate to [AppsCode Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
+Navigate to [KubeDB Platform Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
Click on the `Create New Installer` button to get started. ### 2. Choose Deployment Mode @@ -69,7 +69,7 @@ See [Branding & UI Customization](common-config.md#branding--ui-customization) i ### 10. Generate Installer and Documentation -Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. +Click the "Deploy" button to submit your information. KubeDB Platform will generate the installer and provide the necessary documentation. ### 11. Deploy KubeDB Platform @@ -84,6 +84,6 @@ Once deployed, access the KubeDB Platform using the specified domain. Log in wit ## Get Support -If you encounter any challenges during the deployment or have questions, reach out to AppsCode support for assistance. +If you encounter any challenges during the deployment or have questions, reach out to KubeDB Platform support for assistance. Congratulations! You have successfully deployed the KubeDB Platform in Cloud Demo mode. Explore the features and capabilities of the platform in your customized environment. diff --git a/docs/platform/selfhost-setup/install/onprem-demo.md b/docs/platform/selfhost-setup/install/onprem-demo.md index ae22f66..5a6e018 100644 --- a/docs/platform/selfhost-setup/install/onprem-demo.md +++ b/docs/platform/selfhost-setup/install/onprem-demo.md @@ -18,9 +18,9 @@ Welcome to the KubeDB Platform's "Onprem Demo" deployment! Follow these steps to See [Prerequisites](common-config.md#prerequisites) in the Common Configuration guide for the minimum cluster requirements and the optional k3s setup note. -### 1. Visit the AppsCode Self-Hosted Page +### 1. Visit the KubeDB Platform Self-Hosted Page -Navigate to [AppsCode Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
+Navigate to [KubeDB Platform Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
Click on the `Create New Installer` button to get started. ### 2. Choose Deployment Mode @@ -72,7 +72,7 @@ See [Branding & UI Customization](common-config.md#branding--ui-customization) i ### 12. Generate Installer and Documentation -Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. +Click the "Deploy" button to submit your information. KubeDB Platform will generate the installer and provide the necessary documentation. ### 13. Deploy KubeDB Platform @@ -87,6 +87,6 @@ Once deployed, access the KubeDB Platform using the specified domain. Log in wit ## Get Support -If you encounter any challenges during the deployment or have questions, reach out to AppsCode support for assistance. +If you encounter any challenges during the deployment or have questions, reach out to KubeDB Platform support for assistance. Congratulations! You have successfully deployed the KubeDB Platform in Onprem Demo mode. Explore the features and capabilities of the platform in your customized environment. diff --git a/docs/platform/selfhost-setup/install/openshift-cluster.md b/docs/platform/selfhost-setup/install/openshift-cluster.md index 2cf2081..718a943 100644 --- a/docs/platform/selfhost-setup/install/openshift-cluster.md +++ b/docs/platform/selfhost-setup/install/openshift-cluster.md @@ -23,9 +23,9 @@ Regardless of the mode, an OpenShift deployment always requires you to toggle th See [Prerequisites](common-config.md#prerequisites) in the Common Configuration guide for the minimum cluster requirements and the optional k3s setup note. -### 1. Visit the AppsCode Self-Hosted Page +### 1. Visit the KubeDB Platform Self-Hosted Page -Navigate to [AppsCode Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
+Navigate to [KubeDB Platform Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
Click on the `Create New Installer` button to get started. ### 2. Enable OpenShift and Set the Kube API Server diff --git a/docs/platform/selfhost-setup/install/selfhosted-production.md b/docs/platform/selfhost-setup/install/selfhosted-production.md index 13493a8..f5edd15 100644 --- a/docs/platform/selfhost-setup/install/selfhosted-production.md +++ b/docs/platform/selfhost-setup/install/selfhosted-production.md @@ -33,9 +33,9 @@ This guide provides a structured approach to deploying the platform manually. We See [Prerequisites](common-config.md#prerequisites) in the Common Configuration guide for the minimum cluster requirements and the optional k3s setup note. -### 1. Visit the AppsCode Self-Hosted Page +### 1. Visit the KubeDB Platform Self-Hosted Page -Navigate to [AppsCode Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
+Navigate to [KubeDB Platform Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers.
Click on the `Create New Installer` button to get started. ### 2. Choose Deployment Mode And Environment @@ -237,7 +237,7 @@ See [Branding & UI Customization](common-config.md#branding--ui-customization) i ### 13. Generate Installer and Documentation -Click the "Deploy" button to submit your information. AppsCode will generate the installer and provide the necessary documentation. +Click the "Deploy" button to submit your information. KubeDB Platform will generate the installer and provide the necessary documentation. ### 14. Deploy KubeDB Platform From 288f7756ba8acc04adcf63f74d02b263afab4c05 Mon Sep 17 00:00:00 2001 From: Arnob Kumar Saha Date: Sun, 14 Jun 2026 22:01:59 +0600 Subject: [PATCH 15/19] Fix the image ref structure Signed-off-by: Arnob Kumar Saha --- .../kubernetes/credentials.md | 20 ++++++------- docs/platform/selfhost-setup/README.md | 2 +- .../selfhost-setup/install/aws-marketplace.md | 30 +++++++++---------- .../install/azure-marketplace.md | 19 ++++++------ .../selfhost-setup/install/cloud-demo.md | 2 +- .../selfhost-setup/install/common-config.md | 14 ++++----- .../selfhost-setup/install/onprem-demo.md | 2 +- .../install/openshift-cluster.md | 4 +-- .../install/selfhosted-production.md | 6 ++-- 9 files changed, 49 insertions(+), 50 deletions(-) diff --git a/docs/platform/guides/account-management/kubernetes/credentials.md b/docs/platform/guides/account-management/kubernetes/credentials.md index 4beabdf..575c9ee 100644 --- a/docs/platform/guides/account-management/kubernetes/credentials.md +++ b/docs/platform/guides/account-management/kubernetes/credentials.md @@ -263,7 +263,7 @@ Details: Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create) you got from previous step. - +![Aws Cred](images/aws-cred.png) @@ -284,7 +284,7 @@ The command will output a JSON response containing the service principal details Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create). - +![Do Cred](images/do-cred.png) ## Digital Ocean To access Digital Ocean Managed clusters, you need to create a API token from Digital Ocean. @@ -324,7 +324,7 @@ To access GKE clusters, you need to create a GCP service account with with conta Then add the service account credentials [here](https://appscode.com/id/{user}/user/settings/credentials/create). - +![Gcp Oauth](images/gcp-oauth.png) ## Google OAuth @@ -339,7 +339,7 @@ This will create a credential, you will be able to access your k8s cluster with.


- +![Linode Cred](images/linode-cred.png) ## Linode @@ -353,7 +353,7 @@ Then add the credential [here](https://appscode.com/id/{user}/user/settings/cred


- +![Rancher Cred](images/rancher-cred.png) ## Rancher @@ -371,7 +371,7 @@ Copy the generated access key, secret key, and API endpoint from the `Account & Next, add these credentials to the [KubeDB Platform user settings credentials page](https://appscode.com/id/{user}/user/settings/credentials/create). - +![Azure Storage](../images/credentials/azureStorage.png) ## Azure Storage @@ -384,7 +384,7 @@ Then add the credential [here](https://appscode.com/id/{user}/user/settings/cred



- +![Cloudflare Storage](../images/credentials/cloudflareStorage.png) ## Cloudflare R2 Storage @@ -397,7 +397,7 @@ Then add the credential [here](https://appscode.com/id/{user}/user/settings/cred



- +![Hetzner](../images/credentials/Hetzner.png) ## Hetzner @@ -412,7 +412,7 @@ Then add the credential [here](https://appscode.com/id/{user}/user/settings/cred


- +![Scaleway](../images/credentials/Scaleway.png) ## Scaleway @@ -427,7 +427,7 @@ Then add the credential [here](https://appscode.com/id/{user}/user/settings/cred


- +![Vultr](../images/credentials/vultr.png) ## Vultr diff --git a/docs/platform/selfhost-setup/README.md b/docs/platform/selfhost-setup/README.md index 32375ca..f71bcf2 100644 --- a/docs/platform/selfhost-setup/README.md +++ b/docs/platform/selfhost-setup/README.md @@ -19,7 +19,7 @@ Welcome to KubeDB Platform's Self-Hosted deployment! Whether you're looking for Navigate to [KubeDB Platform Self-Hosted](https://appscode.com/selfhost). Here you will find your previously generated self-hosted installers. - +![Installer Home](images/installer-home.png)

Click on the `Create New Installer` button to get started. You can either choose deployment type `Self Hosted Demo` or `Self Hosted Production`. Provide the required data and click `Done` button to generate the installer. Upon generation of the installer, you will get the documentation how to host KubeDB Platform Server on your own. diff --git a/docs/platform/selfhost-setup/install/aws-marketplace.md b/docs/platform/selfhost-setup/install/aws-marketplace.md index df53938..93a07f1 100644 --- a/docs/platform/selfhost-setup/install/aws-marketplace.md +++ b/docs/platform/selfhost-setup/install/aws-marketplace.md @@ -370,12 +370,12 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen ```
- +![Policy 1](../images/policy-1.png) * Give the policy the name **AWSMarketplacePolicyForCloudFormation** and click **Create Policy**.
- +![Policy 2](../images/policy-2.png) @@ -385,20 +385,20 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen * Select **Trusted entity** type: `AWS service`. * Select **Use case**: `CloudFormation` and click **Next**.
- +![Policy 3](../images/policy-3.png) * Search for and select the **AWSMarketplacePolicyForCloudFormation** policy you just created, then click **Next**.
- +![Policy 4](../images/policy-4.png) * Name the role **AWSMarketplaceMeteringRoleForCloudFormation** and click **Create role**.
- +![Policy 5](../images/policy-5.png) ### Step 3: PassRole Permission * Copy the **Role ARN** of the role you just created: `arn:aws:iam::xxxxxxxx:role/AWSMarketplaceMeteringRoleForCloudFormation`.
- +![Policy 7](../images/policy-7.png) @@ -424,7 +424,7 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen ```
- +![Policy 8](../images/policy-8.png) @@ -433,7 +433,7 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen * Provide a name for this policy (e.g., **AllowPassingMeterUsageRoleToCloudFormation**) and click **Create policy**.
- +![Policy 9](../images/policy-9.png) @@ -444,7 +444,7 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen * Select the **AllowPassingMeterUsageRoleToCloudFormation** policy you just created to attach it.
- +![Policy 10](../images/policy-10.png) Now follow the steps to configure the stack @@ -455,14 +455,14 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Click on Continue To Configuration.
- +![Aws Step 1](../images/awsStep1.png) ### Step 2: Configuration * Select the latest software version, and region for the Application and click on **Continue to Launch.**
- +![Aws Step 2](../images/awsStep2.png) ### Step 3: Create stack @@ -470,7 +470,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Keep the default selected template and click on **Next.**
- +![Aws Step 3](../images/awsStep3.png) ### Step 4: Specify stack details @@ -482,7 +482,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Click **Next** and you will be forwarded to the **review and create page.**
- +![Aws Step 4](../images/awsStep4.png) ### Step 5: Attach role to CloudFormation (Optional) @@ -490,7 +490,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * When applying the cloudformation template (CFT), attach **AWSMarketplaceMeteringRoleForCloudFormation** role to the template. This way the CFT will have all the necessary permission to deploy the resources.
- +![Aws Step 5](../images/awsStep5.png) ### Step 6: Review & Deployment @@ -499,7 +499,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Once the Cloudformation is created it will take **5-10min** to spin up the application.
- +![Aws Step 7](../images/awsStep7.png) ### 10. Explore the Deployed Platform diff --git a/docs/platform/selfhost-setup/install/azure-marketplace.md b/docs/platform/selfhost-setup/install/azure-marketplace.md index 717799b..8a2a4a8 100644 --- a/docs/platform/selfhost-setup/install/azure-marketplace.md +++ b/docs/platform/selfhost-setup/install/azure-marketplace.md @@ -85,7 +85,7 @@ See [Monitoring](common-config.md#monitoring) in the Common Configuration guide * Put Login and Logout URL
- +![Domain Whitelisting](../images/domain-whitelisting.png) ### 8. Self Management @@ -105,38 +105,37 @@ Click the "Deploy" button to submit your information. KubeDB Platform will gener Go to Azure Marketplace and select AppsCode Cloud w/ Usage Billing application. [AppsCode Cloud w/ Usage Billing from Marketplace](https://portal.azure.com/#create/appscode.ace_paygace-payg)
- +![Azure Step 1](../images/azureStep1.png) #### Step 2: Basic Information Provide basic information for the Azure application. Put your resource group and application name.
- +![Azure Step 2](../images/azureStep2.png) #### Step 3: Select VM Select a virtual machine for the Installer with at least 4 core CPU and 16GB of RAM.
- +![Azure Step 3](../images/azureStep3.png) #### Step 4: Authentication Type By default Username user will be created to your Installer VM. You can use one of the Password or SSH Key Pair to authenticate into the VM.
- +![Azure Step 4](../images/azureStep4.png) #### Step 5: Installer Information Provide the URL link you found from the instruction in the Installer Url field
- +![Azure Step 5](../images/azureStep5.png) You can monitor the deployment progress through the **Managed Resource Group's** overview page and the **Activity Log**. Once the deployment is complete, the necessary resources will be provisioned within that managed resource group. -
- - -
+![Ace Status](../images/ace-status.png) + +![Managed Resources](../images/managed-resources.png) ### 12. Explore the Deployed Platform diff --git a/docs/platform/selfhost-setup/install/cloud-demo.md b/docs/platform/selfhost-setup/install/cloud-demo.md index a8b1177..8a65c70 100644 --- a/docs/platform/selfhost-setup/install/cloud-demo.md +++ b/docs/platform/selfhost-setup/install/cloud-demo.md @@ -80,7 +80,7 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process.
- +![Ace Dashboard](../images/ace-dashboard.png) ## Get Support diff --git a/docs/platform/selfhost-setup/install/common-config.md b/docs/platform/selfhost-setup/install/common-config.md index 014054a..e6ff4b1 100644 --- a/docs/platform/selfhost-setup/install/common-config.md +++ b/docs/platform/selfhost-setup/install/common-config.md @@ -48,7 +48,7 @@ Use the **Monitoring** section to configure Alertmanager notifications for platf * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state.
- +![Monitoring Alertmanager](../images/monitoring-alertmanager.png) > **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. @@ -79,7 +79,7 @@ Configure NATS, which is used as the internal messaging system for the platform. **Resources:** Configure CPU Requests, CPU Limits, Memory Request and Memory Limit
- +![Nats](../images/nats.png) ## Branding & UI Customization @@ -93,7 +93,7 @@ Administrators can globally re-brand the KubeDB Platform interface to match corp * **App Tag:** Toggle **"Show App Tag"** to display or hide the version/tagging info in the UI.
- +![Branding](../images/branding.png) ## Prerequisites @@ -117,7 +117,7 @@ These credentials define the primary super-user and the initial organizational s - **Initial Organization Name:** You can choose what will be the initial organization name for your account
- +![Admin Setting](../images/admin-setting.png) ## Additional configuration for EKS cluster @@ -148,7 +148,7 @@ aws ec2 describe-subnets --filters "Name=vpc-id,Values=$(aws eks describe-cluste * Put Login and Logout URL for your app
- +![Domain Whitelisting](../images/domain-whitelisting.png) ## Ingress & Gateway @@ -157,11 +157,11 @@ Configure how the application is exposed to the internet or your internal networ * **Ingress & Gateway:** Enable either the **Gateway API** or standard **Ingress**.
- +![Ingress Gateway](../images/ingress-gateway.png) ## Self Management In this section you can enable or disable features.
- +![Features](../images/features.png) diff --git a/docs/platform/selfhost-setup/install/onprem-demo.md b/docs/platform/selfhost-setup/install/onprem-demo.md index 5a6e018..2cae99d 100644 --- a/docs/platform/selfhost-setup/install/onprem-demo.md +++ b/docs/platform/selfhost-setup/install/onprem-demo.md @@ -83,7 +83,7 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process.
- +![Ace Dashboard](../images/ace-dashboard.png) ## Get Support diff --git a/docs/platform/selfhost-setup/install/openshift-cluster.md b/docs/platform/selfhost-setup/install/openshift-cluster.md index 718a943..174f122 100644 --- a/docs/platform/selfhost-setup/install/openshift-cluster.md +++ b/docs/platform/selfhost-setup/install/openshift-cluster.md @@ -99,14 +99,14 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y 4. **Run the remaining install steps.** Continue with the rest of the generated instructions (flux install, `helm upgrade`, and the ACE install) using the reconfigured values.
- +![Ip Reconfigure Openshift](../images/ip-reconfigure-openshift.png) ### 6. Explore the Deployed Platform Once deployed, access the **KubeDB Platform** using the configured IP (IP mode) or domain (DNS mode). Log in with the admin account credentials provided during the creation process.
- +![Ace Dashboard](../images/ace-dashboard.png) ## Notes diff --git a/docs/platform/selfhost-setup/install/selfhosted-production.md b/docs/platform/selfhost-setup/install/selfhosted-production.md index f5edd15..c608fc1 100644 --- a/docs/platform/selfhost-setup/install/selfhosted-production.md +++ b/docs/platform/selfhost-setup/install/selfhosted-production.md @@ -50,7 +50,7 @@ Before beginning the installation, identify your target infrastructure and clust * **Cluster Type:** Determine if you are installing on **AWS EKS Cluster** or **Red Hat OpenShift Cluster**. For openshift cluster toggle Red Hat OpenShift cluster and give Kube API Server endpoint. See the [Deploying KubeDB Platform in OpenShift Cluster](openshift-cluster.md) guide. * **Credential-Less Mode:** Enable this if you are using IAM roles for service accounts (IRSA) to avoid manual secret management.
- +![Selfhost Deployment Option](../images/selfhost-deployment-option.png) ### Additional configuration for EKS cluster @@ -184,7 +184,7 @@ See [Registry](common-config.md#registry) in the Common Configuration guide for This secton is for Persistence & Resource Allocation. Properly sizing your resources is critical for production stability. Configure CPU Requests, CPU Limits, Memory Request and Memory Limit for both cache and Database - +![Resource Limit](../images/resource-limit.png)
> [!IMPORTANT] @@ -248,4 +248,4 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process.After the login process you will see the **KubeDB Platform dashboard** user interface
- +![Ace Dashboard](../images/ace-dashboard.png) From 088b4ad0ce138d77bced6c3c1c158e57accf6f81 Mon Sep 17 00:00:00 2001 From: Arnob Kumar Saha Date: Mon, 15 Jun 2026 01:00:22 +0600 Subject: [PATCH 16/19] Fix links Signed-off-by: Arnob Kumar Saha --- .../kubernetes/credentials.md | 20 ++++++------- .../site-administration/ace-upgrade.md | 8 ++--- .../authentication-sources.md | 2 +- .../site-administration/branding.md | 2 +- .../site-administration/client-org.md | 10 +++---- .../site-administration/dashboard.md | 2 +- .../site-administration/delete-account.md | 4 +-- .../external-authentication-sources.md | 2 +- .../site-administration/organizations.md | 4 +-- .../sign-up-configuration.md | 4 +-- .../site-administration/user-account.md | 4 +-- .../cluster-management/cluster-upgrade.md | 2 +- .../hub-ui/cluster-and-clusterset.md | 14 ++++----- .../cluster-management/hub-ui/create.md | 10 +++---- .../cluster-management/hub-ui/introduction.md | 2 +- .../hub-ui/license-management.md | 10 +++---- .../cluster-management/hub-ui/permission.md | 10 +++---- .../guides/cluster-management/hub-ui/spoke.md | 14 ++++----- .../cluster-management/hub-ui/upgrade.md | 6 ++-- .../selfhost-setup/install/aws-marketplace.md | 30 +++++++++---------- .../install/azure-marketplace.md | 16 +++++----- .../selfhost-setup/install/cloud-demo.md | 2 +- .../selfhost-setup/install/common-config.md | 14 ++++----- .../selfhost-setup/install/onprem-demo.md | 2 +- .../install/openshift-cluster.md | 4 +-- .../install/selfhosted-production.md | 6 ++-- 26 files changed, 102 insertions(+), 102 deletions(-) diff --git a/docs/platform/guides/account-management/kubernetes/credentials.md b/docs/platform/guides/account-management/kubernetes/credentials.md index 575c9ee..719bfe9 100644 --- a/docs/platform/guides/account-management/kubernetes/credentials.md +++ b/docs/platform/guides/account-management/kubernetes/credentials.md @@ -263,7 +263,7 @@ Details: Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create) you got from previous step. -![Aws Cred](images/aws-cred.png) +![Aws Cred](../images/aws-cred.png) @@ -284,7 +284,7 @@ The command will output a JSON response containing the service principal details Then add the credential [here](https://appscode.com/id/{user}/user/settings/credentials/create). -![Do Cred](images/do-cred.png) +![Do Cred](../images/do-cred.png) ## Digital Ocean To access Digital Ocean Managed clusters, you need to create a API token from Digital Ocean. @@ -324,7 +324,7 @@ To access GKE clusters, you need to create a GCP service account with with conta Then add the service account credentials [here](https://appscode.com/id/{user}/user/settings/credentials/create). -![Gcp Oauth](images/gcp-oauth.png) +![Gcp Oauth](../images/gcp-oauth.png) ## Google OAuth @@ -339,7 +339,7 @@ This will create a credential, you will be able to access your k8s cluster with.


-![Linode Cred](images/linode-cred.png) +![Linode Cred](../images/linode-cred.png) ## Linode @@ -353,7 +353,7 @@ Then add the credential [here](https://appscode.com/id/{user}/user/settings/cred


-![Rancher Cred](images/rancher-cred.png) +![Rancher Cred](../images/rancher-cred.png) ## Rancher @@ -371,7 +371,7 @@ Copy the generated access key, secret key, and API endpoint from the `Account & Next, add these credentials to the [KubeDB Platform user settings credentials page](https://appscode.com/id/{user}/user/settings/credentials/create). -![Azure Storage](../images/credentials/azureStorage.png) +![Azure Storage](../../images/credentials/azureStorage.png) ## Azure Storage @@ -384,7 +384,7 @@ Then add the credential [here](https://appscode.com/id/{user}/user/settings/cred



-![Cloudflare Storage](../images/credentials/cloudflareStorage.png) +![Cloudflare Storage](../../images/credentials/cloudflareStorage.png) ## Cloudflare R2 Storage @@ -397,7 +397,7 @@ Then add the credential [here](https://appscode.com/id/{user}/user/settings/cred



-![Hetzner](../images/credentials/Hetzner.png) +![Hetzner](../../images/credentials/Hetzner.png) ## Hetzner @@ -412,7 +412,7 @@ Then add the credential [here](https://appscode.com/id/{user}/user/settings/cred


-![Scaleway](../images/credentials/Scaleway.png) +![Scaleway](../../images/credentials/Scaleway.png) ## Scaleway @@ -427,7 +427,7 @@ Then add the credential [here](https://appscode.com/id/{user}/user/settings/cred


-![Vultr](../images/credentials/vultr.png) +![Vultr](../../images/credentials/vultr.png) ## Vultr diff --git a/docs/platform/guides/account-management/site-administration/ace-upgrade.md b/docs/platform/guides/account-management/site-administration/ace-upgrade.md index e53c0ce..d15b160 100644 --- a/docs/platform/guides/account-management/site-administration/ace-upgrade.md +++ b/docs/platform/guides/account-management/site-administration/ace-upgrade.md @@ -29,7 +29,7 @@ Before starting the upgrade, download the required values file from the AppsCode ## Step 1 — Open KubeDB Platform Upgrade -![KubeDB Platform Version Page](../images/upgrade-version-1.png) +![KubeDB Platform Version Page](../../images/upgrade-version-1.png) Go to **SITE ADMINISTRATION > KubeDB Platform Upgrade** from the left-hand menu. @@ -39,7 +39,7 @@ The page displays the current KubeDB Platform version and the upgrade status of ## Step 2 — Upload the Values File -![Upload Values File](../images/upgrade-version-2.png) +![Upload Values File](../../images/upgrade-version-2.png) On the **Upgrade KubeDB Platform** screen: @@ -50,7 +50,7 @@ On the **Upgrade KubeDB Platform** screen: ## Step 3 — Monitor Upgrade Progress -![Upgrade In Progress](../images/upgrade-version-3.png) +![Upgrade In Progress](../../images/upgrade-version-3.png) The platform will upgrade individual components one by one. You can track progress directly on this page: @@ -62,6 +62,6 @@ The platform will upgrade individual components one by one. You can track progre ## Step 4 — Verify Completion -![Upgrade Complete](../images/upgrade-version-4.png) +![Upgrade Complete](../../images/upgrade-version-4.png) Once all components have been updated, the status changes to **Updated**. Confirm that the new version number is correctly reflected at the top of the page. diff --git a/docs/platform/guides/account-management/site-administration/authentication-sources.md b/docs/platform/guides/account-management/site-administration/authentication-sources.md index 0696086..1095bb6 100644 --- a/docs/platform/guides/account-management/site-administration/authentication-sources.md +++ b/docs/platform/guides/account-management/site-administration/authentication-sources.md @@ -17,7 +17,7 @@ Site administrators can configure external authentication backends (such as LDAP ## Add an Authentication Source -![Add Authentication Source](../images/authentication-sources.png) +![Add Authentication Source](../../images/authentication-sources.png) Go to **SITE ADMINISTRATION > Authentication Sources** and configure a new source using the form below. diff --git a/docs/platform/guides/account-management/site-administration/branding.md b/docs/platform/guides/account-management/site-administration/branding.md index 81a0441..1e4f11a 100644 --- a/docs/platform/guides/account-management/site-administration/branding.md +++ b/docs/platform/guides/account-management/site-administration/branding.md @@ -17,7 +17,7 @@ Site administrators can customize the platform's appearance and identity — inc ## Configure Branding -![Configure Branding](../images/Branding.png) +![Configure Branding](../../images/Branding.png) Go to **SITE ADMINISTRATION > Branding** to update the platform's visual identity. diff --git a/docs/platform/guides/account-management/site-administration/client-org.md b/docs/platform/guides/account-management/site-administration/client-org.md index 2f21a16..d2e6a02 100644 --- a/docs/platform/guides/account-management/site-administration/client-org.md +++ b/docs/platform/guides/account-management/site-administration/client-org.md @@ -35,13 +35,13 @@ Once your Hub is ready and your Spoke is licensed, you can create the organizati > **Note:** Make sure the user who will be the organization admin already exists. If not, create one first via **SITE ADMINISTRATION > User Accounts**. -![Client Organizations List](../images/client-org-4.png) +![Client Organizations List](../../images/client-org-4.png) Go to **USER SETTINGS > Client Organizations** and click **+ Add Organization**. ### Step 1 — Basic Info -![Basic Info](../images/client-org-1.png) +![Basic Info](../../images/client-org-1.png) - **Organization Name:** Enter a display name for the organization (e.g., `test-final`). - **Custom Annotations:** Optionally add key-value annotations applied to the organization's namespace. @@ -51,7 +51,7 @@ Go to **USER SETTINGS > Client Organizations** and click **+ Add Organization**. ### Step 2 — Select Cluster -![Select Cluster and Node Pool](../images/client-org-2.png) +![Select Cluster and Node Pool](../../images/client-org-2.png) - **Hub Cluster:** Select the Hub cluster to use as the management plane. - **Spoke Cluster:** Select the licensed Spoke cluster where the organization's workloads will run. @@ -60,7 +60,7 @@ Go to **USER SETTINGS > Client Organizations** and click **+ Add Organization**. ### Step 3 — Gateway Configuration -![Gateway Configuration](../images/client-org-3.png) +![Gateway Configuration](../../images/client-org-3.png) - **Use Shared Gateway:** No dedicated gateway configuration is applied. The organization shares the existing gateway. - **Use Dedicated Gateway:** Select from available gateway configurations to assign a dedicated gateway for this organization. @@ -70,7 +70,7 @@ Go to **USER SETTINGS > Client Organizations** and click **+ Add Organization**. ## Verification -![Organization Details](../images/client-org-5.png) +![Organization Details](../../images/client-org-5.png) After submission, the organization is created and visible in the list. Clicking on it shows its details — including the assigned Spoke cluster and its status. diff --git a/docs/platform/guides/account-management/site-administration/dashboard.md b/docs/platform/guides/account-management/site-administration/dashboard.md index 8c169aa..986d70b 100644 --- a/docs/platform/guides/account-management/site-administration/dashboard.md +++ b/docs/platform/guides/account-management/site-administration/dashboard.md @@ -17,7 +17,7 @@ The Site Admin Dashboard gives administrators a high-level overview of the entir ## Accessing the Dashboard -![Site Administration Dashboard](../images/site-admin-dashboard.png) +![Site Administration Dashboard](../../images/site-admin-dashboard.png) Navigate to **SITE ADMINISTRATION > Dashboard** from the top navigation bar. diff --git a/docs/platform/guides/account-management/site-administration/delete-account.md b/docs/platform/guides/account-management/site-administration/delete-account.md index 2742198..820e100 100644 --- a/docs/platform/guides/account-management/site-administration/delete-account.md +++ b/docs/platform/guides/account-management/site-administration/delete-account.md @@ -17,7 +17,7 @@ When a user account is deleted from the **User Accounts** list, it is soft-delet ## 1. View Deleted Accounts -![View Deleted Accounts](../images/site-admin-deleted-account-1.png) +![View Deleted Accounts](../../images/site-admin-deleted-account-1.png) Go to **SITE ADMINISTRATION > Deleted Accounts** to see the list of deleted user accounts. @@ -26,7 +26,7 @@ Go to **SITE ADMINISTRATION > Deleted Accounts** to see the list of deleted user ## 2. Confirm Reactivation -![Confirm Account Reactivation](../images/site-admin-deleted-account-2.png) +![Confirm Account Reactivation](../../images/site-admin-deleted-account-2.png) Clicking **Reactive** opens a confirmation dialog. diff --git a/docs/platform/guides/account-management/site-administration/external-authentication-sources.md b/docs/platform/guides/account-management/site-administration/external-authentication-sources.md index 71350e6..6e85004 100644 --- a/docs/platform/guides/account-management/site-administration/external-authentication-sources.md +++ b/docs/platform/guides/account-management/site-administration/external-authentication-sources.md @@ -17,7 +17,7 @@ Site administrators can enable third-party OAuth login providers (such as GitHub ## Add an External Authentication Source -![Add External Authentication Source](../images/external-authentication.png) +![Add External Authentication Source](../../images/external-authentication.png) Go to **SITE ADMINISTRATION > External Authentication Sources** and fill in the form. diff --git a/docs/platform/guides/account-management/site-administration/organizations.md b/docs/platform/guides/account-management/site-administration/organizations.md index db025fa..05e830a 100644 --- a/docs/platform/guides/account-management/site-administration/organizations.md +++ b/docs/platform/guides/account-management/site-administration/organizations.md @@ -17,7 +17,7 @@ Site administrators can view all organizations on the platform and create new on ## 1. View All Organizations -![View All Organizations](../images/site-admin-organizations-1.png) +![View All Organizations](../../images/site-admin-organizations-1.png) Go to **SITE ADMINISTRATION > Organizations** to see the full list of organizations. @@ -28,7 +28,7 @@ Go to **SITE ADMINISTRATION > Organizations** to see the full list of organizati ## 2. Create a New Organization -![Create New Organization](../images/site-admin-organizations-2.png) +![Create New Organization](../../images/site-admin-organizations-2.png) Click **+ New Organization** to open the creation form. diff --git a/docs/platform/guides/account-management/site-administration/sign-up-configuration.md b/docs/platform/guides/account-management/site-administration/sign-up-configuration.md index b8d962b..3409b15 100644 --- a/docs/platform/guides/account-management/site-administration/sign-up-configuration.md +++ b/docs/platform/guides/account-management/site-administration/sign-up-configuration.md @@ -17,7 +17,7 @@ Site administrators can control who is allowed to register on the platform by ma ## Overview -![Sign-up Configuration Overview](../images/sign-up-config-1.png) +![Sign-up Configuration Overview](../../images/sign-up-config-1.png) Go to **SITE ADMINISTRATION > Sign-up Configuration** to manage registration settings. @@ -36,7 +36,7 @@ Restrict sign-ups to users with email addresses from specific approved domains. ## Add a New Allowed Domain -![Add Allowed Domain](../images/sign-up-config-2.png) +![Add Allowed Domain](../../images/sign-up-config-2.png) Click **+ Add Domains** to open the form. diff --git a/docs/platform/guides/account-management/site-administration/user-account.md b/docs/platform/guides/account-management/site-administration/user-account.md index 50978e1..5a32166 100644 --- a/docs/platform/guides/account-management/site-administration/user-account.md +++ b/docs/platform/guides/account-management/site-administration/user-account.md @@ -17,7 +17,7 @@ As a site administrator, you can view all registered user accounts and create ne ## 1. View All Users -![View All User Accounts](../images/site-admin-user-account-1.png) +![View All User Accounts](../../images/site-admin-user-account-1.png) Go to **SITE ADMINISTRATION > User Accounts** to see the full list of registered accounts. @@ -28,7 +28,7 @@ Go to **SITE ADMINISTRATION > User Accounts** to see the full list of registered ## 2. Create a New User Account -![Create New User Account](../images/site-admin-user-account-2.png) +![Create New User Account](../../images/site-admin-user-account-2.png) Click **Create User Account** to open the new user form. diff --git a/docs/platform/guides/cluster-management/cluster-upgrade.md b/docs/platform/guides/cluster-management/cluster-upgrade.md index c226c57..2029835 100644 --- a/docs/platform/guides/cluster-management/cluster-upgrade.md +++ b/docs/platform/guides/cluster-management/cluster-upgrade.md @@ -106,7 +106,7 @@ updating the cluster set. 3. Select your spoke cluster. 4. Click **Update KubeDB Platform Resources → Update Version → Yes**. -![Upgrade](images/upgrade/upgrade_1.png) +![Upgrade](../images/upgrade/upgrade_1.png) ```bash # After triggering, watch the QB operator start the upgrade on the spoke diff --git a/docs/platform/guides/cluster-management/hub-ui/cluster-and-clusterset.md b/docs/platform/guides/cluster-management/hub-ui/cluster-and-clusterset.md index 26814c3..c03a068 100644 --- a/docs/platform/guides/cluster-management/hub-ui/cluster-and-clusterset.md +++ b/docs/platform/guides/cluster-management/hub-ui/cluster-and-clusterset.md @@ -28,7 +28,7 @@ ClusterSets group multiple clusters together. 1. Go to **ClusterSets** 2. Click **Add ClusterSet** -![ClusterSet](../images/cluster_and_clusterset/clusterset.png) +![ClusterSet](../../images/cluster_and_clusterset/clusterset.png) 3. Provide a name @@ -40,9 +40,9 @@ ClusterSets group multiple clusters together. * Select any feature you want to change in all of your connected spokes -![ClusterSet](../images/cluster_and_clusterset/clusterset_feature_1.png) +![ClusterSet](../../images/cluster_and_clusterset/clusterset_feature_1.png) -![ClusterSet](../images/cluster_and_clusterset/clusterset_feature_2.png) +![ClusterSet](../../images/cluster_and_clusterset/clusterset_feature_2.png) * Apply configurations across all clusters @@ -52,11 +52,11 @@ ClusterSets group multiple clusters together. ### Unaligned cluster: If any spoke cluster has extra features enabled than hub that's unaligned -![Unaligned](../images/cluster_and_clusterset/unaligned.png) +![Unaligned](../../images/cluster_and_clusterset/unaligned.png) Like in the image secret management have 1 unaligned cluster -![Unaligned](../images/cluster_and_clusterset/unaligned_2.png) +![Unaligned](../../images/cluster_and_clusterset/unaligned_2.png) You can see config-syncer is enabled in spoke but not in hub @@ -69,11 +69,11 @@ You can see config-syncer is enabled in spoke but not in hub You can add cluster from another clusterset if you want -![ClusterSet](../images/cluster_and_clusterset/add_cluster_1.png) +![ClusterSet](../../images/cluster_and_clusterset/add_cluster_1.png) 1. Select cluster(s) -![ClusterSet](../images/cluster_and_clusterset/add_cluster_2.png) +![ClusterSet](../../images/cluster_and_clusterset/add_cluster_2.png) 2. Add to ClusterSet diff --git a/docs/platform/guides/cluster-management/hub-ui/create.md b/docs/platform/guides/cluster-management/hub-ui/create.md index 7f3f1e4..3232fb8 100644 --- a/docs/platform/guides/cluster-management/hub-ui/create.md +++ b/docs/platform/guides/cluster-management/hub-ui/create.md @@ -18,27 +18,27 @@ section_menu_id: guides ### Steps 1. Go to import cluster and choose your preferred method -![Hub & Spoke Model](../images/import/select-cluster.png) +![Hub & Spoke Model](../../images/import/select-cluster.png) 2. After filling up necessary steps for your preferred method Choose Generic as cluster profile -![Cluster Profile](../images/import/cluster-profile.png) +![Cluster Profile](../../images/import/cluster-profile.png) 3. Open **Cluster Details** You won't see the hub UI button initially -![Cluster Details](../images/import/cluster-details.png) +![Cluster Details](../../images/import/cluster-details.png) 4. Go to **Feature Set Settings** 5. Select **OCM Hub Feature Set** All the features will be white leveled if you are enabling it for the first time. -![Cluster Feature-set](../images/import/feature-set.png) +![Cluster Feature-set](../../images/import/feature-set.png) In the top right corner there will be enable button. 1. Click in the enable button 2. Select all features ( will be auto-selected) 3. Click Preview then Deploy -![Deploy](../images/import/deploy.png) +![Deploy](../../images/import/deploy.png) diff --git a/docs/platform/guides/cluster-management/hub-ui/introduction.md b/docs/platform/guides/cluster-management/hub-ui/introduction.md index 1a748aa..ea1ade7 100644 --- a/docs/platform/guides/cluster-management/hub-ui/introduction.md +++ b/docs/platform/guides/cluster-management/hub-ui/introduction.md @@ -13,7 +13,7 @@ section_menu_id: guides Hub UI lets you manage multiple clusters from a single point. -![Hub & Spoke Model](../images/introduction/hub-spoke-model.png) +![Hub & Spoke Model](../../images/introduction/hub-spoke-model.png) ### What is OCM? diff --git a/docs/platform/guides/cluster-management/hub-ui/license-management.md b/docs/platform/guides/cluster-management/hub-ui/license-management.md index 89e9334..c5e523a 100644 --- a/docs/platform/guides/cluster-management/hub-ui/license-management.md +++ b/docs/platform/guides/cluster-management/hub-ui/license-management.md @@ -19,19 +19,19 @@ You can: * Add licenses -![License](../images/license/add_license.png) +![License](../../images/license/add_license.png) -![License](../images/license/license_modal.png) +![License](../../images/license/license_modal.png) * Upon clicking on the link you will redirected to billing UI -![License](../images/license/contract.png) +![License](../../images/license/contract.png) * After selecting a contract add your cluster there -![License](../images/license/contract_1.png) +![License](../../images/license/contract_1.png) -![License](../images/license/contract_1.png) +![License](../../images/license/contract_1.png) * Copy and paste your license * Assign to namespaces diff --git a/docs/platform/guides/cluster-management/hub-ui/permission.md b/docs/platform/guides/cluster-management/hub-ui/permission.md index e22e88f..00a8207 100644 --- a/docs/platform/guides/cluster-management/hub-ui/permission.md +++ b/docs/platform/guides/cluster-management/hub-ui/permission.md @@ -12,7 +12,7 @@ section_menu_id: guides # User Access Management -![permission](../images/permission/permission.png) +![permission](../../images/permission/permission.png) Here you can assign a user one cluster or many cluster (clusterset) and grant access of different level @@ -31,20 +31,20 @@ Here you can assign a user one cluster or many cluster (clusterset) and grant ac 1. Go to **Platform UI** -![go to platform](../images/permission/go_to_platform.png) +![go to platform](../../images/permission/go_to_platform.png) 2. Create a **Team** -![create team](../images/permission/create_team.png) +![create team](../../images/permission/create_team.png) 3. Add members -![Add Member](../images/permission/add_member.png) +![Add Member](../../images/permission/add_member.png) 4. Go to Hub → **Access** 5. Click **Assign Permission** -![Grant Permission](../images/permission/grant_permission.png) +![Grant Permission](../../images/permission/grant_permission.png) ### Fields Explained diff --git a/docs/platform/guides/cluster-management/hub-ui/spoke.md b/docs/platform/guides/cluster-management/hub-ui/spoke.md index 68494f5..a086b64 100644 --- a/docs/platform/guides/cluster-management/hub-ui/spoke.md +++ b/docs/platform/guides/cluster-management/hub-ui/spoke.md @@ -19,13 +19,13 @@ section_menu_id: guides 1. Go to **Import Cluster** and complete the necessary steps 2. Select an existing hub cluster before importing -![Spoke](../images/spoke/spoke.png) +![Spoke](../../images/spoke/spoke.png) 3. Complete import ✅ Spoke cluster is created and linked -![Homepage](../images/spoke/homepage.png) +![Homepage](../../images/spoke/homepage.png) This method can also be started from the Hub cluster: @@ -33,7 +33,7 @@ This method can also be started from the Hub cluster: 2. Click **Import Managed Cluster** -![Homepage](../images/spoke/import_spoke.png) +![Homepage](../../images/spoke/import_spoke.png) 3. Follow import steps @@ -47,11 +47,11 @@ This method can also be started from the Hub cluster: 1. Go to cluster → Feature Set 2. Enable **OCM Spoke** (initially your features will be white leveled) -![featureset](../images/spoke/featureset.png) +![featureset](../../images/spoke/featureset.png) 3. Select Hub Cluster -![select](../images/spoke/select.png) +![select](../../images/spoke/select.png) 4. Provide a name 5. Enable @@ -60,11 +60,11 @@ Then: * Enter into your hub cluster then Click Go to Hub -![request](../images/spoke/request.png) +![request](../../images/spoke/request.png) * Click **Accept Spoke** The select the spoke from which the connection request was sent before -![accept](../images/spoke/accept.png) +![accept](../../images/spoke/accept.png) * Approve the request diff --git a/docs/platform/guides/cluster-management/hub-ui/upgrade.md b/docs/platform/guides/cluster-management/hub-ui/upgrade.md index 4b60e87..65f1215 100644 --- a/docs/platform/guides/cluster-management/hub-ui/upgrade.md +++ b/docs/platform/guides/cluster-management/hub-ui/upgrade.md @@ -17,16 +17,16 @@ section_menu_id: guides 1. Go to clusterset of the cluster that you want to upgrade to latest version -![Upgrade](../images/upgrade/upgrade_1.png) +![Upgrade](../../images/upgrade/upgrade_1.png) 2. You will see the spoke featureset inside the hub -![Upgrade](../images/upgrade/upgrade_2.png) +![Upgrade](../../images/upgrade/upgrade_2.png) To give a spoke different features than the hub, configure them here. 3. Go to **Upgrade Version** from the sidebar. If a latest version is available, click the upgrade button. -![Upgrade](../images/upgrade/upgrade_3.png) +![Upgrade](../../images/upgrade/upgrade_3.png) diff --git a/docs/platform/selfhost-setup/install/aws-marketplace.md b/docs/platform/selfhost-setup/install/aws-marketplace.md index 93a07f1..ef5b75f 100644 --- a/docs/platform/selfhost-setup/install/aws-marketplace.md +++ b/docs/platform/selfhost-setup/install/aws-marketplace.md @@ -370,12 +370,12 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen ```
-![Policy 1](../images/policy-1.png) +![Policy 1](../../images/policy-1.png) * Give the policy the name **AWSMarketplacePolicyForCloudFormation** and click **Create Policy**.
-![Policy 2](../images/policy-2.png) +![Policy 2](../../images/policy-2.png) @@ -385,20 +385,20 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen * Select **Trusted entity** type: `AWS service`. * Select **Use case**: `CloudFormation` and click **Next**.
-![Policy 3](../images/policy-3.png) +![Policy 3](../../images/policy-3.png) * Search for and select the **AWSMarketplacePolicyForCloudFormation** policy you just created, then click **Next**.
-![Policy 4](../images/policy-4.png) +![Policy 4](../../images/policy-4.png) * Name the role **AWSMarketplaceMeteringRoleForCloudFormation** and click **Create role**.
-![Policy 5](../images/policy-5.png) +![Policy 5](../../images/policy-5.png) ### Step 3: PassRole Permission * Copy the **Role ARN** of the role you just created: `arn:aws:iam::xxxxxxxx:role/AWSMarketplaceMeteringRoleForCloudFormation`.
-![Policy 7](../images/policy-7.png) +![Policy 7](../../images/policy-7.png) @@ -424,7 +424,7 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen ```
-![Policy 8](../images/policy-8.png) +![Policy 8](../../images/policy-8.png) @@ -433,7 +433,7 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen * Provide a name for this policy (e.g., **AllowPassingMeterUsageRoleToCloudFormation**) and click **Create policy**.
-![Policy 9](../images/policy-9.png) +![Policy 9](../../images/policy-9.png) @@ -444,7 +444,7 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen * Select the **AllowPassingMeterUsageRoleToCloudFormation** policy you just created to attach it.
-![Policy 10](../images/policy-10.png) +![Policy 10](../../images/policy-10.png) Now follow the steps to configure the stack @@ -455,14 +455,14 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Click on Continue To Configuration.
-![Aws Step 1](../images/awsStep1.png) +![Aws Step 1](../../images/awsStep1.png) ### Step 2: Configuration * Select the latest software version, and region for the Application and click on **Continue to Launch.**
-![Aws Step 2](../images/awsStep2.png) +![Aws Step 2](../../images/awsStep2.png) ### Step 3: Create stack @@ -470,7 +470,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Keep the default selected template and click on **Next.**
-![Aws Step 3](../images/awsStep3.png) +![Aws Step 3](../../images/awsStep3.png) ### Step 4: Specify stack details @@ -482,7 +482,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Click **Next** and you will be forwarded to the **review and create page.**
-![Aws Step 4](../images/awsStep4.png) +![Aws Step 4](../../images/awsStep4.png) ### Step 5: Attach role to CloudFormation (Optional) @@ -490,7 +490,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * When applying the cloudformation template (CFT), attach **AWSMarketplaceMeteringRoleForCloudFormation** role to the template. This way the CFT will have all the necessary permission to deploy the resources.
-![Aws Step 5](../images/awsStep5.png) +![Aws Step 5](../../images/awsStep5.png) ### Step 6: Review & Deployment @@ -499,7 +499,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Once the Cloudformation is created it will take **5-10min** to spin up the application.
-![Aws Step 7](../images/awsStep7.png) +![Aws Step 7](../../images/awsStep7.png) ### 10. Explore the Deployed Platform diff --git a/docs/platform/selfhost-setup/install/azure-marketplace.md b/docs/platform/selfhost-setup/install/azure-marketplace.md index 8a2a4a8..2addc6f 100644 --- a/docs/platform/selfhost-setup/install/azure-marketplace.md +++ b/docs/platform/selfhost-setup/install/azure-marketplace.md @@ -85,7 +85,7 @@ See [Monitoring](common-config.md#monitoring) in the Common Configuration guide * Put Login and Logout URL
-![Domain Whitelisting](../images/domain-whitelisting.png) +![Domain Whitelisting](../../images/domain-whitelisting.png) ### 8. Self Management @@ -105,37 +105,37 @@ Click the "Deploy" button to submit your information. KubeDB Platform will gener Go to Azure Marketplace and select AppsCode Cloud w/ Usage Billing application. [AppsCode Cloud w/ Usage Billing from Marketplace](https://portal.azure.com/#create/appscode.ace_paygace-payg)
-![Azure Step 1](../images/azureStep1.png) +![Azure Step 1](../../images/azureStep1.png) #### Step 2: Basic Information Provide basic information for the Azure application. Put your resource group and application name.
-![Azure Step 2](../images/azureStep2.png) +![Azure Step 2](../../images/azureStep2.png) #### Step 3: Select VM Select a virtual machine for the Installer with at least 4 core CPU and 16GB of RAM.
-![Azure Step 3](../images/azureStep3.png) +![Azure Step 3](../../images/azureStep3.png) #### Step 4: Authentication Type By default Username user will be created to your Installer VM. You can use one of the Password or SSH Key Pair to authenticate into the VM.
-![Azure Step 4](../images/azureStep4.png) +![Azure Step 4](../../images/azureStep4.png) #### Step 5: Installer Information Provide the URL link you found from the instruction in the Installer Url field
-![Azure Step 5](../images/azureStep5.png) +![Azure Step 5](../../images/azureStep5.png) You can monitor the deployment progress through the **Managed Resource Group's** overview page and the **Activity Log**. Once the deployment is complete, the necessary resources will be provisioned within that managed resource group. -![Ace Status](../images/ace-status.png) +![Ace Status](../../images/ace-status.png) -![Managed Resources](../images/managed-resources.png) +![Managed Resources](../../images/managed-resources.png) ### 12. Explore the Deployed Platform diff --git a/docs/platform/selfhost-setup/install/cloud-demo.md b/docs/platform/selfhost-setup/install/cloud-demo.md index 8a65c70..83eec88 100644 --- a/docs/platform/selfhost-setup/install/cloud-demo.md +++ b/docs/platform/selfhost-setup/install/cloud-demo.md @@ -80,7 +80,7 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process.
-![Ace Dashboard](../images/ace-dashboard.png) +![Ace Dashboard](../../images/ace-dashboard.png) ## Get Support diff --git a/docs/platform/selfhost-setup/install/common-config.md b/docs/platform/selfhost-setup/install/common-config.md index e6ff4b1..db1f38b 100644 --- a/docs/platform/selfhost-setup/install/common-config.md +++ b/docs/platform/selfhost-setup/install/common-config.md @@ -48,7 +48,7 @@ Use the **Monitoring** section to configure Alertmanager notifications for platf * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state.
-![Monitoring Alertmanager](../images/monitoring-alertmanager.png) +![Monitoring Alertmanager](../../images/monitoring-alertmanager.png) > **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. @@ -79,7 +79,7 @@ Configure NATS, which is used as the internal messaging system for the platform. **Resources:** Configure CPU Requests, CPU Limits, Memory Request and Memory Limit
-![Nats](../images/nats.png) +![Nats](../../images/nats.png) ## Branding & UI Customization @@ -93,7 +93,7 @@ Administrators can globally re-brand the KubeDB Platform interface to match corp * **App Tag:** Toggle **"Show App Tag"** to display or hide the version/tagging info in the UI.
-![Branding](../images/branding.png) +![Branding](../../images/branding.png) ## Prerequisites @@ -117,7 +117,7 @@ These credentials define the primary super-user and the initial organizational s - **Initial Organization Name:** You can choose what will be the initial organization name for your account
-![Admin Setting](../images/admin-setting.png) +![Admin Setting](../../images/admin-setting.png) ## Additional configuration for EKS cluster @@ -148,7 +148,7 @@ aws ec2 describe-subnets --filters "Name=vpc-id,Values=$(aws eks describe-cluste * Put Login and Logout URL for your app
-![Domain Whitelisting](../images/domain-whitelisting.png) +![Domain Whitelisting](../../images/domain-whitelisting.png) ## Ingress & Gateway @@ -157,11 +157,11 @@ Configure how the application is exposed to the internet or your internal networ * **Ingress & Gateway:** Enable either the **Gateway API** or standard **Ingress**.
-![Ingress Gateway](../images/ingress-gateway.png) +![Ingress Gateway](../../images/ingress-gateway.png) ## Self Management In this section you can enable or disable features.
-![Features](../images/features.png) +![Features](../../images/features.png) diff --git a/docs/platform/selfhost-setup/install/onprem-demo.md b/docs/platform/selfhost-setup/install/onprem-demo.md index 2cae99d..e3df0cb 100644 --- a/docs/platform/selfhost-setup/install/onprem-demo.md +++ b/docs/platform/selfhost-setup/install/onprem-demo.md @@ -83,7 +83,7 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process.
-![Ace Dashboard](../images/ace-dashboard.png) +![Ace Dashboard](../../images/ace-dashboard.png) ## Get Support diff --git a/docs/platform/selfhost-setup/install/openshift-cluster.md b/docs/platform/selfhost-setup/install/openshift-cluster.md index 174f122..819d5f3 100644 --- a/docs/platform/selfhost-setup/install/openshift-cluster.md +++ b/docs/platform/selfhost-setup/install/openshift-cluster.md @@ -99,14 +99,14 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y 4. **Run the remaining install steps.** Continue with the rest of the generated instructions (flux install, `helm upgrade`, and the ACE install) using the reconfigured values.
-![Ip Reconfigure Openshift](../images/ip-reconfigure-openshift.png) +![Ip Reconfigure Openshift](../../images/ip-reconfigure-openshift.png) ### 6. Explore the Deployed Platform Once deployed, access the **KubeDB Platform** using the configured IP (IP mode) or domain (DNS mode). Log in with the admin account credentials provided during the creation process.
-![Ace Dashboard](../images/ace-dashboard.png) +![Ace Dashboard](../../images/ace-dashboard.png) ## Notes diff --git a/docs/platform/selfhost-setup/install/selfhosted-production.md b/docs/platform/selfhost-setup/install/selfhosted-production.md index c608fc1..0b256fe 100644 --- a/docs/platform/selfhost-setup/install/selfhosted-production.md +++ b/docs/platform/selfhost-setup/install/selfhosted-production.md @@ -50,7 +50,7 @@ Before beginning the installation, identify your target infrastructure and clust * **Cluster Type:** Determine if you are installing on **AWS EKS Cluster** or **Red Hat OpenShift Cluster**. For openshift cluster toggle Red Hat OpenShift cluster and give Kube API Server endpoint. See the [Deploying KubeDB Platform in OpenShift Cluster](openshift-cluster.md) guide. * **Credential-Less Mode:** Enable this if you are using IAM roles for service accounts (IRSA) to avoid manual secret management.
-![Selfhost Deployment Option](../images/selfhost-deployment-option.png) +![Selfhost Deployment Option](../../images/selfhost-deployment-option.png) ### Additional configuration for EKS cluster @@ -184,7 +184,7 @@ See [Registry](common-config.md#registry) in the Common Configuration guide for This secton is for Persistence & Resource Allocation. Properly sizing your resources is critical for production stability. Configure CPU Requests, CPU Limits, Memory Request and Memory Limit for both cache and Database -![Resource Limit](../images/resource-limit.png) +![Resource Limit](../../images/resource-limit.png)
> [!IMPORTANT] @@ -248,4 +248,4 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process.After the login process you will see the **KubeDB Platform dashboard** user interface
-![Ace Dashboard](../images/ace-dashboard.png) +![Ace Dashboard](../../images/ace-dashboard.png) From 3bc38c4277892343f45498271d901e6742cf0774 Mon Sep 17 00:00:00 2001 From: Arnob Kumar Saha Date: Mon, 15 Jun 2026 12:07:25 +0600 Subject: [PATCH 17/19] Add newlines after
Signed-off-by: Arnob Kumar Saha --- docs/platform/selfhost-setup/README.md | 6 ++++++ .../selfhost-setup/install/aws-marketplace.md | 15 +++++++++++++++ .../selfhost-setup/install/azure-marketplace.md | 6 ++++++ .../platform/selfhost-setup/install/cloud-demo.md | 1 + .../selfhost-setup/install/common-config.md | 7 +++++++ .../selfhost-setup/install/onprem-demo.md | 1 + .../selfhost-setup/install/openshift-cluster.md | 2 ++ .../install/selfhosted-production.md | 2 ++ 8 files changed, 40 insertions(+) diff --git a/docs/platform/selfhost-setup/README.md b/docs/platform/selfhost-setup/README.md index f71bcf2..a894c5e 100644 --- a/docs/platform/selfhost-setup/README.md +++ b/docs/platform/selfhost-setup/README.md @@ -21,11 +21,17 @@ Navigate to [KubeDB Platform Self-Hosted](https://appscode.com/selfhost). Here y ![Installer Home](images/installer-home.png)
+
+ Click on the `Create New Installer` button to get started. You can either choose deployment type `Self Hosted Demo` or `Self Hosted Production`. Provide the required data and click `Done` button to generate the installer. Upon generation of the installer, you will get the documentation how to host KubeDB Platform Server on your own.
+
+ To get detailed documentation on `Self Hosted Demo` installer, head over to [Demo Deployment](install/selfhosted-demo.md).
+
+ To get detailed documentation on `Self Hosted Production` installer, head over to [Production Deployment](install/selfhosted-production.md). diff --git a/docs/platform/selfhost-setup/install/aws-marketplace.md b/docs/platform/selfhost-setup/install/aws-marketplace.md index ef5b75f..b0f158c 100644 --- a/docs/platform/selfhost-setup/install/aws-marketplace.md +++ b/docs/platform/selfhost-setup/install/aws-marketplace.md @@ -370,11 +370,13 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen ```
+ ![Policy 1](../../images/policy-1.png) * Give the policy the name **AWSMarketplacePolicyForCloudFormation** and click **Create Policy**.
+ ![Policy 2](../../images/policy-2.png) @@ -385,12 +387,15 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen * Select **Trusted entity** type: `AWS service`. * Select **Use case**: `CloudFormation` and click **Next**.
+ ![Policy 3](../../images/policy-3.png) * Search for and select the **AWSMarketplacePolicyForCloudFormation** policy you just created, then click **Next**.
+ ![Policy 4](../../images/policy-4.png) * Name the role **AWSMarketplaceMeteringRoleForCloudFormation** and click **Create role**.
+ ![Policy 5](../../images/policy-5.png) @@ -398,6 +403,7 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen * Copy the **Role ARN** of the role you just created: `arn:aws:iam::xxxxxxxx:role/AWSMarketplaceMeteringRoleForCloudFormation`.
+ ![Policy 7](../../images/policy-7.png) @@ -424,6 +430,7 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen ```
+ ![Policy 8](../../images/policy-8.png) @@ -433,6 +440,7 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen * Provide a name for this policy (e.g., **AllowPassingMeterUsageRoleToCloudFormation**) and click **Create policy**.
+ ![Policy 9](../../images/policy-9.png) @@ -444,6 +452,7 @@ The expiry time for this installer is 2 hours. You will find in detail deploymen * Select the **AllowPassingMeterUsageRoleToCloudFormation** policy you just created to attach it.
+ ![Policy 10](../../images/policy-10.png) Now follow the steps to configure the stack @@ -455,6 +464,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Click on Continue To Configuration.
+ ![Aws Step 1](../../images/awsStep1.png) ### Step 2: Configuration @@ -462,6 +472,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Select the latest software version, and region for the Application and click on **Continue to Launch.**
+ ![Aws Step 2](../../images/awsStep2.png) ### Step 3: Create stack @@ -470,6 +481,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Keep the default selected template and click on **Next.**
+ ![Aws Step 3](../../images/awsStep3.png) ### Step 4: Specify stack details @@ -482,6 +494,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Click **Next** and you will be forwarded to the **review and create page.**
+ ![Aws Step 4](../../images/awsStep4.png) ### Step 5: Attach role to CloudFormation (Optional) @@ -490,6 +503,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * When applying the cloudformation template (CFT), attach **AWSMarketplaceMeteringRoleForCloudFormation** role to the template. This way the CFT will have all the necessary permission to deploy the resources.
+ ![Aws Step 5](../../images/awsStep5.png) ### Step 6: Review & Deployment @@ -499,6 +513,7 @@ and subscribe to **AppsCode Cloud w/Usage Billing** product. * Once the Cloudformation is created it will take **5-10min** to spin up the application.
+ ![Aws Step 7](../../images/awsStep7.png) ### 10. Explore the Deployed Platform diff --git a/docs/platform/selfhost-setup/install/azure-marketplace.md b/docs/platform/selfhost-setup/install/azure-marketplace.md index 2addc6f..748067f 100644 --- a/docs/platform/selfhost-setup/install/azure-marketplace.md +++ b/docs/platform/selfhost-setup/install/azure-marketplace.md @@ -85,6 +85,7 @@ See [Monitoring](common-config.md#monitoring) in the Common Configuration guide * Put Login and Logout URL
+ ![Domain Whitelisting](../../images/domain-whitelisting.png) ### 8. Self Management @@ -105,18 +106,21 @@ Click the "Deploy" button to submit your information. KubeDB Platform will gener Go to Azure Marketplace and select AppsCode Cloud w/ Usage Billing application. [AppsCode Cloud w/ Usage Billing from Marketplace](https://portal.azure.com/#create/appscode.ace_paygace-payg)
+ ![Azure Step 1](../../images/azureStep1.png) #### Step 2: Basic Information Provide basic information for the Azure application. Put your resource group and application name.
+ ![Azure Step 2](../../images/azureStep2.png) #### Step 3: Select VM Select a virtual machine for the Installer with at least 4 core CPU and 16GB of RAM.
+ ![Azure Step 3](../../images/azureStep3.png) #### Step 4: Authentication Type @@ -124,12 +128,14 @@ By default Username user will be created to your Installer VM. You can use one of the Password or SSH Key Pair to authenticate into the VM.
+ ![Azure Step 4](../../images/azureStep4.png) #### Step 5: Installer Information Provide the URL link you found from the instruction in the Installer Url field
+ ![Azure Step 5](../../images/azureStep5.png) You can monitor the deployment progress through the **Managed Resource Group's** overview page and the **Activity Log**. Once the deployment is complete, the necessary resources will be provisioned within that managed resource group. diff --git a/docs/platform/selfhost-setup/install/cloud-demo.md b/docs/platform/selfhost-setup/install/cloud-demo.md index 83eec88..d5afc00 100644 --- a/docs/platform/selfhost-setup/install/cloud-demo.md +++ b/docs/platform/selfhost-setup/install/cloud-demo.md @@ -80,6 +80,7 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process.
+ ![Ace Dashboard](../../images/ace-dashboard.png) ## Get Support diff --git a/docs/platform/selfhost-setup/install/common-config.md b/docs/platform/selfhost-setup/install/common-config.md index db1f38b..a51067b 100644 --- a/docs/platform/selfhost-setup/install/common-config.md +++ b/docs/platform/selfhost-setup/install/common-config.md @@ -48,6 +48,7 @@ Use the **Monitoring** section to configure Alertmanager notifications for platf * **Send Resolved:** Sends a follow-up notification when an alert returns to a healthy state.
+ ![Monitoring Alertmanager](../../images/monitoring-alertmanager.png) > **Tip:** For Google Chat, a supported workaround is to generate a space email address in Google Chat settings and use that address in the **To** field. @@ -79,6 +80,7 @@ Configure NATS, which is used as the internal messaging system for the platform. **Resources:** Configure CPU Requests, CPU Limits, Memory Request and Memory Limit
+ ![Nats](../../images/nats.png) ## Branding & UI Customization @@ -93,6 +95,7 @@ Administrators can globally re-brand the KubeDB Platform interface to match corp * **App Tag:** Toggle **"Show App Tag"** to display or hide the version/tagging info in the UI.
+ ![Branding](../../images/branding.png) @@ -117,6 +120,7 @@ These credentials define the primary super-user and the initial organizational s - **Initial Organization Name:** You can choose what will be the initial organization name for your account
+ ![Admin Setting](../../images/admin-setting.png) ## Additional configuration for EKS cluster @@ -148,6 +152,7 @@ aws ec2 describe-subnets --filters "Name=vpc-id,Values=$(aws eks describe-cluste * Put Login and Logout URL for your app
+ ![Domain Whitelisting](../../images/domain-whitelisting.png) ## Ingress & Gateway @@ -157,6 +162,7 @@ Configure how the application is exposed to the internet or your internal networ * **Ingress & Gateway:** Enable either the **Gateway API** or standard **Ingress**.
+ ![Ingress Gateway](../../images/ingress-gateway.png) ## Self Management @@ -164,4 +170,5 @@ Configure how the application is exposed to the internet or your internal networ In this section you can enable or disable features.
+ ![Features](../../images/features.png) diff --git a/docs/platform/selfhost-setup/install/onprem-demo.md b/docs/platform/selfhost-setup/install/onprem-demo.md index e3df0cb..d4304ad 100644 --- a/docs/platform/selfhost-setup/install/onprem-demo.md +++ b/docs/platform/selfhost-setup/install/onprem-demo.md @@ -83,6 +83,7 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y Once deployed, access the KubeDB Platform using the specified domain. Log in with the admin account credentials provided during the creation process.
+ ![Ace Dashboard](../../images/ace-dashboard.png) ## Get Support diff --git a/docs/platform/selfhost-setup/install/openshift-cluster.md b/docs/platform/selfhost-setup/install/openshift-cluster.md index 819d5f3..39b7a98 100644 --- a/docs/platform/selfhost-setup/install/openshift-cluster.md +++ b/docs/platform/selfhost-setup/install/openshift-cluster.md @@ -99,6 +99,7 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y 4. **Run the remaining install steps.** Continue with the rest of the generated instructions (flux install, `helm upgrade`, and the ACE install) using the reconfigured values.
+ ![Ip Reconfigure Openshift](../../images/ip-reconfigure-openshift.png) ### 6. Explore the Deployed Platform @@ -106,6 +107,7 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y Once deployed, access the **KubeDB Platform** using the configured IP (IP mode) or domain (DNS mode). Log in with the admin account credentials provided during the creation process.
+ ![Ace Dashboard](../../images/ace-dashboard.png) ## Notes diff --git a/docs/platform/selfhost-setup/install/selfhosted-production.md b/docs/platform/selfhost-setup/install/selfhosted-production.md index 0b256fe..3c10521 100644 --- a/docs/platform/selfhost-setup/install/selfhosted-production.md +++ b/docs/platform/selfhost-setup/install/selfhosted-production.md @@ -50,6 +50,7 @@ Before beginning the installation, identify your target infrastructure and clust * **Cluster Type:** Determine if you are installing on **AWS EKS Cluster** or **Red Hat OpenShift Cluster**. For openshift cluster toggle Red Hat OpenShift cluster and give Kube API Server endpoint. See the [Deploying KubeDB Platform in OpenShift Cluster](openshift-cluster.md) guide. * **Credential-Less Mode:** Enable this if you are using IAM roles for service accounts (IRSA) to avoid manual secret management.
+ ![Selfhost Deployment Option](../../images/selfhost-deployment-option.png) ### Additional configuration for EKS cluster @@ -248,4 +249,5 @@ Follow the documentation provided by AppsCode to deploy the KubeDB Platform on y Once deployed, access the **KubeDB Platform** using the specified domain. Log in with the admin account credentials provided during the creation process.After the login process you will see the **KubeDB Platform dashboard** user interface
+ ![Ace Dashboard](../../images/ace-dashboard.png) From 802fafdd99fc1f3de190512b1ea8c6545ba825d8 Mon Sep 17 00:00:00 2001 From: lgtm <1gtm@users.noreply.github.com> Date: Mon, 22 Jun 2026 07:34:27 +0530 Subject: [PATCH 18/19] Prepare for release v2026.6.19 (#129) ProductLine: ACE Release: v2026.6.19 Release-tracker: https://github.com/appscode-cloud/CHANGELOG/pull/75 Signed-off-by: 1gtm <1gtm@appscode.com> Signed-off-by: Tamal Saha --- docs/platform/CHANGELOG-v2026.6.19.md | 102 ++++++++++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 docs/platform/CHANGELOG-v2026.6.19.md diff --git a/docs/platform/CHANGELOG-v2026.6.19.md b/docs/platform/CHANGELOG-v2026.6.19.md new file mode 100644 index 0000000..3841824 --- /dev/null +++ b/docs/platform/CHANGELOG-v2026.6.19.md @@ -0,0 +1,102 @@ +--- +title: Changelog | ACE +description: Changelog +menu: + docs_{{.version}}: + identifier: changelog-ace-v2026.6.19 + name: Changelog-v2026.6.19 + parent: welcome + weight: 20260619 +product_name: ace +menu_name: docs_{{.version}} +section_menu_id: welcome +url: /docs/{{.version}}/welcome/changelog-v2026.6.19/ +aliases: + - /docs/{{.version}}/CHANGELOG-v2026.6.19/ +--- + +# ACE v2026.6.19 (2026-06-21) + + +## [appscode-cloud/b3](https://github.com/appscode-cloud/b3) + +### [v2026.6.19](https://github.com/appscode-cloud/b3/releases/tag/v2026.6.19) + + + + +## [appscode-cloud/installer](https://github.com/appscode-cloud/installer) + +### [v2026.6.19](https://github.com/appscode-cloud/installer/releases/tag/v2026.6.19) + + + + +## [appscode-cloud/ui-wizards](https://github.com/appscode-cloud/ui-wizards) + +### [v0.35.0](https://github.com/appscode-cloud/ui-wizards/releases/tag/v0.35.0) + +- [0a9c4c10](https://github.com/appscode-cloud/ui-wizards/commit/0a9c4c104) Prepare for release v0.35.0 (#1062) + + + +## [appscode/website](https://github.com/appscode/website) + +### [v2026.6.19](https://github.com/appscode/website/releases/tag/v2026.6.19) + +- [01f7f216](https://github.com/appscode/website/commit/01f7f216) Prepare for release v2026.6.19 (#215) +- [f184b71b](https://github.com/appscode/website/commit/f184b71b) Pin Node to 22.22.3 to fix firebase preview deploy auth (#216) + + + +## [kmodules/image-packer](https://github.com/kmodules/image-packer) + +### [v2026.6.19](https://github.com/kmodules/image-packer/releases/tag/v2026.6.19) + +- [d6091139](https://github.com/kmodules/image-packer/commit/d6091139) Prepare for release v2026.6.19 (#55) + + + +## [kmodules/resource-metadata](https://github.com/kmodules/resource-metadata) + +### [v0.47.0](https://github.com/kmodules/resource-metadata/releases/tag/v0.47.0) + +- [fcd907ae](https://github.com/kmodules/resource-metadata/commit/fcd907ae6) Prepare for release v0.47.0 (#650) +- [85c67bcb](https://github.com/kmodules/resource-metadata/commit/85c67bcb0) Update to KubeDB and KubeStash v2026.6.19 +- [e86f70f4](https://github.com/kmodules/resource-metadata/commit/e86f70f4c) Resync kubedb & kubestash CRDs +- [776d5e81](https://github.com/kmodules/resource-metadata/commit/776d5e816) Update KubeDB and KubeStash for v2026.6.18-rc.2 +- [25abe419](https://github.com/kmodules/resource-metadata/commit/25abe4197) Sync up missing editors +- [a7af825c](https://github.com/kmodules/resource-metadata/commit/a7af825c9) Update kubedb & catalog CRDs +- [4ac7c73a](https://github.com/kmodules/resource-metadata/commit/4ac7c73ae) Add `observability-cluster` clusterprofile (#646) +- [05ae8ec7](https://github.com/kmodules/resource-metadata/commit/05ae8ec76) Fix documentdb & import kubedb crds (#648) +- [791189ee](https://github.com/kmodules/resource-metadata/commit/791189ee6) Add documentdb in menu +- [45589858](https://github.com/kmodules/resource-metadata/commit/455898580) Remove FerretDB support (#647) + + + +## [kubeops/installer](https://github.com/kubeops/installer) + +### [v2026.6.19](https://github.com/kubeops/installer/releases/tag/v2026.6.19) + +- [ed4648dd](https://github.com/kubeops/installer/commit/ed4648dd) Prepare for release v2026.6.19 (#490) + + + +## [kubeops/ui-server](https://github.com/kubeops/ui-server) + +### [v0.5.0](https://github.com/kubeops/ui-server/releases/tag/v0.5.0) + + + + +## [kubepack/lib-app](https://github.com/kubepack/lib-app) + +### [v0.23.0](https://github.com/kubepack/lib-app/releases/tag/v0.23.0) + +- [c12c4ce7](https://github.com/kubepack/lib-app/commit/c12c4ce7b) Prepare for release v0.23.0 (#172) +- [6840206e](https://github.com/kubepack/lib-app/commit/6840206e0) Update vulnerable dependencies (#171) +- [6dcb8a92](https://github.com/kubepack/lib-app/commit/6dcb8a924) Remove FerretDB support (#169) + + + + From e228ec8a6afcefd75ede4b06338af90e43a313b8 Mon Sep 17 00:00:00 2001 From: Arnob Kumar Saha Date: Mon, 29 Jun 2026 10:48:34 +0600 Subject: [PATCH 19/19] Add Offline Platform install guide (#130) Signed-off-by: Arnob Kumar Saha --- .../selfhost-setup/images/acaas-chart.png | Bin 0 -> 333735 bytes .../selfhost-setup/images/offline-toggle.png | Bin 0 -> 117801 bytes .../selfhost-setup/install/offline.md | 102 ++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 docs/platform/selfhost-setup/images/acaas-chart.png create mode 100644 docs/platform/selfhost-setup/images/offline-toggle.png create mode 100644 docs/platform/selfhost-setup/install/offline.md diff --git a/docs/platform/selfhost-setup/images/acaas-chart.png b/docs/platform/selfhost-setup/images/acaas-chart.png new file mode 100644 index 0000000000000000000000000000000000000000..ef1ef858c9b69bcc9bc6107e5a6dcf9273a56a2e GIT binary patch literal 333735 zcmdqIby%Ctwl+>%C{SEl+=9D9fB-E7FHQ>-w^B-R_u`>=f#B}NT}pA6P^7p+2vUj! zDgI0M*=O%_{l4>l*M9%~a$QfJd1TFG)~uOz-)mMPG}ILEo=`qPLqo$;QUq(Ep<#2N zp*@zudW^awM-gO$hK8$ZBP*++Br8j=;q36%=7SX)nqowfE~cLL(6cN9Ee3Qf@N?xI zRl<1U=gL^zr!n*#4A_LqQP?l~Vz|Br*^&{J?{LUX{CFDI7uG8BtZ#)3hhw<4na3Tj zij_0ce)8?Iy#=`%0K0L4wYVH+KKQuOm#plfsfu>ObXhxR8Zfi9Mfz-)f*y^r6Af6s zhO?!m=IRRkXw`h{4(KYU&rthJwgd*AR5Th93bnxateu1pI(!A3S(rvZkRz7!gm zeQV4bu9D=*-77AzL*FZ`oKf0cp`20KO@?W=VbMY;{qSQs3^5|`;QLN6sO)(hw%ZQh zn>8k)Pt1hZFMcK@i^^gh10Z%eco_+m)7HfSg$b9UW2Z!_QqnHyW#$xITWB?gX(QRl zfTGQSwV+{!yPR6^+nZ7R{R9Y)J3JZKpV%A^ z!Uz|0GLsc44b@*7G^0udyrzi6=oN@(nlmYkO|l*gG7tZ`f3nq6V=++M+cwDH%P!3+ z1y17p8UImwM>+~)pF|0W-6IaT+&Ws<3(5QV{MApOK9dqe`?xtvXjS^P@Uy0bZFz$E z&AYrMQ)Y+9PHk=U_MRVJNEv2u__cx4=xC}=NUBD+!{y6vx-J48J24)7#2~FM3Z|f^ zf=GC$d#`7HVZ}NM#I<}#Xlx5P08ZOvLu_rdYH5GfAxD zm$FBL;Ansxugxs$a(Y<~U#X$Dj>b?UJKF^DbDX=aZ zW$r2e%x~^9xgsuo7-2A^vH8KTV4wB%qdm+rL0G?J*ye9@b+G6H8Qdx zc`u3wtvUYRHT)+#U!X!%aQw@P(I>Wv=c|C< zd)RpMni*_tR=9n!=7Qb@VVPn3kWT`$CI|(%?UiDC3!`K{0^y(J$MB&?-oSj-46}M_ z&gm!D%qQUo&)i9E`xk0@ltHx{w0M=x>+|NAw?l#A`Lm28)LQwcl05$(_G`>aHn!LzD^LgsYJ;GpHBbp=x@55j&OhkJV9k^ zB8HO7YhpW(s=6@IUnpYXnbBWCu+1ap7-3jc$1fhnJ2E{}lAnxw2@Yb5^BN>Bz}1h| z0W8M7*;3ddbfy-IbOngUUn>%vu%6KNX}IZN3d>Y{KW3wX=a{_%i9a0!Tjzzo<8P&| zcwRQK{EpF^S~AvH?(28NJL$)K!ch^a=J@1Po93E&PoRNA)fjs0uVY?W;OXJ`!jfxv z%E^4fNt_EPLr&b=D z%rN!vlVN;i9Qeb+^pn6Zat%e^+MA{G(|yxV-ak4cJ;OgsN=r*iO$&b$m8NGG|0Z-n zszLDm#gCOz+p@({mmk_cp6-qO@F=Cz?kK(cB%iN8ar2J7-gm+I4fg^10qsG>W7!_f z;9`bpy%NpBi4rHJO^i&LrUI9psh!YM=c@--7~WMZa#P9)Wka)uIr@cOipbWt9nWNK zgI*`T&YBUZ5U;3vqu!vj@OmL|LFT~x;9!BZo=$)-Oe}bWkPph|&ZoxT>IM;?5eH>{ z$P~zw6sHmQYh7sNX^m*Db1QQt*mvjWFM66VFltq4`peqbqMgn{C`?dZ=7Sfv^HXHgCqI_PGvq-U+Cp54q zsAko;>QlewDGPG@{KNYFJ4*8}e9Lba%&xjd7r4602R~HJ8@YTDTLks^R(Pd*Wrs${ zh4g_Uy(0~vq$-V8P`LNV6x5--yyA0td&B!$@AnnfV|6_Bl}+syvUSG|sW#enE`88< zBaLG<%a%S9_zf-%Bei9qI_~p~JZ9h2jh2?Yt4k=;uAIUzUL>h!4N+rD`!2AqZY^OQ=#qp?il~oxK|-eX zA?x>K--_H;?L0h;vq!l5%wSezR^9%Wy+G6BCRz`i3!#hXU$gV#Ki{1ToKp}4g?9|d z#J-O8$gnM@@z%JZQycNOonq^tkV5Z_sKbMijgJg>SPeOU z5_v_wj?A+3v@VBvrtN07u+*`Rh?arMbVr}+elmF*Zs{=OpFomS$7xM3%I@JnE5^%x z7zZ}^%qS+-aSud2oO6i$Bh|}lrCSBUDj?}AM)2YVsy0;O+T(Z$1eA>dn0r? zGKlO4R}l|P|Hd|6dtxuI1Iom0!!E*MtaEdezUHu}BBX4|Jlk=0a91LBb7IlhlXv-e06`6&%7~ezFJR% z2uIuM+p5goHP~OZ*1>t;1~b~ToHHJ;LUe^3s^_Ymdj^Kfhs$2wz48&Iv^Q)$9%ETA zQc1rR5&giwpw$S!eSJJbwHVYS{Mz7EvIDC<@7$fI!bZ%Lbag<Z3h|z>McNoU^YK(hu`nLSF`^GBK0n*=qrP-jmJnIz8AKu5HI)f>?7KX-(Y;C zfD?O8mq5EOndNn3ws_jO$jXx4>@2WtIZ#@yZS9YJ1@EI?VP>Ig3B7*+@7jhK`$M zAL4G|;VNDV+^xMvdo-M{`WP+X*TaucT(n17RHfQFh@P&X5?FmO)(va9xGes&W*3`} zK36Hm&0kyaJKJf{^j`RRbD&KKp>0T_i92m5(nyWqWl1E3VvRpGAdxCW6b1)q>sU`# z-Ow&SEc}8)zI=z{KM_oh&AfPx;uq)^O0pWbcxVsoA8j6@u0L7nDZN!yMME(VG%Pgq z2b5?SsL}(}A@zXjUuF3RY-o@EasMG2TDT1w`aj=ML!JM8;!wvQng2RJ`W%LaiMk?2 z9iBN4|NCuhj+{sTU4ATudWQBwTUJR4b=J0Uwz9H!dFSBjk*KfV!V6;yaEE;s5iJ>yzE`gJh|;%82_u1|E>pY#U`ux}LwDPq1cT4sz|Lhj3gS>y9@bdHU@&2oBlql%W zU2zQ?Ppc35U>iG>&QNVg@e7LqLH`i=KOX(N$^Rj$_is@FK_QXN zI@qBab(Q+}fc;bWe?I)DAc*%*-~Wd${!7vSxQo)X)DsZzzeY{!NmOSmK58JTZNTa} zs58pU{(K(Mp}yGu>x?Qtw0m7~P}7Ts_8d(K{6fd`!Ou+0Hl|mpP2;$-Z?PD~6hG(C z@9Ww~$m(IdXp(k4O)6;KxQa*-#M=8p{+jzgl=x6JGWhCP)2F|mB78k_K{Znp?rzXt*@ofELr-3i9qX;?R zsmlTPw>Gd0F?s#r+~3Ck$z1=pmG4A8H^|l63e$_YPy2fYOCRWu9mSyouz-f73){ZF zT{sL}QvZ96r?jEB5_4c=r3zXXp_I_C@HZ9k0NYhAhc%a243;G+vFx$xXJlm$_z#!6 zf2n|QN57<3?Nd@tj?&*-A(n}ER7$|xJdb9%&8PmRtRGI&bB}S!ivra6D{B5dt;Ic8 zc=!lAiIAP)_2l1NJ+WN@d~q5PQHar0?fXMl!j6Q0so_6z7A&HHfuYK4U-v7&PNEE- zMO10rKb5)q$7_Q^D*I-Ju}le%9Yl54W2%BnB%)a2SF^>AmwFs z$Pik#E>sey@iYmsPgDKYB?w8hCR)Z=HQLMb`1V&viT1 z8lU?R#F(K~oZ+neZ8y!fQt2?@{u)_DcYfjEv$!~UzUW{=cQI!Xt2%2Ea7%2ZXIs%Q zNu)p>KV#&vTz_*iGP`QxK5w;~kbPr$+nx@B4!S=4@Owu=I;}`OJ8MUK^(ajAFSm1(T!s_bcPkwHY-Q?OCzUyWT(0ietG%RS~?wSVBhklm)5Op zo$rigQu1mdR&CM#t6l5u`Qns=KQdj&WqZ_pXjv)-3v|1yu8v9TX=;>LH!daNhfH7n z+3LF77_N3ukscf^ci-6kgmc=w-#&)UMvvpV{rXpAY;+ZbobLYjK=CVGBjMZQ*npSy z-|Xe$f}P)UX*3dPQUGA~xD)rDL|I6x&^xPdXESAVU0-g!m7)(!Tw2 ztD+kALRct@J;R5iz5UCz_$AguSt5=X-6hH-c~Ymo#9x2bs>nnI-CoUhs4396>5O}E zRnWYyq8?klnrV6y-m&#rW%7FEqJ0MOV)bVA{?=qnZP8h)Zzsc? zQ$wuTAfAywS^`zn4s$eY-o2{w{-H7A>C4Qv;JF#Cu;q35?V_lu4bIKjI1zr>Fl)@% zc+3!@d}>E`IjFFA=df2$#u%f*P-8++Syk++--~k z0-KY3x^B9jdMj~Of>+j)GLenK0w}~D?@e}^n2gzBtKdoo=H_2PB z_R2^Ag{V2nTd|{(51&wPp@sQ50yl0Lv~Wop#r^~i7; z(NyBjL=VPFYPBKAZ)mcId2@v*V=ag-yH45TuPRS5=>WU|G68^>?gHCNSi%t^GnS}P zNOWk&n=l1;j5djW>p1SGn&KazuItsss(d?|qUm7WX4vewPHYoa6UbIN%8(l1CeTkx zTb=T=NMkpb^7%L4Zjvkwhu=#GsiskIzwZvNFYEsfh61f3I}?W~nwpK`eIn3$NRBR+ zT-3joFG;9mWljbg3uGk@P>cwWOQV*Y$77WTcU}cVSz*82 zOXC_T@PGHc1297Eyr=VNU(vxarGLNJbmq^8^P3V4_0tsrwT(%2D+mEC3X%m<~ zH=>p-@#S#on|1HqWK9o&u4V=lME}XtH@A~}(<`2x@^W*+dsr$=uf&){o@yiXe zj%L_l7?r)^q2Hko6%r<=IO+j;tn((TD5?a!K;yB*Z&y3SvYX)oD;)@RzCS+k`p#dN zputXN>D)d_6@mU6A${LsoE1@+ruU4iJi@{ku|LVo2hoW5?D3w!%i#U&N~_p)4I#$_ zU7y}^DJq1e(qd=W;1LC{Sv@ThjaH1Q_C08rt!(0Vuuu|!`fhd+Ksh&oT!P^Zk?w+A zYG*IRZz4p-e8UMSg!JgbM6*P-|otqT>Yg>B^M9O#ZF>N9qGWky^6ZVO?Jzj zY{mpBKhQPyf}cjH`{t>+Au>H!dU;e9=x%jB*WoFQo60(z~BHE6EqSR#0xR9>A92HlrWGERp`9 zIMe+-Hvav2Q%5wUn{?M@qO+Exnxa32I4`WIaP{Qwe!;e?LJaD+43jv_xI;?c3sx6- zeA_qL-A;F~_d6f^P0v@NQ97mXI<+ExK(`tls=0jw@R& zo5+&a0`IT20yBKFa<-8O_}xQy!epbDA#eG{m;SRBSC67jv0h%IqR8GrxNOO3H(5KM z*B6Yb<9j}vwY(w5+CwP+X%xnuy*{j$3h3KqF_d# zoqiU;T8<`&6^_`w@Ir3Gzc#FB;}3_!&#IH?eS)X<{`i1>??}dy#n$8LVku!7=RpQH zHBdAitbl9(iu)|g8R;ta@&w5~1e{#Hjte{54>668YG80|@^L~-NyR%snlZ*9l zz?1o8=c$+-mBD-?3Cr@_%83B^Wn1x@cY?kO1~!z7PEiWk6H2`b%WI(BuMVY9y!=>u zj}IsLQgJ3+6PGCb_RaV_x|UEZ#0AxXf^5CCcqh)Q1r!o*y6Tw-QJ%mAtPNe$=6wwD z6ugfS5U^e&rxx6!gzsB!4K%#<;;4KuGB*JmvKHERf4OeBL!dt#am+E^k)RO)cWvG# zpE%ozO#gX*+i^cjDXlJXQ15zoi4bKjYl2&~{A%6bs|D9Xn_)*`c6t)q`&AwO-bmx#sZAeSEhhWCR)FRyXlKlyTnK9&s?yh;Es#|dtxr9K-TtHyEcc~!Mbwo z7V^C^liT-KL+bvuy}xdt5pd5%xi4?bi)lsq6y|-AWBbTLhXRugYUFN+t{V6rI1rwz{QaRqqjKDlDd;z|k@7?rWDRK~a0q2^iT&W|HAh zxw>geE)+YM2=8z-cL^2|wZC&tI7Kaa>ic1Scan!rTC`5RL=A#`_dNF09aY{>s3tTe zdMHjlC%0KfSR~N0KD&02ZOC*IyeP?!d5_%zpn2&81S|m0=PdTemRwovY=9j=SVGom z!4(UtzFDGT7WMQC3m`+YO_U&IKd|0{J$f*fs*mgGX|#hcqez3Xn24Ik2h@zCVp!{< z2+l|I*%r*!pMBcvOwB6_t+?#Ol&bC(2HhO>kc>Pr%f34;rb-5GUbUST@>XOHd1V=z zP*ZJ9Y&FN$WBHk{+$usAGIkf^(I(z|W`c@N%HIRJAdqcp6c?*oEbWDVYJt9z`Q?tGT zmSTR1b5_=-u9uRVy*}^V@aIv%M zatYx2Zih-Zp91x8^@>K>(cP?JPN70y=>ftUlGKb>>JkVpiM1PWN-zVh z*l{n({>9BupE*RA5FTd@JY!_oAOTcOI5Y?@U~l5X=9b>ECL6iyOFn}yj$GtNvjeLl z9DfM$enoM$z2l6Q2VsnN)jjxBPLMX^HWV+kXb7~YCmhpS87*FLVfvevd zUXv}Z5)e%yUT&#o`84DmmTmW7xYOtRdOBEW4VP%MfO~vVecPdBDJS%4)TMku;kXqx z-vYyCXCNjmFb}sN-@!C%t}?&^hJ-e?Sw*zXC)XUH%s~}$v_Nr7JX>FyHPue!Yv{Qi zs`66`1=M}jf$JeNm-O$WFzFW>!i^WGFev5kMFv4O*lYy$z|u65O5KQ+Y6ri4gWYSC z{|;US9R&?aqklf_Iq2QQV)t0IYw|8O{65Xi3U(On;NM=vDq5hJ5XU8!W8zU6^zk z_~JV`GfrtMjtMEQs%pg4kG)QVi*B8M!PN&uA~XquLS&2B2^!Z+IBAv-Cbt)5OF|xz zDLe;H4o~%7Pqp8`UA^JWqugX12dJib;muG$&acfazwL zD~TY<$)vDg0@jzmnt7&Q0EQJy>55L+u+X^ET z%=)B2IwZhPpJqEVnLGl~Jk(|E!U5)>Os)Oo5z{*OyBsRd&NrYdo%lih=b zQ9;I~&RV4p&%8F~@?gT){QyhqRay5nZgSyq$~qpVCbSmqhP%sC?m4m>%4eWWX+cc3dkiDQ zRBgb{zME95bLK|=blCw%!E{{fj)zP-88>XPo=Y{4?q_&)a{qp zqw~}J${%SvEi_Or=yOEi$4?Li+N2m)>>DP^yp9tIX_fyyU~XDVLjFY~f+`h$qJR5Pewqm1-9E|~6~t(G zlu*nckwut0-_q5Bg6^>p$RrcKjLtDK`@StkDr7T(Dti5SS74|Ho5?dva<8?e(PYKn zyXpaNB=VahR71!!4vCxqSv$DK;Dn8BKi}AdC#>8LALqFrfvxW>IW*aw6=-8ZK_}?u zxL|`N9V>kyn6y2m3rTAFb&JLm5zsBw!1K0FJogN2E}U8L=e`zie! zNbDA(00KDC=v6-2l$dn?g#Yxz$t)p9p9n0pwR@@sh}T@X-nl6+F1mt5{(M~mz5^CG zy(2t+%mWPB+;wRWuzu>rN|xeE%)tPPuzE2^hTy-y*Ov=hU)Z3A*b=y8J>-erS14eK zx*9v~b{-%;Am+!L%|6iz$ok#ODnBXy9&19j`<(}t)W)uPZ@8hs9=LIKCI$%ZVVDaHV@ZHtRYwjg)n_^eX<|B+ zC%G%1ZC#yWCYSk+*&0v1;R*77M)Ytl+#UB(NRpvS24X_KMXf$}$yq`D18XfV^^P_n z#bom1a6)VF8{_bJ1!=B)+*4tqnlQUl7e0C|e37nJ-n z8P)UDLoAv|1&C}ycAlDnA79%Et7#6HeKMuL;s?Zj`$kLDGIK%;mbpO4^J1A`N`S>*M$`XFPX2(p{OUM~igya?4zQ zLEs?d63;@J7MqPsxBuAlK&a?Qa$ppht8TRv#P6pRg(&Dt3sE*4fw0L?qVs_#^BsEE zqI)E^tyL{>cZX}~^+L(~9#}=#D!(aD(AW(mEv;M}B_U!WlHNYPWI;l1BW{;Yy^RHH7VyD#HZEPnSNJpQ#aXN#pmzu!rS^t3<9=(}5lN?IJz0 zAj9lZifofeHB@}1%*pPOh8T&v_eh55%Cy`-tzhi>$X!ORQn-VWZ_io^!8AMGxg)wNxX$<#)*=lw)kq`xXDJOA*V~rA8-Kr0s>EVx$veMf#SYrk}iBk@VE^cv(1~@-lY*|m2P;b$U>|wzjz{GD} zQmbr_Rg{A)ZIm8>REsZKG_d1waC?Zx{FlJ23#u8c)WF$l`%q<|W=j@4VaKF0PpI!i z2y3F5f@Vgkq?crE+GTD7bTgUUPWtsn6|he>XEH{GXN@gW9f+N82uXFU+?L;ZOub6J z8oCxSe)*Xh#5^vHhag|wbR7z%ntl{R2aSx9DIr}wPE){QTeK<|K|=f-@e%U94@0oX z0Y%zsVufeI_-~-TIGf@KKlDYSmaUPTHToVU8mIz^?VCI{kF~Yx7ih%t9WwrU37#yI z$Db@X(G3c7g5g+<9J<%*2=${Olo(&Q9t>@5#MRM~GvpQ31VN zJXq(F<7AzoK2Wq2vnFbgZ|_C>4VHOw52rPMP$(aD5mr#Q*}(avO*qgYR`R^Wqbpa% zGLaBo6Tgp%AmmIsXj!QlkcRm0F!C+%TD$?eGI9ct-?Ms@2W%*?E6Nc+!=DQRvXah3 zJ=mt`wh^Q4rx!r$8h1nn4*SWK>T>bwr`AB(`1%%pDL`w~T?e}=k7Xn?oZOkTaj!=pDrmmloCZn^f2R{D1n-fd!KI*&|MXL`Ma z&?Bw7$cuN9o8PwZE8uA=i_M5)Cz*B|3RT+87lT(0LX?kh-yLvESNUHzz1UXLgq=Kn zp^O#g6Hycb%oI@z2+LuPUFkc_E_(Nd+DAyOU_DKPtfrP`nyO5C`m3IMMH>u@p2*sC zdNajgn(C7@+>q;DJoYD;RJ^}?^5nR{=CY{`2HjLOR@-*w$K;Idvfh3*T2<|?DZJ17 z^`__dvv_PV-UV+k*(WYSdc=g)NF%?Z-%pPixp{FER$bKaF#izYCE&6_m?Ipagsh3P zI3j!;&y8FqzQG?4V1!y|tpt1?$U*A*5AX+!UOS$Qao-zF*r)brmGqu%Um*=7n+&TJ zsbHbKUgE2N1#SfXfE(;MFP-cf^lMbequ{AuE-3`%pflu`qIg2p67h-+LBfWgUWCPC zb~ELXnE_9mv6rLAQuy=npQ^vH-y`M^qS`HV>Y>FHi@~#hNasFh=0*%veDdINj9Et4 z<=Fb5HHzfgNYX^gViarZ@pP`gJtjZ}rGI}p`&1VMSMHA2eUjwJC*OBF-#Oe0z72#}VC<#P4pc;R*nm^^umDZUY6$V7^G-l~^}&H%t?`S9KQIc*J? z{OscmD#Ge663f>s1@Z4zUI({lJd3GyjvzVj5u*Wc^=neU4JLm`gI=n~E*0rZbgj|o zo)@%qxxnPlKzHSMMR)R1lXe|)0ha8BY<*TBw=^(rB6ndlf3Rwn3HJ3uC+wwzJOcXL zv~)gZ^{H=AOvZW9AFL7KPZn;M0FR#~32%`w)IB!n`MB%~6bODjGuglO-@lbklP7KPHx|UMoYIWMNGWG>(8)s|RA)%^O zRn77gSvbJ#>O|{ZBF^-%KLgpru#X=FlH^-bbj?-aY*UDAmq02%TgZDQ?I%fk?MeJ% z+aci7CtYq?tcRFSIq>oW_C2z6vQ+NGtW_=NQ28=hQY#2R(p*31gf-#kdLOI;s$AmB ztuxYN3Qeo-6MyLH%TY|{5rpdpg_N$gPa-c!g#m+G-CwkBXuaGRb%ysPHXqmln+)j_ zc*$O-`SSESBtX2A59tnxaOI}wo$ttPyuHTuiObXTdIVm7<^dce$`pcPjkgbiM{9rs zYBJ32^j33pSLKWI1HDPR1?^jQisyv`~mO_^Qn_$&1c4_ zeV~T)Db;MLZ+FqO0AAYPHfbH(0~g=^VsnIrD$oiwFUO2CCYOHqdOC}E5F-HjS|BZB zQ*@yvaBo*?q$O&KssG&A!RxUJew3a*l^Iq1Q}!sxf&*%?Q?GtUgP-Af)k5k7-}R(J zjQgOg*0`>s@;ZzpB2;(^M!2P4v+IcOm)8-CzUQ~U+n9S-3*qVYz$!Q2%_*vfHxhEV zaj?QpOn-0E-8aXy6JNS=>HxkFB6KO$C_`|`@#XUZLh%4P-MizT8P<A^^+nV4VS+eQ<%mAGBu6eQl!gzd_s;6dNC+tSAMT5Nxr@qf{Pzp=KFG;5jA9_BrH&|& zXQaRsECg71D({L7<$2PhPel|rJV+kT;?bR)7v5%{`0&%5v@sFATmkKHoI>m1;;JVh zN0NCW5Yrg-S4}pS*y#y1js80>-C^f=y@aX8sg%!j>H9PGAZz_8a!eFohq#oev{VP4 zXdrrWN35gHWzxsxnm-&ia@AAy%cHPxX(kqX?C&2;^^B`+w3FkS>OCjzf+l$!?Fiuo zoB3@<)s+BxP^_304-bP~u}GGJtL-O$;sFkmR9nXWx23%0QBV|nZIMELcjN zizKl-Tw5`*4-+qWuI?^LoH^XW5`b?L;1k#*S2KxHtMZbcoHA^UDUk$F2#=kRTD%ll zM$*K-^9#rM@!9~MC;1hG`sJiWTeoc2d<2&EDF#yVP?s4HO$T-!EkoLHej8dF6JLyarUqm{O%hHjdZb?&O;uNT6bK;zlJaLf zKIjF+n_PaYp-0 zn_)Xau`JhOs5ahAi_;2MLfvBJ*COu5rCRsVPEG{Tu1YR3z7f>B6T%|16~08MK{OBe zJ>W4doaa(As+vI0V)8!9ueHS<9(`qolcXnKw5)~4@SKf?p@pQ*X1;MvQz{}WQqeiw zrvQ=E8fK9M(S>V$jK}|#_<+i8x5--aG2Lt zRzrP`g^o;xOM1!ah+Zhz zZhB3(Ye9zjck)v#s;3zr3iKyy3CXwq!(CJu_Osu|T%ZzE!hUp|NvLy-GfN?EUryCp z#aE{5E)c0u3^<$rlm&~UyR^7*>TIM5Nasi;*)bfdr1w(S4{(dDf|hl$8+WA_Zg23ZyQMmd9!%bZDWGqzgU|a0+*pK&r-;4_!k~dX`lbeh>)3-R)RS(&u z6x(=@kL^PSr%wHN7d?Zhh+h8Evuz4MrLW>w{K*hIaIc^-K2BtV38Pc%@#yS{5}Ysy zz#@_oyu+2>eRt&nRuYbbr?Jo1|(Xj(7Goeb3Hj zfrR7I_c!8{+Ca({iq%~kH^5Qn6V6a&2Edn&pC<%2n{&%Qi3d`|T;6uCuUMjRos(o* zM%3+-q#0wMgAhm*Jgc=vt0YmnW!2tBFoPCc@~PNsWRw2GbB(|RATGk3OP74H6$K3j zt3#DlHB<9mqF4cujZJ;=;t(r!U)%V2@Obs}wx=p?)!d?B6^O?$b6M+C4*15$)TI2o zvCuVKeqxn3aMIJF3{s3!wVGGVI&-gI0^5ov0#hyp3naLAz7JVtpk|NckhoD zoKT*8hk|dY#q#JgYAtuia`kTTr69fP)$6Y?l0tbn6RF~<&+J=C60Ir&Hb=G|qeTZ% z1NEiV-!4`pYIHc|187vLwp5ss;`z-@$k&c~m5EG@Ma9pEen#d5-w|?Rs9(BK5y%v} z=TQu=sFftv(Hn`rmM5aHdx?$k6ZLyPosQB6UGUW>w9=mv>=G`87GEG->C!+^1{pG$ z&T9W*txtkbw_L52s;HTM(Iv;8naLij(^_AO*|o)A4XA{QiI+qT^>r^olzaA8*$kwS z1w}5yeWq4Mw#usqji4uQ5>mJiJJJE_@PVQH4f@|^mrcHvlT6;@7jy@b@ep(D8N)%6 zYt)o5_opTx-6E1m4d|rcM2LT2q-5(*sxD$PIwK>v8$z^lQDol#g4{8yo3xLQ$BL8Y zbqP3|wwSa>y%Aga>>hVDH%=XC;m)W7pdlzEG~+HeN(8pkG3b2B8>4;2Z98v?;tE%p zKHJDyRBBR9lmplNqN_h>r{@v7-h6;ap-1{(LpAmv+Ix1g%SVZJyhPCEh!_$}4O!A4 zJ=Umn1Q%w1v>A$&^zNY&vC^|HN3Ca+P;^ai0XO`e#0cXPr=C+(#!h9zwoIWvaxgYR z5H0+BLRq0=qwjP+RPQytNnUiZoypZ?^2}Fc@B1pXUxvOyX@j2%nYxLn^H`u)45L#0 z30FY61%2Zg)Ho^Vh#!oYsNrxj7$kH(CL)Y4@_drc{Is>f>Qzai3u4LX%UV>Q*UQ_Y zED}xTJjz6r1u6nd_yC+n&O^+0@ijNJb{GRJ_$r1U<0IkZpSC!Fa-rdcf7xzLgwd)K;D>^)CfoHFD^OCnK2wnR!MxsQn-x z+tdM;E{gbC+Kc7^xyCbR-_zh}k}J6@1L!I?k%~X}JiEuF>zh{2Sgu#%vZx5^KKd8Y zZ`Gs8o_nk^eW*MVTQwb=a@V&rRCUr``YyRz6q*qb*#oWx(pAPN8LV&yktqMxmG4L4 zg`SQe3$S#~;lP|4)jR7J#x~cC?Hh8EcZ{m?5_xo+KKvgMq?!pK2#OZNJc!k_s7YndYNX+fy0!Sh%` z@UTR>cN|i}37JEVL+`QX8Cz9%-;F2xGZHM^zJ0|sU9Cn0eoVxHR~8WIe6lbCVqfK5 zLHNC-#b9fv+Y&wukDw&oeCTx!&;bZAc3VeTjp&(2w^(r<3}k$Zy3uF-bwV&J1znG6 zms%BeXv&28TVxaH0^k%sCUf;5Iu`eai3Y5mN8_|UKQ$G0);EoQQ13$C<1fRUCtkD5 z6v3v{QAv@eU{)L)C+%V{CL5%GBeeq~uQ6t6>^BtOc`Yi#>`z9_&vk$M-6nMsg&xBA z188t^Cl8udjd?q82UtcBWMH#{(>0x`JNv)Ls_z7|ekbNwU)mVzBtvDoI0$JYp407x`8(~~3uBJ8RhT62jA0kh9Rfv-G-Z01N zL2v7eyOxmm?uolE7a`>RrW~o3f6RA9#h!pV&wg43T*qzo^ zR|USVb{5NO`_1L%f=Y6pNgsx9p15B6Q0swrH-=91{11NCjjKV%yZ<y4 z%o*P+`y>4`e&;BUgFNz@Elvxj8B%t11_UZEOE(~3w=j7IHghH0lkEsVKJ^kX4uQw? zx?3^Wi3WW{CE==dN7;h~6LXEgg&BRJWX36aG7Y*^b}wIiBm|Hyyy9^lj!nX$Q_j_D z@11_9W)Na$*u)2(U`QMpk)ip9`ZECIJY=>Q1ZS^c^CD3#NsQ&saHYj?Ko7y}2*wB_ zq^_Zb&KA29#htK;SkwauQb zn+VCR;kAQ`i6G1M`bFD0O^{CIq#vUCOGi1u?3ysctvRME3*3lRMy!dH@cO#80|Zex zz)vbGibZFb(T^yU;Mj`mdPa!WG0L!0-XyRyV%1$0np{X)B~nOdXFz*fwVaW#n#Ps= z%w@{C?Z7q4c+Vnh{GAKeqQ1>@CPAR0|}!$B@Xh$jY_k0wZ&R0;6RAr zlfYT)sR8@XSl^8##hgEhVYg1?XIv*|ul^!?nkT5U#)R(h@0a>y9lA0lNl3)*4tTb(oI^9o`HAE^*PiHgf#Rqxg7Fl-?BNz z6dr?w*IiBNXS(M^4U~rRms&0-owk}5T#>8<8q_sFj9j}YKMGSfZ4SKuku&+(K<2mI zNS(?7vGDtL79uP)8a}_qNq_@(bM@!MtEpVOGI_yBJBfl3DoOM&Ud$nh6^xUFooRu- z?^1?tAyV<1m~`Y6_0%rcTK(SOj#sQ{6aUdlPH8DM2yMtQ3ax95d&c-p;4^->&fWo{ zH({B&qTgoxzRS*Vbz{VsQ5MnJu~8MZOzs2KG74%gdP$Mr1Z(7J*0|=?xWwcrqugPA zQO}@a83Q0W!$v@LKYEf&7R%MTnTH=bl5hKcj85i_n`$x?)6&+75I9?vuD6L)f_Ff{ z+)>4%bhF#9)d#2sGcTtI!4fr<{gnB@81L1XJ?A{_IfU1%V)&XTl~r}Nng<*Obtqns zG7&pcR8icLT#byLqu{CaB4wAxCe2^U-qh*uHE5O)G2k09 z)3cw{UQt+4QmVcuAHUO`8Zx^Eh?c107`rJlQY?WhT>+f{>Q>>@{cKQMOho#{a{&?` zJl;FZ_xlL2*FH&$#DtaifYd45@GajRi#!r4>t!R0@sU?=`T3xq{%Mhm)Y{M_-KU@H z{uw4Zx}_kY9|fMD`*EhQBfhE0%S2%6h{PFfe^@(nW0<>p5u7Lo&-9#w1mBNKpNCJr zr8u&vO!|PWBsxU@tKSExDfsBZ;l3XxraC@X%c4s!_e6NCrZCLNRHsrp=BnDXxW4D9 zc)dI%5D-r%8_w}q?1$JZ9Y4;HXjvOY9S(Rom525Ovpg0_R$IO+yl^X@5*u>68JAbY z4F&FtHl6;jbOiEDH$R8}bckZ1^E>G9;{0tbF2^bVmhrvmFL~4u1J3u#Lpxef%r^

Pw;6dVF>M`&{tfAy{xK!F;Y<;aG*}0VY&CYm@F&Sx8%D8l?{YVae=}~ zOQy&rHb0_5d;4%=sAuS295DzzqEl|v_=g|h9jQVwJ$-H5dqUo!WC zL2A*wom#?V*uVhsWKfKr7gK;v0_iamU*aNPj@L&$N8&HiC4~>8%E$YN&Xb^b|<3+UAt#LzEOT`u{CUxW2~fDy;5bb&^;KOh<2{%y zmi?gm-$gMi5^nfP@~jaDVjZ1%5twbL{WgROo~6s4oCq0eyb`~uI)QX1A+QQRk&Jr_ zgJ<1~?wb?A`6XtQFTWmiUm1UL%7&em6xk$MUEbKrY?voLbfV9&QlhUzL|^Jw7<1&l zZ`(PiQXKq~g*q&E;VP?nIfOzHbLl4qpz&G=;nbx^7XE2VzF>zvg1uxOQb1)eZE<&!HD`Up!dCUr7M&vh+4%Z*-HdsBk96bo}G2QkL5_O z`$5iR`0&uf4|MX&kL*S4@Z=x*&0R|Vgpyl_m@f_I)ECDww#>x<-tB!ygpwSHNO ztCoSl0mkGh|7F$Z;UXI%h=t|BNu;Soxr)f=Q&Usf#TMWL2;$s$C{1dlvxk(Qgxz;} z8S?uM20s0r47RYM>-;zG`AY>XTX=#Uf!mh6sGAaPb_wd3v7U6>oa=jz$P>)#E%SV5cLIt>)M%~(dL26xzaCz&ar$|g-h8ZvIHAep}g!>vF=Zpk2sVF zpn^#>5w%BR%91Yww+9|GXM8WkcImlL77(D1|05j(_APfvKJKY6!3+PMT`R3N`yE%4 zv~j_02*b1Tnx0bOvuIcxH-hUDa_JQ_@ToH4z0IW6lkio6=^kyoJ6`9LOd?)=wPdzr zYKPyn&SJImyRTiv)Mm% zjcI3krx||qmNTk{?8s;|**+#G#g)-3FFr}?;m&JyIy0`(U;OUR%Zb1|Dl@k z*c-flKqtEP%IR}^sMrS`>83&(jG4qP3zJ!-_XUkA&3x6x)rBJN?P}S4=O!z0;=ZM5sU2_tEZ763uQv!1z~slK0qq zI^Ix4-QgEhQASZUQx`7>eHheb?+86vZNkU@X0)g&XZ2lW`bH-nJ#8Eh2rpM9 zpL?(;ObzV&p6*nge^ZL^q&}XKW4!ZQUQ9SMydd~JkbY<+njbQt)b45hF@)ovkuX^V z=Ej}890t9}yYmuw8%!BDEk*YC7|33nOTLx=-05&LoU&018*f6jd={?wg*S~F3r!#0 zRl)^dhU5z(nU~z_X!>colPB=})?$VZ{iIfpndgXN;wHjM-&+@WbZ=}mi&Ehe0cxWH z$(9J^T5HDA%~uJlA5{y2^F^apYvol$TD|8eW%Zqg0F@plyNLSSGl}NL@kegC+WW&I zyVX64@^cYaE}8@vaGgauP7V6Jr17V2^W_BHKXtKAFT5`Nk|0l(K@K!PUCZEm&8H-p zPacU_tLCGB4bdeb`)%_g@XQM8{kKZ5+6?!fjxScW?HdPvcpuuROK!uQrX$`@3VpDw z92Tvrw_0N#$(rEyDRhgFd{8aWBDV z@2c7}1;Y)kq_-szPpr-5vJs=36yhiFU8NskSQ7$DsVs7gqjgbldm1M;`F}psFz7r0 zmJZeG-IEfc=YPz|tX@;L7)}blHZ97M*w%`TFq`Y7FUWK7N%*R~05S?Y4fTFo53HI8 z*z#C3m6wTIiOt3F_~V4jUQU>w?BY52=SJ~Z`+M$oU?zU6it_xVG(PZ^8w4{KzLy~j zXec&ReEjlbSrr8LQu;i}e!rE&Otbd8P)%QJx&wnk7G2oRSo>GCd2|Xl+@Il8u;R>% zogjRsKKlpefzAE@e7z`~L7Dy@>C;df`>Mf_8}ZVv{=%8HHWrQHqma|Rz?FAb(R>P* zTFNqu7#E(f07Ns^1fy4zsz686o^tRFsk4>}q$y^73G(8qI)k)>J919MA$J0(M_I&7 zOv%P~Ez59c(5I&-OTtd9EDN4V*X=IQ=!#EYf4>I(Q}?%MAbU`fX366_D~w4@JAEMy zyC#&8%=oS!j~+O1C4F}N5Ei~l$JE{YWdyWUZThM=S|M0QM3SLazJQ_oo<_CdK5OHV zSd_%K(Aw1mYoC}yMWzio7Qd|eUi|S__@L*(m~kP;O^co;oJ^1iW&EvX9~e-<+3tYuKG)Y;at@yqY`FIuar&HHprAS$5#~Ec z5J;vbir>NbWL$}3BQ(B*LtKN)>8d{-Swk~!Ts+31K!We?mP?>Pl@hZ~_TpEtdseH? zl1HfEniD~@f@t$;*qgMB33-m?b#ZV>vLe;zyP<-T3K`fIa`lt;)Nxs2LHwm2a{XuR zD*|#kI*roX)Q&XFptjRc{>)awA>m&a+6LZk*`8Cc60q++1dnZi_4`FPR)ENa@PkOx z{@NS*JRA*)Jn?0oZWi3}x^A}_5eS~S&(YuG^>ULuwEgT?izV*R z^Zt~1xa#4s{bH7s0$6I&8AhJ<4ps7Q7lzaNMgbo%T@Bl8JY32r*N-+;PM%I@JI%c+ z*jppsuY&E_C)@QO)5tsK?a_wx*p2zzkoD(w(XBkv@=Ke;f9lce>7&~{D;zkId@TxG z{oeFDUc=hQ@kF&rN zZ>aOM$(1gm`DGfOpoHe^4|7VHT!J9T-kAosz+D%=Vdn?9qr36&6pp`mYPhXGs%Kq) zUq3m);>W?DDiFs|T9YHNO_gE2Fw#|&$$%$!y!Z-}rKBi|pOQUFSz!3)nXMfI**H&X z*$3XPAI@Fq?bto~#b4vC%4BNqpl@&sb_zSyvrY6%oz~2FPl2QreAM!v@*BL$ z(#J}&(;03^$;V?Y8)#iiI2aOS9^>hKbF7m8jGl7+1qg_zPiAUde9rvP5*YuQtHvS6d-G z9oQbwqcw8H^0534tAzBuab`^fer{5dbjoM4AyeWV0g`o}-#Nose)~qwY{_=ieG7Hz zQX)VJNXZ6=Ps>(edSmBc{~C}B6#Uh+LQ#hKfx-Z0=XAUk^=$8QNuuK5FL)asqsQtc zlZb7Pd4UrOo`S3j3Ufov2eUODtCy}*p4Pp#yuGF;{E1J5nG6R=4ibA z=R*ZDXo{WkA{iof2Q2;-qRkaJ#frO4jd;?3|DNm|-P35Bfnq;-k7X6VCtARGS;uj!Ie9ER9hhxgS5T&ps2{>kEZhO7l()QXaCsZPR#WGrUG&2*m4_6Y{x)zIDU zwL|2XNp(0VZIaw$%~%5E)sG(zU5tl*Cq0fIv+K{bz>c$H#jA??~7EhTV<0nlfdow)|VNzI^=SYE%nEP~H#6hkS`>p;g=0$_{Vr zsSR5lKc@l?2jd-0CKMt)(yaL6@K&4bRzswu#t!K63f(baPvc; zj=F<#te!CT4t_$nYtZk5yhtwc^XIrFN&O6Bq^AHWLl9p})#McO=dj3jasKwZGkTGo z6ZLsfUtd6K>~riUF{w)1%eWYE{(MF{C|s&g-Yo5j9Q@io$PdtEyvL)}W>TB73X2W@ zq=(gnCz1{1{wr7%I4%}7z6&TDF%5RELic}Y6booI`%(Xe#p5jkIG1qQr{8dlu49=g zLcZCN`9v`@C9N$pe6AG%`>zo06hCs+%}at3-esO>@{`=UPoun}2X?X+6P?o{znRCC zI{#VUPwhALkTbcB?DbaY^5!!|>K+N^qqNxvVQ=x(3h|)_04FDHmbpD)%qcIH6)Q2x z?cvdHf|Lgj!tlPAxW7Ueex@i!d+7MrQuJ?!kKonEIc-uZI#64@N~dGVn1j(FXy^OV=@8QL{4#p<{v9 zM-7ubn|NpfN*dJK%AH`x9=saC%pW|Il0Dz@OB|fyWe9^p)p`*gy93RR|9M>|>x$D1 z#^1jQXKk}#6Ok5ID_XezK>P;|)HPN%Jo#NLu0HVq80r#D$R~Yeu*p9Lp74$)1pz+NY zOj7{EQZ~8rHPTON=6`%P)bDpTaCJNJVvfVHF`M_C%J@v?nX5{Mw7d?C`KKM#kv!P&QECeqJz z{xUZ*_o5$MlCX_rh}Mx<39N4`K32E7hpD*_RII9~f7VI(Bc@ z|1E}5rt85R)_(|A#yRzN<9Pu`p3?vJ>ji`GRYXh8MvQ{lEPG zUyMP9A9!rUbb;+}Bk<4r$dfn#kxJJs!2a)+e@-g!*lRAQ#J}0#KMz%iGGLi_mT8Iq z&N9EN%j9bFlQ#WDd-}Ik{^Ayr8pboC`tSB-JEk1XlGI3(zg#5#X3um4fMLp~yk`7& z6CeQC^VIOyihnoTpYd*Y6ngc#PycQL(tyX_tgq<*yV-sjc8eFoFEsj>r|Jmsn4r6B z*}t3Z|G(V+xAFRaW4V3C!*po>(+2?vfEsOkjV5z0JvftC?BzVcraFLI8qf+{&LuaTS0Q4(cWFM>y)9d-fK5`UFl}FY ztfZ4gNz|8Uf9HTuUL zF30|!yo_;ubxdLXdR=yMp|sCg{neYv$t$BeHdk#%_0lMeN$T&sAlT2uw<^;e%9Hwrf+Ojo>?0S`7m!m%WW@(?SSm?;6MzI#R|U>ArZtm-< zqZTn|NkmwJ(r9HCU0Gv6Nn{yHDw1tkn^DtPcd;k6E62Cun%lg(cuq*LqIxh&0OcI0 z!asJcYb>x+DR%hD3jWwUPD1i=Jpk@2!AY@!905}0#H>G2wjO%F+($*3(Z86bx7aGe z`!McS9h^5mwbsL`IxvhAw0JCW^}t~aSK2-H9PjQ9@&$*#uoULiM&Pxr?|(>*>*BVH zX_c3&<@Kkn>;=(6#=MTzUm_rTP<>_l$_9U9=rp7utVE}Tl*2H?sSWDXx_pUZqnpU^ zSe0Hc6nDx_em!QMa_(e#61;?MQExtn65W~k;g8<202gKXzA55BYusB6d5b=4ZXqIh z^^E>yn^6c?k^)uA+Y{K!;8ptjRjbX-Pt-c_CiNFZDtN3>t&~Umm)6ESsJ=cvXnLiq zt?=#13V7rg46K}8*CCKhgD%mE>X|e>BDmjV0z@wuE^tU!zsCM$;(lI%!t|kYWZ4~c zz2}VYEV#3bA*r|4WSM62(BgKSjRd?bjRU?4PPVrlsPK2)NJEwvg<18$ZR&f)MqRb>Ar2kP`?-+NBcqTfq2|n+fZ6WQTqzg|p$VwBM z_g|}@7Ah;u^fIc8Xsq{VXz+0-h0~yapB~pm9%$6P<|ni9rNO;NHTI}cB`}9FoRG8&m*Oz+or6ytpzsqW#zr2x5^6(q-yFA{4jOQsN-f{DE z7LRe=28>sD(Ptx554qun88qif_}oA9$%FC(!c{guD&{^Yl@Q?7Wb+OFZo$qex<6L?5JBWN@Sz?cBNWg z?`_HWrnFaeh_gx6*yW&Hwfy+H-tN>4_c-=M%(X}A+3lUAZ^z%G8#^&Z;_zEN5LlSX zy*Vm+bIXW?D@h&3Z2^jEHJZ!sp-Df;FIy2EmF60`2tqQj6&w&}aCZQxsw(huT{haG z6+oBzNoGDy51=-+$h72 zz-}a(t}Ev~qMzYFR)H8yb|b*KX2aTlv;{~g)c9>jDYZve+0%jC#GezN%8t`H$o@i0 z12{tTr{vi}oi5hpm+iCJsco-KL)0FCV~z7Rgb(ZkMGd@=_?}Jaw85Q5-sit_l*7}x zciQ*A)gKn78{q$Z4QCy4uln`HkAJ#t+fyU0t2pALF6UO`SjbL6k#nv2ocGCe63c8k zTf#)_wZG2gN@7!CVsd)Y`bgO)4!~BANObWV5z0qStz07#8@cYS&Ah|6gw*5{_a;6PJmmo z#p&#$*0H8$ajD%3pp5IB=erm$G2=^b11!K+QV8p|IZqFFfqjvFR;edF?T}}R3>bxd zgb4wq6l~kw+u=0eTZk>K(MiKWKJ`iQn|qQKF;YBHG*!3W!yEv9->Ln*degibvr}eD z=vV}YW%{j&rp_PL3KYE&=H5N=jcq!PZ@K0ivHvsMFC|3f|N9FRA6P%J9ErRTNY;&A zf9Ls1q>0LYtGoH-uYPCcn|4^ukY0@fs3_{4qO7&vPrd)!2V zfb()*y%l4%AL7)c&=Fx?C-pu0Y*b^z+{^uPQu1v2%+qpD{XP<`lI)h7)=4KU2KL8WeJ;wrk6<3)^X zh&vhhEE{lO>2nDZtBBZZDhyBnh&}0ctsVm~#R7yG#pIc|md}qN^CZnq>wLk|zWdzw zDg3rXL^A()!&nion)NemtAw;FovSt^?JjRFt8PlaI;*MKks~<0PI25c!m?bRRs#FN z3GVow-*A%491h!3#+nRb#9%PG8X#C zQpQvg17wwPc&bo&mv|ik4|<1MF0$y&6Em)kwXl(iK8h+zqrw^>7@W$_+;P@%;7H{x z(FGx3(=vC`CZq~y4jlt1UzOl5tw_OAEyB6L*oaL_m1^LQQHW^2oQ7yk<1a@I(S#VL zb=d&q`JzHw$sMDH{HWH6ij?1$L5)PXR&7QRzuQDSOtUS~=KCujqg5_D5VI*iv=_)E zSi4`LGFymhaM9lhm&H!!3(2gJzb_GpIIBApL*?{o%x>UW!$|%W5w#uYqGVT6p}OB@ zld5^lSL}VYrcBg?uTIm}AvzR&EjisoM#r}5O9h?MB7FU{b|cHL&{pawmGjkbh2g1} zF=M?UWG%E3cbuckRN=?-ZA6dFI5-MwLI%k4vk$zwP>aXF*~x*NLZAXrv7JxXHC`}O zFEGrg?X;h6Zc~rusY>Xg%jm5TLmhhD({)x5S!nF*hBwce-`&GuEbi9KUZuFN$<+&IY36$ zrfELoHPZwxO;7hIhwZEgfUz7;w#nlib$PnF<@G@huEM07ckgMBsH)WM5EJCVWh;>3 zgReHDeD_3}NmlnRwF?JaDn!Q29f9rCe9Z6rv6{(e0)!(3=}nce>WvJ9SZtVI$alQ# za$@o=pom2au5C{fv7M+ooNqC^qba0D_T6>M$5ZvVbm`ZOknN)A^H4ASp;A5JJn|=W z6Co58DNp@|3ZcOT2Z0BT9(#gk@N~cn&HE5p#;9FXV9@zGzkZT%rkuW%OCuZL5&$&n zGPziTACBzvcLE}9U9diut^xsGWD4;74AK_IV@jN};D zVG^VWgwSv=g)c4n&ggB;1#&90bEl<|)IOjDmHRe3et_^#WOQZ4uU}o%(`9`y0?FUI zRy;T;?Gx!)0xU)WA;&nwWmBO~)VD}Zm=45S%c{O)e9Sr1TRuJj93m%NgV5gBqB%fL zuK|AO)YPjKuM_<=iLWjL5B!Y_dj|Yj~bzg;U zPnAG`OElF<#$2ZTGTw2+1>>s8!SW!X3GQ;Ne$SyM2$ARj*j_nAW15TesC?eJt0N$y)-27^(Y7SPY2(8h?^b^b zwipe^0LO)o;n5dH_kfq!Lo&4-OgCy21+jY#+;C*RbP=T%w=ceZxv6Ak3(%*+!$EEB z;;Zc(j`eEy_BsqQBv2t(`W%QF!7SyP+nL5(V* z#6TcDdh}J4w+QT!H5Ar5;ze)T@9FqP;L)vzeUj7db^?2QbA51QPVYm#ypC;gE(fGN zuj}Q>g}z(#F62#i6!c~Gf9XpUp5w2$o)s2M`nAL^m9&rAXgTp(EVLiC!=$jdK1?nG zsQNXXwmk>td0qTP13NClp_Va0fw8dplgYiqWiR2b(BI=w`^AMG(aX*JGMhfzDWhw^ z?^n6iN|M(FE*)hdB1ZiHC^bSYN06yp=v4gRJq}dtOy}V$07iVudiXA#{5LuSZ z&(4wcX+N`p2X>rlQdEJkU|2L$&=uRX*DK)bRne1&>niB_(xz!AqOZ2U)QO(K{Q}Wh z^>){v&h98BRkwi`7Z65BQSih$GDc{; zYtJzVH?P?$w0^nlAn&fVXIk<1t(7}#eb~a=hBPT+^?;qmy14YddN)dcGyVcYp6chi z_Z05L%J6MJhLqbjH?o>h7o9z?7ePUxKEtE{TG-5joe2kMgHkpzH_Z;7cxmb$kdWcC zp1K7fhV6;7g>LGLBrC3m38^H|A1R>04TUw4T&;HM2pb{}wNq3V~8Oql9@ z-J4x4PPffpl3aM=PhDgEOeLilAUlB`QGfB(tFLi{971f9_?VW$Vk4rh8m3p&i7M*$A zKRo0{0V# zqDCqZ0qY-jhy8;uX!APkHWK!LK0Qj8K(i8LymzNwO6b;z;q(WMuQaE;M@ZV?A1x$d zLd_&1nk`?b6f*%^96|M(Uuwtn<4zc~uMjiL-R~kyu~-1Q)Idd5{)5Ty)s}V0A1kQT zZb})lih4LKeXEt=awU|ql}W_~c)en=cEZPF*+A!&9g0u4LXgQ(u&=iLsJvMR5X#u$ z&6WBtat?r!UXK`mltPD7OiTx+>YO~p6`^2Zvc?_%bQ&-!1{v#^(I7SRwrySC{sDA_ zSl4?R?Nf28ESASBX|+c@0dptOb&vcoZORJ-Q{3RkS1<%KX14oqQK?LsYWYpdK#+;wZ@Dg3>DP zgWNULp*W@zK}>ITGcu0bk`(zT{cWw=DByFm$5^iW02(0&Nel6f40nQ?{(PLar(W(c zJyNfioP0~lv}VlbAE9vgXd+fUeWQ`}ys=E2P;B-@9#o__?_3ln*{A)Ax8h+8ZV=KNm&enZvf}=Fx&Mt%o zmZigEPs793Eh)Otk$%!j92hh}nn-rUpcCLP?=!BQg{(H+KYQ1mqGo1pX1hNiWW;^u zQk>5L3H{R+gmk!Yu9XPvtGO*qT>nf)h*C%kScmNn9bCS6D*D_J$igrLtny)?whg+B zlfykga*Qzpu*Y+1QFT$)rVPRIEy!RAF(aU^{4}<4sAD4*sAXfQ-EEM_yu{@L`ksHz zNJ1$NLsqkdeYC)Tc5d;x{-)ih$iSOki71SL?&eV>z@t|@r@NN+JG)D(Vzz#BlUgl$ z2Ycw=JvHse^mzmi9z4k*AbOxHALz{-mO*xKoY3QvmzDL?0%$PGL#wJSt0^NZLX7vA z;Gz7=C!<+2q0rQeK2_;aI%kQ@|e9@JV}7(qeaC7boXxT-}E^gP6;9=n-CMg30Tu$OsBC-QpptqTg=g9Pl0*c{O zMp*lZDZngQfqh!K0iJFh%cdw%GOkT(&nSqs`G7?gP*VAIb!T`k0C=P?dE<4KzVFO& zo|Y;j+8nJTz|Z@augy9{S@RRd@b-ZCoY8uJe`L0CjMMBJvSOm*g7lA0s?@r~MToP! zCvE{5%U5lBxaGd;Y&N>buaen*N?4Z--ly_9@I|!k0!_X2mg$M6@}deq#Vp>6`e1xi z7vV(Z0tpA?quhZxT}qeN6;KPGuhq8oM_jG=b~i|1Bl!UyoGp7>u*8?3A+}YpWM@dl zZJ{jeyC~za_}#meq~3~r3xxpb&EDpLP()Z)!m!di#rMqpS5#yn+o}es?-NVDAjXbF zGCRv^O{3qa8i%kQMNRffSy5hNnW@}TCRf8=g!w9OOl5;?oyd-_t{ceSyaK5#Eg<=rS=dBuSYv` zn`qPer5@4Yk%p%g3FBo5c`zwUEXi2Vm4xoIVy<~fJ#1Yupc2IaXfAZBg@To8ucafe zUS}`2dX;_3+nk*V1ENOY8N$TQjf$alY_A2^{_>9{J|v80T^?Di$k_;p0A*m!lRQ|J zeM}Kqu|SHwLkB{e_!Y74imYO%)O88-!If;Nf6k|SOGL^Bd!}OO5Z?Y`}iapRX zyv3@kK=ap8=A9#>y@Bsi3{St%T*xqT9*&Eu?OnNNe|wjxjdo6&xQ#r`&jF3Y9POGG zPumwyn?96Kwsx;e)N-IC*Kre>r_QDJ5=y8VkGSlA>?~EAv)OiPju$@;Wz$p{(#|ho zQ%^YTh+?IkZ5tg+=ClC1$=MK({s?|}Q_NAOYU#W=&SEnfq$&4V_Wm9j~Md7nYz6-6-y5yi@ z7Bf%K0HpLBcnveP<&|2kO9rLllM<0xeFmv|Q0msojRSt_;(`dPH7(uO5mh~ZAbJ4# zj)9Yz$&5QO8__}*Z|;+4kWB=))1Ok-7Z`DQLg5I=tH=CEfP{#suz-bEnXq(%MUiSC z>MAlIc5RJsO?5;k$j{fVMq8Vwbdb0dLpuT*J>6)8(~DK`W}3+C$R_)Bg*$(eD5c}0 zkwaE~d&_FwpL24%i@(qz5 zMNCo9HsPUVmNhsjssu|-H3iL`NZYeS5Ii0eQQuXF*dyuAryOLvI$ zyrvLFO7k+hELV*9VSS(Zr*kd+ zJl8a3Kl?86^aH~Ajh{nD=i*JT9BQ_TT6rVU$QJ9>wuY?wwpIz}LssCE;f+Ma0yVG@ z&NTNHPXA+Oc=OPdJz`#{g!pL3K+@5~cd=yON453QmT?03&5KFb3b%$8x`e@Ui-69C z>%Dos^;Xl&}`8-u?+_VDOU*yFrX5U7C_i~Qwi_Sdr2JsKr3?AADI{18!&Dx$Akx?19*CAHhB(kTsDfG5KTfNt-+1Iap-|0oyihXRSHz(#0)9P3jAaV0}F%v)XMnq>diM&+6 z0-Sg+@ybi#5j$ZHvq3|r-+qfN$yzxQ2;m*P#CZ=ijdu^E`?yghW= zz2Lw?6hc!LH^ly};UJ;JAV?Pc5ari#^nrZrxVfQlQqc5EF_zqKEM;`XOMb?akA)$1 zxBh?;o#NR8!6)n`?<}4bD^|qb^FHxNBF{Y;WJed>tJ`-qS2p;#dW#_8v`8g2D_eo7 zOtNe$;|xY5C5P@Os@{g&_kc#5L!CP`(j;sT*&vjQ&Lv9d{(^T0xTE-0&IoYo->3oe4*pq(9b$(xr&9?O3kNCq{ zEU}5297kjW|#=Z6k+LRWwMk3l00^Xjj-6P1`s&u5Se<`c$fbU8GaC zlRf-PNnZxiGSF=9eNhZBEqw~|;hwhLOws%CI!A^PR3>ltQx++U8s) zl~K41#k*B*9}W$CH=zJfdlQFf3O0qjgSQh^k5hVc+nlGC_K%~sGs%JSMufCkCay;X zG(FU+y%`z87K_-ld8(BDMRPaZH)-5%(l}{x)27dT@P1Hq&+%!Ke zuP{DV?$UEo!@rw3*;IY{c*hWo;M+0&WS-sV0i8GNilY$u3FHlj<|Y#`#(P#(FLfz0 zPlMi#MrcdS=vHc_=Uh*|k7pAui!)R4!8LPE^wK(%2sl-`R9d4pL+V+Sp58G-N#d;m zF}9t_c~A#bggPVN256}UyJ+xF8aXSG(m#2rT1u+<_8oPr9<@5u_K$3ZKQ)J#e9R4(E%q%5UR5wv(IW1-{A;HQ2o6p}S%;9uB3M zFE&0Kg6*j;X@o56l8q6EUs*LvI3+n7TLToSSSk#s9g#>c@pM5)?LLo@4)70ys&wng zX|+#ccT}OGk|o0M7+q+cw^3||W8{_)1KP6>nWfgjkqXkdtG-ymRSX)&(wzuo*Tz-f z>T+Gw(Q#Jwns>+T`u@~#r<28`%B&C|O<@>!8P7=wWMR;M^`*u!(3W^#*`vz)v1Itt zhM)BhIG}C2g)6y3YQ|l%sv)YfQ9<%oPJv&ngr1PT^P6q>_|Tn;*;sGsNvPh*M1$|#i} zY2T9|Z7EHa4xW+;Jyt23cpT-M^AVlEew)6*mj{mhMdL;0guk>Frtc*lCibQ2oBgJ# zSts@`i+WQEW-DEJgb&wZ7$X*!9H_@ue z>LQaWOk8O!7#)IUpAR}sbb34Zq*UAF3mdP`3l%B%64&E7LgF`x5;@vIs;Z@%k~ddJ zbq5ufV|KG$hll`8HeY(iM=@W2&ZKNrXC9J~N&fe%5|pBK@c0(QhCc)MuM2sPWB!bw63Lx$olQ-q5~nc4wm0qUlb8^y~D7 ztZ4H>av*_qT$9Xa5x91gfYgb2Sg0DLD)w4WdFmpkNMg!9$k$|RRu(@W#wIk-OD6$snRW>OyUkKerGP(@6Ge6 zv+T=AeAd%xojlcTPveK1%Nl?yP;ai5>^Vfhm^^{7XDb5e7FW#ek77Kl6a;= zt*KJ=SW6~(pGHjBs>K}jg~sjMhF5L4$**ih3pM*6<%-<=`)7(~ZRD<06-82IESdwH zWr;S^GG*q?VT z=)%=sRAFtcc1@MrVAJ&cO)E2-^SVlZJ^7g4{`Z=_wI7CvVw7`d|4;9wGAX&WX?^wm z5-3H<+VHX+zg+`Nl>F3MqDc3({zY@rrQaSluodtATDxfuOla!b%!|Ctd|wm#!Qb3y z1LddP7QJsK=B39xGgwjq%K$BT1f~o4-4GSj2W0E*nF}FEq&-SFVZSD(RHc^+oqSS2 zbKW%e6u|E8T}C455J_|XfzywEI(=hs0H(-s5qdaU+N9OOe=0yalJlCmV0^n{-%V0A{E6#P)PKey$% zkovLht#_eqL*y9C+z?a}FibIOO|9PL(~)8>S@rfZWd$aP^mC@<4mfL^$!jEuE^-G~ zJ)YssB|^T^@`SB)PM!4ly@~|ner@me+0%*+kr$`gWJDxK1HRC#dp!xd!qh{TSSh-{ z-^Bzz{QA{jQRoZVmF?bHhF#`PF_*Q^Hi-2hTf>>5(xFjj?R;ap)IjH9l4JRc9vw0C z4Rt;CL8|Q}(`JJ+J#f0xuIUS#s@b6&YFY!l&QZ{`(j~NX z_;UIosbb8$-WarH_oQa{#I$T@?G=oBkjAfS;ZW~~NRr?5c=X(+N9Rt%e`D|6!=YZ= zzVVQhO=@LRgj%fKUZ#~f4Fe6R0yUFUh7=jZ&K=b1rXdY3}# z`wiz8;@{nW`4kBDWwHn=cW3CkL6JjR2CsY@P`lnvv9Y0zM{!yUaM+`|E(WB^2cS-l zn7u)t8=<;fO%Xn`>J##2!@8id%2nNG>bOD(?HEy22L=PvW;=}CU9q955`}I_(p!#Y zk)u^9l6WlO7Jeu`dn)&ynoXjdduh?n@_6^K+{c!JUJt5>#=+{XLWDx<`~ll1+-Q zKXF8IgWMTGAJ#;cAs~;u`?1N`?b2rYS9bGRi;}~X{CBr%Wi39wD*iG;tQ;(YyehpW zOCU|o+sj$Vp?y}F5vP77bjYL8_qW~5RWlWHlDgK&&5t@IFS)nk3mR zvTCdhaMCh5O057k@wT`@|pw^EP0!x?@`jaA5 z1B!pvn^aF8^uE01cI+1t<<|V=$C{n?`AU3vA}%5zIIZN!YSJJ!q-7|xM5 z5`~E3)lw{G<@hMfm_Kqg9&9rQ>CP(8c~{jHF&j%`3bwS*(iD-VZL4cH6E{7xJ1SS@ z_jR$Z;E29*)Z*295+73CZl{n>f(v17BI}#idvxA!P8a(@PGR%u!(MIoVmYchbJ;ZZ z*?=aOD?rOQZRQ%Y{Y1+?a2agXhZcSbZ7Yf^{nRT9JM_duh3=gfOJYr)I00o|7 zO&=yHJh$NDCinab)zUZOVv;NMqmSmSWm@5}V55-xWV$Zb>r>}z&7Fv&;j;(qg^fl= z5sNA6cJl>v|Bnu3GIKbUZ>vSH8s2)eKd8**?uDws*K|P=P?!w5y}90Z#u9<)I$|vE zc=z7Zu3z|7x@2`m-Nw}t^Ymh{^l2K+Mm23mTrC?#-)%A^7a&}ZrWpJ(pg zPTtOrx=^>odQUMF1k0x=eGe&HI~G$iOeyY)H-=vrqU>K2iF`#cKbAM zTS#aDCDhl|(Rx`~+qo6(TGe%M+V`PU)B0RtnmQ`*#>Oln6zI?DZ|ud+gtTD%5T#9) zZ<6n$+A-3p!%c(n!+Qr($kA0NFsjkU%X0ThK=k4QUChWfMtXKo;nSQ}sOi)a(ySyj zM|{K&;%K3zZnKY8XXKhzn9z!FK~2=T;U>vT`q_lLtD!lZR-LVg0WS<)L83nGR^Z<) zOW$lVKF3c&NtP0!9d*3>pg!&x?+fV#2qj_zBF!B zajc&)$svYDc-tDc{uru2g}Z{3odepz`a|)1pI$B6houm)Ks%1hvRlE5+v%n)+jc$6 zZMgnJ_;M$t(EEk0N&cm3VVf3nC>HBE7lh09EzU7b!_$0u?;ImwGK}nbEDj1T+1K)PAdc3Tc5G; zdBwcea)!w&F=1UPNd_l~@h20RgI#|IW{YgWo%V7leEVq7`Gnbf#`D3E8e040ZJNxP zYT-#SsIFW3`=*x(-|Dvx#q}xe+b7Q3wsBXFdBq|(c~l=4&0faHUH36FH-0P@O79$E zvPzE^ZqPC)N%eXMvpoRz@Y>oh&_KO7^BL6Bt*{C-Qd{nmF3zenRYb7d02SHgYCc@i zEMe;wPb`0~6F&oHyHKxu64hZgKb9%GXyJ3A19_>>oqE^`A6r7afWLoj{z0P9W+CUX z#5<17K{CM=^^_T36@`+`DYVdAJZwO^p+NYAjlA^KssICWu%}Q;B zIY+=QEXBN#q@4cJY*T0R%B>c1gvFV`Uz?;3wY$9ksEyuyq~EL5<@f*TyJ9yG3$P4w4A zMY%b<6V%1frp)uIo+9*8@{HhmQG_pOb+pH!-asj+cv3KPR{1$oZK5VE#Ai);=89;# zj>RTkeV?xcuY_FGG7dS^YU1c$sjsFv(orHM%TSqF*L2N6TDw@_Je0_f`aAqkeRaKZ zYVO4C+TIdLh%?5cG28=|s%FT5T5Lu3 zE(^y%N-xpfD*(cvD-RB6TbE-OFu1C^9T^YOXj8uP!gfdy9CsulSZ0B1grl)R%2663 zp|BnLOv1(m6AbGj{rk(t3z+A8kMTG`FxAD+*+mfCC1&?MiO~jR(RWYtB_dL*C`WKI z1G%PzH$;68a*ws}`!3nDpLDs5OTECGP3wmwcu*q6g)9@ZqJldGT{L*e3$mg-leOAD zF~7E+lZn;m2U{VET_9*~@gYCC`SVU5G9P^k@iVGrI6v~O#n;u_x7K@HJ*=&y%phbV zpO7SDA7!)5LRw3;J?0k6pK6T%xyYJup7(4>!Jfi%c0S=*A!MpZ^IHE<87VWl5PJnx zK^)~KL$lWWEY88&L@O{*h0)~_h!St8f+#+ubejH{V$~N$QZ%#v(cM${tbq)|nUh9V*`gpM)c7PM$>iH{TJ*$efR<)Kh;W71;1LE)d)n9s}U9=r12 ztoG#lBj=RBGQoiAF*yR>Bp-Gp zN&FR62@#L`h!>x?jtj9N4|$dqL`_F(UrLCVo}SvP<$EP@UbIre*8F|oi;mloGD2*k z0>gJjLH>y?IaW#R3m_%FqpbJKv`t&^N~!D?UE(L31zQt3pcmj|`&d6-#w<0Ekf=X| z0{&x~-}t6ePv~o8P|*3Pg6SlL4lx4gz+vNW`o#IX!dUZQO49UQByfFt;m>yAOmhcs z(qbL3-%gi)>JLAjBEbhU#Sbm`l-ZgANMjjBPs^YX=(U+%(1z+`x_7w zi1;>+ihXM+T~NamOIgZ}gLzB(Umj?*4Vg?W$tEyk(J?|`E1v5aG;M7>Ms&zJuu;1m zOi@+1kx%vL<7ye5qbW{*lHx(_3tCdAX)z$$>?@1w$D%B{BK*F;QPRQD%(>>x;@H&6 z+nb6(%f6!_VD@B>JHmEc7vs}(a=TsGO3iAcqk90jn&izWTyd4( zD$-aLcQ@m;Z=oE%lu`96K3wk!Bi_NUEk9xBEj64}K)ZsNFM(pdZH2jSeE&ns%zdV~ zLXlfpG9)CPcpEQPTwM9K=n=XSdr>XEJunin9~>{QbX-9qlhlIfC|}0C47gMbt#}xE zPDiO`*x>nS730s?&X?7)5mLu$GCar{6iLX50>XQBKq=RASssKAbzaGZw_&`2UsEQ2 zM{ZIcvw5w)c1ZTN6v5U{X4P~OMj$6^w{)0eB&g4Nfq(O2_G9Q&LLE-qj1}^E%4;k+ zPU+a~W(R|Q9zXdMco+4Q@KQe&C;}4N0$FBO+Lp}oo6XN2#Phz5$-`H?vf7hcIO&-M ztupXO^zmhnTF1@cz=M(G1MrcJoUS?c7eu+k=5x((^?+U* zvp`pgej>l>Vy8d(s%u?u?Pxs~)qTXURMrf4JL~EF<~c<>5A;|NLi29@2yymwcheG& z&PEX^Q(7Y{6-j02o))$+MnmK8SoK@6VAog{IO8d~%O$4(|B-TuVkw7Eq*kr~vD)MY z#wXgg%X+|fAPMD9*AKZVKU7x>&@z65j!x*}gx457d9>Gn+m}%9$xXuM(Z7d_Ij48K z$RKj)PJOBg=_zy&8aL>79H8eDDMgvdiIP!vqqtU7mr3U5>%CbU3?I$a0Ey8j;BIBe zda+33btOkThJn2BFY*&7`kub;`pKpac^>cTWQ050f8>q6(Xpdadt5HMQi73zUFu(0 zEL+Xb2X#2Nt-~G~lPfWz=t7)_ta$iAPdfmoxFqkOwCtYbT|VmJQTx~u$#wxcKV&9C zJq+B0L8!)Gddzj4qSPlE)0Vy4mCKgPHsTE`(DzT#!A}x-L|woa8Kn@sydymiK)AOX zM9K%G@4vVKq7N^14m;F^UGDICNY|YlTJV4;X*X)`RM3lk40&I#426Gzpbi@6EXt*1 z&?1a1UzXTYj;MbSdMxjPXi_26nH_Tn$rYXulIrUUF1e>O$c@UJHO{rtsv>WH>&Pqg z|8>qP_SDp=$GsK4e)Hj_m$TuO{VUj=u13!rO?!&Qj*5}yK^D1#J3;J-R>|q7J-zi2 zfPv(y-eV|=;kTRcukNWTs^rugAmIqFXWEf+01aT#4h#kUI2iiX_Md3rUYeJjsHc;o`?iIT%~@^H)`OfkGm>;u&} zyv~C$oYJkZPtJ#x4%Hc%4%{%1(=F*h(jUuOnL)CoknauZ7!xz`o@gOStS%;uK+Cpo zXoZ;KURfx~UzAh&gm)92mHqO1C1N}%H%Axq_BfkIs&yi*YVuG_)362N!^Mu@gq2Im zf^A;;MU`nr&DO6q5ibg^rADnuB~lXzX`@v_2`+QGZ2X7XGJB#WbA!=gkXsdP?DDdl zY1;^Szt4`oukeH|=H)?fJYDhPO?k%*)$QV+oDv|$171CS=V_nW77E}_{D8tF5HARx z_TEHf1iGez)W2{5gJ|)VvXmw&nankO`)CR-Y+$p8*pkEIneAvc#EiW@mTtcWlBS^w zX&Ua_C>B3Ud$`}=g}aN(@lv%Ig5!`xlqz5fRrv0hLYP^iRg_GO-Wu!Gn4{IleJyHW z4TIq`1#w!#ChywiyibjCiPNUlDTI#kRlkYeY5im4nrIq^saq8Ca+ApacglNoB7bXYKF~UuU{d z3BTZfo_39LxcntE8t~ulsnCDx6C8B%o^(Dje!Ahr|P(*_y_uU{jMa*HVO0xOE z#@G07toE%ra~Z>VKR!^a?wBiz>m8hLoEdr*yhyPFJikFN7B0vm$;?T$C++-J6R3vs zzOe*|N~Z(H5e1S_cRst?1+vgl{OuX}@VV_=n{j%XB&=sI!I@Q^^C!#4sm}p7pIPV- z5wz4}yey>uHg5XX!`^UEL9zMi7PO7LlE#KVWiDl|CaM4D&1U^)S>PJI`8#sK9Z3(Zb4C;2K=> zRY#(z$E%U=6@n%0Jvv-gK3Q>ocQ2LmO{5tp4Y>kckF0Hd5L!dlK8;me=XxB_ucZR) zz$;{4YF?Mc;^A||D)yCcNw&;y9kHWDC}lW(V(a%}mu1eN!zhfTd`&p597eu?c00h+mvw79!0fj<+<|2OK>>P>34#)VQT#~ z`XG6q92cDJV)XgG7@v;|`7MreOzmL}{UJ}Rdw#loH+?Yu*t$LtIaSkcfv@U$m?CzN zcjeixjoYn2RZ%~2=U~g05vy@MkWg7vxs@+LMal7sGw_{719C9M8RbOMo2l+>xA`;RUe1?NQ;D| zBRUErpWnaPBNgX+3CzBV`MQjn&MIqH$f6D@bPlH^TVYt08}ZY3NlCb5+8uMX{Hq-6 z^A$DiggN-l5NF|}{SZF{A-G@~o*w3MKC3^fkgt{1PpzaJ1mx?#QiT2I}m z6%2dE-GTi6$~lsFXY%%)rV6X(I7J`U`Go#LDu60jmDV*-R%{rtVdd^Y*02dLS3-ZC zon}v12A|ww^<-fv&M!!OyIq>1tzc&7y6R_4SQ42}#t{`K)fT$}OAAA{OuDI|1SaOQ z1gO#Ku7&5Ckbzkg=C?_V&)-6vwvP42#2~X70A=r+w{f597lk<80=TXigEBehX1P^( z$)Kr$@$~z8^T}snWi`+kDVJ{LYF*66)>u`nhw~pgK!FJlO1bGQ(0R(*TBJ6)k^3<& zq>E49N2BF%B+w1GJK)0j1HY|D<`{ATo;jCQ?do>AYlot*-`l<@aun0$hVhLy)>p3? z!w1&J=f7_Lyy3E=wBV}n4EzsUvy)~j>WV+&(+H$Wf`I=CMao3(5 zx?!NzWBkR1174uTk3b-AwASDKQkp%~wIr7o4{83{QB~9vT)a{s(EKw+ffuzng5*1X zTUV`7;$CX>DE(SVvDG>D%h;_QTPzER|Cd6JWSbk87WZ4rUGyO>It>%Ref&s8cwv#L zXKw^p-gi#`;1xpev~Gwz-F8{7-%z1n7uazC&jatk9>+T_4z1%yOLlbI(PaSr4*e9( z=b5s@HV*}|LDn;z@TR5pMwl{eqkM!1jvx*YVP2~nP$tTab0aP8Mv5cK7vh=Ps_)xw zx~Urbxit1E=u@hg*KFL1P3&e}ZB8Dh>Nz~@t9Q5xnGy1m5bAIRc|6Udz|IrLjCp$i zLzDOSyZ7`6$6q3(XgC(YgKCR^uoG1k0Ux$*W{g-LR2UkQN!J`EJ%)oFDw`*dbTrFT!i{FUGx4tV ziBiFT>|0drTRhO>Bth0aZS$t=nj=wGI1{36E6QploPDlL*k_Ha90O7?s%sT}YaU2wX@u_>Z1__DhC!L@ z7Ko}G-6UL;HBxu}rOV7u-H8`*Vv_nZj6=mDsxBMf*cN&cfr(HxLFhgue>1;GzZ#$O zjw1^mV%gR_fLpm|!!GU+QAhjsVOl_@t#H&iGvTKcB!&}girlj0XC=)X>{$1iJno+2 zMOFWlhrUY=bga{=9gb50)h^&PgF=s5ap=q@f|tp>lPyq1KyM^;E?eMz4wjbEAuX@i z!dWf9@khs_4hKtNi1g9?l|Ccr!)ZzqQONJE<)Pa9L@=p9!vmGCHCE&=bwlul0(`@e z@=|0nVNG{aDT>+czj1RFfov|7b_#LOz=GsXtkX(9UcShyBG<-73U)P632c6z&f&Ve zmEq7r#3hT>O-s3r?x;T8<1NJ|ZGEC}56+Zuf>C1^>>R$$CZXwsLS~2V>Ddq>Pzz;g znXgNrO{Dt`Q@XyUM}CIgs;8Yjp|zH!LHgb3>Q5S>G|-LqK!bPdy+SVTDX#QD#|ALh zC%LY(&i6ITd*(2DVIB4}OQ}gcb%7g3uw+Pbu1T&pRYPkgx2S%wDhi#>wC)$F)BBRf=yAgMrwU5?FF01 z_8IWyDrm}|ZYT!&hzK4LDD|4Wn@w9j--Ogg;L!xv@-<6#I(WJm8pseuk+phCdZ!U{7Hrt?~Rtv zsL|blx_s|8S1!O#<9;0t13kh%h6B70z6Uw{R)btYK!-2Sx7SM}huid@H5!-x&T(se zM)?YfM{%^XU1W+(R{_%8B)f56g5;$})}-XfnzNB}>E_mYOCNmy)9Cv$sYVv1;M^YM z@wuo-S8r8^#W$sK7%PL*o*Fe#HpdPttkc)tOOiI){VmDb&O)WWPHXocw?k^06R+ZR z?4yHN*mahCsY8bwM$!mGA$5DFT zrcb_^ zP4xvL9A}%d{167@O}khh)m8FVaRL7^Ui$@3*Qx=Visn5;85;t;G;D`GB4gF)UkQho`4#^St=6r}=<}v^n6n z%upVHbqDaRxGNI@*_RrL!|cQ$*N&GP#{s2$-s4cqTxZP()w*fF5_PO!c&P~ZbUL=) z0m4g9kkN6`@sOLIStXiIl?5Xp_Sd;=*qC*U!co`t3V7Eog7!tyOm~tf2ac-yX4aa$ z8g0yP#cH()TFz+_2LQyLta^=wv)CfjU_wRpjiTksc@4%x#Avm?0Aw7dgqR3uTw(q; zmc5DfQ3)_K%#!*(no&p1^77;|4Rk?nK5F%4ew$BeOd_hjvKkDL(_YFgx*)og`&D>g zL1Txz?$MgsV#6C>G2bN{mLb*sod-cK2RHK;%nbyKI_JIFyd8(X-P-nGFyBbhxLIir`r1p2ozkk$Rm` zFMw8GYMVB~X_gH@5EVX*=oah~!0&^EpQIvmac98|Z7E%K6TQB|?cu!s`P`_~4$YIZ zpPNsbQu4ytJZ|z?;SGwc4UPIAYV#gpp9#2C?dl!mreB55@AEJ3Zz*4Ua)HiM-nQW-Rd7`FSo)h zll(l0ee?FzB3QaPgc4#ulir}6hR^A!x@zfv@0$#{qbb958i zqMDs}Kq@Y0csYyzdPSxIa2G&p5tt{AOH!v=l)%5Q#DhJOK^C0~&8o-`y7I}+LJOI= zUYJK=NRLmOiUR|uyh;u%7z_b3;6=65(B;lcAP?mreNm^qx$1IJ~) zfli84WF_VMS(rEOE8(7dd04Et0P6kF?}Pt5&tUwy8DuEYmU;aAe09#xR?>3Q3bc0S zhsODmVD#t_fs5h1*N=;}lzqo>vPqNlEP1Kn$z=Iw@yYT(YoRmx*zY6tkQ2Vlcbss* zj}AVyh{yU&$Z$UKZNjM^l-yr$N&l�kipj7V%C(k4%$x1z*(HZh_KV>zsE<>M|r9 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

?b8Cq>da0*CWIsN31J$B=GZBJ^HyMDa>wV z&;K&$1azn3byDCEi_U`2Z7E}P%YWbhC+OVpns5>>9YTr`y;%~m4?l+y7@XzHy;BQ( z8qyFG9Dh*0* zJ|^uLnvB=T6_s}h_K5a?;#c$@HZwzwQb1x-x%$YyW}_lhPe%$7%*7Ppk^)wPgjn?; zNpAz3_{QEiED?sx2%)HYSM+BbD3Xe8IZB{Hy>Jfze`^jPIFaO1<( zlsbP7PRKW!fF&k<#t*6VJ$eqNTb{G=zZlcIpJ05*a_yer(%CsEZh-fBm9{QCbILDT-R&i%z0lRCM!=^B)Nlct?BeI0t$5i!R`Qb$u z7Tzic`U<5JKZY_hC#XW?nk!zE*BqjBY)T`Z+CJAxF`W`zSFpMz|C|i{cSHEEcx@Xs zdfqFVXDhm%L13r^fQSCn8r78FP*0x_dM$V~*v(;tN@ywZ@|P$t=Inxsv8QW)ww?y1-l( z+Y2`cMYtnAaVg!U_GmQF5IiKLi0H7=o0NHc6wzFfzG z<$;<(ynvbAc{vVIM7H)8aJk;jB=BLU=ifMYwzs`clv$Eih9{g!BrpTO4^egxOPxsb z;1bDjX};S|A}pq;)Pvd1R)u3c8R{%SBv-*0`AfDigU`R@<+s{bm54I?mtN`*PXKTY zy@dnmix#j56j)Rud3DMk;)u@lPfbmw2Lq9v8ElAguR=mm#&3>i0s#st1&59-yclJl zF8J=aUVdnasel6MILohi1BgtC7B);GE|FRC6i7--`;@0Pd8qdA8>#sdJ;D<{J9>+? zT%Oy%mAds;fzg-RZ>hWVsXhBWAdXTUmVy=kfPz5ZR8 zpO{69U(u?>JbuBc4jGCo4X~(!MTE@|Z@FLK9XB*wW&Rj_4RV}(J`izs)jG=Dp$DCE zo{f9_uGIN{Kks8IWqYW_69GQZ;gVDtV1rOd&nIjww!^~ics1vZP;^(Hs!XYvVZAlx zSR!ewXth6lRbnTyEDA0)=|v^)u8tk4h!7+oJUYsbbO+^VmVfw*;B0Eqv-D!Ci_Z@~ zA8hrEy{WvownDdC?f&?ZSJWey5x!rQ)k9%HMBxHYotDZCvik_g&XlLd@6u_J!K}jQ%suTevh&+~! z1C=i=8}~^vj^yXw9kwY=e&z>tM?I$B{=Yy~1<*7R(P^FQ%ngz35nZ;qI={E5cahRX z#MJs%LMX4uU=hQ#6)T=9T77|F6hMcfIDf5g#f|gY+_p!X@G(gTbEy8tE=&4RR;!f# z4Z`r?=qszrIC?)G#eE}^KlV~8{ zcY%Aq#9V-FD6`Jo0G^xTBG=XgpEodMz6#iZnCkNPGDGwVWjoQW;V2 zfr``DT%aT8Dlzha<_4gfh)~iJ0&|37@JPmco1T%$niKi=U0Zw^u0-eZfFX+TQaq$@ zxzql_3wo2$bK%Z&%gqaQX%~H6_d#!>4-Z~%-&uBPdF`z1Tjr){mczrrR6C44RTG3z z^CHmN5zIJNZ|LH%cqsq`wm@t+c@8px2a9FH4OZhS57dq=#HaTjAQhwDZ2kuNe?zzb zs0MxXU=&ahlHrZ(ZzK=46{Bvl)_-Y1s4zU^`>Zf-7dV&_;b>!_Gd>028x=AmCM+!U z?j(+us%7b%vM^ZPe2%j%GN#bM7?-v)RJuXmb0v4KRzG^4T?h5xBj?4tAxrZ5t|mcQ zx-AL*;_g~MyBs;?EQHKn4&TyLpJ>|;_#5|9Kg3|3v{YhsQ zZlz}Omr|~0&{-K^1bQ*0dA)z_GRcZ>zVe0ulS&oJ+3Oh89ZiU>(z$5~m7dsYfRSOK zEC4m2{Hku3c8LhZkk?j)D%H;BMjZ}OcbD6bollmAJU4DtqzGwR?YBsWd*yTK>Xa0Y zb*mcU>-WHUHeXJY!wasMSrhE+9Q?waedw9`Nos8JHCZ#or+hjW+o>%3Id|tAJy;~U zaN*$9j$z9lI{=hoBeHF8K;{!=afe`Bq=cJ*aIj(3=_+Zj3`MN$;eBFEAd5*A2#_l6 z>yYpn7`(69V=LEfmdA#()K&sU62buG)`3NW!BALx-kvDxdtOvN^B@g3-N0u56LbEO z0-q9xO8}{22&pDY=h;}65C80kPl9b>$I8AVQc)ztK>~25lS0Lf6k z;;-xol+hsoQ?7{7@YPHg7xkXL3J=|)=Ebs$=x!+$01I8e;T7@OY@I%e=?fD&yf=Iv zuu5$a15Xv}xOTsmLR=MTO6h^;Eg^R=JifXsAp2O24C-c;9~3Mx5_T7tJwc};i$%us zgSX>2yZjJVAZm7uW{nY`OQcVtO^YFr6G1z&I_|PvDMDnKCNRK>KjCdZFTMLLJ5p$M z?Cts}0`)AU55`#WZju5^OT(f zu*Z0@WymiL<@-hqujK@k0KBFAV4i1#34@PB({f8emU#y`2$KnaMwee-mTURBO2_YB zF0I$s7Yf7IKEm&+?4&W=+N_-NH3i20r8eP8PT%qUu`x75)0ORj7O&oU?lisZ8>FBF z3nN{+9trf{Zfj{e6SqW&D5k4)jp(;6u*kZ%zpH4kmeAoqu`<7mNrS z-3cW(!(^A5xE3TCV*xfJP=P)TlyA2ela2K%p!oE=7B3mKheMcZa0E0Wu zv+*hOFJ3YfcQ7AjNk}z;4F1fhS%IUrVze%FhG4;3ywG6`I5sy}0xW4Om+0MYXJuie zKM+&_o;^w^0}LkS9DB;>bn^@aaO`VTtoG;SVJ*Yoc6uOIP2`cgY&M(j%r$fYTM=Ce zYl;1*T!cWZ?Ee~F6j6-ECPQS99`76TUPvdkG->p%LZr>g;! zf7@&u0J+yX{1K$N>N&HW{s;Kl75c4ZPcD)HUKk;9Fv@I4U9znm@LobV>qfm}vq;22 zuv4f)4~R1szq0{6WeQXV;C*>~-%5AxpA}#H8IJv4h<}}qOyVFwhP~J1hP^s;f==vq zz42!X_%2Mko{(Cl7vlFozW0f@3eZ2jK{<#s%PW$Ex*#0pMGpx{Vl0u0lY)%%1ln2H zEhx}xH~6-3$%}DsB{_UyW+6MHN{{AaFn9L=EpuSgFRKQ*t=Mt ze8u9fI0m`#Tet9dGUnoz?8 zDMAAV+h}`)yI>=+K9v@(02A{1R$T|Yg%uVTEI8_z!#Zk?MjF5=d#Ct{4$EI{kHQok z>PfSL6*3Nks&y6HIs2K57@+!kR)k?>f_M$%lF(9HmLL4{@$3$BZW!g|OqFfuf z^LFS3(uufvL6DOJ2tH7-ugZMn$Xy)IVf5D$jLi0oWatq-5@M0&HcI}bn$AqP1SCF9 zm44UHuK9(-e|%3Ij`jlTdo1TNu{4}B^? zt4*PRDtRyq+p>#O8p{U*4#A3i-3v#=pz(a$4#-E2LOu__@+1#?LmS&q~RGg#H(bx!qbxJ9EOYgE_BUBM9~BD~K@2rf>v6Ua1kew6c|UTzh8?>PhM3;(E01Vm zr$NR%y@=|NGSL?Vn0(>__aKJoYKWk)oicTnC&NA~@%Rk@l75QyREG?9@W(4EG7=VO zn%>?3MHzM6dU&6aS5zR?{LX#<{nD;3u8^0gg5>HM;i^>EG3yyH^>`MY?w(G}$e1TB zUNax7<}RVk@Q%A?{Zs$RC^vvxmebDPh5Ol2m2BZH4FRQ7U^q9@Rp90mJjCXgGrF&7 zgS`0}3R4ZTZ1Zf!dhePETNqZf?7~7dt$}t}S+)Ca^LG7x0pgt&ruP)gkEXzcwSRR< zONnm5SZOVLBPVhfN*%e9IZ!DVjb%+!dk;u_`s?=&2LnNT0ozVYWwJZK=oN|6-JaRr z*2OHjxg2!X#L1c9Vx13reUK=02qx$#4eO$wWG(`RRnyOQU2z}CxKzYCAjcq&Gju*};7%<)JomF=j|AZvuD z_fAQ#(jF@hD;VgXQz zO3h0VR#99s@bboE*y;PhNb}WdQC3#eT%ep|PM z9T|OLb;K1NV4Ogl$5Y1Fq)NYEj!6q4 zW7m~^LkC{G%{7VRKZvEG1jH*l;nqd}>$uq* z)&R-^O%w-|+S^>^IF~ilHFa@NX*!Uj!cPwl0OnA7R`6|&6T}vTG60e~%my{EnCOU# zUOI9?W)J2+45z0x+cQQ8w3^LBv!UYTFet9dKf4aH$New&S^E;4Uuu(h!{Q08u7O81 zE~DxD`~2$Sn@TQWRe8hUCC#Y_+nu*Ez+ToUw~;lU7{+fZz_b~(j!*Z|@UiAWW9 zRe{swb1FafJe37sIC=< zluiNH9A$m6`-d4BVF!Id6UX_3e|0&*H2zQm))^RL5dQiYSf=oBmk(-#0R=Xbpevp&Cij0k7JdV7#{7xH19sUruc4Lq+DXpwUozY9!SnUH zsYc59dkOy6*Yb}SMhJ+WT9`7h2ubK)?c?!*^iOX`2O$vn0q@`Zw~+~WVgCw>Bc-oF z%-ui}PIksVX6V5(Q)OEHSrz}X5dQ6b{4f8LsbvAS?f-Xge}6##%cJ_MzM%c{z5l=G z2AaYDyX)=E2rTlop{xE87_C#2gY#N3NCkG~%asefvlb$C-Tuq5B}CYR3TyD4qHei-!%NFk72iU7YP&%MZNh`T+$lEJO=^_S)eg%pksJtAAK^YxN*}t;k z=j?zNe2EPuB`!Z7wU#de+LCREfA|-f8bBy3&(6VCWP&6*8lSo#zxjDSmNFb57&p~H zHlty9Ke#ax0IpQ<0n{p}M`*m@*_2j8Hm<+jK}a?(N3LZVV^#D@Oo8NjM2k?h^kzfN6 z<*pbtBlGFh4{HF8F)clivGajJZg7;(y7|gl`q2b|<2v>m(wFISpc18jB?f`@Wsqva zR_@)E-=)XDKSH{Qi288K?{XXJVhVtoWd_&yNLDX%3Zzk*9YMsh>`x!^;m-uO|4^lg z(YAn+DH17ksn7a_@L5}yI0#Ug0lN=P>^^iLR!`(J?b!46-3Gi5iJxH04vgL2bgLHw z%umd~^o6q{z>uT|q{ED$zbK1<3SL0hl5!PeHiX`j{e%YUT!Lg_4AFwen}8ytb6Ru0 zI0GKJYZVwvG(lu02y9X9zue2Xq(uQ&#AR}+qxc6()Aut@9=!41{3mb8dbPw(w4%-u znyCUh>BH~E<31ixWRJipklD~30KTVd;Hyhh#W!}wQr-RG8EYXTD2$sIDNxj*i4C@j z=c~IyFZ~YaV`l(8gwD?wghJv%0-z0@_9Ad{@_msiv{q0W4EEBGb2Ep|FF4y5KI^@e z;wG?gpS+d-teGS*)0pa+`EVv|f9n-QQ;l>y{7nge`58n5UfsK~xDK&?62ZjiX-GdF z!9*%tDBM2&&O^6H6YE~*+l46>^MFSgaW09xJrC&sAnu}`sRvN#|1}@BIwjoqu+iAe zxrZvOJ6SzCJXtFWA@JP}MDx)@&3BhN*9p@40?$7wB;cnDd^0^ilms^-Jkc@mvf`Ux z(KjEd>3RrYUL~B%{E*_FU*_WCuxoef@<_%AI+>V)v`M?=_ukc>Gm^rnT3ys>dBnaf z6=kOgbTFTpy1Z~p1e46GSnR7n0p`*dYrxnChqf>HaSq}SxtbXXRvzQcJEf-;uNOdW zw5k1x}zCQR2JG%;8#ROxclrN8n?Y^oDqe*5+*c zkh8`f9iUQ=l1<#q+yVJCN-PmXjX-?M%3a)m&R_WPA`L`#&j8NMsH&%3r0WCh(9FDel`EG*dIk`=s9`!i;Zvic`ZYzWnOj%|5g@eG!~Z_V7e2OBKqWoP zMol>jbU?Io#VRN$6#<40H1*@3WkLdfc?dmmu#c_zEZ~-IJGD{126dt@b1o14E-83G z#k)M?4^!hVk^g=lZOnGf$#I$D%o!G`GgkfR=ZVXs7&Y?lR*rUK;JZ~qd-#m1v$M2+ zK7^k+WgP^Tr$7g#5!GZ^WchTgIb$CM^yVmj!TzhZ?a+!>2`MJu)ZL|TX+5JDj5~dvn zL@r&UeMy-Y*@L3w)Zt7YxpxN*-N`cf(F~;2h?cL#>Hum#>9nakT8Rl@KSm}PCV;x_ z08kf#lMk@Sz-h`7IC%VhBhcetxk%A<`FP6Deh~ni+8tLy-Xex-K{YmeAj%VP{D97s zWX26JsFyKgG05FKWvV5lxYf)-u9@2-!-HC1_sK|sCU2sF3~U+`Mhzxtq%Zo;r~Vc2 zVO`fBb?v!vYq7g@Bc;~0ReJ&O`)RVv!Q3k(Qh2h;iFDj{jnj|aag_IHP=vEf9J9ym#fR)z>~o=bmP4H3b&FT}f`){R9h%PzlK0*$u} zKIm34+C$IpiPG~giyh2>$7l}!Kow0M{|sFyEVWc?6W~Gw2&FmLq*07rFTvLV{c>pi zzV<1Cr@LiGjEWPkd3VF1AoeN_eDUhLR^ouK)6`4=42v4TwA8JIdzmG(e>=b=0+Xxb zvo~8vU!qv==8#h>Q7NG$5sDlR3Ve~`?Y8`k?IJa+g0bNR%X{@GE~k!w&y))%`84fD zJkaxV+OsV?A_0$QK4*Xt;|}CwnAWJ3`KKw)CjC2RxtK8GO@SfUUFOcgy~BZqhd63v z!X)tW$(GHu9oL7GdS<-iH#tnRxbI9t1N@26aKgU8U^uXMRH27vPg%QCa9(1;9!evy z$thvhOwnd~+hOR6u&@^<453UcnAA+i#NJ^{r&3ch7vKCOoS$q73ZAC!rSAPKm&{oD zak^f+WKkqhYT5I!UVksl;qK+A=P}@SU`xG>HD~65J$3>VejyMf>^3@Zpd@voReCV? zOc+Q9^hX6&`J+4{J|(+7{+a?l<@(QH_L&UG1#CaP+62@4*8zbpyD#?X4OF$?j!H{#l8b?(th z&w>1E+KLTG4V0o+w;SK-JzD+ORi@XLZ87bKN%zrOQuTAU~9shT70E8`->p8n6MO3mB^M6)CqpF1M^dx zbkIZ*?6L{Kd=hP2R%#68y>cgH)e^W@HeR5$s2S(jqAjv?F~x8u@ET7th{fdF)Z1bE znlzxSfv{P_w{px?{et@0B;fmEd1%r!A1h&yop5YOqHt7@1wf2dmbp>8VQZhFcQ;F# z*6(a*hB`)ceRxBO-s5rf)d&U1!_gUZyO?zhYE*)+ZyF{?P_~e7dsD39Tyir`t?2FR zm*4iva7?h>1R9R5po$iW6QN@U5*x9SmC)6I>yRP?{{OM}mSItT``_ryAfdD(-Kc;x z(k&ed64D)#Lw7kS(hMC+mvqA*h%_^ZwB(?GbV_$U_w48S?Y*yao%6rWd4FE2c+bt6 zwZ7{cpFs2#e3RZX7&a``m=zG*(ci$p3BvvJd3be6zlC|n#juvCToEe!EX4|kAwCdT zIu%@ZE1^Z!_(-YJTz-5ZsJW`oxptyNso>u(NYD3b&DXXi$Kh)#UA7gi>6v)FraZN` z4U|LQ73%<6=JbdoV`$^Vs!e1taysnsv=w_DtQp5| z9aQyBVX;Cy%x;be8qg_u=B|VaI}rljEc&@7&^caYP7B;xCw#rWHl99ktXe zhg1#Ol;A(TrOrBu!`3if+(JN#Xe#1z84kyFrFbQ{Ku{uIy>t#VWb)1dyd}y$Lg*`i z&kFOnjN83yP9%GZJunrnx}|IoNzS=NEN!jVgr6S6PJ!N31L5&3XQhPM780AA(^cl9FNfUgmI-8nM+}7_~6k4`;F;GyX#~bWuWQ%+eJ6vc%AMF%| zylW?~9=y!LaQ6ZO4IjC7Z@GqXq2h<)=%|1M&QERLt`i&j%^pIvXYCUcm zzvNjEX;9PPjrk7-)>}0%jfv>C_u0{egui2&X@o+T;Nsi^qBYMf%xD!&>eTJkR+KAE zL#kkOA<}cve4l*es`htIfC|do?A15VijNFWE75o!PRnE~x%2n;)AtE48=WXrwK-5K z!@puhX+1hI4A<$v`09azk*Sf18a@y1veJSvw3WJe6_uld(`F-7emAKg;9wi5VkdtA z61^7m*NJJZ^52t`w#5e2@-T&Q!#AyO{!E_3)P9^e$pgeT0k6=2JvmnWeB4gt!uaSM20Jd^+gppM!ycegdq$bW_Cb6@{+#T2jlXB7@wr2x>8%k zcZwu4)6Tt+(w@EUZ_ZRj34S#pNOAyE&t|XrZ+_c3T*486D65FR)4?Sep~SBA0KKP2 z8kNM}QigzM^lcLn16^#m7M$?AtT|rmsMGT-EW2@CW)W+4VVswHL@+~FPYC_}J;v8_ zBGsjIJ}KaK*X-lRVCp}2ujR~5Gh7JDum}n2=uk;SxQ}Wa!%> z+lP)n@nZNGxg@R-_{@_S|MRNo220=FWvem?r1y_oDXSnt238Xk*{yrk=v(mj!i$)( z9QS^9uyx_QNZlD6dOos&ctltm#&NJjGrOxa-#K$yq9m!>Tj|*##;TtAB`Cf_ zO73l95`8?^b=oNoNlcQee^Savc2~#+Kj}wPfFwnnf2EZ=A-Z(>M=F#)$*>_W__j~` z@U}Y|Q&@dJ<=81W`8|>YCPj_o5OGyn<+SORUoLS{OmhVD1TX31C`;cfOF|`OUgS=&`x3G8_|w<`CNL=l)#%{y$tj1ev+UDW+nTc{ua(g3Ry;wfI_33= zZSwG+rtxZOt1`VN(KCH|b@ZqkK*l z!=vDRk1OXSRQFj)gWKEk6c)GNVaKDI>l1DtFR~n1`slasmGXs&R$5aHPk)eIp0N!s z5p&yiU}-SemO0w}y+)43CArR+A&`kL(?{%S=k%BzvZvS+Y)2Nv{~8Cxe?fMvfKx!D z5=Z|ymyi1^`G`LMFrr1}5Tv(} z1no%=xgqC)qz%2|4=*C)Cq;7`BbwGbM%~&w*6GcAIWX?sB&hood9j-&l)nq{M2k+FH28 zFfDUfk@Rkbw@6W5BU)FPC8r>s>dJq`AXg$0+)S(ot1|ccg#SDp;7|`U z1yl3kfqcQ7cfbeWZ7UUI8d=RSbvhapyWCs$Mt5>C^eZ4=fSWK0LRwTj1V3VGp;B~- zc@B!#7liXsECFN;Gg|tU3*cJ)Z2iYhZ^cT4)r=XkPZ+`97n;*YUh(FGYtP1I4RuCD z{43hm1Re7j4~@S?H{VBlLMg)gO71Si<;Xol{Xo9MU&Dk=@O9F!W1{vx~~>+c;!P>jrHeI2UH4|H9km08Vkr(C^%s^?<(^{{|Q_=EQv5%9adYC5xu5iv|M z0;Gf>ZPJM_u?G)7;0ZRo_q}|TGD|U{eEY0`rZ zrt+G3m4&d#GAs66QmP2fLc#>{aO`W+T*?LWxo1LX!##reSiXlJ6=;g8e=y;dNWf)Y z|AcRJi!}NAY^og5EtB&{MS$0F_T=IEzPKVUqMw3Nn5riMS};i@K|Gep+h z_tvB31G>+9zQCmL3`knB1t2nOaUVG4Yd*N9?_ay+%Eg$m$6J08Jtbz9N??zuQ6O6) zGx(+h?1|@wo+=l2R`?K+oa;Q;>V05=#HqyQeM_K3CtTtP(gP8RzR=0WehE^2LKnz5 zhJTPH^`Q+1FQVj2s_JD)knjOhJ~!#!dWO7?JSqf)joxqi3~vmo)IC*F=lu-&D~Bt0 z@}QBh*%zp(LrY}3^DDyBhOhKk;=Z?dN<1QT-ve~O76jyZWHmqwT_SP; zd!XBSFX7z?muuC1Q7)Vz4xWI44aY_=d4`4AJY0Saxv&Q+V?&3QjINbKhEGx0{R$ef zDBT|ntHXPG&{z21RFA|~P}9oNMT9?ZttVG5`s#BcWaUMvWZy`muWBo6R3e= z2bLOp1+1L(1kCX53SW3WL2|5i4O~XP!IpkFSf)6c;Iea7qYHoaxyT}@q1rS{Tv{`0 zq1=fLkxa7bC9bv7TF{pT*(@a!{hqtvp=5)MD0_68<$UTM2t*Y$of)) zUW6O|Z|zX-QWG=JN}WkQIODv{X^(EyZx|kW-TKIa4O>_HqZk|rn3`n)=ryXPS{{p> z$7QvR9}1oD{8{P3zl&v;C$KaEB$a@e%jt1@ias$2h|y}~50y{NTA!&Bog-kZN_u2` zU=5fm-$i42>#RN>aLm=ADW%$yd*g9?$8OwZF6o@m!voEFh%1w^{wrv+fS(vDy^xxAtxVM;!3*^_2lXdBcH-T{bvqSU)aH zMIzSgmiuk^!D#^yJpZ3UDGcQCfE&>$f^XNu`0fuCE=A}c=ImuR6J#228j%zT&DvbH zm>v-lMttr%9JME@LjCuL9qJ-S`>4Cqzd-UkRNx_`ws(j1yVxSSUy%B3OU5`B=2f{p z!oD=#4Afc3)0s225*PNheNN|3PC{vvAY0*`HaY;I*1k$h$P5rEZJ5aQ(g!=&gqb_0 zNA8wNiLHXD{m5&`6n|01f0xYkrX)BwrNk``v0g@Lvhc35Z9R^E=!d)>g-C2PIi*o0 z#a@t#$1K|JxDe#`g(UNhOQHOrG@XBBXg)aQ5L58q7_dslErI%CM`IEuOg-dNS+8fw@#o;eVSiIwrk9FupJDQ!*0(=*0 z;xX)J8`5JbL*%YB`^dX;PtPFnE)=FHiK=a&Q&TU>#Dzd=8X3cU5-toGWLWt7-&I#= zOL%`NhZn&V_qlLxwbCAr-Aj(`)^>8xa*mpRC zEaHnrUfTy81*nm;<@%#9%giK#r`hD(md)_-nqa<2FrrxD2Bq1>_8>QJ`6N*^*NXOW zRYM%wC;C#NbyT-mcWvEBX|ABKdSdeiX5{867sx_ewNyy$msu8fVDGql^0g*KJV>o4 zUE{0y92W4I%mEO?;>tA;MM|~g>QSSVm($On5-d`9q(1i9HZV6sOi*X0tydJe8~f)> z5W1FV*^=|9*w!D!i*l)JmhAl2^3O8ugZuGC{OZS&c?rw7(0WPd=ym(0>Lf@N6zf1C zx`T#LpPMFI9W!n|3JN5vgI^W?Tpl2vxK%q6>#s@vskC!g`{fYvcdUMU7V;y?*^j=q8-n}HB}%Gix3?%lJL^0K(z~Mxe;)g%(ETVT z#B?XCYNztd_*eIX(v=ulxH=iYZ}%zOX#nsRO5G4jy1vZ~P2Fg&eD zKs6qAcO*Z&9Zv;!)ju$ZLVMoo`@ASRb_A-w4kxz`aBThYw^qczYe83{7wK3pxQiq2 z*!7UcybpUl_KHG8`ClQUT$FFjplV+yE{B+P6;_4$@U{CO7jG3;Llm5ka7QU1ql&DtG0B1={K=fFo7^McOGjddc zryFyP^RYo_AQarC(7odD(r1T8hEyS9N$$o7VS9yW>J*>hxjrB5`4SH1nXBVeFPNXC z47=)J5{p@vgE4Nnu+LBwH-+8!dbwOVZ3-Vy!ayssB3IK|Q_ePQ=XP1S5N!N2WkagJ z7bkQb)*>E@5kAQl^FHa%-mN`;fCkY@usnsL_~Q*n;t%foN(n8NRU3@F8{6aZWo2_N zN4uln)h5GTd^*6mcUW``HU!F20RGrA;SVK!hd=M-6MF)KE#%n-uR$E8O8N;MR> zgOzUuejIcrQYwbr)ji0ttGzgB<{y36uWgTknUlmO`Ns?I{D4qLu7*5Q42tXf%~=Io zc2W@??85T6ZJ?uo2X&OYZ?Ct($w%<)l6s$t(1U5g0!<4BMYS>^z$M{Tr^)c$h<~=9 zq5QV4rjPrVCWB4qoglsmTs2J2f__6gLl91B6-Os`F`3{qyyKXvAz#8Vdd)S>h?9}% z5(OfO7%sis7X(>5I2Ij<45_t;$A)8wHH=Tm%yH3ikGWJA4GHY5GtHgD3qC@9mW1pN z?Zt;T9D_C~)1rUUn&5Yp;^8q1BA=R64H>eaptH7o^at;-rKw#grNMm4^ho?|9VNJ^ zKizPixLqEYRHtamV;FLrP)rRI#j>o)89B{ki}|K z-QfR*;B4$yxplBzd;J6-5^N_C;EYOI@em*3g_8_syUiw|9qv`U$)RDreGR`RV*jl( zyfJMfR})D0My@Z#D`-Wz$~5n^Ug?7K`eD|4X^;;IpdyjXTn0oWp)O0w4bZZR!LPA)-{k<^QbB4NH;g=%E z##5xOSqOH-=$01zq$==>-lA{p;io&fq$nm3A;PtHB!L-!uSbSShDDt}pWUDi=RVcT zFFfI|Gu{)KgIZO=E>1V@lV}&m-7Q-4&xrjZ$%R+pJ=#OqF$=A!t}@(42u^WPBQ3mF z_774-Dx6w=d4MIgNRelM_Z~V#k7;ey^b3w?dP8ZL&=f}Ok)TIVsV1(SCmu%Yq>>t= z*j{gSln6p8vG}$d6`0jhZ0L-HF4Q*-stmBKi0tA7j^xl{@HRwkml$CKVO)ptNq}R3 z06q@9iKJ-YzO1*E2)v+{otWxLxG0OSDL+%V@X0r=1n$>u@G{&bC0ZN(9YOd}S(`4t zoppwOesND>37GGdhSv+xrPrurW9*utNmUYeDp&SV`t@f~cs5(+vw7dF;5=->)vj)T&Hn1U zoaZ)}C>hNaZce|>u{a$`iWfJ@%@ZM3VCgAMiL$PYkS%#D8gTtCsa>$ZM?`Ls-l{{NJI=21 zn)d9bM&(8k;q`SuN`WBY?r}*yJh^$(ci*=|H<08YGh$wT2s@EghWs0hLKjD@W|4o^=Kj8@Ile?=2l>$r z7O@0xX}Eoi&V_}NxNTKw!BKMCVK=o*LB7m0Q?Nii3_c!UbS}twuP{g`CGA^kBC5rV zUwWHE$^Eiq6IrWM%?)MY>=;{o4LX-EYq0Kw@a4LZ9d;)QSuVB)c{% zW~#O|yQcnC7o;1BCmf6k6WX8eV%j%AF44%<_0Vi5lNllE(8>dJgw5cHYOj!RC+e)V zKCz89?~u4L53=;)@|W<8+p;)14G&KZaMR^93FmEi%8VY|E|URaXLKdwqDai5%8W<^ zGQ5jV=Xpr-nczkDWZSaXMxN86?r z={0psimj>xPLG=0{?(!RSE69vLu-ds8uKN6dz&nePo3mF&UO%$sslK7e^Y0r zQl%2XgTPS%k(XBHrKGYXX+uv-p^z_CY%-Z^i3B)M^^K~)<;-38HZLG!&|ri}hIgk* zZ{AA}-N|CyDnY=IWH96bwe3u~>2X_J|ae|S)dj59? zyu=-pG0#N`-O$I6b+1xE)L?}o8KE-Ap;SvjuPSVV(h9Bcl(7}+b>B7(8nA2Vk`h#R z<);rw2wW0xrE+>fKhg9(yhKriFf0LErN_tEq3Ja!HB%ijM#dD_x$x!^! zcLr{b2CJ_M_h&Ei)d*N7QdY zeColpLD3R^)BWqab4W>m*y>3mS}cF6hU)~FXH_wGlQ$kQ9X&(~cDQ`e)4zJ6lxtjd;_bd@TqsI5nv~?$%J@^Eqs>nUw8b z@!~F9&42Iz`q(3y)t&joD4rRX#0^?zv!*-d`p9sS!qOZxeo$*2tp8JS`yGyNUKWE6 zF1~CeI9B4PZLmIC5d#(rv&$rb@yYCg-jdxdf5}65SNDpBB6sv%-AF-2#hYRXSD`GA zd2s))+VY@Tv9;`Su43}QqJt6r;cpg)+tdMBv2Ak*JA*?_WFS&RbLW@Z23M{#Eld&o zbC&%3-95Wwn~9eww?ng)>0lwJV7ucMA({|S9Q2gENoVpnfu-3W`#5TiYPyz^W+RSd ziB{gI0iO$~{~cJMP?>ANHZvBKT#?>Y!QXXDA^)%6T!tOD><;^&s30Wu;Eawl{H4jT z`v8=sv4!>P;ey_@`Fp~5TpBV#{i$@(=R~8*l>_SqdTE>4<3*{eE43*sf`@Vw+R$cv z;54!SmKH>5wFP?uhx|0xz~SkZWOxI>0(UCJUJdgTI~h>s0NwV1$csP-&tw!}kwQPDQ}6 z&p=s=T#hCmNXCup3a^90ZnzBnz0pkN`T-uEwMRhFutP$Ic0>1w!57 z=GacN(Xv@GvCpr282BOv8v|o^y#R1L^R&Oth5=iCbQ? z=O*yIV`GiSCT@I<7Ngz>UuS~Ffqe45G6sygan7_9gJK~(y)C7gR?uh(EwL2rf?ogn zO6}R^9S>2f!5Sa65W&mIgqF1v!R!hB2Zw0^&GL6Vn5!9C0qE$^^E$-7?1}BA!*O4ACMJr znhvJReELuf)$-+_M02;HXIWdQGKXjss4nS zGP7?K_$$F5W2*mJeCj**8&g>?JDw2-N`)ojT_|XmAJHHv| zM!y4TxxO)Gu(EiOeIxW=MSV;<*3Wx(>xxT#;FkGwyvT`2wC%J>WmjRies3-Be>^$!MFP?c0W%;zCpw+ zc-H?t!BjPV@0L#DG*2uYh?RN2iXcoI708n1O2D(#r0Nwq0pLFEDgWhP>3r)%`UEobcHTmHC%OSdrEKZxMC2Y5{7A96+9QDFHju){ty$ z2FP+P&E-bGBR!Mvqq3t9_^A^8rlmo24VUVXy6UAJVQ#GpU8%RT+0u;R@0`?ljxCVs#2 zN|HyV8humIl<$ZTJ@c%=0#;rQ-<-bIICGWPcfO*|&Y@|I_76l-XA5rtOw`m)XD!ez zoYb7%LB#q{6Kh-5KmAl*KiTgFwu_I3S*_2mLquW?_8_;(zlGv}*X1r_S9-LD; z)H99ui%saEXhpl~oBcmv8}ch+MIo$N=6dUD-URys%CiC(4n(<$P9S_X0oj{h>Ot$cRU)B^20DFKYmXiac}*l(In$I*NbY=98MdB_9DD$KI-iUe8&6K;KBrfW z5YvwQYhbBem@RnV3sfe*5Se4Zh_x@x!<~qen@A+r%`HgdEzSSId0;Ab#eooeT!DiY zkt_XDcsD+-fDE86xpE4y2%5(x;|d>6CmaF?`Cj^)tc@2VQwFwlb$GMI4vsHlSh_)K zOryV~Y20ca-Om_%uzwGWo2)%N+g=>a)u{y=L3oNz@c_iJ=SPo3SD|8H_?Jl>yBAR6 zH(7fS`uK35-M7FP!wIssV-=C*YiLM_aWpadINRVrEJDuMZ--?)GTs`7CS9rv#|5@7DK%T6|>Pn30R;M_PuUK%kOmzY3K?bSz4Fo znHf>uGj`sBfD}i4E!RF}GKhR~T_pJv(HcPxvx;l$&cS{<+iK%E*{E~gg3`@^NF$ME zU!nT&+5k$JoQ*pt6eWnGwPhUJX#gqJP7{)0Iko)gMCavpNhZTHM?_d~I##46cLemL zHT+UJmD#HbmU+(k+K@#285)76Xt+u>o(oLcE=OcFEaBqGtS4Bj-m77u&iAXw_b4=8 z>_6T8{TVS_FD~btmZ8yiB9`>CYun8!vFwbgN6){0Dd5Q^{SChfdGRB*!FGP|Kqldp zAM5f8aApL2CAUa$8wR{*n3-=!QMueQRs>?q_t`fJYH!e4;^rxDTW|_p=%m;YP)Eo?J(FGXIJMc*T~8qKiOM zlbc=_IDy*v7KgEvGznXM+GrP|b>nkSx_=#JY24+4i&^O4C>J1a`ttXtgy9;Xdcb$j zK*>gtPn!0L5-|C+(TX%RnN=)YlR7TdAT;VlA3U^&J2t}y zQRV~XBh3xAt>OP@0SNw;OIo;Pc`Rtr`Dll{f1}$$DaItmqHaH7jypnQhUB78>>$oQ zo%YYU@wa!_&(<$rRh)VdN?!gjyWub92>JRtE>W~1MX)w&<{j&jkQN6@u2*lI?yJ`3 zRvi&FOs zohsdaw4~pu?-~3-0Hk|dtTK}g<(6rS5*3b90E=ARNuDhd&bQ9%2k#6QA$Lt)8ZZFp zSnn;)*){y`8Qkeg_|bEK0>oY!Kf(VR#M2vbTIK47J}0oEOxOQIsYJ;5&E%R;KTeqh zVVsg6rbPkDBbjZrw9flmz=$8;xi{GVB4$cNz>h)3G#_)oW)dN|PeY&GEnt_xsQu6o zJZ9di=>n;TQWEe{PP;8yJPKDAT}j4S@}k-2gx*_vJRc%d;F6$fm6hJ&5|Y}27*V3K zEq*wH_m=EDhHG=~YE?K~$fZ-3o!(IHQ4p=1BQ2rMhQlnL4avup8{5lN!D$yjjfUgc zF~#VfT?4$+826#g_vsgOV2?E|_P)?yCAtlkBMMp=$>_t#FA zNMba>$YJ@EPYSKv(kI|6S4gbO%R&>+^y*&`gr&+>MSN2K!TXx;+B<^YVTQ$GR`l-o z>b5vXg1D*olm2GRB!bn9y@lVqA*!J8DvQ(yh+c8w!o+I$KFq?+UhVzwfF zVe6>LE9JZNQ-#()@TZ03(+#Ke1^k~l^vwt;AUqLV zD0R`Zxc8wEHBm&Ure#qy-cICt69z9@@-AfMbxBJ^GB1 z5?haJ;F{aD*9b7|i}JDJcxp|(tJc2u+jVu+C-T>w-XW55ABYSj;%1puTC^d6`AaP& zUR2h0U--(8wD15JJ=oD9Q<0l-4XnEqFJIjNKxudM(*f*2tCZKHAQiLniEApJj|CXS z`XMv#?IJ}xo{Zzc%2!^Zqas7U%%{S(63Ooqj|QSmPwLXJzrnVg4AgM`QeF*Kegwhw z!)Xv|`=o(WdCpMF3@fBMx-sIMLE`?*Me;y>{!DjA+_Ch@b>uJ>L8nvN+R)2860d2B(*jOK5ba}Qy^r#39d4P-TL2Dvw;AnFj{W`_>ARLb=i4_qSle1H z*NrdZMhUvP;1&@+UFOkzByHUq`-S);%7!u9fx`Rm94X~^qarH0Ri{ASV3FiMe2pdr z*%PCXJkMAw+QFVVZBN#!UPaN%U$WV2VimwX!s0e(gtF(ix+5}I4Yt@8grPX*H1ng> z?O#~^0d~{-`d1*qDtwT_BXwrx2#48-mr6#Do^tHS@1$L6AIPjA6&Edr7%%8$IF?a> zX+@QjSlr~O1KpFXNZntBW}2*QtnMMPrV7*@PVpD42jNomSk#pgtFs5+z*zdP4EjqS z@aJ6WIRxq)Jt&&eM0y5e4S@upcg=-C%%sO*0>SHI=Gg$e{<$BOq6gyhVUGnv})t!ij^z|8MBpsvu$0YyFK5ehxzrd;Sv`;r|4bz*sxOSyA5ye6B~3~@2u z^jcJKh_Ps**1Dql&r;!5UjUO5xZPkeL%C{tOU(9C&NuI*LpYb~*rm&w)OL+bkx@A}zZlvt}gRduyzXdLRgFJqM>)`eRFR5a^182o&fubM%h zBB%_O->X;UvvK`vxJc^Y%NvRDF0OKx(kky5S(k>whzw)7+vhpfOdru?_Ta=yfR6Lt z8h~(phR4(%*-R+8D_MoC3K~z5&%BSS5@8=TPyy!rJLxziP5`%qsK|(9978Q7XRRoi zY%M7?PP%#>Fs{$A<)u12su;TB1DE>l(X3M*U`S_b(_6KuBU@cHDyasI zY6QNWU_3MVNyRe9J{CNXw0}6;H%*ZF~8pP-m|<@ zV^81w^NtLIIq6rE+`pO_Ru-c?R*lz+6r=K79F#^Y^g(ijsMC99TdCodidT1>ya53# zLA?P5bXN&uSNti!J~xvthf|UmxB-Q5)391x5^W7W&YM2P4G3HJrUl-O)lrk8*;!n{ zFXtcK_53)C>#SwW$Omea^O0m&BOa6%lwf5XB z4t37V;v}wfE}{_0JcWJJNTfP8nil!_6EjQUkH%US77rw8S<>k;EK@MF0@^>G{+~jnsi(asYq#*h9nkdF? zB?F(Ql{Zivi39sC?<*U|>&&SFI(u}x)VeqiHBUIn`=XQ&=rpJMpn@x3j$JdvgYUq5duQ`71< z0i?86q5Pvj+qUMIx|S*y{*+y=Jy?~;BQgFZ)M56iL_l+?J*poj1$Psl4B#cJXM+J* zm#d+sH1eg|9(J)o*;|gqJE!sB)a}&1S}DsM4!SM1^DiV`4YOw(CLS`3>taXvv}Sy@ zSxnb53-Z5jF%&tZTRE#6u`Ttr!l-ET6N3R^1*LcK(6s^Rt{q*2Q$bjEGhlv1;7LJq zw}2y2uW$USeg{N%=T%w}Ptb`?CHL*~)SnzY{;=rXZs zpz_~ZV4146Ka!nM-xB>02l-ja=&g|;5D^D+)`6w5wKMr_!CUT@d zyyod0t+U1sp|#@5Y2fKW+2>B`SH1XFFQcX6*V4m6{;As8(=RECBswdUy<^m~Cv**bL@d?&8H`*Fc8l52mhV zeJ1=PZ%pjO9wmqYj7kRY{u0Xf1R!9)8}TF~@FqwOSz_}z$*tga_GJEErGE_^w6|H} z0OWnDaHbWFIhZo~%1%7r*OYearqoTr{(2n%Zwx#EN=1>3`9a5>f1n(|xHnWJ-kt4b z$$A3C`+ACaYQ{UT2qy`WyJaZbQ9ZIj}r2*oCC%KeJ){ehuA?~IZ zFl!JkIB5SmtWmJ-nH9CB8>N!AOz{_|jpbkQnu5H?*Y-dkWyHr*$D3_Bl$OCkLVC7~Ccw2nR|BjD zxa3ovhqavZw+kuZ4YAbC8wrieUebtdnQB;g_p%$I*+u`-Cw`S~@v=Cup>;WQ`LX#| zGCtgVu4ly9d!6+{_aet)>Z()56ZW6;hwpwE_!#;tCzLjvxY3{PSPu7tWo~%e3>&=2 zYrFh1ZG6U=)!v7J?R&w=jLP?x`=b2)Qife=V?y`WperG<@$$=q$wY?y(#Cy4_uJRX z&c43M&RTo`#XzmoaY_;zpw?bDn1+dt2(UrlErRT_w8s;BAQq5DBAz8jax<8C@TUpy<=YfIDG-p(E- zjYwXuPb7^=&YmR&WVx6u(ew{W2Rr`?65}3zD-LA-OKSiO0X1yJ)A?V>BdXO7ONhYG zo~`~$8C+WuM_`qg$yGO7%8yD#+Xy0B<*zhxf7m)% zN8Pwor%j8#35kw=J~;@qwcS6!N+o-M3}Rj=2D6~DGO^03aYrH}hwemJ0DS}^Qq~#wBxrx5!WCOb z8}M5eZho0=mn7{vzr2`gmzwT6P~h>`^f>zyt}$4yp>?Vhu9T)kp{FxeYS9DH0b+iZ zr`P;G+(!WLka9b$OZ&ztKg^OyX#@kT^m6XLHmI{!sRxFKM^&j!33HqkL%H7BCMFBa z8hw`iHa}87R7Qf`9=IjqS#vf#N~DERBZQw&i#4R5ORLp6CkX$jZ8x3wmME=#vmK+~ z0eSQM)L7;uG@owd%ZORW4a#Bo_EkbIQ;9Eb?SKFB+x7>M- zOE=!S_^^6JLt32)_sPb1X4jP2O4%LrMVk3DMWFnm4g$Q%Y0p#teDAu-|95Xrmy`%( z?Rz;pKX-ws_8WBkG}U&}Sb56oW<|a!a#!kz>-`5~JyX9G#tcA?`K##pa#E5}C^7w~ zy~wSb2XD?|$WM{NZG281Ib}B(_f=Yeus;Zh^`y4!OaWiRBV3^UQMU?k+mzeHqy6E4 zU2Bam?>WrOlc*w}cCYsHZFmm$@A_M#lOLVn*z2>k(k!f>eZVeKU((zE7vk@qT_lK^ zDUJt5y)I*xm&VAw(7;{%e`b7IlUNfq*p1UX9#i8XoE5Jt`YjS!LWr5=x;jZLQ4Ql6 ztw+P8@Eei!2ZovAPA-~$k1u$6$Ec3vtXuo=j}1OZD&`})(lfbfXeavatxu749# zd8vpbjz;7LDF6+qRY1ta;V%#{NovV*X8~aw2IkC_&Eutt9nNvL%w6fSRvrNHx>{CV z<$$r$su|?h6lDOU0b-wCCM++t+$v9hS$}rEsn?D+1_Xl#F{(I>^}1$3$L89Mi|c?2 zYy0~AyxEB8t9~#!j(NaWfX7Xp&s%@l38-MsIsvwng!mK^s($QB*XOT8u%srBZu{$V z15V!l2o@E|t!22CX!J0r7F~cL?XRAiVmcQXUM*(c@;M9xrud}s=iz_hr~diJe;?C- zqbdKPM0{Ct3F${$$ zbOPImJ8F2H2NNCs&(C&z!Tf-m+vK6wKY#U~h5Da9>j<+Jm;1xo;<%p^Fzbn|Ui5PR z&oj&&Fb^(0Co?7euciN=p7_rjNnjR$Ui>QD!(7u9(`s6LcA@rPzZ&nqhG@o_$ASOe zmj7O;|8cReF>e%nbvQm0V!w=8&;4>=AT<7aB%e-=`D6#F4|+ZSS^EF+iT|8M%-5HR zBD(!Ut51eGmicEfH~0VjTvwtP3`&=l!dBAk|Jz!~NCR*5|8M30y<7iZY-L_349OGt z2Y(PSU+rG?8xAn72f#(KTa9vUwr{VN2DWkI#~g<$gH>=$3EU(&))`l0O~D6 z94B`*d}ZrBH^%&?bW<2G=6MD?*j`D#FjZ4j_M>3K6Bbh?w3W4l0`PEKSDU~~rG-mJY1b6fj3 z9Js1nek}aG7zzqpq$oW%xBB@k zrx4K<(7SNq1~j?%3^T(ge3m{jaQA%m{RnK*4i;KWfk*234I^zcAl%#n=rjps zIMu0eM3aB5a17cXpvgHOu>FLQh#!mwTua{o?!JRBR^pETbO3H-6Br4(LBNW4+zA-u z1l1W9jkWxKn{x5%&~y?UdpP|^8i1+40}g;OS*q!{Vh0lTuX0%OX<+nGxx54!o**DLiRGz?fIR*#k)_tU3^B@zW#L_&^h*cl3l5=~WgX@0^=p2o%e%AH_uKDl)@nuklI6u)fR0i3{O#57tpG+^g=X7CQ0Lij6}#*eFYn2Wj z<@Liv^aF|0`~P)Sq+{~$+Pmtuy7TJKu9u{5tUS>6#e&Tp0y23OlVLZ17;f?~>VFxp zsYW80HUN#gn}r8fXCKIEa`%DM!|`9@w$8);ll7nGZ+7O1=Ckl(c>pi_?qjLj3kWqP zqDX>}CEX0bh81q#r)f`koh5yHDD8q#09qDYDY(xH@ehe(6uqCq+o32CLIrMp=mtw>0BEJ~zHx)$MktSg@Ty61l8 z+2)Jb7h2$m(JN6O%8&jGg-S*+({C)S?fzkK- z6{3mXXE!!&KNNoH$t{r=+Uju-pV2|S_JOR@x(-R=pWL>?h0Np!c8ZE`dv&FXJulLE z75{kWv~yTyDss`*=;FBx@apE@mNy9#Tm+Wy9^Tf=Yf{)3WBFoy-KT`V_Xtw}hTL?o zaquQTP1azwz#A8}ou54jPk2und`WnIKMHc^s@CYDmgu8D$|YIrvVY;Sf4~5W>}hx| z)`#=k77_^_aDqeelZFm#D=B(o=s2K{B3}Yy8_Hfwn%X&ks+s*eX95Y)k5(0FhXh{U z@IDy`#QXuaZSsH(!<>HvUDfTVxJFqb8y5KRVR=u0OfTWUN{N9TkU%Dh!Ci zyja|+PdjE=GV$hGYJF5v9@%>3kpFq2KjnL( zw-E)3qY_K$^zddgdwS0C;+dY5w_8hA%zfn0t1w*%t|JN6W zQVDHo&~>N!$V*gSKIi{@W-u8XAvCI!tZDSgA2-nQ z-)>+s7D-z4`4VbQ1xq{anau`tqPV90DE?qDCJlIokK6B2uw<%Tq8Tg3J!<h|LeZ=*;thfzowMWGVxcV}pt31&k6EplOR{B9b zdtugfRH+}ux#bcEiJle8x&G7e@YK(@uRepmk`$Cd0V5hU@fYBukpB{NyIBLicVx^0 zCi#n@SR-adan86Qy)H5xNN(*k8<<|csg4ucVA+0Qe`n#tyJcs?791aq023`<$J4;T{-Y*2!=zS$*JpIg){6T?N5C&3D`XE@|&(oiD3-8_U zZjQ>(0qde*m^O+c9PG|%ScY;MqR!W8MUF#x3#zvF6ZGw^*Q>KoX9I_uxmyNZ;05e) z{oc;=cm3_?>^N04W!Bxwy$z~?cgyt5n?n#CW}^D>+a2IlFE3I6)3xLe`}y-*>3cy8 zvfHOibXQ0eME4K`9vo5^KZKdLPzc;rz~a4T@Mn566f!N7+AMHhdLV=zfK~?W+yzpSMi4NNGed0zYv&MYkx4bz{sZ+X-boU}y)h zq1}*ByqZ%>(JejpW9yW>JX-cEa7BlzDo2=|Y*~{-zhd{L_`+JD8>kp<2p%ID0ju#p zlcQb}xy!V40HaKVCinvsG5(T(^&N)6XT}ULfz3NI9$M465EMzkQ0`~ zngS!KJs}<7H4sf4!-EtlLm5Btukb$B0`5MBo-zH)?I#2=_o9rExaT`yBmcCM4sf)e z#D|sFL)P!M%MAyi9Q0O$ZYk?->~l#l3k`JvJlzm^*miD9v^@?h)C-`hMTc(13ldxd zD-QNOGmth+tlYRtf>Bu)L-0UiFz;n+buz4?%k_;2mTp%hO;j=v2R(#bnfa<(B#u=&{Lx~g5R2Kz*Zqe7J6WdP_poh7 zs{Vok8M?%%kRo>C^dYSzT&Si*C!mbFo8aZn4VOm={KOU&6BtS0N?q!jTsy*br7-7N zNcL+6NK~vVzdgsU?-eaFBgsNp3J-qm&q4A(;i`)-W6xlBxhVA%j_W81J{T|wf{6Z_bkqV7pcN0PF;=CCbvugtQ!!JSP*Y9ZmdtVgVC%N7d zaE?^9roCSr{VV!9ihyzy#55x!fa@2@U3U$i5jspW&kwz&3PRyD^40o)FBD5>W_?-Q zL(xM!kWf9gSht+5N8%;1%HZ$=v&<|>|3kkQ z{zx7?OQ_d7R|0bwXJ(~&dYWxHu44Ly?97vpCXl&-)-NN!9*uO8Bbk7tz8y1l`W3Om z?bLHd7nt;txxJ*(TPtpDF|$TfKeIyZiBFBjDi(h2FNm**y`gS-+*!NuX?nZ!rDgxZ zUxi-7uZCPIKYdE!dDR~52$tWsf>`c%x5L{D6egx?K0BwLw9lrBsiavk^O)SS*nY!m zpABJbNCt8qanHsJOWKkP0&cdO>TbH6OoQ ze72cUqrb9ndXV8@GrM!1f0IP?*Af$&Mx9s);|e!j|L0SRdEBpDi|KTztI-T zvL$f+?VcFV;7yL0o43A@(mO)XAzvXTH_@?;NoWM_e_f0WWU8GjPwg#qeNjErVZ2P5 zS-Im`mOnouwlG;?awwmMj>6C#aon(qc>S=-iMA^M&johb)fU7!DD|1*=0a%3xot{cN^~HE+Zx2hjZw_Irtka_% zB7DqLX^mytSlU^mYBC*oIp)4#(bLfU@G1iuL^-t3l1NA$>Ok@P3`P73-VzjnzQdFV zaX=%>R$9s#AyaQ3VV-o%+=~QN;BC)`19=?}3ix|sUnw2aw^Ul`&QvWRQBZbA_a7CK zcU_4Ih*Rr_KqF8(MzC9M-6;Y=4kKk|iF1~L&<*j=@wf7y4{Jv$^?J@meZDJ(W`2t` zV=Id^K+Bgio<6|QgAh>Yc9YjCNHT|8T6-4dgug6Oydl$)?Nsd~RoK+%cAn| ze$pTBF3&noE{0!0F!E^3*%mfaK}NPMzw>5o`_a)o!42s2h`*-;^{$lH@ z)+L1EB)>}x0lFY#re{p#!Fgj?62G`&V$KR`fGZAPER^Jy}3y#DRG5 z$(aF*cH>LSmLZt{C5)eW+$c9Hc2TNck>&+?!T|#-6oXFAu<%-&UG`@K{#JJOQ1Q~k zV`2NQ7qTbDI&zUbeby|!9-UmIOt6e|#tmr$SP*|WZRmCL#jI&&E*5Q$`I~G=& zPVM(h5C^I45Sih78Ws@aEEP2)^9K#FN9zEwxm5KBT+^;txMSsT2C;P(sf4Yc*rxEJ zIw<`VWo8|qyyJE}3_1h*@42OqaN3yDh8qv1sXx@>7a`NP{bW$Y^#U*rzAr>+eRd}Z zh*&@7(eo9wcp92Pe|PK1r;w)Zib9nBq8>YqR21VK>%&O##a`?yF6*x95}m^|)ah$r2P)s-D%;&~So+7gbf_Q^HIYoJuao=3 zBb=eoeabdmV@B*4LSuRb=c#X?9=ZmHwHmujSFUgb;j#<-43))I~T9@kEz)b+FoSWhy74o=p{5XkT_}g z&JY02MM+BSec6B#pMR5yy^|I|JKHs_Bpf&(a@Ys?WpUfx?#CUWyFWP9VALkJ;gDe| zUIsKqHCVwTcAqfSr^2Cigj%10pySAasqP8n7H5o(#Wz`xM)QF}C3D~m|Hn0h-Gmh3=$9b=mcHB5o0itcm+z5*-b^)m}-|p8L#++U^Ijg?<>Vc zta!JA;6Z(&v&@iXL3OADZmnRG?F^4+k4cB1vN{r<7~@BKUCS{iS2@NH4WnXA-uL%> zaV)W}B6g)oZzJS!k_v7nnS1goMej-QlcFbDVMC^TaAYSfSo zsrUgsOW2xV%@d1o34fKJF0~+O&zK$B_SznzvK*Ql70_N&fTl`$U<3F&__2%-!5H#| zU>@Zk0wd4p7gKpcU6+-{Zg=vt&cCa2FDYMHy0b-LSbsndgSJSn6RpeEU}XV18=2?* z^K2$Z3fz)_7P*?osk#xk&aeL+LO1pE-EQ~3!Z!cJ(D4!c-@?#g4GAb;YlNuJjfxFYMEl;n;82S!<-B9@G*d*O-JEt1sOeg` zW8Z&leaNq-<0{vJ*&xswYuo)$ZN~#NNA}cSYKjI=fAol2&zOp247jc-H3^XER3sZC zDvXzICW8BH-{c52Nx#j_A@NGGHK^hv&tRs%t~XyS?ROn>3#v)y)qCqN)~lH~HQTv~ zWYeUg^r@djDjBS-Pjz)Bj7IUvsL{nLxVZgRZ*Cx@SD2~n9M>BwZoH(mx%H=N994Eo zE!|zI{YP=n_$v*OvHjN$IGH6hQtCsS#G5y`Un^;-(dxO@d^j_S(TQgYbX7@ZOz*bG zV3O;-VfkQ0Z4qY4$Jkk59%-W316BKRr>iYgvWF^NE?kW$K%-x>Kl}zxY!Y;a*W!IxXUl0k@v5A1kacks`RdIL!8V-OF^!!V*t>xFdu|B_19u6%bRn#2u4#zY|%ywt}V~>BD;?zRO&N z(#q^tpFD0OT9%0V(gctE;g}iu1U@+9<(j5{Pjqk*#h}9u#r%sw_Yv-o@1olgyh{3; zhgIJZXX$B=YA|Eku8ObI*)63(p+Qb#?9Vd(vN8p~i__3Z$YLtCL}z~O51@s01kfx; z!JkFwY~&w&P_#nlMeu_2d}kcGA^10}15zRe{;cBiV<<0EHpf{Hm4{hK-{2y|>zT}ileLne-wl_kZh5doLCD2#k~qf$C~t`onF z!&rfJHSvh}S4V(in~{|4V)IPaL_)-Itxu{s?c!5>;!@S91^zCws2A{^w;3@?Prpeb zVnZDwvcpf_5Ck^`aAc}I)O5ydOAi=E!*l$ zbNDVauBqZ}bR6DANNvFyb!iJ-BqJIWXgjIt{w*L+VS&aQH*5G1%QYhVTl|UIg}qZo z$YTWCgtd=1 z>pWKzSXOpFj>>SX^S~eN4~*C%vXY8RoY1NC)@7xhxSD%}8Cv{-j>8rNgc3V%3 z@bsZ4`_1?t47w@)|6tHnFvxhCpqr)N%ysPmtdv%#1EUqdlucaC9NZ&$LrNUv9|>-E^OcHFd;3fXq{QF|0i z)TBW9^LCk3m0u1K3R2dA_b6UNVk9O)K`1Mw`ubi%Ni69-JYsbQ+syFD=-I@lrWAWh z1IcCBk;|5K?Ntnq1M;O1fe%c(2(BEnf6zzCBILL#(Zr)($RJ2UwCwdx1OrRzZx~O$ zb`B$hSdmxx-hH9FUp{7%Tf;K2h~R&6=K+Fr3{yre?I&{^ru40)dC(@=Fp^;5M0Eu> zzPXG=Fl-`4|5fm*zryzxfo48lLj6FR{1pJ8dwO@}2}Sty{}DjPa`8_9-D8WURZ0aw zr-Tq(*jWoFwD-IYj>~8}+ z5e@N;C+rq&8?l57Zn~DxmL>?-)bCLr$2PH4mtIyPxpBj{ztSG7ktq(5Yxq{6^0{nS zXKX)&_u zxf%up8^%=NiP^L8_w{7xRFwCUW)?&5QK`({g^9t|1bs_YXqTLwWF8Gj3Wz}^b2@c% zdjXPWxgK`G(fQP{;z!6s#!eNoz-RwKpL>_{-_z$tG+4_AQFxkLtsl~s@?8tgJaMgj zdiCc?$R2hKuGd}7^Bw4(19rbGqbyiM{vc1mtz8hghY3a44~frB{Jie|H3eT6u`mUX~GNAJ0?rH{7jv#aR4sO06|FM8l>74k#RtLLL#cD%Z ze_KD{OrDP0t*bOiFjOrS-kLEv|Bn(r&!42ZS`=w6ESr3tQgBTplWt1@V3VGkl^lHg z8#R~r-=pS=`0T!&yIys+1%3*>UGc7mMBD+IF3|O0TSDM_XrB2^=FeFNx=ZDFt}p_j z0O%eYW>e*PubwTSua~<7d_;66o&-SgNmK;$m3<>`3NV1e1aZYQG14_Wqla3QnCdjjtL6}10_gOM8sln<_712lUn4<&` zLIj8K+Z%<>C1$-c3(rJ*`E0EQpgXa_escO*jsdj998Jdk(+}s&!I6euOTz0n(6yhrb9Mx&Kkshb=6ij3)?9xBAZro`qjR>e9ePtV zX&Y_Fe91*`ejdf7dgr3b`(z7@IMytpNsO;mQ7@t8ye-vN84~*MvSeKGH@Ns6wk~NV zxJnIe4vn|CB0rr7txXhaqg&Z6g)xok?p0vUd^-;H&xdE$!dxi0f4)+XR@FLshMThq z0^a@|TM_-@3uc8M&>6HR-7ZXiw*<)s z$n{$=dA|j8s`U{nAVOiiQ&IQ4T~ z!N%tcTC1$f^_XuD1`09Hf4)UpefOBEi^{#!G1%cDAF|pJ8qv8uJkjH|k>MU2$;s_z z4=ed&9{&{K^Y6ywO+bt-9q@+ijHoT~e%_giV$W^xH)!LR94Il}EKww_YF_ z)IE`WpbO2|1l1b(cBM7(*FR2O;#@NEbE;IwwSzkAFQ*vIc6$W@JbaAoHowY%h56V? z#{|R8Hl|v>n*KLob?}QZ?HjW?qzo6^6)u91nbZ-34O={F17P8f!8GJX1HV+$X}e>$ zi=p>429q}r!kaKD&ynmF%QU6XP_SEvs9=|7MgrrqN!cjF2Au{Ld#?SV(@Pk0Ga29H6WRT$O`z4 zz0?xxWC~D%ur2G3G`Gke!w$aucsFWHp%)|7gsH6m+}6rIJkxsgpfr>&uR!YPKGS`a zEO3!0K!O6o>DVje7K2N1ySA1+Y(2v+Unc18GWy`y!Dvq?|IkNB^u!))VK`mkuB+gk zBOhy^Er0*s&8A$tMO7JQ1R^tPL5<_p0#-ORtVZokw!Ef>>`0X;2?H){CihYRZN1CH zJTMX-$%b6o|nD=dTY@1`^@n;9dQ@RTw(I1Mk z=L=U0LPHC8E)WMAHKY7QIgw3I#ixPYA{H?fXX|a+5h1JFT3qvRJvX)K8m;9Q1ZOW^Ytn%It+dV+snOJ8w*(zlK7FbgTeR z@)PHSlU$%dDve*F>SBr3rN}#P%DPc4fyI!3IW)HJ<|W?vwwCFsKd_a=o-sO5Y^u27 zo4^|R8DlEqEk&(c9M?EdPy$lGK~%>rLE?+j_GZrK)o1*GU}4B|*xurNr!IPvRxkmu zQ(@n@tOCdp=aOy}3`rD2-H$-^C>OSj^01P^MSpMun+}ps<^|u#^&*cV^LRf(xn0e& zMm8HpXJNr7eA|lgwionJV>PNB(!#QGSb}i2`J%(d9eF%U&HpEiW(yXcz(;SVvcoL09T+g zEGt`LqKt|w$)9h@WI-rlZ$Z;--kK|O7~wlscc%`P5p#V%?PglMrviDUOAJ}XWS`2< zCYL~uoY7Pz&*iDHT=cdxm56TMt#M@M$vWtP!54o;z(Ii8vYmWn z{c-=%ciQ<4Dk#wz=j#MV<27|`qj(FY$|oONWnFh302YwP{bBdgDMsp~trS;mp|2D( zZ)+*Ye3-JP!C61EOe2^2OmX99X!U!ZihfTDaR>iN3Vu6enG5bE#IDnw7O>;CBr1X* z_Zs0H*$vv>w8W7S?xy->k!kC4hYg{ca%gDLt(SssRkI5zfQIBrM6~1Ou{o&AQl8Te zc{mkU3+6{c1W+z}U*UD{O1?er!<35maR@YNXnlQ(yy0f!7Z3aYG^16c3&f2xz%k3(M1?dn7bf3>Ia) z5@bGVN>9U-Sb9n*$~(pNybY~61QH38(2+nFu-|#b3`^8div4Ihl-sl1t?Ss&H;IwI z`?&SI|4S)F%uCu@r#Y-JA!YfQO5gNX`Lu-0S=c`~fM*SKGWXTDHdO;|17pc_)n9*3 z-6duR%~PXcUIkZRP?T=P>JrRm82WLN-8rC-zOlN6Y)DRA ziV*69QI9)^IUOEl_I*MWQ<=!){)EyBjjjH2>_{O81?NNxEDbRL%jl)F4Q|%QDVeT| z8WXK6-!JJ*PHLU)WnoIX<%uZ>3a+mR-q%JNy}@Erc3yGPp8$B7W8#tOT>7i7k+Mnlir^_rWk1UvvHM^NvnHM>QiH~*@ zaR6N+)*{-ZssqpjKA6<-SgpYKo@)Mcs|Cv!0ET+2a-}w{PP*3KTWqZX;mn09>%uNx zmNiFtmXU?l2IBB_{p@DC5nGnX;i2(7imYi|8}2)w4)Cs=^Y7N2d$9Jz+m5*;mg>*T z8$eP%;(}qUE+(|;mxBLEY9jJU6s~I?651yWY;d(lTI-EK7G7$0|MxN7i2#>Gc0iqh zJDxsa8kmo9+FdUg3`)XLcPjkc$*b~;P3$m&T|n3f@`n*PY@h)v9TT|?7I*hN2__}lHNQ^)ayI#TQ{if zh_c$IMRq<%#0maDANd|y1-epih>=9vQCN*6JT7#hJXe^pw7;_Q4j5Bc#$duRIeLo- zke@IaUwQCui+Rm4@yiQq8Nh_2|APry`+A!O)-sk>kds9 zmNH%=i_J`RgQ1NTz)(pMAw&j3lSn@^Bs8M+4c9$zN0VbR#qzAk05jn`(z;UX#(RC>h7S6BS#kgTz{5Y~HqikGn7SJAa z_>5FTrX11iK!*i%uXrmP4fnm#B{$5-MCx+oQe?s0ert$Qy5)!wSdKwRvQLvzjl zj^GCwlV>E_kjKd^Q~ZjHer1+f8tCLYY*RV$b+d;?Zc?96#VUo7nuP82*T$gb=S6z; zxNJ`H{7?pLCB~{wAZ#1h2!Jpec<e^8`!u%)!_{$Z#FR4kb&z6b|3tgg%Y9I?`YN@rKYo^!+Uj z)Z}J%xeZBxEv0p~k4=>zS2t0}6$n+E%YS0wwp`2p#=;pBQ=5~gZ%iZ1V6?Ki7i$4N zNA^;i=6={fIpp_7Fy>bsEhl}*akN^u(B>z1aI)VAoD~4yHUAI3>yV_m?T-}ePeq%? z$8Ttw(_IA*+Y$Usssdh^SJY{c899+P^{b`q@euWJhM#M(-jEV$ETE+b#VcG8LKIXr zOt>imTRCcDN#etApxIJhJcMpMK?5Et;Ix5?xGjMtADs`g0)N9x5jdbs!sgw@bc@PY zx`pftrqn5SE3y%9BgdZlR`!cMx_KQ=50ttA3HN6RPMnzNp8{GWiQc46l)mrn#y*rK zs_NrLQRn)KpGN(E#^80wZIv%c`i;R$u()L6V>mwKcB zGhstHRK#7o<1uk$6FDul@d~AgAtOg=h3Z@KTO|h7M&_H z$gSt#qKCcQ?q@0eGxiGRHK1l7eb6s78ir8;n)_p$eWh@`)`Z||NwrGy1=q}Y$FJv^8cDhVDZ@6xB2Fw-&rTvlaaXY2A{rY75l znO_AO(9qLWuSicc-1$K0RczK=jkK6tZtXCSJd;cURdVgyPi-r3E{HK{!!>@{tXh|dM`W2Fd>zsPS>511dG@a{;X2Fr_0*_8p@1f+svoPE{#s^P$BxFN z;PVivKC_Ed(Yh)g%x~|-tjJ#-Ve)3p42#EDe~vxbZq%b=C1Kkom5qiII7#%{C2}$y z(EH*6WKm}(GgB*LiAQ|Wub2(OehnVN z?)bjD$o2BoPlru%Mw@x2%0B}6@Q-YYqyD5XN#&v8?GSyo40r69)a zDT$ZCn6>>(W+VvTLinrJO(^2gs8~YcxLY+`bjfb+m#Rx$7@OS3nDPwggj>;Ft;=Fj znq<^9;yH@4*zO$ee?~YHWU4jz0DGuT!;lx|+pkf|mO!yQFWW$>*22cQUrjGjDRLC` z5OzKN1+6)`$KeHvOA1i~c^yHV(PM2PRE+?U)-dd-Q{2;3nn*ka%Pq{HPH+Cy+Q?$q);D0Rek zr@EHkEd^`s#2{q)3e?VM6Xjih1LMHYJ|(cO>O39WzLz{nAHamI_(LMsaV&ZT`>%dz zV9?2f^%6SN&F&BUiE)*w29`qQCRDpOn}Kt@Acg9VyzEE^!Ba}&&vihXgAd>PCKwS& zg>Hc-X8t}Rna7og=KI;;vlNucs#T_vVx4;{F_aIaf`t+vS+|L4N zPF-;;bc^`r*M#DS>av??45X$hI(W!2Us7}ELy8u?!pME9kh{Ctx4*@WgE=w}T6n1; z(y2>|U#)PWA20YE2A6`6Mj`~7ip?WH{Gej#Te}=VB_?j?7XME@1Zk&23pz|@fhoRI zh{tUKjnfVGDf;1nGJ7WRHR}PT{#f&QzXJhm{`FgRk(wwN<%}a11*C!RlI@*-H&wN=RLlF2S4D;m+BQ~s3u>}R>?>*FFQH{}-=y*UV+m?0VRKGm8?; z`wYy2+eHxq4}%JdA!TK{#5|A6n4QU0If#r7PS$>h`$TZG!+(EnihCd>i6EbO4+AD)`K5p>#i@~?wdd+Z%Nv4a-N zbk9{0y_{=3Tq_RBE!%T}??Ue~!0i~BhSR*+{~=C5!t|9*h-TsaniX@+y{v^Y&?fo` zM_UZnyg#xfKn7PHeW(gFoV-0~xUL1B$SEji-%RllxJN5W-onT}zjIvf?;B&?#C?_i z3jL1q0*mu4QsKUm`J0fN3`pR|y*%_Q>_?|51FL%#Gd*yrruzl;!YCeS2mt;?a_a|uQ%%qml=2J%i|_ovfC3AtUMiv-pYn*VNAj81 zsx-Ivbnk1!Ha9pU%E7La6tRbbUqb#jd2Wh-@Z8=_F!uf@&rP?9pRK4g+x7nDu%(}s z8#h@$1Gff7`Ec*hqnRx8+!3czjG^vBUkh5#KYzFo~+VWxd87vzN#{rs7Dzu4cmVDA-Q1mb8p0)j)rAJ(j=3(E9#BHcNe8W>wt!A z&l~yk-*QFgzq>H4f{cz7j{MHLXmF@OM@_%!b8}G_=Kfc9)Lb7kSdF3(zml)tq?rIk zfC8cw1*_&5P}sia+wu5xwE05p>l=i-UDp@u$zm-X0GaIoEm!}io-x{x$R;>^?n{>E)-Gnb*=D?(!kKIrdv1k zBLeqm{odUJ+~yI}f~CeV@)zyr1ba&6_^u5%DsbCA;YAnjP=Rv}GVEMinkB2dC+S(j zPMj9?wS!z^o@MPtaKDE>xmirhc7jTuC)C;;5O@r_E!kPuPIDt~2*suV#m++Tn~n~X@!*XrkNJHUXCc%q!|Ze1`Ca*n-cd#Cl)fvv-pJl5i$OruY4Tmb z^Wp;k_#({?wJixJTWQB|x2#$LNBz?_GRs;vdrhL#`OqxZP+X^$S>&4c_U_5@>RlD* zNA=Id){bA_dHkwnuwN-%WMSSRqoU2zk)$k8=)m$xw4}T zq~P%KCCrsBN?-2M^Bb6?1Mli?I+?na)Glj(liS+$jHxQik$Cbx!B0~ko-?jVU*`Bvas>uj* zXO8x+W)sFevy2c^-tOuhjn0E+GlplqGD@SB>*Uj`Bnv9db=FCGxbHT6M!17uex*;J z`aWOStbCqpB3YW9dWz(YI-ZxM{ZN*T)B0A)*K{)8v0-jM)5uH)$(Z-nExll}y*FZ2kQ5k;VwU#5$tzG-=O^+ncu9Fx#E;SrN&LU$(qE+<5HM zvVsNihtCxbr+)*r%;|0&0$A4I6tI!P%90JYU0Tz*Yqgw3l@I-_{OfP~$yE8`FJvEm z=CMNxc9#_+FS7?fAfG-I&aWwXZSFEC`l?13G5I{%cg(v)jD7lg%B|~U+OKTbm6}Ny zG5mY}{@SBrvS%)|gbSmj7+W)S;`M85XC=(|%G`3VeUeUu z-ktJXMah{cqPhO7qf%?0nSjN|c=AqVcZ5biIgk6xyhx^2GT zI=v9m;u;;aJMq+7`!KMu*DSUn{P==0D^=VBH@Y!Z!VF<+aCuB-zc5dD9Kwl2@2nUf zHJaf(t*cdCoF^s6&=j&vuV+j{Lz@X7mYW@UW(+H*w~R5!@9Xv=hYNf{gt zyYfo2NkPt9DlrdhJ{qF%`)x5Z^f@mtporEIu{#D!TZG+TxX2fcwwzeoRHt2uIT5kX z85}=JSIXoOIs6^>7nc=xW?v zq_1FY>?k+W4|<#HaO=?k7Lt@q?KswB^m-$l#P>Vxui{k=Z1t{5Agwtwy{`1TS@cej z>ITc@*ZjCm3Y?Tk8o?1!-s}28tAipXqDqwRk8BN?RBF)aU)K_Ya(}+fK7 zuxMB7wtPJE*GZKTAsFQx+xjO9x->PtQ9qN+jr|rm?PZQ;N+<{usWx8jN zFEMiyhHdr6H9sW37QzWH=wOd#>30})nmCFwyX{ohoF8Fyv(HDChLGqu*RBfaIqJ z8>ugBG)sOl*YX(QliH>B?!%_-K=*OKiY{lru2-GPNj;o`-xk-Y-V(Vny`KG z<;~d|-PJ=$f6~mNci=%>A;g;E|mxa4^UQZRPKGnT@x_?D{P5;*1LR@-&P$bE|Qm1M=wATqsnHbWuoV5yWF*F|rRdvZ zVMZZ*(SG(r=f$V(6##*5O>2Fk)+#VQ7`NzMUPfF*Q6g?Uy2f;zQMUBst*;-C&P)lQt6rFk&t>V@S+q5eh0QO>CtnY&A|}sa_0CZnVl)O2-KpxN;B+!q^C8Wa^$I+ zLF^hiaw^?$195uWYe(PBlJmprTD$xpF-&Jo=PZN)+1_(zY1(gDnj^84ppP7Egh$M= zu~Odn{O$_Rw)dMu`>FHQVnj>0oXx)cH4?8(e2R6f#;D_UD*Q#g(uH0ATF<%Q%tY>C z&g|~i(X{Lr6W?-D{$}n?%j&aN&y&06y?d|DhbHKQMUVB`*%D?B7h%b^X`JOPMutgyE9O=o-;+s~CFFqF}$q_u8`5t@@K^ zlT5Wa;(cRBd(khyW{{7x(A%V~Y-g|5Y5%hH=d@hVn-apAL(tQ*)fAW!{0?nLi=0>k zYcL)!ux;^FT`=lMG0flU_YmI|H@ib&yU15Mo1tPy+b}-piy(j7(!Q(kb4&3s&8wca z(WvM2IzF{)Rd>Mhw~bF3*SH#i^}v!0@&#;n8iQ)5WQ{Cvm6%~@O2qejEJFYU4VxiA z0w3eO-zUvC{bLsKNQ?3(HaLu|p}MS6YF3t-ZZhLuM=WW6lsfXG{IwA+q&mlWAleey zP2766HO!5tx$&%ZZ^US{$VTBZ@$0i*3(w>h#|fj39s?r;!szC`o$40z3W;n?=OdOV zwoKAP!q!ZU0EsQN81-}_+f#5MWC%Dns%E@VA zk8n?DeJo1u54Kfv)M@=T%*{7rvk2zj^|N;4@$3z%d?Uqf=}%i8XL)oNs+;_-qN?2* z=?!;v+xQJ@v&W7tOvHTmOI0K0Gf3U*OqS&59%Ftdb<|u}xSE{!oaZ;;om}*D-Iw?N zI_UzuMPSnVqn7=s_s99C3e9v|;Z6n@$MdC!3cJ}w6Z*w3XFik~&Ug*pCnK2f`z|$! z(O-PU&hKA((pY+oa2oHeEWIjRJ@kTYHIxieB7t(coa40y3%T3sM>{z0FT3!6nhOYSK-qYV$*bRQHnx(Kr zXBewnD_dIm{Dm$UE&b((I^)uAJ40(YlyEmuxS-Wa%y88xhqEj1WLZ`IR`_?3YT^HITbk#*t| z{oK>uxh{F}i^S^I#i5SHb@Y`I=AEYFhKYC=+QL=a8k$7s!Pv8g_AN=>t7q|#KZw0a zI6PeJ6OsMdHT^Cc#58HkIWCQ;IhCHLnw>Bnis9vNn~--ZO`GV8_40P$QoOijoQ<$n#L02(%XqQSvY53KYAOF-&2@A@miDSAsTkv{Rj550!E%H;e}pH z4|_Q@R;iL`16N6hxCyn075sC?vSkS$d+hyqM^HmnUTd>!CXF>^j5}j#w{x&;6#buR6t6amId%th%_BISEE@9~W8l zT)j}rtfaACmCoeBz~<$b5wA=HvmQ0|AAA6R7`SsrwqVDML8X=UB>35r#Irbo-%9$&Z3ZUVbN& zmL9$dla@}!^2wB;A1hFM$X0VB7QIh}KJdky+x7qLZ6vCq)yIc%2Het?Us*(po;dm< zj|x5N1Z3InDmK5a5x2~rH~zp~AfDF*h&-3wL^w{xKXZyQwg@@3o+$@X;melVtlRW& zFR)HFc(u^;pKmP0h3I_u>|5L1OeGmdqHd|s)tBc)-S5G;<2b%?@%oRo6oU5g7Q;}| zXD;h7TALsVGl9!DZawMVzcv8T1J}D7b_4T_zbw7*?T*Fb@p?!`(5OWt7n10t83v3 zKu6?6+^^IIffjw^x5opg8+Qjtq4R{6INl0&af9RI8>=?HWp{^k)2@vU)t`^NpYoxd;pkwp<&*LG0%;gT@5cS)}?gI3_)87q*dWe9o^0 zL-{#ga`OwhZ7zolXw*J_4#(W|j562H;yd|uJZW^=YL)T8dvQtCJ5)Yb zJ~c%}Lc{Xs%{V4L10~v7gI9AahCch!r;8!<$alFo4Q|_0!#V=&$1c8{r*Ptv%7iYX zQa4mb%r9_RPKSMuqUm4iX$h{SIJDT5wySuvOsm*1 z9x_Q}@-WkWvHyE_=f?y;soH3Y{jZ<&XCn5WAB4^8Ou#VY1HLb%Tt$%SuUG%;ga7eu z|IJ4fu}WlCzDp{>35)$c~Jop z%xe&|{(Im;&XIAcIwJg~{r0 z3%sv91ym;v^2n3-x|yTvpMALd`L?$17q{K{<{>-9^7j(8WlLHJTJ1Ogn&f}~i#G=h zkl<~8cdEcFFjm74_U`;ORBIX}CeR|^U=g~5w7YC;x;mel*Gg5XG2f`w&+iI+b-~tn zv5r!m)Vpr9zt&>^67NjHKHSb#-HBRxY(w}OBoF*K4Q(k)%Xe{GMP-}(NJzwb&*GXDqI@B@h#f`peu$Hffe1T9fd)M zritT8nZWwj9s4OEx0=mum7hsII(UaPhVRSmmv1SzAkaD?$iMzf%`qEJ_ccQ@4{&r5 zb18mDLROdOS-zaRG@$ zK9*z3gNcws8@jY;{yvA+vDIV4 z@_CIzviEN-ufNpJ+Z|BlPw6~V6JXDgp8G-=TxmZ~ph*Jm+@*~wYOzlktHUqeJ~?F+ zOu>7X7bhU>IH9`T3l1@(8DUCyGy^2!O+HR}w-*PREdTN4!arkhECnoq$$Rx@s8VuZ zSqRrkoHs8;+VDY?35jaRIGuo^UUS923C0YUAJ=uQJ9aKFz^jvivfEn*O4&taEJgE5tsZ!$ z4bS^eQdE@=??of9#|lj3C^{Xg)8aVY&8x$;V!^5S$+5Jiq-NqbFXSfjLL64I?Dr=e zh8OZU0K4--Fz`YSn_33ji;6TFlk*^?iWx|CZ2O8G?bWasMP{VS#V_6G&O6wKQI5-g zzL68@nVIMlhrUOGdkZTZ|j7dq`r*`zRR3&L~7r`Fpn8hD`SqIKw2#;vRsa`@oMSI7iGqmgQ+?1<`Hg+mrLf zY${2spQ3~u?ZBfsy9eBztnxo-lU{J(q&_R}5aaRVQ7d-~4&7PeY*X;XIHCxs!9C}l z!Q`bdRL||x!1n4;P?TSfYAYevV6r*hf3h`ML4a-4D}DE#7_arzW5P~p?tqW=L8>#8t zLjrcLJkqa;Nz^TOvMW2DSyD6jEXL}F6_7$4!H_sg+rEK!Yshdr_^>GhpJfb8&jbJT*H)9jBzYf zikB|>ViMEG=suNAEDgxKR^^75O$hh13w@#$ZvWvt{ib@O>t?&Uei4wh&T6c8mUwO~ zFOA;rr{0c=ee92}QOguA>sNh04US<^+F*y&2knE|(Z`g6>76-^+sQFr-RDnwdln^3 zUe44j)7cD92;Q8w@wNvxZJz#s@NDUjgXp7`*U@dRxK70`u#ToZ`@}`~`!lItnCg2h zW{SB-@Gbarm4LlSeIL9|YY2^2>zRhcKzWxaNvi@-{`FVCX05u6FP zV)#1=lifr~GOq7nzv%5Pcc376nPCl5@UnqE=Yi=a3-_{dhUUC)LEf82-!}Xhtc%u+ zSGt}~eg_wYL13|-^^P9X${+MQc820Wj1#jroMy9earI06Nmg9h9}f3Rj7lhr}mMu z!ysvg0ywL>k~XIkuD|U4bT(${zL228=88|Hiwv`;!#CRslzu;u{jWb+Gee;?|G2V? znv91|=T;5%^;*V8{mDOkB(c|barEpXrNMA*`_GIHXJxU=rh*PpQeyojA?TNz2E0-=u8@oaL}s1b%onWd2n8daZ|T)z6uV+svN zYZk{_wnSLm}it1MuCieL|ddC!d6y|(%PzUb1{7-f^*nV2Hc3Pnz#5OA)ED@ zrJT=a6_4LTcf6Ag30Gu#g(epcyBf8tH~QlzDC~b-v^q-aUk*B9v}^ml6bJ zXs)#tx6v?Qm}`36Ceue3Wp>XeO*S`NB8k2(x0SrI(&K{ zIQx(Jm`3+}l9lcwyk*{;Ws5EO;bUr-iR${E?fdx7gCno0Tah!(Sl&vc=yKP|`5^RE zc&ekm+jye&d(tC|5!dZS)u;qL9&=LY7Sa_gc?Vhud7I<~1dNm&UU_&URh-I$}QcLXp>ZzbZ{Q#H3!+~U|Jan&46 zsqEU>>8&h6&drMHJl;a(K;?CfbgaIzAF4@=IjXXuy>B}9l!nDVM^R~h4IyF*$ zxGB^30=gXOcDLDlq^)e$hC^36lOd~a-1j`jo9HU%gnNZE%1XMGtjBDQ!jHS9b>?SW zb@SA`f#PAGOSeeQ7{ayT2rnf^yJfKb4mT0UH2HT~I@{cY6p3si+r5m5d*-+-JXIe1 z=Tx@aNB4eji9Ct>Y7xA$h{WO zr49wcTJiFv=sU!PaJ1>Hs2a1GK7vr_&uff6)KhRf-?8D3ePg9r!o^QWkquV+q!uTI z!CG<8JYMkQ) z97(m;Kr`+P13yW?IjE_d-JfmA{2BRu!ciKxGLnw584Vl6DoJ&)mnIurYNt`WjxNt@ zk%%X;T_5(KXApw9C0pEYyEAFBo;-Cl8Rhaq+eVHoX+W;)*OOC=@r1PsESn* z`H*Jdy|FTDQ}SFrPN|b1seeY3mk)c7=YgxT$}Qzi0rJzC$8QO89dv|r>?Z24*4TAg zevDvqc;#)>5qv6pT!wbXVtD?bwKJIBMY0$#b$2W^>gD7=wH|Cqsfh}vRbBz6Au+l$6%%KGfbTvJvVlWvcB zp_S-UlfZJJYQn={?o8Ulgt<4oq}SV2r|U^LaACJG^OcWPuUCESc0=_U3liuDOh_-$ zlDvF`lhM5TiCcntFPa}Xz>(&@TKWQ(>6Pbkw^NOM4)m$tDOt7s%C~8wJ;+VAmljV* zv3ejibHi?b~hl#y#Fo4~*7q6aa8cJ*E z0SK@xS~l;M{VA<^?^)Hu53-5pXw1o~!cgO^_vraBOgR=xrIJPhF*6+R?o_F8EGE~v z7`!_t<}JEAK-;?Lj=X@%hT-6}%b4=})0k5_R(b8cVD#J>*+=1D60i?#ZyY%pkWta)3xDOn#Hm80r74`{s#q{!KPfTy#L@FIS<~ZJFpnSgX2~&Y%plJ9Hqb1plFC`onR1RY9M~N|=a92Bt`_H2 zX6@K(K&9^;8Qb{?V@MI&yitzB;<^n)bQl_s>|HiL1YLvZ^tvpyGCrnLxpP^5ah;Crq1{=ikK=GU?c;N_1z$pkm&)uGQUi}q(ipg&C66hsUTAq6e z+F%Y>jXG4cNEj&-u2y_iPm$z0Sf)u;CEi@)J;+@>IQK!VAtj*NKDyB@R>|iSW>zIk zDmeXx7X948-2wB1E_s$3*<1(vHDWL5?P|?8sp`nb9BA;pY%tI*RN0dyq%UwP6MK;- zb2+u;Jhk*w`a#t)d|L=lWNJvdW2{n7)?;Ub_Bz{?cFA1@cF^1Aur!W7v)^b-mz9t* z7?=J=U*mdPe&(}C(xcNI(JHqT-m_r!X<2WWS1%Vu!=h#{SPp-zj?VkzrC(i#1y4Wc zAE9jnsQcq?vF{=p0}_%3KLebhvaO2V=8iP+G#q{CcQfBS4u?+J>VoaKHTU`Y#v3!M zsFUF`QbEj65EV~G_*Pq_l^0L)8C}!I6y~CGmrMJ)mwK2uY|{y$#A^Izx5)JZt7)US z@$bb&HjhmjT7SBVVS3{9?TJ54dRxWVRFl9oig+Lhmf$~ec zcyjCw9YvXC`-e)`9+ zALKcMSw^MP)^|Z+v}s3I-ZEE!-pk*wdi8Ewijr9GA&ND|m?q!LR;1{>NbH`fX9<|@ z7Vc=eiHA1vk+tZ$(nyJTKRpE$$(QmDoMe0;8-tUs6mBAqio!FTrc2H~@WU4S&gmkN zinXtthMc?4%Tz~>EJoe-TGauCFm9G`-KtgGiFo$C>|ax49WK7WDC13HFO26IXQs|= zQs{eQB~9pTAMZo!y9|;#*RdsE@yDI-UUb8Jm6f~9lgBL(S~EZrFvvR(r^Vc^AzF2v z3*GzhfhnC&0uvQ2CV`lvidC1=?s05LniRHdZ(=7QmIXHE9ui;Sgyhr{XvOL%BaR8Dpd{Z0fZ3 z?W#VGpH7D^u1r@zz9MY1$Q1whlL6_Ck~3PQt><)$1i1L?mc_K#@%O8#RlkpqQRxtZX1zGCw&rO(*AWmfK7n{0`pRt0fJ3`%+F4d6S% z7vKIN)8bb3PM5wkTYm!oHjMpga5t03+-32$lo9o-r%9vh%m9t^8>GQ7wsLar3_%vwi;OlHwgoJSzr6C*8NawAWcswIhiu=wI;bkNl1cB&9^mn-jeX|l z%SvaMJIJ5c$eHW52Te=JIsR%Xfb^M=^UM^_ZTqg4=#zs&4iztsKV5Q;gZ5*ti}F{2 zgZ!EzdsGZgO%F zd=2_TG|Q@mpS}{+uI+dMgp+J+!9C6`*UuIq02^k(&9ZYhNr0LAqv2nW7o=bbB%1S7N znOVh1Yl8C#1(zG}%u5hJg}Cp-y4?Ge1ejbkfK>B zfq8!QO)@8E!m||iOBnpcSA0}6p}3PZ{-gygth_d`AUd>d7|CbT*V-y46yicj(Y!%{ zr^Pb zHy`DvuSk}i^_vE?$r<$wUtJJ70x89->x0(#u+(YnWdpKWE5Uf#+uO0S2_q`4f(iC! zP#*>1D2eO!+r$_ivll8?C3#63s=iKbkI0rMuh5V;^#S=Jd1Wy{Z5%LyM4S%Z;(ld- z+J$+5HXQ%~Gi^Du#iOeNkS~L1ro?vy3=x$truI9Zr(3q%#%arR?&Y$ZrKg%%Z1#&u z7Z--!UzN+>GYu^{1hZNasO>=kW~Ch$Dk%L6v%1FhY)K-X;%0j}g~*(Q{`57eQ1ktD zf}@d_gp5U*E*anaHus9osjVJM5`YUy!96l40bPDCw8Ll5Vt4Jq|B-U`g|EV(Q00a} z^?U2S;;R_4D%Zz--hlRQ5^BTGdNEXowAvd4rzJ?3YJWcBPDF47fDp4|s@ZL^3)-x* ztte9TOTQor{|~Qt za?-In^4^e=3IkT@%SVp&3$wL_FEc!vRXII+SNn1nw`sC%l4O1d4NmR&r;K2OSOgug zLk*qQm8vA@Lp%(=lpz{FQ;fgG+Om9dJU;~1$0=sFF_wxiE){;X990rSfLc#UscNyZ z-As%N2dh)PibgmFYQ%5&NHade&~nmPFYRO8Q0P2V=H;L*+dh!rXoR`fw%*nOy?@p@ zlZZU_WH-zAJnk8guC?&0dq3sA`|XPNR)=G6IELmX+DkKdZ#s!}++br~^qeR!F+6XY zrkLwAfj&dL!QF}eVcXq_b)~d#3Dfv8erynJ!ugK2S==9~3m@|nSJ*w(vf}!!)^a85mz9QXBX7h)4unB3Ev6a-Q4c57=>Zdr&Je^v< zvh8iaS)0CCdl2Wcm#_LL@?zRlmN=%}d9~=f6~`poD{g19lsJmS%LE1TsX&T(6r9XU zOj)(CxvI1(HMpAq4Lvhugo>QyB4$MS-nF<(QOu~&)F=RaGgOl0o9*U>)kJT^Q7+wY zJUaPgwbYHluXSpT+tjSpc-g9qB*4I>E%1wS3Ac}hiFt%RDJyBDKG>Ee18@*U(Qnbop+BQD>iv#-%hu%37`${!Gf_B-9oj zX|{NE-Pyhc^#Zh6$Y%BbuUX`sJRlM%x`n6 zyyaOm`$enYPruVM?^F-G-GOa0k^n8CDQ8h4Oxzk>+($Yevh1dlE@1?D%WC!<{oiBH zp9h=iX(VrH>tV3KBRu=y=n;WmdCT!&iTFKeN84YW%Y|Ckk1YPHbI+Jq39+~C^OC+$ zeXrE&sK1LM&(KF&G?RJ%l0w`Si{vP$aBb+JPsde|-$#eXJ`0j$*J>1@O;SlYX9=Ly zeP(HGA9`NwI5g5OB#-CIVKloT$*rt@v!OO!cV?^$m`0=imjfwZTP<`=LtZpl6Ub;m z8Q)_oFluUe)S0GE$yD0s1~22w%8R(dGtREz*8%AZ!AK}=8PkRHS$1)E7TKHhEj9S^ zE^8E^=-6yio<(&dz1jOo#LGV0m04;6pWl8yH(6yl$Wy|swsG^4NLG4sNWl_{XM()eA^C3mQ#$_8+YnJRRgcrMD5gvKlJ`Cd|F#FlseNbmtJ-Vfs~3UN z__Aj48HyM3C-^^JU^i%V+HBvVFX}clZX5d4K*z6p8b%5=3*|ALl#hQFMe?ZwLXKz$a61*2 zd|bzhfQYEGExS9wtnvBWdi-SYx>o0lIR>bx>7mo_AV0Qc=tD|pi)!p~jdx5vF#>Z+ ztSpIq4Pww9N*4QQJnN3y7%$zQiND^t#WQ*hR7Fu8^W%BRikaboau|;#xIqhFqRV@| zvqCX+I<}XSQ8C7EVYb04dtv^~7Ap-lJ`WkzN8K zGlfGxDxbQ^%e_BA%2{>C%d=)pLO({#(}VY1gmFQ4#WCx`_x=wmJ=+&hmnT+>9mWlF zMtj+Hc+J~boq;4by5}MaV~9FJgqCC9$LA;eq%QeA!|eaujd14FbR9A7VH0YXkCICN zl!KJ|iK=ytLjw4tmDVupUNFgd-1nq2-q@tdcLAFKx>OWHLfF`3w5=I?&EOISgW!#3 z3TxV!M*x$MiuRbJ?y;K2*WKwjf>K~l32md<-+mz_SlNujj4?0Tm_-W1u2Nm1l@FaG zJ~voaVLYX&R^knUhM)Zk5~FLEyD38DikT^?I8>d%XhYgSlqk3U;~s@JP!YmPx_ z`y)rG+LwzcHT;Pf_TZWbzuTRPJ=bRoiskE6#O6bcne!;HXjVh{KX(xp}KUUbH~gdi`6n*7aRa*fYvA z@XCeKEWD(rRWTP1o)39@vNcK09=D!I&=rU@&AyW-#}z+egyYUz{r2PtBQqN{e)%+ard=hq~-LuUnyq4loYm3*XOmNlz_jFG**N6CSH;b*M+GEn1S6Raf$UB zn*x@#ZhFBkme&J^v&XfBEys7w2j}#wg%?EH-!?8D6H$|p-KCDb-))W(H9N`}<7`?^wl{#;Ca3}k^3RagXnCg`QC;&6)I(Wz8f1>~GwYu!0n@qa!r$B=;q_oyLQX`Hy~~)#N7uax^H$ zr8?yvA_+j#sYrd5e|@oJX~|1SrQy4yB};MV_&26=C3`CCC_^GgYP>I^xFlVW!#$m8Qy%96!!I(p*#c8!p^&MRmww9EXjK_P1SydP+C! z%l=9#oE33Q7W6k|XnM1pvXHk9YRyY?|Cwp=tbS%;}w zy$8-lenk=ygmdh+I5x=9lBmo4nT23V0_S-#7-=`pUS4MQ@qlZsow@nz0=xE{fZq?1I{z+8{q4Vfd<7S{>9|k$z68S0Qo}wE z-XRF*0CU!|BYL>-Z-4$bBz*@wLF>ZniC;Os5hPI#*YcoF`s>Vp4!=M275+yL@ISMI z+p=(hq~iNgmt)zXV8&N|l>POIv6@IVWzl4(^Y54VpFZMoeYjTn0hOIw_PGYXUwO~? zPk!Cb?f?ACi>CnzR_S}+cw7;I{4fT$PyhNvLK?z5$uki=_pg`mk%lGTH75Fzc=FkK zxYob}ww+s+fIh>8H(x3K`TGCkF}z0Da;Y=7OsG;G!(+p7zdiix6HV3NmKwTq7=9OR z{%2iC!~+Mxa*^rw_Mwl+{Y{~e(L@*ALbzBLtG`zh;hclzHRgG3S%jBvtT zNB7`>ub$2RG;PnXPYg$xKsn2twb=jp%D?%EFb41ISlPZW-g|z)&5T5FlkVK|L%6my zP48bDWM_@+{QIBJ;F+zXHFXM9uuQL3Y;2e}0kwh6Q9v{5LEh%jCad0rtp$!vYc@{u>tl z8y0rX%KwIi|Bu4LYZhC;fl6j8w#8}bCe(DSs}Zx+}- z7PQI>(?%sTDF9*{Is*jrrCPnu&u&$CZT+A~{w0`oZMCXgogeCZ#v(Ok;IJbFk_p1! zl`;4X<5FT9FyjnG07AsCO%w$+OLG)nf;O=;NF$3u(R6iJtENd*dpgLWtZNya9dwHw z<}E6Kq|uAWPq`X^f1d&OO^g|thJtI6;opjo*m+3H`1E43Yxn0u7M{(;vQy;ygwTDo z1C&PqlPo-u65k8sTc(*j7nPisznGLD7(V#^xzeumoGY0+jIBncTMh;AJApdFJ1%*W z4^b&Cw^P%a9}~2@-H^WlKCi{V@BEUv4LGqqbQkXe&!S>$S$hRaL+K3%sAAVQ^7iwX zYr~)#i`;ZWXJk0?*tpw_QEoGhGa?{!ZVy&3R&wsc*p7pIxNSP8NsPD#GpIiUkJyNG zw0*6o!rPl42KCZL`k(!Ma{069I9>u-U``MJ)KL;Mc;!jKMt>=L4*aC43Eq8oZ&x`b zu&%Y3KNcg>C`7cB-)l(L>D?sCF%xq{&*eSaSQ0RPiK){iv*pcm<%~iObL}&m)R*Qf z+<;yvB|=;siXsVwFIja5=vrLfpdwJ8l!%wiK#cM|7KnFCoThsLLVvj$d8WgTnan!( z!C4s6Bjh}pUa&3*YNhYXk$0od7xdc6XSM>%wOZG6sXfDeWyTd6c)CGi>!vG!hi*{e z*hS=H#QHK#QWHb$psjG;V6y(NeD^nrt|p>`&SNt0rb^L)jDFZJZAYjRu5la>fIGh@ zpbW*_PZMztC^JU;`U}?Sc^x?OOawT+i;~Cb+I>209fzgEO{{b19`&iwC#^ySfZU>t z*-J3Mif(rR7%&E8CZ%wvR6a$xO5H^2J# z<`1Uu-Y)b_<=H8i{-Zej^Hu&-T?Mr3PjQhXLaoku^^xnZcN}|%^ev64>NCQ!38+YB zUMh&)U1yOSyh?uGQfd-+F~*OeYk;NI0RS4;;+(h_oh%oY0`FCn1)O2ois4Y2vt8hy>fw?UX} zd%kS(g}!R=3eRSKw=75ccbn-7Q1^TnG!+gKClj|9c4(+!*pXkAsFwWk8$LB~z_h6c zZ-B6@_u-+F9{N+@_zYTlr4P>{Kr4yYE{Ad(b_ghkqhk4}4Bt$<6e4|&3-?}hp1Bj1AQ zFq+NlGJLqN$xa}FzcSe#1uXPVqyZz?3ah-m7Kwf8ciI-1y;kE&V9E4xWR`v#6$N4a zmc1a^Udp#jrfpgEpp$dUs@*QZdmX^*5@%oQ&uY4;jjDqRc1S@ch>KoJK30hgFFOQ5 zbW+u40c5r-aWa^js#m4SBQmHG)|I5LY9Hgibx&M8MBmG`qEzm@Q;%Bge53HJgSxI` zuzq!xL6r{Z6rQ99j_y3t|19MHjI~BcHQ&K9ML~jr=dD3{MQulY-N13nr-+j=uG0Od zDkmWdUYS=XjY#XW&*%|NDS7ph!~;A)wDa4WpOp1R(##zGJ(*Id+a6b%jPfv_$9eK8 zWcT|BqqrJ~d{w zO-`4HFAK>nWS27U``1Xt;FB=0!qeEFlMF=zf<9fxn(bs9@4QLhLYLjZ4zs2>Sdv-3 zUbi$mFfcn0+kMjid%DxUqys$c^(l%*U1@cCBAh7`FZeifac5@WJq;RK^`GYl+Qb}4 z4VQzry*B4%#9hY-an^OO*fP{J^=1fCl;kE2MKSPgHC&hPmZN};ji1t4u(-&odn2@JLO%B3~+fVdTJ@MVZayN9n} z=gxl=Bj5SrftvO8w86^zr>v{2bGH#>jaF05bl=4d~JQ!ini9Uf_Cd%m5Ig2DS)px4C3Qo zQ_s9QW~!R^5u_&V0ZgJo=zO8_?tJ!L#-fBmfQL&!CVs(7+{Q>>-cqR)AL zedkjg(MltfXEY9~ZSf#GW7fIYbcrD#`3>Tw%3!6)F(ydOo`^i}w5WZQ1H}2ic(jSj053uh^$qLnigQxfK z4bH(?^`QzLpPC!z%i6dKzxoPB6ac$9xD5R42N0Fa3`n=@G^M4e@aRMws!?>MSFq{J zeLIo>M16`#CnKTL837W{Uf@bGq;EiC=?L77m(0c5QkRaH??FdRc4o$mDmltU1sRlp z-2A6*o=)@jp=8{f>vB@=vp_59*KRtCy=7Gd|8t+eg1VO3Y3CoG&h~tNQvjI??3HuQ z)wJrXj);!V8WzF%VzKBezd4L|Iuw=&VyWhx#lK%w3LXwGjpn{z3xFqGf{rABQfxK0 z1QMvv7m1Vl+Y@TqR(Wqj*!b*4Ndoe>5NSSa{SHw`m8`#gc*OSwIaE!m$yrMRJ zm3XtA#!?mY4g%+CtsclHXZ*#HZWyCa&6W-XvXc?3NXRE8rKRVDKH=47@F|eS>zbz~ z_P#cW9;Y!3;GaA~>P+jwm6%6sT8f0q6s7o09L&wO5^sUy&zkrc{Gt5v$D2cQe zG--FfTnzH%fO_-Ou%s3vF@+=@IOPJctQR1UO3RAthExuG@nUepT)70v<{{bHHn3@& znM9~oh|+`Ks+&jrpkv(e2w)peA>&&zPRtU4a9Y}f&;~)Kx?MUtoH7vruLY6%>dU>= zF0h_~L%3dBA?^TQf-`1C>wN3L?Tk{5-m{g5Ej^{5o2i^gWpB;FsxHgJyBZ}N6 zk%gP@C5*aECdlxTxFu81c_$#`7J^Yilft>Ya6=$^;B05WE~Y$lG~D8xGw>>E_&*u_ zOD6WQ5RS{I&QvA-5-8aJ(AL|*h_z&nlljyry2p4f-v#xwb1j4YQ*Dd%yxzjQL%nl@ zRZ;9ceR$BT@vWy_rFGjKS%Opj6d>|Z1=8nvRy0*0sSezLOF=E!k!Rq;+W{?i?=drG(-QytZ zW)wZr|N7#c$HxS0V`Fk5ybEE@>OjI#srhE3TYNg%k5>%(ntd>GWjv-;ET!cQ$z5}# zR*8F85P8V2$GV2^#?iMLJs!ZH-CD-5*uIqGy9WP_D24OiZpdtiXu7)oIhq)AvJephvnh z!?yn|>BvEnjvn4AdXiM6z)Lc^ywl1d_2DE%*9J09LVVQ$V-p#DS9ziuOA|YvT8;uw z?;HeUeTU$AgNW9>Xhe?4?=YrV!G#^7kwq$4k3SlmZh^a`J;bqK(fSfmU{fQ8DDmT3 z3Q*2PE-ST@q+{C|c;$SAc`<*ew%Q5Jvzg z9WyYYggEeEyI&hlfWGnMm}vg8$OG*to{-`o1<*-1icQ|wjWKx@BMAI&x{$WJ)&7BM zwo8a0^)rVlPQs9Wc@y&gE!Q`McwW-OOG21DnLKVz3m@qSey@^B6vyhjw5Z+lqpnZ? zWj%j^K6BVK(O{P98k7SU0??m-)r}IL_upnCq~M%^nz$S%1~jbIoY-iLWtwsA6y!xp zd6klrpl2Fz86wxeqp+Y4-@zJ=?T?zOm`$iw7=PL)d$>7Z_EuW*$W6+gjfp$bJoxV9vnYCfmuhoIqhn zT;435>T5=1#D*)dH`WxR8dQM1?RrKo{ClW7&@AJR>p@l;KbT=9I^6H)Q^V-g^?nHs z#$L=72>3xb9Ael}1pG=aE%{&ygtE?T*`_!QJ@v56Q@Eq5ua$kI^P-%(KS4I`MD$wK zr?-~FiQufvHRfUe@t?QtDfe{OuU;&u*h<$Q2I}w-6A;o(m%8~eGpei_3n}4eePrAn8X)xR_@#r9bX*d?W2v{J-Tj zlSp0@RX%b}TLx}va*8n!J>wBwU{a1O&z zxhFcmw#xs~`?_+i_s(H#LoYvaGr!~H2x263l zsn=)=u}VXX0}N3g5nRf;`Rb9SAn)ysff6`G`L#eUa^-@`>_KL+-hgBLjp?~9vNJ#p z{qt*?Kn)EvHX$qyFnyB(ph|c6-gEq4Zr%@)D&s=?F5W%LKvBARpw{qLkR_lY@rr;# zC%O!szXBP;NdoXAdSX-nz$#sUVIS9TRU``pZJQ{~y6-{1 zte(WgJ(nX|mhH)6|-vYc-P4wk#C55 z>v!NY4kI~m0V0{xD|0Jyn(iK+>Opi8h)0k3G?Hdk;rhL|w`L$UU0yk&Wy<1h3Ep;c zjdqCZU#8F+bZ>+% zBN@$x-d{f(_1$ZAaGyBCGy;~xGGXHP+H~>O;{tCdBtv!*s(2B;J|45Znd}aaq_kk< zH55v{z^tCqzk$yvHg7S!qW~6!4+hS1twO{p9&b(FaQx6TY`CE{;kwyn6eNf}1EZ3l z;)==1L>&5fZvTiOE}ks_p8dwCqc!3SM?~aWV<8%bk0OWLLJ?{uETY-Sn@)(m!)U7* zYwbXWw@^mK=J5GP5p7FK3#p87)7H?P3>s;joDYexaSCd1AvYCRhcEw0-Ku@k9=ydI z!1v6ICv)a6cdVFYz)%H_j`7CZvs+^I?1xLG!L>!&n+utM*a!W)pB{A_&WMMUKAANX ztu~pXl%k7@{P5hdC5rP~Y2i(m5!IxuKgTI*-+q3z7fkTN zs5kK+Dqh$p5X9)htw-k(;UTG4l`E}e2`rI?$|962EQa#IG{Kb;=*7s{ok{YzmD!w6 z2jTVSvGGDcJ9RX>kru18R9rUo_Oo5b5=3tqgAYKwtxt!ZCebyj0?}Af4zky~KnHd7 z!APz?>OK(+Jx^LUguDB8pIx1mowWAfz4dnuv2L-#Z5ttFW{zkS)MUQ z(huyOcmWkqkz8w~nmHAxPEzj%Dlqk8Y`CwZ5Cv(5s-`mL z5QaAc;3lgakn)zJqCIHGUZs*eGDqD`^^Fdf6qz8yFso?DY}^X2|K@X^E7J?3q1w)m z8NP`j#~e_us$u6z++qUkM!$e~V^aT<;9;xMr^0ksT29~uQtTCi_q5M~ab2mtitrv*pD?n)121G+0SeV(K@FrQVsV(UA1HMEX0Yc@!lz&A$m`6l6VV;E;>Dz z!N@Gj@Xi!~>xii@W-c{}3|UufIaM6hjaU*=|Ek<+PpUU9gr1Q(jjS$JX1q-rqRuXt zOj;M!!)kQCO_(bsMO!htDd^giEp56-vRkt+a#-LUEIXeAuDw*=@g@6rYEDSU@rXt# zk7?9J`!bY*9E%rgcap|bQcmtrH&ToqH%wtLRl=^&6e_7moMajyEP{FqA^_0Z#>S4N>!uscJLRy}@Je+EASINcIN78|G7D5|s`pD@aa5;S z*BxFA;U=mrcqj(cnP8gT;d@O;EDAqJ#7`tX&#|z*EEvMSc&`Lv;+T;?#Q;``hg84z)Evu7}>H|F?$7tn^(w<6PO{J( zb;&xnSz0U-|JZl^n>_7q{1-^epE5^ascEG#*l)_=T=A~XU+x@9j&SGeC@UBqw66Ek-V(9_neT-13jmDAUGF&}bdP0)0j3#ss~ z-Non=H_ULQ!PF_Oe7_<<lYsb-1kBq1)%XF+>j`@9i*3=jh<%Zr825medGiZ+WMF6Eg`y-GSR0OYFV=2^;8gwJIgNnW;Yc1-zQ| zn8N2*@Mt#;HoTV`_sry{61ShMjuWr5zLFfNKWx``b0xfZBUOTV8l5yYE?LR$=Jr z=m!%6q38?$r3IpP(3jUG#dRQoTnN=mdGL&AAkr@o)pMG~fB=K@HBTZGV9NYUPniNST@9`N%?y53E3+D)mrPcI6lO zqm2)0MDRsyUTUGAsn8|qlPx@x1yocdk`nv(?_xQ==fS=I{Dq!v|3iX+vaHq`!*%4R z7qZ%}w154z>`4OU1L=#ypM=fMXrJckex77jC_VS?@bQ)Yb^0qsY4LHM^v^^?bnHH@ zeq^@rfP}m)E!TA=U?$+1YPFDN@__)2EW}j03XD&VJkk&N@w|Lt539|AOOCa(`kp>B2B)O>q>)9hILl5@{9P;zq zerh?EuE+O7Q7z~oHpAkTR~hwR5A^?j{8S`WM|T}U``eGR+nl6@pJdEGaSZ(RvLsmc zxCImTHy`xv0h>?e>jJlpp}}bY?ikFkGNm8X09{Iy0jh`QCa9~Jqyx~H1)DvAX|{-S zTozPg(gjpf^*^GXTXsOhGYgvAot5TJfS`2l33R)fW%!V{>Z0;1#ZX#fKLH;XhB4v5)#eek7#d8v=4mWEi1eIDs zU)%sP_s8EWpx0R#QjwN$nW_}N=o`Iip|cforAyb`jsM&wst=^4gf`5-Us+E$Kz-)6 zuxxZVv(3`QyUHs$&za(y)*)%67uy`9lp(7c$?hp`{ML^7{SNuLcb@X>xnjy-b~_6)I*x&U*&HPZUKVU4yjROP3<$`z386TmYMh#4vH5a7mD!d8fYyS^>Ul|v5 z+jVQ84uVoLbTEBM5(1LaNH?5o?&m!B{nqdO zcD|i&2nftv*MIM|*Is+=M}4f-Zzh3yYpI<22IwY-KY0{lep>0I_O?R=$n5lKF`zo* znRFs@8F1#$*0t-99IM5mDe)KY@-$xcViODZaEAqaBFOF98GETh=IF>TMJC8xN0c7T z_h~_|GGaNqY3e{midN8GfR1`4FmzljVzv<+az+euSLW|PtHC0rcsg!qQJ0Koy8r{N zFxy1h!5-@dZwt(m8I2?iwg+a2` zL4%|GMH!`(F5pt0g`*^BB_Ii!o@zI1jS~f;?kah)qGc{k5j3bNdN! zpTz@SISsXFp#5TSyUgK>Y;Doz25vUR-%rSY31{H2^wFp&C6*w}mc~x)l;EQfrnkng z{yy3~f3adb;+|0qwtDPFu%KBc%qS|H^34GEsAA>T{smxUFeuKtWf$wF!~95S1ovT) zLm`z?G!=<@DkBH9RD#p^E5bJeP8{G4HF z5A5*ouzZj;gT3?l*TbYIh>n!H0m_#E;QM^RL8qD3^iaO=KrLFF!1SG|Tml`><2lVyK5z~4hqT);hf+Az7=Pm<4Hqxq;rnNVX0Hv$*&0AQ_^ z^{R~WnW1r{1x-PD?qm2`9e10Ao`#Y7bRGn$Dc5*{xmgfpM-n&e@pb+ii-KAE;vY~m z5*Fbs{XqM`9N;r8_S|f%>T5aoI`e-^DgPuJ8R9$C+z}PHuf1jOpgsyv(;yH0_lf!S zLJseyNB0{bF$;{kO+_!J%%oYb2~SO-Q>Tw`5I`*Y5NH4q$?B4G*-~OO{(Ijk#?QeO zz86v2sipl~1SKv4Me!Ckx)?~%Hoq9PLSpH$4@=y6tfnjeB=355k$167;0yv0vuhKe z+U~;&i1;72F0p}q&2rDnmWmpF1Moz@1;~Is9E~xsq2i#{wPEHkr9uoM&1X-v_|V)Y zS6})7r1ePg9k4yY0L0D0dssNZh;WSZ~$^mIc4q5qU zT;c{gmCMP!V=Q1s)cl3H43LOp5p0oI%-0qVuE)H(=jb(8Y<4O4M~*v@Bm^cPhn^;I zrxlbehT6ge&-!p}I-Zc#0X6C4GRL>qUn*2_h#xglf*9{ zCmpBB6MO$b&-Z1NQVl%HC0F4;z#GS@Wm*vow|hq$All{tY>zQy$(&;OLw}&k*647< ziCg@4+<{Kyp-?qn>0%8~GfbS7Q>1WrbM5n79gaSbb6=01TJ8FZJzDbSZdinJ;11PE8@(PaQ;c6uLB~6b}?zpR#25&LHS=tZxN9-T^S)fUa^p4L znel6?=8-2dMB-Ar#Ebc(wh}L~9O9#?gv?~!z5NjoxFVoI&U~$W(*UYCzs!&U;a#L0 zpiWZH`b{_LW34i&xhGn9*Mb?wrxn^L6e?r&n8D2kEU^b4s2?m^(g>)$GG7)^D4`?y zc5=QJ&?)o&Z_zh^s@XGH3Ig$42=s*@+X{r@NdCSJX#)_#=z@V3jmMAsUZBien$J@- zX)Buf_Hp+yHPR{n*#2Ar92T*j11T$%RCwXO;RulWVpGylukV%1puNj`m(58-yci$Z z2B3@$c4D+kH;@BDL!IUZ1#Ki~`wV6uS(xQVHKI7pH?}SJoXk7Oj70ZQCh=Kwi@Ts^ zWqkvV@U}!kbeU@@u(r7ed4oh#&^AqW(x`E69)Y$$#VfRDtsGN3F3)B$_kYr{*Pjmq zJTC_l#UIWV_*@^P4lmMSm3L=4Ma*J#C&r38QR5fBm6*^58flASN@YVjd!VAMH2tX` zh*=F%y^H5uH?@K0Wx+&rEgJOH;E1nJg2IV>k)&O-w-fEdZ}A6YPgu*&co4g#xV?J| zGM~zRZ`bI8F@<4HdfI#t05e}jNpEtXNpJAfwxV%D2MdeREHt#tvrnfZT#B1a zt_DXqv#}fG7)||^WT!E_g-B|+m9)z;I^R2w_{Q8v`pMA(BXX3tBsbc%zTyPirK<0` z>gFJUePPQ2U?U^C^lZv{=v^aE+7a%zbu5fs0CO(GyM2xtAqb+0;G^E~Du-**TEgo6 zSu~WX+MU&Q0DUIb$p7JI^%THw{J5`1Ymk3A<^=()l~w%UDo0sOWi3fDZxhZIG?|bs z+pkmYnB0+D@Sls1f5(Ks$`V3zRQ)mX{LL8|I_e|b=bCO${szv>G*QyF`J|KB9sxgt z#yMc*hU%p-A`A>4IDp+cKH-j;mN*RFlm`O(lf2p9}eJrP3_aZTD@}H-g>qfnZAJ8r`1)VLE0SmP7we)2#eF6f9gB-ejGyOfKCJ5SG_5yx0;gr z78P-rZrgMJKM5i0iDN) zFW7<2FK7T%d-2hCk>KwmcP9q*kVma+EFUU>h&}Q{QPA~ZmZ@?cEb3941T|M1sKj1- zc9RY%>#Vbq;MgA4E7on^&&CMJ81sSJco4PQ^&@oOvB*K2p2;G z{oaH>z?~@&W$On6<1+?;{io)tN+$KB16$d|*)2ycmdkqVeC|i;CYRv!qN-7EPRjNC>!~aw*|KZU8>stlL0zZ1xyM;#C z0KMZCf;x1#+4Hi$U-OVK>Q|6YyqEtQS^p0|Q@n4{T(yIZ%xeY9*Bl>Gy3JMJrg5Ejtpd*^qz5i0i z)CM;Lfh`%TSH})m_+TusJjno6lCXTOF+9O#S47~Z+a*8?%bsPRK&%u&6DQl>p@bXt z@S8x^8?arm{D5UG(sv+Q3 zRyzj*-q`}gqrr5AxdCWZKh`_zea(3_2Ue*s0O*4SG_=~M0M(|h=jdRe z>PuTxu119_OOVR9A67B6-u{g;tbI3924G)s2awDRIS3Q#LQwkkQfpC=4i~^wYj`3F zuqy?X>SX!i=_FLxsN^oEaWNDu@&q`eQA!Df+%jqgO-RwsKjX#T&+2ckc6aqH zkHmp7_U6Ljs7fT(a4XwxChfaW8(1{6o&p!adP0qB6+Ai5uZp};BGYbJH*#{sFlyjSzDtwo@J z9skD<%ahU)^bG>r+`y}C1v79>!B(AmUQfRbD zI53D9A3Um{*>Vn~l0ei&z2cKdbHN6=*QHm23Fn_Ag^fy5B`-KX90F252nacf4T6YF z)(GwH`*$h}ZpY$yT+xi!0%i6XIg0$KlpX`r5J&y4*KR>WU!B2XsI=m8R*dpPCjLL* zwmn9%D4sXqUQhy@FXY!V4aPjUMP|Ue)(ZCO5$|3#0ciuz7C554Vc-on4aH#lbseU6 zNv)X3N%w(>Rm3^rD>z~UAQ=c>W=%oKcCb+Mh>KEvpch5n*Z1>c6YNhVA_uJD=`{dE z`AUr(Q{F)1(;?dX6HQU{tVbp2*^f8nRWJH!`@nTGReq@B0>+a|#?%x#dJ<7H#b8&w zY4Wqn(=O4+VA1L;$^m+yaIiV;mK8A+T{;4PcX<0f?~;&nz+lzwcui3R4WlMafDPxa z_}n1qQ=1J3hkgdYz3TWH%sxVZE2Y-9%iMs9&-o~^>XSR`inVk#mShP1I+xXHPV>W;qyq`f;QEHPB`5{&^O;Px`HkgBjgs_$l`&$#Bkvi81 z2|g0t4EvP1JqTk3-3>ib?VNeE*n z1&Y8*p4I(?(aoxo+wH6IgzpMVS|83TOAL1Wz&NUT$fzQ;Csp*A3<&b=9Bij-1^7*v zlj0Y)$TM&C7f=9v=l3j68mdW4YTr#2Sl%zseaez~f$<<^A!?Vn(Z<~klSTp|)3P3o zz2<-d2M2dv?f-*6zEcCNYPx6jdJR=W(X?P0l1P13hGdZ!);__Z&sLgbHD8wMR>USx zLdP3cl%vt~P9R)0d$=qsdaerB_q(?k(T{?EPa`}JGbtV^ih$`w$6@5vJInTrr+nh@ zw&!nH>_MEo4+%!LtJuE*I}pmxRDXgDF~Q-$nPq@ z#JHCe8aWLG4HC1eLx0L#-|XI8vuS;I11*bp3}S{WHbBpv=Z2EvA!a!Wj1@QD`LMLo zo`af)NaVOQ(m1{atkpWO1%3iuWye;3?R}#fnFHE1V&Ga9pU`gc^&9==mZ@l;($lQx zPzkLfm2Wth^}a(jha(CE)cD$bK-yxZZ|cr<#}9%Gn*7DGjWyC8uWdaw=1(Yq+eb-1 z5fO}+UP|JHT==2#18@a&AI676u|Jn?_z#&htfWW3kUdZT`6|*QGj>{9e+~K5Q54^J z!%h^JxRlch(Nk14&1{XmA=0}Y8NGYIkwQS65%ytP`RVtML|pjt1wWt2{sO7U^bNeL zD?ON;_>^Zot3oSMP`YfxC(4%fx0G24}6JsmskS3x7L56%fNCAK?|tTtXA5LwiSFzWdU?}LhU4PEx`rw zA}Ban{7D=7_OOc}T?&$~40)O2xA`=n)EHfNxQH+kqk0nlBI5VavZS0-B|KZ6N2HqR z?;UH;pKBlqC3UyVo;b@$c1ngkz=%<-b$CNS%M5#kTdYab{FZuxtKRo^*7JZ+*9fQm z)i+4p++~|7mx=IX{e?ja zKSeSg7O|9}8bA|D_n{`j9-%gNA)7mmM4)ml#X1s6DE(08ifZ8*C7j2|@16w`q(I#w z?<_mRsau=bA<^D1d5^V0&%^Lf<(mJvek#@EoezM@UBgT@jT+cC%Ph-ET7ZMwVpPXr zvhjd4NB|kGN?6b@bkIL6aQGrOcYcxWW#mQlP>8xc4<02pDc>h&KDh#^5)BS;Na|=F zqdrYI#AnJTnKNLLS-0n{hE2S`nmWFpGY;|8>DgLlWak;aD8)FV&gT~`!|DA6Mw-)u z``W7)L#?Lecnpq?+8`j6SoW;SueJhI@nW-ByN7}#eyXPblF&h~zZf&{CrCEWHf^!h zKK3VKki4&Wr2bh_C$eBU$xTgJOB@Id$$sng1&#J_yqu~CM>~;uUX47EK7dIq>1SOE zwEe0E*Cjwq6cuJf<3EkS{zhYtkH8(OyYHlc6Q?;=NF2?;4d(Gz7clfrCDPMs<;?=H zQA2E9^5*p7;n>~&=vmaTBJrFh$l{ngBE6qa_L@(RzLqjE`;JMJ4yDkiETfj9`O4;Q z4;I;-24h+88QMoiBSM>@s7y1JUdoqXsydX5)AvsC77wn9S%9y6qh?8mJGEiV z=&>~;I?`Mu`~{l$6HfDZR|y)oJy|rc*D@};JERG0_bf0WqhtBZIS2$Y$8yca(UdC0 zIQUqCTP3yt89XV2ftN?#x{K`-re&rmSz1dcfq38l=ll^91_lzc9g#^M)@xfxBYhwe zyHi+foIa-ghpd;I$(rf~)Q|J1W*!|GzWrL$IIax)D9Z!jmNNLci0YM$*_KChoL?37 z&{GLSoYWL4Mp6ulyp|A;rQ$wUs+=uJ(PF%7Wgl>_62M<-+zv|0vZ=~1w#&S^MU-v~ ziLV~jy%!Z!bIvPddM)q3aE1BX{U?MMhnOUN^x6d|T@6kF#v^ljxCxQ&IOL-hnfawR zW`pmNLovdC!EE5v8wo)sOK2=S^h-wp=kzvR4vfDmM=xJ7He6yVg=DYesbK-)y8LJW z;@Py8+6)s33Wp6AFc&iMsN)D)TP0?IX(mol8=-t8jr}%6hklImeyKL$;+=`#B1icu z(*BxrS!6q>*r}Yx&-LveOUy8c?1h$0nIt{?xzP9E5{&6Ui|}nNcYzq2I6;V-6ygqI zKYS91VyRWPK<-C}8%R=?CEnwupRKq337fd9jbBnmlj{*TBuCC4l&}S>T+Xy##wHFTsKPugXjzm2Yr(3DTzj?9)_Mq!L(x|Y+DUrpB7#9&xy z))n-+9?P>pol8Q{Ic&fLD+c(ij%Bc<)3W2kIGp!iaEZ}(J?1ZTEi->2vNB)5?;LK-DWjhgMq5IM$ zzJ7tK0mnRmY;d)?Nsw#bhoYf{q|lR6MLtu7DWPV>{gzg!+SNo$-n2-l(S#9`_I&?t z6@k6TXBCmDiRyQQVKszcnd=CPH9s+i&U?C-i*0NZ%BWRZpPUF`uAFvO`(VFlmp061 zy;>Ybv9>lc~_(%3%kxV_ zRaRzh$)&=Klqm|$mWsUN#b^d1=`h6WLkPk*{RwP1?RP%bnCUc;dt3+A&J0s{(fU&T z&;&{ne`7WzY=ub{u|g-e3PD&*-xV+bhAYI&56Ik57<|dg9B<95@h)K-;wcCafX zwPvkr6v?2zS<1kzb~72#FI%vm@ZHV`spRgf+sW8^excu0;!H{X4aJ)Jf0XD+UDGhN#tj zGBM#fu&eBTWw}PD;+oYt+alsk(9UhVbI$X-C1$U^3g6QpUQItfat6)S5X95Q26>kC z-<;4G*FpDezaB01VJ%IL}w?&{2*z4h^cCiT7d90So=?If1+d>mNdbOiSXIs zg8WxST>)*?g%o<)lZTsbSEAOv8+PY!c($o5Zy5<`%KY$q08Rnx=zg*gs5Uz?gUv