diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2ee47b6d..a3db759b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,21 +16,17 @@ jobs: lint: timeout-minutes: 10 name: lint - runs-on: ${{ github.repository == 'stainless-sdks/orb-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-x64/runner=4cpu-linux-x64/spot=false/tag=sdk-ci if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - uses: actions/checkout@v6 - - name: Install Rye - run: | - curl -sSf https://rye.astral.sh/get | bash - echo "$HOME/.rye/shims" >> $GITHUB_PATH - env: - RYE_VERSION: '0.44.0' - RYE_INSTALL_OPTION: '--yes' + # The dev scripts are uv-based (use_uv); rye's bootstrap has bit-rotted. + - name: Install uv + uses: astral-sh/setup-uv@v6 - name: Install dependencies - run: rye sync --all-features + run: uv sync --all-extras - name: Run lints run: ./scripts/lint @@ -42,23 +38,19 @@ jobs: permissions: contents: read id-token: write - runs-on: ${{ github.repository == 'stainless-sdks/orb-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-x64/runner=4cpu-linux-x64/spot=false/tag=sdk-ci steps: - uses: actions/checkout@v6 - - name: Install Rye - run: | - curl -sSf https://rye.astral.sh/get | bash - echo "$HOME/.rye/shims" >> $GITHUB_PATH - env: - RYE_VERSION: '0.44.0' - RYE_INSTALL_OPTION: '--yes' + # The dev scripts are uv-based (use_uv); rye's bootstrap has bit-rotted. + - name: Install uv + uses: astral-sh/setup-uv@v6 - name: Install dependencies - run: rye sync --all-features + run: uv sync --all-extras - name: Run build - run: rye build + run: uv build - name: Get GitHub OIDC Token if: github.repository == 'stainless-sdks/orb-python' @@ -78,18 +70,14 @@ jobs: test: timeout-minutes: 10 name: test - runs-on: ${{ github.repository == 'stainless-sdks/orb-python' && 'depot-ubuntu-24.04' || 'ubuntu-latest' }} + runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-x64/runner=4cpu-linux-x64/spot=false/tag=sdk-ci if: github.event_name == 'push' || github.event.pull_request.head.repo.fork steps: - uses: actions/checkout@v6 - - name: Install Rye - run: | - curl -sSf https://rye.astral.sh/get | bash - echo "$HOME/.rye/shims" >> $GITHUB_PATH - env: - RYE_VERSION: '0.44.0' - RYE_INSTALL_OPTION: '--yes' + # The dev scripts are uv-based (use_uv); rye's bootstrap has bit-rotted. + - name: Install uv + uses: astral-sh/setup-uv@v6 - name: Bootstrap run: ./scripts/bootstrap diff --git a/.github/workflows/publish-pypi.yml b/.github/workflows/publish-pypi.yml index 2226a3cc..1863e1e5 100644 --- a/.github/workflows/publish-pypi.yml +++ b/.github/workflows/publish-pypi.yml @@ -8,10 +8,19 @@ on: release: types: [published] +permissions: + contents: read + # Trusted Publishing: PyPI authenticates via the Actions OIDC token instead + # of a stored PYPI_TOKEN secret. + id-token: write + jobs: publish: name: publish - runs-on: ubuntu-latest + runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-x64/runner=4cpu-linux-x64/spot=false/tag=sdk-publish + # The trusted-publisher registration names this environment; its deployment + # branch policy restricts publishes to jobs running against main. + environment: pypi steps: - uses: actions/checkout@v6 @@ -24,5 +33,4 @@ jobs: - name: Publish to PyPI run: | bash ./bin/publish-pypi - env: - PYPI_TOKEN: ${{ secrets.ORB_PYPI_TOKEN || secrets.PYPI_TOKEN }} + diff --git a/.github/workflows/release-doctor.yml b/.github/workflows/release-doctor.yml index c791ea6b..f4eed791 100644 --- a/.github/workflows/release-doctor.yml +++ b/.github/workflows/release-doctor.yml @@ -8,14 +8,15 @@ on: jobs: release_doctor: name: release doctor - runs-on: ubuntu-latest + runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-x64/runner=2cpu-linux-x64/spot=false/tag=sdk-release-doctor if: github.repository == 'orbcorp/orb-python' && (github.event_name == 'push' || github.event_name == 'workflow_dispatch' || startsWith(github.head_ref, 'release-please') || github.head_ref == 'next') steps: - - uses: actions/checkout@v6 + - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Check release environment run: | bash ./bin/check-release-environment env: + RELEASE_PLEASE_TOKEN: ${{ secrets.RELEASE_PLEASE_TOKEN }} PYPI_TOKEN: ${{ secrets.ORB_PYPI_TOKEN || secrets.PYPI_TOKEN }} diff --git a/.github/workflows/release-please.yml b/.github/workflows/release-please.yml index b9d3f086..b11e7abc 100644 --- a/.github/workflows/release-please.yml +++ b/.github/workflows/release-please.yml @@ -11,8 +11,7 @@ permissions: jobs: release-please: if: github.repository == 'orbcorp/orb-python' - runs-on: ubuntu-latest - + runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-x64/runner=2cpu-linux-x64/spot=false/tag=sdk-release-please steps: # Token comes from the orb-stlc-automation app rather than a # RELEASE_PLEASE_TOKEN PAT: no expiry to rotate, and app-created releases diff --git a/.github/workflows/release_automerge.yaml b/.github/workflows/release_automerge.yaml index fa0ec4ca..6f8a9198 100644 --- a/.github/workflows/release_automerge.yaml +++ b/.github/workflows/release_automerge.yaml @@ -19,7 +19,7 @@ permissions: jobs: automerge: - runs-on: ubuntu-latest + runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-x64/runner=2cpu-linux-x64/spot=false/tag=sdk-release-automerge if: >- !endsWith(github.repository, '-staging') && startsWith(github.event.pull_request.head.ref, 'release-please--') @@ -34,7 +34,15 @@ jobs: - name: Enable auto-merge env: GH_TOKEN: ${{ steps.app-token.outputs.token }} + PR: ${{ github.event.pull_request.number }} run: | - gh pr merge --auto --squash "${{ github.event.pull_request.number }}" \ - --repo "$GITHUB_REPOSITORY" - echo "Auto-merge enabled for release PR #${{ github.event.pull_request.number }}." + # Auto-merge can only be enabled while the PR is blocked on + # requirements; on a repo with no required checks it errors, so fall + # back to merging directly — the same outcome auto-merge would have + # produced immediately. + if gh pr merge --auto --squash "$PR" --repo "$GITHUB_REPOSITORY"; then + echo "Auto-merge enabled for release PR #$PR." + else + gh pr merge --squash "$PR" --repo "$GITHUB_REPOSITORY" + echo "Merged release PR #$PR directly." + fi diff --git a/.github/workflows/stlc_promote.yaml b/.github/workflows/stlc_promote.yaml index fecf0804..62457fc5 100644 --- a/.github/workflows/stlc_promote.yaml +++ b/.github/workflows/stlc_promote.yaml @@ -26,13 +26,12 @@ concurrency: jobs: promote: - runs-on: ubuntu-latest + runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-x64/runner=2cpu-linux-x64/spot=false/tag=sdk-promote # Staging repos only; csharp is generate-only while its generator bugs are - # open with Stainless, and typescript has no production repo. + # open with Stainless. if: >- endsWith(github.repository, '-staging') && - github.repository != 'orbcorp/orb-csharp-staging' && - github.repository != 'orbcorp/orb-typescript-staging' + github.repository != 'orbcorp/orb-csharp-staging' steps: - name: Derive repo names id: repos @@ -57,16 +56,28 @@ jobs: persist-credentials: false - name: Fetch production main + id: fetch env: GH_TOKEN: ${{ steps.app-token.outputs.token }} PRODUCTION_REPO: orbcorp/${{ steps.repos.outputs.production }} run: | git remote add production \ "https://x-access-token:${GH_TOKEN}@github.com/${PRODUCTION_REPO}.git" - git fetch production main + # A brand-new production repo has no main yet (first promote for a + # new SDK): skip the diff and let the promote push bootstrap it. A + # transient ls-remote failure lands here too, and then the plain + # (non-force) push below surfaces the real error. + if git ls-remote --exit-code production refs/heads/main >/dev/null 2>&1; then + git fetch production main + echo "has_main=true" >> "$GITHUB_OUTPUT" + else + echo "Production main does not exist yet; will bootstrap it from staging." + echo "has_main=false" >> "$GITHUB_OUTPUT" + fi - name: Check whether production already has staging's content id: diff + if: steps.fetch.outputs.has_main == 'true' run: | # After a release, production carries release-please's version and # changelog commits that staging lacks. Ask whether merging staging @@ -82,14 +93,18 @@ jobs: fi - name: Promote staging to production (fast-forward) - if: steps.diff.outputs.synced == 'false' + if: steps.fetch.outputs.has_main == 'false' || steps.diff.outputs.synced == 'false' run: | # Refuse unless production/main is an ancestor of staging/main. If it # is not, the trunks have forked (someone advanced production out of # band without back-syncing first) and a fast-forward is unsafe. - if ! git merge-base --is-ancestor production/main origin/main; then - echo "::error title=Promote blocked::production/main is not an ancestor of staging main. Back-sync production into staging first." - exit 1 + # When production main doesn't exist yet there is nothing to compare + # — the plain push below can only create, never rewrite. + if git rev-parse -q --verify production/main >/dev/null; then + if ! git merge-base --is-ancestor production/main origin/main; then + echo "::error title=Promote blocked::production/main is not an ancestor of staging main. Back-sync production into staging first." + exit 1 + fi fi git push production origin/main:refs/heads/main echo "Fast-forwarded production/main to staging/main." diff --git a/.github/workflows/stlc_sync_from_production.yaml b/.github/workflows/stlc_sync_from_production.yaml index 2a092bd5..281a253d 100644 --- a/.github/workflows/stlc_sync_from_production.yaml +++ b/.github/workflows/stlc_sync_from_production.yaml @@ -25,7 +25,7 @@ concurrency: jobs: sync: - runs-on: ubuntu-latest + runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-x64/runner=2cpu-linux-x64/spot=false/tag=sdk-back-sync if: >- endsWith(github.repository, '-staging') && github.repository != 'orbcorp/orb-csharp-staging' && diff --git a/.github/workflows/trigger_back_sync_on_release.yaml b/.github/workflows/trigger_back_sync_on_release.yaml index 4c93fd90..29865f27 100644 --- a/.github/workflows/trigger_back_sync_on_release.yaml +++ b/.github/workflows/trigger_back_sync_on_release.yaml @@ -17,7 +17,7 @@ permissions: jobs: dispatch: - runs-on: ubuntu-latest + runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-x64/runner=2cpu-linux-x64/spot=false/tag=sdk-release-dispatch if: ${{ !endsWith(github.repository, '-staging') }} steps: - name: Derive staging repo name diff --git a/.github/workflows/trunk_sync_lock.yaml b/.github/workflows/trunk_sync_lock.yaml index 086f6a1b..6c6474e9 100644 --- a/.github/workflows/trunk_sync_lock.yaml +++ b/.github/workflows/trunk_sync_lock.yaml @@ -39,7 +39,7 @@ permissions: jobs: lock: - runs-on: ubuntu-latest + runs-on: runs-on=${{ github.run_id }}/image=ubuntu24-full-x64/runner=2cpu-linux-x64/spot=false/tag=sdk-trunk-lock if: >- endsWith(github.repository, '-staging') && github.repository != 'orbcorp/orb-csharp-staging' && diff --git a/.release-please-manifest.json b/.release-please-manifest.json index ec0f76b7..780311ca 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "4.55.2" + ".": "4.69.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 98f97da5..93f240e6 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1 +1 @@ -configured_endpoints: 139 +configured_endpoints: 144 diff --git a/CHANGELOG.md b/CHANGELOG.md index 6e983ddf..86722805 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,121 @@ # Changelog +## [4.69.0](https://github.com/orbcorp/orb-python/compare/v4.68.0...v4.69.0) (2026-08-19) + + +### Features + +* **api:** api update ([050010a](https://github.com/orbcorp/orb-python/commit/050010a4b87b68d91de63ebc793c64c1e2e82c06)) + +## [4.68.0](https://github.com/orbcorp/orb-python/compare/v4.67.0...v4.68.0) (2026-08-07) + + +### Features + +* **api:** api update ([09add25](https://github.com/orbcorp/orb-python/commit/09add256375a0a521cb1a3fea60eafbcee39b28d)) + +## [4.67.0](https://github.com/orbcorp/orb-python/compare/v4.66.0...v4.67.0) (2026-08-05) + + +### Features + +* **api:** add `grouped_tiered_matrix` price model for per-dimension tiered rates ([ac4f5cc](https://github.com/orbcorp/orb-python/commit/ac4f5cced8db65a9390839334a9cdee45b3446d0)) + +## [4.66.0](https://github.com/orbcorp/orb-python/compare/v4.65.0...v4.66.0) (2026-08-04) + + +### Features + +* **api:** api update ([e776a3e](https://github.com/orbcorp/orb-python/commit/e776a3e820f9b8e343b8d3a84873c5958cde2e46)) +* **api:** api update ([e776a3e](https://github.com/orbcorp/orb-python/commit/e776a3e820f9b8e343b8d3a84873c5958cde2e46)) +* **api:** api update ([e776a3e](https://github.com/orbcorp/orb-python/commit/e776a3e820f9b8e343b8d3a84873c5958cde2e46)) + + +### Bug Fixes + +* **api:** correct next_attempt_at accuracy in invoice auto-collection response ([e776a3e](https://github.com/orbcorp/orb-python/commit/e776a3e820f9b8e343b8d3a84873c5958cde2e46)) + +## [4.65.0](https://github.com/orbcorp/orb-python/compare/v4.64.0...v4.65.0) (2026-08-01) + + +### Features + +* **api:** api update ([e8351fd](https://github.com/orbcorp/orb-python/commit/e8351fdc732d3e6a3e6d388146b3d196f550c1a3)) + +## [4.64.0](https://github.com/orbcorp/orb-python/compare/v4.63.0...v4.64.0) (2026-07-31) + + +### Features + +* **api:** add endpoint to create plan-level alerts ([3e0f2eb](https://github.com/orbcorp/orb-python/commit/3e0f2eb626f5f242988806e5570e3cc8067ec797)) +* **api:** add endpoint to create plan-level alerts and allow PUT updates for plan usage alert thresholds ([3e0f2eb](https://github.com/orbcorp/orb-python/commit/3e0f2eb626f5f242988806e5570e3cc8067ec797)) + +## [4.63.0](https://github.com/orbcorp/orb-python/compare/v4.62.0...v4.63.0) (2026-07-26) + + +### Features + +* **api:** add `spend_exceeded` alert type for subscription-level alerts ([6feb67f](https://github.com/orbcorp/orb-python/commit/6feb67f68fc55be6b56d14b7fc0552dff53b573c)) + +## [4.62.0](https://github.com/orbcorp/orb-python/compare/v4.61.0...v4.62.0) (2026-07-25) + + +### Features + +* **api:** rename "trash alert" endpoint to "delete alert" ([75f9bd2](https://github.com/orbcorp/orb-python/commit/75f9bd29e48f6e38dd8580d28975102cabae4838)) + + +### Bug Fixes + +* **api:** rename "trash alert" endpoint to "delete alert" ([75f9bd2](https://github.com/orbcorp/orb-python/commit/75f9bd29e48f6e38dd8580d28975102cabae4838)) + +## [4.61.0](https://github.com/orbcorp/orb-python/compare/v4.60.0...v4.61.0) (2026-07-24) + + +### Features + +* **api:** increase max page limit for credit ledger endpoints from 500 to 1000 ([f4d07c0](https://github.com/orbcorp/orb-python/commit/f4d07c0d1c99667da0f54346e26581fbee00ce1d)) +* **api:** support decimal quantities for fixed fee quantity transitions ([f4df44e](https://github.com/orbcorp/orb-python/commit/f4df44e4115f56830b3e8134bb5738b74fc8ffd3)) + +## [4.60.0](https://github.com/orbcorp/orb-python/compare/v4.59.0...v4.60.0) (2026-07-22) + + +### Features + +* **api:** support `end_of_invoice` effective time for plan version migrations ([997ffe7](https://github.com/orbcorp/orb-python/commit/997ffe7da3cd03e7199c71291cb04486a2eb9974)) + +## [4.59.0](https://github.com/orbcorp/orb-python/compare/v4.58.0...v4.59.0) (2026-07-17) + + +### Features + +* **api:** allow future invoice dates (up to one year) for one-off invoice creation ([7c6a9d3](https://github.com/orbcorp/orb-python/commit/7c6a9d3c2b9c59829fd1e116ee251a95c9409f72)) + +## [4.58.0](https://github.com/orbcorp/orb-python/compare/v4.57.0...v4.58.0) (2026-07-16) + + +### Features + +* **api:** add alert deletion, customer portal session, and invoice PDF regeneration endpoints ([b393eb5](https://github.com/orbcorp/orb-python/commit/b393eb50c4fb023a8e1763473ad124e429eda6b9)) +* **api:** remove deprecated debug field from events backfill endpoints ([e6a877d](https://github.com/orbcorp/orb-python/commit/e6a877d34f30d55034fc691c0787b2188d09fb3e)) +* **api:** remove deprecated debug parameter and field from backfill endpoints ([e6a877d](https://github.com/orbcorp/orb-python/commit/e6a877d34f30d55034fc691c0787b2188d09fb3e)) +* **api:** remove deprecated debug query parameter and field from events API ([e6a877d](https://github.com/orbcorp/orb-python/commit/e6a877d34f30d55034fc691c0787b2188d09fb3e)) + +## [4.57.0](https://github.com/orbcorp/orb-python/compare/v4.56.0...v4.57.0) (2026-07-15) + + +### Features + +* **api:** deprecate debug mode ingestion response field ([fb8748d](https://github.com/orbcorp/orb-python/commit/fb8748df3f00f9272523db693c64850336d7c3d2)) + +## [4.56.0](https://github.com/orbcorp/orb-python/compare/v4.55.2...v4.56.0) (2026-07-14) + + +### Features + +* **api:** add `commitment` credit block source and `credit_commitment` field ([a438b80](https://github.com/orbcorp/orb-python/commit/a438b804292f8bb227d2d65a5e896100d0c9ce9a)) +* **api:** api update ([3f00a8f](https://github.com/orbcorp/orb-python/commit/3f00a8f95312ba543f2b280720b467113faecdaf)) + ## 4.55.2 (2026-07-10) Full Changelog: [v4.55.1...v4.55.2](https://github.com/orbcorp/orb-python/compare/v4.55.1...v4.55.2) diff --git a/api.md b/api.md index 37c8c3c8..01925c9d 100644 --- a/api.md +++ b/api.md @@ -213,6 +213,8 @@ from orb.types import ( NewReportingConfiguration, NewSphereConfiguration, NewTaxJarConfiguration, + CustomerCreatePortalSessionResponse, + CustomerCreatePortalSessionByExternalIDResponse, ) ``` @@ -222,6 +224,8 @@ Methods: - client.customers.update(customer_id, \*\*params) -> Customer - client.customers.list(\*\*params) -> SyncPage[Customer] - client.customers.delete(customer_id) -> None +- client.customers.create_portal_session(customer_id, \*\*params) -> CustomerCreatePortalSessionResponse +- client.customers.create_portal_session_by_external_id(external_customer_id, \*\*params) -> CustomerCreatePortalSessionByExternalIDResponse - client.customers.fetch(customer_id) -> Customer - client.customers.fetch_by_external_id(external_customer_id) -> Customer - client.customers.sync_payment_methods_from_gateway(customer_id) -> None @@ -409,6 +413,8 @@ Methods: - client.invoices.list_summary(\*\*params) -> SyncPage[InvoiceListSummaryResponse] - client.invoices.mark_paid(invoice_id, \*\*params) -> Invoice - client.invoices.pay(invoice_id, \*\*params) -> Invoice +- client.invoices.regenerate_invoice_pdf(invoice_id) -> Invoice +- client.invoices.regenerate_receipt_pdf(invoice_id) -> Invoice - client.invoices.void(invoice_id) -> Invoice # Items @@ -592,6 +598,7 @@ Methods: - client.alerts.retrieve(alert_id) -> Alert - client.alerts.update(alert_configuration_id, \*\*params) -> Alert - client.alerts.list(\*\*params) -> SyncPage[Alert] +- client.alerts.delete(alert_configuration_id) -> None - client.alerts.create_for_customer(customer_id, \*\*params) -> Alert - client.alerts.create_for_external_customer(external_customer_id, \*\*params) -> Alert - client.alerts.create_for_subscription(subscription_id, \*\*params) -> Alert diff --git a/bin/check-release-environment b/bin/check-release-environment index b845b0f4..98d98fbc 100644 --- a/bin/check-release-environment +++ b/bin/check-release-environment @@ -2,6 +2,10 @@ errors=() +if [ -z "${RELEASE_PLEASE_TOKEN}" ]; then + errors+=("The RELEASE_PLEASE_TOKEN secret has not been set. Create a fine-grained GitHub PAT and add it as a repository secret.") +fi + if [ -z "${PYPI_TOKEN}" ]; then errors+=("The PYPI_TOKEN secret has not been set. Please set it in either this repository's secrets or your organization secrets.") fi diff --git a/bin/publish-pypi b/bin/publish-pypi index e72ca2fa..ca7f5696 100644 --- a/bin/publish-pypi +++ b/bin/publish-pypi @@ -4,4 +4,6 @@ set -eux rm -rf dist mkdir -p dist uv build -uv publish --token=$PYPI_TOKEN +# No token: uv detects PyPI Trusted Publishing (GitHub Actions OIDC) when the +# workflow has id-token: write and the publisher is registered on the project. +uv publish --trusted-publishing always diff --git a/pyproject.toml b/pyproject.toml index e5459e22..95517176 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "orb-billing" -version = "4.55.2" +version = "4.69.0" description = "The official Python library for the orb API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/release-please-config.json b/release-please-config.json index 7da70c3c..775f041e 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -2,11 +2,11 @@ "packages": { ".": {} }, - "$schema": "https://raw.githubusercontent.com/stainless-api/release-please/main/schemas/config.json", + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", "include-v-in-tag": true, "include-component-in-tag": false, "versioning": "prerelease", - "prerelease": true, + "prerelease": false, "bump-minor-pre-major": true, "bump-patch-for-minor-pre-major": false, "pull-request-header": "Automated Release PR", diff --git a/scripts/lint b/scripts/lint index c577daca..aca7390c 100755 --- a/scripts/lint +++ b/scripts/lint @@ -13,7 +13,7 @@ else fi echo "==> Running pyright" -uv run pyright +uv run pyright -p . echo "==> Running mypy" uv run mypy . diff --git a/scripts/mock b/scripts/mock index ec569a84..c452ce5e 100755 --- a/scripts/mock +++ b/scripts/mock @@ -11,7 +11,7 @@ elif [ -n "$STAINLESS_OPENAPI_SPEC_URL" ]; then URL="$STAINLESS_OPENAPI_SPEC_URL" else # Embedded OpenAPI spec (base64-encoded, gzipped) - EMBEDDED_SPEC="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" + EMBEDDED_SPEC="H4sIAAAAAAAAA+y965IbN5Yu+ioIune4SkGySje7u3r67FO2ZI9m222FJXVvj6ggwUyQRCsJ5ACZVaItR8xDnD/79faTnFgXIJHJZKkkS3bJzomOcYmZQOK67utbP41sqYws9ehsdHd6e3o6Go+0WdnR2U+jSleFGp2Nzh8/Et+rlXLKZGo0HuXKZ06XlbZmdDb6zi0/9QLe0V4sa11U4lJXG1FtlFjZorCX2qxF6bTJdFkoL7QRW23ys5mZmdtTcevWY6dynVVyWSiRqwtV2FI5oV6Vymn45K1bZ+KfG+WUkGVZ6AxeHGP/37klfrn22G9e+8rtJr6SJpcuF6WsKuWMF77ONkL6mclq562bLKVX8HitjYRpCGlyEZrpH1UulHPWCVtXZV1NxVMrNqooaWK5WtbrNUxKG5E5XelMFjCMmZEZ9OZpcDAwWVzKnRe+cvpCeVFZUTp7oXOYaCV1oXL8NLXDBaAPb5X3cq38VJwXWnrlZ4bnINQrmJMsRFb7ym6VE48eeCF1DsNZSV8JbSq1djSxSm+Vn87MHVjo71Wh5bLYCadkgY9gaWkD1YUyFS/M+eNHfiziB+GJ0GatPK2Vg9F7vTYqhxltpMlh4K8qp7aq2ImNXm9mpto4W683ZV3R6mayULSAmYV9cNBrYWU+xW2UhY+L44XEIU5giDyyAg6GyOCoVH5mCpWvlaPFww8WO1Eqt7JuK00lLtVyY+1LL6TLNrpSWVU7NZ2Zu7AMXxXqlV7qQlc7ISs+qE6tnDUVLMhXSsLrXhT6pcJl+tEaJQqbyUL/2BwYaCi5n8oKuVUmFxvtK+vwSNSwhTPjN/aSPoLfLZQw2L+wK/y5LGQF457ChfjB1iKTRuT20sDi4BuFrJSvxHelMnCofKky8RwuxIujTVWV/uzkRJZ6Cotr3XKa2e0JvDP9l7fmWExEKb0Xi/95oZzX1vzt7vR0ATMW0sxM6PTu9HSS2W0pKxwith+NR5k1lcwqIAdGbhXd97F4ZPBp7YrR2SiM4fLysjWG0XiktlLDK5WS2/83eTb6eTzi4YzORkB2fh6PvHLw2+js+U+dnruzu7i9R4YeO5vXeI0E9TP6+cV4VMpq42HwJ7JQrsI/1wqnU8k1fGp0Dg9GL8YjX2+30u1GZ6NvtK8EN+h+5+lGe6FMXlptKuFUVQOBkaKANnbFzfCgawMnG7f16UYJp/6rhm3c1r7C9dWrnYCDZVdiES7zXOeLsViESz5v/26dWPh6GccDv2L/j1biv2rldkCVljvReYfoURz0pS4KHjk+SN8WdM94FtKLS1UU8F8+qe0XZkZ6bzMtK5U3VD/tL86+sz7aC+ty5RTSXVfBwFfObrGDrfWwtJkyVbGDO4/9Y8sp9JbuALEYz1TseYuIJwQeCUP14giO0sQFZnbSvHEM5xkYD/7rUT46G8GQJ/EYlNLJrarCAYXd1E7lo7OVLLwaj3y1Q24JXxqNRz7bqK3Eg7Yr4XekysqNxqOtfKW39XZ0dvv0dDzaasP/GkeO+43e6qrn6Clh6u1SOVhIXaktcpSVqrLNVDxQK1kXFf5053SKrfGX0dmd05/H4foW3LWGHvHMjH4ev810rFHfrXAJeGLA3Mwae+FfTF0UeP3CfL5Etrs3IfoZSVGzEVOBGwxEcKlEacu6wO1f7vBsLIx6Vc2Jjy/EhSxqxWdZ5c0J0kZXWhbhzk1HzQJkYSy/8goEZp3vLcNXsIHhYvjMlsRXK1yG5v635tD8+itP5GEQP951Rn2kLZla7+NfeY5PUoL4ltPrkN5kZt0nH2BS4xHRudHZKJeVQvnp6mPJtPW8ev51pV6kR4yezGX1fA1PbtxoDw72xo31m0NjLW7iWA+dgmL/FLwYj5zypTVeoWR15/QU/tPRD//XaDzaKJkj5/zpZ5IplUEhjBU6ePUEpFX4rZngn5xajc5Gn5yAYGqNMpU/oaf+5Jz48s8///zzeHSv78NfyFx8T/T/g4zg3unpQ1DW4hhu74/hmZE1iK0gjnygQdxuD+Le/iD+bivxla3NhxrBvfYI/rI/gi+tWRU6+1D78JfWAG7f7R0AfEg8tVZ8I91afZiR3L7bGsmdnqWAEXwrzS4cTf9hRnKntSb3++7HI8Oc/AnqS4IafIjR3E9vCg6I1bGThMmf/JT842fosrT+TZoaUa7GFILd7vFr0VYZiKiB0mbUJTUB9r21RlegFcfuPvVscBBLWUiTKZBN0Q7llKg2TikBJNUnek21kVWQXaNkMDOxS38mFtTnnPuc56osVKVQ7+s+crYs8QnYG7pPncrsBahQi2mUxkhw3sgLJaRgRWNmYICsaSqZbXDUcdBgNxHP2xMVZKDJdi+OTkrSrCeZrGRh1yelU2Xtso306ng6M4fGHFaE+VmiIsPK+Y0tctRVQMgns08uLje6UIcXaGbesA7hm7kVxlbx080H95U8OgyTsD+TcIIOqnuVqxOm7PW2LNQ7SpxXCvRgumAWi4TiC5vvoPv3ciPp3oRDgxeL6dFjmDfy1XFn0j/vcfsehseixIdj+QPHHzj+wPE/Xo7fp9+f/NT36y+SAcBcFD0ljx4MIsEgEvwykWASTlPzO/LqX1dOuMo6NggMg8AwCAyDwPA7ExjA6YgyAv/xlmIB+iz7zQJtEUB7CCNBQz4xgOgErTrOz6l43HWEIvuXdWW3EsNBIBrB2VKu0a4KwQFF0XINHHCdwkdQovAq7bnxMUj2HOuMBsRO9L8KvRLGhn/CZPg9xd5fCDG5oA/MTPIazBmdtPtzYpmF2TMLNmdigXENc/UqUypnGcX6Kv0B/dSlMnnz41Sc77WcGZI2tG/NsAR/cFYXEuJgKqczZPHai8rp9Rp9xpcbRb5r7JGGKKvwOn3Ai9KpXK00xqlEfj8zeQ18FpuHOJSlLgr4LdtlhcKhtqck4kB7xlDZShZCbm1tKpHXSux/YGZaXxC+dhCUoQ6Mcdr//SjFaJMVda7EsnYGIkVgAUqnJkEIC3Ey05k539uJK+fi8DxiC3GEJ9LpDMbt6yXOcyyWCqJlhDYXVmeKA3Nk/q/aV1u40zMD28UjOBa5MnYLvl2FEUp4FmEAIEmzRHn1hvUsZ3u//jozCximmq90AZLYAo8uHimQH7MNzkJ5iDyqnF7WlZqKhyD14h2K4jHIw/0bDzOyRs1M9wgn8jIfPjyI2vM5ToJ8zEFJEx6+B8NTV4wMQiMTzl9RTgRaMsiIg4w4yIiDjPhryIid0IqTnzo/vKXM2AqIex+y436EHYpcTw4G3gXRy7xH8esg8/pA4tfMvBs7/yXiFwh3ffKX+KDi18wckr/EhxK/Zuag/CU+mPg1M/3yl3hX8at1L1IxDGyIV8hhe5fgumJYKzT1kDiWvvQBxbID8WC/gniW0p1BTBvEtEFMG8S0X0NM+wn/O8+sWel1TYQ3Smf1m4SzZ2UeJas3yGM1vkpJCwknA/cWC3RT8Z0RwGJiQkJFKUihaYeljZn1QB5Wwh1Yblo7W8N/0w4X8cNzcEU5yGta/FXYra4w20HpaqOcKJSEzDBdidpkG2nWYLCTJgcrilDbstqRkywrlHTw3j7boiF/QE7Vv22/CsOiTX9XJvUrh6MO/GngTwN/+sj4E3ASiCV4A/d5gC9di/tQf6B6tPQb62LIR+AbzIqeBqVMaEj0tatqQn3kZ8AYfGVLL1Ya1TC93aocvEbFDlmSsaKwBnNhy5JYhKGUMPggsI6ZiVRxzOEUqLqbXLkCMwYhWsKhiu8gK9mgqkjbUewoU7TOdRXdRJOurQKU4qXiiefiQsuYAf1///v/E7n2mNtcbdRWaOMrJfOZOVo8/u7JU3FycftN8sEJd7A4xrXSTji1tReyEJe2LnJhFNkulmpmanMJxIVSwdSFcu1syEYBFpfSt510Y9ZWtTefVsLXZWkdPNmpHqZLc70JTLfF8XoJrmCC075OA6caONXAqT4iTnUNTSpQymvaux8wYY4hkz2Rkm3eJinbemdrILiBsDda1dPkR3R6pryCWEkTwZAS5jH2ibnxbF4FCAnVk++O7HLvZ+BeSYBfjt+KMaHWHc5y76HtNIPfmLj/5mmuz9ilQfol2U8rWdWkSCeRNe8rB/Y3zyccFLiBLQ5s8XfIFpV5C6740PwipqjMPk8Mv320LJEmMHDEgSMOHHHgiANH/Mg4IjvZ3gx9lkDbvBn6zGkFvqtI9JY7oSsvHj3Y5x9okfzg7OPN9rGBfA7kcyCfA/l8E/nMbA1ko4dofolPegAjQ5O3R4wsQltG5RQyyzCZRJvwHiE67aEphnbvAKdITUl1CESSQiBY2fCQVhFh+eZbVclcVnIR3CSFqijCAvKdlIsMAX8DlD4A9cPgUKc8IhNqDMKDeEPte1wqiLfYrOIAuDgALh5YgaW1hZLmal0OYHfPAf73Qu1rcvhU8tN4jQLe6dFyJ3gzx4xaGO6vNYifzJeYkuq4+XE6a0D9ncvm87/q9n+vcggdAi32S5vvY3Z/hVFNGK7OM9/KKttQmC+6gWP7zOYqnVfzaJ5R1zdFX/2SKccgcg0i1yByfVwi13jPLtsnZgWkF3p0LZssyifQDCNwosAUZBhgehUkXywVEj21haicqpOYENs7ThjFOM3DwCFhfC0J5gMFSP5dXfJS3cSw/WZoA0keSPJAkj8ikpxowSc/0R8HzIh9pJrsiNei1IkhkRskhkRwnq2SvjyrJRgD2BJSx5CCSVlqz1N9/MVRqlcep2UQGHSjI9KKSLYPmTH7Cfx7sWPGhb45hsyBhg80fKDhvycafsJ2iVFPPEQfMWcrylsJ3pGWE55fsIRMo0kmEnSQwZso9kQQ5zwoLFezVGKj81wZMjkBSSene8sCMxXnea5hWBC5PhYWcAvjSLSPwxgjf2kI/8wg5WcbmFOYzU+hGbleYbWYwFD2mQJ3OrCFgS0MbGFgCx8vW2gB1F1T0E9E7TbA3Tv5wVo9EIYDQkI0thmx1hfKhC9KL+TMPGdnhsqvKvCFHxq/tZ+sBRkhvkKesKqLYmZy7bPae7Ys7eG8OOVt7TI1Fl4p8TyNLXtxdJJZBxzDZKqs/Cdpw0OVyGjKk+4i/2rM5q28FoMP7ub74H5L6eFJ6xQPQsQgRAxCxEcoRDDqemGzl/7kJ/zvISMhvtprJGSYeWh8baEhbSR0rkyFWLfBchhGctCCh80n4Zvvn4eGAdwgfQ2n/AXOeKC3A70d6O3HRW/7cCr6iCoDVbwFVW3wKlpUtXHCQNThP8FL3qW7PkA+nM3MBCMJ4wNEaEil0/0KKlTDfQpNz80uxZJUe99xAOXg2SZIRdGpAjw+Kwu5A+UwhBhyOwONKNoQQc4n4tEq4FZDpJdTYq2MItDFONAI4tgzlDEFMAaTZAC80NCtyJ1cVZwQNJ4ZIS4sljCBp97XMHiqJUMdGlup2BO9EIbPY4TJlVITPvu//d1W6v+ZmUf8ZpgGK8kR8lHgiWsmpJkb0qcYqcOpOPGxWNZVuqLwHmCGrAqVVTHHSfHqhq/E5QprwB+BRaV153FMZ+bfTnDshzA0bgwzHsAzBvY5sM/fJ/u8Sl05CcT0mnoL2jwjAcas2rfXYfa4HKIsA/1u6oIwK0LcJ/4c8oJHqy4rRjAjZly5OJJe2LK0PuAiQQ9baWoEdJJ5rvLjMSQTHxpYm7sgUQ/2UAga3sBpbnF1XIXulKYz81VncTyFXZRyB1jFAjYrrwsF5UqkMTjMuqh0WSgA89U29+JITdfTMdRiqzZQV4WaegGoiuL2HXrgYT6xacPjmb0GYxmu3v6YwtyWuy72d2Hp8DGEcTcaPF2ztGWEZ0bMY6lNwKNOeiy0UWjQ5ApxYX2D+BJ2eu+gwF4DH0/2m5cIdxjyN5yCNToGaYlBJOOSoLmdoL6aJbl1Czj0mdiDNWfA5wKSNmBDoFtA2+azijBhK5kpsZU7jotEALK6qh0se6Gkx0P7GP+i5cgiulYoJrKsdZHDGnFlOSxOA7Zjkha8kGsJwGHt5Z/eunXAVJ5IFJN4uf9wev4jnvn3PJZB7x8El0Fw+XgFF9AYD8soqFD2OWebp/tO2a9VhRD57D+NzljqEpiCn4pnPlQRxfxAwkQWyx3UA4hlKMddkAvUdvsKVlLOYTqsPT4N/DPo/CLbOGtsYddQWY38t8CpFyEuf17prVoc8poSKwizH5IKf8cOzfeyAuMR5dqCfQKyOeBwXb0sLLidV8+/rtSLdJD0ZC6r52t4cuNGe3CwN26s3xwaa3ETx3roFBT7p+C3FxWRyA+i4SAaDqLhRyYa9mRNHpIEQ+pk8vytS5oJMEQVSjxf8GeAcixeHLH5TJv1SSptHUe0itTh4ZW7ALsIWXdEC/AtWAW8qC4tGBwKnelKbG2u/Bl0dnsqvi7sUhadbvyZeIIIejsK65tTpRCTw3z4H1VqSMGhhEJsQnDFXar8EWTR4Efh6r3RXONFbTRwh2KHM7wzFY9Mri90Xr/LwEBuUlAMK36AhoQOt9rHnPwt5jidf/NNOhIEB8QISd0MIRjOYgVgHObdKFyKpdrIC23dGfjDjO2OmUoOh8biyHCpkjUtvbEu+doxerpwba3TIP4V0X3VWLi6XwhrHKsPk/npW/0K5ssfQiPTwZUN1cy83KogIQbEQ8xBAC2islDU7IKi982qhmBNKr3XPoa08zBvA2y/ADZD4H2KNi44A3O5Cx9OHJogHfwIdckQ/tHXUJ8ts8aD49HABpkcy6XJzFnvk5SC0JDMug/gPHyFcscZKF0HzwzaUElAEbPRDz/88MPk228nDx7MRsEUOBvdOb1zd3L6l8mdO7PRMa4EYjwIi3v5nVsCPD+YA18qxODnTZvDps3xdCUb84WtNoevFlYDzoraQyrGhBatvb643xlabJe22hCOJS1s2h/9AwgfOAaLnThCXSDuQDICXOkcfgzj6ImbDQnZDVX6lbKyidw28tUNrqzWDHKQAQcZcJABPzIZsGsePPkp+deVsZg9UmIrIPPthERK0n5rGZHTOaRpgjgPp10fJuPvJ++htXA3zaMzUOiBQg8U+mOl0Kwr9Hpv+Fmf6yY2eydQydC6Ays57WBIxtfeBUWSG2Of6ZBWlvLAv3PLT7147itpculyVKwaNwErMVel7bG6psTzsFB72XOfhFEch5mCpnGh1WWM4QxhKqBFF4dcRclqD36iwU80+IkGP9HgJwIBNBLGQf4c5M9B/vy45M8eL1GvxBlcROFhr8gZxaY+B5FBs3LoADA2LaWwuGoXrOkZhnvqoqDCswXFd250ORVPFGC3vQ8pL0AvsAeqG9PqdIWhRGzIJ1EVxgPDX9UG409loavd2czcEud1Zbck7WLgcxRXgvOKI4cVFXZfcITyvHT2QufKLdC8vfczlmgC5xJ1DyMqduBMwVygGLALI4iLIh49EOeFhpjaF0cn6NjwE2nyyRZA9DIfFY2JpLeOrxwrfG3RF6K1wK8+DW4NiFku9I+4V/Bd78FWIwt/Eh0YfR+CCGrwAETJWiylh3wknGZYL5TzQj+LBn3voDW/OaC/FsBq+OKNtN8ngxt488CbB978EfHmlm3opI8Sn/zU92uvVb+Xq7NJPxLgXQzJfXNdwz3zfuwmhzrxhW+s9/1cRBz5Fk9/e/Z1HJ3QlCVDeK3E3ZGterWVptKZJyEgHb56JTOwVW01rLh4DrHOjXTBPoUgUxx0OoQRhQlO0DXw/r0PfQt4g3wQA5cZuMzAZT5OLjMelfU1WMUzqmr6i3lF3ennmsxiZo58auZ/N2bxflgFL0XDLWhOV7GLzhsfiF+MR68mHhJKC+X9BHsFb0P+9ozk/WtKD3NdvZ2qNPCvgX8N/GvgXx9KSzrJLCzYO+pK2PgXakwSIoYny90EAoe9kaXfWHLQtwCR8Esa7adjqKeYNW5QWMUdpcZj/BSkRpLPSRO6OvC52uTK0WsEo4SsFJ48bwEa0MMw3D23e/ruCek/6U8TbE7BxDQ96q8Exzoy5TFMgn6sDUKsSww3rjYS0aMQTSDbHfcYZtl8CEH5Tq4Zfl2HI1dZSxHUBheXbahCii3YkysnjS8lhlQH2zLhFcC0sKedrd3MQMhwDdmsIZ3gGSwcBiewddpXYumUfJnbS4MTa4LYN9pX1pGdloPThVOyQKdfA4BBiAlxHBQBPcU8gcc87HjELrTXSw2WZpiqFVCVsIkO5yBqCkyHi+X0siabKW07GMAh0iME3GNcOJlcc4lGVhiah3XwCAoCd026Jrb9eV1mdpvgi+wdCf6dT0N4PYAqHDcox/A1KqrlVOmUR4wO2Zz57vrQusBJuDsV594r73H6HCHhcYUBYhlCVryQqxXAUcE2JhErECagCCBFgpuBb1KunUJ5DvChufwoXDo8mTjSNkDKoW+SEIk1v+AJYoDEtJF7U/G11IBT4fV6U9EGvlS7Znc3ShbVhq+GhwRpoAiEFlIqB6E0oq50sKwHNwaPBjZrqyvEoC6VoTyJTz4RSKVgxi0k6Jn54mDNStw75dPlh7Wh0gkt+tBsUvDhwLxDeBHejoT6zEx4P+3kU3/gDozF0tmXygi8W0BXIe0Ftk1nupRVIHJqKgj2xClOyWhGPTM9ww6wLJhlADAhSuZhLcJJb4cv9c3dOp5oA5pCN2dmNKTJGBrNCgQjAgJXrySI62PARcODGarDoZMIcYHstqwrJTa2dn4s/mWXwtUwXknJDlL4nclw/Mq0d21mLm1d5Ampy6Uudgl1sqv2dWBG0mQU4XmyUNb3VQMcBBRhBcqIWMJMOtk+Y/KB8YE5AMmOeEC8hOhDk1XTLW3epZ2ZdkugVYUsySnEUcK53I35ymIwDx0IR6SMMoSAOwfYP8LgwfktMSGl9QHCrVuqUL84D/69uGLhBj12CmD1cLs84QHhnzQTbh6+RjQtVwBLE9HvWmwtyxz66ybSOSUBKYFPAJZvhjsgl4WKzG8PeAmnykcPxltZgNihLyIK0RbIEbJW/v44XtQmTavZAJ7ll/UWpAg+59ipZ/4Jf87MEw3Mka8vfTQ+psyylcwq5MICBFC+zRPO6UE6mFJLk0dCCvVVPvV06bZKAvzRqi5QcMC8qDyKV+QCvlC92VYdstJhqeK8oe5j0ZTs7d6jSL6aBeHV8HEFlmqtCX+KP9391iPDlKoupBs3Tktc8jmOeoFyXfheuiXiUpvcXoJ4eEsWl3Lnb13nq+Q3br6iTL6APiLAE/pY8RrNjAQgD5REAPEL8JSCBaQuqHD4ecOZ8KDXHkE/V+oSUsGwjLcngRUhITfIPNvMCEG7tsju1KuNXuqq40EvZQUSG5xPTPLSru9wBce7dnDI1CV800f2B3heU/HvyqmxuATcSV9v2aaDBCIMFpZiNvvTnen90zEVfksoIZJingIjh4Wp2BU0u3/KlwgiFOCqB2hR5vpXnr2Eds4gUmBtGpmKZpVOBoXN16JzXET6Cwimr9MrS0L0a/EkrN5r8RT/ewT0aZrsx7EQr6H7SfN/rX+IK//V+gd0Q3mDdyant0XyjzvitfiLeI3rDQtOf94/nZ6eXtXsrngtbnO7e59fv909/Efr5Wu1uw//+DO9/HnT7vM3tftMvBZ3P6OX/9K0+0toBwT1E/EY915nFIjqGRQXthmD9JrQBbGAsJQ5BBv/reRGeHM7fDal/JACE+41kP9GbQwhLkgwpzPziCWFTHo1ZjkJeyLSgrnLQBewcdAmMqA21aVSpodu9dEZ5jAzE39PMOMoahcKapHuBSKhQHW0bIJx4lnGgXf12kq+DNEfyRghn1Nmm+SrTZ3GQvpqKhoDL1MRubQXqpHFkDLjVQkBwyRHLZU4bdimyixc9kuLUtjMIKsAET1yhB7Ct2HgvZ2CHGplxEZXlLoKZAlTg+mFlq4mza7aJEobXmfID/ZVYNVPOzIZySQoW+zJqWOSfZJd8ZswwUYa4LUJEdECESNb4i5uvUeMJpMTLCM1StZ+HFgIGm3pkFlT7KKMRHwNhCQ4hHslcOCA4Az6BgCrqUwOd8HYZj4zw7TVqIBemcwrKOrtMXVk/Q6tvgy3tPV5QFGEExVGiBwStw8+A2dq3HNTqCYc1yBqTjgcomgB4mt4DQY/npnrs3jR4vAgRlWuzqrWckwF43Q31wcD8LwPZ0JWMxOz5Ft8KyhtVzK+vhPBEJc98hUI9QksZ7sr0kie1KiGRyqqk6QS5t8dSM7WoG/fr1DPAavRLogOj7ruHe1j33DOKf0cPTwOESsXxAg+m5zeXohJ+Ofn8M9xwtNRYWvJ7GzogPOCElOxYom/meanXlxaBx8NJHwcEnEwvwYOFGgQYb32peAeobBJt+d3wgB3/ENKQI+6x1j8jTnf/cnt++L09Az/txh3DmJ87TPg//G1Y5JmkiNvcvVKXEO+6Ugp4iqZBd49jSwaB/o6HQ6+cPvgC3eZ24vXYjqdhv8PP9091Ob2PXrhXvpb64XP6IX7B1/4nF74bP+rn/e3+RzlEFjQH2yNJlCy24KoUOispUNcaF8zMsVzILcvjjZVVfqzkxM91dt17aaZ3Z48/d+bH9ZbNS3N+ngaBJdvZeX0K9ZoI5Y/KdqoBWybF7RZs/amtwDGIg3SVRRCSGVbO1uXIUcH7i63zgEdFhA2/LQr3czMAr82x7Z+0TD1Bf6izXr+Uu1YEiHuLN1u3n64RLBbS8Q8GTKA0K8wCQjYYzB/zEzTNwoCh3sPjy+kRl098mWnUVN+UDvk5KKCH8bB7E0Ggkw6twvPoj4M4k4Jq5QYEQEpBF/inDDW7MWRdeL26en/IE5l7MyEF+AcKMLxJb5H7ZkSaKLOVPkgGlWCMThHSYs/j+0+RZKIumwwdvtIy8EsAS8F9Z7mCHMAk4assOgdJQ3SmmsjFkG3W4ybHW2vg+BCAsR/FvT2WfgDedFs9qdTmAFUgIX/0pd9BUy0EUvaS0crQm8u1c7y8oR1g2XxjOVS7KbiK/0KPApKscqGQhpaaXKRtzb3jXFguGrvzbt//fy6t3Hw/zapTY0U+wTo/34CIJ83to60YWPsal/agr1guR69dndO79wh3e3p6X3iRv85Sham0/5G5Hs1i/IQ/elvXBL1qn9JQDLsX5C711gQZfIPsxzKQDbr81FQc0fjUSMHwlgOL80/gKV8a/N9lAnwvjtboF4R4Yp6zHhEwRqd7QqxCdFoDyjYpFiD2Niyp6P4GV1D1jW2TmaQvnLWrIsd+BXsdovKDKmmO1sDY+UCKaScJOMOAFxppmq0GPwG6bpol+7NQA5Ga5g+rUsQEtDBi+FeXnUybkN3Ny1/EW/bEAE0RAANEUB/nAgg8pj1xQAdrkgZI4C47IYsJBpQk1Cg+I7e5+rfRziOfWD12qhXJRBzsHqZyY/K2U4xEjIxJcAa6LZdsMltLouCK9gsWD0AIrwASXMxJtyPVndH1JBDYuDL5HxWZVK3yx83lcga7ynZSaJtqZ2JsQiEfhE4nOdcUPSQosu8SjAoxVNkFeixkwXYRIq88YniPJIuIS/SiEdPvhP37tz+XBAbwxF8jw6tmINJYPQNYgRO51MvFgoDRvSFQnDARYTSVN1HiLkAxo+9n18sxjPT/bmAn0mT3HuiXiy6rgDPtnIapwftNdoj040Cz3VmwZwbex2z73kbzfhkIAq49yLGHS1l9pLUPV7+N2sx9N7vSY8ZkFf+IMgr7yzMcoHD9ybTvsvxXFpbKGlGzZAfsS/lvCgElu3ZR3t6tAp0/ilcRKTyVxDzMVhRLhV4BIMDJq0BmdbDSo8vzqCZ9D7DuREK9cNAHgXA5XahdHpI+80c9ZWDvpFj/uaqMd8UeJ29MV91Om4ozA5X8CKhc9BXB3110Ff/cPrqCckqv0Rt9UHeeWMGi+q24JhjL+ayzjX4qedtXBwqvknYjqGt33nIkuAchAhEmSWBw1CpYGYqCUHgZQFlIyH43uZQH0H2VAhnxZtF1eeNNn0wgyUBjsQhYBiGV5D5UUEs9/hqZMuwAPA2VXf4FvJLQgarDRUZaOZN8gePd6Uk1r0EOz77aE+4ouUkk5Us7PqkdCoU7owVMlwMLXdiK/8FQUq7UmFEJK4On8lEwQ5LM+axgeynCnsZPJePgqV7Zr7k/TkibdKWtItU0lM7RRHZXLETgfSDUoCFYsWFlrhM548fzczR8/M8F9/QKj2EVXpxxLg8tHQTXLrjYyryli4n6h+UAmH4WLTC1kIYSRIjpQq91hA7HTeNCwXAn8Eq081ZiC5PjJTZKP46xPvQhDh0JJafxwV7oOKCPQiR16Qd2SyrXTeTRJomDDUtkdKaMKNfXHPFqDp8CgbV/ag2oIjEJK8plWVIPonJCiEmBbW4PExrwWOCgxVinch92rY3UWlYcPyjCaiynJPGhwhsEVj4HpYItI8ssy5Pots6IbhYB6Op8DIV5ybMEVyvMcY9ZGTD8ELgAE4bY+jTVR1TEUImMz0HY2Yi2XjIcXmftufaBHKHyF/2mZNdp60qhWgHXIvoZG8IRJp2A24qiqqGQKW1dbracHnf9sbSxJOAn1veAopWRXcSJpQah25xfA+Y5Kj+YSw0wr1Hsx/lc1BWEexPWTpbOignDX7wcxxamrdCXvXQllbV0CjIyAQUAWOX7ohLpV7ymI29xA+Fw9Y+RBg0tWtVeQmVfkEuyJsLBryAWQH2K8E3bya9q5AURGaC2USWJbWlY1GYziSSkFvO5oirH3acWs/MLSgf4zgbECDLwgZgdZXeNaMohqZFmC8mmuy/eh8Ci5u3iRM8Aqcinu7Seo+Ej9aVDx1nbwISwqc+uTyVFXOonz1vm3450CNGCvdNn0y8YOuhRuNAXdv1kniBkIFwYRufWLObnfJ86cgH61W61/jtQkmqyyPF3CswOFZq3rngEPBYqnaRbg759Q3pgeFPRTvrrV2VB+PlqZNIFDjLNrA4o9bkku3SdxEpZ+AQD5vjRIWuCUYbFwDD7sIuByA8fCnv9sysVBwhpvVbcFMdUpz6mQ2uTzC3c/QpTzmxBqVGO4wpAk2hCpPAMkgdO39Mkmj4x1gsAt2d8zcWtLvqv6BS04LOUHzWhC8tKOJpkeaI4o0LQ6VocuWcapeJpTNQaPOyy8B5XJqLsBPcR6sVXnM6uxwsD1tiZkZ1dzSmTvFO0rLEgDmwwSX73IhPpVMTH5YxpTidExk3pMUMOELK813lswVLJvOcCDYtfWvaUBkrk1WsD4ZkIQ2P5zXgreUgcZa1NhDXZURWYOitxayfKoReS3dVjauwRv+wOuejVEGprS9bXie+AxdWd0RI2tV4DqxJD1dmHVlfch9m2xjiw7LHFETItNpKbSh9OSHknI4IjWAAU7GA/8ydkt6aRWRLjc1b07W8wCn5CG7P5JrapfM+dCK05xn/gp0XhzZ+Zq7ceR7eOYShkByLY0ylgij+yt6hdSkg7kZGQZXJJsX6ePvCNBJ2Hh7J3jL/V+0pe6JZp2t7pwIR/IM4qQYv1eCl+o29VO8ym285U+ocaXoyID7McyL2Hzb+MIb24Zo2fzcseU70FQIUqdATMos58cfReASUm/8zj3xtNB7JQFGvjmZE8U08hacJ9YAf59jkg84+QkUAfSTp6zqjfVLJqvZ74/X0803w5wxFM4aiGR9p0QwkMqTbPSTb3ODKG1x5gyvvD+rKmyNvhY/3F23vLcbRMnG8FRKdpPJrkIiQ+ieMutx3ysgkwXpfMWyL4AxvByh0LGSlrqgUJIesPqzUVo2lDPNuIWX3lfZVajkMdjYM0kDzoszJFtkaMuK2na8AZgG06EYN5qmPxXPyh7JFggMpuojfQck8bqMw7BsdAS6sba7iSUFs7VRNowIdfgWDGZux0LB7ZyrO24veq0J3fLDR7tbG4kILFlqWo54T0vaFeI4pNcF6Rbzn0LxZuT5ukrkTMyEAX3GuaUQS4LdwtOgkCtACBoHmYAbS4862bL7VBlKj0yPGhuZovG87sIKLKRhh2DbTWLvB0u3hk21jN+LIUaA0FTLn+iK+C7yBQBsBL4/2IXwLTUuJUYYBAQOiRXCkhjxULJ8SLFlU40W5OWhnc2g3R9P+4jiaZug0czfQuP0LWrfB9r3k+ork1+IzA4MA59giXrwF30wWyHjAsijIP0RTBsd6NBM0q+ZbIYImeoVblxQSNpvi8gsu1kjJveimiHlPYYF3dF0TwoRnwwKIDwQEkEWNYwoCWEFrEcbpLDL0o/l0LomHpYyHeSwSuxN8EYEEwdWsjXj25EHq30SHTMutwueI0LrQ0dRQPLA2uEj3VogRd6EMmhkyu6ac4+DGT3CQvNFlqSqhi6L2FTg5MEMX/W7h6oilzXc08kBKo6MIrdVkUicrszbiP6SpJZ0ESPzDry4WC+BuM/MTTHuWKJyz0ZmYNWrxbDSmN+i8wlMIi+ZWuOkYFEfNMLHw9p3JnT/Hdj1Hm949nd45jW+lO49PH3OsQw6fi2d/NDM/4+DbvgbABm+ONx/8EB6Ad9QzD2tR6SNM/26sQvEw7yUBSJNDRH8z3cXxXwXUugb8CI61UOwjZe7UuB4/wbgKLmNN8H7hKnedwFtpNJmqfOpGCwE5dSVyqxgrBtOQ0+6m4t/tJQwoAAsigMfM9FE2NnvDQQoudD5dib8Pr9BaGbC4Bmwgu1pFMrgXQRGxf8J5BAdHiFpJfQwwuDlAxc0jTiGa5froYAquw645xsmzzMDCeBDutAUWxLxiF1I4EioQfb5dTwEj0CKPDcmdccoWsjtNXoCDdkfm8sSOb+sKMOqgL1hEYvNb6V6qinzVUSA85swVeDiXfg7UJW5Lz4bFVB1CsUXT/czkNQmrIXkfk3VIDJpCJS696l9S4BhrvBeMRQjpRL0cLuw+Y8rtDwzx/pL0n/DZXm5KgDLkqAVJTmOS7oJWZZ7X4bpZBxbaal4pt6WWwXgA08/BiL8FeF1k8LViJxTH4yC/N+sgzswMsZ1UrO2gMlIEQauAwRV8tAmNAflsL1IGvEsQ2+JTjsmgCIDAArCUFFYRWMGPiJBF3IHd5zEbqW/3kKgA0BMGoPGhdWprL2Thx5gshY6rhTgyNvast6XMqmNc2z3j5kIcdfjTj4SY0bx5DPcMIVKn4jvAcsLvJLO/TN1GCPW5VqbWBmYKvv96C102N4RQFsgLJTRIwJEnEilswGebmJhVGuuUCozwIBwM2DeOOWg5F3HnA8ukMIBHTEJQBI0Yfo3QCGEH2PCA1NnBNWLXwR5K51Ix2o6B8LTYfSISJeF1fFYPSUYHxaJfKE00S5MqVm8SFGKrHkHhzukh7v49nFZKLcwAwLmXv4NDHU5nKuoGzzqR5U8hP/Il4VqRvoiHsKshsiw0xuvPDu3+YIh4yfdvyJTuXOPQDFvPhCkB8UvlBKFzqHkYYyvm1mlyUkFwLKs0DTpZt7OZWVCoxfxQpzErMAmBaGJrabIQdUVrACRrTw7qqDMzg+cqlej7BjHuhE0lvBUBrzhqhOfbTi9FCYVV455KXUEzDogMrTArRlFrr3JgQxKEJUBno4gSVpFz5Yl58BLNDCPoRFbSeAaDXha34JfeK7C98P524jzSEIDlDrniTkl3dp17t3dAewX1t5DTyaulc3rhmX62+eqf6pt/f+y++OHeeR5f2z8Isce7nR73bv1DXIkkPO9CFjrX1W7v3kOwREvn7bnxGHUhO8fqDdca2SKBcKcXeREm35I1KCqBblqSJMxJvOGcBPWRUejB6BkjTmiQY1GXEWKQGXtwLUdb2WMU1VGXbEedAJqLU6saAf7a8SYg+mBUBj3vCeXoWbba5DYNU6Mw7rdaxejZvHIpEaMpldv2l5JjcgBUn6kExrg2EIbAT99qvQNsWCeq+DpbcKhubBpRd8NDSj5QgabzPO96pXZs2H8MK+BvZoHb7pAHN9rgRhvcaH84N1ply3ldXhfJ5RvQqypbTuqyp4ZTm0FAotiE373hnGFAxPidxRr+liEqT235rByiUgZ2OrDTj42djt8mioRY23uLH+HurhE5AjkIumBAa24WawIczJEgn1XOFZyiP9CjA7tqFT1i8w/YztCDlxqdHIBAs7UuKZO0ccpvbJGHbEIZBiYLp2S+I6uj34+/CF4dMpKlxZxUY6nkvhqcHfQX5QeVUnr/hgsdH1odRT508xVRHObALQduOXDLj4xbvjfl8+Qn+gOe0fwAd+1NbPiBQo73lqw4j608x0wQmzI5Go49ptKzex6c095muklbLNsWevacljEap9o4W683Sc/7PIpm9755VJczRbDysLJXaLy/JQNssZ5eoif40reP9MAtBm4xcIs/BLfAejnFHGpZQzDLqC/Yv7fyPCtq1F5w+zdxiS9jRGSn3X4VZ7JTUQiK31hXTQp9oXLx7PtvyHcXEL9mSBDAv5dJxveBuI59cJ9YXQE/TVn94fsUogA1uynygf8912a+1aaulF9gzCaWRfjsdAxlW8TtP58et+E8mtgtVDtD79qguxmmDigJO2Ex+oxxTttL4ffW4q8YvIZxbdzLPChvf0MD5AKzG1D9hXCnWBWNOzyoycX4ehrBhBtAjYk/pHb3d3X5GFfiCS3EjVTp9kY4MOuBWQ/M+g/BrP3OZHOO/p5vVbWxuZ+DH2e+lpW6lP25er3s+1mJYWDcmeDOyCkUfmQOu++LerIzGQNK7nXQDcwPsXPaCR4kR7Vpz40i+pQsigZ1jYvtNsCLyPQh0yqToU5RUxzcMnwVlEcbE84cBd5zWB/GK9flpLITithuj1sQlg20xtHdugVRgbdunXElhBaQKBpYkcUWO6otG6vw4fSfVE6XPUE9sHsJz6UBTHjhJrDyE16hj4QDD+rlwLEGjvWH41g/pTxp1BPb0stw2oDPb3DlaR+ytilio6H0AdeYIrEhbSjEozuuoqzEIoyA61JTNVNnUS+0K7FUwBvIVAgFrZGG8zulchXEti8gIhejP/m9M0FJUHv1KLAktCKG9Dx8GfIyENfvxdFJZp2agF6mysp/EmZyzN5IrFEKZfpq0hU58Dx2BPX13lji84NYN9+C+P/6FQcGzWfgIwMf+cj4yHhU1tfXTa7JK9ooH6KmxpTTy6pSUGSgZFr3N8gXGIsF0DysqLaVuoh/zHMFVke3w0rz8hW+PDMLyAOcZ7YoCGwSnm5VJSH5CP72G11ilW6Z5055SCResPUx/QlgBEitmOPXfKjS1hSVI9z2YO6bmVhjL30JId+Bhy0VpvZqCHjEUrCQrR2CRJZKGUL/bAOlTsV3aI1caVXknnMyIjC9U42yMzN6u60rLDe+x5Bo3X9LjvT+DYIPc12lDOfNxsCBEQ6McGCEAyN8IyPsCcPo5YUP8L038MJSOQg995hcV6gqLU/ReNQwK7dextYMd4UwPhyTMQ42v7xtX4vQH1AOh6I4vK8hTzG0nEaNhfEt6IUm2iOTBjrAShyoUHHseuQiqKs5wAJwWEggBe2AmWBSH0Dw21U1j/McIzQJZtpC5m9TEpbcgFiRIA0cARx7mDVkv+fSb5ZWujzCGkixkS6fNJ2XkNLLgZmAIBDcitC8UnIrcg2A08Wuz2zYTI3AyyHkZWeyjbPG1h7shiYaP9WrUmGNAPgAVJiQM7NSl4K9j4S9YUu5ppAc4RRF+gc9M4VgwTj9APjS2kfI6oUjABfPVOLrh09D1D8C+BSqOT+kOQetmQHHEGYKT0x472AIzk1RTQe75MBGBzb6+2SjV9glTzimfo7AC1zS7drGSkzFaxX4CD10+e8nn1DNjwjgQ40CcEP3d8wlMCEJYL9kRVNdnFBkEKSlXWALFo8YQkPJUz6MrCcCPIayaFDTQOWQtF5jN1Dfgjx4l2opy7KrFUZDa4llu36wNfZFnjdgxnF1bMTRkmKlX8FHdD4pldM2oIF0g3Gm4ku73YLKymUaAowgwwpwXb7cXhoAWj558s35zFxoW0jiysCpAYVvY7O0XANbUUM8aeuLTSGm1lZA2SKNUTiUHZcWYrOrBtsKpKc2pGaoNhTWC9TtMFusa4P4J1AjPZom7GqFNZEBVohBQGoVFh4LGrWFpoPVkLolOfKaQcqgkwaULNSXD9Uy8Jsk9DlbFFQREShIU5Qkrs2KUwOpJ/SBIkKC9hn0ovKDKxrrE71pReN0MF9Gsk+XPwllpZo1IrShmYm71ew6z0eFlU3O5WnjaY7WIqcAPOkCQr2gAFn3eqZ3Ha4niaPgWgahrbBrWHNBBc3aiIxBzIZqdnAdKAoMaBgK8AiVBN3rAo06mC8U5uBJEA9Ycg157IndwsxfHu6kQ5p+RUFryOr9nWX1/jYw+d9FFemp3u6VRo8nfw4d3ZyiCXujvnLQN3LM31w15ptSRGFvzFedjptWTIEpJ2N5P00p9WCyHXTNQdf8uHTNnvT1q/IirpIsD6dFGBE9bH0NSbMgT5s/WK8PxWEQB+A3RDoDxeCy2DUoi0mfb84O6BE2fxfevb+ry8NE+qa6+/pHOnCTgZsM3OQj4iZXWS4Bzfb6psp2XKWgxm8ZXQm1dDHoPJc74Y0s/caGiqqJbRK65mLU4w7aPSwMupy44CMYoUjYZ9hoYEK1yZWj1wiV/MiHuMnULxmKhvNwXxydyFJPnFopMI2qk/TdE4qDTH+aYPNjBOKk6VF/UJ57C9afbAyToB8JcN9JjIBBPHoZbbDHPeYj1skLMAvJNdfX0OEUVdYWlLSQt+2iW8xoAJpdSszNC7mI4PZzGqaFPe1s7WYGMHtrr5xHON7bU/EMFs5XAauZ4I6dki/BQooTKwCTHuwhYqN9ZV0wFqNZCdyXBWpbiUfQtcZB5lqq/POYhx3P1IX2eqkp9wFWFdBPc73C/YA0Q3dB+fwQK2QBnHxZM7IMwTDDWqGZLwD8Y41iqIWSyx1WW9FbBfV7oD4RmFHtFpYplhl6XpeZ3VLNZOxi70jw73wawusT/vk4ekkRHpgs64kxVzZnvrs+tC7HVKrn3EOGJIG/ksmKDHfBKArpo1ABAbexKbiAdhslPZ6MUrqKb1JwHXfLGOPJxJECOm1ZWr6rh75Jds+ygMNrcryBdEKL6czcm4qvJWISeb3eVLSBL9UuMVwrWVQbvhp+LDwUoWEE7VK5DJahrnShf5RVEqDMoxGxjicgFjVIwEiWELA6jTholx1po9Xj3kWxNuTXcI5siz7sJwunMi/ejoT6zEx4P+0k+lq6d2Asls6+VAa9D5jPDK5/2Dad6ZKye3GJQ7i5o+ofxqaBcj3D9jxhNnljPYOwFuGkY5qSU9nhuWM5H6r7ZYTaltVO0M2ZGQ2FDQyNZgWyDkEkq1cIDh4qszg6KaGQCRZxsduyrpTY2Nr5sfiXXQpXh/AQDKuAsAUqOGDauzYzlwjz3pC6XGqIRIzUya7a14EZCX6YoipgFS0U83qlfPQq6K1agYIhsL47EZekIhb4DsKBAdrSWuim3npYQs2qU+yWNu/SUjhE0xJoVSFLioJk034ud2O+smhdpQPh0lolwI6pUBffP1rYpa02naFBC3QKhaolsSBOWLFwgx47hYWfYLs8hafgnzQTbh6+RjStU1ykxdayzEEpDjORzinpfDwBVERKF5TA1kIJ2ysmwUevqYfTlKsI3iUdK3GM40VNsMziBoQyC/UWpAg+59ipZ/4Jf87Mk1iBJzxvHhP2/kpmFXJh9GXxbQ4OSKSDKbU0eSSk4NT71NOl2yoJDrBVXaDgAFVDIDqY9x2jbWCMfE99BWScKWGHrHRYqjhvqPsY6Em88u17FMlXsyC8Gk0NoqVaa4N+ulCeoPOtR4YpVV1IR2h1i7jkcxw1xRSH76VbIi61ye0liIe3qILVret8lUKWm68ok3PeTQOmjr5d4PVQMYt8gZCyWesiVJ+A5cEzcZ5kdaK1wyNeBMRCQewWyDWeBFaM/Nog82wzI0rsRHanXm30UhOHbIoolLICiQ3OJ4Lhadd3uPhirrSDQ6Yu4Zs+sj9rqs1U/LuC4h6XUIkQqszQkJFAhMHCUsxmf7ozvX865oIvDSVEUsxTgA6LXZyKXUGz+6cNqh9e9VCxg7n+lWcvoZ0AD6HXppGpaFbpZFDYfC06x0Wkv4Bg+jq9siREvxZPwuq9Fk/xv0dAn6bJfhwL8Rq6nzT/1/qHuPJfrX9AN1jz4fTO5PS2SP5xR7wWfxGvcb1hwenP+6fT09Ormt0Vr8Vtbnfv8+u3u4f/aL18rXb34R9/ppc/b9p9/qZ2n4nX4u5n9PJfmnZ/Ce2o3ttj3HudkWfQA6All2lBr0haLeZCq8s5JJj9reRG3cqT0UffCB3xXgP5b9RG6AurigDBnM5MO3SB5CQu7YbF8ZahrBs0DtoEBC2o6hIyFfbpVh+diWXf4u++ycwjNyoGJVD5Feu2GG5hy1ggsznLOPCuXstZ6Bhf2owRCojJbJN8tYk4KSRUGG1CV5mKyKW9UI0shpQZr0rw4JIctVTitGGbKrNw2S8tSmEQ/qANjLHhCD2EL+R97FRFOR8bXeHaIVmC1dZcxi/V1aTZVZtEacPrPDOwKIFVP+3IZBwya/rk1DHJPsmucD2gZSoNxEKtoS4rWBxa4i5uPdanxZKdsMqhdmzsu1MICw8ZpsMEGYn4GtYrcmqPbDbwrn0DgNVUUDZrDBJ+/ObMMG01imhqa15NUaV0TB1Zv0OrYzGl1uehQAmcqDBC5JC4ffAZOFPjnptCkSmUIpuccDhE0QLE1/AaDH4MmEXXZfGixeFBjKocyKTpcoQqqonoESv0BVEdo70pfanFtyK40VWMr+9EwGkHRXhfvgKhfmZilbV2V6SRPKlRDY9UNAUPZv7d2rbOoG/fr1DPAavRLogOj1YdBVj72Decc4LpxWQ2hwXGFsQIPpuc3l6ISfjn5/DPccLTUWFryexs6IDzghJTsWKJv5kmxAFaBx8NJHwMKgPIzCGQHDWIsF77UnCPUIj3z8NK8zthgFz5M73E4qh7jMXfmPPdn9y+L05Pz/B/i3HnIMbXPgP+H187JmkmOfImV6/ENeSbjpQirpJZ4N3TyKJxoK/T4eALtw++cJe5vXgtptNp+P/w091DbW7foxfupb+1XviMXrh/8IXP6YXP9r/6eX+bz1EOgQUNYaBktwVRodBZS4e40L7mMtzPgdy+ONpUVenPTk70VG/XtZtmdnvy9H9vflhv1bQ06+NYqPZbWTn9ijVaFlskK9qoBWybFzgkE2opbRG9zCBdRSGEVLa1s3UZgqbg7nLrXG+VIVy0rnQzMwv82hzb+kXD1Bf4C6RvvlQ7lkSIO0u3m7cfhlLbxJ+TOQms+auJPQbzx8w0faMgcLj38DiAzUS+DIXP/cw8IMwbEHa0LMbB7O04/cZBYWJ6FvVhEHdKWKXEiPip55c4SC/EYR5ZBwWR/wdxKmNnJrwA50BVx00xQWrPlEATdYaP+MaoEozBOWH2VU27T5EkhvqYUQEnWg5mCXgpqPdc3bQs0aQhK4JTgBhJXnMoCB50u7RuYHsdQmoL8Z8FvX0W/kBeNJv96RRmUFhY41BX1VfARBuxpL10tCL05lLtLC9PWDdYFs/FSIvdVHyF0dMrpVhla2ot5yJvbe6b8CAmwQ306+IGvZ9o0fcWPtYIrE+A1O+HXfDRYkOIdKrNsvYEK1h2FuHRI4e1DFFNe3p6nxjPf46S9ei0vxExdc2iPERv+BuXRL3qXxIQAvsX5O41FkSZ/MMshzIQSfx8FDTa0XjUiHwwlsNL8w/gHt/aXPUsi6mcLVCFQJsqcI4eix0Rq0Y9u0JCwiyGA7o06dBcANy1Jc3oBYKqw8GsybzQV86aNZd33m5Rb2mqngfUtKCHJONeqo280NalUcLROPAbhEqjCbo3+jvYp2H6tC5BHkBfLiJAeNWJdg7d3bTYULxtQ/zOEL8zxO/8nuJ3yP3VF8HTU2mhG7/DxQ8ozG+PBH7PPEeGdBGVk7QLcQOGUKvRVGUmPypnO7UUyC7UzYlbsJ1sLotiTm8uWKYHcrpA3LMx5Uu1ujuihhzHgrV20WOsMOUp59eOk6T86PIk40Y0CLXrcCfQNnmS0hPcmujnrhpz21Q8RaKPbjZZgCEDqqzHTEqYR9IllC024tGT78S9O7c/F8SQcATfoxcqJt6sdFEp1+TdhOq9C4VRHvpCcQXw2gcbcecRZqwgmFD35xcII9T5uYCfSf3be6JeLLr2+5DrSeNE5J5oREw3CtzNmQUbbOw1pJduo+2drDqEXw66awgWgghi0tF4+d+sevDx/ziVjyFV7Q+SqvbOEigXJn9vgui7HM+ltYWSEIYfhvyIfR3nRSG+QLq7N/hHq0DSn8L9Q4J+Bd0eg5XjUoHHLjhIuHT6HgRmenxxBs2k93nLjdCCHwZKKB4Afe3kHfZQ8Zs56isHfSPH/M1VY74peYd7Y77qdNzQvEOSNTldZFAyByVzUDJ/h0rmCUkjv0TX9CzR9JvbWq/EmktijngW4JXqFEdATBEClgltGc2Fw/6DthpANlDjA1i5mQHcMyOw/CzGu9tcr3adHJSWeszS5/NGFz6YNNKIrMc4BIx88AqSLQAQBIJqwFaLzu4glybR2GEB4G3CevsWUjoCSA4mrUBbmnmTb8HjXSlZ1Rwozm7Rk9JZiJ2dZLKShV2flE6FWoch8yTElq/ACryV/4K4oF2pMAgRVyfAhDTqcViaMY8NC2oU9jI4Cx8Fi/PMfMn7c0S6oC1pF4sdS4UUBL2qceTA6o4bOCHQ4gFCiCH1Zubo+Xmei29olR7CKr044kRSWroJLt3xMdXdSpcTVQrKOojFPtJIsRC5kYQlqUKvEdovbhoGOFH9yJAIu4d+l0LRYAlk/DqE2NCEOFqDxhYW7IGKC/YgBDuTwmOzrHbd5A1pmsjPtAp1a8KQ9zQz110xwjtqg0C1P6qx5lfMq5qKLyD4Kvkk5geEMBBUzPIwrQWPCQ5WCC8ij2XbWgQWIafA144GnMpyGhgfIrAkILYjLBFVYbMuTwLKOlGvEFpmVnpdO9Yjz02YI3g7Y1h5gLGE4QVfPU4bw9bTVQWFxttAZnoORsSsmoqHHAr3aXuuTex0CLZlNzVZZdraTwgwwLWIfu2GQKSZLuAuokBmiA1aW6erzZZIX3tjaeJJjM0tb61RvqI72S2PeotDasCgRqBElaXqN2xKa4x2lEJBiTywPyXASToovwqu53NPONNNqgg5skNbWlWuk0cmIqqjY1fijrhU6iWP2dhL/FA4bO1DhHFKu7iEmIXI9X6A1efNBUMMTGIF2K8Ed7iZ9K5CAkXFBLMJ5iJLZXT7YyX0ziSSKFdOoIirH3acWs/MrcJeclIAxHloHzbgSE3X0941o8CBpkWYL+Z27L96H2J5m7eJEzwC5x6e7tIypmkLfIoTJi+UgReby1NZMfelNPO24fYgrlgyfTLQIigZNhoH6hpwz5IO2ZiIORMei94HW3SzU54vHflCvUr3Gr9dKJnP6CrNvQLTYaXmnQsOMYZlYiTHj1OUrW9IDwy/XZaxQ38oVJ06aYDsKLE1sLiIYtal7yJSzsAhHjbHKdtApB5B/+ECYKRb2OVQ5wpfyrs9B3TaIygm8jbcVIeson5mQ2h0bCz3bUS4xsCT2uEwjAeE/ypMAgEnOlb6mJfQ8A+Avme6O+dvcMEU9V+1LMSCzlB81kQMLSjIaNHG2FMJzCAGcCvnKK67cwALbV52GTiPS9PcKP+z3QqvOZ1djk+HLTEzo7o7GrOVeCdpWWKMGqLqN/vciE+lUxMfljGlOIewOzrAfhiU5Pmu8tmCJZN5TgSblr41bW1yFAvRJQHbA2QhjUjnNeCt5bhslrUIqFhkBUa7Wky0qUK0s4Tl3IOsBHHqR2viGv3D6pyPEmKNfNnyGfEdgHLgbRGSdjWeA2vSw5VZRwaVPBZ2bWzrYdlj1h8kNwVAw5BdhxvOGYDQCAYwFQv4zxzAB61pSvs0ZmyGQbzAKfmAnxLINbVL533oRGjPM/4FOy8ObfzMXLnzPLxzCAchORbHmEoFUfyVvUPrUkDcjYziGJNNCsvXI0wjYefhkeydwHY263Rd39Ikaqy/OxfT4GMafEy/sY/pXWbzLechnSP5TgbEh3lOdP3DhvzFaDpc0+bvhvvOiZRCTCBSEnJJzYkVjsYjINL8n3lkYaPxSAbieXUAIUpq4ik8TdwF8OMcm3zQ2UcgBiCLJGhdZ7RPKlnVfm+8nn6+Cd4YrqYtzquun4758VxWN8dH1xrtwcHeuLF+c2isN8Un1xrroVNw03xxSGRIjXtIZrjBETc44gZH3O/WETdH7jnqK8Pe449jrNDUXvEG6DYJEBYew/lT74JRl/suFZlkJO+rdW2pmvHgALaN5abUkZSiypDNhlXSqrFzYaIq5LhyrcKo0wUrGUZNoHEQ6h5iLlM6ZAQ6O18BLgHowI0Sy1Mfi+fkvmR7Akc2vDjqVxGP27AF+yZDwNdqG5t4UhDXOlXTpoQG/wrmLjZCoVn2zlSctxe9VwHueFCj1awNXoX2J7QLR9Ul5LkL8RwTU4LtidjJoXmzanzcZD8nRj5AiuLkzJh6z2/haNHFE3LxDSKzwQygNINdtS221QZyidMjxmbiaHpvu5+CgyiYUNiy0tiqwU7t4ZNtUzUCr1GQMnpi5l5VcLx8F6kCkSkCwBztQ/gWGoYSkwoj6AUIiOAGDYmbMIhoh8Jo3FK5OShcc2g3R8P84jgaVug0czfQuP1LLG6yZABe8krxmYFBgGtrES/egm8my1g8YFkU5N2hKYNbPGr+zar5VsyeiT7d1iWFDMcffvjhh8m3304ePEC0gK2sKBsWnQwxeygs8I6ua0KY8GxYQL0Bdz7ZwzgiIGT3txZhnM4iQy+YT+eS+EfKeJjHIrEawRcReQ8cxdqIZ08epN5JdKe0K3LQOSJ4K3QTNRQPDAgu0r0VgqpdKIOWg8yuKUk3OOET4CBvdFlChdWiqH3lCLQZnEpw4PnqiKXNdzTyQEqjmwdtzWQQJxuxNuI/oCQPnQRIn8OvLhYLYFgz8xNMe5bokLPRmZg1mu5sNKY36LzCU4hT5la46RilRs0wPe/2ncmdP8d2PUeb3j2d3jmNb6U7j08fc6RCDp+LZ380Mz/j4NueAmnS480HPzj3A/Q18rAWlT7CfOnG0BMP814AvjQ5RNM3010c/xUK9hgAXOBICeXTSrqJ4/ATjIrgqjSEhxeucteFu5VGk/XJp04wpnQARxULJVLebtpdUqCPkPgQ8WJm+igbG63hIAUHOJ+utAoQXKG1MmAvDWA6drWKZHAv/iGC5YTzCO6JEHOSeghgcHPAVptHYD+0tPXRwRSNhh1rDCxnmYHFujZOddB1mFfsQvpEQgWix7Zr52fIVuSxIUUyTtlCjqTJC3Cv7sjYnVjhbV0BqBv0BYtIbH4r3UtVkac5ynjHnDUCD+fSz4G6xG3p2bCYJkOwr2h4n5m8JvlTNVWPOAUD+NotOAa9SwocY433gsH7IJWnl8OF3WcQtv2BIUBeknoTPtvLTQmBhdysIMlpTHVd0KrM8zpcN+vA6FrNK+W21DLYA2D6OZjjt4BHiwy+VuxC4mga5PdmHcSZmSG2k4q1HRhD8v8niPpX8tEmsAXks704F/ANQWSKTzkmowgAZAngOFJQRGAFPyKkFHEHdn7HTKC+3YvFRDF8jA+tU1t7IQs/xkQldDstxJGxsWe9LWVWHePa7tkrF+Kow59+JIiJ5s1juGeIKToV3wH4EX4nmf1l6vRBbMy1MrU2MFPw3Ndb6LK5IQRLQD4koUECjjyRSGGD1tpEtKzSSKVUYIQH4WDAvnHEQMs1iDsfWCY58R8xCcmoOhgvfyM0QtAANjwgdXaAgNgbsAdruVQMT2MguCx2n4hESXAcn9VDktFBsegXShPN0qSK1ZsEhdiqR1C4c3qIu38Pp5XS+rD6ay9/B3c4nM5U1A1+cSLLn0Ju4ksCgiJ9EQ9hV0NkWWiM15/d0f2hDPGS79+QKd25xh0Ztp4JU4J6l8oJQufKVE1kxNw6TX4nCG1llaaB8+p2NjMLCpSYH+o0ZuQlAQxNZCxNFmKmaA2AZO3JQR11ZmbwXKUSfd8gxp2gp4S3IkIUx3zwfNupnSihsGrcifpIw0cCrkErSIphx9qrHNiQBGEJ4MwoHoRV5Fx5Yh68RDMTSv8FVtI4+4JeFrfgl94r9apSvL+dKI3Ugb/cIVfcKenOrnPv9g5or6D+FnI6Oap0Ti880882X/1TffPvj90XP9w7z+Nr+wch9ni30+PerX+IK5EE113IQue62u3dewh1aOm8PTceYyZk51i94VojWyTU6vQiL8LkW7IGxRTQTUsSdDmBNpyToD4ybDvYMWO8CA1yLOoyYvIxYw/e4mgre4yiOuqS7ZgRwERxalUjIl47WoSLmULsBDzvCcToWbba5DYNMqMg7LdaxeisvHIpEdQoldv2l5IjagCFnqkERqg2mH/AT99qvQPOVicm+DpbcKhMURoPd3MCQj5QyaLzPO/6lHZsln8ME/fXK1vU4/dh99qv4gbbDU6wwQk2OMF+h06wypbzurwu9AlWWa9sOYEmvXWOm4c3hK4PWBK/szi/3zI85Kktn5VDRMjADAdm+LExw55qsIfjO4iLvXtkB7W/TkwHxPbrgrGZuVmEtz+Ye0DepJyLEUVPnUfXctWq38OGGbBqoW8tNQc5wDNmO1pS8WfjlN/YIg9ZejIMTBZOyXxH9kC/HxkR/C1kvkrrEqnGhsh9NZA06MnJD6qLcS9uiEDxoRVF5DE3X0XEYQ6ccOCEAyf8yDjhW6iFJz/RH/CMZgB4Y29iog8Usq83MdI8vuY5FoGYjMnRIOsxwZzd3uD09TbTTTJf2bZ8s0eyjFEu1cbZer1Jet7nMDSd98FhDlVIj8t3hVL6G7CvFuPoJVmCr2z7QA60fqD1A63/ndB6rMJSzKFCMkR8jPpC4HsLmLOSRO0Ft9+3GMU4wfaLPcWAyShEgRl+Y101KfSFysWz778hj1ZAsZrhHQevVyYZswaiHfYBayJyP36aMtXD98lxD6WfKR6A/z3XZr7Vpq6UX2AkI0Luf3Y6huof4vafT4/bEBVNRBOqfKF3bdAJC1OHzP+dsBiTxXCc7aXwe2vxVwzpwmgv7mUeFKe/obVvgTH/qHpCEFAsrsUdHtSiYtQ5jWDS7NrvW636u7p8jDN+whO+ibrU3ggHPjvw2YHP/k74LJRin3N083yrqo3N/RzcH/O1rNSl7E8+6+W8z0oMc+LOBHdGvpTwI/PKfRfOk53JGO5wr4Nu4HmIDdNO8CA5akt7bhSxkWRRNJhgXH21gQVE9g2ZRJkM1WyaatGWwZWgXtaYUNAosJzD1jAety4nlZ1QRHJ73EKHmuhkqrx1C6Lebt06Y5T9FswlmimRWRY7KjYay7Lh9J9UTpc9QSuwewn3pAFMeOEmsPKTsI03i5cOOt7Aewbe8wfhPbFGpizmaUXM0X5cx4PmVfEYKy5+Da/2BHoknXJtRu60N/IjeXuCb0/i2wfJ4hCPMcRj/JKbkJxlPMpf04kbNKiBiw1c7OPiYvvxGddiVGyLPMCq9sjm+aE3QT9gSA0ClWbtRbVwFMGsiBrDVlVOZ0BYI3JkWqb6MZVwhuwDQPFuvoJpNSGJHus3x2+Fr+fKYal7VL4IHTzkJ0a0Z8/V7S8VAvH3jIz0LiUBWNp30nIvdb5WFc8X3G2XAKRK9bg5C5pKjKGyBOl1wdlmQ4XnwrqQTES9TcU/FTKeGAeTTpvhN+MSidkI+5iNKFXr0nLV6zNM2iG0j5CVPJv96fYpogg7dP7B57BZeFUkb96hN5fA23hkh0yiBwSWrrzy4QyTvdzrRhooD450YLMDmx3Y7EfEZq9SFk8gsxJGNT/wxlznJz9d46Wf31XtJLyoQyx6uRPh4+LRgwPIwweo+iS0nKCx7P1HelxjWd5kpPuN9aaBng/0fKDnHxk9H4/K+u3pLPuRrk1orwqDb+MRipq6ptrKb6aJjNe2VZUEkIMFV2QKQQ8zc2CMU/EdxlWstCpyTznXh6aDMEbR96O327oCVWlfMaCxv5GF3CD+8f71koe5rn6BYjLwsIGHDTxs4GHvTSf56ddWM95Or/ggvGBQIQbyO5Dfgfx+vCrEoDPcFPYwaAgDixpY1MCiPmoWBRoC4tr6k6XMXq50UfSFtj28wIJfe4FsTZur2RIFQ/m05j2AFITWXMEaHjECf0CyDK8nrwIEX67AY31lmfpiF4sehMaUrdRUgwA0W0aD9jPzfNHEe80jC3xxdCJLPXEKvfaZOmleOh4zdm+hqlZpAgeRAopCDahucAmgynbFIQ+e4RF3UF5V+x5HOsb9pYs7BPoNgX4fhB58EQ/ZwL4H9j2w74+Lfe/H9vVwao7kC+ykP5841J0IbwllQC3zoXgN1oUBQCFM/kXcahQbxvhfUW1sgKUHBc8WeSjYQASRMfPF2skM0o2U0zafisfKAYmnZN/4aS4/DwgVxYXy4q7wlSo9ok3fnooAJZWMdpxi0GM5j8gvqTzV80c4hD1ujpM4ofFNaEbHXAMhzC+8vLdCR0i+Uzj18AhU6WOq1/T8S6gf/uIIy4hHln4cKrqH4ZfOlnLdbAMr7trQWtOIGHkDqk1955YoI33JFbm4MEQcG2wC1F7hUk8qF7WpdNH+LKZuwbjysfAW8bYurfm///1/oFwMGRAurYMCNUv45s7WrqkLIrxSdBYcMDsos4BjznmwID1NRWQvMCJIr/ZU58F5vcR4S/zs//3v/8PlwiDQsuJXqtaZWPGLF0psZQ5xkFvtK/lSNflz7UoGod5ZMl+7/JfKqiC2wYWU2ngqypNjsSlZ4Z8oAEA+fDSmMEZ8a4tF9wBwujzXPGlOfRwYFUQguBW+FSrnkxZSA7XvCKxcJ0Ucqel62lnltZPlxh+H0jjJXHEN4AjAGgkq6hLPgNg/AgGTDGfJ2GExRX5OQ0TQcaruMk6sQjz+UKqHu/7UY4X5FSzOHihZUtRGXYIdqLMWXVCatGModTMzC8raHx/ooLcAXYRKo5caGLZFkvG34MIjbC1rPWnXWWstJH6Q0h9xv8JAKAMUYmm5oyl+03BJmTf1yJ2BuhSvHo4bK4tda6PwSDVg5DiYzkqEvWs2LNZjEIU1a6oQlgHgHaHNX0qoG8MYQnwYuUYJzChTRjptxyESOxDIHKoMEuObr3RRKbcIsnZaVgT3jC5pYEP0Nh63GqqaiefAHWvYcaCdylVa+RdHGGlnvF5qyE09kfkF4PHlEwre9p+ERpOm0THfsldQ5cFDxQZAvoCCB/sfYICIpDwPzWfvaIlQQU8sLUZoE8fDe6q3VGCH9z0L/e9IoaDt/cHWmN0LNxgj0WNZl47WHCPIXfhzztQT6lYruj72QrlCliWyl7DHhzEtElHhV4rYDnziplk603EN2tGgHQ3a0UekHfUZN09+SiS4vjiHHgWKohoO6k9t2TNJd0LbWCrEUj0gKF4XqiK5fRpMURGHSPB78XMlS3Bz4h4GUjuQ2oHU/m5J7QmqmaMeRJ4+kxW8e4XFqrC+YzPaypecjtlWkC80WhrYpjQVz0prUONtt09ryQIwzcZZY2uPpS/RgkJY2+2+dVOFlMDAPcr1qWYOFSjhMeiGq2R4nuIgLJDsSo27ijOI7rWH8nZFQbXgOG3WYoktMukseuT3lpVp4B0D7xh4x8A7Pn7eQRaNazKP78n8cZB70PMO/4Big0CVC7KPBpsrmIGYWXRNkHt21EiYiZwTDUeeMjMdGt621EBFYipV0fpwq39gFzBGoxKWEl5uHo47Fv5+BgIfBf4R7Z/tadDjgDwH7pTgJTCWuVswrwaGKD0WdwyADu2hQzHpihcirSp9cFx7fI0eDYxtYGwDYxsY20fI2LySLttck4E9wZfZk3DtyDrykEBYHMHmJP4nRA1F7w35DJ5zwJPK06C7q0Ld9kpfa4zEk2Lx+LsnTxfJeCS6tdD1L8Xi64fpw6UisFJdCbUtC7uDHv7jyXd/pxLUMFRaKJE5De4eOTNphx1/qx9TqSgMAcSKUFtgWKtCvUKdj/vyO1PJV50ZyO6XxBwghObA1KJDbiq+DJHqpCAiPJDjaL+mynbo42xmJmKBCz/XuV8wXqr2FEUPx0pDgISTWKP40QMKocONE8vdVCTjM7SBn3rx6AH0gH5ZnattaSuo/jR/qXYLBvQR3crEaIGEJYk+aJx+irIe9V30EW+cvYT9und6D4s3GxvOz1ZW2QZ4f2wQHOsGNrHa8XzgawvKGtDGV0r2FJ6iJZ/Eg/1rOJfwftGN+pK36aY5mR7SegwsfmDxA4v/aFn8hS3qLRo43+xR+lpxfIjgVtdj8jG4iJu9T+b+tNs3cK312ql1GgC9gRgwRJbbKPEcQgl8JbflteLqZgbzw1IPWQ7Ef6uN4mgP7p4HovfigIhDckjLVknD4SwQpD2RzumLJgQDArC4fCOOlqdFKxVw2fGDl9rk9jIGwOCMBMbMjJk7KvyCr9L3cdUeymyDwfAhgiZmF8ToMsL1g482Qln/ws7M5UY5FawHjsD4FKw2xow4em0iC702jDCojXj29MupwHAg2cSUtCYCpU8gbkdTjRgOPaJPwL/5C+P2DEJqRByf7yzRSlIUyj6jXyve9Uk830MGw+84g+GKsmuH9pOnPR4RfYLsSyxKqvG0hJk/jQFpT+C09u4pn+NVO4JtTOfXY7VXbZjAYGwpiq8prZuK86KAiFWFF43CsNhDY9gaVlm4aNh/tP4lpV01UkzzadW6olfdqBax7aFKYTbJNUvK34Vpzj2vyzsfyHfcj4cog+3vBhCT/b1Qr66/FxAdaatuWGQoyMQrjSzkbfftfW/b9XZtPGJ4WZQG7pzeuTe5fTq5ffvp6Wdnp6dnp6f/OXrRt7PK5DcoUQilmH/gtAdVZVBVBlXlI1ZVfgomKgyA64BU9Kgr51ug6tjo+tFvEhtJAc6zQqVJNQG1msLhor1sMU3+prSbUIFwZvZNXyTUAjvJqbpRY+sSjTJzScEhGoVx9GXFSO3kY1ixEGk3jhp0hkNpJVvpXvYkE4AHTK+NdcA9QDCP5jLMCQglmqCgIb3fDB+dZWD/pBrz6ILDQxqSTrytXYb5w5Wrq02TUpAuXcu0SUtOH2JJECeGSsOukYJnBqV5zMOJ9eVbzSBy/NLpqlIQ7CJ8vfQwOHwBGBzuT7JI4J0sdt0xpBsOhSHjwgc/YmaN15TV3TdjNIju+MAgK4+7o6kQ5qVyq5p8jbLOdTXxcgWY7dlGGu23LGw4S+UiY7ZSd6DaiEx65QVpYhDmz6lQZzNzKzYy6bxgT0O+OGwZNAJDI7xpDaVNAZoInJWtzVXR11PMF+gg45sGMPL88SNcdE4Ewj/hnsWiY1wuS/g6y5SCzQbtQOpC5cdxveIBx/7gh+JSgiE+rhpdn9JZLAGKO+QrNvxKPq/B1kyjB3kJa0Kzm1cs1czwbcDTGqqGZrLIQB8hMH9A3sfPUmWzHHPGxErnCguLlbUDLH5PpmfIMnLxOCpPCQ9uK00E04dQKt9kAiV5aDD7Tz4JxF9wCVBtobYZznYRtdpFkF6bq4q1BdAOTirU/rtdWlA4JfMmKWkqzim9C0z1kUyNKdogdObpO+B/4JP46Ml3f/7s9DZbcOiwBVn2R8Dot6uVV0CpeBLXzGJ64wQ7/cCor+7qjfN/+EpmVB8Ob3X7C9LkV3yCM5FSvwxRWK+3upCYdZesKQzn0QOaEodZAzkKZf/gbiFxQa+JrjYxMNAU+qVKe0JTCc0n3JkxVHQATQkno8zKApmKZfXiR8JO8m35zi3hc37nK7XljNk8lORrtG00cZAVRYQM2X8qkVvUh6g0LdKN0HARPrhIjWbwqa7dDI4I3CIMcsHeskyVFac+djhrzLiLNLFF4sdAMnHaCauCrEXwLnm9NnjKQ6fIEZD27jC7U4FI4sdIJXlr8SETPmZ8QMa9B824xZRFNDOJjcSJ4LpGekcJjgAAokuuLHLn1at4QYJHLb3BuFWgrIXT0Cl4HAsB18so9qR1kHGfxnDbmvYwKMx0TtO+rtVt6dSFtnW3f5xB6r0zlnyd6Ba9fXoaDIsdZk9eUeZwsTwkmomhUS538aABMd7oNRgGSbmFSXCw6jjyZ1HHWKjngXFRhMqLo07y2HEjE+zZB3F8kyBQfgDMXxYwfhXYrnNabJKbb5hrEceGI/seZYpBcx8090Fz/z1o7icx9/h6OvyDJlX57fT4Jsf5N9Hl31kNT1ViQo8QsqogZIWUwQl9o6PMBS24paVidGtchzwoPX0RMbBtv1w57Vnza+mnSbo+jIvdw9QUFwLihPSWEs4xuQXCmcA1eHXb96mdkkIahH5MifHgjQyAAyg4wxBYa31EexfqqKE5JUPYk70Meq18GBbt0LKuxEulykSalQgO00Qp72umY4AYIMHzeWL5enGUSC3HyVXhaKe46b9Er94/ZHuatUgU65n58Jq16CrWsDzX06w/Xo0jAar4w+ocne1D9TOuCwBxiDTGtN2Y4zKohmK0BjBaSApkcsBy0UYs7jM5tC1QCcRU2NFDFgAYdzACJBYAVsv1io8esQSZ2JPeTWOHzyWrli5Zg6UEbze2AjYUvK3Sl9COm6r3xSH+NrrfbwWXHDdm0MQGTWzQxD5uTYz4weh6qRwEO3goleM7t/zU7zEw9BGhQMKSJMk4IDM7uAtY1TcDRlA6bTIAhYrYiLduPUglvVu3zpC/yiyrncww6wD9UYFb07eoDjED9zu7RPEEPsUCUIhbRJHgU5JwS2crm9liZpTJbO0kwBCSYFiCnuVCbKYyUCqZ/sZvoywKIWrAW3zFWM2cCo/zzqxzKqsIuvHWra8AAjFhtTCrJwx7FfHLKouskxkIsFRRqRzlGq+quiQMSQx3DIkYFI5KW40sE4fH6H1+I0s1BlwBwpREOZ91EIo485VTckvaaoMI4JQsJtFFicIxnguBHWLMKMeAppGeKDmhOoGsGxJSscNUrA8SQnAjoMjqlCDeKMgHoR0eDTwPi8UCwmB/Ao5+ciISKYoCS3vEK0olJc2fm8mqcnpZV0HtR6WO1P0gUu35d6qN8orb9/hvSBKhPhKUxIvgdsd2iy7yXpCO1sqgczVPYHRiEFYY0ph7oVAzVBu6QY6MIxrFo6DBTqFp8vEzQTLGOA6td+Uoy0cW+AjgHZvBxUE0bpkwPLKeRMcR4AQiHKtlP3fMIKoYzFzyZ7T0pAF295YOBhpwakwGgnww2LQUdkhAsOgFbiYe+ihxit7J7S/BOf8iQOqKYnaQEVl3DSOQdHTCgcooSOOLHYXpmeC4A+TAxgrAAdTo+L/cgGJaykxNo9oxhy/3DAz9piJ1nOYRBw+Iwp7zFJs9Tb7uQF7zIW4co/mQetH5txnqUWEHebH1FiwpTB8OXxlu1NW0nigOD7GgaC8VqFrWxPD4sKxRhQyjRlPLndM7p5Pbdyanf3l6+7Oz07+c3b/7n2haCW/37V5t9H/VHDI5Tq4UhwlnhWbrgwwuxZOTxCQ4yWtiqQEnN4woJQR9sR/4UqL/i5dq11g2WNUKCK0Mttgcc7SbBQWPYPbpyx2LQphxnPB3jC7JF6WJ16DdkhSOGo9u61Rs9XpThSBQISF6RjmdcfB0TLULMf1kQcLmpIXhSE6W1hZKmm6riGvZfFIFlsSgriLXeGOk25Gxj21kpVOTXGWFDDFH3ENiDAvuQATU5CAa5k0iee9MII8Q4nmydi/+Z/hLvA4RQ68FTwNn+PN4Zn5GNpNYgTSaprAQ0Mx8wQmfzKWJY9IZAkoOzAayOPDSwDh9k7wJdjrrGSa4QmsnIktTdNFKXQZWH74GTAUsWTsGpEVOMgF13KnMbtGQVzHAb8f8RPgJeCFoxj6KK8nVwIP8j3vi2bNHDzzZFnE0PI4YBrCbGeoMYGmj/SGYUo/0VE1FzjjLmS0KnStIwZnsBaJwuoxJLGMYJxbBFw5k0QB1QcsXW4ICq6UuQmByZVH5hxoUGJ08Djd1a021KXaNaXSXFaqn2MZKOyrO8UBlCo5HYhEPcgvsLyKvNibkkJ2Dy4VGMBTe0BiHVt0F0LLbAkOjz05Pxb/9Lck5+Tdxejt9uggWyG/seo0SLd9s+BnPGNGQStLjFGs5EoGa0aDi4UuuUHP5puIJWiFbZrEQAyIF2KPymUnESby8uIkTr6oxkLoJXf9Sate5nfnOyK3OiF/6RBQFBQFw0BsDc0IPuIuNKkrwMJDd51LnQNmdVhVK/HAD0WtwRlfi70zAUqt52BeBUTALxr6dw8LPt55QemE/HdHpsqZMGRhlXDVKz1ZmDUcxPZdsMcZDHvYJ4ELWqF04AbkB0DXuipIh9x0/ClPDi1g6ewETa6xmaAxbO2lqCANCpC+E/Y0HSjvRfJj9CCTg4kmRldOvYmgeMHKMgaLRJU8VMykC8mWw3vHMJAblqOQwS21iNCO4L8gX7IAITIGAnCFngjUoUfDqcIIbn0/6tBFqB+tK2MuruqpJVmePUGXDKFY13EAw6EOXKzTw+co6OF2My/4UDMbwJ1jRgkmVRs70pvcKtCUd6JmudyO0EhB9oDVkZZ2Kf1BmBmWrozdHe+S4zEvp1IekuERlsKvIbnGkKTFsFKwHiZzEzq5AMGYGDJypz4w1NRCz4P3gAgu6G+faeVT5PEt7IDwlRIjHh2oq2BQjwHiUFYOPJAiLBLVj+geSDqFZBLrLyc414NwY5OvUGs89KMbuQhYYm9awOq+qECfGDLHFW3jAW81eLD4CoTOMWET3HvMG9qCSQd9grkvjP+Sj7tGIgCfWIkSRmRlMignKWfQ04K9ImeQaqgA0Y+0b5EYWqwk2Qa/vJZWnaKwK5EPkxYwg5alrhewJTTBVigRhCV9Cb9XEKcqVY4GCPJm4p6qQpVf5cZtm8/j6rwr4ihS4+oB1vM/tH3fSMEOwYTLh1BE0M6AARvMG5wpPxcOEEy5SBstuIqT9YkJ9zamvRQMZsVTs0QvoT+j6C5ofSqMEPoXQEo1fkN1xU/H/s/euy20kSZroq4Sx1o7IWgCk1NPT3drtNWOJqhrulqo0JVb19hIyIIAMgFlKRKIzEqTQddpsHuL82debJznml7hlJq68q3N+TJfAzLinu4f755+/Rc1ptz0KXVnSd9C0YKCj9wopo2Zy7u9U4daysdLXZK1Q4qw/It6jkhoOLjM/hm8Fv2QYTw17h3tHhiAzRXr9/3kekP3jYrJkJmIsD+9FevzwANTyjX8vZqleIDkkeDL72oXwfOpbJzAGt98LsXYrIjdVGMFFC+o//+P/muglXNbAQgaZM9Xp322kFRY1NF+kEX9bpONPZNh4o96mkbM3EZQ7Jm3TrR28E9iemME3NCUN56yBCermfJRBFi83b9UpD1bFLC1s/GxCIu8AQ7ZmRR0zXa/qEAbh4ADhR0vV38JWti07UW3OnUdbuIWa9h85V8OwjgnK0NHLvubT6q0qF4tfFX/VUQDZqX6cRy3KPc5xP6E755aBVfY+Fhl8BLKkEn7+S+APlEbJ3rCaIoZ0AwuajwDyh3WHz5E97ueBE4JGBJgAo2ZSl+nY8Ol/YSJvxXQhC6lLRVSB+Y0tBIEuWIS5sIsC2sryaTqO729gz6jyJi8+gd07k2BtKoTEwDfVAWe6oTBzhNjoibfeKnZMA+QGmctllsukgS2BXX6hq8XnJgUzIYPFxYtXeWcQ8mAMWJdBvRW7ZaDxQ8jVDRASQEdo3IJZYSIp6RxIfV3pkFh0k3QyQceIv/mmimtejDBVwYUlWCbqEm7h9Ddfb+ZXpGRkZ8AHNwWX3Wsceku8OjkR/3Zx8d5SN47zRFVqRjpWByemIGaC5ZGscZMtLcYHrBDnHeu6sBmtj+t1+C+fPw9r/bqCLYSgwh0mcUgBEvaNliJTElc/drf1dSCx+Xj1wDca+eTqz1j7plBdcoDmbBbWShkd+pw5fwKB4uMzmElOiDiYRvVUWUSPLPGfKYkvMPBIibk1XLt2v9+0dgYjhF0AMfh1uIDwhP2ATCDayaUIlhjyPacFn6py6S8boK7IlICdQD4IQ/QpfpWqgTusWDXBGmocHYqiR/Y1iuiMwdk9tjAOwGbYyl/zBYt0MMetHwUutHQzT5SaISDJ2Z3CeRjB97Kg/BV/22ThleVog82sW46rk2L9GVyUTF1bJ50zsxoCUyyk0U+RU90pLMBTcvVTklp2ASZKlmhI8F+g53kmS1QXuBLXeUr5igD3o3TApMjnc1/laYTfWrIYIxncjeprfwEiszrw+fDsJgUlMGbLnnMLA79bAKbBMmWAQixSNQlvpglH2fhi26EMTTj3sONkg1F8xnK8hcKrZ31STlv7Qujej3QliwRo9FQXzxYeAn/miOaOGFBqKsCkf1fkmJyDWFDo9xMLA/IALEojFnNfSQ2+dsBR4hIRJYwN3YmJHJdgyo3Qc4kFd+GPMznVaQlucLznWxgUBljdFwKmJF0bX0ewLBKhHJiEMDyHJvsHXg4NCB3aP3gtLj9a73INRsQh+FuQyuzDwmK5WMV5nfnifGLLbFVhaKnHm4Z08/h0UDkuZXqJah0zFsCO+XYtX21IE3H3eS6EZfgpaPmJJbuc28X/iUfQYqxajFWLsXqWGCuECg+yVKsBMnU14a3O6anGare2MAe0gFxfzQkvhF0Fl0muVTefTAQasGKiGppAfJQW3G2PozFgMGAcECC4YIeTXwmfMb4kLl5chkkhJ+WQjVXHuzdSV/I6zYsQiEWhPK/gsBF2kySv2WcwhGFZF4H9IxrfcCMZgqYYEgKMOOqMyPIcDOzFHFT7+Zn3wsADLwzCOTCgbnyMGvnv7CJYdwU13tyvHdVruHFgz+4+QJFIAo0Y5uCNfXHWQQmjOJ8QDs0CEXgSxP3EPFH8gMR8dvvEmNEy3K8ssUts84JT34MJb54tVnH0q41+IlqAaFvWLTV5dPmGbkECYKuxC5nW0C9r84DApVFWN+xoZSVHPoddeL/Ln8FDsO7SV8hfyvepVuelmr2Hjs12VkODtqQ270dNVUbaGg6t4dAaDs/XcEAhUqHhbbQWvk8RWswvbUu1j7y6cKHLMnE55IaHHw+PAXrbHYMrdF6ar7jdo2YS/oCc1xkCtmFnPkAEuiBepDoAB/2ukHiGHoTUmAW6rshqgQBIxXmJbg1LZtjXl0PPGjqwWIPhOqJgi8vLFFPgQ+AeOVXAbXZtKa4+g0eCXD6UK2qsSwnARhTyiMno8TbMYCpa5LoBNaQJDjtiOJcp/C8w3ECxNlvKBjlwkc6V8BxLZ2/Z1jo2hdDzKWfSlF1X6tmuHlNJIgUMeN6xHftXuwwzuexrSvTCVE+sh9Mt8y4Gn4wDC3GknorJFcpcqWB+cbk5W5IHPHNJDryUGNDx6j+BXNHMdATz3sJ/kTfI4IIkqcEzZjrgkJ6Qh7avL7PwoAv+AGp7zQ8cw9PWdjBdfjrIecWEPwUofwiS4iEG93/NConaeWh/jQNVnycRf62LZT00je9bmyvdPLKmcNtDD/FDGNmLRhfG/PYaGKRd5IlymX0N43Q3vSonrdLA8Hx5gJ8hdI2iAA8UDoWkwEHnAFzGyKbKLaAfdv2M8Sp2+TGcqv3pgRf/bKHEGYiOvyDBeE0dfYue/EB2EFg7LUSyIIFvLAikwgTOyEoL7ZIQGv6ADywD4CVCBxjpS2FzAoS/SF6Iw0QuzRFImBezF+IQMaLmiNJHHUjoxR+SFxxvCEaZeFAZCFvxB8g/NXTzfPFq5t8or6DqZ/XxVwRINSH9cbJQA5jv4Mau1J1vVHDouDPshfwS+M+Pa/cS9vEC/hgQicfvB9OBqZT08D1MJGJ03uoENiz1Uxna5Xflx4bhXU7Le/le9xri981DzO5niOuGdIp1aYPBUKHaxxlGZetoKPe1cVsM5/um4dz1JnHCxNrxnBvxk2KcaTCi1AwK9/PtGd7bCgrPpYLCHQkrIu9fe/D4usOCVYXfQ6irLqfwtyc44jUDfoLj/X71eO9JN9x2vKtPRFY/EY/JsXFuL5mt57b13Lae2+flue3sFNr1sVoWSNtzGY5XtMDZFtbxsimc9qBBtB9BtE94QZ5+CK0VwK0AbgXwMxPAYejs2AncPUJoNrLQLJJTCp5Nr0pVdG8U8io4MR0gu/eIsXHHqWoMtvV1Q7TNeIiPf5mp+yzbw5aBF0pYcJEXJg2KOCwxW7mv1WSSjlNfX6aN+bUxv/Vhs67/pNrw2T9v+GyniMW2YbJNYbFaUKwN+7Vhvzbs14b92rBfG/Zrw35t2K8N+7Vhvzbs14b9Hjns94GuyG30r3U+t87nL8H5fPyblTpQ6gzv/QfbZoCew9MV1+4Kh7RzzjJLKDDeZekU2SxtA0RNy57WmdRIae15udGDaUmtKN/QXYGJ54uZSVJjXZOdvh4CQc1ALsp8gC1jxh9Je+K+gFpqPJKBfWggyyH50PFyH13rYdLkAXUDHyOrCQ9tKcoinU6h/A1yoajJRI1LrPw9Q68tuTfHlgnFOtG6SKuZKSbDM5Z2f0bOcJhBF0hs1Zg47KnYV6evwTfjy+W4pXT1wjjjEXg7VDk+qtRMqwQJLKs6U5Zjm9Eu+0pRZJNVloIPgctQhQ+u5tqv+2GxD5dDuYUfdu+iNf60P0jJUvxE+ONhwdMcWcYj+bicDqGCb/V7q99b/f6c9ftiPs6B9Wrb6PK34GQQ9q0tET98h7eoH3RUEEusbeeSG1odT7aZ95Z80zFfMUcpERnIiAuxrkGw667tdhV+aLUKWeXUcfe820aeHvPy9jMvS4scaoV7K9y/AOEeXtp2E/A7IzlJpku9FTaIZXVYAGmVqN5ZQt+Vkf+49nUre1vZ28reZyZ7OwfzxWYB+zPW8t1SwrIfjIlhqQwwhb8cWLADobByABU3DPzDxrnhv8NQwZA8WUN0clkXUa6HfR3XnfFump6t0TKXxgiIUTgr3JVC4YJlthz6OFOyQHcOggzDAkC+BIttHqlH3TzsLWGWJ1SUECheiySD4uwejoneO3j1dpOOWOJcj+kkco+lps4Sh11HPTQ3BZPVue5G1OxWMdeVHe3s42m7u3dp0THfxqf1+DSlrcptVW6rcp+jyl153WmgLD3+zf23vRAlCmocb1TZZ/jYthymTnlT6yYMfPggBxXmikHtPuji2qD6imQFYHtcANomzLkGDTFRhvqmSzX+/CNHPUuMT6OxlYpQy9FIODjmyuU5NYV1lqFcg0rq6otmupnd8l4VWedOWg/PyKZrYaOAFCwg4uPfapZWs7Sa5cvQLPujH1rUwxNHPayHHHwJ97JnBzVo72Wt9my15xejPaGi2ADzBbfVoO+gyKwV3lCJjJINt1Ok/N4LYxUgKVIowcrANcpktiUgRHMNCSgpWMuG5qpkLis6TIa27dUUCszfXZSk6fJsnr1egV06Ne9lmrTOvlaptEqlVSoPqFTmcrm1Onkvl9vC1uhGYex9wjKZuPBYSJ+RloCFMFE14BfG/t01MVPlFdawDksdSmGuJPCL2KfK/JPS4vDD+wtX4dxVpClzeEwsDF60pkqX3SlWjk2ATgsBFTKDyJUplUxsVSSJca9IsUFBSPhXcFOEeyPryT5n9/cP6jpsLpdf0pXovVyupfNqb0Kt0mqVVqu07lhpFWqqNIhVNbA/z5PJ1nrsJ/e6uxy9P/t2g0pj9xt471z3HFECxfX+7FumXpxAkWj4kCuxqXrwyD95WKeHstchIooCWpjhEboW8W2ZFUomS3Elr6F6MzNTgV57f/YtEWe5etUwNNBjUI75GjqDaNdcQaUT4t6iGFRyBApyJlMuyK2FXCQpTFymGc7h66/PZ1CJGCoof6+mwF+UozeSlsK8/vpreMwtbwBzh0EYLMMMnYNSVsUsLYm0CpnRfl0UqUlSVLamR2e/lJ8FC0bE2LBigbsjgGEiyjD4KwxeLLSFkvTEN2qSF4o1fkRi1hFYn57qdr+mmup/zReFyPKxzLBnIr7C8fBwGaQydjvPQ2BEvUjy8WJGtayxNd4ekalpWqYzOHAjGAsAcwolTa7JLduBWo04RDWDwtGKCqSbDuGW4C+jQqLn9sg27TaKMEjApJYXiatBHe3+odt78PdCrXegPlsCIcCPxeiINo2rTUOdPygPL40yWJzxTV4U7B12wyvgQSxpjyuA8z2dz7Ml/ESIHCjtPpvDLtqhw0M/2/lYQ08gwAn380aC7TWm7gRvMFTjqVlR/vt3/gD4/luka2vUtEZNa9Q8e6MGWDHTebmvUcOv396oCRpi4waMk412Tapj1/BKs8VDXYOeGGnzNMyXYFz3ZL5wD6358k9pvvDut+ZLa7605ktrvjxj8wWJa7c1Vn7JvRlxlwFpdJPcSUCa2+AitvAnW/A+4Nm+kjaNMwhdiJHMQOxjlY4r5KXF15GdEchhO82POx3R15gQNAI9da2KEiyBiKW2kmyDI+j3/8vLE9Ce1XY7PEnq3rYsE9CUIzn+xGvX17UBLea5FrCiqZ6GC2H7vZE+iXW+KMZXEljaMZSSlmKU5eNPHTFalNXMIDChlqpEW5LXInjFDRF6hqlTr30ddktFTBKk2i1zANTl8+5iTq3Rf7t2ktTIUdaEvYYe2jTZVvu22rfVvs9H+1qK+SolASSNNJQzwcfXq9jmUiXQIFZipwIeqRbQBuOH8Ve4gKEkxiSXdLaybDqPYe+iDy3/79Pn/31UnYYHrNVorUZrNdrz0mgN9RJreoyLJW6RNtpQH1GLS2ixzqhTqllD0oqtjtiQgXlPEKof1A1O+UkWQuSBtWK1FautWH1GYtVdFI5/C5P2N14ZmMJss6R1VwZNOfmOjgytzBRq5lG/K9nJ7i3HfbsE9Ic1Tlsh2grRVog+MyFaJyWryUvLSLZZYFaIfJmPLOYPg2s39LGa5OrhheZ9pLvNYZJPO9etldmtzG5l9vOT2Q2G7zGjhw6agtM1iX5KD1uRHothbqk1XltB2ArCVhA+dUGYpWOlDRXmbQoZfk9/xyK/9cghvy3o7X0iiFELYpzrSTpdFEzxipiY8RhQKVGQUW6KMQIS5fuoZVl4w3pa5Iu57ZmQx4maAI+fRbmO1JW8TvOiJ97K8VU0SAT0SAHCmFic+hrbg9c+qSUhaRKQ+DNAwYqr/AbSkot0TIOQ0ylQ75Y8RdvjfFHMc9NEXovhUR5B1y50GyZtw6T3IiKC772NlrZKvVXqz02p16OlK1U4B01D7bZ78FRodRM18UUpX471hur34WK+4cY9xdBvZXytqmhVRasqnpGqqN3/gMPd/3NFRHilOqHA8A7aJLwRBjK+HieujAo1zM/weJyomkOLRaqulS1yK+QIC+AKM1djSGuMeupALl62wIskdOPUSqhTVgWn16mEO6JKjyb9dPx9rdhvxX4r9r8Isb/G47fa23crR59hkoD1hWRDn1fr7vrC3V1rKovce0Hge199exEGbRkPbIV+f6iBvbUk/XaE0eAshf/AjvJ+Btg5UBo+v8sDYNC8VtgH/+fHdaP/gKm34TbTD0/OkXo6T39SJl8U49af2lpLrbX07Kyllf7URl9q7A4lU2dhVF397uZX9Q3ZJHsJ7ANFKQhbaByBMaW32/dcKj+IVNTkklLtv/4aX//6a0umwxdkyJcnzssq1TLEVf+ea3Dv/lheqeImNcxSwI3b4Ct1apmZmXWh1t94URRwxhPki17Z2QaH7IP7Yp+yHzZQNa2maTVNq2memaYJ7+XHDQb48W8NP67x0K7zzo6WvkqX/W1j3ZdAS+G9N3DcTtNrpYmtr9Yqe3OLTZ5U+2r3nkq2rLnTbCxxufdFtMmPcH7mtG74tFvWUINP8qK33212zwlUL6zrJxA57reZwPpb79O6sLVatNWirRb9krSoadahxwsjp2pbTfqdgmI0cmqvZet06vlZTYD+xO5xagLCjcTqipShSHJmKg3XA6IN/fSI4tTk2bWrk4NXLKhwjR614FZYXnHs1LZzftYRaU/14tvjVW74eqeAcE4n+Q1AdIGTNeqCQLfitEH9n5+hN3km50i9u8jKdJ4pHw3Ir6FcKbwPZUqBtk4DAR84oavDP0yUu8d2BA8H6Vyx/oGljMOLJlL9XqWmr3004l9O/qUnLqyOatpBwAYVSQbctRC1oG7Bs6g6yBgLU/bh5itZ9jWU+TFAMfsCmF2bd+UM+WSR5S8JAgXhAjokkirSPKFlKP2lvG46TZUHBeNUuqPlE7Og9ncKw6OyhMrnslRrvdgf0AkCC1z7zj54/4jFktOe8xof/vWvf/1r99277tnZURzBIc8K8iQ27U4vdjsX5SCh/u/BPb79SrzVSfM6wB/2WQWlk+3WQOnk3lZg3Yy/QyThN8vajP8tv/FIQ+IoNzCrnvhFZmlCgSvzWrzgY/yiI14kcvmiJ95Q4Gucz0YpxLSYuto+2IGnjsK5Yx+D0fKJBPXeu0ieGHN8D6JyUswLdZ3mC7NfUO7Boqzv6L0g0loAsSs7CO3VgAi1D62L8dVJR8zkZ/Hy5ORo/9DrPd73olve+RmeTeWTZ5wmenoXveh6RyOfpFmpCq/AR8tndb37GRa7jcS1N7v2Zvesb3a3ubGFaCSw80m85boCS9r/5lbrgNyjzd087BVhE1y1Ndpbo7012lujvTXaW6O9Ndpbo7012luj/c6M9t+CmMteuIU7AChsjUe416SuJ5jP1Qa+W0nbStovUNIe+7jpQQO/XaPUPXOv7C56fXdR+VZuxwGYNV5Wt8MvB5Hf+0Awu+Y3YJiVTm6PYPZzeTxNc/cQaX9gdkJKt1qu1XKtlmu13B1ouVthuKr8ELdAbdWoJgDiJCRpJXTx16FaAYTs/KwCQ7q5UqCtRFo2oaI6YqGz9JOi+pcOAGT9/udn4loWqQQCxZurdHxFdU4L27lciRJ72LDEPQGWWpxSG/JoQx5tyON5hzyegHOo9cC3FnNrMT9bi5k5MBus43f4lwayH/vK1m4fJPu55NdqtRTp96NeX597hqBUk90AeoCY2kB8WsLOOjlbRwRj6aAVnjbWwkH+ID+Dlj7on4U+6I4s2C6479YvC+Xzi9Py8rtSfQwHSX8ZyPJyCn95cqNdOdgnN9bvV401e4pjXXUKsvopeEyL7ps0y+QoU+9YPLY2XWvTtTbd87Lp6qRETXYccxKRHbQHAxEbczVb7itrzYmFAfNMig///r0gGdrr6w9KiUv8ZTGf50X58RDzcLVJR2mWlstjmVxLPVaJtdC+Mn/LuvzwUV+TGzUYLLp3cm3KYjHGUCI0DpIUaiJiMqv6LMEnuJrA3a3BA9EFxUL2SbIG1YfYqoFWDbRq4BmpgeBqf/wb/ccKaF2TeoAY2K66gWB1qxSDVQuWfZ1Bd9xLCL17GDcA4fmaZf+dxJfcmj8dNF8r1lux3or1Zy3Wa0XFm6Q3lxXfSoDLLIPw1DJfBHXF0SM3U6WEKNXQlhlfUoIiNdsT5xN8ay6NEUNwfwxdeNa+So68Tl+nJcHmxpmShYAtdNg/9yy9LEuR6us8HTfA47iM+SMJ7bu/DNA+0Q4+6XrmreJoFUerOJ614oD7ANQtargAnF7LNJPkgKl4ia7U+JOQ4d930SalMiX8dwEuGq3GJVNZgor4sRiJ0/fnaKGPsRv49RrALSlomgm9CI98UssOqhms8NvX8OApf+F0M6DV4xATIMZlUabjRSaLbAn3k8kiQ/WCHYHSQT2DHSh9nRa5nim6zBgA/81Z42VLvkGYvpZiCg4XMb4C3USt0aTygkoVYiSQtJVBhByOBiaQ5Mog9O1KXivUfiZNVFdNJmpcGiAoo+sO/gkWprBlAeo6cE7BiLqv6pFUw/tUT3/izlvF0CqGVjE8R8WQSd2EAHmfSd2A/6DH96n0dImv1pxD8GtX6qQ7L9KxOiK0tLb13bGsOzVDzqAeyFblGsY2QXjbMvCIaAUx74ADs9zAkMaEZuYALL7IbTlcnsyAahL9SsqIy6FHMAzchejj4bGcp91CTVSh9Fgd+4eO+pqw1JkqmQdTZpkqfPlB+A3ADoCNUAgPJGQnwKPLK8U3oxW4FbvyLWqlRa00s0HUiibJYnyVXqPCSwo5KQ/qpZKa9hZOmqDKSQFLRJmLwxfUNCCObdsvkGX1BbYfg4sbay89OiCjheXc11hbWM592Ngo9VvjujWuW+P6eRnXdTBO3aRmKA4o3O28KyioGPvCtq+Lg5ZXKi0EmtGrES/c1QPhXXDGTxHlYgfWStVWqrZS9RlJVeey8EU84J9xHSz+pQnxUpfBxCSFd56wVEdDiY5N8Bdoo46KrDo4KigYXxzDDruvA0SM2AiIIYFv/RaJzTbECYFvmtTCONeTdLoghdAR0ogblWVCGvKpz4s8WYypeoV/PTVClqUcX+E0LUWLq9ZBCkgW4BJfaAKJUhmQCvNKdYZBgUjbCoaIoWoGzCcvMA6ANUDsPVPkWhnyyctZjuout0Qtbk+wFXaob/T99PVXX8H5TWUGIpYXsq/BC8+wU/BhTdSNSNIJ+ntKfAhD13miMtPXsAvM/DLKP/fEWwnJ9PiDUfwUBRdcP66xbEnuLToJl++h/03+sb7OR7+qcQneCQjUQwfI0DgUk1RlCRwvVcxSzRQCn9TSheajMyCoHQ67A9OOMkqXPXHKJxT3DXrHx/saLA4YAhJIOr8I7TzvOE1B0Ke7aSY90T9YAc3CJx+sagkfyqeD1WqNk9Y4aY2TZ2ic1BBadWuD8Vm7mxssb63JEaK1qpJs2BHDoKkhac0A1JVPIgo2pw+R/4z0iCHAF1kRRVg1LJ3NFiUgglaCtCLxfYeyu3PwuWvAvAAOnC62evD6IIdBD2rSfCdBf/eX37dJWm5/+211S6tbWt3S6pa7uvgeG1UOOOw6uFaFSannzR7JD4pi/ILfgpuiZarZSV+xw9KosmTnpGvHNo01UFD51DSJUWWXH+/y43d2Idg+cPzIOuSDKjmY/gtvYatMWmXSKpNWmTysMmEBbLbTIEFMy0n6fTQHeqyCcJcUWt3EzTJWLL7IrIt8/fPqEg7G7aRIHiEmF4yvVSqtUmmVyhevVI5/4//aOVq3l3JpqAUTNhbF2zAOdiUNxJ0oOMTxp+TXhSkhbcSFTcBbRoXlg8uNjaOtykC/F420Ktxhb4GrCY8fS9k94uWlVTetumnVzXNXN7/tife4G4DHBnwHIyl24ji5JaRDBIgOgHdsgHTcGgUhKiCIvr5vFASDFziB5+FQECKf9PXdoiB4B96jnVFZdtwxa4FgdtInnd+gTxa+qEKOS1HI2dz0xLeQu8JImvLKvYQ4nOrmCsxeEmXe15CYxT/KcZEbg6la9PY6s+VeTJQnaSK0tkFrG7S2wTOzDXYHYqRNRZOfMf7igQV0C6BodUKrE1qd8IR1QsN98XiWWtaWra6OVAHDv7MPDYJ/nQvDBUwE9rngmT2oDdzb6/kNGtgNbDG4+yEwiBbugZTT49SBagkS7o0g4bGvg+wxfnMF1Q/bxOzWEGgNgS/LEDj+zf33ji5l994qwung74+h/vZnRg0W5Gk55yJp3ArjVhi3wvhLFsbHYygQkx1sh0PEZyOpvMG/N4YolQzuT3UoIT7USvJWkreSvJXkrSTfJMnvIw3pofOOHhwf3qYYteGWVh206uDLUwe3TiR6/MyhL1obtElCrVpo1UKrFh5JLdw6FeiZ5v58Sfk+TxLD2yqMVmG0CuMZKwwUwE1KAf7QVKWGXthaHSDwCtBZMkm6ubYpERZRRfXsMbeDkj/c7cI2Vi8LA88d2wsEpXqsqOtix9oWdmlxS/ejAumEtdqv1X6t9nte2q+hiERd5VlHGf5la51HuklI1mkfD485ZbQ7lqXM8inpsG6ULwn5iqciUIKBdqz0I7MbuTRYyw2VakfMlNSuAmdavqDCmNKYfJxiS5i6KC1x+NgnvIKsTrUplUz6egTSN0mv02Qhs2wJzdOMzGLkZm46QWWM6A9wXQsyWeEuisk3pzrM5IEZQiqPVRM5voz9eV5zSdPLUolKEd2PQhXTXOezdIxVQSFHEwwFysq0eb1hGVTs/INSYe6oLQK65aa43Fa7cj5ZNc7Z5VzcOAfWiHluTDrKFI0s2MfVLlE+aw9UR+TbLJfgp6XD/yT9knZkrYptVWyrYp+RivUXzGMF1r4s1UFTfKqud9/y40FFjB3vnbZDFN75opwTkQI2c2i4GCozI4wXpsxnqiAGiHSmRAFYKSyTIVLIRgAVqq5hrkQyoTSkiRou4AiKEF6dFvlibu+z3Ceq8L6+hNVaYIkMLIJdpgoKtoJW1CalKuDHMrkGFFzSnUFW0Nh8ZV/q+peOOn3NLAa2p0kO2hH+dZMXnyYQqHsNmu9lT3y4oj84xoWFgfQiVPy5oQsnl/lwq9Dr61c9cbpI0pI1fJmXMkPtnuprLNSdpVrRLRZ17LekJI3yI+DyIZ/Bk2tglZUxsAEN6wC6cZSXVzQZXFETryfcKYu0TMcy61Fv6rMEp2oH0qOW+eJFIrL0k0JT5Sq/4fLodluJ1IOmjm3SlfQKHkLPs0amczukZQdLrY+l7uskFyYnEyNe6qEd3OCTWprh674eXvYPoMnBJMvzYgDnyJRyNh/M0ixLzWH1h6P+QUf0D2bLge23f/Bx2MNCMPGUYLKw4NJN6YXh6dAx9mYdt0SXazcPsXoatN44/mAk4s/ixSTPX4jTH87EbDkgJvjwryNZvBji5tMdWMzkUqgU19H5aoIosLPPcGvAQLN1iPMCrMBETVKNhCx0tsiQY6NHjPJk2RM/z5FZ4+XJiXMjkQlpP/aE+E7gk8vcy+EgId/bP4wHOvq6LQcMZQTaaEMgEmYLGI0SOhezvADpIrWAASVokU/znrjwwqevRxLkUT6BULlRLILy6zRxXdKHcunk1bxQ16m64b+u8H7Zp7v8dJeePnKisK/DrHo28HElfshRKCJzTYpZkFK8//HDRZBdKXEXcWpSfPc2+NNIjeXCwKcv1Gye5TBn8T8//PgD7lD0JnpnhLdi6wavm4QV8iscdveVBs/dv+Pe6YhgF08MqdU40p/4ItNaxq1l3FrGz98yHrAoH5AoX20odw7ewhMrDOZYfWywl23fxupTDNCEDVjVgWCvcbmQGRkeHTGTn9A0K4GBTWZoiYwWaZagvct+LJmNIQSQs0EHNqdQpkyZl63M88z0xF/ZSuFy6M70cznwd25Eo09Jy2z5d0VjRROeaLq8XydJZ9Bwzm6shzN0LsLKe1dEO9fX3mrDQBB5mF6jnY+WkdjdMHplX/09vhrtvI3iWHNllWl1Ksp83s3UNXi/2D4dpAlYFlaF1i5kcVc9cZrAbYO8gB0MF/IgwGQFDjwZNY3FCK/ktaISi839o/PyqZo8sd32qBbPX9Ly6j0NBwVLawK1JlBrArUm0AOaQNXYUMhqzj81AhfrjkNGLqL1EbKX0y8bqeg8sRC9UKsk7BrqBZGlCnLl9P35NqAVtJjQiVCnqq10h3GwNbShGLh6uKquvCVPCInYhohaLdBqgWeoBep0onWZbvlE9xXqnLsEvvAKvajnDXWubeIGhYZ7ghzxYi6NEYCLc2AA+x672fs65QLp40xJuMAu/YXQPUsvS4YLrKYYRWE+Wj4JeX73dxDaTDbfsfn3MDPz1C4crUppVUqrUp6jSgkuFr/tf3vY96IQlKNYZ63fD71Na5i3UrSVoq0UfQTD/MuzwR9aRLe2dqslWi3RaonnpCUabe29wb7NiuTyhx8v3n4EBgGMKI/z2UxpzkuBwCxqkePrl1VAxZAp93MI5xsxWRRUA2ahxxRqTgHpaRbAVmCqQOMOx+ctkgGj9hiiZrYCjPWCbkGQcCWeDUHnXZHJ9iaxBTC5xSC3GOQWgxxikL9ZWirCzu3guw4AnCk9LW2lRQtE6uuggSkG8wrXxklP3BHQpK/vFGnyRdiyVkmg/njKCJUWmdIata1R+9yN2jCveTDmkjR1H/KH4DHBDNt1zpSwMWEb27XC1VzpWsa1bYxVsLOexM9kF/f1Jbm0G8b58ZDc0WF7XWrPp5GA5o9KVKnPczUG0ykahikx2UVOSB8qN1hqDxUh7I5KVjC1NAyi5W3x0/kieVseYAXY9j5PorE4iPBDD+itBS40j8wF5O95iJ0DpeHwXx7wZ3rQOeDP86DDhRgylRx8XDeXD6UsFyYYvaEfng43TyjzSOSBMP7JDac1zVrTrDXNvgzT7Pi3hl9XxP032mxkMjXYWVvbbA3vNiIEKH2m6enUU+RBCW3HtzMkppXue5Lc3XAyXZrMa3FRLNTQZhbRniBjTWVgUOy6ZMAy1iMVh6o37YlL5i+KHl5Jxxc+ZQHO4W/gLLyE7UwWGVOO8xy3a9K+SryubKB2RK/XO6JEqYbl62uMBI6Uz9DyxgwrvUHDiRlShXCflEW6YhWSo8FqvRdHS/PZfjooj7qmtVq2VbKtkm2V7JeuZI+h62VTtG+jrj2FN7fStfRks24tczFXBVyA+CZaUoSQGOIQRCKBii0t02sl5AzTcVODqBJPjmdzcIFjJOJq6xCaJEunTOWGAShDnv4bVXjCPqt2UmMWkDI7m6kECPiypavjnWsoKJ7rUqYQy+pywE1MVFOCD67s01M0d+/fx+1thqfgPfcxXfutfmv1W6vf/on12+riqBsVHNdK3UbD8aONKo6uOqzuwE+rc5HleqqQU8I610X1Mik16RvgShC5VqJvfX79A9uaLIXsawySdxlQE95qgc+WBxZUdeJ3R2qSW/WHCBSsB5XrhisTF3h9cqqs1SmtTml1SqtT7lanbAoWb4gS7x4eBvddTMbNhfgs+xAwaotLjvmppM5Q4KKBR9hop6/zIlHA3oNoKhDvLtY3AyKnQo2VLuE2w7efsP+e+BZj0hPA7CepGS9MWMApUlOWkxtghUqJy3ChPh4ej/MCabnHal6ar76KnItE8R3Nm6OYBCqDAGUMT3OIvNGS+dWZzAlrGwb8QYjwq0fk6tirvr7ILXdVfQscsNS2YToOtho0e/lxVYeXH5u63DTr0VJQRC4oscI/VFoTh2AY5BMxhOvytRp2xBCvz8MODGm4mI/zWaqnw6NoptHcqGWCUVZJovx06an6fDoC/M59PbQP/JlG8v+4f9N4tgAPtKiBFjWgPs+zPFHOeGxYENySRvORf5BFIZfbogsuPzbjCy4/PtXBNyERolk0C6KHPo1QYS7GSFSK4D04cqM+Ik+jcH9D84gNEoz4Q4Lmt5XOd4HWuNfjueUctj/DH1g51GZ1P+e0c0AkTQevDzBHEC7M6wUEW0Wn5eV3pYpEBP1lIMvLKfzlyY125WCf3Fi/XzXW7CmOddUpyOqn4Kn4JlqcVOuOaN0Rz80dUS9uttr58KaO9qkHX6sXdi7QzNWcF8UYCjpzGiOYSKNlhEe/CC67EHh1GCi8LQQX8GFgbw7BA0G/NpmjQ0rEVJ/lGJwQfImlFECE8RiX7mU5jGu5YvF1faSmqaaa0woywmwql1q+CGK80GmhwM8tF2UOtI1jLF4GlyMlx1diBKl14CNfjjN0ryMSfywTZIqGNl8YVydMObQRrpvPM+UkUmUHG1cWw97i0aca2aZTI77++tzHlXk0X3+NA//6629gklgsLp+IWa4h9J2lUw2Ft7/+WhwaBWkDO7hgPI8lZXgacsqca4H+IwwgcJj+Svm+xEhdyes0LzpEkp0ZKDOHSaXGLWGtvJzdGXYj0fgxri4LWGTaI4z4D7GrATc1gCB/jPlCt9YAmSj+LErCzBlfg656OjCGEu0tIwCwZ+zMYgko2XPoOxiSO8xljFZiPNgMnj6c5P+UeiGLpXj5+/LKc10LWTlZcIfu6+jhMhffqlHhfuiJt9fgaoHeQBjCskdtEGNGrstULyh1FTMn4ajYPFtedWwON5aWvn+QyGX/gC/2qYnzIcvIA4LZlXzMccsoSxMcBE3j4TGULi2Ydruv8d3KUqYTn/FJm5kat4K/e2nKbfrKtV+3V3/0E/UyTNxIE8A8EDAyXhTgO13SCcZAG/Oc8O6OrOfNpwHnVkJyGzNZjq8wPXtICw5n1TY8xIMcNZDkioo78pGwj0J1mQ7MIw4AMidtR9worD8TtvXC9LV7vcxBUKKwbRiH/d5g5Lg2X33FroP07yrOdH5h4u8mrL4Dec7JrwtTzri2gF0M9iEhZXtHFGqWX8N/5ECxP8/kmN24Nc/xSOF22q/+grNuF0ZNFpm4uQLELUySFw+o9JkgHz85ovr3zigravmZamKznfx/hzzf/8Ep/hMly0WBp45OwLVMM8jMp9fJ+8794Z7N0mmBp6jM47ysH69VUaSJMuIXVaCz/FVYG0EnuNCx47fhJf5uRnlZ5jPYONyeS/BcAOIJMr+uynJuXh8DbquHDPvFqDfOZ8dYsvOor//7Mc8QNvorZOfXU0G7iGoph61yVAmsXoNoRD76VY2Zvh9H80ktxVAmCZFNmmFPnGp+ygoGfBc1Nq34Mgo4h+XDAd6LH8/QFxMFT3VDjVE0BPAguaKsqLmD1mKAtXTDiseOjw6BZghNl7HMYP9uEAGWL7IkqLVUK+jgzq5FVlO/O1U4F8w23dd3Wci0r0E671XIlFYp1Aj4JeMnBsag6ZA1tGqTaclxQ0hP4HoP0YuGDQzQfBji8pc5FqYdw+IRqwc+QgtCozZXdhts1Vpbe7ZhBPBFBafMlqCNVDaKK/8XpROryq2YAW/CtcwUoyQ8CIJPKVapvZaZP0qXMkmOVZLapbZPmA2HoWsfPMaTW3ShjW78J7S7zidioQMTJiBDKFCVooa00pyM9tiQdBhGOM37LCGHSQYEs4RoEodR/C/wsUJMEEWjXVAyRfgr9Vqir2nDEQlJIhYJQ1IW5TTEuH7IbgN2aw0SgwdzfibCAmqYBmtrvfi+UcP0Newqyw4/8I+HX9HP3WAyR3ZERs6Uy7voiX/Lb9Q1X4HOz+BsDcpCapMqXQ5snWbQ+tUBMVhVufMkJgtUR7Zt07NS/CfQqjU5Trp2Z1FOr+0mzUlA8MKl5VVf88Vva0EezAWsgobJoLGwx2zwvf2nA7tgO3dN22ZNMI1PaknX1rTeHLfkZpGyDhrV6g3xYbPKsa8jfbaHchwtqxiuXTRkX4cqUuypIekc30JF3rbWN1RYai72vZ+K7OtAR8KdZZJ+BkNWKbNWRi0Y6T7E53m//raQukzL5TCqyOUX3e82bGhfr/6GAmnLPIwkVK+UsJ04YwHf7QiTztJMFszU1NeXESW7fWt9HldEb25f8UwDzt3Bp3/mF9vfgJ3kRM2Fdz92mY3wVm2Ld8Ij/iJr1Z4R0ohAVpa2L9OquUY1F22GtbPwUvUoGg9ELKk8sZ3G43tLtMru8hL8utsNJnhxvaZwFm4kMEnMcWu2parURE+Z+2vcA9kb92pFPrpJH8z9Ae36XYznvt7Seo5Mr/pRZPtrr9PIRtjuBxLNkL4ODiApDtf8+Zm9IwQ7QS4ids40mGJNkyNLZs/ZkVG29fRiyyw6RIFV1WCexcuwxkbTornNwFJzdlJfr3IlPOHPvqqAg8HcuRYO2gbKu0gXf/UVGfbIrknurcOzt+9/evvm9OLt2VHohKs+ByW+yS2Iw0uABBO1hLwGfxyqhOOCP8jjwp1esv174vADBkC29G7ung4fu9eaRm9VMVtnJp+hmAGEr68uytePqsW6jXu0ryP/KJr7kYtUq2lephTsAtpB5jQEx6pO/0ZxgtCR3OPP3U5j5/sXmahuFYYUMKRT3vC1Qzv22b4GR4xlpQI3DKdWEltVWJVVpCzTh2i+DwCyMWQe0sCQ7/X14aNeJHpHggGkqkDJgCEWB7SkY5F0xGjBnt40I4czUbZ2XKyxI2CK9EUC6CSkmaUcIjSveC0TpZ1Qf0emLLns35Gla/ra/hf+zOau6YgZcOgiUeg8Ps6dwLrc+sBhBlHhV6qv2dSGX7lTWFg0Eec+3GSd9yGBrieRh/AwHgfr1mcfHa4NYNTR0OZSt45jnjo+tr26Ax6FVkqYFdzPA94JIBitvsxRMXVTAcqfT+BxF0ezo/ANx3EJtwawHLwy/FEnvdDAdX+tEbTipQ6eqd5i7JcdP2s/vtp3GjqBfa88vHW9xjelW/SKh9UeD7s7HBv08nW24gmkKB4Oh4C16Ovf+loArwj8T/8gTfoHryFfjq/P/YMO/cELD3pgodPS/RH+MaDPGf6KTbrfabr01knv9yf9A/jzP2y70VbQUy9PTnon/ByO7B84Xhh2X3urMoiT2Km6NXi604PPrmFisKVn9tbc1+4/O/cnYoS9pdekCYnysBqF9A/X5QmFOEmguMdCybJCcIhAbrj3crb7ahIj+tzc42u+N/vMsHZ3XvuBuW0IL2F9uLTh5alwMAzCRL7GLYQ9+4223HYbnCa7++L/xVTUAjKI5FTxD8gn7Q4bPTuwrUADhMLkv/vXVz+DLTb82R+4G1x/drAOK32iY63ejc2MiRofhhvtC8aHx+WJfZLhsvy2drs6zdvRP3j5h9/3D6A9//02iqVNi9AP8yao6egHu+WEsed1sv9omA58gfad+HTDXy9h0cXHRuEjLq4KZa7yLBHfEFwEfgeAh0MnOYCE/eYiBwAJoDlUKnAQLyJKL13LqRFXadkTFznT+Ad/Y5BKB9lJIIgICxmAMtyTcGFHx0mIWnLutmBML8Ihe9AKjjRw+1dkzFvgAsO6O6kWw5egiFB+ILcJEpkxQAjbYVL/GaEdrtJS9Pv/BV9qWiS6T1gelVSLnz+c2YsfplSZGKcHy4/5UKaCLIohWnNVRFAbUJ/1RPT6payaNHZPHCc/qJsIhrkVg3kD5Jkx5fcCJH0HpHAqqY6zRYC3CPAWAf6MEOC1hPQKu8lmbsxNpJgbUtSDijeY9wrZ57ugineoqLlOlN89mchTZRFpxXQrplsx/czEdK3M5moJzJiLHURwJbTfWHWzA3n6pShVMTPwD8hpGYzzLFN4yYefGq8e5DkdsoU+YFt+MFOzfBjW1cJantHNYlXRzScgxe+rBGe4qU+zBGerSFpF0iqSZ6xItrD3t6Qx3MhfuJvWaSAPrIS/PJ0VOq5UkcoMvu3YZRRCKQDd4YE7AZUR+pVMOtVwXzDkmaolDaGvncBm5IzKcXTIGIyVjBwUAqGpvvUhzWVA4KEh5DuqAqoi0si5cork0DtlN/ZE5DoEDVp5klqDcpldQiPlkzhPEToZguM6n5v6bDB5CbR2F5NSUz3tiZgayqcejZTSwhV4YTia4HwOzhgDBFUJK5RCchikbha2whQhAmcy1VRRgPMcYXyvye3cFefGLCjrjaiB/Dwt3pfcgZjKV6V+xp35pNS8Pk0iDRELXaaZB2ZRryJkFeM0R04zBCNlnsPXlmKSbs15SSxpS/Zf2tmmlBjnvKkEk1EavcHU5VwVaZ70dp333xayKFVxm5krnVTmzY3ew2z3neZSyT3maA/ZhCOD8H/QUi17tql5x1IHiXMnr152X77snry0UFI+8u5vr7onf6QR0YnmIdheabVfnbx6FTRTX1q/grWFwwNo3IoXCtbY/SHjPbD9BQ2Bk5tTDWnNv/4a4EJff/2awo8Vzz7lTxLoxWU3opS04U1EeyAgxFbE5ZRaVcwI0sjRRzsYJ9ccl1eGoyttOwRWqOwKLzIy6gUdNIVIUIbb3vwX4fDxLjk2XCr+A+4YVGNtinQIrjtXyx22vaBo74qhY2YfvoanGuRqwN3egdRZV+o4UDwOB1VgFBnIYJwg3EEGRwLYUcjTJxuRyFsIlw28pP4z8WDjYLnqn7bNgKbPWizmbg7Bt9wREriFra5dwn0OU1ZtZ/4wYyf2s40brwADm49zbdmvkKcy6oB59gGFLNMk4MzvcCybBmd5/Xk0fqzweePmAcUxT9yussUUc3qmR/mNZAZdfDxEikH+VxetBqoqYI7EYh6eE/cpByvpcO4uTz1iwdCupkBQy9wTVFKnnfoiOWh8pc/KaeGzzpJZ8alddeDppu7iiPCsDTDyPRV2ZhhOz38GQLJBxRRSElwEaoIl/ztAr6q4phBQGT6EICaxliwhlPOO/MCgKVARGx7pNuLsdxxopA1Q3aQFk6jqpaXEwFKWQfNcG+mdLMZXAlkFTudFip8f/uudxMeOahzcOKZKdflYPjuxaoj+g83J/gHIz/5BkJp/lU6vFE3VSmKbyknoVdjxn5lNrRIbBWQpppW4MwcfijsuFQFA+04MCUwbEMg99beFAywTbacD1+M3EX0CHNb9Ro4/IXAx+quh0DrTJkCp8ODKUBHITJMiDZLZooQiKHGhcHY6twKC48ojVd4oxSia6mfgcMqh9PZ8C6FpA+VLXWlT4LgELD1X+KC+KEKNyzVVWiFmVvY1f8GQVLPQHlZoe2TbalWfTK5e1vh2V/Z9nacJ5ZeElohVF1jO3o3OMrWLEaGkPTqRUNpNfAsuC10Ycg8KAHBcNl58TANY1oINYsrWr8L3u+79o6045L8YTyFdtJ++p7AFCLQOw9Zh+E/iMMxhaW4HExDUyM5ggUQuu6NlF8i+jJZzc5WTiVa9/2LzTH4Gl9Bs7GmoMZkWfTZgH5EuJKwq+/1AlS3Am4WP8cUJKNDoPhDNg/7oU60aakDiI0eYqkrToHcAlsa5GTBQ+hHwmQaya64sZ5Ync/LJWEbNIFN6bMjQC9fMEt/NUthVUV7lyMDX15fYN2H6AjMbF6qWr2QfOKbp2H928WkYx89NFWEQi0eZUVLLbGlSHCDtBXJcNSckeQuI7zhkVZe5SFRXTqeFmqItCu0gNFfHc6hdFdH0ZFI+cJDOvSmD+WeJXDbYEU3lO/mUPrAx8TiktBfpTE1gnuIDrF+d7h330ZG1g3GN/gUDTjqoFFDaBohED5n5+b6GAgIdZyevuicvL05+//rk5PXJyf9Bdmdek8r7T4Kp1y/KW1TSG5dEfW5eEqWTFQvyuy0WROl7L/oOt450DLXeFzMQlsDGvZY+/JdU3Yh3wPtdXxZdFnmGoRaUZHAXseEc3zxLBpNaYgFOq540+o3gXgpUjpAbKrNQE2AzeGGKsjJRFMxschpmdrikkRTYNk1Z5HqaoRs2n80o1oNuJbhyWs+LY9r043ZhnOCDvk7VzWBGq/HQxRlQPTTWm3BMfrldF2GVHqga9jBV6ivY5p4i8zR+ce3Vor1atFeLL/BqwUlOln6gCZTwPmI5qNQNThIk5WhgQ9j+qoEJdEBNAK2EI+zry0qjt2JWEN8sxUx+wovILE9cQrg1lYOe//M//q+pTqiDSgrc2JeTTH1OR8AOBXmGQFBA3NNjUsORNrWqC29NfR320uCaw3Eta765I+u+ZS6dytACcteQwlVIY+mCPElFba5Yo4qoNTi2NnMpiTJJhgJrgIBDfQsqM0RB6AoTGpQrKtR1mi8M6n5kLgl522xswEU9kNQD7IEQr0LPempucXhlozrzTEkDOZq5ZUmw3LEwoBxNImRVDeiMophTXM1MVBie0B+7YqhY14u8vcwCRgRf4j//4/+LOAo51OX4y0PWcuLSiflxLGu67yqiA/O8lp4JE60nYvJhxE3QN9l69ljm9ahtRximusLndV7KEe6XDfPCxgaRCoyVU4w3pfCRC7NDLxTtdHW1HekasUoEYQzszRp9ZU5Jg9wtOQvgw4nPMQcjcU3h/2HUjAm08VP0ocuRNKnpiW/y8soz05NzPYhJhWENB38AQitC2NbjCsi2Dh9rUIgc0gjNgoMFNXnik/+cTAD0Rl4UNo2+cuwgx5cM6I41qzsh+0LtLObhpleOxw0tU8bumJjWzD3cgW2HKS/tV1MRHw3nxssmzyQTSqbTiK/H7WClekEYFiY+d4B8lSn4kYqwgUOfbN24LEdch9f0dZhm3YSBbhxyLEJ3EJfI5BQTk5Hs7LjDApt0nUoO5CWQGlx7uif+EmeENi4faqMX8JkqAASUuWN54SuUFZJ8uSMySb+IuOTLOZGRuN8JqcU8YExyU9r1FGV+1IFY343KMtQt/goZUwtZQdUwbvr6m17CwG/INF0/MrwzsHAw6TUrSSL4EH4J+QpCa+DwIof0ZqyJAOHdK5s3S/7NtWesg3PX0SbQ55/EjDd+uxAAFZNf1yfo+HjwARoNcRnQiiUIcMDPAxnrOUZdYxRmbetX/Yi/0bcgYNYYEE2fAQwTHbl9HRx8WHMUeTP5yXMYwK8NFgM3ijYCLFNiOb0i8eU0JnddgLNWXcNWO274Sotuq1fJpVNcykixou3itE+T7eELZfR1gf8ZxveDTQ3i86wMrAJhNsQG3cACXytDLhTmPIhVU18jBVWFBm9Z05XRYWMW0WYd4DnuKn8TAKYrFAC/sJKFrBoFdeABQSFi3m18JCy1wSfuW4cmc7SmHvRryL0+WfsMY9f8Q5Xxww5i3ZJoG8lrTeYyX1FQ9eIWGRKssMqFJJ5VpnmdKE/yOggGAZx368dJB5rrQQw9USx+v4iUnkwUohtpgQLaAGe3Eb6BfrdiwHUVchrikNmWYz6U+uD6OhgdsBOMr1SyAMMM1WsFhDYC14Uslh2H/ax3zXZdriPiASu00GJgS63ZUrAYi/ULGQ11libdqmcS18vDKhlgQvrIfQ2uZdgA948aQ0PQr52lg7J5tLVZ4SWFxvvamrshVjEQDRW0B68bfiA/kJFNU7Ksahs+B0J4MckVEGrcFCknlLnJb2iiUUiw/a9YILjhhC/CGe/rqrwkIldru4YvkLp3w2pqsirsfaXkvt70UdoUt2XduEOTO8hiqGi8ejQKrqxNjoMvBtpymiSg/lHPn/PsWnBL64FuPdCtB/rxPNCFSpSaDcY5QFZ3S4r7CV8Vb+jVqr+Z/wpuIUTDOvOLrB8itkC0aU0V0Ji6Y9vwlyH/aUFotVq538r9Vu63cv/x5L694d0W1+jaWR9vtGAYKS7ncppqkDP1aCL9BYmP7FUF+b4xdCSNycdpWHkyTp6EVAiuiUcZuQ1eTnbGU5UEmy3YSBSYQoYjBcmCNDBKu4AkBvIvEcU++asa7jQNCLtgvZ4yyI57gFvYVMGhZc/rweuXJycdS2N78Pqlx+UgY2EjKMcTFaalmhmHb+2JM3Kl4U+vkKWQnWsHr1+d+Hll3PRD44wMfq8VSYc/o2/Cn1c+V3yXnudzj75FxxzUXYU6oiYvhsxx7UB0zrdqDx0bHxWQEo3l8QGCiJUUZ7JUl9+V6mN4+pz38XIKf3lyo1052Cc31u9XjTV7imNddQqy+il4KrC6DyyGz0EgtUZua+S2Ru4XbOQOkCSbzLTdfBxWTjDBBLWwG/MPBTNXMf8wd8U6AiAuddJEBLSaowd7beLo8dgkPyORj8HCaGTp2ZaYh41g33SdfcJDyTIJE4c3mzlVwrHtzJgTdbMfZU5v2+FsZnhpHA0W+qQRuGgfUby8WcFG4wkcKtwNjiEDyjuAEs/ckr7l+h5URwi6h3xqCpbZdeRQ1EsfYWPOoDIoTpoaMZNU8MWRAfweHuKIFbZdoU+h5cJg5bdqVFgGAa4pFnB34CQol7vyrAsAZnDtIkoCHmRepGB7Z5YjpkJmUjuMMSHEem4Suj0Ge76KnwTj+Rx7R4hipSeaa7BHjqakYTQ1TpPbk5ng4O+XxuSpHLH4HYr5rzplDscJ+DaZ2dHgPcy1A4voG+24MiQsNurHr8YvUjuDeVTxl8lFxKGV1fjakZeHt6EOQYhn2G5VQaTG0pkkxMnijrY7o0aMIZlSP+Bes1/HrZAdSzyVfBJIiVVnpFn+uNPhgEHrJZAdALwStWLRAwx3hsWH9DcuxlEFaNtfo1Vvrv9st0K5MmwI40Eziyh3aJU8QqNCJNK3dxtKfQ1VF6J0Ftq+Ct64OVNFVYiPImKRmJIDD22KGAbQgICY4drrQU/w0Gu0Jq5ynRfBR2ANDlv1tnkeQf3EOIkaEcaAzwqYOsh+Wj1rR1pSsbscbM87J69lliY0T4X5xFxmmoutLsOGjZBZoWSyjIE9dlFirUCvvDCMMyJwmX9NJ7bgJPqMUlvWS2xZgDHIQEDZ57GYQZXEEFjbsXkACKt0fTeAhshghNwLO97qZpLzC0sQxuWnosREhiXh50LgIe/5iiq7WcCZr+FEMtYXu0RVOVGSIH6GYdXXMqUCgPj6mDIfA7U+S6cEKyrzSPWLH13dyV9UYeCXVz3xV042maQ6wbXv6w0vsb07ykvIOsw5OfPyPTqv53KqPh5eleXcvD4+lvN5D77ivBj1xvnsGB3ccUnMoHIzbWxQ7mrXwpIAi6Z3tiwdG+GAfSYJe9flNpkogArFs1UB3QZ5KWGdWLGqTCxXdu/rqETsDaYf2GpcC7NWngKlGQ2C+l1fJ9aWK8V/HDmun77erwpmrTbpTkUwxTw3BmiqsAISqQZ/8Xvk8tQ07IetTB09iKVYmypV97UFDONojyN9gJkOUYFqbNjDa6vNppzpAph+c9Vwr7W9gJiBJCjCoQO0YY+VqNSi7NTqRFLVNZfbPQwTTOzHFtagpn2jrBOUlFHqSVPiy24Ddt8PfPg8mPOzqhvEPRUlZV0BbPSSYcJRpsXHw6/o524wmSPHdgkEBbbUvaMXxD+dn8EGMkwRillb7lPOO4sGhCQlIRTTBvZs28bV13QF3SJxzKDuXSUy1yzfSSiHGXvEWczQ9a3lcUO18spkqJD37rOhGuV7Twd2YU1lcj+N1UXJXUtN5ch5oewZrJTlq6RL7qHjRsuwgtyuiq6vQ00n9lR0dI5voen6+nb1nm+n6fraqjrRoOmACdOnMK4VUQsUdNImFNB2+XQANugpycitud9s2E9IFlj1CQXCliuJkEy9CqDeUaJoR5h0lkISnWWKvOQaJrQY9q31NdS5Ogitu33lyG1wY9n6IPn0LivWs6gsRVSrvtVyVS0XbYa1lvBm9CgKDyQsaTyxncLj20e0yr7irv91t3tImCa4VlF472coL0nKcWu2parQrOQ+Rj2QuXHcRJmwQVxuSXPwBAzzYO6tdb7BOo9Mu/pZt0l7+xx3NvJ2P/Fo5mA6s32TNJNr/vzMTi7YasoKZLdOg6nXNDmylPacHRl9W08vtvyiUxpYbQ3mX7wMa2xALZrbDCxBZ4dBkn2zx+EJy5Wqhg8Gc+dqPsyPLp15btUDXRx8AXpxePb2/U9v35xevD07Cn111efA9TlSGFi6IsrlBS7hRF6D2w51znHBH+Rx4U4vU3uLww8K1npLv+h6o8o6NLtwILskgI5iN1zT8CuV5Ew+QzoKRKoWtpQz32+qNnGFywAXgilJHI9IX8duVLhPRK5UraZ5SUhYKQppgxAoGdO/LVxM0r7U4+/dTmPnC16lePiQAkzMLlP/3KEdV2gc3MLq81yN2fXKsNtKbJy+GNYSQ1/qnfRNdFXo9fXh7W4qfX2rq0rvSDCqVRUoGhDQ6dCfDNfoiNGidJFUdEwz+2lfM219Bykg6JME9BxdSjzRDRtwvJaJ0k6qvyNj2dC7lvPvFscVU3EBeVByOOWd5RHEDlx3s8X4KmB06GvXVyewhbc+vMi+XgSrzlMJaVYMxKjEWM6JHxZlrQ0YuJsWjvniKoJnzCQ9YEcfrZXN+0YxiCIPiGNTcEfFISe81wNZVEPFdMcLFQSffJGDIFTU10gqYjY85j87pm0tue4F0+1HETSuHw+EkKX8pAxnWHkBnVsnMpY4cPVC8ApdLyzvOIPtLY+TsINEb+QgCgrUMJiISL3iqFuH9YdLJa7W80C4ilIJyD243SeqlKkluEHaf+LoAQIEEPjvLDNXTcBvyeH11dwtSHeSF12/IF2YSgM/bpN6+GKy0SKK/UzqNzS9NiOtBeu2YN0WrPsIYN2ySKdTVZCvYzeU7gW9SleKGjz3nWRSOu4BNBVdjXxOMqg8SkkmUFalRg24C/AmBSaZcz406AzuomtH8mUoC17fSGfABNs05lZptEqjVRqPpzQ8im4Q4gd3Ux8/u0ZqBQZ9izslffhhEeS6AWXpYG5VyrwLYnfj+nQNdQ/R6cmaKVuib5+JNXRiCdA4qhNXYbyIoKVcAXpRaERT+uLJHaLKo6sb+9OjASS5MqgJFfIvh5oyW65AdAZ4mMrvBNDzaEq4zFq6kDCM5fGSrgAo+suhSmVjUb3XItdjxTSZK6CfqfN+QGp3p1LjZTUw1OF/X4uFrpXJE1luzDJA8bK7NMZmhqzQGOaHEn7jBQZtgCp4WQPfEi0hxKY1k6OmGplGl2CxMCQ98OQCi1huyqNOmLMekMmyxRRR01nsal/Xtg8bnKtiJjVtdaIyVdobPHzQmfpcKbhIafPUS14EHYV+D3CJ5dqkUFC7AqQIXR5B7N4tOhDwBSG3FYfPni3yFagA/00IRfDaA3m1EYeTuOim8xrY8oX0NHNdE+Fyxbly1ImGh/UIDWN8EWaOHpaZ94AQjWfJpIOVowqLQPXYa8am/yS6FVH1GGZna+211l5r7bXW3sNYew3MlBTgaCyisZXt10DaaZvcLeM3UzLUdNyIjcpFMLGANzZQY76Ur33Xtdbx+VH1bBWLm3DcIoxl/JeTE9QhC+C7T9ZrEhwPuMQdzOyLcWP4vUZW5G+V+neeInm/W3dGq+BaBdcquCeh4NhnEFJX7K/a9mavWOHIiILWREfeyG7R48A3IEtRdyFsepzPao04yJ+/5v83AG6l5Glw4PDKmKCY4jSeYF+nEx9eBz3qHQfhrd2sShhtusF3KqF5X5EWCnFcVloLb2MbcN1e8caFWIMWjth9YIjtPEzu5HxNG6bAWXhfgjdBuDYG+2pqeMtVXoW+3sKtIPWyxDq7UXeMLHOZsLU+AZrd4Eroa2JIhUxp4EslYos518mUOsqbjdJ8C7B7sBBVYhHQZAvZZqYytUUpVrgJ+LBJ9D1Z+rbQZ/aakuUr/jDwXo1ytLQaPhDetZWZztHZqS5VpuS1asjCTrVAPN5aU+7xcQutydSaTK3J1JpM92ky4Q25wR+wo7HUlJO1o61ETWy8498uwOOTd3wNEFvLKaxCc4iV5JA3qDsCpXjUHAAKuIhWzgB+mChFNakxca5STAe1OddFSdFY8vlxUWvNHDhQTytNdDq9ckDiBnobcpAA7UhCeUy+TlST70YaX3ztcymSQk5KRwnkmFbiYkswh76O2dP+bA3WAb88RFsQcOtS11fC7UoYloCBgVkZhwrsmH0SCzK0YIxAhFRSlWFH1Xd8kRwgCEuAjaWxVE6DpUA5hV+ww6fZzdM6eFprpbVWWmvlEa2VEsg99zJQ8E0U+mHb21f7DpQyNeWgEA1wFMpzUTfVR629AXrQJo/Anb4g/wvrn8grcZj2VM9xYq1oL+AUawqF+yKcTY6PDl20qY2RmuQNhYBdl0c1YwIKoOVkZ7kq2ULySAnbQJyOZVjxMyhhzOGdoKBdWBM0GgXnpvc1LQ1kOVgSPk5LmaSFzfdYYaqsXZ+jngjnhr4fnkrIT+myqW/yIgkZNB2TPVMO2qTAeN9wDat5JFTs+iqdlJ4ZobLdh2DH1gqjg9uKZgAIDB2UU+ZqqnErR7zf6CFBxyJVTLaVGSrNL3SZL8Ax4oogDnGQw5gUkTdyCDbBsDYh6MVTxdqc/pWoHkbwUIoRV5NtWkdu/dDkHaF60x7lbFZ9kt5/hKCTKmsJIKgSZoeUpX3P1VRcmCtwaMnxp6ZhwSGFD9iPDbP2yCPYAHNm05HE2JdiLZKEvYA5sRJrA4Ktvdjai629+Ij2IvhvDm5Zo4ka2dpExNo8FVPwhWEK6lSDUuyJt+jnwLQaTAId57NR6iAnjiAEy370tVcQVYgtBtvm+Y0qMGlYIrXJaJFmibhOzQIo8BkujXbTHFTVj8UIMLzXcJITWUpK7MXkauIn+AuMQefUu1fwRkR0JE1IX+bZzhvtz4E1N2PPyqCv5bjIjSF+l0q6N6lj5Joep3MMoFlOn8jU/hl7ZhdMqowH8cjC0gkZyHnOJ32tIOVc2uxa21OiMGwHW25nQLWEwfE2qbrVKu4hm1rOJZmEVW/CXMm56mswhTweegjrzpXmLbW4pQLACuvwMkbCwPxsWJae+IEcgO4O4Ri/8Ez09RD3wvWBJDeIEw+re1MtJbTAKv0OwaCZwM4P0KokJoHgV6WByImosl2DfW2rM80LZRQxyCqfHJ3wCaGnQq70cMs9u7Ev02z7FYeIWzfgz6VN6ev6WOEHU8rZnMg5PsdvVKfhH6d7jTNbLaXMANiilgNxk+okv/EUcnaLoVNkgLeMvCM1TTWWG2h0Jnbw63O1JAqghlWEWMPP0pCNj3/CixhA2WDhHKEVjcQj+QuFEHFcNKD14G7dEIFMAW4C4ZZk4OzEIU94dKkWUzk3nAmhE/xxjHRKyHsA60TecJHl03TsWFVqksIeSSchDGgHOM2ORSPKUxd0pyE+DewLmDMmCz0mSZiWS+LVTonYfKQymL6nEMfWoufxEoYeYRtkGKTIgf0rPzWgL49YpWCt6foAg0xSM8/kUkyLfDG3p5byPFgG+BMZc0373+P78XWqbgLxWG8GmEiu8NzL+HJePTqeCKjxG40+B/pIA+o3+yGGkhLGY7UT10bgmvSi0kHw8R1RNCXsqa8P3Zd21BHosRheVproxO8cDT2oBOoAXFwpo/z3aJxvw4uCVIvzDz+KP/7ryUtLUwFD+fnijQt18EYOX528etU9edU9eXlx8vvXJyevT07+zxDrDXyTYzlCd14buplY3svUVKISX30lvoODAbsC3JW0k7Isi3S0KIEdorbzDmnDIs4erNEypOoeuDYGdKrxbJKmBs+GnLpqGoc0Q1juUhXDow4w+fQ1zkMGTH3hcbFydkCDQDookv1DHM9gtER+KC6AEP0mEkUZHqgWr4nixVWvtwSCZU4zIzMCxBvpPFip6FvqkHfDfxCNg0uNcHqc0TLCKNi2ssqcE2pUJM3xBQLBHwLrSErHqoB4dqyuoDVkRCJJ2auoN26CnUzOoBDeniCXUFWh4RBI9k7SrFQFWYruUKwZmVNIRALEjh4nyCH051Jfqt3SJ8+EQcyyY5eLNy9VZiiSlKRmsWTnh7ME+prdcpXl8t+DaHRgAQyINgAOF5S/G9L+syOzefw87NGi7Oskx0YcJRf2qsqjnnhjI7sdBrjhSQoRboGsjb8zWm33kVEpbZdZJ/DAwssNxxWmtgAV66tWQldYWrNiDYD+LXPx8uTkhFpBVxYvkvWfMUZ9loPyt4+RZqBE+mpk1fU6U6VEs71qhlTi6XwPAc8eHSx4yWnsSZ5lOU6Us7Ugbe4mtOClFv0D4LW0V8z+Qe2EBcs7LNQUimU5pYyYuEKKIX/Q+Oywr4PTVplBx3Ixkh1g/FTlKGc2KGzlNcxiOBzC/bGvf6MyI32ovSj7B6/Fpa07IsRv/j/pGdLk8UMrHvYvWQEA7530Xv7p1Z9edlY9W9F38Er/4NXJq5fdlyeoiP7Aiqh/sEUboFbjFl5taOEfDb/1er34x4+d6rqEmwQ9NqxF/8BK/MEntaRh0aY3DiR4HGUPvSBNKo/nEvVd/yB+qzr0/kFFKawcWMqr9K3603w0f/fpj//6eX6TfPfNioGBl5ReiM/3puGAbBgApxm9TBZZPI/wJbfsH/v6H3hg4dyi/fAXtN+9ZckKV+pFJgtUNd6vXvmuB2T7D/BzoM+1rqFAbtPwTI/kWkS90bH9VhVl06XXx6a8Wg/HKv4MLFrDyE6yqTPevIWKONa8lfBCoC68qqhOxCrvvsYib8DWZW3TLW+o4RUBZOCSELiJmsliHFYZHgSX+ywHYjoLqhk4Em2X2UrkslXz+M+i0eLsVEYVPvcvFycv7XM0gWBl/wzrymEmL7Bp/009XSm8WIDdyqr+lIj2jr/PzeBUT1UGOt8VvTIpwGDiCcNWDk/++PrkZAh2NRUvvGyaWyea8R/516Nh/Q3+W/DCqzUvvGp64XdrXvhd0wvB4h4N99cZu0qhf//jzR//dPPrRflNon793//LzO5YDN1eh+2oeaqb+F/x/2+lwGIlWD0/tqHt1NhvfX1/s3t1h7P7456zu6+5/e6u5lZfpEefm//Gbzm3+iI1zG2TGXUnFgK6kTEAYtDYvjY9oXPdTcIf2WHf19/ENrkRE4muS/C1UV298iYXoOqmeZEq81pE7SB7aqXxnjiNH6pysAoDRKaQuwNxDuQbBQfyQpeOx5RdaJxNIqfTQk2JtpSc/bIYpWWBd07w9oxlBvzEP5LOIiwCuCAhYXfF3NF6AbNmpiR4GBxtKhU0EyZDNtfYAWtduJDKS5QZ7NQ5NZSGxQo+nYgbZelgmmISUIwOAgaWlhdwAMwfvDAYqeEVoJymaSHnV0S94Z8JzBuwbHg6znkuy8BnXR0D+wysq5zKux6ifTNG0noau8ZHMjlHbxXgM/KJeEGDeEGjAKf3OXGDdLBiygtXiY7ugUvH7ba0vg/m2K/Op7mmqsnFRBb2dsfxmL4ejBczcEYC+DdqhvZjPM4LCEUQaKgp2lQC1wmOB3yGNznyASNs2X4KjhnXxtkCP0ZorqKFc9bwednTHPoR9LLiAEOP4g8rPlBsAU9k3Ay6eKOQCyJRXvgqtlPrY0SXHBU0bfobfgd8ZDpRQMsSDXFN6mD21o/5TpZF+pmZjNm2r593iCiVpQQEDfmtuFoQWNXoFJn5ZlI9BccMzGMGnUoik2/2yRBtML0NnoGZ0gY5ogF/hZs+RqbBhbFA+EqcYYhIr4F7E26mYG9Xf8avhQ1so8Y51EOI3+nr+h/4rZurFPkNwHPHMbnAadvkuaxfGFIuaAgHBFxPvLIUkXM+zYV2/PfkKJOVpSVG7SP4spzHhWbFTpMCZoI9WZqDGVr0NrYSXyX8SqJLpdu8nq9dV42P0Cq9FsOF6Sppyu5Leq5xnV8HI21+yjUnb8ywBp1Cr1ac7Gnj8w8Mo+qEXUxkZoI+IC4R9ZBr9eMEhxX31TlQejEDSEIilwcfoVF+AJymiNUq0xLb/M7fC5vBCEGVeh8i5BgkfXmFgi8SOJ+wBXRIHrzGrv2kp1E/OGH87O5sxhS0wX4BBJfO1MG6eV84F8IHsNpqc/+Zp8aXYMtsZuO9NTcBzJ0/S8SCNF1rYSfselTef2Jr8hbxWJtWJIqAV10kjevxuy3WQ+nkPlZj3cSdsfuO5Od5ffZEFR+GC4OYLztunB5k08I720jKWz94GKSpIzCcZwmzlwPTAgVyU0CrHmYs86kCY7cXfIH1Nx96mTG8Kb6pC5rvKFAxB45eVFO0TmzPUCSNMM+9SKTQytzPt2MlqL1sHXQOvGW5Xqb+AlbJuzypw7sA6lfkGXL042UkBPD45nn+5EQrbYmmVagPLCQwLrD6jERvZne07IJZjc2gkRcVZEH7wNVcwFIPXNGNbSxTFjmYyKIA03PGFARwJqHktDWbbL2HYNwWeBFuk7u8PvRx+xbh+mfWBBD/S4UKqcEkeewB/gI2ypohog3z0IP8gJbUymVsMscefYjVhWy2BivDfExuhBA5inq2xY632PEWO/7csOPYrn3KN4P/6b6qSMita/1Nrk1ZyFSXv6Q5Ucxwb531L54taELqJy7B9YbrJW33Om/gL47IkF/7SMLAzWJdG6csHYL3vbz23zZ+2Dsuy7dKQjLZD3l5ei1TNGm3nRetxg95iVJju7d+/ul7+4Jdgj9ttQTniZrN81Lp8ZJX9F1qEJYULcWf/FLYr2zrpeB2L/Icv/3dlmG3ty7yHL7unxCdZsIT8Wq75XANOOng1uCVX4PfB1/JWoWJn3b1YPnvsXMAnt6FBrfEe/YMYWqvA6jxv/AvA7IsVl8C/rZIx59Gef4Jxq1VaRZpqQ4CE8T2IS6ghX/A3dfVquY+0mRf++YttyVcL+fJAQgbfoEwiwdhOtxlZW4rBhR00rBejav4BsvuPYm1rPbwyOvFKxOt2oelHr8JCxXWFw69KIkKZzTK80xJHU2JH/pH50C61t3YsKG0VDOzUTA3bjP3izjXg6Y5uqU0GxfSzWfFSBvXsL5OsIxJcupSeM85g5fTP2vLGBWk3fdL8901+YAu1lT5hfrbjGqNU4jCJs+MJ8DrIvIKEyUaWRqpEkAmtaGilSHDoDQmH1O5RvQ8jZGdD1n1Zvyyr9HAXVUdcld/+Jfp5Cr59Vr/YfFr/ilBZ5zvZHsl9IO68XNsXN36KgZJUVheE+gH4vW05eQxjbt5aeGI+NrWO3tC/a7H3tF1c/2GXC9vluNM/aTI6XEGnUfXUXTW4M9Ncw8JE2onyeapu7qzFmMboM2qBYYtqyNSHrmqvDZTv84dUX0f7F8uXk5hQGbGhv44zGuJNgHBFZQT51FWK4yXVDsXMmu807xS79JWu40zqexDRaFkYWx9YdQBXGv8kbd5nZYGF8SqTXesAne15fn84Xbc15O/iP9d2ez6PjZsdv1EVDd7g34JPvlIcq/WFaxKwI8Jf32DxUK+V8lUFW91WSxjYoGaZrF48fjo+XSY99HT26ud2jzXna53dhD1sIwqut7z/0ktjwnEMZcpY0EYDY9WP8TAk/Q6TRYyg4cDjYQ16sHpblTpslipLWDfwHwLX6qc8LweTD9jMAg3h3z7cXND++zQt4ffNuWkjZf7au039v2mL882jkVlKKfKRr0xLg70OybgnsvwXMD0iiWnVdBXCRT/Muve5EWWuFY7ruC9TzgJEL/0fVG+I72AE45Gud+cz4ImqtP+0SZ6u82hBBymxfFoasRlYHV3O23KPjLiOpU4l9P351RIyEEOGD8Rgcex7A7y6HEYQiCzMlVXIK4e/OYMBitgqXWORwKhKmOyWCQtsc1+oubSBOEnqhyzFiiL5cYbhrRf+kEknsti6a4URLESNELQo9D2pSeajpSHKfG0MJ+aCj1Xk0cRCk/CiwUeL1EHsHC8WnmB9Yg8CyTpvFGWjz9tuOt8A89sNlaxKWJUulaFAfiZ7x6MUJK7zUKNffZrjX6/MW5xgwlUBPWWkpjk9mZxvZ2depok53bxN3a8sakzdWdNvf08T2nbiQrx9i3+kqeblm2LVrbeJjDxUzh7M8gmy0NHy/IHisBE54NVBd7a3Kd6+3HAF8CbcgcbB7cluy9M9X93ewiRp81D3fa4dg5AetzyPPwj/Nou8vnP8w1mUai1V0mnO9XMZT7vLub3pZPLq0KZqzxbK20v3ENNE3JNQAqoS122BY4x6SmcghIjmaF9jEhIYsjL8huerW2sE7zpsnO4UQZE1LRZbeBrtBmzjeFtwGoEyyERTAkVGYI1scu5KgawS4NxbsrBSJrUrOv/vSrEz7Cpb3JTim/w8epg/i2/EbPF+KrTQDfs95Yohoupz+LC04KD4uvMgC3Ojc6wH9QNnvRzeu+Dfa06MvsH1uBcpXCqNKhrxpzaDeGd4lsriAVlBsie2Gjqwe1vqooN/l9sRZxiK+stEoRq5wUhtw3TNvJZ9MeIx4UHcaGDBL60DAqJ4kP1eeC+bw8/7BzgWNZDZqIp4klpnCfKBUiND8dDnwDRPYMpc6eYuFMi+f4W2m30ZCFLJ3jxaosMXzW+XV/mpqdCEshelB+Ct25zhfh7durNiEhTavHyhPY8qJh6S1tu7IV2Gcg7Z9U1ffoN315s863UK6R2ttXK7eW8vZy3l/PnfDn3NvrzuJx38GqOa7MA/pDojn7XV+ZYZm5/x4Sn3yZpiSWpNkfKku3DhUnS1OaakGFSt41PkWALtqTGL7w6cIYnKiFDY6uhrpr/6rHCG7sNFmtSN7nZD+gkDIIo3S5rvM51vXqhg9hi3Wb18wgjh1ss+F5zgKXcYxLw2n6zWLsTY6kHCQi5AWOlGwW5jbKv1V5SA/miKgTHhGojPJ+ADu1EiGinl63yQhLoYxizqpNsW6ZGG1aB9uhAQUKVLXAyIHE2yIsB3fb3nNEpNCr4xiNIsogfCwE+gqbJkSQjeWmTv/AWOpFpBgloUCYFTVN0YYJmgFIprpo7F3PHYG5Y1b0n3tjq8gtDBk3KesbICRCFzBS4XVIz4zQ3wexNxFnlo+buQlYiKR/5apIoGQnZoXcV1sGXtka27O78aW3Y1oZtbdjnbMPWPcNb2LK1TWCrdq2wfiJ2LnuAlncLwVjrDFo2gylO6zydHiqBmwlHjzAUXCYVYUaseVwcjDxI1SjbXsmDu0TgwiqmSAxROUgdd+QdyQDWGrP0VK6ELjZnKgVwh8EukeQrwVNaDiq7t3bPQnc3vi3W7gdXD4lSI//617/+tfvuXffsjPfoiKaFHls3ZWGnjCSgSKOBpOX2OEPNlolC5tjDsNws8XbLjJfUN3hknWTsuSTH2dpiNq5QXITOCQ/LXd7yGnYjvvHtHAo82CFM1Nodrd3R2h3P2e7wQeMvwHf2TGwKy1DNIVE4I6wdOHgb6xycV1R99P6n5nTY/c1uBIngSkibccX07mpdLHifr3+bOPGbgPqo8s37z+jP7jz2xHaB5YDjci5Ty3vJNA28KrYAAVoGqyLO28GRVmvtajR6M6T+vTToQhlWhzMUclHmM1mmY6RttyFrrnob16/V6gYYzsBVZb9/1BMNrbrKwkgQT3rCUsI3nIaOLbFmKwUw8B9+sqMo85IqnCXIL6eZAwNex0PGFBrxAm/lm0QDHb0332IbNX/k+hx96nalKqJxgaC0C0CBYBxa/EnRDQCyTdFZxexbpagEhum5GKiN5HvYot2tUNffeyRie+AcPP0+k9o7dTcn7GwB0wgyTO4ynwTya0iEZVIP5lfSqAGWWNgbqwFzF++hIfEjNtQ0XOzI+eLR7xkO9pbbGSxsvIuN++K3DD+RVbuFTuudkoJck1vmBDH7W17dH+sJpwztwe4DOXUv7zIc3+XKkeHJATpIbdTgVkP8nhrZb6Q8gq1H/Nhn3Q5uj2NeOczhieVzvE0AFGlxHDH3IE1WaZWq3bK92iCyrDfWoDhP1oW2nN0BCYI3SF5IBEBc0MKC/kK6U50gDxBwvWssCVMtRhvX0IgLx5H5ZKlKTdxbNbkQrgGOpzGynNz6MRl8fV3RUGDqpnp1XFsJqzIAV+/KG3e2TSrL0bPZqElTl9bVw3V2QnuvuWwvzFBlk45gWlI0TOBaGcz1Ks2SQunAEtnXwmUbpMFK919CYFQ4C2DBpegUsO2ya4sfczP+DHydhpKxpOBooLhkdsjEUYt+PDzGOrImHaVQ1OqYE7WSLtOLfmVf6fov54jslUWWdeLB+OIstrIZrGJtNtUE1Nly4Gr9/A+oayJOfzgTs+UAaXr93/4sXoxk8QJwhMvo10mev8CsVRQot/DgotBY5cGFtIyJs7iqQjUOPW+RYRukld9u0EGS+5rR2+5s0HnvydTH7VZ+J033bZZLyj7fXsE1WXdu/FsmCj+CBdFolDbo6H+mVOcY+7Au5ZUraPsEZ0t7twr08YVlCO+5Uvl840I9MDoGeXLJ3xDn+rrJwdyRhThNumNYUZoMjtHNBimGUxBlWaoVXoahfnyase/icxkUY2enAmosBrCkpbOj2HAize8WnnX7Z5UMJkoNbA2BAcah8DPex/kQGaTfQuvfKvXv3PaFa3oFUmq9IfFZJeJbpYRtTlwEQ11tbuIcxUS5co1LEcyREkFSCLBhyU/ddBrR129JI1esypZZeehuOOO2LFHVlklq71UxBtLLqdqzATTTV727RVqbXYPGzDZyxO8xbfSo8sT2nnrngMtU7zHzf+xyDs/cOVh95NxZ2fp0MT3p4Hb4iXfUilgT8+COXBoUSNWKoHC3horYCgvrVQo34xTk57uYArWydgr8yD1MgaiCHZHxwNbZrXzhzZd4YkjfKRQM7MvvHW3yj663mvvV1vvlApQwDzdKIKVsqGxRpPBv0wMGUyrX5QmagSjUdGxrtrh3Xunl0AbICkEGxdEt6CpW4wlDNtDn4Ue9S2N1LdPrE6bWcZfj1Q25tEpyisExCv0Q+NAt6W6eH0PNU3BJNrjf9/Kwr/1y6x/3Zo9769V4Fl6N2qa2no1nqCzuyTnhNYMvF/YsVcL9uCRWLA90vmFxlE7Mk1AfQURrq5vLFoJww83l8uzt+5/evjm9eHv2UfwMwb84+UykVHqN+N/CVXthqlee+G5AeTPzQmEZW2vEh0LzZe/V71BObnHB2Wam6y84t5tpfDPae6abfB1r2bj5XXtl2cnJs/pyfat18ffxzUvSXgMr18Bm+3CFFVgPUW9BxtMitVukdovUfs5IbUzRXQnSvg9iP+gRBwj/MSiUNOt31o+1UBMobrC+pBXk9v5Eje6Axx0GgFwY15C0EY3OCQY39OcDXr8zuKU7CiuQl1tR+cGDgPyoKw6Ilb3c9wP/Hl9GjJtWr27TyiuUsVD7cV/5Cu/SVXH9DWjDhRAjtAfz3JQyG4yhKNm+3hVsQrzJyaBDa6rYf3r8+ibHE22n3RBeUrsq8bz8mOIDhefEH5lzPV+U7bn5As9NZc9po3Hjd+f4R7AlXHujsGGF9n+rBuLA5z4t1COf+7RykQJZ3920xXf1vV6lC2r46hZh56DWxarA88Be8fbfEXfB32MWzg2yx+KF4e/tp7F2K+FrgP0e7NPyFkeFg+3bt7nyO/pH9IXa8GBdQK83Hs+pUMzWkcHo6Fb8sTshqO4kQPc0vJ2rRsYJPIMyt1ED/qsFkm8JHw8kNKcEXeQ27GHD80248YuaJxZx4964DQYeJBtttC3IBg3PdHAOgg3ZtAKN5XTcQYbjzRwIeMPZ72TfJnN02yzR+09sjLPatoeTrUhjqyetbbXl4VquIve0wwz3NtpF2FaXnQBTrO+rWYwwx2/d7n6wz9QOPWYHwpi8P8mVDO9Q5RF0IgD03JU2BkeRc3USH8amEVzs0z3h3rfpvlL1fVfxWq1aHzUJhdP3bxBKvvORp48aZ7v9wVQFnk3c+9UnEz4DknFvsPmN6Bl/INz/VtawugT1OYSnNj6kcGwzVTSc1o1SqAZ2y0xOPicigUZnErQ9SBOXN5zk4wWW6W4KRv/vxec3o/IPn//0/R9fLZfq2wPvnt3GjcP8cJy4PUjUPFMllmGr/qXI5/OmP0C172uwdSJfUK0jMnXU57FSVOYNRUXwbzMHZeF+WNuYTZ+zY3CMwwNmGz/4GIrRCzJ3G7jXl3PU3LjkHJq0eTESXMjATQd/wyfJ50uViwZy9+/wDRc9Om12RY0ZT4kywtoT1v0Nh+HHYsRWDsQiNpT+42eqHf2FS8ijrYIzSwHMjA9zUXf875jdfp8Ilme93yV0deG7XEuWbywTwQRw3ei9znXCYGRKbvPU2jTRZhZ86/Te/lpr8/PgDgJOyy3hDy6dzI8oMrQoIL3b7doO4S9pefWLKgyVQNwqbxZi1itHEgb+th9RGMHacXGiCP3KYVE0bvsBfcNhPIoN7jgkDv2tHIyVQXVZu25InLMLEmnH8diEXZRZjaMSP4I/HbL5FIetfZKvsoCQe41ZQSTU0WHZ+FXIjcX8IL4gAppHSOCgdI6+C0zEwKFOi3wB/okBhPvuPNn2O24dI7or7kucNojhxjIXOCAaMa2oGC0bVj18AJNh7USsoKWvHW2N/Qkq9uWmIENqFUMF/y7MOJ8TuRoIUQZiQmibszXROkGVjQYrzhBSbt3UhYIILJks4pQWA+KVDugzSLFyhJrhf0Aj9DOe70mqQMZDgOi/+cP+wsQhUAzIzPOCqfGaK7Osgh3spsT2wmG4t9eAEd6rokvnyldNcSPuibdQqsRBCWZyjlS3FC8bi3E+G1muwnwiog/G4hHAqIRlyuSYQpy+H0i0aDi/9c1kbXslrxXUnMmUhAwN7UEOVHmMrTEyYMF5vtiLeYWawTPzgRrZZdH5dTpzghtYHWAvBQ3UOXACUxBPIZyyvPaJx/LMyddtrs7sfA0MSW/SRTZXYJywcVDRzE4jBmI9Im1WRQM06tRLJjIqPx4ez4s8WYzL7liWMsunx2OuqpzqaZcmdwTFYdIS0HRzyrzr9DUa9R3RsCAAtuASRjdqdAWFuzlsH1cHsvZ+r6/7mkfGKwMP5ovplY3nOxzAOJ/TZYmT9YM8/xjrRxqPWq1f1iw0Zju6dVzL1VfUM2gMpLq05KGDEH6zVpC7VxxWZtM5YkBNU2fV/aewnYPZ1pdhp4pcll/cDIo8y+DrX3sLQdpwI36yzzp7e+D5N3c1vD3bZTM06Z6dY7HhdwvQOluCCO/YptR8UGCnugVNq1ohbx/7+uhQGO8tkGb8hJiVhtwgeEKtdWWc8iNV4YJkHAMPreemiKSjA5TsZjEeK2MmC2AWS/VUGXA3bMyd4P4+VoYQzsPOTdGvTSfdEX7sb/06bpZGnfJjMfL8LY5YuDgIsx3uYBgu4WHdeIAcJEul9z3C4GznHaaMseg3YDeJUTjkjmA0nVNEMBHcY41BxdUnBPdAYOixnuGJ94QyFzMldaqnfBhouejCIMdk1BR0dLz/BZwjppSz+V5eS3pzW7JDNN51jg6Zv6O5M5kYVYrDtKd64ueLN0e9qMxWoayNYF29ZDcR8cmNBHN1DFhzNnhT4idOgd2ugBWYgTErKWdOlmWRjhalpfVBO6455zL2CL46eXXSffmqe/Kni5f/+vrkT69//7v/wxkqlYIuW8Juw7uDe7KB0jnFPZPF0tMTCd9nT/xCBqlza/rnrc9NL2aqSMcdy0LT8UmTpid+QFnh30v5SgI+K5CIeLG6FcbKn+zwoEUrV5VAVtpY6QMmdgC6Wo/KXYXFXXWrrW3IWnStiNC13Q3oWmIV5APMcElmgqJLhBZqNi+Xwb49RUzuNoFAwowODADi4MLCgEH/ns36CLQ1wUw/8CviB5uDzcA8f9tZ6WnPZ7O0JN86W9B1rKe/74R+yR29kRSChXsgm+PrsJEf+FnB9yYOo2/59lvi4Aje3RqNWfFFbWN63o3v/e5xzP/wQREbnV57l6gGQe+oQPkGG2rmZQXeQ1d8BZUTHV1CawerdlaCio+BwRrddcPFryxctBRVSVuVrChxQxRSwxUvYtpYu7ZVFK1t1HNk1/AL98AAWAd1NARCvg9LjSF7nYdx2BlHfmHAwYP/4Bi9/pSJ5kLMMTKeKP+Ub99UzIuGXN7OwR+uJtNy+qseXY9/t/j1U3bw8eOtyHfvmnf3AmmAyLPJcaNSFTMIHUUOTk+dF60le/w3w+PXjY1x8E5EBrCvdfcsHIA74bWMCXBMeX7t1JOmkB81NWJI3Q03e6eqvDTVcdZKzLhh1T7FCjfM/X6YK5fTSTQHKzx5bktboyaq/H011u9hlvieT+zDwgrdB//EQIXN47pfR9feIjSSnA5sWAmePkE45Ao92jyDW37uq1GSE7f82+MlmwUCiIp56p3Lq0Rxls7S8Iv2dx8H5H55chLI0JehD3O2oua6z6tiSvtcTFQ5vuoB9Z+7U746iQouvjqhS4HJ9ybKfUNv17LN8GfO9LUrws4btnzm+RyKDNA1E766/5+9N1uO40jWBl8lDD1mJPsvFEFK6j7NtjNmIAhKaHFBA6D6tERaIaoyqiqFrMzqXAAWp2U2L3Duxmyuf5uLsf967ua257zIPMmYL7FkZuRSCyRKU33BhrJi9YjwcPdw9+8a0gOOaDjXrLumKi/SGOK/dLphzkumUS63SU/tWS1cxGW0ak73om7DpMii1WiSRBGqFVtG1p+bJsWJbrIpzJ6ZvYxSJQPIDa3LuzmIK6GlrCmgxWEh05uRzEYInQFOyOAOZ1M/86MSsUACNqMUIQ1NUv4026SXBH1SVL6W6Y04zsS59MCb4o8ArcBavAMlCuyDYsNXeLshABlkuj6b6mwC9VkusD0qiRaRTaZ9z5G5zm+1tdVvfpgOku22xhJqMFppUuT5IFcYhZKqiQpv1dq3a/v2pcbFBTfeCkBH7bswHE5WElxGyk1Flltsj9/LkTtPcJHRWl7dyWBHdYxqeq1dg1ruvEGbVKKaNua1YItUTjx681jgfyNIdNC1yY909oI8UTmju4UL5MGtQwJ3TggatO1s3mAjjZHjBEwkx0mRbz7kzTm4ZdXAuYt8nqThJ2Top2laisoqWXqbhfN5ni+zZ48fB8kkG8JCJOl4OEkWj9FpGBjDYwUtH6YqWyZxprLffXn05FAW+RxOHz37HWIRV2Zgj9iPh1kuwzhSWXaYKjB8v5b4sJKk41G5jRG18WynI/qJgyxLllMrgDARvjx6UomrJBNpoHIZRpuzO6z9k/myWTNX+P9dAiHLgTxXV3ir7xHaOQlfvt43e5RMZJ6DQZ6toTvTTN5AUuRjatvnqnxWRmCC1y+TQRkTgxZ5cjgxg2fzErnSoAtuqqbwm83ThGmYeTZUJJlMihTZZ1DE8EIo5jITY8AyVR/nsoB3IEJeKHcGo0Gwb3ZoNskxeLT1wYyV+3jgiFM8HmNt3hl9HfnqWPfRQGd4sIWJq1uVCjMgcy1VJ9892wrppSU7Uhx8osVZDK7UPxYxNYrM/7qy4a796TRyFUXQtvEwdzYJ33T46G9W9SEB8GYDcd1A+mta0viQkn2BeFQbjFvkEW6LsG3jiIc9OxsXeUNn0FHVFX8jQbPJTf8qLRR5nYVT3yZv2uA4qBiya9GI/ddtn6RmbyC5lm6kOrw3Rrurjs3sTa7arStXeVnzKXTd5EpzLPNTl3P+NDh4Lic30zDaMBrW3k7tLovUh/N8t6unqs8/+IsAeEbGl6ftGfWUwHrOdNl20wFD++iWLZAik5sc2qMEnLHCxW4NdCfQrLgKPf4rZ1MNCTkt8iJVA+vuATm0TdiJHiaj8pUwFXHUeMNxU0uZ5d0NyYxqBvwgcavSe7iiLrjdpkil6gidJWFdieqXAmzu1+vqUINUBk6aIxtyk3jHGmbsTEqIleyU0FBGAyoab1PWuynvHUjI20E8vbAtiSa4p52jM5mrW2NHgV2cXv/48AGovM7tV8diYoedXWEysZv6SH0MM3xnpkG0+pheUB1xynUE8Rjfqb0G/e4aAn+5qGEwpWP2ILNhukZK5KEFVhsm5FPDnBqA0NyGaZuhEnk9aKhvYNsQUZXNBJUB93Q0ty/47vN7dyRslaGXeGyZ65SPd/MClvzz+T727G596Iz5CCFniyVZZBIxD7M8SYGFslMc+DMMdCq4JOVVKi+ttKs5dAWCy06XHe2mA/OakmXTOu+MiA4OQXyzbIk/KMcdlO40XXtbr3VD61+X47qdPtKiFg5St6KYYB8007d5H9mYHHRH9K4M2fp5YWy4ghNxmjkReLSO5HwWU/BLK8M6i4U/MsMbm+vqTRSKISgNYTcTqFLFGV89Xsalbz1K3c4TxqQvDfsEGGLew16DHhyUwzL3HpKfoYdkl3c3+nXfiyNdtyOlRNh6WM9UTmGpZTqZg2n+wGslBEbZxcnOoAwyQZ2r2Carb/JfWidtcX8PJpu/+IUzAqDLP9pzoPzDk39krsTlX19VEu/nJraZHMNYPGTGFmAGVR3+RdJoKpktyRjaGziZZQOV4iMLdGMubc5Tsa4/YlyPFXBkGFxGIoPLvMqsxEcBTgxtEim4skUVWl5acLOxzAjtjUWu9/FrJhS6nDOx+KkYME1X7D0Ar2Cgb2UilXdljNowLsU8uPmnV0mRVlSLhuj1DcwY3cJiI0ldt+LyL5chKAKbWVX6sZc+Mi621Dh6HmNt7Fdh7PHMv1dCYpe1gWwt4JX3/69MzKuQgqmjETKP48k8SU9cVuSjlus97vFd+eKJ33XlhfSnMAjkynDJJM7nwAIcSwxH3hDgJLBAHCRbEHIHVs1asQK5Yj2EGgwzMUOFjFkqclNkBWT/iSC4ujYMRswoDwBKPVTD2VB/H+H3USBX//4FxjKJ42UaRsh0yg1Q7JAYq1kYG4ilL47yOXlRQJ+ttmPXPeipS+JWvwps1pttYw1a85SRWae5SjE2O8SoYy4QxuKlGqcFxBbdYWgWhq5jS5nQXuymzEC8lquBOC5mBRjhQOZ6k9wqWEAy86+U3Bwe5O9Q2TdnaHXdKT+lWuWCplQSi6dHT5+0zZmLDODfL/DfryhNeQ9UOjhslfPbdlgr57nrJDu/NNqPXzht6wqYea5NYAzwqNOW/lBvCzPsdc9d91ztuIEgdVJAhIPrg1mjAD7UtU2Es2W4Xb7EOq3ZS8ooVyb7ey1xDLeOFs9iSWk1cPdTDvMkbR0apQXJ0ETIfzrDfKubqI70kiInjfOodAEJ2Cg5drKOYEZ/+pvy1qMItZbHaBGH/yjUGRVneZ2HSRGKDcnzMb2ATqrhDhTfWAmsvmsXTXm5EksPnoG7jao7pW4pc36lseBbIcWFm4Wkh1+4BGjF2beUhMsiuqEt6rGmhOu4FUNLV6HXp3gRxkxm5+K9Cn3uxdCKwI5xwCmFHhshHNP4sTB9m0QFi4cbR3rSFF2aW3rUfEdLyhCSEwbLmWg0Mc81ilrFlpEEKup0wYcGD0r3ZKAi0Zi2TifBwcZFXvflieWC8zovV/m8xG1XHLnN+Yec8WEWYRjJaGI2RtfCM8koN9feaPPrMNrcI+6ifcPJtm6dH3aydlRHA+boYKrpIbCDt4Mrl8sbdu3ENyOTZJHfdnRIAKXHu6WMemIRziyGh07c1XWkKd8lYStqhHj9X3iYsjDXv9eyc+m4m515EUxkoMqhvLUBJ7F54UFRKQIObiRsML2oRTiScVxgQlXzBxkt3DmccGfATlgtWTD4QbP4MOL3SrZSpylIzXXZSrxmDISywjOpypZdSnOjmGaQj5pa7p96sKkPT9IaDTg22i7FIRsZPB0E4QLehhN77Dec2AvbEKfu7Zycs/lH2r7mZQo9gM1fQlvMEf6q27pXMMdN4tSTmHnHKG1ybe8x1xPTjLjg3OKVlp2bumcKJVMfWjS3t2fR+prNL6Nw4QTAy1KmqX6DKuUn8gylwi5/gZyJJ3oEopw90fALNXJz7216452xu6SbmrKacao/WZ1Uo008wYZz9j38JuC3PgsfBKS2CvXtgHE91mx/96ip9Z60sav3TLhC35ncFypqpaeuNxmrDpR1gUHTc01dmPSJgCWpqeKQomWTirTQfsV3XdT1K7XhHvJcHeXUFRVe3siDzRNVnRM2s7AG/uGcTXuIatvd7sra/qlothqm+8Ao63VFlRsAm5bfa7jHjaX33ztspKa8LZdgzUmK2HFcztl0gPARteQxtWsW0TDaoxGhk0Kb9Da2ELjjqVATCdhtJZAiC+NZpErmAjNf3RCk7j5PkyarKBQfQW6rdISE2zxMRaXiFbQjnmM73hTT+Pv9LRCimPwsy1Om6jZrRV58S9MWLx10wFLA7sxoTqOdFrWn92BRWz+nAI32oojqiZEbzH9N+QXOtbnaJBnQYaYPwevWQtU+2oXlzwtO419XL131DsHNQRkKqUGEc2HLem0vZW3kH7yPIeAEDbmTuUxn7Bmg/XCtxdnav5YVomEW3W+SOwD3vUvSm+zZ+/jJUPz+93j8LxWHRfz+988A/DurBhS7gzKOECU/L3qqqh8SnvL7+Cn0RrkfX2qCQHf4wsDo4drTda4YKrt5Qjzjh/wgkeljCn4rRZSHy8hkpXj0Pv4COmfNGzo9YTLatwQV2IlJihCFO9zO0Lh0uLSAKQJlT8n5+dn7+FBc2d+fiSdfHfGs4Cd78p6Jo8M//Un8u/ifngyPjgbgG/3f4L+Ohv92BCV5pz0TqZqFSfzv7w+K7BCSax8+eX+AXtQqvg3TJIaYmn9/f8BpmsMkfn9g6xvn4Wfij19p6iLh8MQn+VzTCOpQtlS36L/+dxoRjOwPR8OjI/HQQxSYIxKFAqNwn/7xK96qwSOgD1rb+BHCJmWGxPkqp01jIeTtSZirMGVy00mAXRZx+NNSrsJ49j6Gk0CLQXnnKf85kS0buGQirGZ0PbeLDiLwLIGMkUMPB9/adj8CPjDysJRf2JDvDmsNq343E/S/iZT6cx9I9o8D+8eB/ePA/nFg/ziwfxzYPw7sHwf2jwP7x4H948Cv/3HAp1/sXwp+zS8FNa24ri373w9+U4bqn+sloUrVXTwqlEzfu3XxLFvVf27r9M79PX2UWs/5s+VxwDS8I+OS7eQzMy+Zga1pYNqM8pU+90amvZFpb2TaG5n2Rqa9kWlvZNobmfZGpr2RaW9k+g0amWpaxt7M9Gs3M1U05J8GBycgfkWXDoJ3E+7FBEuOEpN5qEmsA2iVZDpyUcFH4NUCE10sVBASCRm9Q2MRlERJ6Em8bcJFYBeZTKfuxBj7aQmGXNBoIyPhuf+9e2ihE6f1ZowhBjlgJyh3RBrNFjUVhViFWo0xyYlAf0T/nDFmLgWrTUiazHVpaTBd8nWZuqROopvQSG823qJJOrpNtsDtQLxxoS+xE8LReJuK7xIPjsfZVJDliBQ3HiRpaVMZRjAj9KMDYsCwQFMPs6zABBPUBSHfAymlhu0ABIKhOEniLAzAfpgZCAwJGYcyOVX5SizUZC7jMFtAL6ukEEFCmcs/LiFBt0n4aLFFElTY5zKeqaCEmqO56sbGsfJhqu0kz3mEs0ojcX+8YJuH77wyf+V1NkgQvWQmWkcAfmhJcKO1TV50P0wEbHxnmdir8g78EHmEBMSS5qSYh5mgSH1KaDU4gG1wr9P4DjvYeBY0vo5J6MXQe2udGUBFPl89FuNM9+CbQhk2Z/1FWHv43eNm6q877B5U75B6vOfDv90861cniXuI2w4qHOQkzvJUhnH+XZhEPztWydHhxAzg8FaPYB2sElt/ZOtviFPSMJq+OCVHv1mcksZdQjuortL3VlPgHa7RKNBWER6WVOCv+oEE1hTkMZ26Rj9svKF3jarUzFNnC7l+JAOyrN09vUGuP+GfasT0v7VOwzTLq2mPapluX0IpSm5U5WOnkEInC2/Jtd0mh6I8saDvS6eDTSxHr2RT32dxqW/GUMOe6bEEsTd0isnc3ggmN9r9PfQC605uVSpnW743Ois0aHoA9qy0d/1xk+3gFdffX8NN6H+1ver1YMuqLITAYMbLcogHrd5OH3NbaFajKJ8+Lz0/4w3Vaw85c8N5Z3l2QVpNkx7tQRfZmR5aRR7xRQNmFlET0qqGhjckkK2/PLjrChL5wdOjp08Pj54eHj25Ovrq2dHRs6Oj7xFGoAZwcg9zOvW4pnhmpD76Z6TioGE+X9TncxuqO/OA1TwXm7YeUjuihWlSLDC97a2Chprn9V2o7uhhy/MMn6dJlBlcJwCloilCkI9uXkxw7lkYc5I5QlfWye1LSScJoimepAridWQEaSwPx6tDyGaJzeA9UMqIizBObG3CPGwOfH2YP4D8hmkSz6IV4DQmi4WKET0BJHRQrouMBsU6szvusZrL2zBJh9Vnlg3RZ7WZzqOy8Y9oNMB5GQcNZBV5AuPcAn7Qc+CRDRRLX2Rx53t+PQt8lggUnlNGQ8kgom+ZxJg1kBOZBsmkWNgk0OUd/sfw09OVjL/78a/J8+/nq28Y9CMA/wey7fofae2DvC4qTnybFa1UDOpZwSaDXtSCYctw1OxPNQtvVVyy11VH/c3xq5dvX748qL5YtF+20IXzWoFMKRvRMDpQkoDLZOJCF20HScJ2S/MykGe6s2EpXWYYj/B5fXNsMJM58ywWr6kp70pwKCDRmQb3wIHWNhG+VACBqFFAWCjx0Ak+DGNKD5s9+rOQ7JLCLi8YQkrJbd8fFLHbxPuDyjo+efqBnjlGdsdtToPX8qO4cNrxJrWt5QJ2eibquBhuvHxjNU3gLkQkBYNa92c9cf+UYbY/2VT4u0aEOuZ2fYhQx7HQ3eopwNmLExEl8Yzyd5qdKI4nfF1AQYa7wUS10sJuQPdIlmtnPtd/9oE3arQ+2kPlYfTFyakyoNJjR+XYes9RfVeVV6IksCE3rmf0ZMqVstOnqsgQrNYcmXJifrzfmM9RBHYgVIi3NNqa8X0JrpulSifAk2dKw1CT35ljxi4xQHHCywMiDOItoBJGtmzp7GIBBBtwWLjJKDtX5UNefg3By5/QCgW+ROjpYAJ+pkNgH1bmyR3uJDgRqVpIyFctb2WIj2mCAoMVuLCpGIaoM5xWOHBve8S5oVXprbnVfQBpaov3sD5o+njMDloB6dUXwBHp8a4zo58Mhf4K2AVN+gFyF+9dZbN/Hx35M6y/wrrtlxcqrog/pvLJfAigF8Yv8ulR6Znj6REJaFmyMcTaCdWuibj4GXeSzVjPT158upbJEgRGmx6AcEFpOPoyMoL/NE0WjH8a5qGM9NsS7stsntyNDGTJpi9dl3AqNFf2ZVW+q3FD4Al3gND6cLzSkjAbWlQcLJMw5qh+Ld3LEqt+xJCDNWFtM8/KdkFOpzZOzOBNPgN+rCtxoK2E5uohMCfDDtLzoKUF31aPLOJlBkk0zc1r71qelKg/01MuYs4Gu380Po0D7qDrpcJMvDQlZ1i1286ho6HttsAXfI/+ugAv9NSBCmjXtE+CzQw4ViNDkTXfGV+FMeY5txu7MWCjxLdjJegzHniZtbtYBMUyChkecprKAqDA8WZC55URPVmjww0mLxkVcSbzMJvKSZ6kJUCBC+rLI2DS2zRyUihi3OzdN/eK1rbtsDCiYJFs7AgFddtmAo2jdJTnEtLIJ10TqlUGIixW5SofapymJ4tov20sA6pLruhJwkp3nrCll27JWZSMZeSOUGQqvQWRk/FHyEyETTAKp5uPKFyoT0ms+C420Jgs6jIga4QAdCRIIEJfEj/ISaeg3DLJHUi6Jp6iPILMmqadWI3kFt5TB27b2DsbkqDRNISzHhkZ2hStdsCjpzlm1sbpMf99cXj0p8OnT3EVN2Dz/Tj8jlcQpO79+lXXbxtbv8PzDf91bxH/1WEvFV4ARG3ssv9riMhNfJkNlOZansxXtksvtrT52cXbtFFOWRkam8Al9c7K03A2g9efoR1S88XFbhVjAsAcBWoZKca7rfySJsul7wcwNt/iI3HdX8EztdUSzRs0ZpBtcb14f2GGuzHbQcDZjEqtlqpmmu6MAPCanyGgIIPICZLqe1mjrXEKhzMUW77csbetHmd9VzfvXbO/2TunItzUtvYa8rZf1F6LTxru8SDreaf15/59x74Zh3dH3oeXt4/bja5pckz4q3V1brMNYCZajUxmRlmx6X5wAiA6XjSYzzdE8YWBfqzSBeF6Cjiqz3Rfnf6XN/PVF/Hdp5v84+0fkQI6BnITofFNHQKTqQJPjqUj6ZCEYMUZ9Qc9bsuXILzYIYfMFNgEyFQa013HGOVQB/CxoaUphNUPiPtyGb63PdDm5UFAv1xdAr55ub727vP0WRq9HbkpZNrA55waBSglIVpcoEM9UDAP6IrGU8F0NRTHuYgg26JIYnqfha6ugSPa8Wi2rAdV3QDAggSuGyx+t/NAg9/AlUk5yQZaPoG8tx9klmHrfZlUFqAysCdPh0dHBzqQaosoWJxh56lBwuOjIG8SZ5nLm0RTEgskRc5kH5hmHrStOYYrPG5psdacb/+OTbcdO2s3m6TKJba5Q/1GF4fzlhii2ZK1q9Z/jZpb9i3slCkXarpjXYuK3VpNwff9N1/N2tKuabeE6h+WQvUfd4Tqf3ZB9/oC3uL4apGq+whf66LXVjhlRzy+EqdJCmCBdA6csV3j3K9N6FX5p1QJvYG7r09fG1tnB+iiQcPIfzm66BqHusYhwD5uqwYcx+Ls8q348umTP9rrhKoPxWvmYei8A+xX1vJDmzoUGQO+FiqvDv3d5YtfynhmnhVRFKFCJXniji8VXc1xCVpQl30MbrobnCa0N5JFnowwNMhZF/2MY6f1N+j7uMgTcYZlqzP821zFAhEpBbR4iC1m7tS0OKz/M0D9kaGH3Y/oO5sEcvWALReQSVymUajSQamwvv44sIme72GL4xsYjshESSGvhLTbNjCJ6vM2FgsJKRlEqsBjDVYFWy0/62FrpZc9vvQc0uMXV7Tf6L3DEt55A/EEO/t1Jjor//aHoyeGgOgLkMvFcgCOrSpdpmAvaDV8ncGbtl6QTOVG6JFYaCCu3Sle61KAEx8GcTib53rJJ/MkU3G3qa3S4ETGIJWPAWIZ061j5B6DD3M70yIvUjIzxCrH+Mh2xxjnwfeoVZ9RubjC1rxKDUwUfnVf+/FMFryJk2n5XL8o7O6eyGii32SdXOKuTwPsPrDTYJ2BCNSSvc25qJzgazhwNvarUIHtXHeACVhUPk/Ae8U6qTw4ekC+OI7Lhomn1IMAu2GBpxZPwoCS3qNzhm3oi6MH3kZKzo9fHBGQeJ5ATvQKWSh2EDeOdZHhwMI7SV4Y8KvUph49yQrzPkIXt2Lt81Y5ai5vX/uAtvqdNR9Ww6krMzRiXvlyQGoNyrvN6KkNO+vaHA5+8ffYQr5ybCEbvN01CuXrP9ztPLdCE8FLrj7e+xg90+CKnCQRQ1BsHuIL1+eJbaclIlt7LJdENbr/izxZyDycyAhgk/Mc3qdRuEM0AwzTBYl/KVfgy8rHfwBHSsYru4W0blG+UsN4rtIwr4lPFRJo6X8D54XSg7yV9kq3ZWn/1bQ/n3pndD/IQLP+68GWbwaf4wsBpdBSHydKBWT/T7Lc/e8MbhT74d5fASh1xBYqEWVpatKDqHk8vqmc3HA8z5S94zEvBYebbOw3i9mNvuNGvOnU3MRnVt9CQmSkafmPn5bkzVJzYw+MJ5PbNM7IzXHR9AJWpW3/ly43iY5/Kxu4GzQ3AFAKVMEgCD3h8WpI4Dn4ajoxPo+lnciFf4YYhjUfkcz5w5yHcYIOkSgyD8UFMzGcTvkg6cmD9nwHKkhpoYziaVLh/fz5mMpZmPzua7ii2SRZatwkHGxmI50CUh6IQgqYF6tdlxruyIJKjVdCJ68ZCDY8YiCNzWND5k9uOXuMoUeB0nHoSZrVdxK9BTVQHr3v6ruMuimvCC3HVk+DLtPHgrU7q+FaMteWG+K+v77211fl+toz+z2z3zP7nTH7geWfI3CCScOg+syzHkt9y400KL29fIrEWzOSGsCkSg/pxJlxCzPuoTgFvVX/NzzZYLImDTQ3SRZj9uwF5lemB7NtjHSJwoyjXstcflpE6FnPCYVdedUpSrYKmVMHQ3GsU0M7ZbCHLIwggwk1xIWRA2XWwBjb6VTjX21z9V3SdgTv+YLvuMDNRW8yELU+SO5zgO/8OZLTDO04uJCzLnlCCysPG3PKoIbJafCpDcZzzeSEON6MzepopKedXHrrkBnnaqLrRIY7n8u5DDeaCYxlzZlAFcrMjk83u57JGT0I9ZsLhhvTOHgSrhaOEb0gIaQShYkkJu/fa6pxLR4CEql9VYwBwTaGh5NwirmaciSVGj7CQJrJXIEzf0Avbrue96Vunh7pehAArYsiSOVUH21n5eh5bAo2v/oyAmM13VGGPyJJk8m0NQqxyBPHMKo3xghyGd7T9hAvse0eNKJBmCdBzybh1D60UyrF19wgq3hyT7O+XMWTTSYNQ2qdM1wA2lvBJJLVL9cp1sdDz7ZqcHa/qkRDy+gOHojGSkeKT22kbcaxu+AKeKabZyaIJu57otc5G9BbSaat7KX50aOLY7gHly0aZBOH4dfCBShUqYKQV91caaboQHV/U72k5reZq2eC5FPcNU13T0BYJ8oo+MZRZGpaUJR8oCK5UsFhnOQg2zKOinnp4LykmXgYhTfgNxnfEOOeAsg2v2Ca8iBEYKLYL+h5EjwkEn5LJs+zUVC05vTgjEkvPP4QVzoJGOJ3x9Y5UsuVNisqYFCbGCr9bgoSEPNeaoTFXC3GlwqzT79u5Bq9Ma+rT9CVF79/0z6Wu8HJaMj0ydH+zuJr0RK44Nt07M8k9BVmEvrjs6Mnz7548t8wn9C9+hChTyRFSGTXDV5BmtydQYxcDjKjg5B9sNnD9BZvyn+rXtZ6y9Obvs5dYB0SMA1FWBMNQPBfqZw2cPip7uulF+uLI1wsWCZnsfrA7uh3v2Uw3djJlwd8Hkz9iGshsIFEBMldHCWSNIvzFy+t40LpVF1ze7UcVzorJ+SMzst5OXkWj9N33wTzxezLr27//uVXL/7j8T9Oj1Xxd3Uul/OvXwcvxweuYxAHF/Tw+3+jwxAq+7n0FDxTMZhPnAzPHI+QJ2KuoiUbFomxTJJ4AkD1+o4dmtABqpTpxCbLVE3DjyIrIElGJq4vXr59/revr3ELZUorYhkouzHmC4D0ceycYq1tKq0S8y9/P335zbeHR0dHR08o8tNRoPu/+7tqt3PefE65wBPbiH2FBVqc26c58uWVTeYFtDTZvIhiqE1wlGAzx9W+lDoYCy8pOTFpffoFS3Mrz6mRK9tGW3pjfWdwLXHldu3LFVuHG0Ix/4CU0AOSWfG/bzlVOWgTroXEppPVW59ugLZOStsBukphd0EIdKxGyXR64GEAl9QqJqoI0VAwkkGQqizrv6GOuUIj0NDuW50nmZMSeVSkG+fb/QZbMkf5XVrfz8fi3cUrG4OuXXSncuJ6RoJRV0Ysk0EF9XEZpioTf2BXLjoMueauoPlr9oPG3i9q5Ww0iLl4/t//9X8jg7O6VeDxJsBxiR48dumaakSxtFDVS87EV5RYqcmU77gYklEKjYUiAd+cuzAjWVFF4SwEcAw92l2L56fcgbhKeiv2NSsNnsrrJv2j5v2nS+jJlVT8gaUAwgxwWba2YVCUdQK+1rT3OO+WyT5Ws5BMMZirKbcGiXJAQS4/1t7h+jDKK/nxrOF22LnH98tUqUNYZ5Grj/pRNHSzP1V8PkEg0WZPUHUrR9FBido0df9lsVjIdNWe+745df+xeSAoJfD3RdaFNlu91lxZzes/btZJj6ley6C18nqse2geuBaD9WC6Br+BH+Lp+cXpyfHV6YuR9odUtypawz2xrAZbCCLgRlN5m6R0mrXUcc1+2s4Xmm4lGBG0UMipbTweQx2cmtkDrLNAGbd83RIa+Afi+k0SO2Fnprgf9cmMaG0X0grJGvPkmA52i5Z1X9hYu0XCui/cq514/7asmuPq6xO2x6mSN6Cq4YGlh+iwbGOiXGTFuFOkv9RlmqV6zlgJYr2V5IEPWyE/VZ0CfTXWYy0jSmssB4zU2tk9kQXt5pOqRp6NlnKFSF5xctcqVZ1l4pyKijfJXX1cHmEKZA7MwhbGhwxIynkcp0oRVRGJiVqFAXQiqtlnTPt+Z1+/3Pcj7+NK/SGi/rJQM7r7DMteE2zJTFgFYnNQz7TdyDEDMe6ba/2oGQYGVSVI7+V29dGocDV1y6MX1XUarz5SF8gbxN66lMayVUV68QgGpdSl9u7YDLNtUM5Ek1lGUHE0r5yI2ru+ixhE4tHzKJnc7J/vP0MIbz4Obfk72OqBahvCw4W392CYPdVN28SHoD+v7qEnbNd0s1QpIneM0B9qLLNwzeh1R6xWKYKgCEjNLp5jU73MQ+SwjtldMWJtxCfdbxHS55bTjY6cNdwEu0XLMmecvdRZb8f3bmuPOxepxoDZ6gRLwB96WLhKmJZ5shwVSwK3XIT5QjF7Q5jwDzUNDXmQtndVecQ3yR0n5abCOCB8teMb6pm4tp1fi4flJMcPIEUpXF94UqkJW/zRAJ6XYLBQMbYavH6EOrQuanmyPCyWUMPOqtadsL+hleCwWIoU7mv0t7yTKQLo0DgeoW3pmsiCLXHULg8zUgEk7Tb4DAN2MrQz0U40GFOMNi1IIQChUWjRIFo9crXtTTCZnYuiFZ65BR3PdktrWVtEzNTrTpCwMHMZJTPKHRLyUy21RPQcijc64zi2SG88usnbUMJ9YPt2CeHszE0IcWKr9yNE4yYpk6OyV4Aq7ZPEDMfSs+26U65XYXs1s6pdJmWG7+fLjpzWxAQt0/JzlxpjINnER80S4zBPsIhYDIYCBSK1OSNgC9Gvs2W557h0Gip5hdcEeieIhREsIHh7tmojxwTHcKHLGnPgCAm97vnEqqe2ple7vvcLw0Um3yKwgKHKBcQ9cMJmJ21So8jUkhrp7IVxMXAZSuXkOYwFWVGgUszZbVKIWz7yICNVvgeapNWbqvvDt+R2qv6zcOxesv2YLXo8IwaPpMkOBSRjiYOsMilzjN7HmUpDeiEHsy5bLYxFkYl4SAm+8jwNx4X74gzdkcuUNm74+eb2ODjlxd2Cwx5UXmy32L7uE27ThiyNFElqRztWgLAAukwvzAz/Pjlxxa7+d9EdJLZoElsYQK4iiA3fx+ekjJGtBB0rrz3cnfCnHcmpujNI9n+FMs9pnKervVL6GSqlJJOOyEPC5/VRx1CiJRWXXEW7f2BqzTxdjbp1MNo1lBCW1TB34+NuEVYJ28azSQNwjnpo35carNNVw0lJ7FH7lLikU7eWsrBWx9q015VOduMV91PlrGyKo2ubqCianZ7VKJiqgCRDs4W6wi9L/Ihk2foGwkDLdWXmhvNQ2dslq2lti9V2jdkKZcOra5B1l6FCwhJR/PdDndeWebGG3b5gQOY6K+61Wq4Ub58V1n6Fcc9ngxhqcMK71k+TyIvP3UIAQx9LNKbENtAZlRbbHrM/SxQND0U8hKrExLavONs6ykTpeKVWG1Sy6hLBsq9Tt+MktVeGGKt1y5P9L1drVTwG7M0aWbzGiR9Yn+armvihFnA+PHzMyByHLPo/Bg27SCdzmalHfbTubhQuh2VVILh4EmvNcuDl+JusJlCLd9da249NJnR2GOFkg50IjKqje++RYe/FnluQSrO9Jm8GWm/eij+ZYw/eNjtS7dBviHOiWrWD0FU+A0f/XyAK80o7uJUSU7iQIDawksdJqbJMUHHV86qH27bjRtXkug3jKuLwH/CIHoBGMgVAecyX4DhXDQ92nyJeP9ab1WHXv/J+QVc1g3XCCTDuOylqVnCPWsmv7F+L59QNJP3CgVB66UIovQUIJWEglM6JUYs6hFLzbBjrqUcWk1SBbQfE0+DHIsurz2AkQO/Ml2WZhklK6rOGVkJPC17ywwj8qhw3Fwh4Yi8XSoqwrYt89bWlb++snMuPw221UfegbhFS4p5gX1gJeVFj1gTw29TG0sp+LbsrjGgzNAAnru1NJi50c/VzpVcfbJhU2Npk+Yjx2CpeqMODjfz27EW2lteeb+COE1aZGVRBj0ppeH+oe8ONnCO35ntVZSJ9Hqs0XDKTu2PsG/rY1dHxNnOzO44ivWUdkKm6L2xNhOiDSFxSul2nLc8dWkn3z45CqYbSY+HWcd6pekAd1E9887Fr2yEtGSe1iNamBkCBDw8fm+jnxzSqQ7zFH9m7tgSRzLTF+9ckInABxt7HGPYCCV3T0gn1bNO6Xl1C6W25oxwQ3g/1Uyr0HWWLjVy36CbDmwXuFS5P0JSnWfaIrT3mkr2u/36XNmM9g98avdSUm9yQ49FAs6sEnwHXSgHEVSG84zztZZSpQjD7FqdGbO+2dhenc1LraykOqFBTKdRne7EWbKl1FvVF8PDMe9G1zONG7yk3YiVpaSJJUzSmBW5kloOZswvBke+r6m0wEJSUC+Nw4pUDMOiPfXRi5rvP9HoDsTJl74G4QF6bOJE1gny5GovuxIhaW8tOeoNuLUNZIllpysH11nF4JfilsigFvru0Imvkl5Qf7WtLw7iv5EcWX/0jz+VH3gmu/FeHi9rexaGC/uQVfipnDcGLwJgwMjiaO7ViEH7fFVgrzkwH3tfoWkKNCq6pQT50NfrybCCXHs4FD/rO5wJ4fjiT049tMwHQvm3m0fvWKEmR5q3IwZ1yd3yLU0lV+G45vRtdlptIbT6crPsV3/xxcf1lMZ035TMXDEdhJb1uk6tElc1VBTpxFnTLdBQ7v4lg1zDy1s3rl/u6gEm1umaUpZ5WSaOMdnuc2cuLEvQGYQ2mqY689TNhFxqNreFy+OVxy92BPSjzzc3Qyx2IwkrsuAM6GGY23WgdVdPBsHJwrDU8t6Uc2t11eLQbYu56BvnMKQ0Itr9i8PL+y9gLwvzeF1HTbDdLqOe0KXp5K5f1cbAGpEk/UywxTB1Tv9Flv/WrUunua6rnvFb0s+//cslS3X2+acJU/9veelnGmoSv6rvNL/0k1tMeWze7WhMri8SuoVb7FMAAvQfCSSRhP16F8SbHoF03O7HT3ci31wysNNTdeCGhUfjX6H5EJACKFAsEibtVmH9bBdZb/gRB5ep0cpNr+1Z2EcavVDzL5yV0LxdgwK8H3oI/tEEZwFvJoAwQFIIO1F8uoxVag8xYcS5YtBKs1bTtcDiiIzTA8fNfYkyZcT7GruihUtOvZ8eW4F29Q8CDxMSoZhRykiYZRl3QCHDaGFTULf1iIGe39c2iiE0Rc3MyJ3iEpMgzyMXOp9KZ7FZp1UubybOETRQuT/uDj75NG7o6+RMGTyQSo/+FXaMZNVLaCoQaMXwfv49ROIGa8QxCOAgYjZZG79mVkCYfPTito7GSlTUxTvI57C1K7f8+ht+c3p0NPhQv9XrQkXiYgBcDeanTF3R3fwSICxYDMHsfU6beFHzUePGoOO4vQItjp3jjNIUohGYMXGzYwS0aXgfQz63b1diuMRPcXWv3xoTmRCO6iwb0wF4FX2IfD7NchnGksuwwlgv2kVuu8nkpgm01IpM9w3Q4A0dHrdYhjiaGV7Z7K+xyb3rGoQlAgsk+7uMXjvvo9+zlgIZrw82mAqVBDNcmJ1IPCLVj69YvNPyHab3pDKL8hitL/6WHwNocfUQlEpMvM9TdxHEbxP8MdGNxGVZvEc5S5ooHBleni8cQmhSWxaDajyow/4VnNQtz/XsNPEdL+zuLCJnIQMXtyQEgyyW3sUjifB6tyFyd5irFvzO1CEcyxvwAgwPzB6n/pTuRO3PSVwJ7a+s8jEecvgc9NEYyTZVM3UafU0sCWLLb8mQ1idRo4jKuLr7ITZ1AzRLHs76PLS33c+tp68MT+AuzwYwwBMq1Xj9QkaC+WPHwdBCEC4CmSuyx33BiL2xDuFd7TM7Z/KNtH0pfYnInOiXm0VSjbS7B2X2Egoq3/d6Im+fQkEC/zY0CuZKYeccobTLr9ZjriWlGXHC2lUrLjiDQ09vM1IcWWQrwLlrIfgutkSC5WlxG4WLL3BWtCSt+qrHLXwDS7ESPQJTBzRxf6aqauk1a8ZLyWona709WDtLnu8TLE3aMeV3Lx7jDDIlt7e82Z6K/p91lUWxrf7d5FT09dYVOWjWkpw4yqIVb8ut3Xcr0yYYlcaqa0I7liIoY0X73d93g9bu24YLy3CnlUM8Kk29kzsxLfSyymbc1MJZSxrpNstT1M11YX7ZqmedFdNNqqeu0gh240siI0AD720F94zEiyXfQmMdAughjckt2LYSmlviOxlDVLhDjMIcgmSi5g0RNSQFJOgGzFfPuo/cIeM+xfWPK0IZbIv8RFT00als6Z1k2sjeNi+jG1eb70LmOEByqdIS0GiGtWt8zgK6vkK7PEwpYqeh2FcIfVDBpd2QK/to1ld3q/bMDGyf+pkMhjFORBcbcEh6ySupB1bTZ117pWdjuHQRQYvr0kPVDmQh1Xwe7ttbBdv1s7XQwuE0tdBue41Lfe6vc3iq3t8rtrXJ7q9zeKre3yu2tcnur3N4qt7fK/Zatcq7GsbfH/WbscVZzRr26kkC47lDoSA2Vq9WxejlCla6AeaLb5MCArGggf5YifrQyCraObn9Bu+LljkskqGVJNvCRHvPBXrn9pZVbw1QMBssO9FYDGOpRLl135SJT6WGgpmEMCJQvHDObbkAvyoD9O+dpUszmSUHAg9kqo0BMykAfysw2occwFO8w7sAgpOWJTp8EnnYWD3tFoPRhhkR1MiyFsVglRcq9bResPYUk86WIbX04YC0WMmz1tT/FAvWYkFsZQU44PRVsZ8DoiyZaw8U/z4YC8Z4hID1Pw9kM0Hs10h0TGYB8+ctM5upOrvgkYPP1aBAItfZCYgJoe7jkOGsdYNJuWuYy9Znq6qUMWDpM+ez4jVMCTsRYZmpggIjfHxwvVBpO5ONXSTY6jmcqUtn7AzZnvD9wjziuOGMSO3ExEKwCvCFTGn1+ImP4QLDsMcCyE36pWQ2d54yMHIxgxKEx25w2jWF4zk11hcm5xyqMabPzeeVRZSJLIswybml2mafhUkfVhJldbpoWMCb0/sXcTDrfpw4sMh3wQQWsCJ3VrUqJ9qgRfZH9owgnN+MkudEwVACljeleYZgjGov9b4t3Fqs8K0KUKmSwUnF7tq4qbRvxYXuTwyV3hRp0FGETAdlUlqOZe8AJHeKYUMjo3YoAGcf4A8pgFnIWzvKdGsvlcoeJ+35tuMj1lNA17vLc5P/15CS0kXAkmOYaooapHKYmuHNYNWFslDTMMW/cA0RtFcmuFS4D0JBPbFkUDkDMGQGDHTFrVwGAtHmnq5tsFxGgRfESWPaxblFcyY/m/hsFKgpvVbpqHSzehOKFLqqnCjdOIxRUn/EZSGjvFvnbXCHijznYdYElmydFFDTBQxNIKuIamzba4KSxPL0mViqwYK7BjOQS+CjAb4PwWkQRlJ+rFHLEYvgF3WScUI8lR8rAYuTuEdJ/w+h104o4pVaAxSMM8Tbg5OfYgheU/IVRwYfiAkFlaaaQZI9lqwWgkIH0EUM4WHyowZtoXIhCjuBQ0C1zYYdWBE25JBhdiHLRS8zVM5WBZpoNXOFSRncAYZ7ygKhlEEDP315eice3Tx7rZrLH/0sY/PSYaaQbA9FjEcY57KM0P4wQHKXcIcyQk+fQQIGLIhzlhqbnY9PM5Sqe9DA8pwpGhPaAzXq80A306EzLCRt2xTd5V0fV3aUFgEntzdYV2gdOzleKJi0ykAHgKj7TRhNKDiMxLDMBGFAjVmvRpypsoWpPsqgGwgPTyjxZ43LgCbymaj1hxOztx92boVL35rSQGBxjiDWIwjDieahSmU7mq+43c+rmG1PBNxjdHPBDkaqI9JZ5uPRw3aG+AJB/IoqoimFR/MJ134uAMOog/9Apt9Z0IVhEO8hGpIOpYMuAvkSVPcMWZeBuGARuJUQhk5MbgIRBn5OlzMNxGEHqqHHB2NslVgO4QzQrsiysj0vmNQRY2yNrnrlVzXyqjEesr5gge6HJWogGxzxosGHr8LzNckpNqKgKCr4LsHRzuRu7ZujyaAbHjpYF4ebjYkWBdKhRco73zNp7CEMQkjaudKIDJkhp12P04BknmzZ3CAFNZ1k4AwsK6xUzFauU4N+NkpyVxYsBbqMQNNtkmqtYBCoLU9x7eWKc4zL1Pl7IfDL3mUWyql0EMtdIiAmH+pydIlAxKBqAckVM8YUIY9I9UMtcJQUatpYyYy3pfXzt24nXxEWxP8D5tuMYikul3sc/WJvTC3EMpiCVfXj4GIOEs0MZB4dknM7MBXwoqdQjPG7TImXRzgxPyDEYmuYIjYnE4BriLklvdIZyXhe9i5h+lHuu2Yo0cE1PC7kiCiMJPNcDa+UiCm/U+1ir5O84n8a15yRem/1V+/VagDJtjWHqIxg6M2JNbG3EWTk7WUZZwtkVjCXkobG7ZLmMA0Cv+sFvgfnwcJ7ny+zZ48d3d3fDUMZymKSzx1DuEApmjx4NKNP6+7iHDQZXXPygrUQCjP9R+AnXDJY8A6ttKKPssa5Ba/w+dhc3icWdyWJuhryEfB0qp40QIdpMHdqQqcKK5JUF0q5buNfOZXBsU7zbC8PB6q4mpZjMvpdfXP7HJDu/+m518uXfMRfFz5q0v3187UkzWoCg6jkpq0BQ3hh4nSOG7OsVI+uDzKjzJu85/O6Mf+BJimM1/vLcvvhiyPNoBKSqm3DLgFTehJ7q7mcZ/tOnevhbpcIqDZX9ZbUplAfTsj+ePDGDqJoo6ujHlNcEweONYY8U4HJe5mWa4AU4Mrn0U3WrUuSBtR9AfCLRAS4v6tFNgGIzprlfKfnJweAAwt01izWt2qdaxrEeHGQLGUV63KOJTNMVIlS6MqcxvOwY/6vtDcb5xSRsQs6jYZLNAwlvPUvprLqYDe3i8uoVWwOlCCs0+151uQpaUBcXX8YDpeCs6xrWt2qymNoI1858vhZmmZx4ltaS2aTkcSfnkV89l1jrFbd1HpzWfhusS59lXpwWEjkUPEmyfFuaHc9mqYI3uABa66RTn+l5JkIjdYdOkE32Tts/3n9mj/c9ADBd1Mwy3vhOU/fqpilr4U9lLPOd9oTtmm58IOmb2ppVin4wAg6CeI5N/WQA19vEEpy5RU01l345Myfjpjbhtm/ozKpd0wgxLHKRTtfFIkdwtrUByX0Y823Ecn218mQ5wlC5iQulTIJHPQcZA9FfUh9VRvENqukV4GTM5sd37DNxbTu/Fg9lCaH5AVjSQFK2SERONqVHA3FNg4WKsWPv4+U7zOepyuYJqtTLw2IJNRwc5mp3JehsPxS01FN5hGbXayILtqRFMxomoaPadEyDGqaSQSuDjFD8CJJMp0LGZH1CWj1yUcs28Tf2Q6j3ND17QNVLgOK8iAwbbydYA5wP8yrQfJIOxRswWqNZFVrM8IrQTcI7PPoP6b5dQkxKUOprE8LBCO9HiC3w1VsnicYa6dl261uKHem0fKOUub6fORuG2swJLefycxef7FISVZpkmF3JrrXefoVia4UwDsm+cd9xytRaynS9g1BHW/PFIczDKEhVvPY69IAsPtFtd1GPp+aMxkM0SxofvZqi6qnpXThYnmNLre6V5cTo1HXJ7yt33tZW8AKlyPiP75Ll0uhxxM5tUiBhoGF9a5Re3/BXd46b+RHgerkT9GB+iAhM5cmUR2SGe/aC5Psg0IaxhnmW62V2njJKlQxWMF94kHEna5vybqXGnWJigQ5qu3aj/M/37q/by2zhHYXnwLgntOyuVJs8WvlTbyyYlh2PXxwMDo5P4Z9X8M9r+Oct/HMB/1zBP+/gn7/BP98fDA6eH8M/z+EfqPsc6j5/Cf98Df98A//8Bf6BVp5DK88v4Z+/HwwOTqDuCVQ7gXIn0OUJdHnyBv6BGidQ4+Q7+AdrQJcvoI8X38I/UOT0BP6Bb6fQ5Sk0fwojPYWRvjyDf6DcS2jqaxjp11D4a/jha+joa/jhG2jvG/wLqp3BqM6g3BmM6gzKnUHLZ9DyX84PBgffwq/fQpffwui/hbrfwvhewbReQfOvoNFXUOMVNPoK5vEafn0Nzb+GBl5DkddQ9zWUe/0f8A9M9Q20/AY6fwOjfwNdvoHm3wKFzqHuOfR7DkXOoe45VLuAwhcw0gvo8hJ6u4TCl9DeJYzqErq8hBldQr+XMKoraOoKFuoKvl3B+l5Bb++ggXdQ9x00+g76eAc/fAeNfgetfA9FvodRff+30hbl/dbDkCiDUZyizU2N8hQUFxmN8hD/WOg/Ev1HOpoUIZRWxegW7XqyGMlxzH9Q/Ttd+hP/MZb6j7H+IxiN6Y/pKJwW8MdsVGB4zXjOLY9/1D/p7sfpaBIvf+S/loBtOM70byv+YyJHY/7/WZaP5hkFB42WIKZN7N+Lsf07u6G//0GFg1EcTvG6HBVkydRjmmjaTBajOITBTWL9JRnFIeE66i+33E6gRlmO5sxklE7wUX8ySgsYjJpxYZWNJlhY5fpLMUqyjDueJvzHbKz/UPqPkCvMYu5vfjMag51kno6SEKY5L7hIGIzi5R1opWHE1cMY6AR/6L5AqIVmflyOcLA/Lkcp/z/tkBs1WmJzN3r0N3P9RzoaU5lPvMKRXvwoZGpGIXcU3fAfC6n/CPQf0AUMfWHKpDy7xcdROgXaLVajabqkP0Kk72I1ynAusR5YrOkGfyQKqsXL0RL9LeNPPHN4HsFCS8XLstTzWUajOIQ+liv+KdW7Mc14iGkxCuOY/rhZQuFMzyebcRfZbFQoKJPp1cpgtWIFYm2Wjqb07Zb3UK43XP4jF8/1rsrv9E+f+I9C91boWRfZSNEfetSFPouFrnWrRinS81bv4E+6nU/64H+io+x5VrjVSXaabnTOdtRx4eqL0Vj0qV3PbUs3a00ilB9RNAJXEVD/kjhaaffRgINEgjBbRnJFmAGOtEgep/w4T84mQaCsfKVkAAJUMjVl0XPgffy73/1OXBqHNxqCIJYLaazBXgpkyqj0P/mnlfgnfhb/FM7zlfjn+/ifh/p//yz9n/4IbRxHYxmHUvwTDD2wKNfCfsQhsDcGWxgIEENQ3ThI0pTqIrfHuvQxFm8uriqlZ0lEhRPTEX3r6iedwW8xVaarAmvz91DGmlrlagulp7YwPfLHzi6LMdW8szXhU1e9IstT8HjBuniFYV39ORbPwdsRXEe42sPjd+L4+ZtHDfXTav0r+ZG6fTudQnz2hZoqeKlW9XFQK3SjQiunBQiPMhbfHVeW5pNKxzL8UcbY7SczZfu9Y97P5VwuZAbV6eaE6vpjd91Uhtg13dFcFz6GtbE+l/EskoHK5lgB73uqYL4bErd2mo5lkNCIx3bE/LVryCqSaUGVV6Yyf7w6e1MtPAuLRc+1eK5ipgWKKdQwfGoe0kP9Wca5eBlm4Pz5Dh1ieFc9T6LwlnbD2Jw9/miODpfMYrTsBeIblX5Ss+SWzx3JWlTRW6aLZKn8FEbYEklb2BR+hEGcvDn/S0v55bRS/PxluXQRzSRveJL4sLz++o40qur4TpJA1ev3WaQivYE5v5RZgl1OzVq5v7Qs2Zti8a//kSYieNC1eCdyMU4CGhqJQ9CP+dpB9hO5UGmS4I4i2ZJr09e1Rzj1jjCWAY4PZWTqIJYBsrs3njIsP5cKfn159fiby6vK4J1KJGeX6pzb8g+fp2EeZnMIxikW41D6xkbieWMTr2Uc5sm4sWp201j1UmY34PSp7mTsq/6Pymz/6tT9a/Gv/zFWE1NtqcR3KoWdKa5J1Keq5nvbov3r/4aVFYFySvzr//zX/5Hw3tK9zMOIOjCXPn4CdnD2xpSho0+qCJeJVaZKLOMkiSC/H5VEXQVL8tdYvDmrLGoSz5LDb8M4m8uMagVmkvCbePji4tFOJplkuRQX4YR6Sc0szPcy8ztJE5n35gFOadKHsGn6GItzlWbo0tMwh7dnz/UoV0u+Svp0+klN5uJCLYtxFE56Vnqh4oVMb/qWTiCPA9DG7YY0TKjo/H5SvuhOJ4UMkhT7QT0U+6GPQJOLdyfl8rPVMsfSM700+CnsljdOI3Epo1vdHek32ID9wbf5TrM8iXsv8Wk+D5MlF8/NGPXXrjHqZt/FITFgq3mXun0bK3GZJ0txOU+W7iAoAj0+pAbQks/31UuZJkqcZZGMA9w7pMdDs+WfqlN6GcbwQ08CvEzRe61f4a9Vks6IWGRDgNL8kUpzsXQBYe+wqdB+QcXgI1LUsNRcFSqNi8VCpY9qVfuMJxynMsol7hAyZmBX5nPH+n2dKtV/8gXo3NhTrLkZf9sBJ/smgQRM8A9wG7DCQPv26/OL0mC+KeKZTPvSySlN9hxsmz+6KyKDf/1f2ad//fcFj+psovReCs2u5o/hxK44+AkhacgkhKVifemXhnIWB+B5zqXJpsTF6Xss3pz/7bxcJ1Vr7OizLJUKxUoyVGHr9M2ON5dRX+KZsmjcwtZyUtROkoDSc8E6lrWzv8glqVpoCYNK+AVu1pMkXaK7raH677/5r//8MYxRwfmv//z9o3oTabmJCzULsxxRq14mqQpnVulU2QP+OS1vxN9f/dd/pslNIb5NboqZDMVfwtnqv/4zm0sRJ0L/2DyEvDIG2DbtHZXb+lZ+kjdziIlAMfeT1urs97CXWvetilckKaMpEZvATxcQ1FIoiJ+eJynEhHXc0NTcKp2tPplhmWvK+d7BRF5J0jEjoz7hl85a+W3vW+pVqCbzXMVZrkhzJIMo9uX+BJvyXcVG4qvL/ZV/qneazwvZ/yp9VXxUi3FSpLOeFV7LSK6YE5BBForrr7F4eXHeVj6ke8WWP7t64y2YEUOyBS8vawPJ+87ytSzSMNdkIcsytW6+7+A2eK0+hhPUO8lkjT3AN5CxXpZlrNdJFCS3NJxAj19/rA0/iXMVq1lKjaOpnMqb7+dnzytV0mTCg5G2ffpYbf+NWkrkvWQqh6L06fz4TaUgvB8b4aYH5d+oO/G9kvomIBM8dWB/qF43b8KZYqU/NmebP3ae7DdJms/Fa8jVq0VKelPARio/1oabYORc7L+9ar96qt9JvHbixKl0p4yo1Vw6UZN68SQW6hAM3SqtWBLfLoj50VsG1IQvdbscgDbPCuqG3jSgrP7qkf7PVVpgYWUKq7S49SkK5/MwwghYhdthaawg7g8dy3WerCEl2ML0ToN9JRHYFzyGZki4UMxoZ/do/CJZrME4ndKpsd3xR6/Z+6LImLvR+xGWx2+xOHvzxlPoZrl0C317fk6FLmURhOI4lazdZ+aAl34xctMl8Agig36EwsL8+c3Zm9Pj0lAvVcpN05sXlU7RbFBlNJdhPJNLQKaF5mf6eJvPLE16yxYqrpZ9d8qUuIySW3nTezmguOq/em7xzKgg5qsrXQfy9v/5z1iK//rvuboNoxtthrpMinwujqcp2zE+2VVwfvF0jb9+C9NF4QUfUFF4IQo8v9AUWLL1nZ6KseWljGGzvzkzZtaHy1TdhkmRRSvz84n5+VG1qR6kSUPxSsY3OLrIcE77uVahSEPMAge0xJdNLK+/vqyY3S/vVKB6D+YuzD/RjYO2ormWoNwfqsJTvZKeg/NDtacrGd4RR6UHVyhP30BuNmfpSv4Y3oRa8qTXWipqvncwvCsZf9Kcg550qT5/rY1rLkM9k9zMBL46gypSAAyBEsaYBt8MX2wezbsZhDtD1cLctPytq+YNPAThqhdm69PHkl0BwhAgBjeVY3G6gFSadFuQ/wlW8pW40seAf/02jGdBgq815BLh1NS/VWnHP0O8AvVJ7+ROTf7pVNtW36WFviwLc1nyR88F+O7TWNndUJgHOud79dWpVkVPxX6vTuM7FatPhaJHWnrGhxrmcywuzsrPLt+FKo8lEuvWGIn5o2Mndqt8L7Wx+JN5lOVvHRvh+3AxluM73AmfzLOs+dpS2/Wk25U/86/UhRm9ll+cnl+cnhxfnb4YccDoK0hx9cLJwW3m0lHUm0D6hQyjFTlLQ1DDHRgRmxx9MdnEKJCrkYae8Xl/+DGOThHN/oVciXNdtwZnVQa8v5snmQ5FM3kmKAdWICFPzORGUZpUHJcYqyiJZ+gi+1ANZ0PxwIz3AYSjcWzc2eVbSNwAWR0wFqYeT66TJTwir1qpyQJBeCrPAJ4cHEryMJ7kbnQ4QobQ4IclDLGyq3B/T1YPTpj8yDhhT7tAw+qOxWC7hnDCu4QpZkhN+F2YLAP+BOosZJ6GHzV0+3jl5mzqCT71gnMstYFQ6TIA+Q7N6kAZNKvprKsEHI+O2rjoOmOZdAInabwjA5AVwL4embVrHScUFWb313GNOMZolsoY01vB+svVULxKMnUY5odJeljgX38WQaIoLgUCWBAqfkhBcXZ0/QPWfGfzNba0Fo4cVWkCkTuHFMUGK8shf7YdAJiHWZSOhH871ReuSrwPlYXz867aLMsAW5AYZRbegqeWwA5NVF0RzFQu5CRNskwkdGIWoJ44SChEHvQEQwg+Ok1hJjgrUWzC0mQO+W5KFL52pns9FMj0yHmttLnfxwFkv+LYres6Na+RpyWxwwGJ7fXhce9jzeQGmLcNEkDAYMN4BvlZx6tS+UdD8TdKEaNgusB94WfK1XpdWbDr97GZfarENFXqz3yCx2qVYCCxRGpRJlmk1xTzCJa5recoAcUhK9AEshQ9E9kco41pAY/PDvPkRsW8hBnkq8Nlm6LTFSWdjTJK/mS/8rpDBBclHew6dLVbcQdQfJrDaIoAh0FumEyZdJimSscDWq5Xg2Dsgq7c5vLpjUvpXDR8jWDMeZ4ICnzjOaGTZZjxFTpeDeENRHC+jYH44T3BSrw/+CAmOukoZUlPMC/hClH+KguJFwdcZLBTj89o1bcEvKwwqBbYy67N04v5EpqYjvwvsSd7OvS8/Bt2KzhDOtBOoCwx4s8CzdA/tp5ghmvcF3UsQ3/PeyjDzyphxB7KcA9luIcy3EMZ7qEM91CGeyjDPZThHspwD2W4DZRhu7qxRzL8tSIZNuvMoFArzHgmc8X8w/MSEgfrpn5rVyPigFK++eT7gE0agRkXiuzMEh0Fj5KbDkrKnYoxpwna7BL4t/m9w5Pa+A+HR08On/7x4MPa9hP7CFAlJlJ4XHjel4ICwSaIrGunVnlhauOdBIZMSkKydktnunI3YqTu0umxlKMW5okT5txlrzCX2anOBLLPOPmZGRAo19woU//A3OgjllHbAEtpScUlV+GXbLQywDKPuhMsUtKyHNMtc47FgxJzgMhxm2HRQCpukEaqJSF5LbVmLSF5WyLwWu1KInBfFu5aHb60N9E3dmUm2HFm6koCyc5MuJhwTgWYW89uoU6LrS/7M20bbUfZ1hTl2rf09bx5a1rM55xP+Li1hREOX7+81jEXfsZKgshdXJCZsWIoK8Oo6fUKk2ZlWTIJsRpidISWsRH6xnATKbMiODbwnQoPcc7+mtm0XeHNlTPLybVLW7W0+Urb23OX4R2nSYDrcaGyIso9l7xDqTbfAVOquqh6t2jTpbOs+NMAwJuyYjJRWQbviitRLAPZ6zq3nX7wDcWdF0y41Q5Un3jN/oTi7aj9WnI6Yc0bVWM+Oa1vfb0Fp+p7XiedmmfS8TzWYTmrFcC57gWlz1BQ2hgh2gWHdn0q6OEBN1Lphab92Gz1ZtNytjyIEi7+dvPQyyrUYtU2/g/NTmJdZ3dd368rd8gZuWDQ9vTPg+5LAi5HGI/SvH44SNVMWxzAP1VbMT4MfjjIwk/q4IPHpN/B6bQdX5Ahv+m1SzcqqNHa9dw2qyF4edGHbK2KBsQUZLYCqhAQImUtLo9o/YTDVatRP/6a1e05lSyVfm5azzfasge0vwWkC2X8L2J54LQH6UNr6wE48+SaNHV23JAOGIGgvY/dXjA7KbHZlU7qyn3p3gOVhgTZFrLzyLDxttjWadhPtF+XB3EDYZBk6xq8zyHMLM7lTJVM321VrtJQRr1Lv8vWaZtUxP5DCSG42jeHD2RPTMMFUDJJXR+UN+SCou2N2kLLVypKHazL9hokZgrnAaxBZlhPGP2ou3bjNCFpYCijfis1oCf7ngv1k7Od3t6qNA0Dj6W0TMMWHdaZpB6H0V9KW5vas4qtqTfyv+b0f2209BMlp/mybxv4nd1CAA4wvRCYnDND4JnXdkjX7H+BSJk0AjFW+Z1SsThC0e1Jxep6NHzyFdyd5Dyx7YxwybabDA7keqgDNIxHIjjFlQUJXpgQhSRr8GmfRA95jU7TdrPQ/rY9dBt3v3o2ntnqsP21/feCdYAThg88TdMSRynpJM1nQMNIBskkG4JQkqTj4SRZPE515sDHClo+TFW2TOJMZb/78ujo0JihD7UucqhxDGt5O8uOeKkC2eO1XJbM7yPdzMg08+w+xvaTD37GGliZKl8eHXmBZgKVA2bvxkY6rP2T+bJZM1f4/12biu8Pnqs7ivYN9NPg4BSeqAwi3Vmcq/RWRhCrvfBIOha7bhRy0Q6p27YtdONNkrc1udhuhO4G35qCMK8+ImXBNPvDXfDjbfzH4sfkJrCwmJthJ9mRl/GU+noiXSDm8K0igKXyxkrz5kc4tiEJHDo9yemgHw81jC3AmA8GGklW10aNgsEHuPEhW9g/B8ps+lip6QTvjptSydT106jjsDWcAXcCbWeKz9yJ88jSbHyyC9RkhtrE4Z6n1erm0Ga0OiwZrR53GK0+O/OTNi1two8bzU5gCS7ZniZOcCihv/c7cFS29XwwlnxVzb6VUejAeWBDA05QjZouLI7x4EDKxokNkWXXWw8q/cZoK4TDfa5xuDvgViBkxwFaAWOmtqTxqDID5Q1hRZBROxMazVvLwWamJAbAFsGol0wkNiO39lIwHTD0O4RDaZjqKiXa10+LWP8owsnNOElutPkEZBi8m2GYIxqL/W8LNxqrPCtC5HoyWCkEfe1PW//T1DrkcMldoYb421zFyCeBbBDABc5Cz97Hh7TTkzhWaG8mWwvFbaExi8zvFsgYMOzv1Fgul0MB1UOG2dE7BPh47OxR88PD6zLBrgfi2pIa/kvTGv7WtLx+NMAAz2WaBMUk10wjax4nW+popLmSC9wK2Rwzy8xGMggA630Nx0uqcBYvCx/Ddbys76Fp95F7kwN8Yh/1atZqCAH88umTPxp0bB0LaDZcxQvI7DXgO/yCyKcWeDhm1R8rtOyFZQ5qI/U0vhDG2EnbtV1Ae+VDlGVu8daTlG94dEcaIMwd21y5aBk5zsVpxz2Qy481XtjHO4JABbzrAyiIowkg0Rno7toyjZMEUvG2K7BFnkCWXd2O585mM2eu0gUk0Agt4ACvlct86eVaQzRKeOKUeQ4vS9AK8Q8wwspbBL0iTrRQ+TwJ8HHU6Mo6OgQkH+i79Fh1fZUW6hrCKGMIYuVmXFZg4LRdUAW9MrgoSMEwy4pGCNDe9DvTreyEeoD4VSIgDJK3J7zfD2wLneXJA65SgSVSDWUpl0AsGQ3PpizqAAErcq9zGqEzoQlnRCY9lDCeqzQ0sIeokk3QOnEYQcoHXYHWwEimIxQ5mrzGu56cCswjzq9O5LPbsmSmU3FKndZ4lC2BwxLMYH1rhmReJssiAhUAiZWpWjVNnZOTB3ylmj2ZLBZFbOQoDDTOk1xG2iaXTGutPSxjcC7TcAFJVrHYI2CJwMXUx4lSgfjqaGjEyFGgovBWpX6u3me7I8HEC90M87YNg1XeqLsr+bFHiEqqAMwEXYc37ulCt9GjP96w0GG2iidb9HpsWrpcxZMeXd87xpxPijbCm4Pn1/N+nUu4XoX6iElHZg1NXYbAKkjXZmlPruA2iMFaizZbdvAO+YzJKLKNutdrhvcvGXXR6x0kRM+giAm6nC+fc1cRMmJgFihQZAXqtBpYJwNFLFVAX4KUB01hLCc3bGTxXfV4xOYueOd6F30dstAXllBdNt0hsH2RookkiUHe9LEpVy3ZcD+z4tC1i2uB5Hw9T2pxy+6iDTBuPpygnRwvdnrGBmH6zAj1uIoS80IQvFHt7q/odm5uGD19Eje2OFg6M4ye2WtssOl04QwcWFBX5oFNhzJkVl6uB8Y5ZyjOZZbpixlkKDBXVO/kQOeqKbW+QW4B1w7l5qiC/97AA2pvhLoHI9Tn53+ULFlcKoC62jnn7IXlQ01+HJrOA3aomKdJMZsnBWXPYmOCzAgk3Do5tfnRQBaW3HrXgrBKKbooKYd/HOAaEtsbxyT1QnPSKilSHsuWR6rRgwN+hODW/XH65Y4TBpbtIt8CBClvelAwt8HmpwL67jgC2MMa+33ngQe96eIUM9cnzG+7M4jHTB85OIRdL5fk71DF115bTe12huiLve2iblMqQhJsyeffWgVms1TNTFABWAvBOzAGMQl3hyvLDsXzlRYjBihiOXIuagCTJM5CxJws9VaLQcDcYrmczFXgiigO/dgqXKera7nhV0l3GKT2qsoAjJ3BsiGLLw4jH2pTd+DrEu25YyVUiGDjJUXCHKvyMPJMRdOB4BSAuDNlXporA9nj6aHY0U0PDsfD+5x+rZWCc1eZ5FN5YrQqBaCfrMxxMTPjj0s0KATISgTr/+IH40iqfc4+PHwMTDLOwnEYhfnqMWcDCQ7JsTL7na5yaE/OI7KnFlE0KA/GPp3yeiIVa7OpvtYvbH458T+LJ0dH4vjNC7FYjRAk3v727+LBWKYPCG7X/TpNkgf4xM/xRv2cEDi4qLf/gU5S8/9714MyIfZeBzWvg34E6nA40FHyU2Vj5Ed5KuMMT9PGaTj0hseMLi+V0tlcrkzT1ieh9y1H6WFeKpscRlw5Q22+8XCOYqqMmWglnDkSu1OODFWh7JsE49K1OyC2iuSE8IE7sFaX7U0d3bGneaWXetqjQPoNrX0S3eiESrgRITdx697ifgX2iwH1jbTw77J6A77t5hASKBexzF3ugm9UfGcz9rRa+0PKexWPAnDRG/HvG9ulT2QsXkBLgglXI5d5PMFH4kNKYVUlj6AoRbEIg0MaKpIBx2jmQPlF4aIyhkQBNt4If4nVxxwx9oIisvbH0mOMfT5kkYxkCnPUh5yxD6ImzPvXKGHnzqyPIohTXU+/gwCJc/Pa9tb0VnNp5V90ZmbYaWaU4SfejW7YxS1A4o4jEEO+BZUPolftux7meB/o1uA3IGNS6eWhfg1J+bH4Ube3Vf2erzha+aR/UAw40fTrIsrDZUTZN7QX5JYhHLrtUpsvk7TUV2dIR59IjFIQctuEmmacPU8CTyaIHTxMdL1HWGupkcTzRNzNwwmHQnEqcBTGM5FNkqWWFT6X55NNJwBCyhSOxgglo7UzBlzp+gIlN7+wCmJ3BlFL8HySinFSxPQqSbmaockslwsKy7EjUrFXUu45ntO4iXp6NMVy2TkaOtOWfP0zluOePjUVLyCcPct98Ysmkf2To6OGcEbSCk6dYVSn9opFF47oc/PXP1zIj6DAPNou9W91q1SXqosB0PluPP2QVvscwHrUHSUC37ODPTv43NgBmYDW4AF2P7ee/K8aTz6dhZbjjj1o2xRrJhCJrCTaCOQkL9DOCRaRQAdo7rnazrian285bA6L7ZnZnpl9bszsfgzFO7frmtB3bXUGQwQ8KkQrUI8r2l/dihsXC4Wq7W6suW4ixs2SzLgJXT0gNGbm4mGS1qkYqmwzOlpC0hN0Jx35debg2Q8fKikvAHSEnGYWqxElIcLwUqYTNB2j+UOoCAxlwIYFcdMfDuZJkY6mUZKkI7MfRwswdmQPqx8elReCcml8vqYK/apoBtTDWmF+zcjjdm5+Abeykj9yGLNFkOJhnG7QxFFPeqntPrDwWwJ/bHBP2ouvehs2ePKYo7UpWks1CNyY8logXMxpbEBwuZqXTE+wPpwShMyymBPWeQscr8R1iUdcw/TdTOfl4dqR/NXmnG1ANniQlb0XV+UheTML1sNc/cA7bidJkS+LvNp4hxWounrOpH3ZCzwborpN7sMG1i+HyYYGr0ZDV7v5rTY9x7mqv2i+1jQdHyv/lneuHeO15Hl8h4geKjJcO1elt1sdJ+M+b+40aWO7kGz6u0dYlFa51zOUMAbDvx5IHKiPGz/znGFTeijYlF+qDdRHPQ7qXg+nlw18pveV2Q9dh8Vnkia1uXY4OlOy1UVSitcgNj4QMxUrgqfT4G5RyEnqCI3N5lqyORt0gktx+lFO8miFgHgkVbOTMIDoxeDZtFgmOe5hQB22cSqUE3nAqgv6ktOVksmpwiAZCFdM4e5X2dDNbnuP6iE4C5sy1ivrF9H/aonlYHDWX5s8j7TjnRsyRKKoiRqthTSjgNqVpY8yp3qDpo8pWjpPxELJOIxnlEvT+LhR0JGO3WNVa8Xe4NWsFH1lUrSZuIVKhhPz2ZfCTCdUtM5bjvIwZEGH5Bd0bDXltacOq0wDrcsN7DtYNhRvcCPbeiELoDZCwqjfKMtvpOhSzYZozn/7w9ETQU1oZ4V8DhKxzt8ukukU/NwfhkM1FO+uTh6xS1I2R/i8VHFmSlw7qEWHn6SrO5mJVE1AsgvIBZQiA/NwUkQyhaVfQDyAjAlJN8/TcFzkyoL5aW6g33CXKg3BP76WVf7o8MnTw6M/XT35w7OjPz376ovvKROiLzGsFmZ7ZYa1ajjk6J3QwbibK+NzZoA6iUUDR7O9dr91Yv49lzE08IvS6SsdBneDDBryzdIN4ONbP+BPHx4+niSpOpwk8UQt8+x32Nkj489q1xkczhwvPlptULDGSrMOjgWW72Mba+dAklL4eIr+NG/TsRbFD8cyczwiEDKD9gxU0jfJREYTjNgjrRsHooPbp0n6Pm7aMPoafIsSeRMaNaIyprjIGnGmeuD8UNSIxHlBu+Nb5RfJ4BYLXWxVdIAGU+zHPJWTnA0JBqk4TciLdxcYOCXsmzY/3sZBGnd7RIQd8K9nLx5RAkzXhVVGGSagwCpGOghTO7lSeI8m+sYJOkqg0Bc+fy4I9XTcUyGcjRKAuYo9BfO4S0BxyrGmhA5J51B08nHXd+x1Ze9ce0A0mEiLMMMQKel2pcWbWZykWxsZqvu4ygpKp6B8NLaC+SQeRVrv5wHu6Y6oJ6RnnULdSJ5uN3v8zl9fVuk9fucev9M74D1+5x6/c4/fucfv3ON37vE79/ide/xOv0axR+38taJ21jRfrQ1fKkjRcgJBRmko6wqxhoxaE2Olr6eiN5TY5H2HCHB4TwlzgS2DyA5Bxda5Z7xyo360DeNBBu9iIdk5nBcWICuVBJNtkoYABYEwVzaHKDy7YBZO0uNCitHVKV0y4zlJBsFbxUFIYEFZqDiAMKSKwZyGri0fOYvm6BOTKYzaulXRqskFba2QwvZ8293uaRTuyIqRGczAuq3Bn9qZDlLDwOYxT13+2C0wr98pdSPkLNGvZZXJsnfbPUy10fMtDjzTNP5wG0yT7eL0OGCnuY15y5696kmunFp9mL9LomLhsWrt2rNxx66JKOWVvVDqWKEnjV4oTiI6Opv67VS/tJqHAwMgUVr37hz0Hb5MevjVVeLl8NihnZ8hbwEYADPHGH1Lv5h5UA5bcISLgJHEQXLHmfjMzGC7vY+1CUynVmAnVzTcmrLX+AaG+5TybySxgWMs76SmjBNRuAj9q2UkJe3Fzf9lKfMK67avIyU/Ay6v8skcoCWtye7p0dD1NXx6RCpalmzsmXpCtWvWT/zMHnkaM8hJOzdWNq+i9gy4hvDKEQ3nmk2DqcqLNHYTTqJfnoz0G/7P5ny8JnengZe2JD2CmO3jBEWSPJTT89W7qxPKLqs9FK3Rltlj/CDH/Xwoo3AWax6q8S9sJo3amSCgFL3PoQn7JDuVUQSn33+77Np3ep0bxEvKNe6RNcm+a6r3I3rtsfrLwydHh0+eXB394dnR0bOjo+83AENv48N+fusGypqP20Kbufx8586Azij1qHcy3nsZKY3x4zIkHesEk2Tusdk/78ehPTZ7JWXMHpv9V4DNrgyXGVEu3maM9ljd0VBGWGm1WUaeVngUdSdw/AKZ34oy6vzWwMqbKFl6923m/T8NDl4qmRepepPkxzpX/s8J6fbl4ZQGcBgn+aFJ178OmBs3MIqTfGQb2BDGrWk8ewC3xo2CmyifzDWjP8Hdimcv+2uh0tVeLf3Z1NJ7w1kByhIzdGI4Uut+TJ5S6DhGQeok65CGAmZ1YlLu6ak7vJ5xAj/Qnmj/+FzmwPE3T8QVpV/CRFtL2L0orAVqGSkkJdYfgPfcnQLvP8oVf6voF2Pf1XQtbQdUbuDew4swvFXIVX+Y5erDTi+pU90+3k4/fA3t+7q95159nUb32+mrhk7vl8CvkMCbZnvtxeX83JAu3R1wwz07/BWzw3t5Aa+J593IcGE8SdVC+97bv+sCfFn2ZBHzYHBwm6B4DP83IsKT3ohvathaK2ZcWRmoKqjdE/Cqqt0dOsqrEbZ3z9StJmcYeqm7e+yt2tmumbjT2StPZ/dHyJ0z7jpD1oybPXGer7TD7FlQZ9ZuAueOjL+Xbq7nzgDVUmZozavxF/YrAtY5rPoZdQyBp4QHrnsIuiNorW0I25iGq/SrT+dDZfl8y6KXzCXxJefK3GseP+9Va7NN756j2qzRhqOWurvH3qqd7ZqjOp298nR2f4TcAUftOnb6eL5bThIIlGGPyaZDuQVP3SkvqnIe//BhcujTdFFE3hQPHAa0Vrzeuc5I5IuHIwcsk7QIfaOMYxUZeU2veHI36Bddobp6Nq8kC5lP5tsRv0Sn2gRq+aiQ2N1xT1JAJFuk7Jinxo+4moKcrKK+FbQRMU37sDHYhX6AoehMZk5SFw5SdjNhv+bIbGmThQ/XzitT06fX4B1raNHeu4/wbCknujNVxuTjGWNADw1xIMDRMsKUSYyU5wBe6DhvdkgoAbeGFO24lAg1EcYDb4+QOM6MGgAYU8K3TMQ1lRhRbOm15x38KQRtP32Codqlwq1BMYuFCkIiT8Ecw8HUriyMe3vTgN/6wWxeaKjXjMI+kVBUA6ipZ+l6VYZTcV3uro7AWnk6rZYfircQSX4XQoLxemkz12tRoEFehODDqZ0/o5W20V1XKXFdkn0cogEPgeQCuuCI9c4kHaGuuTGgLjQqtK8+yf7ibSq+IwW2ZlzkpOo4Z52zA02FU0AqBbjdXNzhZoZhYfb3EjKk0PjmiApN3cVJrobihPFuGIiQXE0zBC+eqnwlFgrWNcwW0MsqKUSQCAJeXQKcpMVW0hCUOUYz02Yomy+18/gWXNm4gBsOVI3rqbNQD3PVYkGDq8FaPLYGabLW+6qDPLINCEgv3I61GXe/zPPBQYkCziz6LVN5MTyrZdEztl+q+k201nJVrpx7pGhloP1I6VDqpwGlMVCBDY1qSuRQjTvqJ521Zkn4JrkrQ4KbjG7s9M53r5KTOUoYNEgA2UkW9t6EaUC+QYiDLWU+aFrrt1S4JbvBO5szAlTQJMsPpRs8dlAOP2vq6NgNyaj6EMEIbDOQVsPJZrcx+6uEddTpUhp7NZ+FZyN0S6w6KYU7GRuvX2t3q3QI3NfIP4dfLilCfVw9UyNsTfaRn+x7T7hf3BNunyZhnyZhnyZhnyZhnyZhnyZhnyZhnyZhnyZhnyZhmzQJzTrGPlnCrzVZQoN2bPVm97kQbQZbRms1NXuBSWU7w7gGB/Y9fuTqmP1O4bmpbFRKDytcM1askVItVOTp+gHuexPTdNNAM/O7R57sL0VehvDCc2DhRWYao6KV4WFZk2wfQKA6xX5K7YrHcVIsCsJ8dkn9HQB6kcjfsUhESN9BL03CHViPJbW7lEtchSpVQZPNMg9ZLlnnaFCTV6FHJnHTizx1oxOIW1Ri7wl/HlszpifITQvWzEzNwNXQSfgup7m2AGJCZMgnQLn2KdcpWD58uWt3YIe9YtjjEvaLfn0uI/OM1RQSDcOs8PLbLsaWyFaaUX0TlJa4vzWyTPjalnkt8zT82LRxjHrWn8JGEduGvJR+uUrkSmLfbhyVUvreBlCVc5W6qZGTVGcYx1z2hgBsTYN81HEi9DXO9GXksI0PGS1C51F70nXUvk5lUOApwsHAUSE7XmUaf+Y5kp8FzQxyVtBWweQ7cgYJMnJEoU7uYpEmd9l22zwobYz6OmoKNu380k5de/8vsHbHMdiJSZ46HFGHn5dVvjS09Qzz26xBud+9dX5vnd9b5/fW+b11fm+d31vn99b5vXV+b53fW+d/c9Z5r66xN9D/yg30dW3Zr0mjLaPZnNQc3FIzIzXEs2DAQsU4g8I87Dshl8soRP9qbZkZIfj7COHW2/qFgYtXCBT/HMv+NDjoaW3qZWXiZnZjSWEyemZYHnT7OuJarRGQgxTOJsmSLHayug61LXEuJzdy1oSku5F1ZUlNfpbmFR7bJvYVh1KgB2xoZ+EB7A0te0PL3tCyN7TsDS17Q8ve0LI3tOwNLXtDy97Q8ls1tFS0jr2l5TdhaSmpzi16tdUWd+n8xR3Af8Blcg9+YOTtlYLNArPtLcuZIDithFZos/CTGgpsHqEYAjUNIasRheMbIAiBlhCBlhBWCvhwQANtYgJPWFxCuftzMlPlZCz371pWmn9PT7PtbBFmoeu2iNYt5t2+2xjvlipFN6PWZVcp+oh5zXba1LT1QlQMdGZgHQtgSLOmia5O6t3Z3z5Lu9sG9rYNLWx7y9resra3rO0ta3vL2t6ytres7S1re8va3rK2t6z9Vi1re4vab8qi5jWl+f2VfmuOQxu6CW3iIORQ+G9hPn8Nue1UwBznZ8yt945ta0tAdMOhguJD4W9hrI1uGWE78+5iWkNIHDmSBSZeFUsbbahlqK5e0zW2cuI/E4yI2TIhwW53L5dUbJNeBHchpnKSExSY7pS+rG07rq83D+8lttdpSX5Sn9dLHkl1bvB7ZT6ZzoNfntewch53MCs4tnRq15mSc9ibbORLfear0dL6v9Hw0rVlZbwSRYz5vdFELmdlBJuezEkLCW1MyjOQPIG0tilYfnU4t5nXTjM7uuewfF7qG7myA/y0qHPBRgbW3xqOYewLasOQqm4Tr/e0E6Mt9D7i3kf6Mv2sTLi+Ea5n0N1+kbyD2Jt696beval3b+rdm3r3pt69qXdv6t2bevem3r2p9zdn6m3TP/aG31+54bdJq27Tu+smqzrYHVsXOmNZtRXrOx0dWbZL9Kn6ko1zW4HklcZbG0UfutWp0sssXLMw9rWpeSFsetFc210NzT83W3x5Jl2G+E5K9VmH0tjLixDGr+XHq3mqsnkSBdnPaKDv6w8LZs0VmSP0KF33zk6wG+3j6Qe6wdyEIBCTekymy8AFo7EsiH7sYzM9oZJrmUvtM8NApGom0wDR2ZIpmXAPnIu0x0D4smwbCBdpGchu7bWlBatRtTa7hrPg37DrGmT1IsSBoYPdXk322UrXO7TQhvFoIT+OnB3+GRppa4PcwE675eo1jWRvrN0ba/fG2r2xdm+s3Rtr98bavbF2b6zdG2v3xtrfqLG2UQ/Z22t/C/Zar5Zd1sTP0wQxQ35+r9K1EJvn8haQ5BeGlRz0Mli1G6u8bnbkXFdicx0mqg1d+XZqEfJYgxo2hX/B1zT6LLmRDje8Sl+7s/Lo/j9jR7zqENe38Gy5Uv5h7M07e/PO3ryzN+/szTt7887evLM37+zNO3vzzt6889s07zSpIHvjzm/AuOPVrX8aHJwFarFMcpjxhfpHobL8dZhhBGNd8+4SiOd5vsyePX4cJJNsCFsqScfDSbJ4nKqpAqKqxypNk/QwVdkyiTOV/e7Loz8dalXuEKgZhZPSFK7qGneqYP+9lohDrCuPTOVnuxsHnKUsl3nh6rZaxDDz/vLoT86AL6k8IqfmMow2PegvqPZP5stmzVzh/3cxBT6bPFf3vmreHrB54kmqAEz4BPf9KxXMVHoa5+mK77lLUnqz+l6SRZ6MJkkUqYkWJXiA4ySJlIwdweu4yBNxYstWlcS/zVU+V2QXoBOYiWWRTlDE40OmzYPQr+B+LdIxaTgqfZCJTN5iDsUVgiQvVD5PAlQKY5WPwPaYbSx4vlG5uMIWfGpurHKB7VsbZ4aDCwolQP/TuizPaChe6B9CsF9EE0DNBmODzBBS1i0sklSEWVaA/oV1BiJQS0UpQLmonCDbeZC5WLumc90BqstEFXHMhpFkKh4cPRBzlaKmTZYYNsu6gwDDDBSPcSxqIO6giswMIi409MXRA28jeo0QEPiLIxHIVUZpBlZlsvw9KcSiyHIwuQgV4ta4Nqt3DaS4psZGQaFGMLvrgRgXOdqRxkk+p6BttUg2vqWhbi3SPBbJkoxmAhpHc3aYLSO5qqzWkKwseD5HWTGZqCybFtGId2XrYbmgauLSVBPnXK06oLOpAIlhgF3H6o4PjxhHyeSGrCk8CGcVkpS4Ju4cZ2GXMgy042iYawNYkMq7WAQAZzxNk8XQAhGz2dqRr4MmRcpvDnHmHJDutKb9xH7rI7G/8D0LHMfi7PKt+Lc/HD0R1BcdFiRXoOIEkiPczVVMtqsKLxrT0QrAHFXhQjCsT0nsmjcJi31QOlDYGS4UU1Wn73VX8kEm1HQKvPOWagxJ4y2dgM+P8Cc4QGRyTbQ3x4kmY5mVthIbnsBUzFQ+KPNUJN5YNfJPl3FQDogDVp23sHuCVt1k7Tx7ofk8lsoTGB26Z1cmJSJ4BYOReDaJNBviAd3N2QMsauYLLRKbk+nNSGYjOL+tjOW1TG/EcSbOZVgfeQMr8dzDegDQL6TMIM7hYQwdIktVgCgd2b5iiSvDOMU8j077t49f+u0jwvUZZSCGxhM1YvOaTzDXFWlJxSVXEW+0Re5AwTKParJ9TaWZJItFmINyDW70eOm5Ow13i7Aiv+bgXVaqEy4H2hgs9QEpGilQaTSWkSxb8nmqJSUDy4rnXBanFPSsfUqXt1O3FqRTq3NsYljWNpXu6oWjdFY2VapsE9aiibdk15Id4xWqgudY2GyhLp041Oylvm2qT0DMITexejJfW8/iycQ90936eDpeNzwD4DtFxPKKZuc4+DCJifNHYZbD9cVTEmZKnVapioWp4bBXDq5z4Dznp3YkzD4vW3lcg5RLgcr+KK2477ZxLxC8WGYqy08hzsrRor9Vq7dx5LlhQlumK/WY0xzZjxs9Q/BObiV8tdvSxNomYGb410Klq3OZyoVHzR/Lyc00jKIthKXn3IRPYMItioI1jARU05SsFKSRpLgZpdCj4AtyCYMFHRvS5mW8yaEBFVBcXKbFaF1xfeebMhFdGhnCsUHleRJ4tgON48DNmFYuoHf+FpTVt1CTKPo2HQtTJgzgvp9ynkFj+t3BMIyPQdt4jmMho1BaIQgGpzsHQ0KSKSOBhJkjRaH6RWyKJRrDNGAiQOdRl18FHgLxhszelYEJqAwbZqFkHMazaRFFK02uFVtWcG8mKYddQjdDMu0tVJbLxXLtq/HK1Oyrk6KxK06MaimS6RQsJA/DoRqKd1cnj9iZgrVTY4PBKUAtUmspkeOdzESqJmA1D0gk5BMXghqVAgUWyyTNJXmzyTxPw3GR6zyQCGI7C29VLNjUD55uYYKKgPooF8sItvkPB0+Pnh4dPnl6ePSnqyd/eHb0p2dfffH9wQf00SiZE9dgf9YRw5SsL6qVl/E+I/3S9jmkKOeMVHcQum15tD2NlYiLhUrDyUCwLjWADUCrmw3FG+I3ph5wIgTYCTN4Prhj9WyLa6E+qSIO/1GwRD8QMxUrcsvj9I2TKGQtQiIDLUway8OgWEYhvDIxgxyK049ykkdgudLBxLjB9Ko64wYlw6h9mtHCkQ0nc4FzpVOdyaky/DuFlxsF7jjbuD06p9s9bKXdU6ex/w70ZJsssYdsB0PN6n27t4S5OuB1n98u6jfDrYzCAIWy0VSGkQoO+ubd/M7UPIX3kZYZ25LiJfXhcTSEF5sMVljAODiLpq6m99EZ277ARoCX9dOjI76nsVPaOTK6A3PvWJE6y5xqGqooqBZgrjXslDnrdKoR36UzEp/E7L154Oc1D9wmYNViDbKnlbLbwPgdtgrKZaPmQzrOHF8oSOeAPXoN47lmcgK7g58Nd9H2XsfkJTNBU2BktHDncwGj3CYzgbGsORMy18HVBG84O5/JGbbacy5jpfgtKeBJ6HvGyCxhLvJUxhmeSbrPrqnGtXio8KqaQqEwE3FyB/e5FEE4xYfiHEmlho8og8xcBUUEijpU3/W8L3Xz/x97774bN5Kl+74KocGBbZyUSnb1Zab6zAAqyTXt2eXL2Kqu3btspKlkSMkWk8ziRVI2UMA8xADngc6bzJMcrBUXBskgk5dUOqvrmz96ykoybozb94u1VnjcAj0agHUPnbBc66FtfTl5eHMtjznrn5E2eSY7SZhlk/B3dRzNdoKRIk+sw1ndMdSc+ijdQ605PdpIFoLqqE4cG50k8rPc9JTa4wM7yCZePFKtP2zixZhKU5E660wLgJZfxqpGnyOk/D4Pej/PaaEQQdfKK2dsXoc0+FH3RJJYe6WTV5Mgn0k+UnupE8/uJtNn/JX6yXMf66yOzoVlIdtmGHVcs0p427qgJFVylZoyn3q8qn6QyU+pq6OCXOit1bT7RJh5gvcoPsngIhN0Ak1dIhCRvxHBcZwQRpDmUZadxWLpx2G2yrynUXhL5CW+lRP3tUizZ8pUwDxPmwi29P9a2gEkqbdKUimqJeSjk80utSSBNh0vOtgHtYkEQ9chDQ3llqV3j2rO1CGL9Jmrxhe0A1Jzr0yE48OrGqtmNA8rOKkT+ZwnuR99rtt61FTxP5+cnrIK3g1cd8EfDXYrH19vLWkWfJteOcT6i+PT3x+fPr88/eM3p8+/+fr5/316+o0u65CDgxaq8bsXz//o6YSUmJYGHfK88XOtRD98uFB5jz+YGXFEvn3Yth5r/1hfrHWXl8Yz8gqCwLL8oaRpiaot8LTx34hcduDw78JFVvhjfX3KH4s+k/Wx+pzIacONdXA91R76XXDt7IVRSNNAwhYkUeJLZfHu4ruSTlVG1WeV3ud6ZbVJoJ9lIq8aBapafJX+8Odgubr53e/v/vq731/8769+fnkmir+Kd/56+e+vg++uZLOoKjcOH5tNpGr2Rp9c1PpzkScrPw8XPE2WKEZ/QZkBVX0pojXNhItbNbEskngRRuZjs4a2X8q0++s6Fdfhg5cVxFky7/P7795+++O/f+YulAktxOQZSx76ETubKiswGlR60NQb8z/++vK7P/+v49PT09Pn3CpZcdVyNNc11j5Yb1njzWHGznNiV2Nf8gOuDsSvqjuv6XoOZUebcVtqS1vVYqwm1F0e7TOuBt5q4p7zIiUJb/8bTvQ8o85gL8s0OqCL4ePqLe/Sztplq9o8juRt/pEUoUdyz8r/Jn1KDUhq4shpzqq7vlwBujKpdAfKKqXedTRjB7Tk+vrIMQF8kKlSJZYhg4K5HwSpyLL+HepMvdDqf7X7VJdJZh3dzot0tL3vnzklM5R/SJv9+cz74f33BvPojnh87S9sWzym7pHak9EL4mEdpiLz/qBsJuVgyPXsSspfTz+MqL9uPKeSfpKVC8///Nd/S4Ir7uhwKPPIdkpe+UP7xzmLSO5tnUZFP9Jek+17Wdi1b8XSQtQXOb1P9StTqezh2qTuusiLVEgoxRDWS8ge9D7M5F5RROFNSJ4CurS73p6/VBl4l0lvYd+gNDwqP7fpj4aZrX5CV64i8WdlC5Cq1c8q2kbI8DM16DE//Vm3/ayZQbXZr8RNKFEM9UUukAISlrWhSOe5/9A4KuwzUV76D69aVoedG+p+lwpxTN/Zy8VDrg4qiEff+SH7ldSNq2lDorEnSd3aULRMTdgitP8qwS+9SXLxoVitfGlX0LY4SIvPN5xBc+awLDPoMWmZ6mdZsgh532FM4cPSlEQrVyXz+pdbadIz+V5HobV4PdM5tBdcb4N1YbYVfoTr28t371+en12+vJirWfh7cSeiLR5xjdnKyODSM4tmo2v/LknlaNa7DjncfPsvsrrs0W7b+16HaZab7Yqe3PhZPYBTkRdpTIBGzSY6JQb8M+/zmyQWn5uPu53hTIl6f/OWJmv78hcmg906ET6Wy+BuHQQfyx2QPUljMTdfbNCnC2PRcq2eMagkk2N5wZ4znHMq/Fs29qcBmzIADKuMiSfDrLjauqX/oJ9p39XrMNXxxtrJc2Bhs8lXUay7NvR194NBEKXTO+CSr0TUnN3hwtONTyqKvL/9XHlYVh412Yc1zpOMJvVvYvwG4XZRXCfvrDC5uguoZYlXGvMZ5qLsAW3U0FDhs7ri0B2nW6sZvdTQNg4R0hQQzs1/c/fbssdsbonURqa2VXCswhUP0XKiHuctWpkwrJFZGxdNxeYidD8Z/vLp6VeLJGVXyoVY59k/qdSe8T7Kuy7iwKda0ShW9j+CnXJnJdnRJ8zaJISEj94FXCfpx9jcfmt/fiV8wngRFQGfZ5KRU3Jduktk2vak9GViPzJrvqom+SST0WL8OPgYEzUpTaPYr5iYTJEyirwWgmE0WzkdS08S+hszlw3PRyXrUdt2EQfKTLFiCcVazM8+xgq8kjMHPRYrc7KZATs+oZyFiKR33ollqVBdjXsvXO9ESnzfvxGVzU+nSubu1PvxyzT0o/5Py2ukHaX6JEdAGq7C2FcXe+joW29k8C09QrQDurJDYFMNtfb2qhLH0VcFGNBwsyN1p/n2t1urOTvKqb16NuYv1vfXS3rT/3brtRwdF89WDkXkRRdmdGnWRgox+FuR5Suhl+U1H+CEgXEO2krd/qgXaREH4xbol3HQvjjTyLOX5dSPb+Q/+GxU3eorgQshDl3HJyrilBupv+AF/J8bSF27+Y/d6+mYIY2q/FQql0/edwRuS/9dNasxI6DZJ1tH5Be4IUM9HYPkVmxqbGGdrJUznJFWZMRHH9G3r0L+LPvAZ/7ls148PlcYxZ00lDStWBqJmhLIY7uyt/Teub5OYpH76ebMvNuxeT2zMmgsXvXuWl5CrkCZ6t1qeeBoEfRfG+9elJvM0nfQ+EeUbtOZ9zQUJ8oAttywHv+bHkmVv5XTRfXvZm9L/y3X8uzZSe/gcE7Pc7884ZPx0Zra2u7+9W4vIzZ9JwR3czv+U5s30X+WITiqxXkZGk9+ubReC+HpFD1FPlULFqneIWQivWPe4jIhfv5JO1eNm0H4YL1jg88/728WmaydOH/V4ywFZfX+eoH+Rc/C8hkRzPsU4kw97PUuTXlKU185VDmTO5HSpy/DsMzMWsILjDxpKC1Z6jX5vXVuTm/N1dfpPJJWGZypR50jSJ7WseoVlSWuZWH7gy6IKnK00TIi6HFj1jv9kj4uCNruzzqjxlStqztimqzocLDSVnUp+ruTsrvNxyOFD8VVD6rwobjyOsiCXNGoaA8mHGuWp8WC0H42q03Q6lTzKk1uhY48UKQ8q4Qxr1FWfaR5KQkwfUF93wpe+g8lc2mp16X/oL6LY8GJlXkzzRP+g0eKINMQOaSysjAO+EdVuBPvJRvrhtfsx+E/eOzyqmK5hnbcjn5eta0eAq8uHPNVGRpzK//V0YVkiEzLR6jNubHNOHq7G+MPvBhYrkOd9Lv0ZlJ7Il69taODCQJgLTMt7SCjOI3dyqkAda5OYazHPZmFKqafDS/lNg96PWWYzbW1R63ux0zILyt2lrWkVrhBc5FoTrdd815jzqkOUAWEdKBVRw8zH6cJLezJqPanNg/GATuHfpuGM7lZULZLZKTJFv2b6jxGkYjKnUVHgJDm5uHr49N/OX7xYphu6iOZepfc6KrR5Z60iayuyBTrPNMndqaUjj3iTvbPrZtks8BJN8JP1SgirZN0S6SQ+nJ9u9x8Hd///TZ/uPsjp90vSjpHr+8XDL2Wo35zN6HQOR59v4jnFKNfRzWddDWrPX1ZM6A1w6k5T3+mWTV2ol3m9pnGdvrlH4ylk8MDvL/J3WD7s8e2DpoU+eJRzce2rIKV44XyQMEVYMAuZvOL2zVybH8HnBrmafhQ3Tlvx6NDnn9Lu+HKCz0wapOePqEWftI7E3qXata/3hKd9q71L3bDS3MJOOrBUQ+OenDUg6MeHPXgqAdHPTjqwVEPjnpw1IOjHhz14KgHRz046sFRD456cNSDox4c9eCo92Uc9eB/A/+bX5n/zRbXGD0H1PvjP6nfz9bhe6XP6Wq2pMj1IVZ21DjDcpik6AOsYZZ42+alC0qVJ5MbOgSksJj2aVn3NKJfMUdi2waMGiyuzFob1G4dvgd3+BG688YVrcWD2nxw878X2bvLv2zOf/fX/+N//WGxfRoIA0fp1ZW9+p87+qC/zi8pPyENQvUHFd621fpqEy+WaRInFbXU3J5+sJ7rvJumvvVSu1Arn2jDmytpQtL1jl97iZeb8k/qdiLajyRxtLE2JRXuzptCVrVxoo352GGseYhkuXWoIwN9NKxPBvR5AF0AVN4b5ul7DqXtL2/4RByskzDOvZvCT/04FyYQvslO+7ipHbpOu3lVT2XUcFPznz+ND5rf2kGo9zj9mXCw/2Uv6Gm5P+DYz7Lwho5zlWVxeY1AeZ+VtqndiQGeSe3xiLs8kNN6Q2fKRzYq05PqHQlJHIuB3Il6ub4Y4dy83xWD3NyiYOXWvks3U4ZVuNKKmIo4MwbH8nCRtu6OI0jubP6Dl20yqpc82EkXy/Bu90doZyrdER9GF0kOyULeBaJ9uiSEN48Mvq1GGQpW9tXOr1+7A869HaEimfMb6yZM8mSW9xrTXBwUC2a/NwndxMmbRxnuoKa2yBHTdn3WdyN78m7kbPYxlr6ZvBqxh19qXTgXiOswZvds/em5N1yJpX8XJml1LdN9wb4rdF2k6yQTsmO09Orm7SfNxjN3dLT3JoM18zRcS1vOcHF7lSS3Wj/QOcIRX+WaFWHOVrjtyeT+w998Ujf+nR/5KX1tP04TugmIr3ZgiSPzIg1x9Ml9qYmpgfv+kPr8ZbVzxhcA6vGodgAx30Ll5Ul1jpHe81usiU2hXkp/upZ525qjk2u7ALGrhNuHS+vXdJa/NkYc3aVe5vf2GCnz8K5Efs8nBbEcVNy540YLl11YnVFu7cIfotCxBfnVrZF9LGM5v9on4eo3lxY+sfEjx4mf/gALeSeEvHM4kn4DIsvUoZa+Mkcycrk0mHgG7kuQhgmnbi+0g1RNmgl8Hy5EnNnkYJz9uA1qtkwW9qmfp65glKVgC/gtb6sCsy+BetuMdZ1Mz8lKJ/VKX5O45ejM55tuGdOo/3Qek+3GJbjmY7O74wjthNNrlNY/a/NTuZvfQnBuf4hPjS9qd0Fnx5w6TN35/IoGratJypa6VC45+1s71Pcubx3bkaNTLVXtOrjtmiodxsJ5R9WlijRh9p8mSIXKLzNbEs7YM+eOm7U64PLp5bTSEGTvNmS9q1Wm+W2dHlJUduv3lj08lUCGI1LtR/xHKXLzMfOEK5GdfIy/t9o5K/fmKvqBDhl0tSlbSm3s9dmXRY3siB8ntT45xS9pEBV15VlvSv1DpZfJSDORSOkebwp5E/693CBYqe5oAtLXs/76Zh7ZCGWjsIt0s1Gqy/CYQ1lrZXYNhq1T0on3hmzi2Oyd+6akUQG5xcfR5mTijmVYmSpBxCbudka1RjmVtuyUJl2uueVblWRn2tfatbe0O8SK5OQ63Muu/ZxdoaEaOdLFhRwzda4sWq2sm7dn64c9FU2kwwTORA4x77DFMfv2y0+ov4tVmkUSZ8WqX2HO1bOdZdGl0AnLOyK7C5GKlVR3fUrxXj/cWQyTZNkslWOUSpGelk12bAr+zIStoIKx23JXZBUVX4S8jJ0F0gFIKKHSwkuV7ak4uTmZeU/Uv588s3sKzV/mKNpqoMaojrXHbgcINUl6xm6prRnP61/yfklGqfbEw4CUpZL31NgiSSxiDiLKWniBIPgYJrGsX7b0Ob5dkkRT6/WBk/LeJUk0tT5a/HlPg9SnG0bp6EsW1aOizpj5Oiv4bPtesY/gavMwb84cjvHrGk21btxciOVC37EvlcFSXBtTOb9Ju+X6kNMR/mTjUhAm8qyiyZFDXZ18jD/GP9ZWhSeBv3nC68LMK1cxzsCxupmjVbaR9+VRJO1uPsZkznVzk4obGTJzkSZZpqC2FAQn9Z3Otxu96L0KOi8nry5WPaV7d/9tX8g+lIvYdSWOmZxAvad//etf/3r8+vXxxcWzE+/COiKUyx9Hr0nZla1+Y/I4BtEPPzQCtOl1cWAlVJDTjipw55lfbcbudFhXet82NeWfk3sqAaevj2epWHyHcxioAIXfeE9Uj3oyk733xDtXB6XJ6iokWabnd/XgjJ56pswm0ywZHQ7oXL5dL3ipEzyZvondlYq7kEwMVGhctV1dVdY2jg3FS64JXP789NQKtv7cnj9WjvVOBxcvY6mkdFezOgYwRgV8tvxUHWp7L05nFJfQe356+qxiKvDidPe7+azyzAV/ZpGbqcrERnqM/XxFmsq8VcQmgyquNhPvr96+zLQsAm1zYL0i/BvFgvNXIhfKhOHfX156X909/0rX46v6jJ199f84JvF/+4rbm1YDW1HY07x1sYEMXLz282WZ/cnH+L2sfebVqs6uvuqAQJ3vVj6+vfxfiSiJbzJ9RlZtF/qkWBWwKmBVwKrw21sV6rPfuPXAzPOtszXt82uF0p+hDFho7+I/xhwCn0KbxIqRx2zEWINydnUwjWMaxzR+KNP4WGPfthFdL/C3fkahwB3zU3Vi15bNdHh2Lg1OCBatVhzFwrzIwStKiDEzh2MzFUpaf57GtLOj8yUJa36VB0yqGbhdsvyMjuSyzsl49923GuOT253XWpEvltXJ6cVpc8PxKCP6XA1jvqbG9B55Qq0OeMt7Fa6k9dPnWDzkc1mcz8qSW1/Npq31ySg/ZAspe0awQt6Or4cJmtx0raSGlKetFIMqWVvnEHbWFTvn6UUqzSZHls1ZGPcWc0z5tm0/u4pWL0LFRv2nm1x82qkFUWnE/tO/U9r17B4xt3pm0eNl9r0js8dryO+5IcevdK7JUs2ipQtxhll0f7MoBuBvbAA2x5kegK2RXrC32fOopOaVm1DqG7sfmW91+t4lpa9HZyPbR87VlemuR2ot0+9bMn3cBt7BqO03OGtDGQMXyymW08ddTl1DTQ1D7fPfNgB3LGH3IUUfT0lWXFu2+zjK+G+zLXHiPm3h2aUrTF5kP9W6WcvlTCPKUEVc28v00yf2V1lHSSDKK+lVSJr5fRgHyf3YdtfxPL0fZTINBc+nNVnp1ConxTA1IdUydqzl8NIqFMBCeh7Li/90uAQ/y0+8D9YNOfJnPvZWi8R1EkXJvTaYeuI9pXBuz8gF8cnqifd0lcT5Mnt2wnd6qhALM+/JH4Mn6kzJKiUVTuXMQaP/yKHhJMt88mJVvpEvk0w0Hn/hycx4FudWlu3XqytasYIqgXE6PwN9AuNGoZbB6vvjIrr2C+ZqpT1w6eiVvl4zTB7DVox+eailorwucMxwKC+xk+lsa43taem6q/S21LxHeqqeYTY392w7U9RRYbqj0nvvTSKPcq7ym98D2mN497tAO+Cb2QfWsnzUHJsZ7no3WMnwe2eGj9mo0/eEtX2f2g2qsyPQzf0NxZ17e09xEtvuCb4r/6aBW2mHv3ifbfMuLXg+VQdQbaioAfRa+nWCaYBpgGk8JtNwDDQ1BN9FPk4D9r6K9Y/4oUN4dQTIdzr1RX6sw3iXBpt54j19IpMmqzGd9hOOvf6E09cGYpgifmNTRGMiUBOEvY06XxLwwXTx6zaM2hdVHrBhXYs4kH8p71Nf0LFYFImezHdK39/Sxx0jAWPgVz8GrBR7nhMMwf5WZk72v48R6MrjEarqyt5ZZ9qUTKgmrVD1mk1M0hTdSnuU0BZxwJNWsV4kfGX8455Tdea7k7MpbAB/axvA1uXtl9nRa39NgRu3hLa3jfnLOrbFLu8/XhuG/t3X6nREOj+uRDr/akuk84OLWb4tYHBXu3AIvI4Y3o7ZZwfRvPutG1ZJRndhZxcdGC08T+jrUHBXjg6cJyd8qZGMaLemWHb0deRVwxzfgz+eJx7CjD+c+rTkp0N3MaXal5Df3yQFp6EuB2NPQVkW/dqfdPCfLNe3aK8jfyFUjGKVCRfN5CRHZ3p7ltE97FsGqL74he7Q5WjmQwNM6UuT3qsE3E53Z9ILSabGLoGWzYAdgkqVx3E96NfHp/9y/OIFL2emx+5gnXc4OJzF6l4LPyp7hfRzNZHHy2ueWopcbkhUE4fB/PmLr7n85uKtUcPWfamWVeaYe2h3YSehfXevsafclv7HXTNPw4dzEUXN3ngdplk+D8KViDM6NeAZtOtE5zt6wbvQL5A/ZCHvbaSLSQNXUqPsmDg1Vz4UpGheWie0lZNCbXnaDGFKy7tbqFqOyncwjV02PcfKbDa+SbR6gcOYRbnh5lcmXe+3b2PB4cjvE4+ut6drRLhQG+XVyq639J/UjVdcAenFSEZLbH4ide2855dQwtizv0i9TPoZuoGWY6Cl2l+YLm2VHpgUWOuqWNwKeU8ujTbr0hRZUPV16FZA69/978eQ38v0tVrjrsJYRQx/Xv/gsn82G1v9qlpWB0315To9pVsG1Q/c/CL1Jmj2UdkrG0jBLiN/AtUHVJSwsltTVDtHANBVEojIGHq1qSeZaKVU9J7XGgNXh8jj5NmX/2h29HCckSduJLLsOPZXyoZnvcmXlfsfNuqaB450JuZWCX/5pewrCzNMt3cR1Xh8/SSuCPqSVwT1jTxdIRbcDXaBLCghxSzURjGbnPp7lVCZett4oLiv8svKf+kiKAIo/8i72Ny/lVtYuZlVez/1fKATi+WZ1Z1Iec1dhTdyGshMtEuxdWDzZC3bgDax4QMFcVT/4uGUhbn+3QZLXAIdHXk3tyxRQn4g4u7rqulWapUGW6tGG77jha65TPm/M7EK534cF3w1i/kPCfTsOpyrzKzrplfMc9ozD+O5H9wRZWdLkbmfpsJP7US/VWEvaHq0U15sFhTxs7KibJm6VFLn9OZ5dSnStmAdKfe7sLcrD8f2Rd8bNJfhxYflQy/KU3V1GaIjA7NOmmE/smIXZULcV3tUzur8858Ln++icU4KPWKYfkdpqRnhP3Vamueul34m5kkaCPcBgz772Ep231FC3ltO6BfrFteOyfVcPyPjBau5Y5622Vf3qOu5ScZ7r8yqaylba3XPe6TN+5SiWb0dHy1UFwFuAy98XU15s3MZ57V/ocp4u+6i1KbLuTK2H0GKuN9IH4RhJyi6BKrnKTcG23a0fkHDmBVPW4pWLnGo2Qr2b9ZqpH3nnJAtmtbt3YNfveGqRUDxbjn0riH35lCxbwav1QvD0p9Ps9JXmdqirJmTPiztXRP1Qt+ayMen1kSFHWqvyba790pJUNcDs7aL+ZrbSdcmsLJvqt+SrTYMtf1C9yK/baluLqotK5Fj8ahe3F2bzVtnYTVpuubC9kmsZQaxRmc5jBodvuyXjR7U0LlSphrV+qG40vdiN7XrdprRAjDKQPsyiTKMfFZclTcl1pHlv5zwNfC9L8+x372kyxTexmxXfGRvL6oLbZnGf5Yf3krn95+sW3b6D3OrGfWs3QWohoAALQKyhU/Xz0/dOX3gZDyr9o7YjvIZnZV9CYD6cvwn45inYUSWp8UiL1IZtmoQR7AasIoUtsxUZgSoWcgazuYrqhTqJWoMDXssmAHyF81tq0NjBHdtQAz6TUpNcz2KQRo1wsoN2vjbo2HSNn5nwVKFwZiLlOackk3qYEw27mNaOgXxVWleoy0aX/Mvikxv43m+R2dokYG7hpnKZH4M82W5MwW73j+7rmqJ1pXIXmXrtJCvXbDlxSQgXu0S3M9arr38lSHyyk5lCy93jouh9FyeCxaO7+PKZAeEfU4Z2juyQyLutbINIvCTPkc9Z/twA0AfQB9AH0AfQB9AH0AfQB9AH0AfQP8fAei3yA0A/l834Hdp5hZBXaIL8M0d8M1aDLmfPh6l4iZM4o9HM+/jUR6K9OPRJ2+RFFFAMpGvmC+TXkRJEagMrjaer/4gk2DpSU4AcZbTbtqj1CYaUQ8Fqm19ZyeI9SLM1pG/ISm7lbF2IkrzkAMxcHMHdDXJig4ycnlhuESUNWPqMUzQqgP1fTkshpBBazQ5DOzX62hTYlWNowjx+otlOaB06+6EFR7VGsXZKZrfrjcHZP4XyPc9WmeadrW1HHYGAVWukswdHAa0SzcYBI7/IM3MwQLBAsECwQLBAsECwQLBAsECwQLBAv8hWaBLc4AG/vppYEM9t2nrGrVwEBhLMndCGCnolZluzUDMVvvGsrSBLxpEqhf18dxWfyQiHDnsAHK+0zzG34FzfaV9mw2wxcu++2P2oXRWRdjKt9pRLpepyJZJFOgVImsjdbUgAV1tWwug4LgphH5XtKj8hLdic+IKszB2Uq0HWGiSYR3bQubYXqJHMKm0QDozY/pYCkRTFJcgERkDkJXP96LGG4IffN22KiUFLTyZavWogzhMN3F8J9JjKlIJMoVU3bnuYXM9DcrpsX9RG32Ut1mOYhvrev2Cp9+QO7OJscfrI2BkUILOYddiOVoxrVyL9NiU4pgioovcM83s6Wam8EAf45fEkc2Px/pHfe+7n96InC7WUclwmCDTvzJ5RMGxMumh/D45pmXyY6zT+cbzvSs/E+xE8H95SUyQj97J6czlSkTJPb2n85eIzfeyXAii3vYbV8mdONk2O+2MFDe7ZXZ4wNhRyMHcuHdX68bHjqKAIoMigyKDIoMigyKDIoMigyKDIoMi/0NS5A4hApj864fJbTqbxfgDz0cUikEE7/zFrX/Tas1HBoxDEJSdNP3vVru6FxbkCWUzuQzqck7RNqeT9/WmNyLT6MO/JgNN3bhWMNs0uQsDqS7lhl/WeZ6Ff+/UV6ptvA/0nBVwQi8J9fdWYfy9iG/yZYWyVSZ/l+KpOYVrg1NZqStxnaTSkFTLU/mDqd4yvFlSI+zAoDBXX6DSQLV6V2en1p7Uh0U8aGalPq5q7optoSOHicToQY6/ucx1rnI9FFTkLl1vRjTxgzgzBxUCFQIVAhUCFQIVAhUCFQIVAhUCFfoHokLdmgM46NeLg1rVc0NbG1jjREDzKLkX6fwqKeJOhcLhPb+nZ71v+dkDNN9r1KfDYM/ZQgM8aSkv1dZ6XqlBi8aE0NY+jkFfNSuSPyu7QH0bLu/LzDo6efW0d2i6GzfFmspR2b0ZR977ZbhYKkMy1uSS7JF2U81AF6dxLEFpnzTPEzOPVMvfhhjqpTxThk6XiZGXzSJ/r25TM1nJglcKVmnWjC94Iy9ymkC+YhXJs4h+PFMEQhEA2xZL29GNmLSrXaX8sC3t1VwwrJ74Ks5Feuc7LtfKcj/N+93vVhejH+hV981uHK+Wf7avcdOtG6rS8McXcXm93M4uvHwZt1w5xwA2DrYX60CHkd1JdXntbuoeTurBHY4rnbVrgFkARz/mHmVtFdjZLHlpfV01pPPEWyzpHIGAkO/dhHci9tT+gwwzwyQwwLFaCdX6eerHGXXHaqm3jGZrmFldvntQ219ty7pfGeM07Kn7iIA02D3xl7bznkc44njpPt5Y+2nOC7gccrxTk1FmF0mcFSt+XRqX6kLrUNfUxk/Fyc2J94TPTpipP3lGHLBMKfN+LkRK+FidlIQZUV5DbSl6iArfKo1aMxGJRa6HlyldmMk/nShhrotWbtta/R7cjXVuVc80XLtDhP1FFIO+XyaZ8LJitbLDf6dC4e+s0oKqoYLkPo4SP6BmOuf+zia91s7nREfx5bYeXT3TxR6rcvTxyi5hXFPUUFXVzfIk5ROs2F9nyyR/4olVKOH7197/9/96/h3FQednqEH89Vq2h91y//Nf/+3JHT0v5LG4ExQ3ZiHo0UVOxwaMf092t8s9Lm3t9RZOHQVmWWNcqEPQsi1kYRsddZs/0PZu2ukp9KG4OmZj8ci/EpGZK5tlTpN7/XmuNrnIvJskz0X85NlJaXhfzbjaI8fVo+yPY2qhvr9V9B/W1PBfP3jXqRCeuElFltWrcFb7JNMES00fdsxBHeO3XeS4V4aGyOE5g1wG1rqbcsjwJK72S7L5p9O2sleqAR3+XdBcGuaZiK4/xiuZrXedJivlJhPKpSDjcCY8mk+8b5N8aU/7i4Tc0egdo7G02uc003AxKydveer22W7Az+xDQXNPeUtCtkzuM14QMtULMq+IA5F6SUxnjqkgt4j2Tu3HwcfY957G4sbPwzvxrDEm6TG5PMnUZObi50LuIoQXi1xtQ2ZyovkY69R4HsoSzw/+VmQ5XahL8sJ/mNFx59oPA5VHJk8kU3HnpWJBRfCuxNK/o5re0jfZfIyTfGnCY1ERuDF+yIS38DORfWP3aV6xk1T5U+WJJ8csTZoi+JN8MilyltDelR8H92GQLz/G9ddoa1zkwlsmRZqp91YioyI088gEz8FFnMsnP8ZJka8L2qXdirj5fBiXP5649jnTbAVkYnPzNQ/ESKBerL7WAT1HetMwoJ4hLAJgEQCLAFgEwCIAFgGwCIBFACwCYBEAi4B/HIuANoEBU4BfrSmAUxdLwZyGCxl/oyGTjR5tOQ0oN68K7qt5y7y3NSSQefMvxnuhq5tWCtTIp1pfUy2qZTkf1UBAYyJpPVlqThaV83f186/0/F2V/vDO313N2nH+Lh9/nPP3+rgbcP5uVjf9n2Zj0XYQt7OOyWdi1VbU314N1VS2gcnhKkki4cfVUSofqif+6tqjpptRA/NNwpmEs5Ym91P2wOL3ObBM4Kkzv0ykd/SEZL3TGHmtuZptX2/wHtRLNZqZtWWFXB9xGmVURTf5HAhlrBerL2Wc2N7zanuDMoIygjKCMoIygjKCMoIygjKCMoIy/kNQxjaBAcr4q6WMTl1cCuYD8TpQA/LQvA5cxTpQeGijuV+v18GWCjwygpvmdWDS26/PwTbMVvE5SGKR++nmzBguDljf1Ls/kM7V+wIrIRp1fd6XX2RCAu9EuhBxPq0UygFzF0mpdh7zppy27Tc/yck/DVdh7OdJatPBNxIOllanpb8wYyYmcdy683KnN/JjWBugoXWwdoFDG252tDZfpHcdOj/i7Ei7UA9PuEcfmSns0zfJ1sHziz062z5KY43uAwnDbK53GZG4E1HnscKrzNOa5Ht+uDFxpoX08LBsn+UErs6uJGCVHFTlO/P4uGDLa0kcbaR1N01zh7zUVs7pygp9maO6ck19dWEvpVa57AXJqUVS4WfjrwB5L992FUwmbJbNskwnFXBszWg7oMflgGlDyFbbaI5s/akGk61f+hBlO+1urFyfxztoaX1Wt6pt1VZD5MYa0D5FyKnGXOHhbi35zNVGDQO6ClrfcGE2Q1lHr2vfUJ2Uxd1eSmfh5FGMdsyi67/jajfbsgFjddqYIreeJJsx09qLm9+3+WFM3SvHi1u3SUftay9WCKwQWCF+gyuE3q13rwwH5bXftWT8xhaGRiCR9nXBoRmtBaGhqLAgYEHAgvBbXBAUg9myIBwSUN26INBwmG+ZwMh7vOUbsmf5qwvZ41OKU1IIyzhSF58/Gdmo5nkaXhU5B3z4rS1I9bMm3fSdS5MDhB71onRYpbBKYZX6Da5SLirfvWI5OX7dyMo6vXhuHUecWlZfJplu+FVm5z31KdaKnMavRH4vROydsunv82db6Fj9qBCYrGvxcX3irnVnyyne0YDzHCxEWIiwEP0GF6KOU+Lu9WjYdVzl5HMZdg4h981b1LRspSaCGcW8ysObIikyDvaUUUMtilURyRhVIgpvwqtIyKu/Z56gS8p1pWRovTDPvOQ+rixy6zThYFOUxHUYRcf+MVXx2cyOftch2RYJfQysZWot0/d3ta9evSxRjrYZEGDhwsKFhes3uHDV7I+6F6u6sVJTN5moqNlWaSTfoVrK6IUUgTLbJoQgf7YuGbWP1LV2tNtiHr0uchrIH4orqzEa7tDw4f3SPrzSm1L6r3U6cunnlO9bf8NdcnBz+wP18h92Dn0KCKumt8zqYVzrx3McYNv8t+mV9CDIzDRhIk43yrJ/HwKrjMm6TxF35/LLbiv5XDvOyMlzXv0cO2sE6f6Ye9pN95080Bns+qFKXZ/y5QJLa0XshfEiKliQUKmy3F+t/8TvhnGW+7ws50VKoYXDzBMP/iLnHRhRupswjilVlVk9kw+Cj6mocl7Y7M6UHk1EqozRhoKMh3dyB9rS3I/S41oae6szS/82Fg+NNqYQIrSOy32ju7V5mqZP2qOBaQjYrat3+alob+Qs9/PCsQxZppH8sPSe4HAoxXqRcISNT5V5hZKhxSsNyXUivk62Tbj2ynlJb72il2gnwjnOd+aAfMbpeQ0/ZNdH1V/SCrDDjUgfkZOZSbHk6MxPMvnW0s/km5kSUuQWdy1Kp7g5tUBQRKK3uGIf7e+E0P7ZH1QCL+M83XTKLfLt/k6Unt2efpXeUiu+2XWtxCoZKwEuZFpGwr6mtOotfKFVnYwArvL3KF8ZIac2f2dPtI7NTrw3Sa4/xrV8VI8Pddn5zAv5QxntyJsIJRc4ZnvpwSi3vEWezBdJRJdgNPyrazq9s4MVeeKdl+l0VPt+KTgeeZhlBY1wVTv38iVFD5Vy5efhwo+iDe+Q1F0W5jr0zL/ju8Q3vONfiXyZmIhDQSGXTBO5QwUfs3d7uomeZDJ8epikco9YRNGs8aTeUD3J9AatbEyqlq/CYoxvylc6lT4N2aMFydag0oiy9VWT0LY4ulNdUlxfCzld6M2n3j3byX6j4mvpfx+zXvGIzKVhIKiDZiKfeRx7/j7MRKXh1NMqg/pT/oLFhnpINT63cCzyOdXfnq71/GftKUXuXfJT20ZfeH0tyA+3PG2Tq5AcwNxGcidRX1jKRvdVUr4emvmS7ptJud+deGdKBSTX3ufTz95SpKJ6rYlZ+XSe3F95Y5BRjK17esU6FqSEvj797ExENy9PwL7HIVfkrTsbOxOFPwIhViKYL5JiPSSywjk//14EwlzX0RJ8pHSdDvyN84uZI9Sv7TNU6x4PvRvhmCfehd+8aEhuiDfGn5brTN1eEgJrw8BFkXuRxZLuM+ARbl/9VeKGwN8owCwTDDPvhnfCNBJ8NU/zB5lxCpGf5c1ihJmjAPSUvFWk0Ub/+vVz7mln6zSMvJXw48yx5ZF7zkxPb1+f5vKaompyspLjg9ic8fsdoWzyZSqyZRKNRmavdFLepUnKhEIyp9nD8KvtidqyI6g6EffxIG6ZWesYbXiRS5zSo9w2WOwsfIUBdtbAy5I0L/cIpYzT3diRFNdak6OWOvcM0VJxP7FaoO/51uBXKyyr91ttpydlAj08ak2LtfnTDmwl24RhREs5fFZHV1/hxIGN/kt7T9cPb+nnBv2O7eVq93MdiiiQu2Z9NkFT/7V/l/Ba8Nk1xj+3HGZoq8bhk4HDl76lfbSdbHfz1AMdHETrKCeEEa3TvN2wrXXUYr6ldWqXTx5C69AhOq2sdgHmi6Uf3wyI0GQzhXN+l7rLtQxL7AobZLfMmafKUG0EWQba09MJqXgIszxzqlVJrfjpYK5h+4AlQRa4cqLw3qSyvfiXFuJX2+J72nCrEtFevSRJYebRDC21sPeWkIbaUdOeO/auRU6gwMuXaVLcLJvkTqaaeWfvXnlJqnnIZ0aJgZg3muEzZe5zmHXvnouSZbK7yKOJnwuR9TgoqodJMnRfQXsTOKkt8Ec1NtJWorsdQxqGVmFf7RSrmwi1QJkmq6gLblseNvWNS5L02jO797zNfWrLXtC5WXKtE67ZsXtOsE/rHEdxv8yO3oj7Mymmw/jmwyZenNflQPWwjhFtINxb+j7w4qVOgCGmznmu+NSo+HplBd6pVEyIweoS0A1AdSLeO1MW10grGUJny6m2rRjH9Jvi3oj75l5q6x70jbiv7KP6vFDdOfZ5w46Ut+1RKxTdlkfbNpB7i0TTbIutoWesGm6NNWM13KDgMu6eMCaaTFcj9w0f0+xhv6hObsLMtQU8t074yzHQdtbfnxQ0RmdnlMIuy4DjimXAV1ssAw7ujH9QqNjGli72Xn146/3uxfM/ejohT75OuxZfQUMTVJ4veQ0DKv51yHS5NLa5YgskE/76hKMz+qt1RJ/2p6MfPlyY6ITZ0acpFjVnsXbxq5wvLqSJn+yRoo7jPYVBy6+tIj/WC/r89OT09Gh29Hsu5KPFsXaEr3YeuMnfqPSmpcsqltFRarWtV8pVsE8cmX0dpmQVlPOOLbmeWxUeuchzit5ZzsfDb6+9tur9qI4o9I3VUiCp+mTLpIgCT5ZPfzv7SFm1S5J6aRLJswXdCLF4yNuO2IuMxxk305xTL8+7Gn8doE341Zflm/30iBpeZY6lPaKZWOvmpgN3SN9GyeJ2bBji0faoXLRaReretGuRzvkG6kWS5fMrPwudB+2Wx5THd6WfJ1nufcuPu8r1VN9G/cyjhD1OmLoNG6ArfeNdUbMoS6/4+O8iTWZmuiMJps7FlMoI+NgpZfGrOpm5h57m9DVdoUxls3IsJ5rmN1VlKSeg8qJwnn2qvsaj+HlfP2Rz53VWnhrxEFG3exvyYZXenBpmWbIIuT3psNUynNMnzvYxtpUAl8BcqK5nb51sQcpX3a3+SgrmwCt3Gt7THz5cPKML1muRqic0lwpdzYaqbc2msuI7Vbj5krIBLAtTPnbWz1rD2Nsq3q24v8bvWU/Hn6rqo7btUpux6j62sRdrs/52zCjb7MCLOPy5EK/k45JQdeirvsbi9oVM0mY8MUd1TrPd2jL3k9Ldz40Cf3H06VPV7l2Nq31XXI3HznqrcTmi2lyp59pNvllpP4o6F3SzmaEafepZpbOo6YPxSp3s186HpKGGdqegy+w36ivri5/qnHD/Iffb1rozL1K3kfWOg9xW88aGfcxU1bqZ122fSFrJxVH80Nr0VibbpX8n6t9KWak7bp5pNyesOAMYhFe5Y6X8E9+0kuk/2devsC5or7l1VU2fumv7YFN3nrh71Xu3jkk/MjHmG8vc/eNK2M5tvkd71Eh7G3lvtf0LG3DVX6iZiHBxZ946ybLwSg63VRHl4Vqnl1W2G+pw4RBDQW5bLbeHN6ytmXXixX+M0+R2C/fM/Ye5eCCDls5ucOk/eC/lY8rciw2q5vx6THcBjCenZzo1j3NRqbUKqqRmz7XwowW5ZQov9x/KHZ0Rix73UGnOFsZLkZIjDQemqVpbaXs2+Tz1HdJfqmdr667MNtOqmMBRS2jY29nF6KPYX48qrcnstEsBrW9ZK0+tszT7heowd37kp/6l/4Bec2C9Rn6Z9n4zs74JH5SoK8LGLMLlZyNBcs5XhO2lX7Z0P9k5v/UXt+Qz3eyNyv1rzsezdOhC0afyrLNrKq9F76V6x3sp32m98VP7mJHq8XROnsxJ70QIlF3TQWdpnhuLe7I5peNSUpLyedaSqo/4QZC1P6kFeS1D1zJnMpdHmIP9XS5N4dnNxI0fjLfIM+VtovYh0kmxrL/PprTafCAkJ3r59U68b4398YxdefjW7fKBzCvWVOuvnxtTxEBfm0kODZzJifeeIUNS5NoVssjIPSVXh/icZxSuwpwRxiYpUlLe3sLPpBFo2VoidjqS9Wyrl7FbTz81Ph/PbLL3q2unRZRkigDv1OeGkvUuwxYXOHq/pMJx4q2SVOghYTaJi4VY5wZBVRqPEtH/clvS34Sxl4prPlLnhmBbB2oobmxlVszFlC2p8I/ZcZcbVs2A8sTjj+H517lCv0zk6JNoFx5dQts7cQLa0Y6LbVjnbXp1fCNiIa8jfnVRHiqo96pq3DQZIb5FsiZL4berUB/6GLMfrjY/UKmV4vcmdekEY66x2kF9zR2p2yquMy1r+mUqr42daE2WEnu8k41JSd2Y51DzaqHzfiJ2wNEV9anyp6df8bDPwqswCvPNV0q9BsfyEq/sn/Qrx+Xq+kziyjxReEDdY83TfrlAGYOu+rnMZh4XK5GGi7lxPfk37/npqXf25sJbbebs/FD+9q/ekys/fUJHTZvKX6+T5MnRp2l7kNrqWF8BqjsRs9dQW4/KtaA4B977OXD2c9Slrj/83OQSZ172c6SPewNxHca6wLK/1w8RP7z8/uX5pZcVq6dXm1xk8yC5j6PED0TwzPvu/dvXusP/+OeX7196+td5thYi4E7qZ/mTo515frtL+S0VzSuLdvRpB5Fbze6Eb9n7pfbM2NmqTKL5aax/d9f3Q7GiB65q1ZaWplnOF8FPnBky7jzKcrCMxGoXuTY5VGeDcopw31DcmC0C65dWT66L0gjPYf+tN3pux2D+hOoRPoTsUpbSGpCP0O166vz5VNJZCD4SpG9TddEJSifLKV8lsOpfqUrzW7RePv1G3J8bF6+6ZAzqSrlt6JT+XlIKN9uC9gtynlFTm140pSWmIgtcEhmLSQViqZ4LVDv+n8++/+7td98djbtZ1tR8nMGdfLfOFO3eYYWueSz3j7Zy9PH/6Kz/L/bwCOM59333yuzw13v+4tR22OucA/UYehV7r2Umzs6jlJ3sGrKfPMms+D467pV8gNUa9S/SSE8tf+cwls532bM/eb5aPdXqzM6X0qvu41ER20l8PKp1vecvPkl/hXk5SPq3zqn+v76N9Np/8N5bGXW5LJReilbRZPPZMlANtStxTapR+oWLh6VfEFj5k2oYd5NQa0yat+oTizV6qzOXmpnsaWrbEXd1KG09xjhyDNh9nF3UR3z3yYV7rrFaxTGEx7eMNXV0tU7POMjd8Y5pejqdHdETz4e22ZZQmd3zO/9sRT6CWNmrWGnb/q/8h+9FfJMvj775vZof9b+f9xAH12TkZyuEhRW0Sqz80CmR6pkaTiffsMiK+nd9q37nR2FQIhN+bcYmsWqfQ58kTshmdqGC7MmzEMJoeRre3JBVgY5PoV2KfPOXGz8X9/5GHR5z8lVbKV714o0zioOXioUI13lmmO7fk3j8uYd+v9kKOmnbPlhdbiG8V2dvrCeoS1z5hPY5wo+feZ8/Hp0xBvG/+j7J5mfxjYhE9vHos3Kls4NsMIFVJ0VPMitfRR9Frl5a+DH94cry8WLqaL6URo9fhsGdxV6ylhMKfcb0mCW4ZJCN0zYznGdq61zCWAZOm4zkq8+xlPwo9C3DvXNzYPdDJmxKRzEP5bfa2LaPMjyhOU6pmntz48vcpIWI7KPmvGpCo71T3V2f2LWJcU0p7dahaAxxSTRVqTIvS6KCXi172oc8DdeijD1lBpDsDJblY2JFT1GnVyYD1d53oU+D2NkS/Sxmfi7Cxe1VktxmyuHsZJGs2GmOijmXZSn/rQok3dmyImSg6AcbEW8xnam1rXuXPaQ57OautYY6GE44zGguFIOQRmGLJI6li563KrLcuw7TTA5RJU1Lp0eaHe/Flb9eS8C1DHm9mftBQAGiB8QSkC+8iteFa8m1omM8QtKPZu7V5bthvmItIFEZmCYOvCs/IrpdHtuInA51zHkMTawzs9CoX6tOrvaj5rC+PgP0iSp56T+8cvkg7zEK1Q+KSJSGfeG1I3xS1US8uuL6eU7Kxrp5yncGn5pR0v6dHzIk06GnjP+vvdh9pqjWn6XTcbkj0HOMJ0NWsbE1mVK6V7Z9hJ4a1XqtgaeMSYFJYevzylag+oLSD97KJ58bYgRpQmFK6AUlcm1L/Vl9vFBunm45s60tnQPY6IWGmt7nuC1fzPZzHogoJOvX8e41vPu70MmoIdcI5NObgTksSRxjMBXrJGW7kfE5vddp9MjP8g7ONvFiQq7dfrqurI3Km/Mn62co3lANg/yPTZbeS5llY64vn5Dbf7VQuYYWd+51smbTLdmlM9F4Tffh8/Mnar03U0eyWhVxqVTY2CDJ/chiS/XUpNFLoCXkOg1XfrqRjz3T+3DxsKBzoN+f8nhYhiL108VyM3yx+LN+1fh69/G10hnS1OGlIpL1W4ZrVxvaG7qRnU9tubZ1uXpR9U6tkmtjLVe3YSxo/ZCLg3Rsoz1TGTqLTawoFN96LSOVNNaP2q54GthTB0RyANRQjCXErX9+K7cgl6kfZ75Z3mteK33dRM2Qa99th/EiFeyST82u/9vWt4puPfbxniX97IM+9ixQPKUkPH6aFLG6DEBQSNOJ38k4F/FD7g/l+DLy012EK7KQkNmGi60neeXjyunoJk2K9QSZaBVAuRP9O6W4/ejWKopyPuGiyND/7GVmuS97YVyBAruvh2EEAytkVNe0mpl35gz8xl0DYoru/UUm4vabk+4zJkeJGDNv5eeLJc1TT8NYXiv0rFod48NhVWrimWm91tXe39253QOAPxYY8sEw5Aol/vJD2B5qwwbZKoyVn+Fzh9+hYxB2OhfyV7MGmj6AD8LMX12FNwUZ+le9xrh5Gr6GqbjRkY8oHrv2D/ukOQptSebSVGWLxY22EvGkmQi31g72H4HdHo4SdQ95OZzlUP8uSpiBfVtEt23xTZJARFvP1K6K6LZ6f0ogIrcnm44wSn2fE/fUedfDcZb7YRyJLDuO/ZUyEFhv8mVl3d3M5cBQvntW+fhUn0qidrRbIwcU0W0ZTQnz2SPPZ2ae0r7Zk2cl7WztDKBinRHY95rtxDDPGQDmjOOeeNdCKIud+mw8XuRvW7a3aa7vkrS5h/rG7MApXLa9raKPX9/M7DkWQWmpXYlKUAlJoBxsTEAe7y0hROleYV+GFWWJt/LT28zaavlZeX8jLRKpf8+2hZp0ceCIMuMndniIP9Vy0SE3qDx0XiWtTWhiFoEXEzaJog0dTplXMq1cK5Xj84JChYH/TJZun+UMKYcju/6WBWVRnC9FmJZ0nDecoh6X5ElmImQ3164xH9CxrnUrE521svCsDUsZfjIWgq067Q0xn9f4N+KYDlOV5/IuDV0rUS3cIT90y1XdvcfSzW9lp3gVe2fGcbzpbLYUamqzwtz7HnuTcwCWmaPcqruF8bEqo31LhmTN1Inod+mKbv/Oew/rthI5X+kIMM7aKgOY7oADVGBZE33/yOj6hlk16L8VoIYuyOOr8Soe7sq9nWc04qy3ovOIqmqLsT1yu9oB04r3v4Q7ML9xX9BbUSVaS6WaxPL6JXnm2S8al4mzVY265Y7MZYXukmRtaFguHffMEERdcEfQ/fHrW5cJb5+1TYWZUoW2F7Z8q6k0e82R91ySKttJq/986cr9GObLUEVTqlykMKvVsRFGrTwJTbknBsVCHSQVsXUeZGIxWFdw6Kc56lMlV+mylsTqVs152nYPV4/Z4dwk471vu2LLCjtlHk6tCP1q/bWi45WhImQYNPmLq9yWSOh79Yd+n8o7CM27Wff4mjxWSEQqmeUNZxZhs7hMBLOWWKsqNYfzxcLMTqa6VWHbFK9NUUvjR8W9maxv57QfmOu4PYcjdu1iDVC+VtOc649QLfx5o9c28tOVg4CGgIaAhoCGgIaAhoCGgIaAhoCGgIaAhoB+bAHtUn9T1XRDNbuF9bs0STuvxhgordc6vUMT16ZgA+W1aaARAtvkCYkNiQ2JDYkNiQ2JDYkNiQ2JDYkNiQ2JDYm9V4nd0IC7ENk1BV2V2efFilwcwztpsi2C7XdR9hLcC5OuXHjoMmST8mFI784i9hThHc3XW453lgPCHMIcwhzCHMIcwhzCHMIcwhzCHMIcwhzCfA/CvJdCnCLRt6rvLWJ9sku1o4aH42XdUrix0tzyxB4lyilvyHHIcchxyHHIcchxyHHIcchxyHHIcchxyPEvI8d35d7doayrEvzCD6PNeSqCMCetfk8L5yQFHlCC8wWnyHSBkzwMAe4uW0/97Wqp3vLbnTPUN9Q31DfUN9Q31DfUN9Q31DfUN9Q31DfU9x7Ud7cYnCK+2zV1VXu/vBNx/rbI10U+SXILSmeecEKHIbTtEvWU11Zj9FbVdjbQ0tDS0NLQ0tDS0NLQ0tDS0NLQ0tDS0NLQ0nvQ0i69N0VBN5RxVTjv1rX7UP25Rztxj3fdhr82ZDVkNWQ1ZDVkNWQ1ZDVkNWQ1ZDVkNWT1F5HVj+Ok3cs1Wz10GYpUBK/9PA0fdiKyc05wvuIUD0tnV4o2TGrbzTRYbFfyhd6G3obeht6G3obeht6G3obeht6G3obeht7eo952KsEdSO6mmu4Q3e/8xa1/M80Zu1ahtUzyIGW3KtsY3W21FM1qI/W3KgAEOAQ4BDgEOAQ4BDgEOAQ4BDgEOAQ4BDgE+P4FeE0T7kyBV6R1lwTfnfY+SM09QmuPVNdQ1VDVUNVQ1VDVUNVQ1VDVUNVQ1VDVUNVQ1ftX1TtX0+0ymkbVa5HzqXcYh6titRNJzXeLr2S685VM+LAEtquEw+R2s+kGS29XISDEIcQhxCHEIcQhxCHEIcQhxCHEIcQhxCHE9yjEu9ThDmR5m+pul+hh/Np/uFymIlsmUZDtUKSH8XzlP8xzk/Yh6vRGIUdI9VoTjhTrjZJAr0OvQ69Dr0OvQ69Dr0OvQ69Dr0OvQ69Dr+9dr7eqxF1JdqcKbxXt79KEPs/uD9bXKuEDPlmvF3G4Xq+13ji5Xi8GxDrEOsQ6xDrEOsQ6xDrEOsQ6xDrEOsQ6xPq+xXqbQNyRVHdq76pS30HM9EMKkj4oKnolEDq0MLQwtDC0MLQwtDC0MLQwtDC0MLQwtDC08ONp4d1FLm8PVi5/oVG0o3u4VaFZvx/aXdzusg2Sw9WW6n3g7M4ZJ81Q11DXUNdQ11DXUNdQ11DXUNdQ11DXUNf7U9ctYnC62nZp6jbtfRFm68jf0OZ/Z+I7kGlKRXxw8tsu3WABbjXXKAVuZw4NDg0ODQ4NDg0ODQ4NDg0ODQ4NDg0ODQ4NvmcN7lKEu1HhDXXdJsON1/ZFmC2SIs6nxVCza2f8zameMu3DE+WOQg7W5s02HCXRHUWBUodSh1KHUodSh1KHUodSh1KHUodSh1KHUt+zUu+QibsR7G06vK7bH3hWd9wGPlqwP8glqHZ1+aEodXfpekt0R3MN0ObuzCHKIcohyiHKIcohyiHKIcohyiHKIcohyiHK9yLKuxXhNDXeqq5rMlzeUUam7ve0ak5T4Oo6NV+ndiDSu16svpq71jb95XY9Q+hs6GzobOhs6GzobOhs6GzobOhs6GzobOjsfejsNvk3SWA7dXNNW+t7rVbrJAvzidraBFFXqR2Itq4Xq6+2rrVNf21dzxDaGtoa2hraGtoa2hraGtoa2hraGtoa2hraeh/auk3+TdLWTt1c1da7MBg/KPvwYebgVQNwKF8oXyhfKF8oXyhfKF8oXyhfKF8oXyhfKN/HU747NNbuMM9WP+3whi9d7oO84qulcMNE8chLvlryxvEyRDZENkQ2RDZENkQ2RDZENkQ2RDZENkT2HkX2I1zz1aGsaxJcpAsR57ux4l7LxA5EbcvC9FXXtXboL6zlixDSENIQ0hDSENIQ0hDSENIQ0hDSENIQ0hDS+xDSVak3STg79XBNM2uN3Hvg6jd/iMNcp9j7JRXlbOhr3xbR7aiXaKb4LoxykWaD368d9vd+T8ZXH940Ohj7ZZL70dmK4rGPbd+RJZdvU5spw/7BKfDqL4KRn7ny9thmtFtgSlU6sdOgUUJJqLE4sjNNLESfiP8jOsm7NEkntsroFFRXmdAoenqYXIYyERFMHDfcX2W8il2kFMav/QfzyYd/6s6rHUfOCaMn1Y4wmb1T+bDwWXGXFdOrmFkKJ6VWzntj0jsvVkXk5+GdUE02atlrpDJhjFz4YbQ5T0UQ5o34Kf0/XUsAlv4JtHiZ9Z/KWzZCvRN4eSfi/G2Rrws9gzc2tG/EvXetHldbRNrjiSz3rpJg46391F9lREfpMpc0XIWxnyepfQbwRh4B1ELPMlmmx66K6HbQXmnGr8gjmWu5CRq7bbKTWusJc/wkS1tX3Usli1BRfxZ9E97ay51Z9GzCjoE4OwpoTMwXPCis+LlTBtPsSFAHmyfcw8b0x9nRqFZsbTudmox3PG7jV09lLu82mrIPbCSpHUOnrEJloty9dRAq5TA7ffGupx/GcwoobW536jMot67qtUzWaj8yrhbO3Yy+m2qgAqpeaTWod7bvfdtvtJ62q9l6/9ZONtvtAcWnbYQcAdRGL88Oh/HRK7WxDhgqulvNCqbJNwNZRm8dZkeZ2vvNKx1GfUx1fL6jHWRLZkQAJ2XV2PrOjsoenxOEmPtMISbBCyJTPdeQ6uIxeGQ4R0QtYL+egXvOid0wwaQ+KtUtyQ3ZZbVK8tkR9ZJBME++osrQe5g4MUclqQHVaaMDv1TRZa/BM9L6p8/wPgjLoB4F7Wk1tKU5exsR9SgRDIxgYAQDIxgYwcAIBkYwMIKBEQyMYGAEAyMYGMHAaA8GRgMU4xTjo56Ho92vNBDVLuV8BaAdrpi3izlaylsNOU3I26WBjIeMh4yHjIeMh4yHjIeMh4yHjIeMh4yHjP9SMt6lFXcr4h320ke97EBGKvcWi5SDkOvusvXU6K6W6i3N3TlDj0OPQ49Dj0OPQ49Dj0OPQ49Dj0OPQ49Dj+9Bj3eLwSkivCswxFG3/8NY0V11vTgMsV115OgpsutNMuT8u5ojxDXENcQ1xDXENcQ1xDXENcQ1xDXENcQ1xPU+xLVT/E0S1a44Yq0PNHz1dyKsq3EDDlFl2wWcILmt5hupvislgRSHFIcUhxSHFIcUhxSHFIcUhxSHFIcUhxTfvxR3KcSd6XJH+H7Hs9MF+UFp7yEy23Rn6GDoYOhg6GDoYOhg6GDoYOhg6GDoYOhg6OBH1sG7k7ytAnfHh88He+g8/rB58ikzTpehqqGqoaqhqqGqoaqhqqGqoaqhqqGqoaq/jKp+nFPlXsfJjovHdqC3y+vPDk5xm6IN0tyVZholt02+ENwQ3BDcENwQ3BDcENwQ3BDcENwQ3BDcENx7FtwNJbgbyV2/xrsiusuLx0eqbL7g/CBENQdf76ehqdaw3YboheiF6IXoheiF6IXoheiF6IXoheiF6H100WsrtSkatxSvTVHLylekCzHxAiwuq5TnMrUDErt2sQYoX6tpep8cN/LDqTEENAQ0BDQENAQ0BDQENAQ0BDQENAQ0BPS+BLRL/U1V0w3V3CKsd2KgbdXisMyzHQUbKq8Hm2Y78oTEhsSGxIbEhsSGxIbEhsSGxIbEhsSGxIbE3q/E3qVZdouCljKbtgYOMQ3p97jSbyeii/pCQ3O9e+VRBxNZnh19mtQ3uYzVLsW9RXYcpVmafScrrkyht+xLP1iP0v7Uraja3q6rJltR62S6UzC6WSfVskfWyXphQH3gOhSp6WUqJ/6qWe6n+TxoWwNM/tckgfKjb4740a4x8IFS9C7algPO0AusaVMXh9a1OCGTieQuDGhhC8S1X0S0VUzUe8k1rfNentD/hrFcNnnjINInmUfbpL8ncUPWvzh98Yfj0+fHL/7Isl7EwU6r/DIO2issSIj3qq6tlFkSpGLlh7HnL/LwTnhFnIeRFwj+J4mbzlpOGUb18dDs4+5+Wx15erhVBt+ZUbTNYThpSeQlWi+FNexQymju8/4qKeK8K5cz+YQrD/ky5bBIRUCK5Sb141zttNSn0hnTn9Sixznfp2Eu5sn19Ty5E6l/M16E/kgpeW+vr723KqXGtpPYwiWLRpWZdyU2iVoYyiahvQGVKxe0ub6Wu4Ou3rEoP4FqSed3t750Sw8wWLz3NryRhGXbRpu2kBpgFcZ+nqQ2yH4jOXZl66KWQnqMvbPG5fpLS93gMQYaDxoPGg8aDxoPGg8aDxoPGg8aDxoPGn/wNH7M+j2G1M+8cpxp+cafpkR2MxpK7TCfi56Ka0HJTtk/vtdpOLf+Xp76cRaSO9OrC7mTU2JFT8OmDHYxeTtFai++8fzgb0WWr3ilUdguo90/sd+FH0Un9ma43GexMKRtRbZNebZxB1VjP039jQPEnllZ1ev9fYMeZVt2yy9pUhFxnm4IXYaxlAEiPdabUomMvHWSRAYb8UykIZH3XoKWzKspA+orlT9VBwAtKoIEY21T3NiFi1qFeAssd4gsOMtPY2+kv4hbo6s7bCFNdVdH9cClYi1VDtOmW+1dy0AVW2uz2VF9r9Qvr637oFuhtkA08ek8dO6ZLA1tUqkY3qXesm7WIY21DYstkVaOBkIRBRO/svqUlSo7vxd/jsYHOq9vB6pfS/eG3e8+9Tjfwe7z2oxSZZD65fV9TX3Z89Xwz+3+lvUtGP382n/gq5sa31EqimyeJ4Za1fCfme/r7VOfzIs4/LkQr+TjJMi6mvBM5utdJgZyNad8PqASTPflB311wXO+tQSXK5kSR1mNWv2kMOrzo5n6rxdHnwhfWTVX092+K65kfGe9WcSPqjZX6rmezJuV9qOoU+UbQUY1+tSzSmdR5BLAmVCS3io363oqD28GxZ1IN6Vo5GXPOvZS0j3KRdr2lbq2I9zFvuPXG9+vW+DLHJt7sCjM+PuoMsltWCByka7CWKhPpVb9+her1Pxx97u67XlfoYqjN3yGtZuNMBds6d+J+reyuYMcRPq8pH2+NycnmTwOk+DFQkz2nySx0X+iTlv+sbPvycnDeQ7jqruaksu686Tcq95hNtfIJRJ3IrJmhnLIGISSeZqifM8PO48D5bTu7h9E6mTuvMvVKlYDxXwp0vuQ3g6bL/i5Ja6Ex8Wdeesky8IrOdxWRZSHa50eTx7qdF/PYEdlgbYejq3U6mLPCWV19P5CPTXfft6rVitPnftuOwGtl7SRVXXbo9dCtTKqSw2xMmJlxMqIlRErI1bGHa6MzStzXSujurSox8qorpvVK+P040I5i8pRmoo7ERdCw6kw8/T1tqYd8zwNr4qc2367bZJjZa5WtSx/bY1W7SbX6DfFSqR+tAVJ5P7DXDyI1Trv7ICX/oP3Uj5G37LIk5Wfh4s5vx7TIa6bC/Q5/TzTqXmci0rN0cOpk3Lv1S8wCFr40aKIiGXm/kN5IqUtKk88HhuUK5HopUjpTJA/lr9YUHsec4fWlirqeeq1xCvVmCLrszQM9CG6fNG8wouA/zBXZpBpV+eO5WexPx1V+51+dRK+sr5mrUTVnuLsG7LbKJ9w/0ZchNlCDy3s8rDLwy4Puzzs8rDL29Eub20WmnmgV5ruHZ/rjW+sr8zGBdZXNo97ZimbHZG9+unsiJ54PnwntqXQ7vVTLayR79h/wb74EFy+fqlVfNyEemEl4bChSNbyk/LB5bE8XA886zFj9RH5cu1So8tMISuxSsYXjtMyM8xrSqthNZUKcUw+Q14uHozNUOb5d34oTTXVMqtniXcX35mP9ja9Mn9fJ2nuS4uIWORzWuHcHTiMc3HDw1bz0G++/sPvjeQ5+ua0q1JvRO5dctrOU20yBaBfyzVWmX6F19rW40rk90JUK8WeTrpWYZYV6k+6u6vn2GxqkxQe1UE/rZKQtgxBwQ3GScyUZULIu7LTx/efNaZeNyIWKR+e0nix9keZ/Jp0lqp7nJzZe1usnAUBTWu8nr7zU3+V9dnp1hbi5seTf7asC6l43qtydHhLP/PWSz8TmVoJw3gRFaTP1JrtL9IkY/Ns9VxjcJWOB5Ef78TvgAomHSKz3M8Lhwyw7DXZyYpqnvrXlTXkg3y3xe8wLyo1ob4kDc29pyJkgazct8i2n5J+Zpz0LPs+bjLbM1G+VFnRdRGpV1ALyWYcsY9Wa987en/QRpob9J3MtjusFms9YeZU3TPYLElZDJBFPNkQ6f4RB7ZB14n3vfDZP7Fc7aj7Uc2NWb7eTVHq0gmvTGBEu6jBU250WkZQp4qyStCYICx7tVFDyTZ42zaedmB0Y/nkqWmotrOK/NjaS31bRLeTvNOuiuj2MLzTqCQ9vdOo1vBOg3cavNPgnQbvNHinwTsN3mnwToN3GrzT4J0G7zR4p3V5p+3M/cnWqx3uT035Xmr2qo6nKUMdm06W9DKUnz72PRx9bxdrgNi3mqZ3hPlGfogvD2YAZgBmAGYAZgBmAGYAZgBmAGYAZgBmAGawT2bg0sCDAUIDFjRZwm5urSuLfGC31jkKNpAoDL+1zpEnqAKoAqgCqAKoAqgCqAKoAqgCqAKoAqgCqAKowt6pwpC7+9q5gvOyPnrgvFhRkInwTvDCJQLHFUBjGMPCpCvXWhFYsWIPgzZ0FrEnd+hovt4EorMcYBFgEWARYBFgEWARYBFgEWARYBFgEWARYBFgEXtiEb108iAqsRU6dPCJyeERHNU5nIgJLYUbSyOsqAqjOATlDQIBAgECAQIBAgECAQIBAgECAQIBAgECAQIBAvHlCMToUA0dQKGkDhd+GG3O+UJgQhP3tFeYBB0CSnAurxhmesJJHgZzcJetJ3JwtVRv4uDOGcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwGFPwKFbEg/iDe0oocQNL+9EnL8t8nWRT6IMdGNrPk84ocNgC3aJehIFqzF6gwQ7G+AD4APgA+AD4APgA+AD4APgA+AD4APgA+AD4IM94QOX6h0EDRpAoGQFuw3TcKixGUYHZBgfhgGxF0ASQBJAEkASQBJAEkASQBJAEkASQBJAEkASvhhJ2FHAha1hFtQDl6FIRfDaz9PwYSdcIecE5ytO8bDQQqVow+iC3UyD+UIlXyAGIAYgBiAGIAYgBiAGIAYgBiAGIAYgBiAGIIY9IwanHh5DGZoQoYUzvPMXt/7NtMAKtdKvZZIHSRpU2cagBqulaCIfiRxUAcAcwBzAHMAcwBzAHMAcwBzAHMAcwBzAHMAcwBy+DHOoKePx0KFCFNqow+5ww0FihhF4YSRQAEgASABIAEgASABIAEgASABIAEgASABIAEgASPgyIGE6QHCTA5pIXouc7RrCOFwVq51QBNoi0X5SGl7IhA+LKbhKOIwwNJtuMG1wFQLsAewB7AHsAewB7AHsAewB7AHsAewB7AHsAexhz+yhSyOPIRFtsMFNJcL4tf9wuUxFtkyiINshlwjj+cp/mOcm7UNEE41CjqATtSYcyScaJQGiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKL4IoiiVSuPphRO+ODkFO/ShHrk7s0n1irhA7afqBdxOKKotd44QlEvBvgE+AT4BPgE+AT4BPgE+AT4BPgE+AT4BPgE+MSX4BNtMnksnXAihxJO7OCWi0O61mLQPRaVqysg/yH/If8h/yH/If8h/yH/If8h/yH/If8h/yH/H1f+T7hrwn29hPwrTRz1qy4nKXzJJ8pN5UEp/lrZBhGAakv1Nitw5wx7AgAFAAUABQAFAAUABQAFAAUABQAFAAUABQCF/QKFFkk8AjC4UIILN1yE2TryN6R3dsYbApmmhAAHRxzs0g1mDlZzjYIOdubADsAOwA7ADsAOwA7ADsAOwA7ADsAOwA7ADsAOXwA7uHTxSPDQgAou8mCiL1yE2SIp4nxaCEi7KiZQBFVKpn14HMJRyME4otmGo6iEoyiAE4ATgBOAE4ATgBOAE4ATgBOAE4ATgBOAE4ATXwBOdIjlkYyiDT/YqOKBFzJ1waa/uPVvphpJPMhVV1/7uZaJHgqccJeuN5VwNNcAHOHOHBwCHAIcAhwCHAIcAhwCHAIcAhwCHAIcAhwCHGJvHKJbFw8EEK1QwSIP8hJN8t+4p43CNOigLvj0dWoHQhvqxeqLGWpt058w1DMEWgBaAFoAWgBaAFoAWgBaAFoAWgBaAFoAWgBa2BdaaBPBw5iCExdYOEFfvrhaJ1mYT8QJ5o4LldqB4IR6sfrihFrb9McJ9QyBE4ATgBOAE4ATgBOAE4ATgBOAE4ATgBOAE4AT9oUT2kTwMJzgxAUlTtiFJ8RBOT4M83OoejZA7EPsQ+xD7EPsQ+xD7EPsQ+xD7EPsQ+xD7EPsP67Yn+KF0OJ3oP68w2sodSEP8h7KlsIN4wAjb6JsyRtGBOAK4ArgCuAK4ArgCuAK4ArgCuAK4ArgCuAKe+YKu7iLsgMoWNRBpAsR57txT1jLxA4EMMjC9AUKtXbozxLki2AHYAdgB2AHYAdgB2AHYAdgB2AHYAdgB2AHYAf7YgdVwTuMFTgxgIUJln7mwAJJGojUWmLCOBc3IrV2UG/5iXrTXlDQhFUYqymHk6Hm0l2YcqP28r115MdPMi8Kr4WcN7zn3r9612Ga5fIx7guBczZtFEo8LKIiC++E8rI4+ua0q3dc6FTrxf9zcu+t/HjjUS0yKnXEy733WRdkLvfcslfI2mSev8jDO0GDlmdPym9We0TcifQmFdSB4kC/EMaBuA7jMBfRxq4tZ9K9E9FLfeCHvIq71/bq+q/+41OfpvF+oCJQF47Cm3iuV3HGV1ypeZb7aT4P2qb3PlvdM0rbU4ufRwuZx/3R+0BpexeuOV++U1lyaG2Wakk2N5fMo5Kd8OvXfhHlathNGpVyVDgGGQ8ia1Bp1tZ7A0BvUYvr4dnrBRXtdMgr3xbR7eAX6MN8F0a5SLNB79bsoXq9I6+SGdYM+s6ZyyT3o7MVXTszph1HlFa+Se2jJp5Bb7M6EMGIz1h5c0yT2TUeW/xODN27x9PrapEa0VEmZN7n0qKBneBdmqQTWmHU26orjGwEPbwn5V0mIIIJ44D7oQy6NDWVkCJCm8867HN2Xrg9YlyPmgQ7wln3SuHDwmeaVlZGry5hfDMxpXK+GprWebEqIp+2PqqJBi9HjRRG9vsL2jadpyII80aAr36fqCU6WL+XW3yB+027LTv6Xi+/vBNx/rbI14WebRti9I245825Ej20/xFZ7l0lwcZb+6m/ynhXFdI7qzD28yS1z+7eyKO7Wqx3PhGix66K6Lb3HmXGj8tN57XcgIzZrtjJrPVEN25iJGGte6DkhirO3KJPolt7rzP5Hk3WMbBmUiLMF9zZrXj1YwfI7EhQJ5on3IuG9rfZ0eBWa20rnZK8QGD4ZquewlzejTh279VITrvjj10tygS56+qwhiutcacsqvW0w3hONzKYGyG3DbStq20tg7XaHwwvvXNnoe+xHKAmqldf9u597fvMaoKB3Cxo04WRO4yt93NO3tS237wxflPiCLk5avl0xNoYtZIac5shArXVRme8DDLobtSSPjvK1N5rXukU6qMps5Qd7N5aMiIINTqbxnZzdlT25pyE+txnpT5a3BOF6THvVyf8QT3e2dNrt9Xo2bPHnNYtuk3Kg1PcklTfHU+rjJ0dSRzZE17Jx1Xevbq/EwNUkulZhTYl/UuJ5noNiJFWcn2G60FY0PUoaE/rui3N2dvYrkeJYIgHQzwY4sEQD4Z4MMSDIR4M8WCIB0M8GOLBEA+GeDDE25Mh3gDdPMhIr+cZa/vjDdq2S4JR4YCHyy/sYo6mF1ZDTmMXdmlALkAuQC5ALkAuQC5ALkAuQC5ALkAuQC5ALkAuviS5cCnmidzCYWV+tNWSZySsaLEnOghC4S5bTyzhaqneNMKdMxAEEAQQBBAEEAQQBBAEEAQQBBAEEAQQBBAEEMSeEES3JB7EHboifhy1O++M5QxVn6HD4AtVL6SeXKHeJEOsHKo5gieAJ4AngCeAJ4AngCeAJ4AngCeAJ4AngCeAJ+yLJzgl8DCO4Iqv5/yxEWNjJyyhGuvjEMGCXcAJlMFqvpHAoVIS0AfQB9AH0AfQB9AH0AfQB9AH0AfQB9AH0AfQhy9DH1w6eTyKcNzIceQIZzqJQRwUbhhCFswIhvSH9If0h/SH9If0h/SH9If0h/SH9If0h/SH9N+D9J+g8p2afscmBgdrWjDepGCyLQFsCAASABIAEgASABIAEgASABIAEgASABIAEgASvhxI2JHtwFajAcfNmDtADOXdnAcHGUzRBmGGSjONIgwmXzAGMAYwBjAGMAYwBjAGMAYwBjAGMAYwBjAGMIYvwBgaengkZahBhJIz6NsfRoMF+uKHwRH4box+2IBqDacE6HzofOh86HzofOh86HzofOh86HzofOh86Py96Hxbrw6S9aVmr+p4FvoiXYiJtzRywSR+kKkdkL63izVA7FtN09s+oJEfbAPADMAMwAzADMAMwAzADMAMwAzADMAMwAzADPbJDFwaeDBAaMACB0vYieeBVeTD8jtwFGwoURjsc+DIE1QBVAFUAVQBVAFUAVQBVAFUAVQBVAFUAVQBVGH/VGGSv0ELOCjJwl9k322iBD9QC35N2FKu2TY5fhYElDhn9s5P/RULBVV7P039TeenPAvUBiFrfkjTvHrPTGuRoG8kPyMPm8iPVb8iXTu+Hu/5/SlVkSm01eadXQUtwpXWqFRjHfmLSfXgBKZVhJPoWRN+NlB6pvHJkrhaP+pr1uga3+HOTCIje92ZVYqOrmdPBT3637S6lZ1wUvVUT+yuYb1a2/vk1LqZjjmxcrJ3Dq1dSz+1v2+9s2Yin/vZPBDXfhHlozXfB5F7Z5l3oZKpF5Z+5nUoFvect6d3Or7avqoXf5kd3ZVzuMotjHNxI1JL/ep5vp7PG3FvUpbbs4nLmC5Mcy3SRVCLT5LmfvRBZO7lRzysw1RkpK5XYVzk8q+N6q38B47N+83zfz5lrab+ZWNBTojE9WuVUL0NLvQWLIw9lZlXxHkYyQ/PBfUyWVJPFexEfznuS384PfFey6J4z//59ISzUP3jD6dSN/hRGNAGUzyEWa4Aea2/VNSket57qZ9vqABGPWkhvKcqs2czSZ0kvw0zU+gsuc6PAxEJqpofb7wkX4rU8xd5eFevYYlH5b5OpCce98ZEAgGmbVGU3NP+VW4H8/Ld//mv/6Yd1XURyb3TKoy5OCqPKIxvZQarIsrDdSQ8v8iXtFdcMF0RcXBcZCLNSLMkMXGgS6soTzLa/a/8mI3/yjS9p+E1VeyZx0PmTqRe2eQMoqk9Kt+FWm5wT7e7dKUDy079XlCZSNbVdWG9d4vVOu/sAS/lI780Dgqqw02lVB1tLcWQZfywXopUbClg7j/MexTy0n/wdEFnR36RJys/Dxdzfj0mtufezveZIM90ah7nolJzDALuytQp9QsEVmlHvigiGkC5/1CCirJP8/ChXEmgLEVKqIiXOX+xSIo4P47EnYj0AYZ6nodbksqRMPOSO5GmYaDZqnzRvMIrmP9AW/i7MBBpF7/J+KvY35Fq/U6/OWlKtj5mrUDVbuPqGarP5Gm4Fpf+A7rNgXUb/jBfuNu4O4fqOcWV1e71/sIYf64bdx4GbXvIOgbovzOU5yvnKgvvVeDYGHpRmOXEXBbmsYvMu18mmVBHOuKO94LmOODmJhU3vLQQPleUvYgDofpLZlX7xPt2o7drjNas3+TxzSKJM2rYrJpb7dDBY5id5/5iSQS8XBGt9lP9rdmuiuDR9wvkQUGlGGG8iArqkJUCmF1/ecSs08y45Ce6qwWuLPnk6kp4IpRjzVrHy5FVLUaeieiaoRLvUq4VqbHqugyjIBWxOpaIcjk+xgCj7+TbrlPiUgnILHieWK8jRnCyiX4uRBrSPvCSaqEeMzV+oDMJAks+nVmoecv7iRRQQd9THwJ8evoVHYDHWXgVRmG++Uod0wTH8kws+yf9ynE5cp4xsJVzUKUwsn/GSa6/J7diozb1I+rVZm4OJf7Ne3566p29ufBWmznvEsvf/tV7cuWnT2jbvan89TpJnvDpNqwlHtlagpTgBEZKMqztDJRFJg83KvNNeCfi6uDMlkkRBVTi7D7MeRLKkxPvTUKLJb1nxrmca2T3SFLvc2njIYv/2QwU8zXqffL/vL5/85/iWvzxP74Wi+s//sjdq57OdFORjvaoZ2aY/OO108TmkeezZnPRspQGdF7KYktpoAGLqTyPfWtyqLfb27Uc59FGLzZszSAX13LXQyOtiQI5tUbZ1iKdL1IRhDnXjBYZf0X7pbEnTO9E6p1zglwRmj7PZILO/GXemcl80uGWTMvka064ml8kDf1oro8o53QS6cy0JCHiYREVWXgnXhskcsr/Z2GR067CXVKWnmEhF5Sla1zUz025qLVTU7lAJXllyxFmeheUaVAqp8xySg4t1kZJfD793Ny4yAytjmO2ZdltuF6rI6VY5PNcpKvudutqkDci9y45BafhFyER+tULBP3/MNbnyuG1Pki6Evm9kPY45iSVmY5eGcIsK9Sf9OqjnuPqb5LCo5Lqp1USEl4GBVsKcBIzWjlkE+eJd7qL5tfKbL5IokgsmufbAzWZd16m0wBwZQveK2HG1QrK82r3fpE/fFXA0YK69NMbvWmWx3S0XK/9DRFdWoeXSaA7UKA+gGkz6xjc2WhXYunfhXTsqeQO4fGGTjTNRxWZZBzEjfdKp+LY0/Cxg+mEZMDTp9WuRK3hZItzM0jDIJPK1ueVrK2+oKSkt/LZANJfU2f0IzmueUdDQ3t3ra3enGsTn5VYJWM3CIrtetqo5zWl1dFrLSDvUb6yc9Xa/UlmWsjeDVgGV9UhKw0GzYdVFFNNeRXbAWXIUKzJiEEEJNnlgXHg7nZ9jAE4Ne+9Sc07p9TqbWD9TrmpqYmP1J19T3Yvtn3g9Bd+TJW+ovmviLmKtECm1WSllYF5lH4VK7ZTiT2RpklKe/Z1QiaTuq+mIi/SWOnzhtyVlJzWsFQ159KPb0Spn2gxoZ1bEVUMx8jwJ1+mIlsm0ejd5ytjvnFpknKzfUcP8heLtNBy20vJBIj7H838OrWZZT5mGkRNqHqZaXyU2tRXHctMKcpE1N6X1iWn8VR9t/r89OT0lLeoYRzmtLNZL/1MzJM0aJHvfdbnVzIt7x2l5b3ltJzChn+v7N4TL8v9NOcVolrWF5/UefQU2wcben0pG4jqB37KxrT+nR9Ki1vqBoo7ZnIaWvp3wluFNynzpuT6mlosEjc+2fpUiJXexj/bnYXFLhpsi6UFffd1p7nF3lpsN8Ycu2mzbqMOR6P1suzYU1PuxG7EbscDsR/Z79jdhXXKzhqxh5UK98pmC37p8bwTQ5gdtuN2g5jWhuxvFbOnNraOFcZbt5oToIrb2Q6SNjixlsejGeRKi4jSKJi8g/pu7NwGxKXvjc1TCu1eo93jxtSi23VuROm5iPxyo5y8q5sHbYjOHJ9ek/tVfvTNET16zK4QnbZavFm8oGSp68TB7rN4GQcmA8bA2ihdYcWxm2Qe48ryynsj02rYmhmfAWmmre3B6ltm+W2uBONscwJla1/9ZuPDmOFGHnci5wmmu/30CfdNktxE1IH8e5rB/L8XKXtS9hiOr628nJTVVap5qo1ndjEjWEXwjFWOPnFolMe/z+apuGlDbT0yPrvPvPcyBXcOUXgTz7WDDhuY20NuXh1ArQYcZ5SMp1xYPDIw9+yVy7MGjGVxxZio4R/kx4tlko71pLHdaM44pW3ONFNsvirWDE0Dh2+L6HaSZ/5VEd0ehis+laSn7z3VGqH74TAPh3k4zMNhfsAHhMM8HObhMA+HeTjMw2EeDvNbPiEc5uEw3+Ewb+vV3h7ybu3u1vU0hUiL8WyyxJfgRRpjZwek9+1iDRD/VtP0DrvXyA9B98AQwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQ9skQXBp4NFBoQIN2trCb0P5lFQ4stL+jYAMJw/DQ/o48QRlAGUAZQBlAGUAZQBlAGUAZQBlAGUAZQBlAGfZOGcaH9u8BEJqk4bxYUWTL8E7wQiaCM7NhnMQcFiZdufaKYF5uRQ+DPnQWsSeH6Gi+3kSisxxgE2ATYBNgE2ATYBNgE2ATYBNgE2ATYBNgE2ATe2ITvXTyKEqxFT704BWTwys4qnc4ERdaCjeWTlhRGUZxCcobRAJEAkQCRAJEAkQCRAJEAkQCRAJEAkQCRAJE4ssRicmhHjrAQpNCXPhhtJEXNxGyuKe9wyQIEVCC+korXyd5GAzCXbaeCMLVUr0JhDtnAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAiD0BiG5JPIo/tCOFJn54eSfi/G2Rr4t8EnUQlM484YQOgzXYJepJGKzG6A0W7GyAE4ATgBOAE4ATgBOAE4ATgBOAE4ATgBOAE4AT9oQTXKp3FERogIEmO9htmIdDje0wOqDD+DAOiN0AsgCyALIAsgCyALIAsgCyALIAsgCyALIAsvDFyMKOAzb0DtOgHrwMRSqC136ehg874Qw5JzhfcYqHhRoqRRtGG+xmGswbKvkCOQA5ADkAOQA5ADkAOQA5ADkAOQA5ADkAOQA57Bk5OPXwFOrQhAlbuMM7f3Hr30wLzFCrzVomeZDkQZVtDHqwWoom9pEIQhUADAIMAgwCDAIMAgwCDAIMAgwCDAIMAgwCDAIM4sswiJoyng4hKmRhG4XYHX44SOwwAjeMBAwACwALAAsACwALAAsACwALAAsACwALAAsACwALXwYs7A4odJMEmlhei5ztH8I4XBWrnVAF2jLR/lIaasiED4sxuEo4jDg0m24wfXAVAiwCLAIsAiwCLAIsAiwCLAIsAiwCLAIsAiwCLGLPLKJLI08hE23QoZtShPFr/+FymYpsmURBtkNOEcbzlf8wz03ah4gqGoUcQStqTTiSVzRKAmQBZAFkAWQBZAFkAWQBZAFkAWQBZAFkAWQBZPFFkEWrVp5MLZwQopNbvEsT6qG7N69Yq4QP2L6iXsThyKLWeuOIRb0Y4BXgFeAV4BXgFeAV4BXgFeAV4BXgFeAV4BXgFV+CV7TJ5Km0wokemrBiB7doHNK1GYPuyahcjQEcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABzwuDhgB3dZdF9fIX+liaR+xeYkxS/5RbnJPCgCUCvbICJQbaneZgfunGFvAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMCwX8DQIoknAAcXUujCDxdhto78DemfnfGHQKYpocDBEQi7dIMZhNVcoyCEnTkwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQwBDDEF8AQLl08EUQ04EIXiTBRHC7CbJEUcT4tpKRdNRN4giop0z48LuEo5GA80WzDUZTCURTACsAKwArACsAKwArACsAKwArACsAKwArACsCKLwArOsTyRGbRhiFc6OKBFzZ1sae/uPVvphpRPMhVWF87upaJHgqscJeuN6VwNNcAPOHOHFwCXAJcAlwCXAJcAlwCXAJcAlwCXAJcAlwCXGJvXKJbF48EEq1wwUEi5OWd5PdxTxuHaRBCXTDq69QOhD7Ui9UXO9Tapj9xqGcI1ADUANQA1ADUANQA1ADUANQA1ADUANQA1ADUsC/U0CaCxzEGJzZw4AV92eNqnWRhPhEvmDs1VGoHghfqxeqLF2pt0x8v1DMEXgBeAF4AXgBeAF4AXgBeAF4AXgBeAF4AXgBe2BdeaBPB4/CCExs08cIuPCcOylFimF9E1RMC4h/iH+If4h/iH+If4h/iH+If4h/iH+If4h/i/3HF/y68Frb4Kaifd3jtpS70Qd572VK4YVxg5M2XLXnDyACcAZwBnAGcAZwBnAGcAZwBnAGcAZwBnAGcYc+cYZd3X3aABQeFEOlCxPlu3BnWMrEDAQ6yMH0BQ60d+rMF+SJYAlgCWAJYAlgCWAJYAlgCWAJYAlgCWAJYAljCvlhCVfCOYwdOHODABhoT9J677Ld/iMNcpzzoRRUAcsyr3xbR7egXafL8LoxykWaj0qiZggx6V97GMa659PUdl0nuR2crusFjSrtPqIVMgdpRecKMSoU3SiKY0A0qKUxpWrtFplark9gNHlmUjBrHEzrcDgrT5x6ZkZ3oXZqkO2ilSamorjSxkfT0spOylAmJYAfjjPu1jIuzq9RCCuZrusO4btB5p/KE+WTSJN0RoXhQSh8WPgOOspJ6tQzjmx2lWM6fY9M8L1ZF5OfhnVBNOHp5baQ0cTxd+GG0OU9FEOaNWE7DPmlLQKhhibS4fQ5bHlo2ZYMSeXkn4vxtka8LvSo09MUbce9l1itqP0sbTpHl3lUSbLy1n/qrjIA13TWWhqsw9vMktY9l3shTmVpYcIb99NhVEd0O3rPN+DV5THYtN2JTtm92cms98U6bsElL6Z4sUZEKTbYYkvjW0eDMZkCTdgzc2VFAY2e+4MFjhTyfOvBmR4I63zzh3je2v86ORrdqa1vqFGWs+vGb0HpKc3k939Q9aSNZ7dk9dXUrE+YhoCPpKZf33WwS6nmE8ZwuBzCXFfYdwFt3D7WM1mr/M742zh2UvnJxhGqr3tY4uPe278erCQdyM6RPxSfupLZeMbkzEdB+acT0zZcjSuSk5d8RFmLSTsBYgIwBCa3mI9Nlp6FJk7Yos6NM7T3nlc6kPrKymNjhLrYlQ6KLk7NrbMNnR+WoyAmwzH0mLJPhDNG5AetRdSEaNYKcI6d2gYuexQfMqd2QxOQwOuUtSQ7d2bXihdkR9aDBcFO+psoyaDg5MU4luYFVayMevzTRbq+BNtJArM90cBDGYz0K2tOwbEtz9rYz61Ei2KDBBg02aLBBgw0abNBggwYbNNigwQYNNmiwQYMNGmzQ9mSDNkA3j7JP63mWvf21Bs3bJdGo8MbD5Rl2MUfTDKshp7EMuzQgGSAZIBkgGSAZIBkgGSAZIBkgGSAZIBkgGSAZX5JkuBTzjjiGw8q//lK7xdBIeNFiv3QQxMJdtp6YwtVSvemEO2cgCSAJIAkgCSAJIAkgCSAJIAkgCSAJIAkgCSCJPSGJbkk8ikN0RYhpPNt0EhrLHao+SofBG6reTj05Q71JhlhBVHMEXwBfAF8AXwBfAF8AXwBfAF8AXwBfAF8AXwBf2BdfcErgcVzBFQex86FGLI+dsIVqbJFDBA12ASdQB6v5RgKISklAI0AjQCNAI0AjQCNAI0AjQCNAI0AjQCNAI0AjvgyNcOnk6WjCcXNLy/PTmcRB4YchpMGMaKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoIA9oIAdqP5Ojb9jE4SDNT0Yb3Iw2dYANgYACwALAAsACwALAAsACwALAAsACwALAAsAC18OLOzYtqC3UYHjRs4dIIfybtCDgw6maIOwQ6WZRhEHky+YA5gDmAOYA5gDmAOYA5gDmAOYA5gDmAOYA5jDF2AODT08kTrUYEKTO+hbJkaDBuoBh8EV+C6OfhiBag0nBuh+6H7ofuh+6H7ofuh+6H7ofuh+6H7ofuj+veh+W6+OkvmldnfregYAIl2IibdCckElnpCpHZDet4s1QPxbTdPbfqCRH2wHwBDAEMAQwBDAEMAQwBDAEMAQwBDAEMAQwBD2yRBcGng0UGhAgw62sBNPBasKh+Wn4CjYUMIw2EfBkScoAygDKAMoAygDKAMoAygDKAMoAygDKAMoAyjD/inDTvwTWgCCJA2X/sP56Hns7M6P/NRvpEGfasurl/7Df/jp4Nc+rJcidcyZW157U6xE6keD3zuL0+R2eCHzNFyLZqvQRBDSZ1mFsZ8nqQ1H3kg2kvsP9NXvwkCktIRLbU0P+lSUYUWdHfnyA434hDOasKnNhrbq7CjjbzTwI854mK87X3M364wa7W9+OrSz/WIGQOO3BlujzyIexGqdW/swvbsvB96l/+C9lI/RbFDkycrPw8WcX49J7rhnuD464Uyn5nEuKrXG7mAp8qVIWRXrF0hr0iS1KCJaXnL/ody7yelbpCfejzTbUa40Zy9FSrtnVr7+YpEUcX4ciTsRaaajnicVQauAnOK85E6kaRhouSlfNK9Qm1T6d1dAFflJP1Xb9p1+c9Jka33MWoGqc6h7iuJfZDhWyW39G3ERZlzVZseR+iOb54lhXDVYSDN51myKkhH6aepv5LLwcyFeycep4Tt7i8zXu0wMEsuc+6lM5LThkCveq4uMeo61YJfrnpJSWY1x/aRw7vOjmfqvF0efCHZZNVeL1b4rrkR/Z71Z8o+qNlfquV6Km5X2o6hzrJu+TjX61LNKZ1HkksuZUADAKjdTACoPbx3FnUg3pcTk/Yu1RVBCP/r/23vXJbdxLF30VRDZsyPtOpKstKumut27d0SW0+72nirb40xXT0+lQ6JEKMUyRaoJMtPqCEfMr/MAJ/af/XrzJCfWBSBAghR1SZermv1jppwigIUFYGFhXb6Vy6xpldruPNxiL7B5bf3azQE0Yl1jiyOF68M0kdIWylxmqyiRvFRsOKuumDPz+9WONe/REMfkaPXQWOaN2oyELYNbWV0r20pBh0i7cZptE8ahA9awE22msQxS9p/IvqP/BJu2/GPr3iPh4fUH+ebOT5dy7mjF7DTvSE20gQZvmtaL9qUS2ubyPX7suQcTfSt59wfY9Wh0vCv1m1ebH+ESvYugdVRvEOTWU0wKJHcg1qlS0YyO26qI82it+0PhEcpFUMS5lmAnJUGda6qb+2YS6gvHFhPlDHG9GPsLD2+nU9xyscHfPZJ5FSUslh9bFzUO+qnm5HIv4er0NbGVK7jpom2/h5Hc2l0cp3cym8zSIrFtxWyXwMkgVPzTseWXgCbiO2xS3WLPP87jQkW3UmDHAjuGEzAvVqBpwS9qLZOw1LZgirjZi/XaJmUfY8k76KKBtJeJJg0Haibtj6jxGfPDIgJXULqWyVAmYHo3BJd7z8c6Iy3KrxpsN/yzeDAenj0UehvLkFRNYhcKUMOtwQmMOR6cwAhn27aVvcYO1d32ld7n8Em6frdmIXNJGqzy6HdFnk7maRzLuX45NAot0ODFs/LbRt19iQ6kEDTwdZHNl4EqhY1apkUconIveFzt9ZJGmz9VQgXg010HGxQIK5kvU5KzicwncI3aqleU5PLGWclXMhdX+JXX8SlzgX2UVzLbVaOFNqTMZH4nyR9liA/h/aH9yJFSBf9J7z/+Dm2Sm7QQQJf+mrsA6zPYb1GNwS4GqMvRjknFeESe+1W672X/A7T1mMHSNb02BHSOHsJIreNgo/UpTTzZtHBLTlQxn0ulFkU84aVo3SFvqZm4NM3EG27mveDIiUN7RczidP5BGdfjbKN5sh4Wa7rDmCzSpnDDpFkm1TpN0MhlG3yDKBQzuUjxa7lBmzF4GpPSJ4rLFCRw4a2LNY2PbSV1xzMeiEWR4cY2L1ImSpmbdR2gJa5I8ih2lluTkmbiNo1C0BWsqxQv+K03TeWI2kegIhV8R56kAXpq+2de/8zrn3n9M69/5vXPvHt45uESd33aVT5uUcopyKh8Oe38MGumq3YxfhqcIE8vi9n3UYLC3HNZriok18J1zukLn0DP0zyIBXVRPqxUMRMxSAyQY9UovD+MxmOMv+sY6Ge3hQeBeJ1Q/J4d/dLEbSuqxernG2iu4066u9gsNurQkrZw0uatdQqfnjrmdAq83bIX9Dqw1/Hv5eTMZLgHq+vaDvg0OOF678+Mg93dErrK/PatwR2Jhi1yXoph3iPg3YU3BoXnzTYofHk4Ff1Dep9BxhZwVh/5Ehp53gfc2h5XRycJHlDAgCMB8Sm8OQbibDweC/CHiTt82WGMbkku/c6aOMubDWjXs41wuQY3EngpYI8c4h6prEWFW+9rDOkcba2ZYEVYcxcHRbRzt19GFLvmVbfIdZeDlYjzpjjzJj3aLGanyHHhRI4Pt0SOL0SSQgI+7ma+avmmQ506SAT40zYijPCRFWSbLzHefEuQaNg5Gvx+Y9fRgLCOg7lUB/f+ljtqjoy/KmNrQzv8RZMwEldWTAzoSHnwgXQ8/EBrg/x9qDtL4OdE6CCtVXRDskB59N92lQi/PXEiUSHwBc6TinL9u1+dhWcBWUQmgfdiWUA0dn7y9AQsUUOOjDQvAjamnOcdQzGt6Ep/+KUbomn+ozkU04qpBGHTNrjzKjCqv90pBx4KEJAdojXbZFdbDOOxQiV3iZOsh7PvNg40pOD1qyjxvWePmcCxa/bG5wjDhkMZB8lkDfbmSZpxhEatf60ltb4n4eS/QcP1a+yo8jpvEq7mBX5/QaWfL+yTUxO2HSRQkS/jaMWiKozySZmo0Z2o87KNl5SKuJx8fjPQM00B7zxtFtojNH/nYPxKqlJ3tnJmEt8lXplQPsG7Hn7zWvZFCq8zOYdLx5gQzGOk6wBc/GrH/q3H115uE64qbT3M6iMFH3ecCTfoOhP6/NCZUC8tM9nybHaieSsvAkvHR33UvK3r+qRPC3QUJ0e1KdWTisLQfstvu6vrt2rDVeS5PSyZXxfnjWKYpaZPGDZLsQYRYh3P8hzVdny5MWtbqP7cNcHT/G+IrC5l79ENHM3WisaWaKAAC4BzizTa2qx74/7MBg41daZ6mbizRYEc4WQ5Cezr0D/MMawOFKfvn9svb4WoELebVeKwNamO3ZRX31s5eitHb+XorRy9laO3cvRWjt7K0Vs5eitHb+X41Vo5Gl4cvdXjV2718L2c8V19A6nMUZr8YL3p3Pf0MlCTVZrZOl090usvgRI/wEcYof4xn8yLTKX+q7nD5n4lP+biGXWxbR8b+tyRHR7UZolz37AQfhNkwcqTHKCWAebtUBz0JE8/yGQLUNElNtFR3+IKmrQDYgWChjGx/jiMuMmChMPAg0QEN/QLYkmVwC3U4kDsgqZZOgyssIrYB9+f57lOq3aZt/UV244RprkRUP/0GmMS7QTk7ZGXnJcOHNrIZEscJY/6pkzh9zxD+SNNBkW9MqEUqKgzO6yZeGdwwJO5Sup22LUKS3UEbHU6SOhBMX4cz9SykphXAeBgrULl0nzVlmpTnZbpe3S8Z7U3kjFaWeA8PkruApPOwVklcxmt88k6XOxvKMEuxJtwUTeYvf1eo8xAjkecBiEitL25eGHsG8YKgt2w0WQRyTg04bNkiWJboDMhHd8dhWhoY0ZXwzWXeb5WTx89CpSSuRohhF42G83T1SMe9lH27i/hcnXz9Te3f/v6m4v/ePT35+ey+Jt8E6yXf/4hfDE7eb9N6JNSUZUH/gM2KOMglbWjHC3EXpr6IdNCrhR7W/AmqmR0T+L09a+DMJ03TLMkqAfq61803OjcrKyjNjnxzz9516AyZs2k0kh+nUV6hbZZ11h+O4YzFnnNtvmaiE7NVCVDl87jIrTuPUqxQ2rc1WqyZFeX4Tn3aC7/H7BHJLK+JN9z5gSBolQS/dCbgCZrJtMH+GHGc9tyUhYcUIiFvw0iwmnU9nLdAfSuJN5SYZE5+V5g07Y7wdwuaA+pWMMyFYsSyOysRd491enM5DxdSaVnEw7E62zGCSAsK1m3yTE78WNuEQ6HJMgR1rPSrY+kyhY2/5r41Jx9pfAFT9On7R1V1Qs4LbPC1ihReVbgfzYhwWDOR4U5xHFiM2YWwujQlwwMhubWxRxtVcjdk12Xpl7Zxr/RmTmSNvk6mw0DpaKbBHMTIT3NwjYrIUvrSbYeodAmouZBFmKixWQWJB8mDJxzAtac5APeP8E/0gT2Ht47m3WeevhiCwy/xgFZOrxORRKCrd46t9auGAg5uhmJKdA1hdzLaYW0KXs3KiJ4Lz10qzDWNgKf4hypUkbEaXIDu3IgQplFtzqpnBCDkw/WubkJcnkXbECkJ7y1H9CMUcenKdO9MX04Eq8gR55RaK0my0CJGaQ4s6+vAmntboH2DVh6x9ylbISsNZswXThvOc0N1s0bWcf5cnRWtxD3TEv8rS8EkMrl/eAjS4HADuZLfOYgEUbatijyLC9b1HgGte0ogH4ZtZ554Gr1u+iptjSpnr7Wnecudclzhw91gcLCtJ5jU5mRg9FrYxDkqX1bWbfOkh4MAHid1DbpdWIO+ANVzJdwi53DuYRjSfrOw9F1cp1Qgm8WBXH0DwoygG0AmAFkyIg3Am1eASFcJOndH80BGK4LREcOZR5EseLzDwJP5/VfJ9pm+bBMDQxBYQKYM1xn3EpvZMbeLeUxYxzqxGpESTYO7VNV4h7rKwmIW2Tsw1fFDLPmWu1O+pu66k9DzNMkz6JZgb7t+jgD1s0QKzNhvhcrxcDxZI0kn/hWWq4OIyRKNCEtRKx17M9WF5D9aOF/N0UWmGoOJ3Y8Q2O41vZQBbpwFILHV1DIt0oOVa6o/v86psBQZx95exfTrqZynWx5bgxs4xqlPkAd7Qc54+cSINL84EHZ4bFqjHiRBXTTat1SL5HQk8M3znwZZAgpI/6nhpgR//NP4uwhQYHcl9/HplT/XOb+EVEaXVkn7i8kod8CPo0kneUO9HZGLbkvx45DKv/chVTQcJLUBhHSel9GfqKWO/uN/sgH7464JTCKuzoMNZ0RgAkA/BsUA5ndwokggG6wO0nhsgvPSCKCmUrjIgf467V4kAAggunyYRlupfeJlRxerFWeyWBlba5ICbcHISNQOA60mHvq+jYct+3hdoGZinEScXY73JDPcGmVmE75q+nUJO8XK4TJr8+aSkYYBBm4jrXo1SOwA2okXmtQnOnUXcrpFHk9nbqrNJ2KeRysAPJeXifQYQFs5SX87//6PyKWgCAwS/NliU0VAA4SKFJKDfNllhY3SwtMimYaJGkCWKfmcME7dQ6xGdCr3j8sK5gHoOddJ9c6iAn3/J/EDepEqFr/x/9AHlFEaRKKfzkfwMZaEzrAv3x3ffIUBhdCCP8KPqAf4X9M8J8u5BxUkgfXJ+PR+PfXJw8H5TcuD//0Q5rIPMg2dJQflC2/GY/H1ycPnaYOn9ub2m0f6glYO2El/mUszP/++//9/5Az//LNAHKRH7hEPvS1/maMn25v/Ufx+/8h/iT+5et/E/9TdOj4bGx6Nh3/njq+I2B8XH7lbwwfUvOSqjGT5bDvoe8KPCxe+Euq5b1bBe+9ZdOWwt196G8f+tuH/vahv33obx/624f+9qG/fehvH/rbh/7++kJ/q6WQ+1DfX2mor/e9Wz6EWxFwNRldH8IVxC7dsdFpj4aoezB8ro60MWRo+GR4ImqymVxwaiK8G2yVR/g8wP1Seh/4bclvuwDhWS1s3joA7fLbr28Wy/Dn2+Tb4uf0A5yQb5eLm/zm52R2O39S/PwhJlDaLwfX9WopuyG6phq/1eElO4YzGaiqfrDLsxBbO9D1rXCZtrfCVwqgPAQllmZ14li1tow8ihbCORZgT56W5Ez54QmGa0F0GNT0MVoHziq7YTw6+2ZraKN7Ev3zr5/6Copn/a/4UoTY/4Zg92MLgI7L9sUtz271Cg5erMqyeJfuZZLL7Jacrr/5RdvrSEH1uSDLJyG/w3ayoVxCU3HRVLEUe6Y6B2xIMpIu4oWhyKEkNOM3ZyV4KGm1vSVhM2VQW2E7Xda9cvBtcsS7w7kyNMH2PezXIvhDrU7sHKVbVxn00E0Q9NpayJ81KBD+GRxBejhb29pl5cJuY1Or/DGyxZE8fQGejgV4XNKOVI6nuyqztUxPRXg2lezBDb0I4lgJdsPZ7D5CzZ7K1qpfElLMAmJxIKhelj0PTfWI1otKYIcySbESqzTxkvo7cHbr8srXydSicKrjDE1ECwt4XUkcqEDPt7XFTKPI7AsovnSd1D7C9Ueofb0JrOWn/WA2wZsouXmL1VuUxy2ZWb80WSNN621LZDqzl8QeHsiJA08mS+/w+9U4/ByWNn9+YX32GU1Sn9OMdzSHmsqDvPDs8VKxhgi3W8wuzeZLCFoHirJg4aj9l9TN5zAw3rMp9v6NyessDYt5vl1Lpc8+DU7YRmetUr0e2o/8DQgnCDjuGDpxBd+W8O6lAXEvM00cJOhy2slIU3qqcANBVN1kzaK62wpAD7DMIFobVsGxl8mbYL7hpFATGq6F4jrIMCQEqNIpFXjT6r/By+10voziEP9waqpKY6oKKf8mr4N6G/lPsZnqAdEF34HxDlnoCSzoPtOXF/c92dK6ftiEy2CNhknblfAKJbNhKBcRJEi9vLCQBaCxvm0HlADIgXtpQWntaqOgKFdAUZtxFKiyOYw9Eu90ohkxOE913ssGAgJhBMp4kx8jhVy30mKiBAoIZjxKrTrUVvesZ9YvL1+Lrx+ffVtWGKHmkJVA0Q0mZKtIolw8mHIRx+lDlzGnyqkXVFtKy1/RgeSX+muxF/FAmVURTW9L8ImgWjwSP2A4qBJT3XQqCgxAs/8SlakfDhfqJSf3crc3l6O82KkApVVzUitjIf9hJM5ZY0sX4vpkfH1CVVkg/Q/2FL/auSd+QThlKO/ge9jPdj9PoKOVDBJlVV3UKVJL/BrjaGB7r4ONQy1XfYE6oCAWwkKOxKs0l5oSo4zaNd4U7EdD5SpAJVIEhjO5Vb2zkr1tZbtqZ9MhhTR1lqv2V3sLa15Z6alUWBOyd92SmqpSpxIyj90ZJ+XutVkkg/nS+RT5YRK5ibN3CQ5cBm3taOryGItqpQwrkVu+DHuS9bacwFcKR6FRtiGpDvxaoTwXqYWJCOZZqhQA3/J3BkAD+jpxapF1n2JZemy3eZ5bY9XkUfnbfjO2JrJ12ttc2X5ntU1w7Y3j8a86fmrW+h2vq3HNWoY5raqWKmhFu3Q1Rlt5q2g3nvvf8U17rhRbLDece3Me3K1TUS69R/on+OX9g0fzNJPDeZrM5TpXvwPahkESDrHfh0ZDcDMIcfHx/PKDmE/wjPI04NK/Tsp0dRgJ3+5gI0YTDMcAzuQyuI3SrMx4sCphir+lBfavpBQA/ySCGagmy/TOAXvg03WdsIXopzccO0qUv3/wKJN84zyiWY20McTozA3Z6HvF/oQVtJTV4/yb4MO/y+XjdHb3Ub7DQnW9MtiqDHbgoLaZ7AU+Vi8j+Jz+GwntCE7jOdBIVOX0WQ8z598A2PZj+bDt91+//8r9x/dK3fBRT1KFmRnjxyH7tjJmwza2ty3vaDJ57I7oUbdo7qfEOtbO0BsJvcNL5qKMO3O38l/SO7HCauqomqcLEcvkJl+KqR5zAg+qKe9pjCqCVxfaD2G3klG7iONB5RPIYLzJ4CmEvglqECV4VKJcxht7YjhIuwtamy7DIMKI/x3yAFrB8zRrxDsgYQfDtQnlbjTfvc58YHyVtyN2gw96ViCJgQkf8FMl4mghMYZwJM7En8QiylROn9mpxscwnh7X1HtfZvr7Msof21DcSXC5Kn9onVPnaBhxpkNArajLpiBLz4PBG91jG3jNP4gnenbWe2wvkXjc+ttXWUHIYPaLjOAsdUl6uBPJ38XjDqhg95Zm6ANNE53M/AUHojhBjFb98cYQlKNFnrQGnLy8sONMatXYKcDEa388SuCljzDq2HhjS5pGTkagVYH8CGmBVu30htxAizc6QdD6UyVLsFpgfkuqoN13e77gDoXiSYh0rRRf/XorJmtzLJ4FzjrbaLNxakXu6t2nWnYd3ag30a1MzFOdYR3uN0XLe1bKEO0osQ3h9sJpLasjXFNNxLaHWuEpzvSpaTgF9f1RX1gP73yXS+N9Yl86fNH3t01/2/S3zT/3baO12vZbpv6+aJIMW/CJLGSfGkZR89VRgnFuu376S2anS6b2kul0x9SvD+dyocdQf7n0l0t/ufyTXy5sPNlyudSMTI2XSztO31UJOXd/lwschy3Yj+AybwT3xd8uaMdn8lYmIJgoCAzgjpl8A0maExxmiajbX26dL7eqVU4vXddrrnaR2ddcPVmmv/H6G6+/8f65b7wtGb6e2+8zJrBX07+saMZaJli7BdAkNPamwM9wkfkTPzvdYa23lH2dXWFWXX+p9Zdaf6n1l5p7qVHG7WT3uw0a7nB+3Czg5p15FTUdIBSEUEEK6ghEN0VaKMzZVZXsbBlHN1gzChOcBxRKbiU/QwA+R4/bF+Y6S28yqTDFdxHF8TAYwhQBebxEGm95Ss4h0F/19+KR7sWc90Gnm7DDBWffh+9Ufwn2l2B/CfaXoIPl3PHiq3zcApKEcqb9ycZIR6ZUAQSqqW0PtP5Zdu/XT2WRO95DTRcLXz6NUf1HQy3YMSH+8Kx27uzg5PY+fe+fLX3Pybsrs+jctLkuWWw/mrZ1EWT97k1Zs/R5jLC3psffQIZqIEz1ZKuadlCurzXMs2WQ3OyT9FADxmmoWqrTYjQlcxywFO9bSpc1pONU6sVjVoykSmw3mSljLhcLidKaCgl0h7uzRUFHQLzaJQ34Z+kC8x4ZDS1d6MugPT3huSZbXEW1HFGsRZlwSStWIFAJUYKmOxLPDOSr3gZA8SOgeCBOLbpOIZM8EXCEwyLmpEesKZkzaF/qYkm4d/QAEsBP3Zm1d+kAWGH1ZG426oZhk6T5BPtA9JoomehXMOMZx5J+oWpuk8RUUIdKDrEMPVA3teIyPFUiRtNqWP1UnFpEnA7EqUUF/NOQAf9w6DglfmlaTrvW5Cwzb93tbBjmFzB8sn3H3QeqyshZu96k5SgNr5YL6BgLFd8AAhqww0bqaq8wr5sYOK6tOIWUYO0brI1LqsKmPhOszwT7NWSC3V+2kf+0ODlDx5Aiv0LBQbIizfIgvgT7a3Pac7ug2KMm9jEB4+THdZTB23LLydsVBpi65UGKrLX+7rss7raH3aLSjipuzYPGs5fLWSVYtkzeRvLu+a3XfFpZkX1E97YK5lC33HxT6sondir7Ecgw6ext9Jy7CehuUXUAGUqVNIiRkbJQL1HFw1XQEGS6GU4EuDvZJkhxDcSrOggKlP2GxqA5ApxRlNwsCqiwbdLg0XbI9XozgcNh1UIq+hytpMqD1Xrn83FlWjbAWv3+X8dngrogZCesK56kWBP6H2CrThcLwEB6EI3kSLy7evaQjYZqmRY2cpupJE0WWrKlQbn2TM5B/oYE4Yll7bM8mhdxkAEHVmvY0RRLaMLxuDn8qcGU5qboPx4/Hg/PHg/Hf7g6+9en4z88/ebJf1KqvnMa/Biq/HivHNjSaGG+rC9qiW9KHjCG8NItRuJHCP9QQmP6Wt+vCpXDMyIpVjKL5gPBrgrUqGl11Ui8kgrkm2kXafCsSEHlkzt8FR5STtfa2fZGczjn1M6zpA1KHy7r2S3NGFQSbTjaAv5I/qRO335XxB+6fwkoCewg6dboTTD/ENzIbh//EORZ9LHjHJeZVMs0DrFoO0Xd7sSdXQijJjB5Drzs1gzrZMlwl+VwmuzED3tWO1NqtSurnXVrCtsS2rH7cpeV3me4sqXZAdpi3XFLlotJlcJ3n+luzXhJd52oPm77jVa2lOE+exZ3ELxNDmgeJT8EH80qdVydcn0vIrWOgw2oBPsct90Ez0dsvEfTy3lABS4N3VpOR8nNvl2UEqNzJ89MBAmzobtgrzXddatewCv8GWKOQtM7sGh1ZDxtsV1b0Y6s1QvbrZp0t1Z4W78u8nWhRVsNdxgt9Q44WwVWjr2eJa4cg5ySbd4ChxtAD0VMME7wo64aD3aTEks0uU50EXm05Jc/xRCOAK/tkWDPEPqjA6GLyaEeWUYuAOiUyUYBqrCkPSj+qliDcgn0L+SdBeLpVAdXAoCsdAWC9ONIPIdwJfoDPBfoI1B5JeALRv9AhYz7AhU2AUw9UlOJh6RpgaLMzanaDqFfha655IMsyxU4kKLcC+OVGm8Izg6qpCHuHmN9QveqrIM2QGC+n6jLDPtFDEERpvMCfCs4wDaEQQZaySKs85DaNUlQop08dWsZ8rsKPpsV8Yft2toAv5vAk6MsOLqD4ma3X+srZse7CB7iWnRQdUB4hVsVVveUN95+29jSIvwGZCOcWCUPUdLsLsv0SzZFYdBZXgxOunOmkR+6Cwp33EHfrDadrPCS2Vn9rPWzpkty97u47An33opugIlJHNhLLal2GiWTVfBxkhvlY299pdLzmnWqHej1qmFw4tsWwuU9fUsUbN9Fzcq121NIChabZnZWx9zODKtN1Ekjz7er8JhTQie/435r0eCwLiz2sfXw+9WRMl3P1EjdTTMBO3Ir9RV6+euu693yeDMJGrspRYMTxTrpxFljXgrSAA5SZxtGANfD7v3XNO7BSbkdc7APmATeXY0Jg5N2kevK2m571btH3aZGjLXJmPYnv+mye1db+tiqJjS+rDHip5H7pWGLvuPR2jeu1+zgtN9GbdNz/pM2zT2H/DP85a38eyGVx0VgqkfvaZjXgbstAS3m/ZAKSQRpjHkAfFUG4xWU9mBOxcZMSFp36+IrefciTtGCXz6MqmTXzOBRgi8OopC9uRiAUhI7ECh24cmwSQvMQpAq5yaO0q503QEwyJIjYQXfv85mI8cjcijXS3TfNvbr4Q5cB1LO9yWVw9Xr1nO2eIufYC0xCV8/L94/eASkJyqaRXGUbx4F4S1cZuGQyoyr3+kmw3IzP2R04pRj3PFlVCQheNIR0pxLlQtTqtxBEt5M2BQ/0VSI/yXOxmNx/upCrDaTNF/KrPztT+J0FmSncLNunL8u0vQUfQ92rfH9wuP/zD2If4Me6nGTeubiQZrVuRhJtR8fS0biFLbzkQHwT57+9L5SgHsOvn/0ra02E3p74FOY+QRdJwIcMEJi/gRmUcgEopp+OlmmRTZZxGmaTYxnYrICR5B6UP3DQ3chqKo3EThZQ3lfUIsmXCCoGmvb3S/UisOKo4k3ejTx2oxWK7mocbcNQWgDMISijaHC5/JXZWJF+ReMFjXDljKMQiqT1BomQFT+9DZCj5wp2qcBMWDh/UEYjrivXyv6wnlhRIV7y6DtozW1WwtEB0gC/8j2Bav6AqtXpGtFTgzcCxzIn0PCh1QHpmhZyOKCq7jAR9rc0USsjsZFGcL/adHwWndRJeOSnKYmfy3IxQoqBHHFUiRjJnWwb4i+YOqfoj8xm3w3WdISp0zOyYZ7G0vh0HguoQjjDpRuD9ZZ8FqkJT94BlX9oUxpwn+i4KtvIluitjnibblZm575ESxvYDLMZPBBhJCMGAgVJTcxbw2oY5qqHINjzMhI/743oRkaOY/xoXKeJmGQbSbVue3T/6XuTbRy4KW9/7H4FL1f6C864JzMk0SgCKMV3CJpAlxrIPwg1nhIN0zShl9v3x2KDf+7bt+YWXaqSuuyNsbivPBAwYOqbbvhi6veOfyVdlAZN04Xqh4CLrEFiG277hIFCqRSYZFVVsMoszDZaAQjPJ3GSrH9JDq7q7adG/dhyzprvlRP8p812/BfpsL1XvFkn7OuvAu8wUEufAhCoyijWwHaKhORUuYEmKzOX74a/S6zSdetkzGPsE7ZQNzRBOM7J2Fgy+l6QOl3POwz+FpcBP4jGgbmzuZyb5p4GE1ViMaQwiCZhFBaaML0tKYEQ3LBBXwtmJ4aFS+wLNwwyDIZZKYCIWphcKOaeniVcvUSUuNXUThEbgysuuTGyWU0LyQ3K3PcMZWgzDkoHWcqlwFmMVB2CPvhzCj8YPsow8lCyokWa5M8CxJFWuEeiWYvoMMXUmpRemV62ynlDLsRL6QUuiNxZdHlz1eGJgspSwltTaWy9p4dj0nXmYzlbcBi1PSorNKWud4pE4owm7iy52inWOdi6J3/hkDydhZX/vSVctroUNX10s1j6Y9cGVBhxF0m8yKDgj8Q3f4xmOcxBSLO5E2UJFYId3WQS4nOVqy3jqVZa/zHcuxprsmMN2WOaSPH70VqNvB7qzDtzuaylr1h80CoYr4sa1ZuY7g14JFZfT+Wm0SUL2ZjbElLoAOK3vx7ISFecVRmbFthwE1CqP0500YspXpb0cG+gM04UnkZqgmfXSgOCyai0UZRvoeDm5tM3mCMOch4FrZoDPGKnZMv2urAv+hn3XaTw22QRfBvNUITFFkPzEjgdFMD3Rv8hvkf7igdUzoscWvpT1r78OkVvlt+683XRdxvF1DmXHk3dlUjNjpwc9CN/qQp+oaEFogICLAuyw5rgy5tV/g/tXickTi/Tuw//Pd//d/qtjUVICNLr9UVIEc1Zb5ZGcBd6EmisV9wVagGH9xe64vN6AEsMls1hEqk+DfvnRzava6bkkzrCvLmujbeMKUKvnUCOtAeg6A4HXbrkfp7yb/KZJs259Y11Zvg4BQpraP/mnKkaOLIAqo6e3/4EV3exd0y+nbJ/veXyOTJfhqYA/k6iTf6GjGx/7s/7O+l8JlXcbYE36kq76YKjrXBqEY4AdcxdDZ6/OTk3qrA7US0W9mhE9HGaL539pcxutcJ1Z07VgdKoE1zy82Q+74FgIOK2wEy3hNGVZhkTbK5g8XvmelGvG2SwWuZIdaPKMcUWc2EYsjmZ7kpBm1+odLve1fc06epg7O6bW8YjCJ3VxhbAHlS2u5h941OeknrPYwqE3CieiGzGTmqmZnpomPTkrNhH3crM+idi8fSWxdTnwYnb2Uo5epZWqybFZU5/npItiR24PPH618uGD8iQ3JkWJowHLWNTgNSA1+u8K+TeRrubWJnAt6a3sQz6K1Kp/U7jGZewtS6O+2IQjBJDWxAky8tIw+iDG3tP11M7B415Ei0WskwqugxhHcgXht0AR76+LYEGqijVscMMwfTo8eRGaF8UEFoPdqrZvDMUuCE50M0ddg5heM0dRk3redEnn07HH87fHx2dfbt0yePnz7+PeVEYiyLwfDioOI0m9ymDdteW0zbeIPxhgZZkYKPxetM/JjWMvbRAUWpibR3eCJ0GyyCCC0dUS7ukGFAFpqzlCosQ2iaUbouZAbQHODSkSPxLE1UBO/zQlEEDogekD4qWMh8I1YSeBmpFYwC4TxhiteV/LiGcPuyBjUNpHjL0wKEIzvcAcEFD8m+dA+JA/VXk1UowVbprYSM/RJGqkmS1RAHmzSy7WCCkbFOOVCQIkNyqLwGJyKYW+cz49zh7yVJVYw7IPHARFmXn85SNS6Ks2R4DzWtlh0O1ggc1RbpVa6RCWuwl+dLWxsi8gjLYhjnXRGb52YxLq2L5Us6R3yE3JvUlenLb7++WSzDn2+Tb4uf0w/hyVa1acu2beWFl2Odt/HRY0mbt/h+nPvlojFZJT5kPnXSvVuhebVrRwOBOXe9W7aZZF7JOwtF0as0lRG3GKGayLvK8dDXPKIDlhjgWpo1Y+w2ndQdcHS9R9a662jRCCc3+lKuQCLnXu/AZijXOl5x89Voft4uVHaKAjdddnxUm/NX2V8nrC1TOspkd0J8WcjbySmHbKQMN1gczWWi5OQgEr+nTvajlCnoTLHZM130HXNMd7oVfkWH82hKUJ2t/lPol/n76kO/nOyvGRu+tDugQmBnHW0Xsbpddat99kXpbo3r+WtU3DpOxqe17ZPmVFvUjvLad+DMHDqetV/gQvTKCc+V03EGTRbxfTwNna3lQPNxDOVfwDVaY+lncej9dPH8zdvnz86vnl+8F+8UJtlNbMBwDo4k4I2Kp6TB48cTW2lYEOkrIPJLOgQPm7TfY3jIpK3U+J2jSD0+r+7xXSa//rgsMvPZjTt9nNfOcV5dtNR2C0WK/sZndsJtXY+RH8F91Rrw/Zw+2UYw9+RS6aMBqUMfxlWafg9wR8+zLPVkwdFozb6wZZ6v1dNHj8J0rkaQAp5ms9E8XT3KJMINzeUjCT0PM6nWaaKk+t3XZ0+G7EAZ5mk6jGF4m+Yryp77OFR5ECWxVGqYSVjSHwJMseLGkzxNJ9T46fHo+OTDwC/zAHjeX589qaPYI/B4HkTxvoL1glp/Mn/Zr5sr/P/b9grnKNbh670bo9wwPwZxFOIu+oxbZjw2S3Vrxh/iZ2qfrVN2MpE0i+OT1XEnjcdf/E7CJEiHX05GZ3NoXLlXxPOSKd13pW/g+k6t7kjcqxSV+irNX6RFEn7Orfr1UMfEDpM0Hy5g/N32KLWeQI0Lar3n7vRS0nVbfv15tmVjiuIeQky3draIbyNYO+SXuv94Xfa8AHmHHOUGrFHSX4H+zfFpcLIFZomULM8u2qnubdMg8H+fJ3m28QQjr6KEM+Yf21yAYdF+kKl8YlKi287dC6xtcWE+rZWYUiaISgoNJ6XTsakwRjmOSbt2x94/3XpfwmpJ4Q9SBrR4iMYAQsOCVpA9sQjmeXqEBbuk/l5gd62Ldma/rpFibiteMC21zCBMXQoE0yyIZgTKodrFZg0OsdPrirrVDdTIMnvFOp2VetChjSgK61ldSwT8J4gsjYva4Wg2xH5beKAtUr4LMJv98oVOBUtxv/POgLmKvC7sk2DFGcDrTb50nowGOJCepBb5CKHVgdDJ3AipA/CRd169ForsVbQzJ/y7tjnjrhZDYJIqPLIis0ppfJCbIdoExDqIMtuuQteAFSCOGU4cBWiwaLjA8mqdb6yCCSPxMgmj2ygsghiGUBqImGImQqjYqmRuyncQBXkqpiD8pmWONldu1qwx5UC4u3ksg8ztbqq/nZb9jY6bq3GvLo0mi/FBNYhbrcnGT2L5OStFh63EtS31hnWuWmupYQspaGuVYZ1TaPkBuNge4kfyX2quLV19+GipPvMglMm8leA0MZXxdqgPpqsLOVHSPJiF0bDiYPKmwaNkwnhhVJmQ4A/sTnVWNYjoOvrDvGqoa60VQE0RCaJmXTNZF009d3NAtY1R3fI8GxK2BHS20zgo7bHdVZT4LNtoS2cNwBz7PSd2UXaEe7XD5O7dCXavQRaVzKYm4Wqyl+4vtajes6USdFu9skvokXUB76KB/rztIIEOfBlHKxZVGjF8vuOWKj21flIq4rIEcN+9iLULANbZIWQAf3nnMTZ8KS/kUUC1dE6DA6llRV/pO6cbWznciu8Sr0zYN5OswZle91vphOuuA7Bbdsf+j+8Lro9E7s0dZsINus7kvhy8lZG2GFacKgs7vEks/d/O8PXpmj4NsQq/aOcLa9Wloky0awDb7vH6jdtwTXluFgcesirqG0U0S1SfoGyWcA3ixTq65RmrnYZy09a2V/fHvklp7GYq8YBxOvaHErmvoxmril/o6+oYVilrHMcw0kaqa+k5zF7j51ONmg4L5y7I9ne+QaLUFjfHLtW29KVZ02s3nUDRwGwyI0dIm8NAZuJ7+FZ8R44OBiYvZWFTUwAl18LuYHOZQ69LQge2l8zYgeUwLFgJsg0Zx2aQSCiVEnF6E839vLfg+5us1l11ERQZ32PR6pOnZ53gRH0gnw7ibRXP2cbKM/UKWiUALqopR+NBaQOLA6bTl8ksGIt3E0D0DUWMYEkZA+VHxUPuwZ6ep1Z5KAKvjnIk5/Ob0JtpuW+jOazYl2Eyx2KijW+uLtnFXH/Gi2SLAIyGszYeEh4ArFujQ0FddDU7lRfF0UHSyjpHx7Lw16XKnvZ9w5pG636t/sgxbftOSZQv17Jvk7m3Xf+QNWukprfp9zb93qbf2/R7m35v0+9t+r1Nv7fp9zb93qb/27bp+14jvUX/t2PRr724G9/lvTX/i7Hm15fjKLZ8md3K7PPFzH8zHg8R+zsJ4qHCwSnNZpew+TSbTXQnE+rkkOyfZpq2BNBXYuYNY74Zj9//RgLo7f2B2yW/IMPKjyQB65vmtvyhkWG6ca2upP0kz1MwmQCAYk6J+DDsgXAlmjhnhtUpwTyL2fdRgrXrtKJWn+mWUnDkGrEzmTN5g4Prcnr7rumPLD5c5r1K2UoVJWEE+oDDOC4q5hJ0B/UTtwK50YVEFNuM8/DIZR0JryavVEUcug6H7mxpwXN3xb+/yA/e+NLOKLBSl9HeZAombc8zrk3Jzy6HL8Qyi6ya9bu3uv7SVlddZGPb21OXgNHWiu5PiTex1w/V1eLrhf0IVsb6WUPNuL/6dghF3FasrkbL569ZZ9HoLUFXh5Q+mpG2L/l1cMkvdzv39b621ftCMQ1L2oHB6BO0uMsVeAF5o5HJNQ259lCgjwlgXWIwzXqeriou2TLzNM+iIJ5EySLd6gS1SL2CVi+hEWiIVHjmaCbjcyqr0wlyT68kOpgYfw+YCIuI3QwIat2zmU8VtcKy2tBSNRVV1PUZO4dpVMvsXHIHTYmorjXeKZyom1KWMN74BtR9JVfp/k8eUlW1jfQH6KvK4Qsd0+KqtzAuQUdV5Lc6NXjqdq1bXdFOnw9TMSTChTKRM6hEGDwqx8ZEmGRFnk7maRzLed0ivkOcyXmRp+JZ2U/LtO+WMl/KrAJLr/zXF/lEgcpVkEfzICaM//kS0qFDzsGEXRiA/rUONgg+tJL5Esp+EeZWWNCVaXytHNtla3uaRaeqLN+FOmIRx4Pal1qhOlVaQSuZCdMKkiq6266sfKl76cLIDhyEinwOE4n7zBJQi+Nb3pKm7pVRPk02s9Xt00q1tGEsb2VcYhtFC2g+ECmQeBcp6TCOv+YBql9x6Wb+qHw6D04SmWNFi3aDxiuZiyv8atvpixZsVREzmd9JmVilaiTxiDSJ6sVSMj2o1gbOl3KDN05YyJE451dAuhDT8VQsZeaUqLNuPj0m7teUyzYMYJUziWUYyo6ejKfeTkxxxiU24Jq/KZwLexBG/qRKJBMqt7GLgw6+L4udNLuLt5czNj6LJ2eWK8YKqduzzjFse6zzZysMSArpIvNlmsHuf6kjKskpQR5P6CoMNoB+ZpiIFchBE4aTELCcxgWhELo4AMCBKhlcN9olAL56IEc3I1Hj0Z+enOFOO19nUSxWMkiUR+UhnVNp8fZknC9H9XgDmuT+YQfn2L4l+CBfZlIt03jv6JmXpiLUlenKBK+YCoudNQS3ZGSzRuAWjvSbVapVHpufVjbY7M4kl+izHei28XZbibfAdrfMQKg0y0sdoXzGeXB7nUqt2r3TMOeOTnX09WiHrcWBLesss7lM8uBG7twUK93u3IozSFqGfU8cyaIVFEN0fBGbVxRNaTjGtmo2+aBVjB2qO3FpcLI2BO3BqcGJznza2svW6XMt1x2Z/qnN8smVn9r3uSkQte8uZ+1nEck4JK1Zu6JB9C+C2xTvgqnvjE+bsC3Zx7m7MGAffwdJoKMB2tmjcVu/KO6wm3cP7lDLLtzhy3wLd/irL4k7a5mEcLM6Bdyo0lV3qWrbFKjuGmwXsIp3wIw+F0yDywSiAXT6NAFQ70jlyvta3e5jqIZhGNs0m5xNYEZTXWs39uIoNalL2LbSctNsg2m3ZzSYFOov7epz0X7c1LVzfx3vDhqfX2Ora1kNmoz3qvdJOd/Zbt/RrnOp3IX1PfmT3fz9g0fzNJPDeZrM5TpXv7N/fOg+i6RYF9kcTVgIf45GkBnk3uhtN7pOrpPvjC1gULEeoqZt7Aj4iuIX3mkmGTWdCtxnErHVnTc2SBRM6XEfAEF+neBrjQKHsM9TZYwzJEGMzaaEcEdaLx36glilxoaUp+Krrxx7NL1Cgji6SWBdv/pqwM+i8mlBUGnOi9fAl7nlz8mQsAxuMTtoSOlBZIhRzvN5Wh6/qXF50Ti68HgKRQ8pQyXJlyMBswIQzSS/TtzHjmILUHwHLzKy7UOfaHou32eY5hhk+mWlTH/8O3tzYGIcOq4X5SGy9UJqwWfjtztHCdx3GzFZxEE+EZkEsYLGESmVsbFAnzIUMkLDDL/KyyV5ECVDDiJ/eJ3A7khC+iMGk6uHwKD6jhmh4Va5C112pT/+6quRQGVrOAsU1UUn0GmmKkquEx4IrBaotJFVd16sihjWEzycSHMCzoMYSnFmdHjkLZypAdZ9nKMxH4s+BsYSgmUE0gRCXqhrouI60VvE1NfN5G2UFooXmLyigctR83G5U9jcX3U40xX3faTytxwRU3dBd/GRbvcC8AYBSblexxE6AubAf2Cu3xPAH7Lf7WiumnPqFnxyVWH516Xka5nv7DuwBNH35FLSFB+bqGe6485kGVLIjfpxHdFBoxyPXR2Vz017cRV5fMqXHoVGH1tDCR1ZMNtEKyqHAXs9SUWcJjcyQzOqxUznWts/jcgh7WW4VYdCxckoLVXG1clqGMpzdLYeLk/5Gx3c0S3bduv4TW9CGAV05OAG3tgwMzuypNVgYJqY8JGtkTCkofoG68xM5eem0cb3EFPb90UrddZDwPNrLz97+fkLys8d8haKHHQV59Hgz8qhItFNccCG8zSZxmxqaAcqEE8aNcyBONVPPnoh0o+nA3FKrwLnyXP6kJZIe9buIV7IOO28wRr1/WNSTbmi+omv8vw+l5lbVL5KyF/SO/JUsUVBCc3G0DDW1KoHbjbVtIff3DruzGRcjQOKsYHe35DIm4Miy4ERLy+oOgw+E3AyyueE0U+vfclx/V/nprsqed+5L0z9nY/GIyoXJ+4Za718zPVSf9/7bE3WOz4QoVRAHpYCcz5+ZOxV3IwDN3Upesc2JV7m1wlWCbuDl3zKb1J8j8g7y/etfHWE4cl0J+EpqvAhyAx9hMedC6xpp/B18kBJeAjbw1ODcKJjUNX0Yf01k6r8UBXr/OYmkzcgIaG3rSpVF02oaWGR2soUDtBv3OjuHy/+rK4eP0lV+P3s91//28X2SO9m/adJ84HT/swYWF1yKT1eG4omUdiUztkUvbw9aRNf60KH3YqXoQcsRsQRGU6Mc//lBcR+pEryE56e5mWch1l/vID58V8kofT5MIVt/HJDOijMa54mKgplptzRAqXSeYSjYBBOBH/L8wCkuR0fY/FvJPAaqvNVUFQORzDVIyQhNjOUFQKg+it9a6K+dZ8KKR+JN9ynb8hVoXLgFptqnOgJvycgypWMFwMBiUkJO/qD3JnrMorDTOpaiZjDu6fc5wzg2m5IRBlDL2gIlHkIKZSnzKK/FzKLDLgEf2Zm/BEkKxiIMEiEQ5LETyBKihwhJshz+f7BI8iOTFQ0i+Io3zxie1M4pJRE9TvdZFienIdW2JRDDO1PCFbj9UQu1mZTLfy52kxMwNb/EmfjsTh/dSFWmwmGDJW//UmczoLsFOzQG+evizQ9pWKh96cYULFHHYVzE93KpOJFWqZFDIEbQt1FOZ6RPLXj+cw2tAPU0kxMy/xUIn9q1tHs+yrL/vOHu1f/Lhfy2//9RM4X3/61Uvj1MDaUgCot/KgOZipk3h+fDmQPuUMa6hAaSe/x2XWW9RR20lJ7kDHN4o2WhSIwst8QRgpdhpFnlqW6yZ+YTTibFzoAGdiSvN0B7uGNzMQz7BAnAqe7LSOdxlZm8IOQJqgvM+5b/cyprwg68UK22oOnzJ+SZVUS0oHpOiP+6dkY/2fFpI1bsxRhSHGhc1cvYEhvxIL+gs8DkqqjuqIEo86s1KTyRqzkJpXJReXlZ9dphy4g2rB2r9KAtotDaw3qQ7Re87PcibLcK968OQKTKvrmAvsv45Q7xWOGukYx/tENzrTDG2H64KcASvXXpZNiJisRlpCmSUaLVIyPwf5/vsBq5plhRwPTdGi17es01BmX7OcKpa7DTEaLw4KpDaqi6WXr95T1W2nAjxqxCgDBCrS7LIXQOzzXmPuHlpOjcfuLz4I4VfeaBUFBFpPMxDRP5owGtpcFDHsTZYS0eEaAIC4PrN9hNBZNhbJXqWK/4FQr6n8eJDDpGci/IsEpwgWZud3ie6X8VMeVDNBMAnnxQiMJmL1qkq+0qHXtM8be4ViWSvUeLhNt0xt9hpDhZltnZQcF83lW6NegyMDPjvsPo7S5t4Ht0dYMcaMi6otSEX3uWcZHdNkJ675W5lwln62irZ6NR+MxqqgYBQI69RHywV5SX1tzwdY6dsYuaU9BGHBDuLQ+fk/YBoQRsw/41XkYttSx7qxqn4eMv+Yxp5TvTdai6dgFYViC3boL/OA1rGBwG0QED4vIJHMufY5iCGNiCIJRwrIugGOxvAnmm4pBRavxDykDA7LG9+fWW2x/DIZRT008w5eewy2d717aYD4XxxCY6RCWbSuWvgPPCKBzB6YxhCfqVkFtI3pszvfISjinZcTfEQ5rmZ6w54k9t6hpObYW0b/82T2Mg/UDfBAT+RS38RF3ZZ2Dv/R5PpSNtUN9IB/pZO/FyIYzbn/6eQ96zanbFJ/helM56NrneoWYYu2iPWn0/JZDHx+qgAZqx8cwZkZbSWX7ou345qRg2CbwXMCABa2zrQO0k3Om+9RhJT7Bpi7TpqgOBkQAboEkpVAIHAI6G9Ro4rDa9VomoB2uojCJbpa5tihY/gXo6R9pIqs64uPx2bfD8bfDx2dXZ98+ffL46ePf/yeqjOgHNoHvCI5oBSs0L0yntzX0bdAiAOKNTMJti/PTxfM3b58/O796fvFevFNSNHjLEQdCBuFIvJVgnamGBLPch89tW4XF1VNl5TGjjWJP57wFl52wB1djLtpc1PkK6WKC8cXA/sO9+kebPTzWSG2381NH4sIyGUzNBKccJf5BynXtFWV86zN/yMHILg5hMU17YDT2JNt8DwJBZsgz8Yr6qoUs8ZtM8Xw0NFvlPWNCByzXlW2V0M30cxCe6Dsk3O6Oxu1Pva0FOB2CJOfeCg1ec8s7XvGbawiNlwzB7HrOj4POdO/QSscERtodLqslK2tbnEOn1CikqGFhneVrWdpjRvtWx/yVxvm67KnwrsTwqfHtnrfylnma0Rtm5YAP2T+8o8zerhv7XYI4jW5wJvWxLcv6z40N3/toekuKF6v3npphQVLEQdaE41+73SGhrvXO/rPVY13pjGq+rLsoCSlzJV0Yk+M6zQgtxr4jw4AAjKKVXIAWSumLR90oV7pvAk/zuEKIvhJ1qwREgyzWCm3Tugb6+PFw/Hg4Prsaf/N0PH46HpMGWjaUSavV94ApPU/qRuD6hEr0MXdCMgkbpvOkPp0KKPcBcRS6Koagshi+SAo0ZDsexnma/Fwkc/ZE5UsxxeM2mW2m7AMq3zEM0c1bD2KENJqynoSgSdgOlVnqdIoegGl90p4oC5GnN+h+RM1I97Avd1AYiO/qJw1/wNSxIWF00PTYvfNBmuAJ0tAgsNNUdtkuBEjDRrB1TokD3LdWsfAjhI7+4PPvPEuTPEvj0i8LiI20I8H9prvnGaiIUkGlq6e7uj86c6JknknQtIMYAgaGs80QMlOxG+36zlwoII5iUNBc5/Mq8JIBgFWepclNvIEEvHS1Qog72gzgQi8YkknrwhbdBifLU4nwkBITVZB1rjDRCNZ+jDGagdwPmEgNxp1n8nnA4nd9HfjUAs9NW7mLj6kh/oq1QuTLVfDx3IRXVaDog49UbMEREc3B0FfBR4xwEhfW9z5T17JYBckwk0GIEt36wED4cLJTHnzE6pl4XA09NvzLngjtmtQSIaYheYLGF+WQAyhsCnSejccU9bG1RK4VblYdgBpjon9pd4VRowQhIDgIALy9JSu2Acv71s3PPkO9yxtdzndwcmU7vyug85XCE4m2Z7RDpl+ZOKQgZxMHWKVjie5ZgEONMjkSLyACgKL2ZkGMGeP4jSIzR+V76CuFTK0YU3U0zBl1Q3cV5nWlKu/QTTADl4TVzVaW14Damz395hdKcy9MPM9C14wF0YhbQXEAvI9LM4yLu7kBmKORs1IaiAi1Do+kcw/zftEyjviDLLrJPE2zECSPDxzdMkBAMsoz69ua+Uuuonkap8lQSdALwVqhA0q5ogaMJ6zxOMXJOiuoyY3EcwAlKD9E2zfeyAO6zcBkyNF63DXoHfldWiLTK9RewA3CTadOkY9hCWFPPYzEc1LJn4rpDID25lE2j+UfbzIpkwFEMkIzQkE38Rsdqmyb1RXl2cTdXoanTAzoiSsfm7r8Dg9L2bEBsGqRieYbqvaspXQKKnUSVk6hLCNUDODxGNmXpAJwFhDlX1NNshRO3v5TOseDe9wpsSywJ3NYPYzacfHshG6L241fPqnkyghbeuhYb591Ap5HnroR7alE1fdRS10IrgLBOoAuzkRFCyh0LoQiBAv3lENLlBAxVlGHg8gxUizfT5WwCz0p9/B1R/NyAB8b5lhKd78+YQn/cqfZsznXFRxwSiXkDdVyh/iwKIZY43D7peQsmDNj35YwC++D18qGupa8PloGMxfxbNiAZl2wCFBjJjMtB59unZl4kMhbNAZkkJpznZyLJE2GFlsWRYxvPy5ka7/1LA5T6FvAZVhG3m3ebIr7lWx2uJlwxzfvdwKr4fHAZRtk2k+rsF4FRNJBXtUXeErsNLHmY8I7R7FuV4ai6q8P2UCmm3s6cLwFa8Ea+x66oWg5du2cqp284dFYZ529qzQPYlJjmuoUQf5mwVHNOTwSu28/BP7EIdp24ipK2Ff02I6BNqOKKxy1IUwX8gMZl58oxWwDpYCvxpZnx+eyWq8D2nMgrwSioPQFghFOG/ONusQ3vOH2VbpNjD8QAqUm7eLdM8RGI1VbR+E7Fjzb8I8KzmH6T21tfaejvkm2l94jdFjmLtfSbNp5VISxXvipLNTZEnVUKlw4lqcAJBhX42Z0DiZO4HCI1VGpvZcEK13/bJMvnRJVmwmVJ+L0P4tigqf10mZVNO4kvPdiv3dkeyH6slq/eFmtTqWtPvlKzB6ce0sQ5qEVQ6kO7v2tvodM7y3I6KFOwYV/aRJMgQ0jDzHQjmNt5iaRwERJaph1CsXRcTYU4wgWg1GJB79NjlCKP37rlsqtV689caQ8UMAFqI9YJ4trArcQnCZSQ6owIuXJ4OTvRZDlMsP/VnIVTYIEMsDgear/gxw7TtwlD/apUoG4ZfAomXAyPwLETggW8qTin4QTgq6tWqzT3lUFWuoJNPS8e/jU1sCpenHlncbBwrbY7ipKfKHECJDPxixz7Pec2EXZEe7VDpPz1oneM+2ayifRKdEFlEwo3zEykWolqT5Z5avbrJ/6m0/1Gtf7ppibbii7vN6zdfV3rZWi20OPpmSmZ9EijqRr6w3U7Ms4Wp188lXp7l53oWzjh01rKPa9e2Q+7huGMtklAv+ZpoB33gum4FNDvfGDsgml0PVftYM2juYyUeWd042t31Mrvku8MoFrou9w+LmFH7m9qfhA9wG4ksCO/behSHRguy5f0AYdYQoDdZ4JN+g6E7fe/L4z4SICzTPZhoZfvji2PTcGNeh8Bsqvq5c+pdDRo6oo+qxAVPSH9kt/29Vdv2QbbibPZWJdAXXp3iiVWYj6ZGOzUGuQKNZpLY9V7QCU+7S2o7Y8xOnNDA/qSHpK11OwC1gX2rzCFMXyDr6qqurPrVqbkmP/QcLd6kAXKFhlBtjntvw+aBr7ZeKMzQB97EW+Mq5gzNrnqqgBornropKU0W/KakEv+BIAcjs4+IAo0RAocM4PaZmh7eYw95O1Si5xTpiiJzGh/uA3wXkwWb0vrJrb9S1yUKwE2XXYqmCjDdjlwt2YyD/oPPSOFZ3ttjAZ8TrBULoTWyVt2tn/XgoHq59v3uvQQjbodK6I4qn07rmgt9qqYG3steVnI/y9q1XIXVb4p9YKt1wVRuSw2Lfkp2EJ9+BSVNmM9qaq7zOLoGMIJWvxzt4fW+rYnY/H4/f7Sgh7pz6hXb5lLZyDX86pVQg0rDqtAGB1+pkOK7mDxyjyaNq2if7MJcrjNIK/okgA6QRpXlhLAnJWUWZoTD/cfJBaFSU687oMBWYqtCncWgptea/Z2evWJmNoV8UMxzaYj8bGBFE/xt5eEgrEyOwWvrgPqzstSWV5zQp2tq3bVnXdQf2x6PPnOMpPF6Hl4qtX3rnCFmNYcaiLIHOJdThwqEujPr0qbT7e+97Z/OubYP4huJGH+Sm4XB519YX4JxyadriBHJaA2Wy3ratH7P0RvT+i90f0/ojeH9H7I3p/RO+P6P0RvT+i90f8dvwR3udF74f41foh6o9h3xO5fA8ewRhleoZ/NEB/eANI/dapcwpgdgwoIlhAvnsGILjwTwzztcJK2Tyl36wq+ge4IdDMBfYjyhYDVFhoXKIExOkdFCyDXhUFi6M3g/7gtHQMT2QlM4NnAdcrCLiuKl778PBgetRAKCRwY3LqV0WcR2CQNEBFNumUBktHEv7QppQw78UlfHcEm1dl5La9tbtVQXisCr5uAWqMRfY97FOr91/3lm3ZJzWb/S+7T+oLuu+WIVCMlVEiTvwiyLtfJsi9CXKv7UyhL+t75PR3+C0X2qj4RepnUWZ+dymplOCR1MbFg1fAmYtFXtNCGM7s6Kgkfs9gH0qlRJzeRPMa263lPaIFltAM9VJ/ieZYm8ADbLP7nw4vJb3NtrfZ9jbb3mbb22x7m21vs+1ttr3NtrfZ9jbb36rN1vcG6Q24vwkDbu1Z3fLu/kIsH97T39SqcsLvzSZSo6kDw/e1l1hrZECFLiyJXoEX0whEXS0jXqAiA8qkHyiElqMmeWoO9fErm5/TIOIqNU/Bumn0ewYjM2Tooh3w3tdkM7kIz/+Ca849wrceFSez8EypsCE91KmUuSz7V5WA9p9Olt9+fbNYhj/fJt8WP6cfYFd8u1zc5Dc/J7Pb+ZPi5w/xyfv3ppT351ReXhihUn89a2Bf5FVZu5KQ7cqKU4z14vAyT0f03A/U/pB1b6k1G7y6m9nLLd8QpdxuR6/Ux4kWwjkfiEhXOwhT8tzgZQC1V+Zpkkc3RVooMQvAj5MubEhbGUc3EfSOgGUDASUCzTBUvA9KLKZ3iYViKR6ss/QGSqpDF4sojofBECh5uB3mxj3ig6bQYo+0aJEkL5NcZrdB/NkkSr8PYAw8WscpfeE79gQLTcVcFlwtmdch4gVHCu630IC32nsSdqDLEqIHi84jCkpHPmqC7UvHf2Xyh/ru3BnTrH4/6qF9F6VlNNWfNdyW/hnsJYUGjXVGSpW3nTEd5JiRVaU8O9xH9EW5g3bx/JSJC71rpnfN9K6Z3jXTu2Z610zvmuldM71rpnfN9K6Z34JrpvfC/Da8MBWfy/3GJtd6P05s8pUblUxFy3X8rIaHCSUYwaAqM4e436ZxsSKHxl5RycsolJN/yCzVCFeGJTyTOkjEXwCp+z9llvJZFP75lNjMSBXNJ4E66lkBZjtTIWhM7xd4y84k1ToMqcQePmACKtLookg3EndPSNH3gVFxhIjr9kjr5o16dNfjEdCg3jAMFO+ML8pBaU+vg4+ymfF7+ygryO/1BbR/alw5Bznehvhua4RJNE34VV7sqpKYwxbCKjbVBEju5c4uXLZZQp0dOUb+i42N3z8m/uBg+D4Ivre09pbW3tLaW1p7S2tvae0trb2ltbe09pbW37KltQ9+/+2ZXZuj3uEXssRFaXJM46vT8ZcDsEsWuLUm7F7MhT6e7mcptOj0LtjRrB7lQF+c3cOQtpPl45A1qIzbmz16s0dv9ujNHr3Zozd79GaP3uzRmz16s0dv9vhNmj1qb43e8PHrN3xUXsv+l7S/oNxBwTZbCrzVi8t9aYXatoTXtDN7nwpuMqyYPcrQmjT9IUg2b+XfC6ly5VmpLQ+VZZ6v1dNHj8J0rkYwSJrNRvN09SiTCwmbXj6SWZZmw0yqdZooqX739eM/DPM0Ha6CZDPM9MjVQmauySOTIB9+CNZIS5pOoPHENH56PDo+UdpsXtg2B636mXl//fgPFsGX9D1cijIPonhfAXxBrT+Zv+zXzRX+/23CmmUnz9VuXtkT9jZRYPh4Doz8PFvl7Im9RDi6r+RdhwU7e/LbXzBrdXDR1u/W9WXqYgva6cnis6voDkSaCXriG7MmRjjmqSiUtOLl0vWwWKPBTRfcDEQmg3h4l2ZxaPobiCgnZOpVkM+XaH+h/mV2CsZpvsRNA7S57Bga6C1RqX+FbHvK2QY7eBbd3MiMobatKUgxC2IwSOBMcmDDTMbpXSU6cGC1NIG43KkMKdn7kMKaHJaYpxBUnMkVhE3fLSVjg5spRQp4PV/ykBqMZjJPVT6ZBSry2F/rgDriWapy8R1+XiXmL+mdWBXz5UAHNVuLVq5tnor5MshuaGMgzAHQMbJfSmzr3O4tgd3PT6JL3aZKlv4Bx+MRlLiRieQifptyNXiZyIonP66jTKoJImfvbS14Tr2Ic+zFt4AlQHsYbBRsI7SuKYbs5o1Y7iGmC3dhkRhTNx6bMJUKzdn0UX0ezaUwa7I8JD8T0AJVVDtO0Y84faXj0dOFcOjZDhWATwFLu7bjZY1W69vOnv3kCFSQnFqEVjdRvfZtkaeTeRrHcq5NF0x0PTr/vMhT8az8tsqMvy4lQ/RLQZq/Eusim6NJiWkWapkWIImgLx6XFLzKyVLBLaKSb/Dgr2S+TOmEJzKfAACF/8o0Fn+Ziyv8yrs1ZS6wjxLMQjHgxoLvczGT+Z1kcaOJR2wO7eOIlCr4T9r7wt/hFt6kBWJI6K+5izwFORkWEvyU2MUAfCD6KhHjEfmUVuneT2FoW3sEJCJdk8YvoHMYKozUOg42OhlFE0+uDNyoE1XM51KpRRFPeClad8hbaiYuTTPxhpt5NkvCSR20V8QsTucflOAHMcqv8nqlG4bJ0nAdUszTjDQuBP/XPAbPRxCFYiYXKX4tN5RXkwV3iQgBbAbqn+IyBQkUCVgXaxof23KdbZ7xQCyKDDc2bNpVkEdzLU/LBJSgANdzkeRR7Cy3JiXNxG0ahXBL+SqotgmK6hG1j0D14FfPu5YDnpOvXZbd/PdaqlS89UaZhM6wTMJNlJC1xHaLtlomTRPj+9yKskK2F99gVYYQC7IoiBsDGeDHCWcK7Xsb4gjiDacbDZxOG1H9rAvJXUmrM4b726Ze23PwjV7t3arrCv88BnIe9NOj5fVoeZ8DLQ/3N6c8+m35Ozxg8bSxkeyitDXugZUGPU2d488YTe1EdnCIGZGgkfKOQuhOYFZVahz8PHpoXBYzQwo6Et8EWbDy3D1ysYDL7Fbuiq/W/iTRvTYDrBG4WmI9Pugwz5dBcmOUU4yVIBqtOJr0Fu7vgRNDk6dhsPG8CyGc4B9pQsoUmL/vJlppZ5t4mk1AIfDOXStWrYIOOhXab/aMVKjXmfgxjbwF4Mm2S+eSDYakvSyCKIZtEuXiDmcPZEFwECqnodFkwBqCqpkItMaWpLkciWdpoqIQrMuK4oLAbAA2EBUsZL4RKwncjdQKRgGtOEz1Uw6Uf/kxUrmlvSlWkWlJXH1JO3J2Ml9bu7Ztk34anLx7+/2rNH+hrfr3byIcfz0ssniYpPlwgaPuYEkusniSpPmEGu5nRa6N39GCPP76N2uQtPcAbIkEvVEytLfNO4hwOlCjbu74rZynWbhV2e6iI9vzap5I6zSZmtpkC82DbrPVAzVMyfzuCQfqHgR0GYGSBd3cRvJua+gVKcjoDy0RS22e/RjJOw672sJt4obP01pS0mkxysUHxb/pzXIEryBEwRifICirhV4CDabQ+tJ/oz9qhGpQxQzDsBW+te0gRXiKG8QGp+Sjktktl3Cjl0z9pby357LBTWmxebtn0kBP8LOEG9cDi2orVvWUbw2irLzaKhFR5lHFxsEuQdAuoda8D2Krd2IuXXVu+yKx8LeDgterPPvlYtV3WBV7HfpY8j6WvI8l72PJ+1jyPpa8NnYfS97Hkvex5H0seR9L/uuKJbffAn3o+K81dLx8nDa9EX8ObgN9tenXYdnq0+DkQ5rHUdLyySd+BGPMNLl6fhkDEI29JW5u7o/qCHJdyGcg0gI7PhuPB/qRMA/iOVjaMCYNkvRN3NxhZggX41HPoLKAdcbuZvLhSPSylFN9wQ42YHDSSX0Cv7A1wyZrB9PGvix3xuuz7XsLSW8h6S0kvYWkt5D0FpLeQtJbSHoLSW8h+W1ZSHzvi95c8ms2l9RexfZreRu84D0aOO4piGQ/dDmPecHG96t1fCz7wpeF7echbFcbw16c71H9ejtDb2fo7Qy9naG3M/R2ht7O0NsZejtDb2f4J7Az9Jh+vzlLQw3R710CezcsYomX7Asp9QX7DFMLm5JTbT2/Mf6hSYWnH+DdVqaYFmtQaJXOLi1fSiPxA8BBYdY4rp5YSDk6zEJhqHd41IkTwLP1PIVHPEtuj6Ghfxbf57OYMEL4fdQxJ5peSm1i9EfsFZ5OvmwtC61kSXm7mBQJj8kp0DNldt5EtxJ+huFUHqzWJRyXbn8XKANzgmgg0dHn8gbQVPaYCdCy40ygCRkrMBP62DN5SfnV3eYyAygiooMnYSDXAEErWklI4M6zIFF4JqkW8pRaTMUDeQvtMcs7AiStO7AKBAbvKEdWydFDRCRkYRFOsPmx532puxfIgQ4MAFC9BNB7FvpoWytHuEALApKqLmOkhJkN55UTSygxvw5+1arXF3lqwV/pjTGBDPp72h7iBfbdgUdEBMLlEahUbZPEgcrNTql8vuMG2STze5r15SaZ7zNpIKl1znABaPNeCbXIqA4ZtsdDH+Q5XBRwOaOxbRHJOKQ+g/gOgOxmkiW2i7xH6AevsxmDMpi654QidU/8YnitdpZpFDVnfpRzGynDzFmht0WThGHz4gqwEjOJkXncnTNTRDG+v6leUveHzNUzQSR66zTtPREpIVFHCeJ4A5CgAHcGWyKUcbCRIcAqRItozq4Fg2THaBhKPIijDwC2mXwgwb2QmXo4ACEGCdL8PSgRaOV9YsEoMgKiRsApWs3kGtqm8Ll1CK80R3ifpCwGrjXKEosju6F/2UAnqAGx7KVOEDSJZ6wjfvXHGlWUO5li/O9Uf2bQ5xywpJPfj8bjk/dHMx178V7hZwKWXlkmdFItQQq+zmZVsh6PHz8ejr8Zjs+uxt8+HZ89fXL2/4zHTzWth0DQnifi5eVr8fXjs29LKFpqDos/ZWTFaYWid5cXPDaxe9tl9oy/A2MBKNmI31HsDMiz/dheFA14PH+tXtZ6y4PqXkg4awSUiKA9cCkVMSLVVC54UPw3MqcNHP2DIGN8i/VkjIsFy2QtVhdPlH7FrsPFobawN+HCuwvjCMRAiuiEcRrQy+LNxQtw5tCrxjlVU+5vWp2shoEJlJK5CwTDs3iUvftLuFzdfP3N7d++/ubiPx79/fm5LP4m3wTr5Z9/CF/MiC08ZbbrtrGIZ/aKvqztZw2aiGKyxKfVK8gwsXkqljJegyScf2DBMk+TeRSbxQZoWKeREsvgFh7P60wuoo9CFfMlQA9N3754/d1f/zzFLQToTvQQUwB7lOSApAVhAcGcwMkMzDOgtrrM/N9/e/7iL/82HI/H4zPkirLwOrrbzmyUD+u8eUyYKBPbmH2FH3hRnjGdgrB1AdSSrSkKeWnA6ohj+JoggLvaaSklLjNlwoJ7gpdUgMpv98qPWs58R51clX20wMHoRoJbiSt7aB9GUd0Dh2r+CT1CT0hnxX/fMkAWvCZsI0kJY2TgdfEGaBvE2Q4wVAa762SAzsd0sTjxCIBL6hUmsYzQUDAJwjCTSnXfUOfcoNH3dvxel6mC61fzpsj2xnn6C/ZkjvK7rL6fz8W7t98bM4/eiMNFMLdhXtdplgcx62TQgBGYxb+OSVeiw5Br6RpZ8NgDOPZPat9x16eqvHj++7/+D9ny5K3MoA/IXspQ/wL9cYKPSNxt1k6pA+b8FXRNRFDGh12zKpYVsnrJaT01cESpwWcj9a3Ii0ySUQrNhCIFzNq7SDFadhzdRGAv1tQeWz1/zgMA9GbXh33NSoOnctr0/jCwv1XG6Mk5T/xByQEEt+Nv2doGJsMpMHSIX0817wf1AVy2z+RNRKYY2IsaNhToG53YUjMPPtaCRboIyqvg48uG2+HoqNAvMimHsM4ilx91bQCA7zP4kS42NCok2uwJT93KUbQcp4ANuMMtgY1epbm8LFarINu0XQ4EPvgKB6hLjpjBXS2MQsAjVOk8Qr3DgI0z7fbLlZ953enmN+k5tWshWj9ez/UIzYRrNVgTs434Pdyez9+8ff7s/Or5xYSl8PfyVsZbvKE1aWWewaVXDqTRIrhNMzrNWuug4xbYf6HpYjSTBtakV2im8hI4loUbfqsPcCbzIkvAQMPSRPeEBv6BmL5KEzmtf+53hBqKOq95A8uaVv7CDHBcB/J9uYuP6xy+L1cwRhEkcmJWbKelixIJsR4tqwafCCpE7lO2Z5kMPiCQvIF5pr1a2phQGGoQvDaV/lJ/06zVM5A9qPWlJg9yuFTyM7lVoc/BiJObF/5ONpQrbNsMrFta2Qli17nn240nznt8mz+/9BiWrrLS0WS7arx+jLrNv27Er9m3fTZcr7XTschVwwAsn7s20VgWF446sA0NtTf4oPre0Num/aVmXku1l43nCVJ/PnhV/7ru26Bh1hUiVmMqioLnDnaiBEoxvV/EgCMurHPpngrbZ17xhKNzHD46j2WW/3shs01TAIG9SgfEC9tWA1+owTtFFlkKL9BGbNakAwr5DYBYoebpWltvwSNWoW9vROUGhris4lpsTcwyZW+6S/Gy2lWz/L4qu20tiWXg7Bcg8I2bX1mlssCsjWz0F7n6pWL43Mi9WvKLDjbPTUy5xu9nlR7n9McyMAK1KIxVwEarkSAoebLo8+NKQW2Uifw4lxIiCrAPuomwnI/Ka7+hxmpH/yiIghiJc246n8t1XlI5ibDgk1zhf0DHZWQVKZwwgXgzEq9XVIstlmDRKhKDF24XTZuktzLLolDuszJmD73mTsr93XmVTB/itaGkfa1kNkR2WTXOzCRg7QLB2MHI7/2WsWzpW6A23h5UO7Q8k++9QsQVFUaMsAjeIkjsyKRyoZtilLoL5JpG0v7KboloGjoRTY+2RDR9cbFJTuGtxlh0640zbuPUvgW6tFmu4jYE96ZxFFkgQw68tFXKABQUtCxDG6jpoIs+aelIzgEo8ceBl6Da6jH0AJhNQ6XJxDkvQroQp+NTgU5c47tRddsVebmsKmDo90WDWNnRk/GptxPjVAULmjZj5inYDipsoVoLpsIYv9mpEMNdQAUW4ddA17rUk6w8I8bv93MQWndytYBHt5fHgV5Gu/BZZYbesm3MrYG72/TV37SzpuZwTGn1PD7IJ8PxH4aPHzvetS+Tmdo0v6WMSuUEPgsSvJqBT6s0JEEHLE4TOUwXCwrgKp157RzyxGbtVydlS9HCi1K+3Jn6hVZUjMcCzC8Uq+Rn4C1XOIBzFiSbBtakSZUjZv+VtS9dp4SplaKFdaQOup3dO9h7z5pbmDKy+kv4l7yED1tf3wqa5cXnRL+6v97V9SygWVyn5lG/uL+M/szpCMaOdog374L6Mk50r3fvoqI6cxss/6oDIm1bkClCDlcRuNdI34zKuuZuITQKFTYKOpdslWR5cvKVmqKtP9eN7pYyU2Xtdnv6fmeviX00rjffVa/1QKM860x9Qr9wa8Yxi04hlHgZ3EZpVvJHv0sO485L3UuTzbAs3wgh3x3Y0hB9QD44dJubXrZ+z6Xo3Aa6tO8qgDx8sFdk6S1Ed4CfnsKtgTBbM6qk+GDlemao/WozsyqjvDq/Zvd7wVYPXntR6UodaYf3hkcBdxXkZRgEFzWGUEnr8TkdT4/z+Jw+GU+3Pz4Dqurue3y68ANlffODIihBxF5ZpdK9MaV1wRbM5xmIAISxEJkM5ktcHQx+5t4GWPWwElrCokNfMHa3Pn3d3dRa5+dOmH9QEpwfT+xs4YJX1SfR2XiknWIHKAaey98oBljJc5uFHouZgt330NjgepDeaiXDCD0v9Wqnz5Ow+QWayDv3MAgkU+dYyoQivCg8IJcZ/EQx1FMzKF7Quj47NTe/gYW59kA9+3Y4/nb4+Ozq7NunTx4/ffz7/6Sg0GW0aK+LfolfNJdKg59py1KIqi6UloQiCH8uVE5x0Ukus1uoqPYAD2V2y+pLlImQb1o1wDwOalX+HMxUGhc5CRD10F+EfH/DrrtDasZdzy6DHeivomgjahhRwP5P3a2NlAGbbJEFK0me2N0927o9JZa4XcrEGx3escPnXFGzjXdWpnZ1JlVCbL6awo3wH0co303YaH357r589/2X7yYoKTtsremc4+4+rNY1DjYdcXaCgQFE+DfvxolQD96xOHZtUtWzageKOX94xtlHTbfvEU/wdr6XrpsvYQ0qJ+/x1uigPdeksgTVFXrJ1+4vvDa//Hpw4kW2ZwgZXq8tEWT4s+1ZsKJAaQUokP0Iimg9eL1N1wQVcTtdlrQ/WMYfUaK768gE27ej/27nD/Ul3/Fqb7vI9dC+G90CPtSfNVzr/hkcJhecXW1tsHJNt3GoSbIY0fFpcPJjEEchypnnUIa9Lk2iUK7WaQ5Bghp0qzkr0XyKmFpefkIGYCgqvYp5mlEBePR2s9nk1tA2wRrxKATrf9xnI5TTFs+pF4+HFhvB8aLuVJ3KkhjMUS8y21xVmeP2DVFltW+y731zoKWD1Uyj8GUS5RiW/70Mb2T2PMmzTY+Y8wUCyca4PhN6XPtyWsvgFRP/jU3EJTfRya14/+TZZrI9AXGerlZRTiXSObjkxLlx8mwjyqTDQ/K2UXyBjY3jf9vUh0v+VqdW8pXasfVzOpBW2xpGd61NGbG/M+7kseBinbOyr8el7KLMcprF6fzDVtyYxULOcxl+hx+bLbRNaYQA90mkZUx972jVMZF3RMcE8x83+2lnr+SdQALFc+yF1CGGpJoc9vQDYSnK9x/2uH3fYCu9ebrnBWCIecOJr5xeJxS/dohq58Jsdjea347ytzdaZZM4y960ai67XVZVGOq9ffhm6i+k/kLqL6T+Qjr+hdR8DfX3xL3cE53vg8o1cB7Hz82rrTOYtsqzIEryH6M0dt47W/KJC0J9km9ZmmuLWrfm7Bmqv7K2wvEt0yz6xw5NXsgAUBJepfm5tpB1JZEm9irNX6RFEnZr9e7t97rB1m+tJz3z44dIrYJ8vuzKv6s0/R5CVXab0W6trtL0hyDRFKqt31/K7FZm3Df4ROw6Am8lbLJbedGgrxqUFbTOpAuM12ADjf6XdQhcPOWMOye9CuSCkvMii/IN4E+uSM05f/Py3+QGNpI1PiAo1Y0Ub16CpcUoGC74xutsdqrEnZzZAGgjTkHFujczUCAyqnajCcEDaZPwE3nBgxuFP3HJHEyNqRH003mZvkMYZe8fPFpnaVjM8+E8yIM4vXmko2Ci5GZI6T4PIVwjytOMUrmi5GZwnaA9DP3lDJqgodpQPaJsN5jdMk0/KALZDKz0JEi956yv0XVynTBlLPDgw7S4odgpYKNGYzJJiTLCIC0tYxHjzo6zwDIlJTvo5EYx+X/N35+lxdoTDXYu5viDHckSiEwWCu3jxrDoxKuR5VG7BCmtWpOJMS+E1gxuRVMMWkPnkaZqpZq4ISNEJidsz/PoFnlE4JFAF4gBJGGehhiXA8ZcY+y0rc8wkBstVMJRavC0zICGBZoPVkLNMr0TcQph5ID4twqixIb+wCJJSoLSCxbwQsnMXQkC4vAaH39ikA7WWklT0Lq+Z6OuM7kusjl4Zh9SgSkInpOQ18170t7pHioQ56OVFAhofP/gkQlIekT9DjH/+GEJ+OfsEz4PuB0MDK/eELAA1wmCPkFSSGYHPpXkWcne1Y2p46gAcUXMig35YjZpkQlmkCqfKAhmI2C0jYl24+ghknVpAtnceAJfIpsG1pHC7aZUdANxmmqjcrmysdhCeAAtIvzSDtujaJII8qDSRS5h96go02mEiCWWA8TadYJXVZmgYPcYJTQnGnYEPoEAFBloz+bdUCagPAN8H0GoXogoIX06SpMBZivBcQSjNgLTJtfJ1GDzmxTzKJxSnCaOB/AMJR0jcSnldfKTwRZ7eSHO4yhQUr1/8Ajgb3M1DJJwSID66pGBnQroq4d4IhZFRiGlJXkimEGlezhNzAxuIe7S7INGkOR10S9u5h8ee5vMCrcGJjFLZmIVbIjDhM2rQ1BLEFuI8YG+AVj0OrnMs2gtR+KdoszmqU6x1w2QX3p/1X6dCriAOWMMxPRHOBjsUuIHMsl7CxA0VimHBcL75x9pIsWDRZaudHp6EgZZKH56ef7qvPwCNHJIp3r/QKMX3t3djaIgCUZpdvMIvhvCh+rhQ5aI14ltGUB+lRl7ul9ccfHTlR4GChbErC/CkitFaIDqkW5Ba3yd2IsLEbBLG+YJ+1qDrxgkKWyEGB8PjRLKKjHEzjAsiGJ/8hy2n1984U/vHzyap5kcAiKiXOfqd7hfm6QWeXPxk4ro0ncy7OTgOjERsQJHITGBIZ4AN5IuWLHB/oaU8KZlDgppkk7QqODAYpMgR5UPkBCKoFbE2gDR15Na5KPFDA254HEU/WRwL2scYeH7kKTpokjCALYzoKfwUBIDrQYlr7RZKCN1FrmiDxUTC/dyXA37JKy2ZB4XIeLIc7xQjPHU4CDT93bpxsL4WAsnRlYDVAmuIQmvE5BzhkTWNDJQGTF8cSElKkj2msDf8ManiOBSrrsBp0GF6ajxBeo6YUMcJAfAZ4kg6JCBAdQMQPjOZRybaP5ysagqSH3jwg8N+1NJql2ibzmg4yaFJFpE3NGXlQN6FcSxw2Bd/0SwuB5cJwYtQLnbkjCZF1GCm0CDgCPit4kXd6C8USQGH50033WRrVMlXQ2ISxJ5/tRYRdP6vYE7GKaB2wm/dHVRfYUD7gcqZNfJ9/q7zVqqctYhqv1myWcbk+SvWaaTFqxYefMJuVHLaf2gq8zUZ0Q/NSlQFgtxC+p4xzJ/lq7e0XXyA5OFUe0IyGFSSv4O8CIcD4BQ2SnkhmfBnS3r4GjlqVjJAFYa0LgZywMWF+8Iow85c4MSaX7ZC7/UBA2cVFQUcK81yWA8z/bS8XmfMaj2xpW/MJKyYUjMuukdysEnriT6G+tFSkqEBbdVkbRcWD4WcLFhJz+94bqSRiHPJKcoPKJZuQzKfOIYOOT2U+EA/mazAOZEa+4+XAYsfQjcE3YNpdXCh+VTKkpIUiFeIckp/ZMRDCOiSBFkurXbEATXhMiAiDOvNaAK9RhQPFWxBixDvEIgxNyUP3Cq3yoBXNYx/OnHkXgezJf8ByX1R5CGICH2GVCpy74gGyaB5aebkHhI5kp6t5VVq1j7qoAgQByHAUd13q3UC+dtKe1Mwdm9YOR4fepJXJgw1wHuoZ/M5a+3uwjTebHS8NPbDkNt15iAnZbtY0KDGvYRXlbIXAABLWsrBXYl1BnlW1R21kicXyf2H/77v/6vqoQamWMHj8zqsXPOwaULv1V9z/1kD1TjlP3jQzevRgr9+LWgm0BClClLsILfmTyygWsfYUxSnYMWbMoUodNMGqWPQLUhc8JNzQKOQkKMmTxa0ESQ03njAmbYp4uHwdIEyaULFnkOtF469OGzQOcf5qn46iukGC/kdMEZREEc3SSw0776SutPIMp1dYJM5W7KlEnKcVeYtgM+TddZOiRFSKugdv7VtIz6Kl9BNA6f7EUax+kdnfokX47EpcnQuE5cXUo5JUIolhH6RNUrMVlSM7AFB9lGPJCjm5Gd8UG/Y0O6sLhorV6Uh8jWiypOST3XcoAwgZNFHOSTqt6ok5pYEGuLVs65c3pJHkTJkMvXPrxOYHckIf0Ry9iqh8Cg+o6xbrFyocuu9MdffQVPUld7xTufqQI5zwOB7kkXfIQpXMWKwDfA74s0k9UATFsZHR5SBEqDgfy4BoFo3RV0L0LRcluHvk6sVwrDUcnbKC2UUZZRp3Q5aj4ud4rnPeMAuVHFNTCG//8nWNiJW3IVAA==" SPEC_TMPFILE="$(mktemp)" trap 'rm -f "$SPEC_TMPFILE"' EXIT echo "$EMBEDDED_SPEC" | base64 --decode | gunzip > "$SPEC_TMPFILE" diff --git a/src/orb/__init__.py b/src/orb/__init__.py index 48ab98af..9bd40a35 100644 --- a/src/orb/__init__.py +++ b/src/orb/__init__.py @@ -69,9 +69,9 @@ "InternalServerError", "ConstraintViolation", "DuplicateResourceCreation", - "FeatureNotAvailable", "RequestValidationError", "OrbAuthenticationError", + "FeatureNotAvailable", "ResourceNotFound", "URLNotFound", "ResourceConflict", diff --git a/src/orb/_version.py b/src/orb/_version.py index aca24df9..36309c3e 100644 --- a/src/orb/_version.py +++ b/src/orb/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "orb" -__version__ = "4.55.2" # x-release-please-version +__version__ = "4.69.0" # x-release-please-version diff --git a/src/orb/resources/alerts.py b/src/orb/resources/alerts.py index bf895d1d..b5ab8a4f 100644 --- a/src/orb/resources/alerts.py +++ b/src/orb/resources/alerts.py @@ -18,7 +18,7 @@ alert_create_for_subscription_params, alert_create_for_external_customer_params, ) -from .._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given +from .._types import Body, Omit, Query, Headers, NoneType, NotGiven, SequenceNotStr, omit, not_given from .._utils import path_template, maybe_transform, async_maybe_transform from .._compat import cached_property from .._resource import SyncAPIResource, AsyncAPIResource @@ -106,14 +106,20 @@ def update( timeout: float | httpx.Timeout | None | NotGiven = not_given, idempotency_key: str | None = None, ) -> Alert: - """ - This endpoint updates the thresholds of an alert. + """This endpoint updates the thresholds of an alert. + + On cost alerts it also updates + `price_filters`, and on subscription-scoped grouped cost alerts + `threshold_overrides`; omitting either leaves it unchanged, and an empty list + clears it. Args: thresholds: The thresholds that define the values at which the alert will be triggered. - price_filters: Replaces the price filters on a grouped cost alert; an empty list clears them. - Only applicable to cost alerts with grouping_keys. Omit to leave unchanged. + price_filters: Replaces the price filters on the alert; an empty list clears them. Only + applicable to spend_exceeded alerts and to cost_exceeded alerts with + grouping_keys set. Alerts accept the price_id, item_id, and price_type fields + only. Omit to leave unchanged. threshold_overrides: Replaces the per-group threshold overrides on a grouped cost alert; an empty list clears them. Only applicable to cost alerts with grouping_keys. Omit to @@ -231,6 +237,57 @@ def list( model=Alert, ) + def delete( + self, + alert_configuration_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> None: + """This endpoint deletes a subscription or customer-scoped alert. + + The alert is + soft-deleted: it stops firing immediately and no longer appears in fetch or list + responses, while the underlying record is retained internally for audit. + + Plan-level alerts cannot be deleted via the API — disable them instead + (`POST /v1/alerts/{alert_configuration_id}/disable`). Their removal would need + to be unwound from every subscription the alert was propagated to, which isn't + supported yet. + + Args: + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + if not alert_configuration_id: + raise ValueError( + f"Expected a non-empty value for `alert_configuration_id` but received {alert_configuration_id!r}" + ) + extra_headers = {"Accept": "*/*", **(extra_headers or {})} + return self._delete( + path_template("/alerts/{alert_configuration_id}", alert_configuration_id=alert_configuration_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=NoneType, + ) + def create_for_customer( self, customer_id: str, @@ -370,7 +427,7 @@ def create_for_subscription( subscription_id: str, *, thresholds: Iterable[ThresholdParam], - type: Literal["usage_exceeded", "cost_exceeded"], + type: Literal["usage_exceeded", "cost_exceeded", "spend_exceeded"], currency: Optional[str] | Omit = omit, grouping_keys: Optional[SequenceNotStr[str]] | Omit = omit, metric_id: Optional[str] | Omit = omit, @@ -387,32 +444,36 @@ def create_for_subscription( """ This endpoint is used to create alerts at the subscription level. - Subscription level alerts can be one of two types: `usage_exceeded` or - `cost_exceeded`. A `usage_exceeded` alert is scoped to a particular metric and - is triggered when the usage of that metric exceeds predefined thresholds during - the current billing cycle. A `cost_exceeded` alert is triggered when the total - amount due during the current billing cycle surpasses predefined thresholds. - `cost_exceeded` alerts do not include burndown of pre-purchase credits. Each + Subscription level alerts can be one of three types: `usage_exceeded`, + `cost_exceeded`, or `spend_exceeded`. A `usage_exceeded` alert is scoped to a + particular metric and is triggered when the usage of that metric exceeds + predefined thresholds during the current billing cycle. A `cost_exceeded` alert + is triggered when the total amount due during the current billing cycle + surpasses predefined thresholds. `cost_exceeded` alerts do not include burndown + of pre-purchase credits. A `spend_exceeded` alert is triggered when the rated + spend (the pricing subtotal, before invoice-level adjustments and credits) + denominated in the alert's currency exceeds predefined thresholds during the + current billing cycle; `price_filters` can scope which prices contribute. Each subscription can have one `cost_exceeded` alert and one `usage_exceeded` alert - per metric that is a part of the subscription. Alerts are triggered based on - usage or cost conditions met during the current billing cycle. + per metric that is a part of the subscription. Args: thresholds: The thresholds that define the values at which the alert will be triggered. type: The type of alert to create. This must be a valid alert type. - currency: The case sensitive currency or custom pricing unit to use for grouped cost - alerts. Required when grouping_keys is set. + currency: The case sensitive currency or custom pricing unit the alert is denominated in. + Required for spend_exceeded alerts and when grouping_keys is set. grouping_keys: The property keys to group cost alerts by. Only applicable for cost_exceeded alerts. metric_id: The metric to track usage for. - price_filters: Filters to scope which prices are included in grouped cost alert evaluation. - Supports filtering by price_id, item_id, or price_type with includes/excludes - operators. Only applicable when grouping_keys is set. + price_filters: Filters to scope which prices are included in alert evaluation. Supports + filtering by price_id, item_id, or price_type with includes/excludes operators. + Only applicable to spend_exceeded alerts and to cost_exceeded alerts with + grouping_keys set. threshold_overrides: Per-group threshold overrides. Each override maps a specific combination of grouping_keys values to a list of thresholds that fully replaces the default @@ -630,14 +691,20 @@ async def update( timeout: float | httpx.Timeout | None | NotGiven = not_given, idempotency_key: str | None = None, ) -> Alert: - """ - This endpoint updates the thresholds of an alert. + """This endpoint updates the thresholds of an alert. + + On cost alerts it also updates + `price_filters`, and on subscription-scoped grouped cost alerts + `threshold_overrides`; omitting either leaves it unchanged, and an empty list + clears it. Args: thresholds: The thresholds that define the values at which the alert will be triggered. - price_filters: Replaces the price filters on a grouped cost alert; an empty list clears them. - Only applicable to cost alerts with grouping_keys. Omit to leave unchanged. + price_filters: Replaces the price filters on the alert; an empty list clears them. Only + applicable to spend_exceeded alerts and to cost_exceeded alerts with + grouping_keys set. Alerts accept the price_id, item_id, and price_type fields + only. Omit to leave unchanged. threshold_overrides: Replaces the per-group threshold overrides on a grouped cost alert; an empty list clears them. Only applicable to cost alerts with grouping_keys. Omit to @@ -755,6 +822,57 @@ def list( model=Alert, ) + async def delete( + self, + alert_configuration_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> None: + """This endpoint deletes a subscription or customer-scoped alert. + + The alert is + soft-deleted: it stops firing immediately and no longer appears in fetch or list + responses, while the underlying record is retained internally for audit. + + Plan-level alerts cannot be deleted via the API — disable them instead + (`POST /v1/alerts/{alert_configuration_id}/disable`). Their removal would need + to be unwound from every subscription the alert was propagated to, which isn't + supported yet. + + Args: + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + if not alert_configuration_id: + raise ValueError( + f"Expected a non-empty value for `alert_configuration_id` but received {alert_configuration_id!r}" + ) + extra_headers = {"Accept": "*/*", **(extra_headers or {})} + return await self._delete( + path_template("/alerts/{alert_configuration_id}", alert_configuration_id=alert_configuration_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=NoneType, + ) + async def create_for_customer( self, customer_id: str, @@ -894,7 +1012,7 @@ async def create_for_subscription( subscription_id: str, *, thresholds: Iterable[ThresholdParam], - type: Literal["usage_exceeded", "cost_exceeded"], + type: Literal["usage_exceeded", "cost_exceeded", "spend_exceeded"], currency: Optional[str] | Omit = omit, grouping_keys: Optional[SequenceNotStr[str]] | Omit = omit, metric_id: Optional[str] | Omit = omit, @@ -911,32 +1029,36 @@ async def create_for_subscription( """ This endpoint is used to create alerts at the subscription level. - Subscription level alerts can be one of two types: `usage_exceeded` or - `cost_exceeded`. A `usage_exceeded` alert is scoped to a particular metric and - is triggered when the usage of that metric exceeds predefined thresholds during - the current billing cycle. A `cost_exceeded` alert is triggered when the total - amount due during the current billing cycle surpasses predefined thresholds. - `cost_exceeded` alerts do not include burndown of pre-purchase credits. Each + Subscription level alerts can be one of three types: `usage_exceeded`, + `cost_exceeded`, or `spend_exceeded`. A `usage_exceeded` alert is scoped to a + particular metric and is triggered when the usage of that metric exceeds + predefined thresholds during the current billing cycle. A `cost_exceeded` alert + is triggered when the total amount due during the current billing cycle + surpasses predefined thresholds. `cost_exceeded` alerts do not include burndown + of pre-purchase credits. A `spend_exceeded` alert is triggered when the rated + spend (the pricing subtotal, before invoice-level adjustments and credits) + denominated in the alert's currency exceeds predefined thresholds during the + current billing cycle; `price_filters` can scope which prices contribute. Each subscription can have one `cost_exceeded` alert and one `usage_exceeded` alert - per metric that is a part of the subscription. Alerts are triggered based on - usage or cost conditions met during the current billing cycle. + per metric that is a part of the subscription. Args: thresholds: The thresholds that define the values at which the alert will be triggered. type: The type of alert to create. This must be a valid alert type. - currency: The case sensitive currency or custom pricing unit to use for grouped cost - alerts. Required when grouping_keys is set. + currency: The case sensitive currency or custom pricing unit the alert is denominated in. + Required for spend_exceeded alerts and when grouping_keys is set. grouping_keys: The property keys to group cost alerts by. Only applicable for cost_exceeded alerts. metric_id: The metric to track usage for. - price_filters: Filters to scope which prices are included in grouped cost alert evaluation. - Supports filtering by price_id, item_id, or price_type with includes/excludes - operators. Only applicable when grouping_keys is set. + price_filters: Filters to scope which prices are included in alert evaluation. Supports + filtering by price_id, item_id, or price_type with includes/excludes operators. + Only applicable to spend_exceeded alerts and to cost_exceeded alerts with + grouping_keys set. threshold_overrides: Per-group threshold overrides. Each override maps a specific combination of grouping_keys values to a list of thresholds that fully replaces the default @@ -1096,6 +1218,9 @@ def __init__(self, alerts: Alerts) -> None: self.list = _legacy_response.to_raw_response_wrapper( alerts.list, ) + self.delete = _legacy_response.to_raw_response_wrapper( + alerts.delete, + ) self.create_for_customer = _legacy_response.to_raw_response_wrapper( alerts.create_for_customer, ) @@ -1126,6 +1251,9 @@ def __init__(self, alerts: AsyncAlerts) -> None: self.list = _legacy_response.async_to_raw_response_wrapper( alerts.list, ) + self.delete = _legacy_response.async_to_raw_response_wrapper( + alerts.delete, + ) self.create_for_customer = _legacy_response.async_to_raw_response_wrapper( alerts.create_for_customer, ) @@ -1156,6 +1284,9 @@ def __init__(self, alerts: Alerts) -> None: self.list = to_streamed_response_wrapper( alerts.list, ) + self.delete = to_streamed_response_wrapper( + alerts.delete, + ) self.create_for_customer = to_streamed_response_wrapper( alerts.create_for_customer, ) @@ -1186,6 +1317,9 @@ def __init__(self, alerts: AsyncAlerts) -> None: self.list = async_to_streamed_response_wrapper( alerts.list, ) + self.delete = async_to_streamed_response_wrapper( + alerts.delete, + ) self.create_for_customer = async_to_streamed_response_wrapper( alerts.create_for_customer, ) diff --git a/src/orb/resources/customers/costs.py b/src/orb/resources/customers/costs.py index 0ccf347b..02ca608e 100644 --- a/src/orb/resources/customers/costs.py +++ b/src/orb/resources/customers/costs.py @@ -193,6 +193,16 @@ def list( `secondary_grouping_key` based on the matrix price definition, for each `grouping_value` and `secondary_grouping_value` available. + ## Trials + + During a trial, usage prices carry a trial discount, capped at the plan's trial + maximum amount (or 100% when no maximum is set), and the trial period is billed + as a single invoice dated at the trial's end. In the costs response, + trial-period usage appears at full list price in `subtotal`, with the trial + discount reflected in `total`: `total` is \\$$0 as long as usage stays within the + trial maximum, and usage beyond the maximum bills normally. Fixed fees are not + charged during a trial. + Args: currency: The currency or custom pricing unit to use. @@ -369,6 +379,16 @@ def list_by_external_id( `secondary_grouping_key` based on the matrix price definition, for each `grouping_value` and `secondary_grouping_value` available. + ## Trials + + During a trial, usage prices carry a trial discount, capped at the plan's trial + maximum amount (or 100% when no maximum is set), and the trial period is billed + as a single invoice dated at the trial's end. In the costs response, + trial-period usage appears at full list price in `subtotal`, with the trial + discount reflected in `total`: `total` is \\$$0 as long as usage stays within the + trial maximum, and usage beyond the maximum bills normally. Fixed fees are not + charged during a trial. + Args: currency: The currency or custom pricing unit to use. @@ -588,6 +608,16 @@ async def list( `secondary_grouping_key` based on the matrix price definition, for each `grouping_value` and `secondary_grouping_value` available. + ## Trials + + During a trial, usage prices carry a trial discount, capped at the plan's trial + maximum amount (or 100% when no maximum is set), and the trial period is billed + as a single invoice dated at the trial's end. In the costs response, + trial-period usage appears at full list price in `subtotal`, with the trial + discount reflected in `total`: `total` is \\$$0 as long as usage stays within the + trial maximum, and usage beyond the maximum bills normally. Fixed fees are not + charged during a trial. + Args: currency: The currency or custom pricing unit to use. @@ -764,6 +794,16 @@ async def list_by_external_id( `secondary_grouping_key` based on the matrix price definition, for each `grouping_value` and `secondary_grouping_value` available. + ## Trials + + During a trial, usage prices carry a trial discount, capped at the plan's trial + maximum amount (or 100% when no maximum is set), and the trial period is billed + as a single invoice dated at the trial's end. In the costs response, + trial-period usage appears at full list price in `subtotal`, with the trial + discount reflected in `total`: `total` is \\$$0 as long as usage stays within the + trial maximum, and usage beyond the maximum bills normally. Fixed fees are not + charged during a trial. + Args: currency: The currency or custom pricing unit to use. diff --git a/src/orb/resources/customers/customers.py b/src/orb/resources/customers/customers.py index 48a74719..3263325a 100644 --- a/src/orb/resources/customers/customers.py +++ b/src/orb/resources/customers/customers.py @@ -21,7 +21,9 @@ customer_list_params, customer_create_params, customer_update_params, + customer_create_portal_session_params, customer_update_by_external_id_params, + customer_create_portal_session_by_external_id_params, ) from ..._types import Body, Omit, Query, Headers, NoneType, NotGiven, SequenceNotStr, omit, not_given from ..._utils import path_template, maybe_transform, async_maybe_transform @@ -51,7 +53,11 @@ from ...types.shared_params.customer_tax_id import CustomerTaxID from ...types.customer_hierarchy_config_param import CustomerHierarchyConfigParam from ...types.new_reporting_configuration_param import NewReportingConfigurationParam +from ...types.customer_create_portal_session_response import CustomerCreatePortalSessionResponse from ...types.new_accounting_sync_configuration_param import NewAccountingSyncConfigurationParam +from ...types.customer_create_portal_session_by_external_id_response import ( + CustomerCreatePortalSessionByExternalIDResponse, +) __all__ = ["Customers", "AsyncCustomers"] @@ -842,6 +848,133 @@ def delete( cast_to=NoneType, ) + def create_portal_session( + self, + customer_id: str, + *, + expires_in_minutes: int | Omit = omit, + invalidate_existing: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> CustomerCreatePortalSessionResponse: + """ + Creates a portal session for the customer, returning a short-lived URL that + provides authenticated access to the customer's billing portal. The session + expires after `expires_in_minutes` (default 60, max 180). By default, creating a + new session invalidates any other active portal sessions for the customer; pass + `invalidate_existing=false` to allow concurrent sessions. + + Args: + expires_in_minutes: Duration in minutes until the portal session expires. Defaults to 60. + Maximum 180. + + invalidate_existing: When true (default), creating this session soft-deletes any other active portal + sessions for the customer. Set to false to allow concurrent sessions — useful + when minting portal links for multiple authenticated end-users at once. The + customer's permanent portal link (if any) is never invalidated by this. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + if not customer_id: + raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}") + return self._post( + path_template("/customers/{customer_id}/portal_sessions", customer_id=customer_id), + body=maybe_transform( + { + "expires_in_minutes": expires_in_minutes, + "invalidate_existing": invalidate_existing, + }, + customer_create_portal_session_params.CustomerCreatePortalSessionParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=CustomerCreatePortalSessionResponse, + ) + + def create_portal_session_by_external_id( + self, + external_customer_id: str, + *, + expires_in_minutes: int | Omit = omit, + invalidate_existing: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> CustomerCreatePortalSessionByExternalIDResponse: + """ + Creates a portal session for the customer, returning a short-lived URL that + provides authenticated access to the customer's billing portal. The session + expires after `expires_in_minutes` (default 60, max 180). By default, creating a + new session invalidates any other active portal sessions for the customer; pass + `invalidate_existing=false` to allow concurrent sessions. + + Args: + expires_in_minutes: Duration in minutes until the portal session expires. Defaults to 60. + Maximum 180. + + invalidate_existing: When true (default), creating this session soft-deletes any other active portal + sessions for the customer. Set to false to allow concurrent sessions — useful + when minting portal links for multiple authenticated end-users at once. The + customer's permanent portal link (if any) is never invalidated by this. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + if not external_customer_id: + raise ValueError( + f"Expected a non-empty value for `external_customer_id` but received {external_customer_id!r}" + ) + return self._post( + path_template( + "/customers/external_customer_id/{external_customer_id}/portal_sessions", + external_customer_id=external_customer_id, + ), + body=maybe_transform( + { + "expires_in_minutes": expires_in_minutes, + "invalidate_existing": invalidate_existing, + }, + customer_create_portal_session_by_external_id_params.CustomerCreatePortalSessionByExternalIDParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=CustomerCreatePortalSessionByExternalIDResponse, + ) + def fetch( self, customer_id: str, @@ -2099,6 +2232,133 @@ async def delete( cast_to=NoneType, ) + async def create_portal_session( + self, + customer_id: str, + *, + expires_in_minutes: int | Omit = omit, + invalidate_existing: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> CustomerCreatePortalSessionResponse: + """ + Creates a portal session for the customer, returning a short-lived URL that + provides authenticated access to the customer's billing portal. The session + expires after `expires_in_minutes` (default 60, max 180). By default, creating a + new session invalidates any other active portal sessions for the customer; pass + `invalidate_existing=false` to allow concurrent sessions. + + Args: + expires_in_minutes: Duration in minutes until the portal session expires. Defaults to 60. + Maximum 180. + + invalidate_existing: When true (default), creating this session soft-deletes any other active portal + sessions for the customer. Set to false to allow concurrent sessions — useful + when minting portal links for multiple authenticated end-users at once. The + customer's permanent portal link (if any) is never invalidated by this. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + if not customer_id: + raise ValueError(f"Expected a non-empty value for `customer_id` but received {customer_id!r}") + return await self._post( + path_template("/customers/{customer_id}/portal_sessions", customer_id=customer_id), + body=await async_maybe_transform( + { + "expires_in_minutes": expires_in_minutes, + "invalidate_existing": invalidate_existing, + }, + customer_create_portal_session_params.CustomerCreatePortalSessionParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=CustomerCreatePortalSessionResponse, + ) + + async def create_portal_session_by_external_id( + self, + external_customer_id: str, + *, + expires_in_minutes: int | Omit = omit, + invalidate_existing: bool | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> CustomerCreatePortalSessionByExternalIDResponse: + """ + Creates a portal session for the customer, returning a short-lived URL that + provides authenticated access to the customer's billing portal. The session + expires after `expires_in_minutes` (default 60, max 180). By default, creating a + new session invalidates any other active portal sessions for the customer; pass + `invalidate_existing=false` to allow concurrent sessions. + + Args: + expires_in_minutes: Duration in minutes until the portal session expires. Defaults to 60. + Maximum 180. + + invalidate_existing: When true (default), creating this session soft-deletes any other active portal + sessions for the customer. Set to false to allow concurrent sessions — useful + when minting portal links for multiple authenticated end-users at once. The + customer's permanent portal link (if any) is never invalidated by this. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + if not external_customer_id: + raise ValueError( + f"Expected a non-empty value for `external_customer_id` but received {external_customer_id!r}" + ) + return await self._post( + path_template( + "/customers/external_customer_id/{external_customer_id}/portal_sessions", + external_customer_id=external_customer_id, + ), + body=await async_maybe_transform( + { + "expires_in_minutes": expires_in_minutes, + "invalidate_existing": invalidate_existing, + }, + customer_create_portal_session_by_external_id_params.CustomerCreatePortalSessionByExternalIDParams, + ), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=CustomerCreatePortalSessionByExternalIDResponse, + ) + async def fetch( self, customer_id: str, @@ -2586,6 +2846,12 @@ def __init__(self, customers: Customers) -> None: self.delete = _legacy_response.to_raw_response_wrapper( customers.delete, ) + self.create_portal_session = _legacy_response.to_raw_response_wrapper( + customers.create_portal_session, + ) + self.create_portal_session_by_external_id = _legacy_response.to_raw_response_wrapper( + customers.create_portal_session_by_external_id, + ) self.fetch = _legacy_response.to_raw_response_wrapper( customers.fetch, ) @@ -2666,6 +2932,12 @@ def __init__(self, customers: AsyncCustomers) -> None: self.delete = _legacy_response.async_to_raw_response_wrapper( customers.delete, ) + self.create_portal_session = _legacy_response.async_to_raw_response_wrapper( + customers.create_portal_session, + ) + self.create_portal_session_by_external_id = _legacy_response.async_to_raw_response_wrapper( + customers.create_portal_session_by_external_id, + ) self.fetch = _legacy_response.async_to_raw_response_wrapper( customers.fetch, ) @@ -2746,6 +3018,12 @@ def __init__(self, customers: Customers) -> None: self.delete = to_streamed_response_wrapper( customers.delete, ) + self.create_portal_session = to_streamed_response_wrapper( + customers.create_portal_session, + ) + self.create_portal_session_by_external_id = to_streamed_response_wrapper( + customers.create_portal_session_by_external_id, + ) self.fetch = to_streamed_response_wrapper( customers.fetch, ) @@ -2826,6 +3104,12 @@ def __init__(self, customers: AsyncCustomers) -> None: self.delete = async_to_streamed_response_wrapper( customers.delete, ) + self.create_portal_session = async_to_streamed_response_wrapper( + customers.create_portal_session, + ) + self.create_portal_session_by_external_id = async_to_streamed_response_wrapper( + customers.create_portal_session_by_external_id, + ) self.fetch = async_to_streamed_response_wrapper( customers.fetch, ) diff --git a/src/orb/resources/events/events.py b/src/orb/resources/events/events.py index 0b44afc8..9ef81056 100644 --- a/src/orb/resources/events/events.py +++ b/src/orb/resources/events/events.py @@ -280,7 +280,6 @@ def ingest( *, events: Iterable[event_ingest_params.Event], backfill_id: Optional[str] | Omit = omit, - debug: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -473,9 +472,6 @@ def ingest( backfill_id: If this ingestion request is part of a backfill, this parameter ties the ingested events to the backfill - debug: Pending Deprecation: Flag to enable additional debug information in the endpoint - response - extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -495,13 +491,7 @@ def ingest( extra_body=extra_body, timeout=timeout, idempotency_key=idempotency_key, - query=maybe_transform( - { - "backfill_id": backfill_id, - "debug": debug, - }, - event_ingest_params.EventIngestParams, - ), + query=maybe_transform({"backfill_id": backfill_id}, event_ingest_params.EventIngestParams), ), cast_to=EventIngestResponse, ) @@ -821,7 +811,6 @@ async def ingest( *, events: Iterable[event_ingest_params.Event], backfill_id: Optional[str] | Omit = omit, - debug: bool | Omit = omit, # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. # The extra values given here take precedence over values defined on the client or passed to this method. extra_headers: Headers | None = None, @@ -1014,9 +1003,6 @@ async def ingest( backfill_id: If this ingestion request is part of a backfill, this parameter ties the ingested events to the backfill - debug: Pending Deprecation: Flag to enable additional debug information in the endpoint - response - extra_headers: Send extra headers extra_query: Add additional query parameters to the request @@ -1036,13 +1022,7 @@ async def ingest( extra_body=extra_body, timeout=timeout, idempotency_key=idempotency_key, - query=await async_maybe_transform( - { - "backfill_id": backfill_id, - "debug": debug, - }, - event_ingest_params.EventIngestParams, - ), + query=await async_maybe_transform({"backfill_id": backfill_id}, event_ingest_params.EventIngestParams), ), cast_to=EventIngestResponse, ) diff --git a/src/orb/resources/invoices.py b/src/orb/resources/invoices.py index 88c5e422..f406ac1e 100644 --- a/src/orb/resources/invoices.py +++ b/src/orb/resources/invoices.py @@ -93,9 +93,10 @@ def create( currency: An ISO 4217 currency string. Must be the same as the customer's currency if it is set. - invoice_date: An ISO 8601 date or timestamp, interpreted in the customer's timezone. Must be - in the past. If a date is set without a time, `invoice_date` is set to midnight - on the chosen date in the customer's timezone. + invoice_date: An ISO 8601 date or timestamp, interpreted in the customer's timezone. If a date + is set without a time, `invoice_date` is set to midnight on the chosen date in + the customer's timezone. `invoice_date` cannot be more than one year in the + future. auto_collection: Determines whether this invoice will automatically attempt to charge a saved payment method, if any. If not specified, the invoice inherits the customer's @@ -125,9 +126,9 @@ def create( on issue, whereas a value of '30' represents that the customer has 30 days to pay the invoice. Do not set this field if you want to set a custom due date. - will_auto_issue: When true, this invoice will be submitted for issuance upon creation. When - false, the resulting invoice will require manual review to issue. Defaulted to - false. + will_auto_issue: When true, auto-issues the invoice on the invoice date. If the invoice date is + today's date or earlier, the invoice will be issued upon creation. When false, + the resulting invoice will require manual review to issue. Defaults to false. extra_headers: Send extra headers @@ -799,6 +800,130 @@ def pay( cast_to=Invoice, ) + def regenerate_invoice_pdf( + self, + invoice_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> Invoice: + """ + This endpoint triggers a regeneration of the PDF for a finalized invoice. + + The invoice must be finalized (`issued`, `paid`, `synced`, or `void`) and must + already have an existing PDF. The original PDF is archived (not permanently + deleted) to maintain an audit trail. + + **Important Legal Considerations:** + + Regenerating invoice PDFs may not be permitted in all jurisdictions. Many tax + authorities require that issued invoices remain unmodified. Before using this + endpoint, ensure that: + + - Your local tax regulations permit modification of issued billing documents + - You have a legitimate business reason (e.g., fixing template errors, updating + branding) + - You maintain proper records of the original PDF (archived automatically by + Orb) + + Recommended use cases: + + - Correcting template rendering issues + - Applying updated company branding + - Updating customer data that was incorrect at issuance + + Args: + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + if not invoice_id: + raise ValueError(f"Expected a non-empty value for `invoice_id` but received {invoice_id!r}") + return self._post( + path_template("/invoices/{invoice_id}/regenerate_invoice_pdf", invoice_id=invoice_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=Invoice, + ) + + def regenerate_receipt_pdf( + self, + invoice_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> Invoice: + """ + This endpoint triggers a regeneration of the receipt PDF for a paid invoice. + + The invoice must be in `paid` status and must already have an existing receipt + PDF. The original PDF is archived (not permanently deleted) to maintain an audit + trail. + + **Important Legal Considerations:** + + Regenerating receipt PDFs may not be permitted in all jurisdictions. Many tax + authorities require that issued receipts remain unmodified. Before using this + endpoint, ensure that: + + - Your local tax regulations permit modification of issued billing documents + - You have a legitimate business reason (e.g., fixing template errors, updating + branding) + - You maintain proper records of the original PDF (archived automatically by + Orb) + + Recommended use cases: + + - Correcting template rendering issues + - Applying updated company branding + - Updating customer data that was incorrect at issuance + + Args: + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + if not invoice_id: + raise ValueError(f"Expected a non-empty value for `invoice_id` but received {invoice_id!r}") + return self._post( + path_template("/invoices/{invoice_id}/regenerate_receipt_pdf", invoice_id=invoice_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=Invoice, + ) + def void( self, invoice_id: str, @@ -908,9 +1033,10 @@ async def create( currency: An ISO 4217 currency string. Must be the same as the customer's currency if it is set. - invoice_date: An ISO 8601 date or timestamp, interpreted in the customer's timezone. Must be - in the past. If a date is set without a time, `invoice_date` is set to midnight - on the chosen date in the customer's timezone. + invoice_date: An ISO 8601 date or timestamp, interpreted in the customer's timezone. If a date + is set without a time, `invoice_date` is set to midnight on the chosen date in + the customer's timezone. `invoice_date` cannot be more than one year in the + future. auto_collection: Determines whether this invoice will automatically attempt to charge a saved payment method, if any. If not specified, the invoice inherits the customer's @@ -940,9 +1066,9 @@ async def create( on issue, whereas a value of '30' represents that the customer has 30 days to pay the invoice. Do not set this field if you want to set a custom due date. - will_auto_issue: When true, this invoice will be submitted for issuance upon creation. When - false, the resulting invoice will require manual review to issue. Defaulted to - false. + will_auto_issue: When true, auto-issues the invoice on the invoice date. If the invoice date is + today's date or earlier, the invoice will be issued upon creation. When false, + the resulting invoice will require manual review to issue. Defaults to false. extra_headers: Send extra headers @@ -1616,6 +1742,130 @@ async def pay( cast_to=Invoice, ) + async def regenerate_invoice_pdf( + self, + invoice_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> Invoice: + """ + This endpoint triggers a regeneration of the PDF for a finalized invoice. + + The invoice must be finalized (`issued`, `paid`, `synced`, or `void`) and must + already have an existing PDF. The original PDF is archived (not permanently + deleted) to maintain an audit trail. + + **Important Legal Considerations:** + + Regenerating invoice PDFs may not be permitted in all jurisdictions. Many tax + authorities require that issued invoices remain unmodified. Before using this + endpoint, ensure that: + + - Your local tax regulations permit modification of issued billing documents + - You have a legitimate business reason (e.g., fixing template errors, updating + branding) + - You maintain proper records of the original PDF (archived automatically by + Orb) + + Recommended use cases: + + - Correcting template rendering issues + - Applying updated company branding + - Updating customer data that was incorrect at issuance + + Args: + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + if not invoice_id: + raise ValueError(f"Expected a non-empty value for `invoice_id` but received {invoice_id!r}") + return await self._post( + path_template("/invoices/{invoice_id}/regenerate_invoice_pdf", invoice_id=invoice_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=Invoice, + ) + + async def regenerate_receipt_pdf( + self, + invoice_id: str, + *, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> Invoice: + """ + This endpoint triggers a regeneration of the receipt PDF for a paid invoice. + + The invoice must be in `paid` status and must already have an existing receipt + PDF. The original PDF is archived (not permanently deleted) to maintain an audit + trail. + + **Important Legal Considerations:** + + Regenerating receipt PDFs may not be permitted in all jurisdictions. Many tax + authorities require that issued receipts remain unmodified. Before using this + endpoint, ensure that: + + - Your local tax regulations permit modification of issued billing documents + - You have a legitimate business reason (e.g., fixing template errors, updating + branding) + - You maintain proper records of the original PDF (archived automatically by + Orb) + + Recommended use cases: + + - Correcting template rendering issues + - Applying updated company branding + - Updating customer data that was incorrect at issuance + + Args: + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + if not invoice_id: + raise ValueError(f"Expected a non-empty value for `invoice_id` but received {invoice_id!r}") + return await self._post( + path_template("/invoices/{invoice_id}/regenerate_receipt_pdf", invoice_id=invoice_id), + options=make_request_options( + extra_headers=extra_headers, + extra_query=extra_query, + extra_body=extra_body, + timeout=timeout, + idempotency_key=idempotency_key, + ), + cast_to=Invoice, + ) + async def void( self, invoice_id: str, @@ -1705,6 +1955,12 @@ def __init__(self, invoices: Invoices) -> None: self.pay = _legacy_response.to_raw_response_wrapper( invoices.pay, ) + self.regenerate_invoice_pdf = _legacy_response.to_raw_response_wrapper( + invoices.regenerate_invoice_pdf, + ) + self.regenerate_receipt_pdf = _legacy_response.to_raw_response_wrapper( + invoices.regenerate_receipt_pdf, + ) self.void = _legacy_response.to_raw_response_wrapper( invoices.void, ) @@ -1747,6 +2003,12 @@ def __init__(self, invoices: AsyncInvoices) -> None: self.pay = _legacy_response.async_to_raw_response_wrapper( invoices.pay, ) + self.regenerate_invoice_pdf = _legacy_response.async_to_raw_response_wrapper( + invoices.regenerate_invoice_pdf, + ) + self.regenerate_receipt_pdf = _legacy_response.async_to_raw_response_wrapper( + invoices.regenerate_receipt_pdf, + ) self.void = _legacy_response.async_to_raw_response_wrapper( invoices.void, ) @@ -1789,6 +2051,12 @@ def __init__(self, invoices: Invoices) -> None: self.pay = to_streamed_response_wrapper( invoices.pay, ) + self.regenerate_invoice_pdf = to_streamed_response_wrapper( + invoices.regenerate_invoice_pdf, + ) + self.regenerate_receipt_pdf = to_streamed_response_wrapper( + invoices.regenerate_receipt_pdf, + ) self.void = to_streamed_response_wrapper( invoices.void, ) @@ -1831,6 +2099,12 @@ def __init__(self, invoices: AsyncInvoices) -> None: self.pay = async_to_streamed_response_wrapper( invoices.pay, ) + self.regenerate_invoice_pdf = async_to_streamed_response_wrapper( + invoices.regenerate_invoice_pdf, + ) + self.regenerate_receipt_pdf = async_to_streamed_response_wrapper( + invoices.regenerate_receipt_pdf, + ) self.void = async_to_streamed_response_wrapper( invoices.void, ) diff --git a/src/orb/resources/licenses/external_licenses.py b/src/orb/resources/licenses/external_licenses.py index 7b84aeb2..c13316d9 100644 --- a/src/orb/resources/licenses/external_licenses.py +++ b/src/orb/resources/licenses/external_licenses.py @@ -62,6 +62,13 @@ def get_usage( Returns usage and remaining credits for a license identified by its external license ID. + Resolves the currently active license with this external ID, i.e. the license + whose active window contains the current time. An external license ID can map to + multiple licenses over time, so if none is currently active (deactivated, window + ended, or not yet started) this returns a 404. To fetch usage for a license + regardless of active state, use the endpoint that takes Orb's internal license + ID. + Date range defaults to the current billing period if not specified. Args: @@ -162,6 +169,13 @@ async def get_usage( Returns usage and remaining credits for a license identified by its external license ID. + Resolves the currently active license with this external ID, i.e. the license + whose active window contains the current time. An external license ID can map to + multiple licenses over time, so if none is currently active (deactivated, window + ended, or not yet started) this returns a 404. To fetch usage for a license + regardless of active state, use the endpoint that takes Orb's internal license + ID. + Date range defaults to the current billing period if not specified. Args: diff --git a/src/orb/resources/licenses/usage.py b/src/orb/resources/licenses/usage.py index ba9a551e..1fd21acc 100644 --- a/src/orb/resources/licenses/usage.py +++ b/src/orb/resources/licenses/usage.py @@ -132,6 +132,9 @@ def get_usage( """ Returns usage and remaining credits for a specific license over a date range. + Resolves the license by ID regardless of whether it is currently active, unlike + the external-license-ID variant, which only resolves a currently active license. + Date range defaults to the current billing period if not specified. Args: @@ -291,6 +294,9 @@ async def get_usage( """ Returns usage and remaining credits for a specific license over a date range. + Resolves the license by ID regardless of whether it is currently active, unlike + the external-license-ID variant, which only resolves a currently active license. + Date range defaults to the current billing period if not specified. Args: diff --git a/src/orb/resources/prices/prices.py b/src/orb/resources/prices/prices.py index d45d184d..c0f7e78b 100644 --- a/src/orb/resources/prices/prices.py +++ b/src/orb/resources/prices/prices.py @@ -171,7 +171,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -269,7 +273,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -367,7 +375,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -466,7 +478,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -564,7 +580,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -662,7 +682,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -761,7 +785,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -860,7 +888,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -959,7 +991,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -1058,7 +1094,114 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. + + metadata: User-specified key/value pairs for the resource. Individual keys can be removed + by setting the value to `null`, and the entire metadata mapping can be cleared + by setting `metadata` to `null`. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + ... + + @overload + def create( + self, + *, + cadence: Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"], + currency: str, + grouped_tiered_matrix_config: price_create_params.NewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig, + item_id: str, + model_type: Literal["grouped_tiered_matrix"], + name: str, + billable_metric_id: Optional[str] | Omit = omit, + billed_in_advance: Optional[bool] | Omit = omit, + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] | Omit = omit, + conversion_rate: Optional[float] | Omit = omit, + conversion_rate_config: Optional[price_create_params.NewFloatingGroupedTieredMatrixPriceConversionRateConfig] + | Omit = omit, + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] | Omit = omit, + external_price_id: Optional[str] | Omit = omit, + fixed_price_quantity: Optional[float] | Omit = omit, + invoice_grouping_key: Optional[str] | Omit = omit, + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] | Omit = omit, + license_type_id: Optional[str] | Omit = omit, + metadata: Optional[Dict[str, Optional[str]]] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> Price: + """ + This endpoint is used to create a [price](/product-catalog/price-configuration). + A price created using this endpoint is always an add-on, meaning that it's not + associated with a specific plan and can instead be individually added to + subscriptions, including subscriptions on different plans. + + An `external_price_id` can be optionally specified as an alias to allow + ergonomic interaction with prices in the Orb API. + + See the [Price resource](/product-catalog/price-configuration) for the + specification of different price model configurations possible in this endpoint. + + Args: + cadence: The cadence to bill for this price on. + + currency: An ISO 4217 currency string for which this price is billed in. + + grouped_tiered_matrix_config: Configuration for grouped_tiered_matrix pricing + + item_id: The id of the item the price will be associated with. + + model_type: The pricing model type + + name: The name of the price. + + billable_metric_id: The id of the billable metric for the price. Only needed if the price is + usage-based. + + billed_in_advance: If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + + billing_cycle_configuration: For custom cadence: specifies the duration of the billing period in days or + months. + + conversion_rate: The per unit conversion rate of the price currency to the invoicing currency. + + conversion_rate_config: The configuration for the rate of the price currency to the invoicing currency. + + dimensional_price_configuration: For dimensional price: specifies a price group and dimension values + + external_price_id: An alias for the price. + + fixed_price_quantity: If the Price represents a fixed cost, this represents the quantity of units + applied. + + invoice_grouping_key: The property used to group this price on an invoice + + invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. + If unspecified, a single invoice is produced per billing cycle. + + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -1159,7 +1302,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -1258,7 +1405,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -1357,7 +1508,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -1456,7 +1611,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -1557,7 +1716,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -1656,7 +1819,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -1755,7 +1922,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -1854,7 +2025,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -1953,7 +2128,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -2054,7 +2233,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -2155,7 +2338,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -2256,7 +2443,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -2355,7 +2546,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -2454,7 +2649,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -2553,7 +2752,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -2654,7 +2857,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -2755,7 +2962,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -2854,7 +3065,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -2955,7 +3170,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -3054,7 +3273,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -3153,7 +3376,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -3252,7 +3479,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -3351,7 +3582,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -3450,7 +3685,11 @@ def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -3479,6 +3718,7 @@ def create( ["cadence", "currency", "item_id", "model_type", "name", "tiered_package_config"], ["cadence", "currency", "item_id", "model_type", "name", "tiered_with_minimum_config"], ["cadence", "currency", "grouped_tiered_config", "item_id", "model_type", "name"], + ["cadence", "currency", "grouped_tiered_matrix_config", "item_id", "model_type", "name"], ["cadence", "currency", "item_id", "model_type", "name", "tiered_package_with_minimum_config"], ["cadence", "currency", "item_id", "model_type", "name", "package_with_allocation_config"], ["cadence", "currency", "item_id", "model_type", "name", "unit_with_percent_config"], @@ -3520,6 +3760,7 @@ def create( | Literal["tiered_package"] | Literal["tiered_with_minimum"] | Literal["grouped_tiered"] + | Literal["grouped_tiered_matrix"] | Literal["tiered_package_with_minimum"] | Literal["package_with_allocation"] | Literal["unit_with_percent"] @@ -3560,6 +3801,7 @@ def create( | Optional[price_create_params.NewFloatingTieredPackagePriceConversionRateConfig] | Optional[price_create_params.NewFloatingTieredWithMinimumPriceConversionRateConfig] | Optional[price_create_params.NewFloatingGroupedTieredPriceConversionRateConfig] + | Optional[price_create_params.NewFloatingGroupedTieredMatrixPriceConversionRateConfig] | Optional[price_create_params.NewFloatingTieredPackageWithMinimumPriceConversionRateConfig] | Optional[price_create_params.NewFloatingPackageWithAllocationPriceConversionRateConfig] | Optional[price_create_params.NewFloatingUnitWithPercentPriceConversionRateConfig] @@ -3604,6 +3846,8 @@ def create( tiered_with_minimum_config: price_create_params.NewFloatingTieredWithMinimumPriceTieredWithMinimumConfig | Omit = omit, grouped_tiered_config: price_create_params.NewFloatingGroupedTieredPriceGroupedTieredConfig | Omit = omit, + grouped_tiered_matrix_config: price_create_params.NewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig + | Omit = omit, tiered_package_with_minimum_config: price_create_params.NewFloatingTieredPackageWithMinimumPriceTieredPackageWithMinimumConfig | Omit = omit, package_with_allocation_config: price_create_params.NewFloatingPackageWithAllocationPricePackageWithAllocationConfig @@ -3690,6 +3934,7 @@ def create( "tiered_package_config": tiered_package_config, "tiered_with_minimum_config": tiered_with_minimum_config, "grouped_tiered_config": grouped_tiered_config, + "grouped_tiered_matrix_config": grouped_tiered_matrix_config, "tiered_package_with_minimum_config": tiered_package_with_minimum_config, "package_with_allocation_config": package_with_allocation_config, "unit_with_percent_config": unit_with_percent_config, @@ -4264,7 +4509,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -4362,7 +4611,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -4460,7 +4713,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -4559,7 +4816,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -4657,7 +4918,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -4755,7 +5020,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -4854,7 +5123,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -4953,7 +5226,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -5052,7 +5329,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -5151,7 +5432,114 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. + + metadata: User-specified key/value pairs for the resource. Individual keys can be removed + by setting the value to `null`, and the entire metadata mapping can be cleared + by setting `metadata` to `null`. + + extra_headers: Send extra headers + + extra_query: Add additional query parameters to the request + + extra_body: Add additional JSON properties to the request + + timeout: Override the client-level default timeout for this request, in seconds + + idempotency_key: Specify a custom idempotency key for this request + """ + ... + + @overload + async def create( + self, + *, + cadence: Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"], + currency: str, + grouped_tiered_matrix_config: price_create_params.NewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig, + item_id: str, + model_type: Literal["grouped_tiered_matrix"], + name: str, + billable_metric_id: Optional[str] | Omit = omit, + billed_in_advance: Optional[bool] | Omit = omit, + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] | Omit = omit, + conversion_rate: Optional[float] | Omit = omit, + conversion_rate_config: Optional[price_create_params.NewFloatingGroupedTieredMatrixPriceConversionRateConfig] + | Omit = omit, + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] | Omit = omit, + external_price_id: Optional[str] | Omit = omit, + fixed_price_quantity: Optional[float] | Omit = omit, + invoice_grouping_key: Optional[str] | Omit = omit, + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] | Omit = omit, + license_type_id: Optional[str] | Omit = omit, + metadata: Optional[Dict[str, Optional[str]]] | Omit = omit, + # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs. + # The extra values given here take precedence over values defined on the client or passed to this method. + extra_headers: Headers | None = None, + extra_query: Query | None = None, + extra_body: Body | None = None, + timeout: float | httpx.Timeout | None | NotGiven = not_given, + idempotency_key: str | None = None, + ) -> Price: + """ + This endpoint is used to create a [price](/product-catalog/price-configuration). + A price created using this endpoint is always an add-on, meaning that it's not + associated with a specific plan and can instead be individually added to + subscriptions, including subscriptions on different plans. + + An `external_price_id` can be optionally specified as an alias to allow + ergonomic interaction with prices in the Orb API. + + See the [Price resource](/product-catalog/price-configuration) for the + specification of different price model configurations possible in this endpoint. + + Args: + cadence: The cadence to bill for this price on. + + currency: An ISO 4217 currency string for which this price is billed in. + + grouped_tiered_matrix_config: Configuration for grouped_tiered_matrix pricing + + item_id: The id of the item the price will be associated with. + + model_type: The pricing model type + + name: The name of the price. + + billable_metric_id: The id of the billable metric for the price. Only needed if the price is + usage-based. + + billed_in_advance: If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + + billing_cycle_configuration: For custom cadence: specifies the duration of the billing period in days or + months. + + conversion_rate: The per unit conversion rate of the price currency to the invoicing currency. + + conversion_rate_config: The configuration for the rate of the price currency to the invoicing currency. + + dimensional_price_configuration: For dimensional price: specifies a price group and dimension values + + external_price_id: An alias for the price. + + fixed_price_quantity: If the Price represents a fixed cost, this represents the quantity of units + applied. + + invoice_grouping_key: The property used to group this price on an invoice + + invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. + If unspecified, a single invoice is produced per billing cycle. + + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -5252,7 +5640,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -5351,7 +5743,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -5450,7 +5846,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -5549,7 +5949,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -5650,7 +6054,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -5749,7 +6157,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -5848,7 +6260,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -5947,7 +6363,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -6046,7 +6466,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -6147,7 +6571,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -6248,7 +6676,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -6349,7 +6781,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -6448,7 +6884,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -6547,7 +6987,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -6646,7 +7090,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -6747,7 +7195,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -6848,7 +7300,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -6947,7 +7403,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -7048,7 +7508,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -7147,7 +7611,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -7246,7 +7714,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -7345,7 +7817,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -7444,7 +7920,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -7543,7 +8023,11 @@ async def create( invoicing_cycle_configuration: Within each billing cycle, specifies the cadence at which invoices are produced. If unspecified, a single invoice is produced per billing cycle. - license_type_id: The ID of the license type to associate with this price. + license_type_id: The ID of the license type to associate with this price. On a usage price this + also marks the price as eligible to draw down from that license type's + allocation; a usage price created without it is billed normally. Usage prices + with a license type must use the `unit` model, and only draw down when their + currency matches the allocation's. metadata: User-specified key/value pairs for the resource. Individual keys can be removed by setting the value to `null`, and the entire metadata mapping can be cleared @@ -7572,6 +8056,7 @@ async def create( ["cadence", "currency", "item_id", "model_type", "name", "tiered_package_config"], ["cadence", "currency", "item_id", "model_type", "name", "tiered_with_minimum_config"], ["cadence", "currency", "grouped_tiered_config", "item_id", "model_type", "name"], + ["cadence", "currency", "grouped_tiered_matrix_config", "item_id", "model_type", "name"], ["cadence", "currency", "item_id", "model_type", "name", "tiered_package_with_minimum_config"], ["cadence", "currency", "item_id", "model_type", "name", "package_with_allocation_config"], ["cadence", "currency", "item_id", "model_type", "name", "unit_with_percent_config"], @@ -7613,6 +8098,7 @@ async def create( | Literal["tiered_package"] | Literal["tiered_with_minimum"] | Literal["grouped_tiered"] + | Literal["grouped_tiered_matrix"] | Literal["tiered_package_with_minimum"] | Literal["package_with_allocation"] | Literal["unit_with_percent"] @@ -7653,6 +8139,7 @@ async def create( | Optional[price_create_params.NewFloatingTieredPackagePriceConversionRateConfig] | Optional[price_create_params.NewFloatingTieredWithMinimumPriceConversionRateConfig] | Optional[price_create_params.NewFloatingGroupedTieredPriceConversionRateConfig] + | Optional[price_create_params.NewFloatingGroupedTieredMatrixPriceConversionRateConfig] | Optional[price_create_params.NewFloatingTieredPackageWithMinimumPriceConversionRateConfig] | Optional[price_create_params.NewFloatingPackageWithAllocationPriceConversionRateConfig] | Optional[price_create_params.NewFloatingUnitWithPercentPriceConversionRateConfig] @@ -7697,6 +8184,8 @@ async def create( tiered_with_minimum_config: price_create_params.NewFloatingTieredWithMinimumPriceTieredWithMinimumConfig | Omit = omit, grouped_tiered_config: price_create_params.NewFloatingGroupedTieredPriceGroupedTieredConfig | Omit = omit, + grouped_tiered_matrix_config: price_create_params.NewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig + | Omit = omit, tiered_package_with_minimum_config: price_create_params.NewFloatingTieredPackageWithMinimumPriceTieredPackageWithMinimumConfig | Omit = omit, package_with_allocation_config: price_create_params.NewFloatingPackageWithAllocationPricePackageWithAllocationConfig @@ -7783,6 +8272,7 @@ async def create( "tiered_package_config": tiered_package_config, "tiered_with_minimum_config": tiered_with_minimum_config, "grouped_tiered_config": grouped_tiered_config, + "grouped_tiered_matrix_config": grouped_tiered_matrix_config, "tiered_package_with_minimum_config": tiered_package_with_minimum_config, "package_with_allocation_config": package_with_allocation_config, "unit_with_percent_config": unit_with_percent_config, diff --git a/src/orb/resources/subscriptions.py b/src/orb/resources/subscriptions.py index 59a4a7a6..6caf9f40 100644 --- a/src/orb/resources/subscriptions.py +++ b/src/orb/resources/subscriptions.py @@ -1527,6 +1527,17 @@ def schedule_plan_change( Note that one of `plan_id` or `external_plan_id` is required in the request body for this operation. + ## Interaction with scheduled cancellations + + Scheduling a plan change also unschedules a pending cancellation, as long as the + cancellation date is on or after the plan change date: Orb honors the plan + change over the scheduled cancellation, and the subscription continues on the + new plan. Scheduling a plan change after the subscription's end date returns a + validation error instead. + + Any plan changes already scheduled at or after the new plan change's date are + unscheduled and replaced by it. + ## Customize your customer's subscriptions Prices and adjustments in a plan can be added, removed, or replaced on the @@ -1890,11 +1901,19 @@ def unschedule_cancellation( cancellation. This operation will turn on auto-renew, ensuring that the subscription does not end at the currently scheduled cancellation time. - Note: uncancellation is a lossy operation. Price intervals that were cut short - by the cancellation are extended to infinity (original end dates are lost), and - future intervals or phases scheduled after the cancellation time are permanently - deleted. For complex subscriptions with phases or scheduled plan changes, - consider creating a new plan change instead of uncancelling. + A cancellation that has already taken effect cannot be unscheduled. This + includes backdated cancellations: once the subscription's end date is in the + past, this endpoint returns a validation error. + + Note: uncancellation is a lossy operation. Price and adjustment intervals that + were cut short by the cancellation are extended to infinity (original end dates + are lost), and future intervals or phases scheduled after the cancellation time + are permanently deleted. For complex subscriptions with phases or scheduled plan + changes, consider creating a new plan change instead of uncancelling. + + If the scheduled cancellation already produced invoices or credit notes (for + example, a proration refund credit note for an in-advance fee), uncancelling + voids and reissues them as needed to match the subscription's new state. Args: extra_headers: Send extra headers @@ -1989,7 +2008,21 @@ def unschedule_pending_plan_changes( ) -> MutatedSubscription: """ This endpoint can be used to unschedule any pending plan changes on an existing - subscription. When called, all upcoming plan changes will be unscheduled. + subscription. When called, all upcoming plan changes will be unscheduled; it is + not possible to unschedule a single plan change if multiple are scheduled. + + Note: unscheduling a plan change is a lossy operation, with the same semantics + as + [unscheduling a cancellation](/api-reference/subscription/unschedule-subscription-cancellation). + Prices and adjustments on the current plan that were scheduled to end at the + plan change time are extended to infinity (original end dates are lost), and + anything scheduled to start after the plan change time is permanently deleted. + Coupons redeemed as part of an unscheduled plan change are released and can be + redeemed again. + + A scheduled cancellation is not affected by this operation: if the subscription + has both a pending plan change and a scheduled cancellation, unscheduling the + plan change leaves the cancellation in place. Args: extra_headers: Send extra headers @@ -3661,6 +3694,17 @@ async def schedule_plan_change( Note that one of `plan_id` or `external_plan_id` is required in the request body for this operation. + ## Interaction with scheduled cancellations + + Scheduling a plan change also unschedules a pending cancellation, as long as the + cancellation date is on or after the plan change date: Orb honors the plan + change over the scheduled cancellation, and the subscription continues on the + new plan. Scheduling a plan change after the subscription's end date returns a + validation error instead. + + Any plan changes already scheduled at or after the new plan change's date are + unscheduled and replaced by it. + ## Customize your customer's subscriptions Prices and adjustments in a plan can be added, removed, or replaced on the @@ -4024,11 +4068,19 @@ async def unschedule_cancellation( cancellation. This operation will turn on auto-renew, ensuring that the subscription does not end at the currently scheduled cancellation time. - Note: uncancellation is a lossy operation. Price intervals that were cut short - by the cancellation are extended to infinity (original end dates are lost), and - future intervals or phases scheduled after the cancellation time are permanently - deleted. For complex subscriptions with phases or scheduled plan changes, - consider creating a new plan change instead of uncancelling. + A cancellation that has already taken effect cannot be unscheduled. This + includes backdated cancellations: once the subscription's end date is in the + past, this endpoint returns a validation error. + + Note: uncancellation is a lossy operation. Price and adjustment intervals that + were cut short by the cancellation are extended to infinity (original end dates + are lost), and future intervals or phases scheduled after the cancellation time + are permanently deleted. For complex subscriptions with phases or scheduled plan + changes, consider creating a new plan change instead of uncancelling. + + If the scheduled cancellation already produced invoices or credit notes (for + example, a proration refund credit note for an in-advance fee), uncancelling + voids and reissues them as needed to match the subscription's new state. Args: extra_headers: Send extra headers @@ -4123,7 +4175,21 @@ async def unschedule_pending_plan_changes( ) -> MutatedSubscription: """ This endpoint can be used to unschedule any pending plan changes on an existing - subscription. When called, all upcoming plan changes will be unscheduled. + subscription. When called, all upcoming plan changes will be unscheduled; it is + not possible to unschedule a single plan change if multiple are scheduled. + + Note: unscheduling a plan change is a lossy operation, with the same semantics + as + [unscheduling a cancellation](/api-reference/subscription/unschedule-subscription-cancellation). + Prices and adjustments on the current plan that were scheduled to end at the + plan change time are extended to infinity (original end dates are lost), and + anything scheduled to start after the plan change time is permanently deleted. + Coupons redeemed as part of an unscheduled plan change are released and can be + redeemed again. + + A scheduled cancellation is not affected by this operation: if the subscription + has both a pending plan change and a scheduled cancellation, unscheduling the + plan change leaves the cancellation in place. Args: extra_headers: Send extra headers diff --git a/src/orb/types/__init__.py b/src/orb/types/__init__.py index 888766fa..2022bc08 100644 --- a/src/orb/types/__init__.py +++ b/src/orb/types/__init__.py @@ -251,6 +251,9 @@ from .new_subscription_package_price_param import NewSubscriptionPackagePriceParam as NewSubscriptionPackagePriceParam from .price_evaluate_preview_events_params import PriceEvaluatePreviewEventsParams as PriceEvaluatePreviewEventsParams from .subscription_fetch_schedule_response import SubscriptionFetchScheduleResponse as SubscriptionFetchScheduleResponse +from .customer_create_portal_session_params import ( + CustomerCreatePortalSessionParams as CustomerCreatePortalSessionParams, +) from .customer_update_by_external_id_params import CustomerUpdateByExternalIDParams as CustomerUpdateByExternalIDParams from .dimensional_price_group_create_params import ( DimensionalPriceGroupCreateParams as DimensionalPriceGroupCreateParams, @@ -267,6 +270,9 @@ from .price_evaluate_preview_events_response import ( PriceEvaluatePreviewEventsResponse as PriceEvaluatePreviewEventsResponse, ) +from .customer_create_portal_session_response import ( + CustomerCreatePortalSessionResponse as CustomerCreatePortalSessionResponse, +) from .new_accounting_sync_configuration_param import ( NewAccountingSyncConfigurationParam as NewAccountingSyncConfigurationParam, ) @@ -315,6 +321,9 @@ from .new_subscription_threshold_total_amount_price_param import ( NewSubscriptionThresholdTotalAmountPriceParam as NewSubscriptionThresholdTotalAmountPriceParam, ) +from .customer_create_portal_session_by_external_id_params import ( + CustomerCreatePortalSessionByExternalIDParams as CustomerCreatePortalSessionByExternalIDParams, +) from .new_subscription_cumulative_grouped_bulk_price_param import ( NewSubscriptionCumulativeGroupedBulkPriceParam as NewSubscriptionCumulativeGroupedBulkPriceParam, ) @@ -327,6 +336,9 @@ from .new_subscription_max_group_tiered_package_price_param import ( NewSubscriptionMaxGroupTieredPackagePriceParam as NewSubscriptionMaxGroupTieredPackagePriceParam, ) +from .customer_create_portal_session_by_external_id_response import ( + CustomerCreatePortalSessionByExternalIDResponse as CustomerCreatePortalSessionByExternalIDResponse, +) from .new_subscription_tiered_package_with_minimum_price_param import ( NewSubscriptionTieredPackageWithMinimumPriceParam as NewSubscriptionTieredPackageWithMinimumPriceParam, ) diff --git a/src/orb/types/alert.py b/src/orb/types/alert.py index 9381a4a3..9038226b 100644 --- a/src/orb/types/alert.py +++ b/src/orb/types/alert.py @@ -126,6 +126,7 @@ class Alert(BaseModel): "credit_balance_recovered", "usage_exceeded", "cost_exceeded", + "spend_exceeded", "license_balance_threshold_reached", ] """The type of alert. This must be a valid alert type.""" @@ -146,7 +147,11 @@ class Alert(BaseModel): """Minified license type for alert serialization.""" price_filters: Optional[List[PriceFilter]] = None - """Filters scoping which prices are included in grouped cost alert evaluation.""" + """ + Filters scoping which prices are included in spend and grouped cost alert + evaluation. Alerts use the price_id, item_id, and price_type fields only; the + alert's pricing unit is reported by currency. + """ threshold_overrides: Optional[List[ThresholdOverride]] = None """Per-group threshold overrides. diff --git a/src/orb/types/alert_create_for_subscription_params.py b/src/orb/types/alert_create_for_subscription_params.py index 090feb60..726adecf 100644 --- a/src/orb/types/alert_create_for_subscription_params.py +++ b/src/orb/types/alert_create_for_subscription_params.py @@ -15,13 +15,13 @@ class AlertCreateForSubscriptionParams(TypedDict, total=False): thresholds: Required[Iterable[ThresholdParam]] """The thresholds that define the values at which the alert will be triggered.""" - type: Required[Literal["usage_exceeded", "cost_exceeded"]] + type: Required[Literal["usage_exceeded", "cost_exceeded", "spend_exceeded"]] """The type of alert to create. This must be a valid alert type.""" currency: Optional[str] - """ - The case sensitive currency or custom pricing unit to use for grouped cost - alerts. Required when grouping_keys is set. + """The case sensitive currency or custom pricing unit the alert is denominated in. + + Required for spend_exceeded alerts and when grouping_keys is set. """ grouping_keys: Optional[SequenceNotStr[str]] @@ -34,10 +34,11 @@ class AlertCreateForSubscriptionParams(TypedDict, total=False): """The metric to track usage for.""" price_filters: Optional[Iterable[PriceFilter]] - """Filters to scope which prices are included in grouped cost alert evaluation. + """Filters to scope which prices are included in alert evaluation. Supports filtering by price_id, item_id, or price_type with includes/excludes - operators. Only applicable when grouping_keys is set. + operators. Only applicable to spend_exceeded alerts and to cost_exceeded alerts + with grouping_keys set. """ threshold_overrides: Optional[Iterable[ThresholdOverride]] diff --git a/src/orb/types/alert_update_params.py b/src/orb/types/alert_update_params.py index 859f9bf0..8688aca8 100644 --- a/src/orb/types/alert_update_params.py +++ b/src/orb/types/alert_update_params.py @@ -16,9 +16,11 @@ class AlertUpdateParams(TypedDict, total=False): """The thresholds that define the values at which the alert will be triggered.""" price_filters: Optional[Iterable[PriceFilter]] - """Replaces the price filters on a grouped cost alert; an empty list clears them. + """Replaces the price filters on the alert; an empty list clears them. - Only applicable to cost alerts with grouping_keys. Omit to leave unchanged. + Only applicable to spend_exceeded alerts and to cost_exceeded alerts with + grouping_keys set. Alerts accept the price_id, item_id, and price_type fields + only. Omit to leave unchanged. """ threshold_overrides: Optional[Iterable[ThresholdOverride]] diff --git a/src/orb/types/beta/external_plan_id_create_plan_version_params.py b/src/orb/types/beta/external_plan_id_create_plan_version_params.py index fc4df9fc..0d3c85b7 100644 --- a/src/orb/types/beta/external_plan_id_create_plan_version_params.py +++ b/src/orb/types/beta/external_plan_id_create_plan_version_params.py @@ -62,6 +62,10 @@ "AddPricePriceNewPlanBulkWithFiltersPriceBulkWithFiltersConfigFilter", "AddPricePriceNewPlanBulkWithFiltersPriceBulkWithFiltersConfigTier", "AddPricePriceNewPlanBulkWithFiltersPriceConversionRateConfig", + "AddPricePriceNewPlanGroupedTieredMatrixPrice", + "AddPricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "AddPricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "AddPricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig", "AddPricePriceNewPlanMatrixWithThresholdDiscountsPrice", "AddPricePriceNewPlanMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfig", "AddPricePriceNewPlanMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfigMatrixValue", @@ -107,6 +111,10 @@ "ReplacePricePriceNewPlanBulkWithFiltersPriceBulkWithFiltersConfigFilter", "ReplacePricePriceNewPlanBulkWithFiltersPriceBulkWithFiltersConfigTier", "ReplacePricePriceNewPlanBulkWithFiltersPriceConversionRateConfig", + "ReplacePricePriceNewPlanGroupedTieredMatrixPrice", + "ReplacePricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "ReplacePricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "ReplacePricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig", "ReplacePricePriceNewPlanMatrixWithThresholdDiscountsPrice", "ReplacePricePriceNewPlanMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfig", "ReplacePricePriceNewPlanMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfigMatrixValue", @@ -263,7 +271,8 @@ class AddPriceLicenseAllocationPrice(TypedDict, total=False): """License allocations to associate with this price. Each entry defines a per-license credit pool granted each cadence. Requires - license_type_id or license_type_configuration to be set. + license_type_id or license_type_configuration to be set. Usage prices draw down + from these allocations only if they set the same license type. """ model_type: Required[Literal["unit"]] @@ -327,7 +336,13 @@ class AddPriceLicenseAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -446,7 +461,136 @@ class AddPricePriceNewPlanBulkWithFiltersPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + reference_id: Optional[str] + """ + A transient ID that can be used to reference this price when adding adjustments + in the same API call. + """ + + +class AddPricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class AddPricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[AddPricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +AddPricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + +class AddPricePriceNewPlanGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + grouped_tiered_matrix_config: Required[AddPricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[AddPricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + currency: Optional[str] + """ + An ISO 4217 currency string, or custom pricing unit identifier, in which this + price is billed. + """ + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -593,7 +737,13 @@ class AddPricePriceNewPlanMatrixWithThresholdDiscountsPrice(TypedDict, total=Fal """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -702,7 +852,13 @@ class AddPricePriceNewPlanTieredWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -809,7 +965,13 @@ class AddPricePriceNewPlanGroupedWithMinMaxThresholdsPrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -916,7 +1078,13 @@ class AddPricePriceNewPlanCumulativeGroupedAllocationPrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1047,7 +1215,13 @@ class AddPricePriceNewPlanDailyCreditAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1169,7 +1343,13 @@ class AddPricePriceNewPlanMeteredAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1278,7 +1458,13 @@ class AddPricePriceNewPlanPercentCompositePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1387,7 +1573,13 @@ class AddPricePriceNewPlanEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1414,6 +1606,7 @@ class AddPricePriceNewPlanEventOutputPrice(TypedDict, total=False): NewPlanTieredPackagePrice, NewPlanTieredWithMinimumPrice, NewPlanGroupedTieredPrice, + AddPricePriceNewPlanGroupedTieredMatrixPrice, NewPlanTieredPackageWithMinimumPrice, NewPlanPackageWithAllocationPrice, NewPlanUnitWithPercentPrice, @@ -1573,7 +1766,8 @@ class ReplacePriceLicenseAllocationPrice(TypedDict, total=False): """License allocations to associate with this price. Each entry defines a per-license credit pool granted each cadence. Requires - license_type_id or license_type_configuration to be set. + license_type_id or license_type_configuration to be set. Usage prices draw down + from these allocations only if they set the same license type. """ model_type: Required[Literal["unit"]] @@ -1637,7 +1831,13 @@ class ReplacePriceLicenseAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1756,7 +1956,136 @@ class ReplacePricePriceNewPlanBulkWithFiltersPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + reference_id: Optional[str] + """ + A transient ID that can be used to reference this price when adding adjustments + in the same API call. + """ + + +class ReplacePricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class ReplacePricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[ReplacePricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +ReplacePricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + +class ReplacePricePriceNewPlanGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + grouped_tiered_matrix_config: Required[ReplacePricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[ReplacePricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + currency: Optional[str] + """ + An ISO 4217 currency string, or custom pricing unit identifier, in which this + price is billed. + """ + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1905,7 +2234,13 @@ class ReplacePricePriceNewPlanMatrixWithThresholdDiscountsPrice(TypedDict, total """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2014,7 +2349,13 @@ class ReplacePricePriceNewPlanTieredWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2121,7 +2462,13 @@ class ReplacePricePriceNewPlanGroupedWithMinMaxThresholdsPrice(TypedDict, total= """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2228,7 +2575,13 @@ class ReplacePricePriceNewPlanCumulativeGroupedAllocationPrice(TypedDict, total= """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2359,7 +2712,13 @@ class ReplacePricePriceNewPlanDailyCreditAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2481,7 +2840,13 @@ class ReplacePricePriceNewPlanMeteredAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2590,7 +2955,13 @@ class ReplacePricePriceNewPlanPercentCompositePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2699,7 +3070,13 @@ class ReplacePricePriceNewPlanEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2726,6 +3103,7 @@ class ReplacePricePriceNewPlanEventOutputPrice(TypedDict, total=False): NewPlanTieredPackagePrice, NewPlanTieredWithMinimumPrice, NewPlanGroupedTieredPrice, + ReplacePricePriceNewPlanGroupedTieredMatrixPrice, NewPlanTieredPackageWithMinimumPrice, NewPlanPackageWithAllocationPrice, NewPlanUnitWithPercentPrice, diff --git a/src/orb/types/beta_create_plan_version_params.py b/src/orb/types/beta_create_plan_version_params.py index 3d4f91fd..929dbc34 100644 --- a/src/orb/types/beta_create_plan_version_params.py +++ b/src/orb/types/beta_create_plan_version_params.py @@ -62,6 +62,10 @@ "AddPricePriceNewPlanBulkWithFiltersPriceBulkWithFiltersConfigFilter", "AddPricePriceNewPlanBulkWithFiltersPriceBulkWithFiltersConfigTier", "AddPricePriceNewPlanBulkWithFiltersPriceConversionRateConfig", + "AddPricePriceNewPlanGroupedTieredMatrixPrice", + "AddPricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "AddPricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "AddPricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig", "AddPricePriceNewPlanMatrixWithThresholdDiscountsPrice", "AddPricePriceNewPlanMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfig", "AddPricePriceNewPlanMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfigMatrixValue", @@ -107,6 +111,10 @@ "ReplacePricePriceNewPlanBulkWithFiltersPriceBulkWithFiltersConfigFilter", "ReplacePricePriceNewPlanBulkWithFiltersPriceBulkWithFiltersConfigTier", "ReplacePricePriceNewPlanBulkWithFiltersPriceConversionRateConfig", + "ReplacePricePriceNewPlanGroupedTieredMatrixPrice", + "ReplacePricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "ReplacePricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "ReplacePricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig", "ReplacePricePriceNewPlanMatrixWithThresholdDiscountsPrice", "ReplacePricePriceNewPlanMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfig", "ReplacePricePriceNewPlanMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfigMatrixValue", @@ -263,7 +271,8 @@ class AddPriceLicenseAllocationPrice(TypedDict, total=False): """License allocations to associate with this price. Each entry defines a per-license credit pool granted each cadence. Requires - license_type_id or license_type_configuration to be set. + license_type_id or license_type_configuration to be set. Usage prices draw down + from these allocations only if they set the same license type. """ model_type: Required[Literal["unit"]] @@ -327,7 +336,13 @@ class AddPriceLicenseAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -446,7 +461,136 @@ class AddPricePriceNewPlanBulkWithFiltersPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + reference_id: Optional[str] + """ + A transient ID that can be used to reference this price when adding adjustments + in the same API call. + """ + + +class AddPricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class AddPricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[AddPricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +AddPricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + +class AddPricePriceNewPlanGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + grouped_tiered_matrix_config: Required[AddPricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[AddPricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + currency: Optional[str] + """ + An ISO 4217 currency string, or custom pricing unit identifier, in which this + price is billed. + """ + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -593,7 +737,13 @@ class AddPricePriceNewPlanMatrixWithThresholdDiscountsPrice(TypedDict, total=Fal """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -702,7 +852,13 @@ class AddPricePriceNewPlanTieredWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -809,7 +965,13 @@ class AddPricePriceNewPlanGroupedWithMinMaxThresholdsPrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -916,7 +1078,13 @@ class AddPricePriceNewPlanCumulativeGroupedAllocationPrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1047,7 +1215,13 @@ class AddPricePriceNewPlanDailyCreditAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1169,7 +1343,13 @@ class AddPricePriceNewPlanMeteredAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1278,7 +1458,13 @@ class AddPricePriceNewPlanPercentCompositePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1387,7 +1573,13 @@ class AddPricePriceNewPlanEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1414,6 +1606,7 @@ class AddPricePriceNewPlanEventOutputPrice(TypedDict, total=False): NewPlanTieredPackagePrice, NewPlanTieredWithMinimumPrice, NewPlanGroupedTieredPrice, + AddPricePriceNewPlanGroupedTieredMatrixPrice, NewPlanTieredPackageWithMinimumPrice, NewPlanPackageWithAllocationPrice, NewPlanUnitWithPercentPrice, @@ -1573,7 +1766,8 @@ class ReplacePriceLicenseAllocationPrice(TypedDict, total=False): """License allocations to associate with this price. Each entry defines a per-license credit pool granted each cadence. Requires - license_type_id or license_type_configuration to be set. + license_type_id or license_type_configuration to be set. Usage prices draw down + from these allocations only if they set the same license type. """ model_type: Required[Literal["unit"]] @@ -1637,7 +1831,13 @@ class ReplacePriceLicenseAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1756,7 +1956,136 @@ class ReplacePricePriceNewPlanBulkWithFiltersPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + reference_id: Optional[str] + """ + A transient ID that can be used to reference this price when adding adjustments + in the same API call. + """ + + +class ReplacePricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class ReplacePricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[ReplacePricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +ReplacePricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + +class ReplacePricePriceNewPlanGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + grouped_tiered_matrix_config: Required[ReplacePricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[ReplacePricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + currency: Optional[str] + """ + An ISO 4217 currency string, or custom pricing unit identifier, in which this + price is billed. + """ + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1905,7 +2234,13 @@ class ReplacePricePriceNewPlanMatrixWithThresholdDiscountsPrice(TypedDict, total """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2014,7 +2349,13 @@ class ReplacePricePriceNewPlanTieredWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2121,7 +2462,13 @@ class ReplacePricePriceNewPlanGroupedWithMinMaxThresholdsPrice(TypedDict, total= """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2228,7 +2575,13 @@ class ReplacePricePriceNewPlanCumulativeGroupedAllocationPrice(TypedDict, total= """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2359,7 +2712,13 @@ class ReplacePricePriceNewPlanDailyCreditAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2481,7 +2840,13 @@ class ReplacePricePriceNewPlanMeteredAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2590,7 +2955,13 @@ class ReplacePricePriceNewPlanPercentCompositePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2699,7 +3070,13 @@ class ReplacePricePriceNewPlanEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2726,6 +3103,7 @@ class ReplacePricePriceNewPlanEventOutputPrice(TypedDict, total=False): NewPlanTieredPackagePrice, NewPlanTieredWithMinimumPrice, NewPlanGroupedTieredPrice, + ReplacePricePriceNewPlanGroupedTieredMatrixPrice, NewPlanTieredPackageWithMinimumPrice, NewPlanPackageWithAllocationPrice, NewPlanUnitWithPercentPrice, diff --git a/src/orb/types/billable_metric.py b/src/orb/types/billable_metric.py index b3b6a158..b09bbf23 100644 --- a/src/orb/types/billable_metric.py +++ b/src/orb/types/billable_metric.py @@ -37,6 +37,13 @@ class BillableMetric(BaseModel): name: str + sql: str + """The SQL definition of the metric. + + For metrics defined via configuration rather than SQL, this is a derived SQL + representation. + """ + status: Literal["active", "draft", "archived"] parameter_definitions: Optional[List[Dict[str, object]]] = None diff --git a/src/orb/types/credit_block_list_invoices_response.py b/src/orb/types/credit_block_list_invoices_response.py index 58cd20a6..04bff907 100644 --- a/src/orb/types/credit_block_list_invoices_response.py +++ b/src/orb/types/credit_block_list_invoices_response.py @@ -15,6 +15,7 @@ "BlockFilter", "BlockCreditAllocation", "BlockCreditAllocationFilter", + "BlockCreditCommitment", "Invoice", ] @@ -65,6 +66,19 @@ class BlockCreditAllocation(BaseModel): license_type_id: Optional[str] = None +class BlockCreditCommitment(BaseModel): + """ + The subscription commitment whose true-up rolled forward into this credit block. + Present only when `credit_block_source` is `commitment`. + """ + + id: str + """The ID of the subscription commitment this block was rolled forward from.""" + + subscription_id: Optional[str] = None + """The subscription the commitment belongs to.""" + + class Block(BaseModel): """The Credit Block resource models prepaid credits within Orb.""" @@ -72,10 +86,11 @@ class Block(BaseModel): balance: float - credit_block_source: Literal["allocation", "top_up", "manual"] + credit_block_source: Literal["allocation", "top_up", "commitment", "manual"] """ How this credit block was created: `allocation` (a subscription's recurring - credit allocation), `top_up` (an automatic balance-threshold top-up), or + credit allocation), `top_up` (an automatic balance-threshold top-up), + `commitment` (a subscription commitment true-up rolled forward as credit), or `manual` (a manual credit ledger increment, including credits voided or expired off another block). """ @@ -107,6 +122,12 @@ class Block(BaseModel): attribution of the funding price. """ + credit_commitment: Optional[BlockCreditCommitment] = None + """ + The subscription commitment whose true-up rolled forward into this credit block. + Present only when `credit_block_source` is `commitment`. + """ + class Invoice(BaseModel): id: str diff --git a/src/orb/types/credit_block_retrieve_response.py b/src/orb/types/credit_block_retrieve_response.py index f7dc3d7d..190da74c 100644 --- a/src/orb/types/credit_block_retrieve_response.py +++ b/src/orb/types/credit_block_retrieve_response.py @@ -7,7 +7,7 @@ from .._models import BaseModel from .shared.custom_expiration import CustomExpiration -__all__ = ["CreditBlockRetrieveResponse", "Filter", "CreditAllocation", "CreditAllocationFilter"] +__all__ = ["CreditBlockRetrieveResponse", "Filter", "CreditAllocation", "CreditAllocationFilter", "CreditCommitment"] class Filter(BaseModel): @@ -56,6 +56,19 @@ class CreditAllocation(BaseModel): license_type_id: Optional[str] = None +class CreditCommitment(BaseModel): + """ + The subscription commitment whose true-up rolled forward into this credit block. + Present only when `credit_block_source` is `commitment`. + """ + + id: str + """The ID of the subscription commitment this block was rolled forward from.""" + + subscription_id: Optional[str] = None + """The subscription the commitment belongs to.""" + + class CreditBlockRetrieveResponse(BaseModel): """The Credit Block resource models prepaid credits within Orb.""" @@ -63,10 +76,11 @@ class CreditBlockRetrieveResponse(BaseModel): balance: float - credit_block_source: Literal["allocation", "top_up", "manual"] + credit_block_source: Literal["allocation", "top_up", "commitment", "manual"] """ How this credit block was created: `allocation` (a subscription's recurring - credit allocation), `top_up` (an automatic balance-threshold top-up), or + credit allocation), `top_up` (an automatic balance-threshold top-up), + `commitment` (a subscription commitment true-up rolled forward as credit), or `manual` (a manual credit ledger increment, including credits voided or expired off another block). """ @@ -97,3 +111,9 @@ class CreditBlockRetrieveResponse(BaseModel): Extends the allocation resource serialized on prices with the catalog-item attribution of the funding price. """ + + credit_commitment: Optional[CreditCommitment] = None + """ + The subscription commitment whose true-up rolled forward into this credit block. + Present only when `credit_block_source` is `commitment`. + """ diff --git a/src/orb/types/customer_create_portal_session_by_external_id_params.py b/src/orb/types/customer_create_portal_session_by_external_id_params.py new file mode 100644 index 00000000..66ad95fa --- /dev/null +++ b/src/orb/types/customer_create_portal_session_by_external_id_params.py @@ -0,0 +1,23 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import TypedDict + +__all__ = ["CustomerCreatePortalSessionByExternalIDParams"] + + +class CustomerCreatePortalSessionByExternalIDParams(TypedDict, total=False): + expires_in_minutes: int + """Duration in minutes until the portal session expires. + + Defaults to 60. Maximum 180. + """ + + invalidate_existing: bool + """ + When true (default), creating this session soft-deletes any other active portal + sessions for the customer. Set to false to allow concurrent sessions — useful + when minting portal links for multiple authenticated end-users at once. The + customer's permanent portal link (if any) is never invalidated by this. + """ diff --git a/src/orb/types/customer_create_portal_session_by_external_id_response.py b/src/orb/types/customer_create_portal_session_by_external_id_response.py new file mode 100644 index 00000000..76362a1e --- /dev/null +++ b/src/orb/types/customer_create_portal_session_by_external_id_response.py @@ -0,0 +1,20 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from datetime import datetime + +from .._models import BaseModel + +__all__ = ["CustomerCreatePortalSessionByExternalIDResponse"] + + +class CustomerCreatePortalSessionByExternalIDResponse(BaseModel): + id: str + + created_at: datetime + + customer_id: str + + expires_at: Optional[datetime] = None + + url: str diff --git a/src/orb/types/customer_create_portal_session_params.py b/src/orb/types/customer_create_portal_session_params.py new file mode 100644 index 00000000..9428bef4 --- /dev/null +++ b/src/orb/types/customer_create_portal_session_params.py @@ -0,0 +1,23 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from __future__ import annotations + +from typing_extensions import TypedDict + +__all__ = ["CustomerCreatePortalSessionParams"] + + +class CustomerCreatePortalSessionParams(TypedDict, total=False): + expires_in_minutes: int + """Duration in minutes until the portal session expires. + + Defaults to 60. Maximum 180. + """ + + invalidate_existing: bool + """ + When true (default), creating this session soft-deletes any other active portal + sessions for the customer. Set to false to allow concurrent sessions — useful + when minting portal links for multiple authenticated end-users at once. The + customer's permanent portal link (if any) is never invalidated by this. + """ diff --git a/src/orb/types/customer_create_portal_session_response.py b/src/orb/types/customer_create_portal_session_response.py new file mode 100644 index 00000000..041271ae --- /dev/null +++ b/src/orb/types/customer_create_portal_session_response.py @@ -0,0 +1,20 @@ +# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. + +from typing import Optional +from datetime import datetime + +from .._models import BaseModel + +__all__ = ["CustomerCreatePortalSessionResponse"] + + +class CustomerCreatePortalSessionResponse(BaseModel): + id: str + + created_at: datetime + + customer_id: str + + expires_at: Optional[datetime] = None + + url: str diff --git a/src/orb/types/customers/credit_list_by_external_id_response.py b/src/orb/types/customers/credit_list_by_external_id_response.py index 5895cd48..b8f6a150 100644 --- a/src/orb/types/customers/credit_list_by_external_id_response.py +++ b/src/orb/types/customers/credit_list_by_external_id_response.py @@ -7,7 +7,7 @@ from ..._models import BaseModel from ..shared.custom_expiration import CustomExpiration -__all__ = ["CreditListByExternalIDResponse", "Filter", "CreditAllocation", "CreditAllocationFilter"] +__all__ = ["CreditListByExternalIDResponse", "Filter", "CreditAllocation", "CreditAllocationFilter", "CreditCommitment"] class Filter(BaseModel): @@ -58,15 +58,29 @@ class CreditAllocation(BaseModel): license_type_id: Optional[str] = None +class CreditCommitment(BaseModel): + """ + The subscription commitment whose true-up rolled forward into this credit block. + Present only when `credit_block_source` is `commitment`. + """ + + id: str + """The ID of the subscription commitment this block was rolled forward from.""" + + subscription_id: Optional[str] = None + """The subscription the commitment belongs to.""" + + class CreditListByExternalIDResponse(BaseModel): id: str balance: float - credit_block_source: Literal["allocation", "top_up", "manual"] + credit_block_source: Literal["allocation", "top_up", "commitment", "manual"] """ How this credit block was created: `allocation` (a subscription's recurring - credit allocation), `top_up` (an automatic balance-threshold top-up), or + credit allocation), `top_up` (an automatic balance-threshold top-up), + `commitment` (a subscription commitment true-up rolled forward as credit), or `manual` (a manual credit ledger increment, including credits voided or expired off another block). """ @@ -97,3 +111,9 @@ class CreditListByExternalIDResponse(BaseModel): Extends the allocation resource serialized on prices with the catalog-item attribution of the funding price. """ + + credit_commitment: Optional[CreditCommitment] = None + """ + The subscription commitment whose true-up rolled forward into this credit block. + Present only when `credit_block_source` is `commitment`. + """ diff --git a/src/orb/types/customers/credit_list_response.py b/src/orb/types/customers/credit_list_response.py index 7122af1d..f0b711e1 100644 --- a/src/orb/types/customers/credit_list_response.py +++ b/src/orb/types/customers/credit_list_response.py @@ -7,7 +7,7 @@ from ..._models import BaseModel from ..shared.custom_expiration import CustomExpiration -__all__ = ["CreditListResponse", "Filter", "CreditAllocation", "CreditAllocationFilter"] +__all__ = ["CreditListResponse", "Filter", "CreditAllocation", "CreditAllocationFilter", "CreditCommitment"] class Filter(BaseModel): @@ -58,15 +58,29 @@ class CreditAllocation(BaseModel): license_type_id: Optional[str] = None +class CreditCommitment(BaseModel): + """ + The subscription commitment whose true-up rolled forward into this credit block. + Present only when `credit_block_source` is `commitment`. + """ + + id: str + """The ID of the subscription commitment this block was rolled forward from.""" + + subscription_id: Optional[str] = None + """The subscription the commitment belongs to.""" + + class CreditListResponse(BaseModel): id: str balance: float - credit_block_source: Literal["allocation", "top_up", "manual"] + credit_block_source: Literal["allocation", "top_up", "commitment", "manual"] """ How this credit block was created: `allocation` (a subscription's recurring - credit allocation), `top_up` (an automatic balance-threshold top-up), or + credit allocation), `top_up` (an automatic balance-threshold top-up), + `commitment` (a subscription commitment true-up rolled forward as credit), or `manual` (a manual credit ledger increment, including credits voided or expired off another block). """ @@ -97,3 +111,9 @@ class CreditListResponse(BaseModel): Extends the allocation resource serialized on prices with the catalog-item attribution of the funding price. """ + + credit_commitment: Optional[CreditCommitment] = None + """ + The subscription commitment whose true-up rolled forward into this credit block. + Present only when `credit_block_source` is `commitment`. + """ diff --git a/src/orb/types/event_ingest_params.py b/src/orb/types/event_ingest_params.py index ec641062..b0d1a41d 100644 --- a/src/orb/types/event_ingest_params.py +++ b/src/orb/types/event_ingest_params.py @@ -20,12 +20,6 @@ class EventIngestParams(TypedDict, total=False): ingested events to the backfill """ - debug: bool - """ - Pending Deprecation: Flag to enable additional debug information in the endpoint - response - """ - class Event(TypedDict, total=False): event_name: Required[str] diff --git a/src/orb/types/event_ingest_response.py b/src/orb/types/event_ingest_response.py index 92fcf7d3..63e022f0 100644 --- a/src/orb/types/event_ingest_response.py +++ b/src/orb/types/event_ingest_response.py @@ -1,10 +1,10 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List, Optional +from typing import List from .._models import BaseModel -__all__ = ["EventIngestResponse", "ValidationFailed", "Debug"] +__all__ = ["EventIngestResponse", "ValidationFailed"] class ValidationFailed(BaseModel): @@ -18,16 +18,6 @@ class ValidationFailed(BaseModel): """ -class Debug(BaseModel): - """ - Optional debug information (only present when debug=true is passed to the endpoint). Contains ingested and duplicate event idempotency keys. - """ - - duplicate: List[str] - - ingested: List[str] - - class EventIngestResponse(BaseModel): validation_failed: List[ValidationFailed] """Contains all failing validation events. @@ -35,9 +25,3 @@ class EventIngestResponse(BaseModel): In the case of a 200, this array will always be empty. This field will always be present. """ - - debug: Optional[Debug] = None - """ - Optional debug information (only present when debug=true is passed to the - endpoint). Contains ingested and duplicate event idempotency keys. - """ diff --git a/src/orb/types/invoice_create_params.py b/src/orb/types/invoice_create_params.py index e8515a25..33580efb 100644 --- a/src/orb/types/invoice_create_params.py +++ b/src/orb/types/invoice_create_params.py @@ -23,8 +23,9 @@ class InvoiceCreateParams(TypedDict, total=False): invoice_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] """An ISO 8601 date or timestamp, interpreted in the customer's timezone. - Must be in the past. If a date is set without a time, `invoice_date` is set to - midnight on the chosen date in the customer's timezone. + If a date is set without a time, `invoice_date` is set to midnight on the chosen + date in the customer's timezone. `invoice_date` cannot be more than one year in + the future. """ line_items: Required[Iterable[LineItem]] @@ -81,10 +82,11 @@ class InvoiceCreateParams(TypedDict, total=False): """ will_auto_issue: bool - """When true, this invoice will be submitted for issuance upon creation. + """When true, auto-issues the invoice on the invoice date. - When false, the resulting invoice will require manual review to issue. Defaulted - to false. + If the invoice date is today's date or earlier, the invoice will be issued upon + creation. When false, the resulting invoice will require manual review to issue. + Defaults to false. """ diff --git a/src/orb/types/invoice_fetch_upcoming_response.py b/src/orb/types/invoice_fetch_upcoming_response.py index c3d10a77..8bb4ebd9 100644 --- a/src/orb/types/invoice_fetch_upcoming_response.py +++ b/src/orb/types/invoice_fetch_upcoming_response.py @@ -60,9 +60,9 @@ class AutoCollection(BaseModel): If Orb has ever attempted payment auto-collection for this invoice, this field will reflect when that attempt occurred. In conjunction with `next_attempt_at`, this can be used to tell whether the invoice is currently in dunning (that is, - `previously_attempted_at` is non-null, and `next_attempt_time` is non-null), or - if dunning has been exhausted (`previously_attempted_at` is non-null, but - `next_attempt_time` is null). + `previously_attempted_at` is non-null, and `next_attempt_at` is non-null), or if + dunning has been exhausted (`previously_attempted_at` is non-null, but + `next_attempt_at` is null). """ diff --git a/src/orb/types/invoice_issue_summary_response.py b/src/orb/types/invoice_issue_summary_response.py index 1af9b415..75b70082 100644 --- a/src/orb/types/invoice_issue_summary_response.py +++ b/src/orb/types/invoice_issue_summary_response.py @@ -40,9 +40,9 @@ class AutoCollection(BaseModel): If Orb has ever attempted payment auto-collection for this invoice, this field will reflect when that attempt occurred. In conjunction with `next_attempt_at`, this can be used to tell whether the invoice is currently in dunning (that is, - `previously_attempted_at` is non-null, and `next_attempt_time` is non-null), or - if dunning has been exhausted (`previously_attempted_at` is non-null, but - `next_attempt_time` is null). + `previously_attempted_at` is non-null, and `next_attempt_at` is non-null), or if + dunning has been exhausted (`previously_attempted_at` is non-null, but + `next_attempt_at` is null). """ diff --git a/src/orb/types/invoice_list_summary_response.py b/src/orb/types/invoice_list_summary_response.py index 76abc946..4de8f1df 100644 --- a/src/orb/types/invoice_list_summary_response.py +++ b/src/orb/types/invoice_list_summary_response.py @@ -34,9 +34,9 @@ class AutoCollection(BaseModel): If Orb has ever attempted payment auto-collection for this invoice, this field will reflect when that attempt occurred. In conjunction with `next_attempt_at`, this can be used to tell whether the invoice is currently in dunning (that is, - `previously_attempted_at` is non-null, and `next_attempt_time` is non-null), or - if dunning has been exhausted (`previously_attempted_at` is non-null, but - `next_attempt_time` is null). + `previously_attempted_at` is non-null, and `next_attempt_at` is non-null), or if + dunning has been exhausted (`previously_attempted_at` is non-null, but + `next_attempt_at` is null). """ diff --git a/src/orb/types/new_subscription_bulk_price_param.py b/src/orb/types/new_subscription_bulk_price_param.py index 7183b603..0c329b39 100644 --- a/src/orb/types/new_subscription_bulk_price_param.py +++ b/src/orb/types/new_subscription_bulk_price_param.py @@ -84,7 +84,13 @@ class NewSubscriptionBulkPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_bulk_with_proration_price_param.py b/src/orb/types/new_subscription_bulk_with_proration_price_param.py index 12b1cc4b..e5c8ad15 100644 --- a/src/orb/types/new_subscription_bulk_with_proration_price_param.py +++ b/src/orb/types/new_subscription_bulk_with_proration_price_param.py @@ -106,7 +106,13 @@ class NewSubscriptionBulkWithProrationPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_cumulative_grouped_bulk_price_param.py b/src/orb/types/new_subscription_cumulative_grouped_bulk_price_param.py index 8f37365c..d0a0e649 100644 --- a/src/orb/types/new_subscription_cumulative_grouped_bulk_price_param.py +++ b/src/orb/types/new_subscription_cumulative_grouped_bulk_price_param.py @@ -111,7 +111,13 @@ class NewSubscriptionCumulativeGroupedBulkPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_grouped_allocation_price_param.py b/src/orb/types/new_subscription_grouped_allocation_price_param.py index c1ff296d..017f54cb 100644 --- a/src/orb/types/new_subscription_grouped_allocation_price_param.py +++ b/src/orb/types/new_subscription_grouped_allocation_price_param.py @@ -97,7 +97,13 @@ class NewSubscriptionGroupedAllocationPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_grouped_tiered_package_price_param.py b/src/orb/types/new_subscription_grouped_tiered_package_price_param.py index c5421ac1..2c9c52d9 100644 --- a/src/orb/types/new_subscription_grouped_tiered_package_price_param.py +++ b/src/orb/types/new_subscription_grouped_tiered_package_price_param.py @@ -113,7 +113,13 @@ class NewSubscriptionGroupedTieredPackagePriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_grouped_tiered_price_param.py b/src/orb/types/new_subscription_grouped_tiered_price_param.py index 1b7e7376..91d2a2cb 100644 --- a/src/orb/types/new_subscription_grouped_tiered_price_param.py +++ b/src/orb/types/new_subscription_grouped_tiered_price_param.py @@ -111,7 +111,13 @@ class NewSubscriptionGroupedTieredPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_grouped_with_metered_minimum_price_param.py b/src/orb/types/new_subscription_grouped_with_metered_minimum_price_param.py index 21e60430..0375d4cd 100644 --- a/src/orb/types/new_subscription_grouped_with_metered_minimum_price_param.py +++ b/src/orb/types/new_subscription_grouped_with_metered_minimum_price_param.py @@ -135,7 +135,13 @@ class NewSubscriptionGroupedWithMeteredMinimumPriceParam(TypedDict, total=False) """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_grouped_with_prorated_minimum_price_param.py b/src/orb/types/new_subscription_grouped_with_prorated_minimum_price_param.py index 533f193e..c109ad75 100644 --- a/src/orb/types/new_subscription_grouped_with_prorated_minimum_price_param.py +++ b/src/orb/types/new_subscription_grouped_with_prorated_minimum_price_param.py @@ -101,7 +101,13 @@ class NewSubscriptionGroupedWithProratedMinimumPriceParam(TypedDict, total=False """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_matrix_price_param.py b/src/orb/types/new_subscription_matrix_price_param.py index 09b1d87d..4bbfcb72 100644 --- a/src/orb/types/new_subscription_matrix_price_param.py +++ b/src/orb/types/new_subscription_matrix_price_param.py @@ -84,7 +84,13 @@ class NewSubscriptionMatrixPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_matrix_with_allocation_price_param.py b/src/orb/types/new_subscription_matrix_with_allocation_price_param.py index 3c3bc127..660d86e8 100644 --- a/src/orb/types/new_subscription_matrix_with_allocation_price_param.py +++ b/src/orb/types/new_subscription_matrix_with_allocation_price_param.py @@ -84,7 +84,13 @@ class NewSubscriptionMatrixWithAllocationPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_matrix_with_display_name_price_param.py b/src/orb/types/new_subscription_matrix_with_display_name_price_param.py index 8d076d3d..cf84e4e7 100644 --- a/src/orb/types/new_subscription_matrix_with_display_name_price_param.py +++ b/src/orb/types/new_subscription_matrix_with_display_name_price_param.py @@ -112,7 +112,13 @@ class NewSubscriptionMatrixWithDisplayNamePriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_max_group_tiered_package_price_param.py b/src/orb/types/new_subscription_max_group_tiered_package_price_param.py index 9b6048d9..cf1c7ad5 100644 --- a/src/orb/types/new_subscription_max_group_tiered_package_price_param.py +++ b/src/orb/types/new_subscription_max_group_tiered_package_price_param.py @@ -112,7 +112,13 @@ class NewSubscriptionMaxGroupTieredPackagePriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_minimum_composite_price_param.py b/src/orb/types/new_subscription_minimum_composite_price_param.py index dc4df40b..8cd35323 100644 --- a/src/orb/types/new_subscription_minimum_composite_price_param.py +++ b/src/orb/types/new_subscription_minimum_composite_price_param.py @@ -94,7 +94,13 @@ class NewSubscriptionMinimumCompositePriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_package_price_param.py b/src/orb/types/new_subscription_package_price_param.py index bf9317ad..4cc1c12e 100644 --- a/src/orb/types/new_subscription_package_price_param.py +++ b/src/orb/types/new_subscription_package_price_param.py @@ -84,7 +84,13 @@ class NewSubscriptionPackagePriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_package_with_allocation_price_param.py b/src/orb/types/new_subscription_package_with_allocation_price_param.py index cc38d26d..9685f1cb 100644 --- a/src/orb/types/new_subscription_package_with_allocation_price_param.py +++ b/src/orb/types/new_subscription_package_with_allocation_price_param.py @@ -94,7 +94,13 @@ class NewSubscriptionPackageWithAllocationPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_scalable_matrix_with_tiered_pricing_price_param.py b/src/orb/types/new_subscription_scalable_matrix_with_tiered_pricing_price_param.py index cd462766..f586baaa 100644 --- a/src/orb/types/new_subscription_scalable_matrix_with_tiered_pricing_price_param.py +++ b/src/orb/types/new_subscription_scalable_matrix_with_tiered_pricing_price_param.py @@ -123,7 +123,13 @@ class NewSubscriptionScalableMatrixWithTieredPricingPriceParam(TypedDict, total= """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_scalable_matrix_with_unit_pricing_price_param.py b/src/orb/types/new_subscription_scalable_matrix_with_unit_pricing_price_param.py index 683bf6db..fe9448d0 100644 --- a/src/orb/types/new_subscription_scalable_matrix_with_unit_pricing_price_param.py +++ b/src/orb/types/new_subscription_scalable_matrix_with_unit_pricing_price_param.py @@ -121,7 +121,13 @@ class NewSubscriptionScalableMatrixWithUnitPricingPriceParam(TypedDict, total=Fa """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_threshold_total_amount_price_param.py b/src/orb/types/new_subscription_threshold_total_amount_price_param.py index 1345b770..f7f257a8 100644 --- a/src/orb/types/new_subscription_threshold_total_amount_price_param.py +++ b/src/orb/types/new_subscription_threshold_total_amount_price_param.py @@ -111,7 +111,13 @@ class NewSubscriptionThresholdTotalAmountPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_tiered_package_price_param.py b/src/orb/types/new_subscription_tiered_package_price_param.py index 9a0385a3..72efe553 100644 --- a/src/orb/types/new_subscription_tiered_package_price_param.py +++ b/src/orb/types/new_subscription_tiered_package_price_param.py @@ -112,7 +112,13 @@ class NewSubscriptionTieredPackagePriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_tiered_package_with_minimum_price_param.py b/src/orb/types/new_subscription_tiered_package_with_minimum_price_param.py index 9820fa69..9b682371 100644 --- a/src/orb/types/new_subscription_tiered_package_with_minimum_price_param.py +++ b/src/orb/types/new_subscription_tiered_package_with_minimum_price_param.py @@ -111,7 +111,13 @@ class NewSubscriptionTieredPackageWithMinimumPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_tiered_price_param.py b/src/orb/types/new_subscription_tiered_price_param.py index 77d73687..9a261b3d 100644 --- a/src/orb/types/new_subscription_tiered_price_param.py +++ b/src/orb/types/new_subscription_tiered_price_param.py @@ -84,7 +84,13 @@ class NewSubscriptionTieredPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_tiered_with_minimum_price_param.py b/src/orb/types/new_subscription_tiered_with_minimum_price_param.py index 2ebcf5e8..fd5d4d79 100644 --- a/src/orb/types/new_subscription_tiered_with_minimum_price_param.py +++ b/src/orb/types/new_subscription_tiered_with_minimum_price_param.py @@ -116,7 +116,13 @@ class NewSubscriptionTieredWithMinimumPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_unit_price_param.py b/src/orb/types/new_subscription_unit_price_param.py index 1259881b..384b5f8b 100644 --- a/src/orb/types/new_subscription_unit_price_param.py +++ b/src/orb/types/new_subscription_unit_price_param.py @@ -84,7 +84,13 @@ class NewSubscriptionUnitPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_unit_with_percent_price_param.py b/src/orb/types/new_subscription_unit_with_percent_price_param.py index 254ede68..be150746 100644 --- a/src/orb/types/new_subscription_unit_with_percent_price_param.py +++ b/src/orb/types/new_subscription_unit_with_percent_price_param.py @@ -94,7 +94,13 @@ class NewSubscriptionUnitWithPercentPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/new_subscription_unit_with_proration_price_param.py b/src/orb/types/new_subscription_unit_with_proration_price_param.py index 55d08831..f04cace8 100644 --- a/src/orb/types/new_subscription_unit_with_proration_price_param.py +++ b/src/orb/types/new_subscription_unit_with_proration_price_param.py @@ -91,7 +91,13 @@ class NewSubscriptionUnitWithProrationPriceParam(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/plan_create_params.py b/src/orb/types/plan_create_params.py index ea37466d..c306fa00 100644 --- a/src/orb/types/plan_create_params.py +++ b/src/orb/types/plan_create_params.py @@ -57,6 +57,10 @@ "PricePriceNewPlanBulkWithFiltersPriceBulkWithFiltersConfigFilter", "PricePriceNewPlanBulkWithFiltersPriceBulkWithFiltersConfigTier", "PricePriceNewPlanBulkWithFiltersPriceConversionRateConfig", + "PricePriceNewPlanGroupedTieredMatrixPrice", + "PricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "PricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "PricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig", "PricePriceNewPlanMatrixWithThresholdDiscountsPrice", "PricePriceNewPlanMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfig", "PricePriceNewPlanMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfigMatrixValue", @@ -179,7 +183,8 @@ class PriceLicenseAllocationPrice(TypedDict, total=False): """License allocations to associate with this price. Each entry defines a per-license credit pool granted each cadence. Requires - license_type_id or license_type_configuration to be set. + license_type_id or license_type_configuration to be set. Usage prices draw down + from these allocations only if they set the same license type. """ model_type: Required[Literal["unit"]] @@ -243,7 +248,13 @@ class PriceLicenseAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -362,7 +373,136 @@ class PricePriceNewPlanBulkWithFiltersPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + reference_id: Optional[str] + """ + A transient ID that can be used to reference this price when adding adjustments + in the same API call. + """ + + +class PricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class PricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[PricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +PricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + +class PricePriceNewPlanGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + grouped_tiered_matrix_config: Required[PricePriceNewPlanGroupedTieredMatrixPriceGroupedTieredMatrixConfig] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[PricePriceNewPlanGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + currency: Optional[str] + """ + An ISO 4217 currency string, or custom pricing unit identifier, in which this + price is billed. + """ + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -509,7 +649,13 @@ class PricePriceNewPlanMatrixWithThresholdDiscountsPrice(TypedDict, total=False) """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -618,7 +764,13 @@ class PricePriceNewPlanTieredWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -725,7 +877,13 @@ class PricePriceNewPlanGroupedWithMinMaxThresholdsPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -832,7 +990,13 @@ class PricePriceNewPlanCumulativeGroupedAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -961,7 +1125,13 @@ class PricePriceNewPlanDailyCreditAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1083,7 +1253,13 @@ class PricePriceNewPlanMeteredAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1192,7 +1368,13 @@ class PricePriceNewPlanPercentCompositePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1301,7 +1483,13 @@ class PricePriceNewPlanEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1328,6 +1516,7 @@ class PricePriceNewPlanEventOutputPrice(TypedDict, total=False): NewPlanTieredPackagePrice, NewPlanTieredWithMinimumPrice, NewPlanGroupedTieredPrice, + PricePriceNewPlanGroupedTieredMatrixPrice, NewPlanTieredPackageWithMinimumPrice, NewPlanPackageWithAllocationPrice, NewPlanUnitWithPercentPrice, diff --git a/src/orb/types/plans/migration_cancel_response.py b/src/orb/types/plans/migration_cancel_response.py index 8413360d..25ea9e8d 100644 --- a/src/orb/types/plans/migration_cancel_response.py +++ b/src/orb/types/plans/migration_cancel_response.py @@ -13,11 +13,12 @@ class MigrationCancelResponse(BaseModel): id: str """Unique identifier for this plan version change.""" - effective_time: Union[date, datetime, Literal["end_of_term"], None] = None + effective_time: Union[date, datetime, Literal["end_of_term", "end_of_invoice"], None] = None """When the migration takes effect. - Can be a specific date/time, or 'end_of_term' when scheduled to be at the end of - the current billing period. + Can be a specific date/time, 'end_of_term' when scheduled to be at the end of + the current billing period, or 'end_of_invoice' when scheduled to be at the + start of the next invoice. """ plan_id: str diff --git a/src/orb/types/plans/migration_list_response.py b/src/orb/types/plans/migration_list_response.py index a6bfe53e..ae501b45 100644 --- a/src/orb/types/plans/migration_list_response.py +++ b/src/orb/types/plans/migration_list_response.py @@ -13,11 +13,12 @@ class MigrationListResponse(BaseModel): id: str """Unique identifier for this plan version change.""" - effective_time: Union[date, datetime, Literal["end_of_term"], None] = None + effective_time: Union[date, datetime, Literal["end_of_term", "end_of_invoice"], None] = None """When the migration takes effect. - Can be a specific date/time, or 'end_of_term' when scheduled to be at the end of - the current billing period. + Can be a specific date/time, 'end_of_term' when scheduled to be at the end of + the current billing period, or 'end_of_invoice' when scheduled to be at the + start of the next invoice. """ plan_id: str diff --git a/src/orb/types/plans/migration_retrieve_response.py b/src/orb/types/plans/migration_retrieve_response.py index 13488a26..ef982f2f 100644 --- a/src/orb/types/plans/migration_retrieve_response.py +++ b/src/orb/types/plans/migration_retrieve_response.py @@ -13,11 +13,12 @@ class MigrationRetrieveResponse(BaseModel): id: str """Unique identifier for this plan version change.""" - effective_time: Union[date, datetime, Literal["end_of_term"], None] = None + effective_time: Union[date, datetime, Literal["end_of_term", "end_of_invoice"], None] = None """When the migration takes effect. - Can be a specific date/time, or 'end_of_term' when scheduled to be at the end of - the current billing period. + Can be a specific date/time, 'end_of_term' when scheduled to be at the end of + the current billing period, or 'end_of_invoice' when scheduled to be at the + start of the next invoice. """ plan_id: str diff --git a/src/orb/types/price_create_params.py b/src/orb/types/price_create_params.py index c5148f57..829c11e5 100644 --- a/src/orb/types/price_create_params.py +++ b/src/orb/types/price_create_params.py @@ -50,6 +50,10 @@ "NewFloatingGroupedTieredPriceGroupedTieredConfig", "NewFloatingGroupedTieredPriceGroupedTieredConfigTier", "NewFloatingGroupedTieredPriceConversionRateConfig", + "NewFloatingGroupedTieredMatrixPrice", + "NewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "NewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "NewFloatingGroupedTieredMatrixPriceConversionRateConfig", "NewFloatingTieredPackageWithMinimumPrice", "NewFloatingTieredPackageWithMinimumPriceTieredPackageWithMinimumConfig", "NewFloatingTieredPackageWithMinimumPriceTieredPackageWithMinimumConfigTier", @@ -204,7 +208,13 @@ class NewFloatingUnitPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -282,7 +292,13 @@ class NewFloatingTieredPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -360,7 +376,13 @@ class NewFloatingBulkPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -438,7 +460,13 @@ class NewFloatingBulkWithFiltersPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -548,7 +576,13 @@ class NewFloatingPackagePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -626,7 +660,13 @@ class NewFloatingMatrixPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -704,7 +744,13 @@ class NewFloatingThresholdTotalAmountPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -808,7 +854,13 @@ class NewFloatingTieredPackagePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -911,7 +963,13 @@ class NewFloatingTieredWithMinimumPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1018,7 +1076,13 @@ class NewFloatingGroupedTieredPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1055,6 +1119,120 @@ class NewFloatingGroupedTieredPriceGroupedTieredConfig(TypedDict, total=False): ] +class NewFloatingGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + currency: Required[str] + """An ISO 4217 currency string for which this price is billed in.""" + + grouped_tiered_matrix_config: Required[NewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[NewFloatingGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + +class NewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class NewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[NewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +NewFloatingGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + class NewFloatingTieredPackageWithMinimumPrice(TypedDict, total=False): cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] """The cadence to bill for this price on.""" @@ -1120,7 +1298,13 @@ class NewFloatingTieredPackageWithMinimumPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1222,7 +1406,13 @@ class NewFloatingPackageWithAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1312,7 +1502,13 @@ class NewFloatingUnitWithPercentPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1402,7 +1598,13 @@ class NewFloatingMatrixWithAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1484,7 +1686,13 @@ class NewFloatingMatrixWithThresholdDiscountsPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1618,7 +1826,13 @@ class NewFloatingTieredWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1718,7 +1932,13 @@ class NewFloatingUnitWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1805,7 +2025,13 @@ class NewFloatingGroupedAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1898,7 +2124,13 @@ class NewFloatingBulkWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1997,7 +2229,13 @@ class NewFloatingGroupedWithProratedMinimumPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2092,7 +2330,13 @@ class NewFloatingGroupedWithMeteredMinimumPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2221,7 +2465,13 @@ class NewFloatingGroupedWithMinMaxThresholdsPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2317,7 +2567,13 @@ class NewFloatingMatrixWithDisplayNamePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2420,7 +2676,13 @@ class NewFloatingGroupedTieredPackagePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2524,7 +2786,13 @@ class NewFloatingMaxGroupTieredPackagePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2629,7 +2897,13 @@ class NewFloatingScalableMatrixWithUnitPricingPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2747,7 +3021,13 @@ class NewFloatingScalableMatrixWithTieredPricingPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2866,7 +3146,13 @@ class NewFloatingCumulativeGroupedBulkPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2970,7 +3256,13 @@ class NewFloatingCumulativeGroupedAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -3066,7 +3358,13 @@ class NewFloatingDailyCreditAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -3186,7 +3484,13 @@ class NewFloatingMeteredAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -3299,7 +3603,13 @@ class NewFloatingMinimumCompositePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -3389,7 +3699,13 @@ class NewFloatingPercentCompositePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -3489,7 +3805,13 @@ class NewFloatingEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -3532,6 +3854,7 @@ class NewFloatingEventOutputPriceEventOutputConfig(TypedDict, total=False): NewFloatingTieredPackagePrice, NewFloatingTieredWithMinimumPrice, NewFloatingGroupedTieredPrice, + NewFloatingGroupedTieredMatrixPrice, NewFloatingTieredPackageWithMinimumPrice, NewFloatingPackageWithAllocationPrice, NewFloatingUnitWithPercentPrice, diff --git a/src/orb/types/price_evaluate_multiple_params.py b/src/orb/types/price_evaluate_multiple_params.py index f248a68f..292f4ce4 100644 --- a/src/orb/types/price_evaluate_multiple_params.py +++ b/src/orb/types/price_evaluate_multiple_params.py @@ -52,6 +52,10 @@ "PriceEvaluationPriceNewFloatingBulkWithFiltersPriceBulkWithFiltersConfigFilter", "PriceEvaluationPriceNewFloatingBulkWithFiltersPriceBulkWithFiltersConfigTier", "PriceEvaluationPriceNewFloatingBulkWithFiltersPriceConversionRateConfig", + "PriceEvaluationPriceNewFloatingGroupedTieredMatrixPrice", + "PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceConversionRateConfig", "PriceEvaluationPriceNewFloatingMatrixWithThresholdDiscountsPrice", "PriceEvaluationPriceNewFloatingMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfig", "PriceEvaluationPriceNewFloatingMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfigMatrixValue", @@ -196,7 +200,129 @@ class PriceEvaluationPriceNewFloatingBulkWithFiltersPrice(TypedDict, total=False """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + +class PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + +class PriceEvaluationPriceNewFloatingGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + currency: Required[str] + """An ISO 4217 currency string for which this price is billed in.""" + + grouped_tiered_matrix_config: Required[ + PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig + ] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -340,7 +466,13 @@ class PriceEvaluationPriceNewFloatingMatrixWithThresholdDiscountsPrice(TypedDict """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -442,7 +574,13 @@ class PriceEvaluationPriceNewFloatingGroupedWithMinMaxThresholdsPrice(TypedDict, """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -544,7 +682,13 @@ class PriceEvaluationPriceNewFloatingCumulativeGroupedAllocationPrice(TypedDict, """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -670,7 +814,13 @@ class PriceEvaluationPriceNewFloatingDailyCreditAllowancePrice(TypedDict, total= """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -783,7 +933,13 @@ class PriceEvaluationPriceNewFloatingMeteredAllowancePrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -883,7 +1039,13 @@ class PriceEvaluationPriceNewFloatingPercentCompositePrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -983,7 +1145,13 @@ class PriceEvaluationPriceNewFloatingEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1004,6 +1172,7 @@ class PriceEvaluationPriceNewFloatingEventOutputPrice(TypedDict, total=False): NewFloatingTieredPackagePrice, NewFloatingTieredWithMinimumPrice, NewFloatingGroupedTieredPrice, + PriceEvaluationPriceNewFloatingGroupedTieredMatrixPrice, NewFloatingTieredPackageWithMinimumPrice, NewFloatingPackageWithAllocationPrice, NewFloatingUnitWithPercentPrice, diff --git a/src/orb/types/price_evaluate_preview_events_params.py b/src/orb/types/price_evaluate_preview_events_params.py index 62d31035..acefdc11 100644 --- a/src/orb/types/price_evaluate_preview_events_params.py +++ b/src/orb/types/price_evaluate_preview_events_params.py @@ -53,6 +53,10 @@ "PriceEvaluationPriceNewFloatingBulkWithFiltersPriceBulkWithFiltersConfigFilter", "PriceEvaluationPriceNewFloatingBulkWithFiltersPriceBulkWithFiltersConfigTier", "PriceEvaluationPriceNewFloatingBulkWithFiltersPriceConversionRateConfig", + "PriceEvaluationPriceNewFloatingGroupedTieredMatrixPrice", + "PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceConversionRateConfig", "PriceEvaluationPriceNewFloatingMatrixWithThresholdDiscountsPrice", "PriceEvaluationPriceNewFloatingMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfig", "PriceEvaluationPriceNewFloatingMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfigMatrixValue", @@ -228,7 +232,129 @@ class PriceEvaluationPriceNewFloatingBulkWithFiltersPrice(TypedDict, total=False """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + +class PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + +class PriceEvaluationPriceNewFloatingGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + currency: Required[str] + """An ISO 4217 currency string for which this price is billed in.""" + + grouped_tiered_matrix_config: Required[ + PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig + ] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[PriceEvaluationPriceNewFloatingGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -372,7 +498,13 @@ class PriceEvaluationPriceNewFloatingMatrixWithThresholdDiscountsPrice(TypedDict """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -474,7 +606,13 @@ class PriceEvaluationPriceNewFloatingGroupedWithMinMaxThresholdsPrice(TypedDict, """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -576,7 +714,13 @@ class PriceEvaluationPriceNewFloatingCumulativeGroupedAllocationPrice(TypedDict, """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -702,7 +846,13 @@ class PriceEvaluationPriceNewFloatingDailyCreditAllowancePrice(TypedDict, total= """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -815,7 +965,13 @@ class PriceEvaluationPriceNewFloatingMeteredAllowancePrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -915,7 +1071,13 @@ class PriceEvaluationPriceNewFloatingPercentCompositePrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1015,7 +1177,13 @@ class PriceEvaluationPriceNewFloatingEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1036,6 +1204,7 @@ class PriceEvaluationPriceNewFloatingEventOutputPrice(TypedDict, total=False): NewFloatingTieredPackagePrice, NewFloatingTieredWithMinimumPrice, NewFloatingGroupedTieredPrice, + PriceEvaluationPriceNewFloatingGroupedTieredMatrixPrice, NewFloatingTieredPackageWithMinimumPrice, NewFloatingPackageWithAllocationPrice, NewFloatingUnitWithPercentPrice, diff --git a/src/orb/types/shared/changed_subscription_resources.py b/src/orb/types/shared/changed_subscription_resources.py index 1bdd1a2c..9fe46143 100644 --- a/src/orb/types/shared/changed_subscription_resources.py +++ b/src/orb/types/shared/changed_subscription_resources.py @@ -63,9 +63,9 @@ class CreatedInvoiceAutoCollection(BaseModel): If Orb has ever attempted payment auto-collection for this invoice, this field will reflect when that attempt occurred. In conjunction with `next_attempt_at`, this can be used to tell whether the invoice is currently in dunning (that is, - `previously_attempted_at` is non-null, and `next_attempt_time` is non-null), or - if dunning has been exhausted (`previously_attempted_at` is non-null, but - `next_attempt_time` is null). + `previously_attempted_at` is non-null, and `next_attempt_at` is non-null), or if + dunning has been exhausted (`previously_attempted_at` is non-null, but + `next_attempt_at` is null). """ diff --git a/src/orb/types/shared/fixed_fee_quantity_transition.py b/src/orb/types/shared/fixed_fee_quantity_transition.py index 60c0ac5a..1f11ee14 100644 --- a/src/orb/types/shared/fixed_fee_quantity_transition.py +++ b/src/orb/types/shared/fixed_fee_quantity_transition.py @@ -12,4 +12,4 @@ class FixedFeeQuantityTransition(BaseModel): price_id: str - quantity: int + quantity: float diff --git a/src/orb/types/shared/invoice.py b/src/orb/types/shared/invoice.py index 9b583cc8..27811350 100644 --- a/src/orb/types/shared/invoice.py +++ b/src/orb/types/shared/invoice.py @@ -60,9 +60,9 @@ class AutoCollection(BaseModel): If Orb has ever attempted payment auto-collection for this invoice, this field will reflect when that attempt occurred. In conjunction with `next_attempt_at`, this can be used to tell whether the invoice is currently in dunning (that is, - `previously_attempted_at` is non-null, and `next_attempt_time` is non-null), or - if dunning has been exhausted (`previously_attempted_at` is non-null, but - `next_attempt_time` is null). + `previously_attempted_at` is non-null, and `next_attempt_at` is non-null), or if + dunning has been exhausted (`previously_attempted_at` is non-null, but + `next_attempt_at` is null). """ diff --git a/src/orb/types/shared/new_floating_bulk_price.py b/src/orb/types/shared/new_floating_bulk_price.py index b9a72b3d..2d88b6ac 100644 --- a/src/orb/types/shared/new_floating_bulk_price.py +++ b/src/orb/types/shared/new_floating_bulk_price.py @@ -85,7 +85,13 @@ class NewFloatingBulkPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_bulk_with_proration_price.py b/src/orb/types/shared/new_floating_bulk_with_proration_price.py index 024f31aa..97a4d848 100644 --- a/src/orb/types/shared/new_floating_bulk_with_proration_price.py +++ b/src/orb/types/shared/new_floating_bulk_with_proration_price.py @@ -107,7 +107,13 @@ class NewFloatingBulkWithProrationPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_cumulative_grouped_bulk_price.py b/src/orb/types/shared/new_floating_cumulative_grouped_bulk_price.py index dbdb3118..6ee5af8a 100644 --- a/src/orb/types/shared/new_floating_cumulative_grouped_bulk_price.py +++ b/src/orb/types/shared/new_floating_cumulative_grouped_bulk_price.py @@ -112,7 +112,13 @@ class NewFloatingCumulativeGroupedBulkPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_grouped_allocation_price.py b/src/orb/types/shared/new_floating_grouped_allocation_price.py index 065750e8..a85216ed 100644 --- a/src/orb/types/shared/new_floating_grouped_allocation_price.py +++ b/src/orb/types/shared/new_floating_grouped_allocation_price.py @@ -98,7 +98,13 @@ class NewFloatingGroupedAllocationPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_grouped_tiered_package_price.py b/src/orb/types/shared/new_floating_grouped_tiered_package_price.py index 27584cf1..a29d2490 100644 --- a/src/orb/types/shared/new_floating_grouped_tiered_package_price.py +++ b/src/orb/types/shared/new_floating_grouped_tiered_package_price.py @@ -114,7 +114,13 @@ class NewFloatingGroupedTieredPackagePrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_grouped_tiered_price.py b/src/orb/types/shared/new_floating_grouped_tiered_price.py index 39c48ccc..4d8b5cb6 100644 --- a/src/orb/types/shared/new_floating_grouped_tiered_price.py +++ b/src/orb/types/shared/new_floating_grouped_tiered_price.py @@ -107,7 +107,13 @@ class NewFloatingGroupedTieredPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_grouped_with_metered_minimum_price.py b/src/orb/types/shared/new_floating_grouped_with_metered_minimum_price.py index 1c757ddd..e08ded4c 100644 --- a/src/orb/types/shared/new_floating_grouped_with_metered_minimum_price.py +++ b/src/orb/types/shared/new_floating_grouped_with_metered_minimum_price.py @@ -136,7 +136,13 @@ class NewFloatingGroupedWithMeteredMinimumPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_grouped_with_prorated_minimum_price.py b/src/orb/types/shared/new_floating_grouped_with_prorated_minimum_price.py index 236611b9..174ff51d 100644 --- a/src/orb/types/shared/new_floating_grouped_with_prorated_minimum_price.py +++ b/src/orb/types/shared/new_floating_grouped_with_prorated_minimum_price.py @@ -98,7 +98,13 @@ class NewFloatingGroupedWithProratedMinimumPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_matrix_price.py b/src/orb/types/shared/new_floating_matrix_price.py index ff12bc14..b48c7bbe 100644 --- a/src/orb/types/shared/new_floating_matrix_price.py +++ b/src/orb/types/shared/new_floating_matrix_price.py @@ -85,7 +85,13 @@ class NewFloatingMatrixPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_matrix_with_allocation_price.py b/src/orb/types/shared/new_floating_matrix_with_allocation_price.py index 688793ad..f1ead268 100644 --- a/src/orb/types/shared/new_floating_matrix_with_allocation_price.py +++ b/src/orb/types/shared/new_floating_matrix_with_allocation_price.py @@ -85,7 +85,13 @@ class NewFloatingMatrixWithAllocationPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_matrix_with_display_name_price.py b/src/orb/types/shared/new_floating_matrix_with_display_name_price.py index 8748b1fa..d85cdfc8 100644 --- a/src/orb/types/shared/new_floating_matrix_with_display_name_price.py +++ b/src/orb/types/shared/new_floating_matrix_with_display_name_price.py @@ -113,7 +113,13 @@ class NewFloatingMatrixWithDisplayNamePrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_max_group_tiered_package_price.py b/src/orb/types/shared/new_floating_max_group_tiered_package_price.py index 9603e115..eb3e7187 100644 --- a/src/orb/types/shared/new_floating_max_group_tiered_package_price.py +++ b/src/orb/types/shared/new_floating_max_group_tiered_package_price.py @@ -113,7 +113,13 @@ class NewFloatingMaxGroupTieredPackagePrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_minimum_composite_price.py b/src/orb/types/shared/new_floating_minimum_composite_price.py index 4c210ac3..5b8bf455 100644 --- a/src/orb/types/shared/new_floating_minimum_composite_price.py +++ b/src/orb/types/shared/new_floating_minimum_composite_price.py @@ -95,7 +95,13 @@ class NewFloatingMinimumCompositePrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_package_price.py b/src/orb/types/shared/new_floating_package_price.py index e0ccf470..e3fe36ce 100644 --- a/src/orb/types/shared/new_floating_package_price.py +++ b/src/orb/types/shared/new_floating_package_price.py @@ -85,7 +85,13 @@ class NewFloatingPackagePrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_package_with_allocation_price.py b/src/orb/types/shared/new_floating_package_with_allocation_price.py index 07c5a9e1..de76a1a0 100644 --- a/src/orb/types/shared/new_floating_package_with_allocation_price.py +++ b/src/orb/types/shared/new_floating_package_with_allocation_price.py @@ -95,7 +95,13 @@ class NewFloatingPackageWithAllocationPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_scalable_matrix_with_tiered_pricing_price.py b/src/orb/types/shared/new_floating_scalable_matrix_with_tiered_pricing_price.py index 2a13555d..b02d7961 100644 --- a/src/orb/types/shared/new_floating_scalable_matrix_with_tiered_pricing_price.py +++ b/src/orb/types/shared/new_floating_scalable_matrix_with_tiered_pricing_price.py @@ -124,7 +124,13 @@ class NewFloatingScalableMatrixWithTieredPricingPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_scalable_matrix_with_unit_pricing_price.py b/src/orb/types/shared/new_floating_scalable_matrix_with_unit_pricing_price.py index e1cc30a2..55761dfd 100644 --- a/src/orb/types/shared/new_floating_scalable_matrix_with_unit_pricing_price.py +++ b/src/orb/types/shared/new_floating_scalable_matrix_with_unit_pricing_price.py @@ -122,7 +122,13 @@ class NewFloatingScalableMatrixWithUnitPricingPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_threshold_total_amount_price.py b/src/orb/types/shared/new_floating_threshold_total_amount_price.py index be1c1229..67bb8bad 100644 --- a/src/orb/types/shared/new_floating_threshold_total_amount_price.py +++ b/src/orb/types/shared/new_floating_threshold_total_amount_price.py @@ -112,7 +112,13 @@ class NewFloatingThresholdTotalAmountPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_tiered_package_price.py b/src/orb/types/shared/new_floating_tiered_package_price.py index 4509b662..ac782c16 100644 --- a/src/orb/types/shared/new_floating_tiered_package_price.py +++ b/src/orb/types/shared/new_floating_tiered_package_price.py @@ -108,7 +108,13 @@ class NewFloatingTieredPackagePrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_tiered_package_with_minimum_price.py b/src/orb/types/shared/new_floating_tiered_package_with_minimum_price.py index 6d753c36..efb31213 100644 --- a/src/orb/types/shared/new_floating_tiered_package_with_minimum_price.py +++ b/src/orb/types/shared/new_floating_tiered_package_with_minimum_price.py @@ -112,7 +112,13 @@ class NewFloatingTieredPackageWithMinimumPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_tiered_price.py b/src/orb/types/shared/new_floating_tiered_price.py index 6fafe7f4..ec79cdb7 100644 --- a/src/orb/types/shared/new_floating_tiered_price.py +++ b/src/orb/types/shared/new_floating_tiered_price.py @@ -85,7 +85,13 @@ class NewFloatingTieredPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_tiered_with_minimum_price.py b/src/orb/types/shared/new_floating_tiered_with_minimum_price.py index 4f1b96f0..7f5b3599 100644 --- a/src/orb/types/shared/new_floating_tiered_with_minimum_price.py +++ b/src/orb/types/shared/new_floating_tiered_with_minimum_price.py @@ -117,7 +117,13 @@ class NewFloatingTieredWithMinimumPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_tiered_with_proration_price.py b/src/orb/types/shared/new_floating_tiered_with_proration_price.py index 4b6caab8..74bc8883 100644 --- a/src/orb/types/shared/new_floating_tiered_with_proration_price.py +++ b/src/orb/types/shared/new_floating_tiered_with_proration_price.py @@ -110,7 +110,13 @@ class NewFloatingTieredWithProrationPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_unit_price.py b/src/orb/types/shared/new_floating_unit_price.py index 852121cb..cfa1327b 100644 --- a/src/orb/types/shared/new_floating_unit_price.py +++ b/src/orb/types/shared/new_floating_unit_price.py @@ -85,7 +85,13 @@ class NewFloatingUnitPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_unit_with_percent_price.py b/src/orb/types/shared/new_floating_unit_with_percent_price.py index 4d91d40d..b641491f 100644 --- a/src/orb/types/shared/new_floating_unit_with_percent_price.py +++ b/src/orb/types/shared/new_floating_unit_with_percent_price.py @@ -95,7 +95,13 @@ class NewFloatingUnitWithPercentPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_floating_unit_with_proration_price.py b/src/orb/types/shared/new_floating_unit_with_proration_price.py index 2c6425a8..cb33b156 100644 --- a/src/orb/types/shared/new_floating_unit_with_proration_price.py +++ b/src/orb/types/shared/new_floating_unit_with_proration_price.py @@ -92,7 +92,13 @@ class NewFloatingUnitWithProrationPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_bulk_price.py b/src/orb/types/shared/new_plan_bulk_price.py index 06d31df3..c338e32f 100644 --- a/src/orb/types/shared/new_plan_bulk_price.py +++ b/src/orb/types/shared/new_plan_bulk_price.py @@ -88,7 +88,13 @@ class NewPlanBulkPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_bulk_with_proration_price.py b/src/orb/types/shared/new_plan_bulk_with_proration_price.py index 0710cdf4..54726a50 100644 --- a/src/orb/types/shared/new_plan_bulk_with_proration_price.py +++ b/src/orb/types/shared/new_plan_bulk_with_proration_price.py @@ -110,7 +110,13 @@ class NewPlanBulkWithProrationPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_cumulative_grouped_bulk_price.py b/src/orb/types/shared/new_plan_cumulative_grouped_bulk_price.py index bdf75853..8f591877 100644 --- a/src/orb/types/shared/new_plan_cumulative_grouped_bulk_price.py +++ b/src/orb/types/shared/new_plan_cumulative_grouped_bulk_price.py @@ -115,7 +115,13 @@ class NewPlanCumulativeGroupedBulkPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_grouped_allocation_price.py b/src/orb/types/shared/new_plan_grouped_allocation_price.py index 1ef99faa..5b1a9c14 100644 --- a/src/orb/types/shared/new_plan_grouped_allocation_price.py +++ b/src/orb/types/shared/new_plan_grouped_allocation_price.py @@ -101,7 +101,13 @@ class NewPlanGroupedAllocationPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_grouped_tiered_package_price.py b/src/orb/types/shared/new_plan_grouped_tiered_package_price.py index 81b6a8c0..004c0003 100644 --- a/src/orb/types/shared/new_plan_grouped_tiered_package_price.py +++ b/src/orb/types/shared/new_plan_grouped_tiered_package_price.py @@ -117,7 +117,13 @@ class NewPlanGroupedTieredPackagePrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_grouped_tiered_price.py b/src/orb/types/shared/new_plan_grouped_tiered_price.py index 769794f9..4ba54d71 100644 --- a/src/orb/types/shared/new_plan_grouped_tiered_price.py +++ b/src/orb/types/shared/new_plan_grouped_tiered_price.py @@ -110,7 +110,13 @@ class NewPlanGroupedTieredPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_grouped_with_metered_minimum_price.py b/src/orb/types/shared/new_plan_grouped_with_metered_minimum_price.py index e3a2472f..b86d8e47 100644 --- a/src/orb/types/shared/new_plan_grouped_with_metered_minimum_price.py +++ b/src/orb/types/shared/new_plan_grouped_with_metered_minimum_price.py @@ -139,7 +139,13 @@ class NewPlanGroupedWithMeteredMinimumPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_grouped_with_prorated_minimum_price.py b/src/orb/types/shared/new_plan_grouped_with_prorated_minimum_price.py index f8d62cfd..a612d797 100644 --- a/src/orb/types/shared/new_plan_grouped_with_prorated_minimum_price.py +++ b/src/orb/types/shared/new_plan_grouped_with_prorated_minimum_price.py @@ -101,7 +101,13 @@ class NewPlanGroupedWithProratedMinimumPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_matrix_price.py b/src/orb/types/shared/new_plan_matrix_price.py index c2df14bc..b17a2d84 100644 --- a/src/orb/types/shared/new_plan_matrix_price.py +++ b/src/orb/types/shared/new_plan_matrix_price.py @@ -88,7 +88,13 @@ class NewPlanMatrixPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_matrix_with_allocation_price.py b/src/orb/types/shared/new_plan_matrix_with_allocation_price.py index be33b0cb..7631a920 100644 --- a/src/orb/types/shared/new_plan_matrix_with_allocation_price.py +++ b/src/orb/types/shared/new_plan_matrix_with_allocation_price.py @@ -88,7 +88,13 @@ class NewPlanMatrixWithAllocationPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_matrix_with_display_name_price.py b/src/orb/types/shared/new_plan_matrix_with_display_name_price.py index 639391b2..70d780c4 100644 --- a/src/orb/types/shared/new_plan_matrix_with_display_name_price.py +++ b/src/orb/types/shared/new_plan_matrix_with_display_name_price.py @@ -116,7 +116,13 @@ class NewPlanMatrixWithDisplayNamePrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_max_group_tiered_package_price.py b/src/orb/types/shared/new_plan_max_group_tiered_package_price.py index 06124ce3..e152c8d7 100644 --- a/src/orb/types/shared/new_plan_max_group_tiered_package_price.py +++ b/src/orb/types/shared/new_plan_max_group_tiered_package_price.py @@ -116,7 +116,13 @@ class NewPlanMaxGroupTieredPackagePrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_minimum_composite_price.py b/src/orb/types/shared/new_plan_minimum_composite_price.py index e5730869..cef5c438 100644 --- a/src/orb/types/shared/new_plan_minimum_composite_price.py +++ b/src/orb/types/shared/new_plan_minimum_composite_price.py @@ -98,7 +98,13 @@ class NewPlanMinimumCompositePrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_package_price.py b/src/orb/types/shared/new_plan_package_price.py index b597ef69..45d67913 100644 --- a/src/orb/types/shared/new_plan_package_price.py +++ b/src/orb/types/shared/new_plan_package_price.py @@ -88,7 +88,13 @@ class NewPlanPackagePrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_package_with_allocation_price.py b/src/orb/types/shared/new_plan_package_with_allocation_price.py index c323d9da..bec58232 100644 --- a/src/orb/types/shared/new_plan_package_with_allocation_price.py +++ b/src/orb/types/shared/new_plan_package_with_allocation_price.py @@ -98,7 +98,13 @@ class NewPlanPackageWithAllocationPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_scalable_matrix_with_tiered_pricing_price.py b/src/orb/types/shared/new_plan_scalable_matrix_with_tiered_pricing_price.py index a530a99b..1df98afb 100644 --- a/src/orb/types/shared/new_plan_scalable_matrix_with_tiered_pricing_price.py +++ b/src/orb/types/shared/new_plan_scalable_matrix_with_tiered_pricing_price.py @@ -127,7 +127,13 @@ class NewPlanScalableMatrixWithTieredPricingPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_scalable_matrix_with_unit_pricing_price.py b/src/orb/types/shared/new_plan_scalable_matrix_with_unit_pricing_price.py index 5ed45a08..7022696d 100644 --- a/src/orb/types/shared/new_plan_scalable_matrix_with_unit_pricing_price.py +++ b/src/orb/types/shared/new_plan_scalable_matrix_with_unit_pricing_price.py @@ -125,7 +125,13 @@ class NewPlanScalableMatrixWithUnitPricingPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_threshold_total_amount_price.py b/src/orb/types/shared/new_plan_threshold_total_amount_price.py index 735438f8..a0ae96b8 100644 --- a/src/orb/types/shared/new_plan_threshold_total_amount_price.py +++ b/src/orb/types/shared/new_plan_threshold_total_amount_price.py @@ -115,7 +115,13 @@ class NewPlanThresholdTotalAmountPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_tiered_package_price.py b/src/orb/types/shared/new_plan_tiered_package_price.py index 7acbb481..564a50fc 100644 --- a/src/orb/types/shared/new_plan_tiered_package_price.py +++ b/src/orb/types/shared/new_plan_tiered_package_price.py @@ -111,7 +111,13 @@ class NewPlanTieredPackagePrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_tiered_package_with_minimum_price.py b/src/orb/types/shared/new_plan_tiered_package_with_minimum_price.py index eadcb1ba..70f00e3a 100644 --- a/src/orb/types/shared/new_plan_tiered_package_with_minimum_price.py +++ b/src/orb/types/shared/new_plan_tiered_package_with_minimum_price.py @@ -115,7 +115,13 @@ class NewPlanTieredPackageWithMinimumPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_tiered_price.py b/src/orb/types/shared/new_plan_tiered_price.py index 432552a2..30ebe639 100644 --- a/src/orb/types/shared/new_plan_tiered_price.py +++ b/src/orb/types/shared/new_plan_tiered_price.py @@ -88,7 +88,13 @@ class NewPlanTieredPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_tiered_with_minimum_price.py b/src/orb/types/shared/new_plan_tiered_with_minimum_price.py index 85db8e12..7dd9c461 100644 --- a/src/orb/types/shared/new_plan_tiered_with_minimum_price.py +++ b/src/orb/types/shared/new_plan_tiered_with_minimum_price.py @@ -120,7 +120,13 @@ class NewPlanTieredWithMinimumPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_unit_price.py b/src/orb/types/shared/new_plan_unit_price.py index 6eb148d5..f1592c33 100644 --- a/src/orb/types/shared/new_plan_unit_price.py +++ b/src/orb/types/shared/new_plan_unit_price.py @@ -88,7 +88,13 @@ class NewPlanUnitPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_unit_with_percent_price.py b/src/orb/types/shared/new_plan_unit_with_percent_price.py index 6e58e90b..8a81edee 100644 --- a/src/orb/types/shared/new_plan_unit_with_percent_price.py +++ b/src/orb/types/shared/new_plan_unit_with_percent_price.py @@ -98,7 +98,13 @@ class NewPlanUnitWithPercentPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/new_plan_unit_with_proration_price.py b/src/orb/types/shared/new_plan_unit_with_proration_price.py index 9afdc036..783abdd5 100644 --- a/src/orb/types/shared/new_plan_unit_with_proration_price.py +++ b/src/orb/types/shared/new_plan_unit_with_proration_price.py @@ -95,7 +95,13 @@ class NewPlanUnitWithProrationPrice(BaseModel): """ license_type_id: Optional[str] = None - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] = None """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared/price.py b/src/orb/types/shared/price.py index c59b15e1..b5714b50 100644 --- a/src/orb/types/shared/price.py +++ b/src/orb/types/shared/price.py @@ -78,6 +78,12 @@ "GroupedTieredPriceGroupedTieredConfig", "GroupedTieredPriceGroupedTieredConfigTier", "GroupedTieredPriceLicenseType", + "GroupedTieredMatrixPrice", + "GroupedTieredMatrixPriceCompositePriceFilter", + "GroupedTieredMatrixPriceConversionRateConfig", + "GroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "GroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "GroupedTieredMatrixPriceLicenseType", "TieredPackageWithMinimumPrice", "TieredPackageWithMinimumPriceCompositePriceFilter", "TieredPackageWithMinimumPriceConversionRateConfig", @@ -1519,6 +1525,152 @@ class GroupedTieredPrice(BaseModel): """ +class GroupedTieredMatrixPriceCompositePriceFilter(BaseModel): + field: Literal["price_id", "item_id", "price_type", "currency", "pricing_unit_id"] + """The property of the price to filter on.""" + + operator: Literal["includes", "excludes"] + """Should prices that match the filter be included or excluded.""" + + values: List[str] + """The IDs or values that match this filter.""" + + +GroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Annotated[ + Union[UnitConversionRateConfig, TieredConversionRateConfig], PropertyInfo(discriminator="conversion_rate_type") +] + + +class GroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(BaseModel): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: str + """The dimension value this tier applies to""" + + tier_lower_bound: str + + unit_amount: str + """Per unit amount""" + + +class GroupedTieredMatrixPriceGroupedTieredMatrixConfig(BaseModel): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: str + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: str + """The billable metric property used to group usage before tiering""" + + tiers: List[GroupedTieredMatrixPriceGroupedTieredMatrixConfigTier] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +class GroupedTieredMatrixPriceLicenseType(BaseModel): + """ + The LicenseType resource represents a type of license that can be assigned to users. + License types are used during billing by grouping metrics on the configured grouping key. + """ + + id: str + """The Orb-assigned unique identifier for the license type.""" + + grouping_key: str + """The key used for grouping licenses of this type. + + This is typically a user identifier field. + """ + + name: str + """The name of the license type.""" + + +class GroupedTieredMatrixPrice(BaseModel): + id: str + + billable_metric: Optional[BillableMetricTiny] = None + + billing_cycle_configuration: BillingCycleConfiguration + + billing_mode: Literal["in_advance", "in_arrear"] + + cadence: Literal["one_time", "monthly", "quarterly", "semi_annual", "annual", "custom"] + + composite_price_filters: Optional[List[GroupedTieredMatrixPriceCompositePriceFilter]] = None + + conversion_rate: Optional[float] = None + + conversion_rate_config: Optional[GroupedTieredMatrixPriceConversionRateConfig] = None + + created_at: datetime + + credit_allocation: Optional[Allocation] = None + + currency: str + + discount: Optional[Discount] = None + + external_price_id: Optional[str] = None + + fixed_price_quantity: Optional[float] = None + + grouped_tiered_matrix_config: GroupedTieredMatrixPriceGroupedTieredMatrixConfig + """Configuration for grouped_tiered_matrix pricing""" + + invoice_grouping_key: Optional[str] = None + + invoicing_cycle_configuration: Optional[BillingCycleConfiguration] = None + + item: ItemSlim + """ + A minimal representation of an Item containing only the essential identifying + information. + """ + + maximum: Optional[Maximum] = None + + maximum_amount: Optional[str] = None + + metadata: Dict[str, str] + """User specified key-value pairs for the resource. + + If not present, this defaults to an empty dictionary. Individual keys can be + removed by setting the value to `null`, and the entire metadata mapping can be + cleared by setting `metadata` to `null`. + """ + + minimum: Optional[Minimum] = None + + minimum_amount: Optional[str] = None + + price_model_type: Literal["grouped_tiered_matrix"] = FieldInfo(alias="model_type") + """The pricing model type""" + + name: str + + plan_phase_order: Optional[int] = None + + price_type: Literal["usage_price", "fixed_price", "composite_price"] + + replaces_price_id: Optional[str] = None + """The price id this price replaces. + + This price will take the place of the replaced price in plan version migrations. + """ + + dimensional_price_configuration: Optional[DimensionalPriceConfiguration] = None + + license_type: Optional[GroupedTieredMatrixPriceLicenseType] = None + """ + The LicenseType resource represents a type of license that can be assigned to + users. License types are used during billing by grouping metrics on the + configured grouping key. + """ + + class TieredPackageWithMinimumPriceCompositePriceFilter(BaseModel): field: Literal["price_id", "item_id", "price_type", "currency", "pricing_unit_id"] """The property of the price to filter on.""" @@ -4888,6 +5040,7 @@ class EventOutputPrice(BaseModel): TieredPackagePrice, TieredWithMinimumPrice, GroupedTieredPrice, + GroupedTieredMatrixPrice, TieredPackageWithMinimumPrice, PackageWithAllocationPrice, UnitWithPercentPrice, diff --git a/src/orb/types/shared_params/new_floating_bulk_price.py b/src/orb/types/shared_params/new_floating_bulk_price.py index da009a94..94d580ab 100644 --- a/src/orb/types/shared_params/new_floating_bulk_price.py +++ b/src/orb/types/shared_params/new_floating_bulk_price.py @@ -81,7 +81,13 @@ class NewFloatingBulkPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_bulk_with_proration_price.py b/src/orb/types/shared_params/new_floating_bulk_with_proration_price.py index 14152f72..aee2006c 100644 --- a/src/orb/types/shared_params/new_floating_bulk_with_proration_price.py +++ b/src/orb/types/shared_params/new_floating_bulk_with_proration_price.py @@ -103,7 +103,13 @@ class NewFloatingBulkWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_cumulative_grouped_bulk_price.py b/src/orb/types/shared_params/new_floating_cumulative_grouped_bulk_price.py index 7c13aea1..2c4f446d 100644 --- a/src/orb/types/shared_params/new_floating_cumulative_grouped_bulk_price.py +++ b/src/orb/types/shared_params/new_floating_cumulative_grouped_bulk_price.py @@ -108,7 +108,13 @@ class NewFloatingCumulativeGroupedBulkPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_grouped_allocation_price.py b/src/orb/types/shared_params/new_floating_grouped_allocation_price.py index b1d570be..5b7e9ea6 100644 --- a/src/orb/types/shared_params/new_floating_grouped_allocation_price.py +++ b/src/orb/types/shared_params/new_floating_grouped_allocation_price.py @@ -94,7 +94,13 @@ class NewFloatingGroupedAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_grouped_tiered_package_price.py b/src/orb/types/shared_params/new_floating_grouped_tiered_package_price.py index 2d7fbd53..0d2c34fc 100644 --- a/src/orb/types/shared_params/new_floating_grouped_tiered_package_price.py +++ b/src/orb/types/shared_params/new_floating_grouped_tiered_package_price.py @@ -110,7 +110,13 @@ class NewFloatingGroupedTieredPackagePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_grouped_tiered_price.py b/src/orb/types/shared_params/new_floating_grouped_tiered_price.py index 14fd31d5..79f6c3f1 100644 --- a/src/orb/types/shared_params/new_floating_grouped_tiered_price.py +++ b/src/orb/types/shared_params/new_floating_grouped_tiered_price.py @@ -103,7 +103,13 @@ class NewFloatingGroupedTieredPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_grouped_with_metered_minimum_price.py b/src/orb/types/shared_params/new_floating_grouped_with_metered_minimum_price.py index d722c98d..93c7a5e3 100644 --- a/src/orb/types/shared_params/new_floating_grouped_with_metered_minimum_price.py +++ b/src/orb/types/shared_params/new_floating_grouped_with_metered_minimum_price.py @@ -132,7 +132,13 @@ class NewFloatingGroupedWithMeteredMinimumPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_grouped_with_prorated_minimum_price.py b/src/orb/types/shared_params/new_floating_grouped_with_prorated_minimum_price.py index fd793161..a3435244 100644 --- a/src/orb/types/shared_params/new_floating_grouped_with_prorated_minimum_price.py +++ b/src/orb/types/shared_params/new_floating_grouped_with_prorated_minimum_price.py @@ -94,7 +94,13 @@ class NewFloatingGroupedWithProratedMinimumPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_matrix_price.py b/src/orb/types/shared_params/new_floating_matrix_price.py index 23d131c8..127901d1 100644 --- a/src/orb/types/shared_params/new_floating_matrix_price.py +++ b/src/orb/types/shared_params/new_floating_matrix_price.py @@ -81,7 +81,13 @@ class NewFloatingMatrixPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_matrix_with_allocation_price.py b/src/orb/types/shared_params/new_floating_matrix_with_allocation_price.py index 7a625e3c..8df85261 100644 --- a/src/orb/types/shared_params/new_floating_matrix_with_allocation_price.py +++ b/src/orb/types/shared_params/new_floating_matrix_with_allocation_price.py @@ -81,7 +81,13 @@ class NewFloatingMatrixWithAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_matrix_with_display_name_price.py b/src/orb/types/shared_params/new_floating_matrix_with_display_name_price.py index de083d01..3851a2d8 100644 --- a/src/orb/types/shared_params/new_floating_matrix_with_display_name_price.py +++ b/src/orb/types/shared_params/new_floating_matrix_with_display_name_price.py @@ -109,7 +109,13 @@ class NewFloatingMatrixWithDisplayNamePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_max_group_tiered_package_price.py b/src/orb/types/shared_params/new_floating_max_group_tiered_package_price.py index d5e6fe1c..23a66206 100644 --- a/src/orb/types/shared_params/new_floating_max_group_tiered_package_price.py +++ b/src/orb/types/shared_params/new_floating_max_group_tiered_package_price.py @@ -109,7 +109,13 @@ class NewFloatingMaxGroupTieredPackagePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_minimum_composite_price.py b/src/orb/types/shared_params/new_floating_minimum_composite_price.py index 286cc7c3..7637b697 100644 --- a/src/orb/types/shared_params/new_floating_minimum_composite_price.py +++ b/src/orb/types/shared_params/new_floating_minimum_composite_price.py @@ -91,7 +91,13 @@ class NewFloatingMinimumCompositePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_package_price.py b/src/orb/types/shared_params/new_floating_package_price.py index 80bda543..b3e50803 100644 --- a/src/orb/types/shared_params/new_floating_package_price.py +++ b/src/orb/types/shared_params/new_floating_package_price.py @@ -81,7 +81,13 @@ class NewFloatingPackagePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_package_with_allocation_price.py b/src/orb/types/shared_params/new_floating_package_with_allocation_price.py index fd11087b..c0cc7c0c 100644 --- a/src/orb/types/shared_params/new_floating_package_with_allocation_price.py +++ b/src/orb/types/shared_params/new_floating_package_with_allocation_price.py @@ -91,7 +91,13 @@ class NewFloatingPackageWithAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_scalable_matrix_with_tiered_pricing_price.py b/src/orb/types/shared_params/new_floating_scalable_matrix_with_tiered_pricing_price.py index 3d77020e..d7d95428 100644 --- a/src/orb/types/shared_params/new_floating_scalable_matrix_with_tiered_pricing_price.py +++ b/src/orb/types/shared_params/new_floating_scalable_matrix_with_tiered_pricing_price.py @@ -120,7 +120,13 @@ class NewFloatingScalableMatrixWithTieredPricingPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_scalable_matrix_with_unit_pricing_price.py b/src/orb/types/shared_params/new_floating_scalable_matrix_with_unit_pricing_price.py index 009b8569..db2faec9 100644 --- a/src/orb/types/shared_params/new_floating_scalable_matrix_with_unit_pricing_price.py +++ b/src/orb/types/shared_params/new_floating_scalable_matrix_with_unit_pricing_price.py @@ -118,7 +118,13 @@ class NewFloatingScalableMatrixWithUnitPricingPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_threshold_total_amount_price.py b/src/orb/types/shared_params/new_floating_threshold_total_amount_price.py index a6eadaa0..baf83d8c 100644 --- a/src/orb/types/shared_params/new_floating_threshold_total_amount_price.py +++ b/src/orb/types/shared_params/new_floating_threshold_total_amount_price.py @@ -108,7 +108,13 @@ class NewFloatingThresholdTotalAmountPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_tiered_package_price.py b/src/orb/types/shared_params/new_floating_tiered_package_price.py index f4e0fb24..c9afee3a 100644 --- a/src/orb/types/shared_params/new_floating_tiered_package_price.py +++ b/src/orb/types/shared_params/new_floating_tiered_package_price.py @@ -104,7 +104,13 @@ class NewFloatingTieredPackagePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_tiered_package_with_minimum_price.py b/src/orb/types/shared_params/new_floating_tiered_package_with_minimum_price.py index 9f873b91..527e50e7 100644 --- a/src/orb/types/shared_params/new_floating_tiered_package_with_minimum_price.py +++ b/src/orb/types/shared_params/new_floating_tiered_package_with_minimum_price.py @@ -108,7 +108,13 @@ class NewFloatingTieredPackageWithMinimumPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_tiered_price.py b/src/orb/types/shared_params/new_floating_tiered_price.py index 66e2ae84..4dfc27cd 100644 --- a/src/orb/types/shared_params/new_floating_tiered_price.py +++ b/src/orb/types/shared_params/new_floating_tiered_price.py @@ -81,7 +81,13 @@ class NewFloatingTieredPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_tiered_with_minimum_price.py b/src/orb/types/shared_params/new_floating_tiered_with_minimum_price.py index c1ebb6c0..082aee91 100644 --- a/src/orb/types/shared_params/new_floating_tiered_with_minimum_price.py +++ b/src/orb/types/shared_params/new_floating_tiered_with_minimum_price.py @@ -113,7 +113,13 @@ class NewFloatingTieredWithMinimumPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_tiered_with_proration_price.py b/src/orb/types/shared_params/new_floating_tiered_with_proration_price.py index 815c98d9..a5bf95df 100644 --- a/src/orb/types/shared_params/new_floating_tiered_with_proration_price.py +++ b/src/orb/types/shared_params/new_floating_tiered_with_proration_price.py @@ -106,7 +106,13 @@ class NewFloatingTieredWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_unit_price.py b/src/orb/types/shared_params/new_floating_unit_price.py index 8a7cfc66..f73fc1b0 100644 --- a/src/orb/types/shared_params/new_floating_unit_price.py +++ b/src/orb/types/shared_params/new_floating_unit_price.py @@ -81,7 +81,13 @@ class NewFloatingUnitPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_unit_with_percent_price.py b/src/orb/types/shared_params/new_floating_unit_with_percent_price.py index a325cfab..2ee24b80 100644 --- a/src/orb/types/shared_params/new_floating_unit_with_percent_price.py +++ b/src/orb/types/shared_params/new_floating_unit_with_percent_price.py @@ -91,7 +91,13 @@ class NewFloatingUnitWithPercentPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_floating_unit_with_proration_price.py b/src/orb/types/shared_params/new_floating_unit_with_proration_price.py index 737d7d10..f7a0ee8e 100644 --- a/src/orb/types/shared_params/new_floating_unit_with_proration_price.py +++ b/src/orb/types/shared_params/new_floating_unit_with_proration_price.py @@ -88,7 +88,13 @@ class NewFloatingUnitWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_bulk_price.py b/src/orb/types/shared_params/new_plan_bulk_price.py index 18365957..70db3131 100644 --- a/src/orb/types/shared_params/new_plan_bulk_price.py +++ b/src/orb/types/shared_params/new_plan_bulk_price.py @@ -84,7 +84,13 @@ class NewPlanBulkPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_bulk_with_proration_price.py b/src/orb/types/shared_params/new_plan_bulk_with_proration_price.py index 98c81479..3976cb18 100644 --- a/src/orb/types/shared_params/new_plan_bulk_with_proration_price.py +++ b/src/orb/types/shared_params/new_plan_bulk_with_proration_price.py @@ -106,7 +106,13 @@ class NewPlanBulkWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_cumulative_grouped_bulk_price.py b/src/orb/types/shared_params/new_plan_cumulative_grouped_bulk_price.py index 8f855259..01f29bce 100644 --- a/src/orb/types/shared_params/new_plan_cumulative_grouped_bulk_price.py +++ b/src/orb/types/shared_params/new_plan_cumulative_grouped_bulk_price.py @@ -111,7 +111,13 @@ class NewPlanCumulativeGroupedBulkPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_grouped_allocation_price.py b/src/orb/types/shared_params/new_plan_grouped_allocation_price.py index 69d606d3..ea31e0ce 100644 --- a/src/orb/types/shared_params/new_plan_grouped_allocation_price.py +++ b/src/orb/types/shared_params/new_plan_grouped_allocation_price.py @@ -97,7 +97,13 @@ class NewPlanGroupedAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_grouped_tiered_package_price.py b/src/orb/types/shared_params/new_plan_grouped_tiered_package_price.py index c0ef1570..41de4bb7 100644 --- a/src/orb/types/shared_params/new_plan_grouped_tiered_package_price.py +++ b/src/orb/types/shared_params/new_plan_grouped_tiered_package_price.py @@ -113,7 +113,13 @@ class NewPlanGroupedTieredPackagePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_grouped_tiered_price.py b/src/orb/types/shared_params/new_plan_grouped_tiered_price.py index dbbed5b4..8e637b26 100644 --- a/src/orb/types/shared_params/new_plan_grouped_tiered_price.py +++ b/src/orb/types/shared_params/new_plan_grouped_tiered_price.py @@ -106,7 +106,13 @@ class NewPlanGroupedTieredPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_grouped_with_metered_minimum_price.py b/src/orb/types/shared_params/new_plan_grouped_with_metered_minimum_price.py index 3d5ea79c..8a733684 100644 --- a/src/orb/types/shared_params/new_plan_grouped_with_metered_minimum_price.py +++ b/src/orb/types/shared_params/new_plan_grouped_with_metered_minimum_price.py @@ -135,7 +135,13 @@ class NewPlanGroupedWithMeteredMinimumPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_grouped_with_prorated_minimum_price.py b/src/orb/types/shared_params/new_plan_grouped_with_prorated_minimum_price.py index aa1e841b..daa68b73 100644 --- a/src/orb/types/shared_params/new_plan_grouped_with_prorated_minimum_price.py +++ b/src/orb/types/shared_params/new_plan_grouped_with_prorated_minimum_price.py @@ -97,7 +97,13 @@ class NewPlanGroupedWithProratedMinimumPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_matrix_price.py b/src/orb/types/shared_params/new_plan_matrix_price.py index fdbdd185..b05b71b2 100644 --- a/src/orb/types/shared_params/new_plan_matrix_price.py +++ b/src/orb/types/shared_params/new_plan_matrix_price.py @@ -84,7 +84,13 @@ class NewPlanMatrixPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_matrix_with_allocation_price.py b/src/orb/types/shared_params/new_plan_matrix_with_allocation_price.py index 4c5eb62e..0d444da7 100644 --- a/src/orb/types/shared_params/new_plan_matrix_with_allocation_price.py +++ b/src/orb/types/shared_params/new_plan_matrix_with_allocation_price.py @@ -84,7 +84,13 @@ class NewPlanMatrixWithAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_matrix_with_display_name_price.py b/src/orb/types/shared_params/new_plan_matrix_with_display_name_price.py index 960e52f5..32d69cf9 100644 --- a/src/orb/types/shared_params/new_plan_matrix_with_display_name_price.py +++ b/src/orb/types/shared_params/new_plan_matrix_with_display_name_price.py @@ -112,7 +112,13 @@ class NewPlanMatrixWithDisplayNamePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_max_group_tiered_package_price.py b/src/orb/types/shared_params/new_plan_max_group_tiered_package_price.py index 5aa49157..132e4888 100644 --- a/src/orb/types/shared_params/new_plan_max_group_tiered_package_price.py +++ b/src/orb/types/shared_params/new_plan_max_group_tiered_package_price.py @@ -112,7 +112,13 @@ class NewPlanMaxGroupTieredPackagePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_minimum_composite_price.py b/src/orb/types/shared_params/new_plan_minimum_composite_price.py index e5e3d72f..39d54b0c 100644 --- a/src/orb/types/shared_params/new_plan_minimum_composite_price.py +++ b/src/orb/types/shared_params/new_plan_minimum_composite_price.py @@ -94,7 +94,13 @@ class NewPlanMinimumCompositePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_package_price.py b/src/orb/types/shared_params/new_plan_package_price.py index 16419294..797e92a2 100644 --- a/src/orb/types/shared_params/new_plan_package_price.py +++ b/src/orb/types/shared_params/new_plan_package_price.py @@ -84,7 +84,13 @@ class NewPlanPackagePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_package_with_allocation_price.py b/src/orb/types/shared_params/new_plan_package_with_allocation_price.py index f878fae0..a7478f1a 100644 --- a/src/orb/types/shared_params/new_plan_package_with_allocation_price.py +++ b/src/orb/types/shared_params/new_plan_package_with_allocation_price.py @@ -94,7 +94,13 @@ class NewPlanPackageWithAllocationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_scalable_matrix_with_tiered_pricing_price.py b/src/orb/types/shared_params/new_plan_scalable_matrix_with_tiered_pricing_price.py index 42191033..3385b307 100644 --- a/src/orb/types/shared_params/new_plan_scalable_matrix_with_tiered_pricing_price.py +++ b/src/orb/types/shared_params/new_plan_scalable_matrix_with_tiered_pricing_price.py @@ -123,7 +123,13 @@ class NewPlanScalableMatrixWithTieredPricingPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_scalable_matrix_with_unit_pricing_price.py b/src/orb/types/shared_params/new_plan_scalable_matrix_with_unit_pricing_price.py index d2085ec1..4510cf55 100644 --- a/src/orb/types/shared_params/new_plan_scalable_matrix_with_unit_pricing_price.py +++ b/src/orb/types/shared_params/new_plan_scalable_matrix_with_unit_pricing_price.py @@ -121,7 +121,13 @@ class NewPlanScalableMatrixWithUnitPricingPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_threshold_total_amount_price.py b/src/orb/types/shared_params/new_plan_threshold_total_amount_price.py index 86cb1ef5..b25825c9 100644 --- a/src/orb/types/shared_params/new_plan_threshold_total_amount_price.py +++ b/src/orb/types/shared_params/new_plan_threshold_total_amount_price.py @@ -111,7 +111,13 @@ class NewPlanThresholdTotalAmountPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_tiered_package_price.py b/src/orb/types/shared_params/new_plan_tiered_package_price.py index 6c2c96db..adeec8d8 100644 --- a/src/orb/types/shared_params/new_plan_tiered_package_price.py +++ b/src/orb/types/shared_params/new_plan_tiered_package_price.py @@ -107,7 +107,13 @@ class NewPlanTieredPackagePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_tiered_package_with_minimum_price.py b/src/orb/types/shared_params/new_plan_tiered_package_with_minimum_price.py index cdb4b2e3..35cb0d38 100644 --- a/src/orb/types/shared_params/new_plan_tiered_package_with_minimum_price.py +++ b/src/orb/types/shared_params/new_plan_tiered_package_with_minimum_price.py @@ -111,7 +111,13 @@ class NewPlanTieredPackageWithMinimumPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_tiered_price.py b/src/orb/types/shared_params/new_plan_tiered_price.py index e1d026d0..5b212f63 100644 --- a/src/orb/types/shared_params/new_plan_tiered_price.py +++ b/src/orb/types/shared_params/new_plan_tiered_price.py @@ -84,7 +84,13 @@ class NewPlanTieredPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_tiered_with_minimum_price.py b/src/orb/types/shared_params/new_plan_tiered_with_minimum_price.py index 0a107b71..cc1a83a0 100644 --- a/src/orb/types/shared_params/new_plan_tiered_with_minimum_price.py +++ b/src/orb/types/shared_params/new_plan_tiered_with_minimum_price.py @@ -116,7 +116,13 @@ class NewPlanTieredWithMinimumPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_unit_price.py b/src/orb/types/shared_params/new_plan_unit_price.py index bfc4a50d..d29b1122 100644 --- a/src/orb/types/shared_params/new_plan_unit_price.py +++ b/src/orb/types/shared_params/new_plan_unit_price.py @@ -84,7 +84,13 @@ class NewPlanUnitPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_unit_with_percent_price.py b/src/orb/types/shared_params/new_plan_unit_with_percent_price.py index dbc8ed1d..e0bf1abd 100644 --- a/src/orb/types/shared_params/new_plan_unit_with_percent_price.py +++ b/src/orb/types/shared_params/new_plan_unit_with_percent_price.py @@ -94,7 +94,13 @@ class NewPlanUnitWithPercentPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/shared_params/new_plan_unit_with_proration_price.py b/src/orb/types/shared_params/new_plan_unit_with_proration_price.py index cd8ee561..f705ca3d 100644 --- a/src/orb/types/shared_params/new_plan_unit_with_proration_price.py +++ b/src/orb/types/shared_params/new_plan_unit_with_proration_price.py @@ -91,7 +91,13 @@ class NewPlanUnitWithProrationPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. diff --git a/src/orb/types/subscription_create_params.py b/src/orb/types/subscription_create_params.py index 51fe63fe..7ae159e9 100644 --- a/src/orb/types/subscription_create_params.py +++ b/src/orb/types/subscription_create_params.py @@ -68,6 +68,10 @@ "AddPricePriceNewSubscriptionBulkWithFiltersPriceBulkWithFiltersConfigFilter", "AddPricePriceNewSubscriptionBulkWithFiltersPriceBulkWithFiltersConfigTier", "AddPricePriceNewSubscriptionBulkWithFiltersPriceConversionRateConfig", + "AddPricePriceNewSubscriptionGroupedTieredMatrixPrice", + "AddPricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "AddPricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "AddPricePriceNewSubscriptionGroupedTieredMatrixPriceConversionRateConfig", "AddPricePriceNewSubscriptionMatrixWithThresholdDiscountsPrice", "AddPricePriceNewSubscriptionMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfig", "AddPricePriceNewSubscriptionMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfigMatrixValue", @@ -110,6 +114,10 @@ "ReplacePricePriceNewSubscriptionBulkWithFiltersPriceBulkWithFiltersConfigFilter", "ReplacePricePriceNewSubscriptionBulkWithFiltersPriceBulkWithFiltersConfigTier", "ReplacePricePriceNewSubscriptionBulkWithFiltersPriceConversionRateConfig", + "ReplacePricePriceNewSubscriptionGroupedTieredMatrixPrice", + "ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceConversionRateConfig", "ReplacePricePriceNewSubscriptionMatrixWithThresholdDiscountsPrice", "ReplacePricePriceNewSubscriptionMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfig", "ReplacePricePriceNewSubscriptionMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfigMatrixValue", @@ -507,7 +515,138 @@ class AddPricePriceNewSubscriptionBulkWithFiltersPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + reference_id: Optional[str] + """ + A transient ID that can be used to reference this price when adding adjustments + in the same API call. + """ + + +class AddPricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class AddPricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[AddPricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +AddPricePriceNewSubscriptionGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + +class AddPricePriceNewSubscriptionGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + grouped_tiered_matrix_config: Required[ + AddPricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfig + ] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[AddPricePriceNewSubscriptionGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + currency: Optional[str] + """ + An ISO 4217 currency string, or custom pricing unit identifier, in which this + price is billed. + """ + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -658,7 +797,13 @@ class AddPricePriceNewSubscriptionMatrixWithThresholdDiscountsPrice(TypedDict, t """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -769,7 +914,13 @@ class AddPricePriceNewSubscriptionTieredWithProrationPrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -878,7 +1029,13 @@ class AddPricePriceNewSubscriptionGroupedWithMinMaxThresholdsPrice(TypedDict, to """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -987,7 +1144,13 @@ class AddPricePriceNewSubscriptionCumulativeGroupedAllocationPrice(TypedDict, to """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1122,7 +1285,13 @@ class AddPricePriceNewSubscriptionDailyCreditAllowancePrice(TypedDict, total=Fal """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1244,7 +1413,13 @@ class AddPricePriceNewSubscriptionMeteredAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1353,7 +1528,13 @@ class AddPricePriceNewSubscriptionPercentCompositePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1462,7 +1643,13 @@ class AddPricePriceNewSubscriptionEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1489,6 +1676,7 @@ class AddPricePriceNewSubscriptionEventOutputPrice(TypedDict, total=False): NewSubscriptionTieredPackagePriceParam, NewSubscriptionTieredWithMinimumPriceParam, NewSubscriptionGroupedTieredPriceParam, + AddPricePriceNewSubscriptionGroupedTieredMatrixPrice, NewSubscriptionTieredPackageWithMinimumPriceParam, NewSubscriptionPackageWithAllocationPriceParam, NewSubscriptionUnitWithPercentPriceParam, @@ -1757,7 +1945,138 @@ class ReplacePricePriceNewSubscriptionBulkWithFiltersPrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + reference_id: Optional[str] + """ + A transient ID that can be used to reference this price when adding adjustments + in the same API call. + """ + + +class ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + +class ReplacePricePriceNewSubscriptionGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + grouped_tiered_matrix_config: Required[ + ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfig + ] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + currency: Optional[str] + """ + An ISO 4217 currency string, or custom pricing unit identifier, in which this + price is billed. + """ + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1910,7 +2229,13 @@ class ReplacePricePriceNewSubscriptionMatrixWithThresholdDiscountsPrice(TypedDic """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2021,7 +2346,13 @@ class ReplacePricePriceNewSubscriptionTieredWithProrationPrice(TypedDict, total= """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2132,7 +2463,13 @@ class ReplacePricePriceNewSubscriptionGroupedWithMinMaxThresholdsPrice(TypedDict """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2243,7 +2580,13 @@ class ReplacePricePriceNewSubscriptionCumulativeGroupedAllocationPrice(TypedDict """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2378,7 +2721,13 @@ class ReplacePricePriceNewSubscriptionDailyCreditAllowancePrice(TypedDict, total """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2500,7 +2849,13 @@ class ReplacePricePriceNewSubscriptionMeteredAllowancePrice(TypedDict, total=Fal """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2609,7 +2964,13 @@ class ReplacePricePriceNewSubscriptionPercentCompositePrice(TypedDict, total=Fal """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2718,7 +3079,13 @@ class ReplacePricePriceNewSubscriptionEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2745,6 +3112,7 @@ class ReplacePricePriceNewSubscriptionEventOutputPrice(TypedDict, total=False): NewSubscriptionTieredPackagePriceParam, NewSubscriptionTieredWithMinimumPriceParam, NewSubscriptionGroupedTieredPriceParam, + ReplacePricePriceNewSubscriptionGroupedTieredMatrixPrice, NewSubscriptionTieredPackageWithMinimumPriceParam, NewSubscriptionPackageWithAllocationPriceParam, NewSubscriptionUnitWithPercentPriceParam, diff --git a/src/orb/types/subscription_price_intervals_params.py b/src/orb/types/subscription_price_intervals_params.py index 01e0e5a9..1eb10d21 100644 --- a/src/orb/types/subscription_price_intervals_params.py +++ b/src/orb/types/subscription_price_intervals_params.py @@ -64,6 +64,10 @@ "AddPriceNewFloatingBulkWithFiltersPriceBulkWithFiltersConfigFilter", "AddPriceNewFloatingBulkWithFiltersPriceBulkWithFiltersConfigTier", "AddPriceNewFloatingBulkWithFiltersPriceConversionRateConfig", + "AddPriceNewFloatingGroupedTieredMatrixPrice", + "AddPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "AddPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "AddPriceNewFloatingGroupedTieredMatrixPriceConversionRateConfig", "AddPriceNewFloatingMatrixWithThresholdDiscountsPrice", "AddPriceNewFloatingMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfig", "AddPriceNewFloatingMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfigMatrixValue", @@ -164,7 +168,7 @@ class AddFixedFeeQuantityTransition(TypedDict, total=False): effective_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] """The date that the fixed fee quantity transition should take effect.""" - quantity: Required[int] + quantity: Required[float] """The quantity of the fixed fee quantity transition.""" @@ -268,7 +272,127 @@ class AddPriceNewFloatingBulkWithFiltersPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + +class AddPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class AddPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[AddPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +AddPriceNewFloatingGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + +class AddPriceNewFloatingGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + currency: Required[str] + """An ISO 4217 currency string for which this price is billed in.""" + + grouped_tiered_matrix_config: Required[AddPriceNewFloatingGroupedTieredMatrixPriceGroupedTieredMatrixConfig] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[AddPriceNewFloatingGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -406,7 +530,13 @@ class AddPriceNewFloatingMatrixWithThresholdDiscountsPrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -504,7 +634,13 @@ class AddPriceNewFloatingGroupedWithMinMaxThresholdsPrice(TypedDict, total=False """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -602,7 +738,13 @@ class AddPriceNewFloatingCumulativeGroupedAllocationPrice(TypedDict, total=False """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -722,7 +864,13 @@ class AddPriceNewFloatingDailyCreditAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -835,7 +983,13 @@ class AddPriceNewFloatingMeteredAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -935,7 +1089,13 @@ class AddPriceNewFloatingPercentCompositePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1035,7 +1195,13 @@ class AddPriceNewFloatingEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1056,6 +1222,7 @@ class AddPriceNewFloatingEventOutputPrice(TypedDict, total=False): NewFloatingTieredPackagePrice, NewFloatingTieredWithMinimumPrice, NewFloatingGroupedTieredPrice, + AddPriceNewFloatingGroupedTieredMatrixPrice, NewFloatingTieredPackageWithMinimumPrice, NewFloatingPackageWithAllocationPrice, NewFloatingUnitWithPercentPrice, @@ -1258,7 +1425,7 @@ class EditFixedFeeQuantityTransition(TypedDict, total=False): effective_date: Required[Annotated[Union[str, datetime], PropertyInfo(format="iso8601")]] """The date that the fixed fee quantity transition should take effect.""" - quantity: Required[int] + quantity: Required[float] """The quantity of the fixed fee quantity transition.""" diff --git a/src/orb/types/subscription_schedule_plan_change_params.py b/src/orb/types/subscription_schedule_plan_change_params.py index fe9d82b7..7dd74846 100644 --- a/src/orb/types/subscription_schedule_plan_change_params.py +++ b/src/orb/types/subscription_schedule_plan_change_params.py @@ -68,6 +68,10 @@ "AddPricePriceNewSubscriptionBulkWithFiltersPriceBulkWithFiltersConfigFilter", "AddPricePriceNewSubscriptionBulkWithFiltersPriceBulkWithFiltersConfigTier", "AddPricePriceNewSubscriptionBulkWithFiltersPriceConversionRateConfig", + "AddPricePriceNewSubscriptionGroupedTieredMatrixPrice", + "AddPricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "AddPricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "AddPricePriceNewSubscriptionGroupedTieredMatrixPriceConversionRateConfig", "AddPricePriceNewSubscriptionMatrixWithThresholdDiscountsPrice", "AddPricePriceNewSubscriptionMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfig", "AddPricePriceNewSubscriptionMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfigMatrixValue", @@ -110,6 +114,10 @@ "ReplacePricePriceNewSubscriptionBulkWithFiltersPriceBulkWithFiltersConfigFilter", "ReplacePricePriceNewSubscriptionBulkWithFiltersPriceBulkWithFiltersConfigTier", "ReplacePricePriceNewSubscriptionBulkWithFiltersPriceConversionRateConfig", + "ReplacePricePriceNewSubscriptionGroupedTieredMatrixPrice", + "ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfig", + "ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier", + "ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceConversionRateConfig", "ReplacePricePriceNewSubscriptionMatrixWithThresholdDiscountsPrice", "ReplacePricePriceNewSubscriptionMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfig", "ReplacePricePriceNewSubscriptionMatrixWithThresholdDiscountsPriceMatrixWithThresholdDiscountsConfigMatrixValue", @@ -495,7 +503,138 @@ class AddPricePriceNewSubscriptionBulkWithFiltersPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + reference_id: Optional[str] + """ + A transient ID that can be used to reference this price when adding adjustments + in the same API call. + """ + + +class AddPricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class AddPricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[AddPricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +AddPricePriceNewSubscriptionGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + +class AddPricePriceNewSubscriptionGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + grouped_tiered_matrix_config: Required[ + AddPricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfig + ] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[AddPricePriceNewSubscriptionGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + currency: Optional[str] + """ + An ISO 4217 currency string, or custom pricing unit identifier, in which this + price is billed. + """ + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -646,7 +785,13 @@ class AddPricePriceNewSubscriptionMatrixWithThresholdDiscountsPrice(TypedDict, t """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -757,7 +902,13 @@ class AddPricePriceNewSubscriptionTieredWithProrationPrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -866,7 +1017,13 @@ class AddPricePriceNewSubscriptionGroupedWithMinMaxThresholdsPrice(TypedDict, to """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -975,7 +1132,13 @@ class AddPricePriceNewSubscriptionCumulativeGroupedAllocationPrice(TypedDict, to """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1110,7 +1273,13 @@ class AddPricePriceNewSubscriptionDailyCreditAllowancePrice(TypedDict, total=Fal """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1232,7 +1401,13 @@ class AddPricePriceNewSubscriptionMeteredAllowancePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1341,7 +1516,13 @@ class AddPricePriceNewSubscriptionPercentCompositePrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1450,7 +1631,13 @@ class AddPricePriceNewSubscriptionEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1477,6 +1664,7 @@ class AddPricePriceNewSubscriptionEventOutputPrice(TypedDict, total=False): NewSubscriptionTieredPackagePriceParam, NewSubscriptionTieredWithMinimumPriceParam, NewSubscriptionGroupedTieredPriceParam, + AddPricePriceNewSubscriptionGroupedTieredMatrixPrice, NewSubscriptionTieredPackageWithMinimumPriceParam, NewSubscriptionPackageWithAllocationPriceParam, NewSubscriptionUnitWithPercentPriceParam, @@ -1745,7 +1933,138 @@ class ReplacePricePriceNewSubscriptionBulkWithFiltersPrice(TypedDict, total=Fals """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ + + metadata: Optional[Dict[str, Optional[str]]] + """User-specified key/value pairs for the resource. + + Individual keys can be removed by setting the value to `null`, and the entire + metadata mapping can be cleared by setting `metadata` to `null`. + """ + + reference_id: Optional[str] + """ + A transient ID that can be used to reference this price when adding adjustments + in the same API call. + """ + + +class ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier(TypedDict, total=False): + """Configuration for a single tier scoped to a dimension value""" + + dimension_value: Required[str] + """The dimension value this tier applies to""" + + tier_lower_bound: Required[str] + + unit_amount: Required[str] + """Per unit amount""" + + +class ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfig(TypedDict, total=False): + """Configuration for grouped_tiered_matrix pricing""" + + default_unit_amount: Required[str] + """Per unit rate for usage whose dimension value has no configured tiers""" + + dimension: Required[str] + """The billable metric property used to group usage before tiering""" + + tiers: Required[Iterable[ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfigTier]] + """ + Graduated tiers keyed by dimension value; usage for a value is tiered only + against its own rows + """ + + +ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceConversionRateConfig: TypeAlias = Union[ + UnitConversionRateConfig, TieredConversionRateConfig +] + + +class ReplacePricePriceNewSubscriptionGroupedTieredMatrixPrice(TypedDict, total=False): + cadence: Required[Literal["annual", "semi_annual", "monthly", "quarterly", "one_time", "custom"]] + """The cadence to bill for this price on.""" + + grouped_tiered_matrix_config: Required[ + ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceGroupedTieredMatrixConfig + ] + """Configuration for grouped_tiered_matrix pricing""" + + item_id: Required[str] + """The id of the item the price will be associated with.""" + + model_type: Required[Literal["grouped_tiered_matrix"]] + """The pricing model type""" + + name: Required[str] + """The name of the price.""" + + billable_metric_id: Optional[str] + """The id of the billable metric for the price. + + Only needed if the price is usage-based. + """ + + billed_in_advance: Optional[bool] + """ + If the Price represents a fixed cost, the price will be billed in-advance if + this is true, and in-arrears if this is false. + """ + + billing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """ + For custom cadence: specifies the duration of the billing period in days or + months. + """ + + conversion_rate: Optional[float] + """The per unit conversion rate of the price currency to the invoicing currency.""" + + conversion_rate_config: Optional[ReplacePricePriceNewSubscriptionGroupedTieredMatrixPriceConversionRateConfig] + """The configuration for the rate of the price currency to the invoicing currency.""" + + currency: Optional[str] + """ + An ISO 4217 currency string, or custom pricing unit identifier, in which this + price is billed. + """ + + dimensional_price_configuration: Optional[NewDimensionalPriceConfiguration] + """For dimensional price: specifies a price group and dimension values""" + + external_price_id: Optional[str] + """An alias for the price.""" + + fixed_price_quantity: Optional[float] + """ + If the Price represents a fixed cost, this represents the quantity of units + applied. + """ + + invoice_grouping_key: Optional[str] + """The property used to group this price on an invoice""" + + invoicing_cycle_configuration: Optional[NewBillingCycleConfiguration] + """Within each billing cycle, specifies the cadence at which invoices are produced. + + If unspecified, a single invoice is produced per billing cycle. + """ + + license_type_id: Optional[str] + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -1898,7 +2217,13 @@ class ReplacePricePriceNewSubscriptionMatrixWithThresholdDiscountsPrice(TypedDic """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2009,7 +2334,13 @@ class ReplacePricePriceNewSubscriptionTieredWithProrationPrice(TypedDict, total= """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2120,7 +2451,13 @@ class ReplacePricePriceNewSubscriptionGroupedWithMinMaxThresholdsPrice(TypedDict """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2231,7 +2568,13 @@ class ReplacePricePriceNewSubscriptionCumulativeGroupedAllocationPrice(TypedDict """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2366,7 +2709,13 @@ class ReplacePricePriceNewSubscriptionDailyCreditAllowancePrice(TypedDict, total """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2488,7 +2837,13 @@ class ReplacePricePriceNewSubscriptionMeteredAllowancePrice(TypedDict, total=Fal """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2597,7 +2952,13 @@ class ReplacePricePriceNewSubscriptionPercentCompositePrice(TypedDict, total=Fal """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2706,7 +3067,13 @@ class ReplacePricePriceNewSubscriptionEventOutputPrice(TypedDict, total=False): """ license_type_id: Optional[str] - """The ID of the license type to associate with this price.""" + """The ID of the license type to associate with this price. + + On a usage price this also marks the price as eligible to draw down from that + license type's allocation; a usage price created without it is billed normally. + Usage prices with a license type must use the `unit` model, and only draw down + when their currency matches the allocation's. + """ metadata: Optional[Dict[str, Optional[str]]] """User-specified key/value pairs for the resource. @@ -2733,6 +3100,7 @@ class ReplacePricePriceNewSubscriptionEventOutputPrice(TypedDict, total=False): NewSubscriptionTieredPackagePriceParam, NewSubscriptionTieredWithMinimumPriceParam, NewSubscriptionGroupedTieredPriceParam, + ReplacePricePriceNewSubscriptionGroupedTieredMatrixPrice, NewSubscriptionTieredPackageWithMinimumPriceParam, NewSubscriptionPackageWithAllocationPriceParam, NewSubscriptionUnitWithPercentPriceParam, diff --git a/tests/api_resources/test_alerts.py b/tests/api_resources/test_alerts.py index f369415a..adead1d8 100644 --- a/tests/api_resources/test_alerts.py +++ b/tests/api_resources/test_alerts.py @@ -168,6 +168,46 @@ def test_streaming_response_list(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True + @parametrize + def test_method_delete(self, client: Orb) -> None: + alert = client.alerts.delete( + "alert_configuration_id", + ) + assert alert is None + + @parametrize + def test_raw_response_delete(self, client: Orb) -> None: + response = client.alerts.with_raw_response.delete( + "alert_configuration_id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + alert = response.parse() + assert alert is None + + @parametrize + def test_streaming_response_delete(self, client: Orb) -> None: + with client.alerts.with_streaming_response.delete( + "alert_configuration_id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + alert = response.parse() + assert alert is None + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_delete(self, client: Orb) -> None: + with pytest.raises( + ValueError, match=r"Expected a non-empty value for `alert_configuration_id` but received ''" + ): + client.alerts.with_raw_response.delete( + "", + ) + @parametrize def test_method_create_for_customer(self, client: Orb) -> None: alert = client.alerts.create_for_customer( @@ -600,6 +640,46 @@ async def test_streaming_response_list(self, async_client: AsyncOrb) -> None: assert cast(Any, response.is_closed) is True + @parametrize + async def test_method_delete(self, async_client: AsyncOrb) -> None: + alert = await async_client.alerts.delete( + "alert_configuration_id", + ) + assert alert is None + + @parametrize + async def test_raw_response_delete(self, async_client: AsyncOrb) -> None: + response = await async_client.alerts.with_raw_response.delete( + "alert_configuration_id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + alert = response.parse() + assert alert is None + + @parametrize + async def test_streaming_response_delete(self, async_client: AsyncOrb) -> None: + async with async_client.alerts.with_streaming_response.delete( + "alert_configuration_id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + alert = await response.parse() + assert alert is None + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_delete(self, async_client: AsyncOrb) -> None: + with pytest.raises( + ValueError, match=r"Expected a non-empty value for `alert_configuration_id` but received ''" + ): + await async_client.alerts.with_raw_response.delete( + "", + ) + @parametrize async def test_method_create_for_customer(self, async_client: AsyncOrb) -> None: alert = await async_client.alerts.create_for_customer( diff --git a/tests/api_resources/test_customers.py b/tests/api_resources/test_customers.py index 731b5caa..c06a8b59 100644 --- a/tests/api_resources/test_customers.py +++ b/tests/api_resources/test_customers.py @@ -10,6 +10,8 @@ from orb import Orb, AsyncOrb from orb.types import ( Customer, + CustomerCreatePortalSessionResponse, + CustomerCreatePortalSessionByExternalIDResponse, ) from orb._utils import parse_datetime from tests.utils import assert_matches_type @@ -305,6 +307,100 @@ def test_path_params_delete(self, client: Orb) -> None: "", ) + @parametrize + def test_method_create_portal_session(self, client: Orb) -> None: + customer = client.customers.create_portal_session( + customer_id="customer_id", + ) + assert_matches_type(CustomerCreatePortalSessionResponse, customer, path=["response"]) + + @parametrize + def test_method_create_portal_session_with_all_params(self, client: Orb) -> None: + customer = client.customers.create_portal_session( + customer_id="customer_id", + expires_in_minutes=1, + invalidate_existing=True, + ) + assert_matches_type(CustomerCreatePortalSessionResponse, customer, path=["response"]) + + @parametrize + def test_raw_response_create_portal_session(self, client: Orb) -> None: + response = client.customers.with_raw_response.create_portal_session( + customer_id="customer_id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + customer = response.parse() + assert_matches_type(CustomerCreatePortalSessionResponse, customer, path=["response"]) + + @parametrize + def test_streaming_response_create_portal_session(self, client: Orb) -> None: + with client.customers.with_streaming_response.create_portal_session( + customer_id="customer_id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + customer = response.parse() + assert_matches_type(CustomerCreatePortalSessionResponse, customer, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_create_portal_session(self, client: Orb) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `customer_id` but received ''"): + client.customers.with_raw_response.create_portal_session( + customer_id="", + ) + + @parametrize + def test_method_create_portal_session_by_external_id(self, client: Orb) -> None: + customer = client.customers.create_portal_session_by_external_id( + external_customer_id="external_customer_id", + ) + assert_matches_type(CustomerCreatePortalSessionByExternalIDResponse, customer, path=["response"]) + + @parametrize + def test_method_create_portal_session_by_external_id_with_all_params(self, client: Orb) -> None: + customer = client.customers.create_portal_session_by_external_id( + external_customer_id="external_customer_id", + expires_in_minutes=1, + invalidate_existing=True, + ) + assert_matches_type(CustomerCreatePortalSessionByExternalIDResponse, customer, path=["response"]) + + @parametrize + def test_raw_response_create_portal_session_by_external_id(self, client: Orb) -> None: + response = client.customers.with_raw_response.create_portal_session_by_external_id( + external_customer_id="external_customer_id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + customer = response.parse() + assert_matches_type(CustomerCreatePortalSessionByExternalIDResponse, customer, path=["response"]) + + @parametrize + def test_streaming_response_create_portal_session_by_external_id(self, client: Orb) -> None: + with client.customers.with_streaming_response.create_portal_session_by_external_id( + external_customer_id="external_customer_id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + customer = response.parse() + assert_matches_type(CustomerCreatePortalSessionByExternalIDResponse, customer, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_create_portal_session_by_external_id(self, client: Orb) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `external_customer_id` but received ''"): + client.customers.with_raw_response.create_portal_session_by_external_id( + external_customer_id="", + ) + @parametrize def test_method_fetch(self, client: Orb) -> None: customer = client.customers.fetch( @@ -854,6 +950,100 @@ async def test_path_params_delete(self, async_client: AsyncOrb) -> None: "", ) + @parametrize + async def test_method_create_portal_session(self, async_client: AsyncOrb) -> None: + customer = await async_client.customers.create_portal_session( + customer_id="customer_id", + ) + assert_matches_type(CustomerCreatePortalSessionResponse, customer, path=["response"]) + + @parametrize + async def test_method_create_portal_session_with_all_params(self, async_client: AsyncOrb) -> None: + customer = await async_client.customers.create_portal_session( + customer_id="customer_id", + expires_in_minutes=1, + invalidate_existing=True, + ) + assert_matches_type(CustomerCreatePortalSessionResponse, customer, path=["response"]) + + @parametrize + async def test_raw_response_create_portal_session(self, async_client: AsyncOrb) -> None: + response = await async_client.customers.with_raw_response.create_portal_session( + customer_id="customer_id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + customer = response.parse() + assert_matches_type(CustomerCreatePortalSessionResponse, customer, path=["response"]) + + @parametrize + async def test_streaming_response_create_portal_session(self, async_client: AsyncOrb) -> None: + async with async_client.customers.with_streaming_response.create_portal_session( + customer_id="customer_id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + customer = await response.parse() + assert_matches_type(CustomerCreatePortalSessionResponse, customer, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_create_portal_session(self, async_client: AsyncOrb) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `customer_id` but received ''"): + await async_client.customers.with_raw_response.create_portal_session( + customer_id="", + ) + + @parametrize + async def test_method_create_portal_session_by_external_id(self, async_client: AsyncOrb) -> None: + customer = await async_client.customers.create_portal_session_by_external_id( + external_customer_id="external_customer_id", + ) + assert_matches_type(CustomerCreatePortalSessionByExternalIDResponse, customer, path=["response"]) + + @parametrize + async def test_method_create_portal_session_by_external_id_with_all_params(self, async_client: AsyncOrb) -> None: + customer = await async_client.customers.create_portal_session_by_external_id( + external_customer_id="external_customer_id", + expires_in_minutes=1, + invalidate_existing=True, + ) + assert_matches_type(CustomerCreatePortalSessionByExternalIDResponse, customer, path=["response"]) + + @parametrize + async def test_raw_response_create_portal_session_by_external_id(self, async_client: AsyncOrb) -> None: + response = await async_client.customers.with_raw_response.create_portal_session_by_external_id( + external_customer_id="external_customer_id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + customer = response.parse() + assert_matches_type(CustomerCreatePortalSessionByExternalIDResponse, customer, path=["response"]) + + @parametrize + async def test_streaming_response_create_portal_session_by_external_id(self, async_client: AsyncOrb) -> None: + async with async_client.customers.with_streaming_response.create_portal_session_by_external_id( + external_customer_id="external_customer_id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + customer = await response.parse() + assert_matches_type(CustomerCreatePortalSessionByExternalIDResponse, customer, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_create_portal_session_by_external_id(self, async_client: AsyncOrb) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `external_customer_id` but received ''"): + await async_client.customers.with_raw_response.create_portal_session_by_external_id( + external_customer_id="", + ) + @parametrize async def test_method_fetch(self, async_client: AsyncOrb) -> None: customer = await async_client.customers.fetch( diff --git a/tests/api_resources/test_events.py b/tests/api_resources/test_events.py index 6aab2662..faf789cd 100644 --- a/tests/api_resources/test_events.py +++ b/tests/api_resources/test_events.py @@ -151,7 +151,6 @@ def test_method_ingest_with_all_params(self, client: Orb) -> None: } ], backfill_id="backfill_id", - debug=True, ) assert_matches_type(EventIngestResponse, event, path=["response"]) @@ -367,7 +366,6 @@ async def test_method_ingest_with_all_params(self, async_client: AsyncOrb) -> No } ], backfill_id="backfill_id", - debug=True, ) assert_matches_type(EventIngestResponse, event, path=["response"]) diff --git a/tests/api_resources/test_invoices.py b/tests/api_resources/test_invoices.py index 8eb7e18e..84033bee 100644 --- a/tests/api_resources/test_invoices.py +++ b/tests/api_resources/test_invoices.py @@ -587,6 +587,82 @@ def test_path_params_pay(self, client: Orb) -> None: shared_payment_token_id="shared_payment_token_id", ) + @parametrize + def test_method_regenerate_invoice_pdf(self, client: Orb) -> None: + invoice = client.invoices.regenerate_invoice_pdf( + "invoice_id", + ) + assert_matches_type(Invoice, invoice, path=["response"]) + + @parametrize + def test_raw_response_regenerate_invoice_pdf(self, client: Orb) -> None: + response = client.invoices.with_raw_response.regenerate_invoice_pdf( + "invoice_id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + invoice = response.parse() + assert_matches_type(Invoice, invoice, path=["response"]) + + @parametrize + def test_streaming_response_regenerate_invoice_pdf(self, client: Orb) -> None: + with client.invoices.with_streaming_response.regenerate_invoice_pdf( + "invoice_id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + invoice = response.parse() + assert_matches_type(Invoice, invoice, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_regenerate_invoice_pdf(self, client: Orb) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `invoice_id` but received ''"): + client.invoices.with_raw_response.regenerate_invoice_pdf( + "", + ) + + @parametrize + def test_method_regenerate_receipt_pdf(self, client: Orb) -> None: + invoice = client.invoices.regenerate_receipt_pdf( + "invoice_id", + ) + assert_matches_type(Invoice, invoice, path=["response"]) + + @parametrize + def test_raw_response_regenerate_receipt_pdf(self, client: Orb) -> None: + response = client.invoices.with_raw_response.regenerate_receipt_pdf( + "invoice_id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + invoice = response.parse() + assert_matches_type(Invoice, invoice, path=["response"]) + + @parametrize + def test_streaming_response_regenerate_receipt_pdf(self, client: Orb) -> None: + with client.invoices.with_streaming_response.regenerate_receipt_pdf( + "invoice_id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + invoice = response.parse() + assert_matches_type(Invoice, invoice, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_path_params_regenerate_receipt_pdf(self, client: Orb) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `invoice_id` but received ''"): + client.invoices.with_raw_response.regenerate_receipt_pdf( + "", + ) + @parametrize def test_method_void(self, client: Orb) -> None: invoice = client.invoices.void( @@ -1194,6 +1270,82 @@ async def test_path_params_pay(self, async_client: AsyncOrb) -> None: shared_payment_token_id="shared_payment_token_id", ) + @parametrize + async def test_method_regenerate_invoice_pdf(self, async_client: AsyncOrb) -> None: + invoice = await async_client.invoices.regenerate_invoice_pdf( + "invoice_id", + ) + assert_matches_type(Invoice, invoice, path=["response"]) + + @parametrize + async def test_raw_response_regenerate_invoice_pdf(self, async_client: AsyncOrb) -> None: + response = await async_client.invoices.with_raw_response.regenerate_invoice_pdf( + "invoice_id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + invoice = response.parse() + assert_matches_type(Invoice, invoice, path=["response"]) + + @parametrize + async def test_streaming_response_regenerate_invoice_pdf(self, async_client: AsyncOrb) -> None: + async with async_client.invoices.with_streaming_response.regenerate_invoice_pdf( + "invoice_id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + invoice = await response.parse() + assert_matches_type(Invoice, invoice, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_regenerate_invoice_pdf(self, async_client: AsyncOrb) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `invoice_id` but received ''"): + await async_client.invoices.with_raw_response.regenerate_invoice_pdf( + "", + ) + + @parametrize + async def test_method_regenerate_receipt_pdf(self, async_client: AsyncOrb) -> None: + invoice = await async_client.invoices.regenerate_receipt_pdf( + "invoice_id", + ) + assert_matches_type(Invoice, invoice, path=["response"]) + + @parametrize + async def test_raw_response_regenerate_receipt_pdf(self, async_client: AsyncOrb) -> None: + response = await async_client.invoices.with_raw_response.regenerate_receipt_pdf( + "invoice_id", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + invoice = response.parse() + assert_matches_type(Invoice, invoice, path=["response"]) + + @parametrize + async def test_streaming_response_regenerate_receipt_pdf(self, async_client: AsyncOrb) -> None: + async with async_client.invoices.with_streaming_response.regenerate_receipt_pdf( + "invoice_id", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + invoice = await response.parse() + assert_matches_type(Invoice, invoice, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_path_params_regenerate_receipt_pdf(self, async_client: AsyncOrb) -> None: + with pytest.raises(ValueError, match=r"Expected a non-empty value for `invoice_id` but received ''"): + await async_client.invoices.with_raw_response.regenerate_receipt_pdf( + "", + ) + @parametrize async def test_method_void(self, async_client: AsyncOrb) -> None: invoice = await async_client.invoices.void( diff --git a/tests/api_resources/test_prices.py b/tests/api_resources/test_prices.py index f343db18..40a7cdd7 100644 --- a/tests/api_resources/test_prices.py +++ b/tests/api_resources/test_prices.py @@ -1180,6 +1180,129 @@ def test_streaming_response_create_overload_10(self, client: Orb) -> None: @parametrize def test_method_create_overload_11(self, client: Orb) -> None: + price = client.prices.create( + cadence="annual", + currency="currency", + grouped_tiered_matrix_config={ + "default_unit_amount": "default_unit_amount", + "dimension": "x", + "tiers": [ + { + "dimension_value": "dimension_value", + "tier_lower_bound": "tier_lower_bound", + "unit_amount": "unit_amount", + } + ], + }, + item_id="item_id", + model_type="grouped_tiered_matrix", + name="Annual fee", + ) + assert_matches_type(Price, price, path=["response"]) + + @parametrize + def test_method_create_with_all_params_overload_11(self, client: Orb) -> None: + price = client.prices.create( + cadence="annual", + currency="currency", + grouped_tiered_matrix_config={ + "default_unit_amount": "default_unit_amount", + "dimension": "x", + "tiers": [ + { + "dimension_value": "dimension_value", + "tier_lower_bound": "tier_lower_bound", + "unit_amount": "unit_amount", + } + ], + }, + item_id="item_id", + model_type="grouped_tiered_matrix", + name="Annual fee", + billable_metric_id="billable_metric_id", + billed_in_advance=True, + billing_cycle_configuration={ + "duration": 0, + "duration_unit": "day", + }, + conversion_rate=0, + conversion_rate_config={ + "conversion_rate_type": "unit", + "unit_config": {"unit_amount": "unit_amount"}, + }, + dimensional_price_configuration={ + "dimension_values": ["string"], + "dimensional_price_group_id": "dimensional_price_group_id", + "external_dimensional_price_group_id": "external_dimensional_price_group_id", + }, + external_price_id="external_price_id", + fixed_price_quantity=0, + invoice_grouping_key="x", + invoicing_cycle_configuration={ + "duration": 0, + "duration_unit": "day", + }, + license_type_id="license_type_id", + metadata={"foo": "string"}, + ) + assert_matches_type(Price, price, path=["response"]) + + @parametrize + def test_raw_response_create_overload_11(self, client: Orb) -> None: + response = client.prices.with_raw_response.create( + cadence="annual", + currency="currency", + grouped_tiered_matrix_config={ + "default_unit_amount": "default_unit_amount", + "dimension": "x", + "tiers": [ + { + "dimension_value": "dimension_value", + "tier_lower_bound": "tier_lower_bound", + "unit_amount": "unit_amount", + } + ], + }, + item_id="item_id", + model_type="grouped_tiered_matrix", + name="Annual fee", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + price = response.parse() + assert_matches_type(Price, price, path=["response"]) + + @parametrize + def test_streaming_response_create_overload_11(self, client: Orb) -> None: + with client.prices.with_streaming_response.create( + cadence="annual", + currency="currency", + grouped_tiered_matrix_config={ + "default_unit_amount": "default_unit_amount", + "dimension": "x", + "tiers": [ + { + "dimension_value": "dimension_value", + "tier_lower_bound": "tier_lower_bound", + "unit_amount": "unit_amount", + } + ], + }, + item_id="item_id", + model_type="grouped_tiered_matrix", + name="Annual fee", + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + price = response.parse() + assert_matches_type(Price, price, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + def test_method_create_overload_12(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1205,7 +1328,7 @@ def test_method_create_overload_11(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_11(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_12(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1256,7 +1379,7 @@ def test_method_create_with_all_params_overload_11(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_11(self, client: Orb) -> None: + def test_raw_response_create_overload_12(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -1286,7 +1409,7 @@ def test_raw_response_create_overload_11(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_11(self, client: Orb) -> None: + def test_streaming_response_create_overload_12(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -1318,7 +1441,7 @@ def test_streaming_response_create_overload_11(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_12(self, client: Orb) -> None: + def test_method_create_overload_13(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1334,7 +1457,7 @@ def test_method_create_overload_12(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_12(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_13(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1375,7 +1498,7 @@ def test_method_create_with_all_params_overload_12(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_12(self, client: Orb) -> None: + def test_raw_response_create_overload_13(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -1395,7 +1518,7 @@ def test_raw_response_create_overload_12(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_12(self, client: Orb) -> None: + def test_streaming_response_create_overload_13(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -1417,7 +1540,7 @@ def test_streaming_response_create_overload_12(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_13(self, client: Orb) -> None: + def test_method_create_overload_14(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1432,7 +1555,7 @@ def test_method_create_overload_13(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_13(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_14(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1472,7 +1595,7 @@ def test_method_create_with_all_params_overload_13(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_13(self, client: Orb) -> None: + def test_raw_response_create_overload_14(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -1491,7 +1614,7 @@ def test_raw_response_create_overload_13(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_13(self, client: Orb) -> None: + def test_streaming_response_create_overload_14(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -1512,7 +1635,7 @@ def test_streaming_response_create_overload_13(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_14(self, client: Orb) -> None: + def test_method_create_overload_15(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1534,7 +1657,7 @@ def test_method_create_overload_14(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_14(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_15(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1581,7 +1704,7 @@ def test_method_create_with_all_params_overload_14(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_14(self, client: Orb) -> None: + def test_raw_response_create_overload_15(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -1607,7 +1730,7 @@ def test_raw_response_create_overload_14(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_14(self, client: Orb) -> None: + def test_streaming_response_create_overload_15(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -1635,7 +1758,7 @@ def test_streaming_response_create_overload_14(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_15(self, client: Orb) -> None: + def test_method_create_overload_16(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1656,7 +1779,7 @@ def test_method_create_overload_15(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_15(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_16(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1713,7 +1836,7 @@ def test_method_create_with_all_params_overload_15(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_15(self, client: Orb) -> None: + def test_raw_response_create_overload_16(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -1738,7 +1861,7 @@ def test_raw_response_create_overload_15(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_15(self, client: Orb) -> None: + def test_streaming_response_create_overload_16(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -1765,7 +1888,7 @@ def test_streaming_response_create_overload_15(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_16(self, client: Orb) -> None: + def test_method_create_overload_17(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1784,7 +1907,7 @@ def test_method_create_overload_16(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_16(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_17(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1828,7 +1951,7 @@ def test_method_create_with_all_params_overload_16(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_16(self, client: Orb) -> None: + def test_raw_response_create_overload_17(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -1851,7 +1974,7 @@ def test_raw_response_create_overload_16(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_16(self, client: Orb) -> None: + def test_streaming_response_create_overload_17(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -1876,7 +1999,7 @@ def test_streaming_response_create_overload_16(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_17(self, client: Orb) -> None: + def test_method_create_overload_18(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1888,7 +2011,7 @@ def test_method_create_overload_17(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_17(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_18(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1925,7 +2048,7 @@ def test_method_create_with_all_params_overload_17(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_17(self, client: Orb) -> None: + def test_raw_response_create_overload_18(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -1941,7 +2064,7 @@ def test_raw_response_create_overload_17(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_17(self, client: Orb) -> None: + def test_streaming_response_create_overload_18(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -1959,7 +2082,7 @@ def test_streaming_response_create_overload_17(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_18(self, client: Orb) -> None: + def test_method_create_overload_19(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -1975,7 +2098,7 @@ def test_method_create_overload_18(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_18(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_19(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2016,7 +2139,7 @@ def test_method_create_with_all_params_overload_18(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_18(self, client: Orb) -> None: + def test_raw_response_create_overload_19(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -2036,7 +2159,7 @@ def test_raw_response_create_overload_18(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_18(self, client: Orb) -> None: + def test_streaming_response_create_overload_19(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -2058,7 +2181,7 @@ def test_streaming_response_create_overload_18(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_19(self, client: Orb) -> None: + def test_method_create_overload_20(self, client: Orb) -> None: price = client.prices.create( bulk_with_proration_config={"tiers": [{"unit_amount": "unit_amount"}, {"unit_amount": "unit_amount"}]}, cadence="annual", @@ -2070,7 +2193,7 @@ def test_method_create_overload_19(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_19(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_20(self, client: Orb) -> None: price = client.prices.create( bulk_with_proration_config={ "tiers": [ @@ -2118,7 +2241,7 @@ def test_method_create_with_all_params_overload_19(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_19(self, client: Orb) -> None: + def test_raw_response_create_overload_20(self, client: Orb) -> None: response = client.prices.with_raw_response.create( bulk_with_proration_config={"tiers": [{"unit_amount": "unit_amount"}, {"unit_amount": "unit_amount"}]}, cadence="annual", @@ -2134,7 +2257,7 @@ def test_raw_response_create_overload_19(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_19(self, client: Orb) -> None: + def test_streaming_response_create_overload_20(self, client: Orb) -> None: with client.prices.with_streaming_response.create( bulk_with_proration_config={"tiers": [{"unit_amount": "unit_amount"}, {"unit_amount": "unit_amount"}]}, cadence="annual", @@ -2152,7 +2275,7 @@ def test_streaming_response_create_overload_19(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_20(self, client: Orb) -> None: + def test_method_create_overload_21(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2168,7 +2291,7 @@ def test_method_create_overload_20(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_20(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_21(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2209,7 +2332,7 @@ def test_method_create_with_all_params_overload_20(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_20(self, client: Orb) -> None: + def test_raw_response_create_overload_21(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -2229,7 +2352,7 @@ def test_raw_response_create_overload_20(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_20(self, client: Orb) -> None: + def test_streaming_response_create_overload_21(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -2251,7 +2374,7 @@ def test_streaming_response_create_overload_20(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_21(self, client: Orb) -> None: + def test_method_create_overload_22(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2280,7 +2403,7 @@ def test_method_create_overload_21(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_21(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_22(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2334,7 +2457,7 @@ def test_method_create_with_all_params_overload_21(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_21(self, client: Orb) -> None: + def test_raw_response_create_overload_22(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -2367,7 +2490,7 @@ def test_raw_response_create_overload_21(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_21(self, client: Orb) -> None: + def test_streaming_response_create_overload_22(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -2402,7 +2525,7 @@ def test_streaming_response_create_overload_21(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_22(self, client: Orb) -> None: + def test_method_create_overload_23(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2419,7 +2542,7 @@ def test_method_create_overload_22(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_22(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_23(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2461,7 +2584,7 @@ def test_method_create_with_all_params_overload_22(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_22(self, client: Orb) -> None: + def test_raw_response_create_overload_23(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -2482,7 +2605,7 @@ def test_raw_response_create_overload_22(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_22(self, client: Orb) -> None: + def test_streaming_response_create_overload_23(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -2505,7 +2628,7 @@ def test_streaming_response_create_overload_22(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_23(self, client: Orb) -> None: + def test_method_create_overload_24(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2526,7 +2649,7 @@ def test_method_create_overload_23(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_23(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_24(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2572,7 +2695,7 @@ def test_method_create_with_all_params_overload_23(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_23(self, client: Orb) -> None: + def test_raw_response_create_overload_24(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -2597,7 +2720,7 @@ def test_raw_response_create_overload_23(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_23(self, client: Orb) -> None: + def test_streaming_response_create_overload_24(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -2624,7 +2747,7 @@ def test_streaming_response_create_overload_23(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_24(self, client: Orb) -> None: + def test_method_create_overload_25(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2649,7 +2772,7 @@ def test_method_create_overload_24(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_24(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_25(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2699,7 +2822,7 @@ def test_method_create_with_all_params_overload_24(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_24(self, client: Orb) -> None: + def test_raw_response_create_overload_25(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -2728,7 +2851,7 @@ def test_raw_response_create_overload_24(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_24(self, client: Orb) -> None: + def test_streaming_response_create_overload_25(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -2759,7 +2882,7 @@ def test_streaming_response_create_overload_24(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_25(self, client: Orb) -> None: + def test_method_create_overload_26(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2784,7 +2907,7 @@ def test_method_create_overload_25(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_25(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_26(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2834,7 +2957,7 @@ def test_method_create_with_all_params_overload_25(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_25(self, client: Orb) -> None: + def test_raw_response_create_overload_26(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -2863,7 +2986,7 @@ def test_raw_response_create_overload_25(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_25(self, client: Orb) -> None: + def test_streaming_response_create_overload_26(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -2894,7 +3017,7 @@ def test_streaming_response_create_overload_25(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_26(self, client: Orb) -> None: + def test_method_create_overload_27(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2915,7 +3038,7 @@ def test_method_create_overload_26(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_26(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_27(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -2965,7 +3088,7 @@ def test_method_create_with_all_params_overload_26(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_26(self, client: Orb) -> None: + def test_raw_response_create_overload_27(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -2990,7 +3113,7 @@ def test_raw_response_create_overload_26(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_26(self, client: Orb) -> None: + def test_streaming_response_create_overload_27(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -3017,7 +3140,7 @@ def test_streaming_response_create_overload_26(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_27(self, client: Orb) -> None: + def test_method_create_overload_28(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -3047,7 +3170,7 @@ def test_method_create_overload_27(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_27(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_28(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -3104,7 +3227,7 @@ def test_method_create_with_all_params_overload_27(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_27(self, client: Orb) -> None: + def test_raw_response_create_overload_28(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -3138,7 +3261,7 @@ def test_raw_response_create_overload_27(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_27(self, client: Orb) -> None: + def test_streaming_response_create_overload_28(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -3174,7 +3297,7 @@ def test_streaming_response_create_overload_27(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_28(self, client: Orb) -> None: + def test_method_create_overload_29(self, client: Orb) -> None: price = client.prices.create( cadence="annual", cumulative_grouped_bulk_config={ @@ -3195,7 +3318,7 @@ def test_method_create_overload_28(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_28(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_29(self, client: Orb) -> None: price = client.prices.create( cadence="annual", cumulative_grouped_bulk_config={ @@ -3241,7 +3364,7 @@ def test_method_create_with_all_params_overload_28(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_28(self, client: Orb) -> None: + def test_raw_response_create_overload_29(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", cumulative_grouped_bulk_config={ @@ -3266,7 +3389,7 @@ def test_raw_response_create_overload_28(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_28(self, client: Orb) -> None: + def test_streaming_response_create_overload_29(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", cumulative_grouped_bulk_config={ @@ -3293,7 +3416,7 @@ def test_streaming_response_create_overload_28(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_29(self, client: Orb) -> None: + def test_method_create_overload_30(self, client: Orb) -> None: price = client.prices.create( cadence="annual", cumulative_grouped_allocation_config={ @@ -3310,7 +3433,7 @@ def test_method_create_overload_29(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_29(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_30(self, client: Orb) -> None: price = client.prices.create( cadence="annual", cumulative_grouped_allocation_config={ @@ -3352,7 +3475,7 @@ def test_method_create_with_all_params_overload_29(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_29(self, client: Orb) -> None: + def test_raw_response_create_overload_30(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", cumulative_grouped_allocation_config={ @@ -3373,7 +3496,7 @@ def test_raw_response_create_overload_29(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_29(self, client: Orb) -> None: + def test_streaming_response_create_overload_30(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", cumulative_grouped_allocation_config={ @@ -3396,7 +3519,7 @@ def test_streaming_response_create_overload_29(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_30(self, client: Orb) -> None: + def test_method_create_overload_31(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -3419,7 +3542,7 @@ def test_method_create_overload_30(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_30(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_31(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -3467,7 +3590,7 @@ def test_method_create_with_all_params_overload_30(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_30(self, client: Orb) -> None: + def test_raw_response_create_overload_31(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -3494,7 +3617,7 @@ def test_raw_response_create_overload_30(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_30(self, client: Orb) -> None: + def test_streaming_response_create_overload_31(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -3523,7 +3646,7 @@ def test_streaming_response_create_overload_30(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_31(self, client: Orb) -> None: + def test_method_create_overload_32(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -3540,7 +3663,7 @@ def test_method_create_overload_31(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_31(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_32(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -3584,7 +3707,7 @@ def test_method_create_with_all_params_overload_31(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_31(self, client: Orb) -> None: + def test_raw_response_create_overload_32(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -3605,7 +3728,7 @@ def test_raw_response_create_overload_31(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_31(self, client: Orb) -> None: + def test_streaming_response_create_overload_32(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -3628,7 +3751,7 @@ def test_streaming_response_create_overload_31(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_32(self, client: Orb) -> None: + def test_method_create_overload_33(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -3640,7 +3763,7 @@ def test_method_create_overload_32(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_32(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_33(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -3680,7 +3803,7 @@ def test_method_create_with_all_params_overload_32(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_32(self, client: Orb) -> None: + def test_raw_response_create_overload_33(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -3696,7 +3819,7 @@ def test_raw_response_create_overload_32(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_32(self, client: Orb) -> None: + def test_streaming_response_create_overload_33(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -3714,7 +3837,7 @@ def test_streaming_response_create_overload_32(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_33(self, client: Orb) -> None: + def test_method_create_overload_34(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -3726,7 +3849,7 @@ def test_method_create_overload_33(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_33(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_34(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -3768,7 +3891,7 @@ def test_method_create_with_all_params_overload_33(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_33(self, client: Orb) -> None: + def test_raw_response_create_overload_34(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -3784,7 +3907,7 @@ def test_raw_response_create_overload_33(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_33(self, client: Orb) -> None: + def test_streaming_response_create_overload_34(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -3802,7 +3925,7 @@ def test_streaming_response_create_overload_33(self, client: Orb) -> None: assert cast(Any, response.is_closed) is True @parametrize - def test_method_create_overload_34(self, client: Orb) -> None: + def test_method_create_overload_35(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -3814,7 +3937,7 @@ def test_method_create_overload_34(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_method_create_with_all_params_overload_34(self, client: Orb) -> None: + def test_method_create_with_all_params_overload_35(self, client: Orb) -> None: price = client.prices.create( cadence="annual", currency="currency", @@ -3855,7 +3978,7 @@ def test_method_create_with_all_params_overload_34(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_raw_response_create_overload_34(self, client: Orb) -> None: + def test_raw_response_create_overload_35(self, client: Orb) -> None: response = client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -3871,7 +3994,7 @@ def test_raw_response_create_overload_34(self, client: Orb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - def test_streaming_response_create_overload_34(self, client: Orb) -> None: + def test_streaming_response_create_overload_35(self, client: Orb) -> None: with client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -5251,27 +5374,158 @@ async def test_raw_response_create_overload_9(self, async_client: AsyncOrb) -> N assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_9(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_9(self, async_client: AsyncOrb) -> None: + async with async_client.prices.with_streaming_response.create( + cadence="annual", + currency="currency", + item_id="item_id", + model_type="tiered_with_minimum", + name="Annual fee", + tiered_with_minimum_config={ + "tiers": [ + { + "minimum_amount": "minimum_amount", + "tier_lower_bound": "tier_lower_bound", + "unit_amount": "unit_amount", + }, + { + "minimum_amount": "minimum_amount", + "tier_lower_bound": "tier_lower_bound", + "unit_amount": "unit_amount", + }, + ] + }, + ) as response: + assert not response.is_closed + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + + price = await response.parse() + assert_matches_type(Price, price, path=["response"]) + + assert cast(Any, response.is_closed) is True + + @parametrize + async def test_method_create_overload_10(self, async_client: AsyncOrb) -> None: + price = await async_client.prices.create( + cadence="annual", + currency="currency", + grouped_tiered_config={ + "grouping_key": "x", + "tiers": [ + { + "tier_lower_bound": "tier_lower_bound", + "unit_amount": "unit_amount", + }, + { + "tier_lower_bound": "tier_lower_bound", + "unit_amount": "unit_amount", + }, + ], + }, + item_id="item_id", + model_type="grouped_tiered", + name="Annual fee", + ) + assert_matches_type(Price, price, path=["response"]) + + @parametrize + async def test_method_create_with_all_params_overload_10(self, async_client: AsyncOrb) -> None: + price = await async_client.prices.create( + cadence="annual", + currency="currency", + grouped_tiered_config={ + "grouping_key": "x", + "tiers": [ + { + "tier_lower_bound": "tier_lower_bound", + "unit_amount": "unit_amount", + }, + { + "tier_lower_bound": "tier_lower_bound", + "unit_amount": "unit_amount", + }, + ], + }, + item_id="item_id", + model_type="grouped_tiered", + name="Annual fee", + billable_metric_id="billable_metric_id", + billed_in_advance=True, + billing_cycle_configuration={ + "duration": 0, + "duration_unit": "day", + }, + conversion_rate=0, + conversion_rate_config={ + "conversion_rate_type": "unit", + "unit_config": {"unit_amount": "unit_amount"}, + }, + dimensional_price_configuration={ + "dimension_values": ["string"], + "dimensional_price_group_id": "dimensional_price_group_id", + "external_dimensional_price_group_id": "external_dimensional_price_group_id", + }, + external_price_id="external_price_id", + fixed_price_quantity=0, + invoice_grouping_key="x", + invoicing_cycle_configuration={ + "duration": 0, + "duration_unit": "day", + }, + license_type_id="license_type_id", + metadata={"foo": "string"}, + ) + assert_matches_type(Price, price, path=["response"]) + + @parametrize + async def test_raw_response_create_overload_10(self, async_client: AsyncOrb) -> None: + response = await async_client.prices.with_raw_response.create( + cadence="annual", + currency="currency", + grouped_tiered_config={ + "grouping_key": "x", + "tiers": [ + { + "tier_lower_bound": "tier_lower_bound", + "unit_amount": "unit_amount", + }, + { + "tier_lower_bound": "tier_lower_bound", + "unit_amount": "unit_amount", + }, + ], + }, + item_id="item_id", + model_type="grouped_tiered", + name="Annual fee", + ) + + assert response.is_closed is True + assert response.http_request.headers.get("X-Stainless-Lang") == "python" + price = response.parse() + assert_matches_type(Price, price, path=["response"]) + + @parametrize + async def test_streaming_response_create_overload_10(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", - item_id="item_id", - model_type="tiered_with_minimum", - name="Annual fee", - tiered_with_minimum_config={ + grouped_tiered_config={ + "grouping_key": "x", "tiers": [ { - "minimum_amount": "minimum_amount", "tier_lower_bound": "tier_lower_bound", "unit_amount": "unit_amount", }, { - "minimum_amount": "minimum_amount", "tier_lower_bound": "tier_lower_bound", "unit_amount": "unit_amount", }, - ] + ], }, + item_id="item_id", + model_type="grouped_tiered", + name="Annual fee", ) as response: assert not response.is_closed assert response.http_request.headers.get("X-Stainless-Lang") == "python" @@ -5282,49 +5536,45 @@ async def test_streaming_response_create_overload_9(self, async_client: AsyncOrb assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_10(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_11(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", - grouped_tiered_config={ - "grouping_key": "x", + grouped_tiered_matrix_config={ + "default_unit_amount": "default_unit_amount", + "dimension": "x", "tiers": [ { + "dimension_value": "dimension_value", "tier_lower_bound": "tier_lower_bound", "unit_amount": "unit_amount", - }, - { - "tier_lower_bound": "tier_lower_bound", - "unit_amount": "unit_amount", - }, + } ], }, item_id="item_id", - model_type="grouped_tiered", + model_type="grouped_tiered_matrix", name="Annual fee", ) assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_10(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_11(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", - grouped_tiered_config={ - "grouping_key": "x", + grouped_tiered_matrix_config={ + "default_unit_amount": "default_unit_amount", + "dimension": "x", "tiers": [ { + "dimension_value": "dimension_value", "tier_lower_bound": "tier_lower_bound", "unit_amount": "unit_amount", - }, - { - "tier_lower_bound": "tier_lower_bound", - "unit_amount": "unit_amount", - }, + } ], }, item_id="item_id", - model_type="grouped_tiered", + model_type="grouped_tiered_matrix", name="Annual fee", billable_metric_id="billable_metric_id", billed_in_advance=True, @@ -5355,25 +5605,23 @@ async def test_method_create_with_all_params_overload_10(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_10(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_11(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", - grouped_tiered_config={ - "grouping_key": "x", + grouped_tiered_matrix_config={ + "default_unit_amount": "default_unit_amount", + "dimension": "x", "tiers": [ { + "dimension_value": "dimension_value", "tier_lower_bound": "tier_lower_bound", "unit_amount": "unit_amount", - }, - { - "tier_lower_bound": "tier_lower_bound", - "unit_amount": "unit_amount", - }, + } ], }, item_id="item_id", - model_type="grouped_tiered", + model_type="grouped_tiered_matrix", name="Annual fee", ) @@ -5383,25 +5631,23 @@ async def test_raw_response_create_overload_10(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_10(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_11(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", - grouped_tiered_config={ - "grouping_key": "x", + grouped_tiered_matrix_config={ + "default_unit_amount": "default_unit_amount", + "dimension": "x", "tiers": [ { + "dimension_value": "dimension_value", "tier_lower_bound": "tier_lower_bound", "unit_amount": "unit_amount", - }, - { - "tier_lower_bound": "tier_lower_bound", - "unit_amount": "unit_amount", - }, + } ], }, item_id="item_id", - model_type="grouped_tiered", + model_type="grouped_tiered_matrix", name="Annual fee", ) as response: assert not response.is_closed @@ -5413,7 +5659,7 @@ async def test_streaming_response_create_overload_10(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_11(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_12(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -5439,7 +5685,7 @@ async def test_method_create_overload_11(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_11(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_12(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -5490,7 +5736,7 @@ async def test_method_create_with_all_params_overload_11(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_11(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_12(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -5520,7 +5766,7 @@ async def test_raw_response_create_overload_11(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_11(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_12(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -5552,7 +5798,7 @@ async def test_streaming_response_create_overload_11(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_12(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_13(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -5568,7 +5814,7 @@ async def test_method_create_overload_12(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_12(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_13(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -5609,7 +5855,7 @@ async def test_method_create_with_all_params_overload_12(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_12(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_13(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -5629,7 +5875,7 @@ async def test_raw_response_create_overload_12(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_12(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_13(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -5651,7 +5897,7 @@ async def test_streaming_response_create_overload_12(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_13(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_14(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -5666,7 +5912,7 @@ async def test_method_create_overload_13(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_13(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_14(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -5706,7 +5952,7 @@ async def test_method_create_with_all_params_overload_13(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_13(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_14(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -5725,7 +5971,7 @@ async def test_raw_response_create_overload_13(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_13(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_14(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -5746,7 +5992,7 @@ async def test_streaming_response_create_overload_13(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_14(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_15(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -5768,7 +6014,7 @@ async def test_method_create_overload_14(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_14(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_15(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -5815,7 +6061,7 @@ async def test_method_create_with_all_params_overload_14(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_14(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_15(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -5841,7 +6087,7 @@ async def test_raw_response_create_overload_14(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_14(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_15(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -5869,7 +6115,7 @@ async def test_streaming_response_create_overload_14(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_15(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_16(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -5890,7 +6136,7 @@ async def test_method_create_overload_15(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_15(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_16(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -5947,7 +6193,7 @@ async def test_method_create_with_all_params_overload_15(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_15(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_16(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -5972,7 +6218,7 @@ async def test_raw_response_create_overload_15(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_15(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_16(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -5999,7 +6245,7 @@ async def test_streaming_response_create_overload_15(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_16(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_17(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6018,7 +6264,7 @@ async def test_method_create_overload_16(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_16(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_17(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6062,7 +6308,7 @@ async def test_method_create_with_all_params_overload_16(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_16(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_17(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -6085,7 +6331,7 @@ async def test_raw_response_create_overload_16(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_16(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_17(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -6110,7 +6356,7 @@ async def test_streaming_response_create_overload_16(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_17(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_18(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6122,7 +6368,7 @@ async def test_method_create_overload_17(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_17(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_18(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6159,7 +6405,7 @@ async def test_method_create_with_all_params_overload_17(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_17(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_18(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -6175,7 +6421,7 @@ async def test_raw_response_create_overload_17(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_17(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_18(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -6193,7 +6439,7 @@ async def test_streaming_response_create_overload_17(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_18(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_19(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6209,7 +6455,7 @@ async def test_method_create_overload_18(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_18(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_19(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6250,7 +6496,7 @@ async def test_method_create_with_all_params_overload_18(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_18(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_19(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -6270,7 +6516,7 @@ async def test_raw_response_create_overload_18(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_18(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_19(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -6292,7 +6538,7 @@ async def test_streaming_response_create_overload_18(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_19(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_20(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( bulk_with_proration_config={"tiers": [{"unit_amount": "unit_amount"}, {"unit_amount": "unit_amount"}]}, cadence="annual", @@ -6304,7 +6550,7 @@ async def test_method_create_overload_19(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_19(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_20(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( bulk_with_proration_config={ "tiers": [ @@ -6352,7 +6598,7 @@ async def test_method_create_with_all_params_overload_19(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_19(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_20(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( bulk_with_proration_config={"tiers": [{"unit_amount": "unit_amount"}, {"unit_amount": "unit_amount"}]}, cadence="annual", @@ -6368,7 +6614,7 @@ async def test_raw_response_create_overload_19(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_19(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_20(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( bulk_with_proration_config={"tiers": [{"unit_amount": "unit_amount"}, {"unit_amount": "unit_amount"}]}, cadence="annual", @@ -6386,7 +6632,7 @@ async def test_streaming_response_create_overload_19(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_20(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_21(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6402,7 +6648,7 @@ async def test_method_create_overload_20(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_20(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_21(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6443,7 +6689,7 @@ async def test_method_create_with_all_params_overload_20(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_20(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_21(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -6463,7 +6709,7 @@ async def test_raw_response_create_overload_20(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_20(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_21(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -6485,7 +6731,7 @@ async def test_streaming_response_create_overload_20(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_21(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_22(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6514,7 +6760,7 @@ async def test_method_create_overload_21(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_21(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_22(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6568,7 +6814,7 @@ async def test_method_create_with_all_params_overload_21(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_21(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_22(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -6601,7 +6847,7 @@ async def test_raw_response_create_overload_21(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_21(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_22(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -6636,7 +6882,7 @@ async def test_streaming_response_create_overload_21(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_22(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_23(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6653,7 +6899,7 @@ async def test_method_create_overload_22(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_22(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_23(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6695,7 +6941,7 @@ async def test_method_create_with_all_params_overload_22(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_22(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_23(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -6716,7 +6962,7 @@ async def test_raw_response_create_overload_22(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_22(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_23(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -6739,7 +6985,7 @@ async def test_streaming_response_create_overload_22(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_23(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_24(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6760,7 +7006,7 @@ async def test_method_create_overload_23(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_23(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_24(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6806,7 +7052,7 @@ async def test_method_create_with_all_params_overload_23(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_23(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_24(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -6831,7 +7077,7 @@ async def test_raw_response_create_overload_23(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_23(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_24(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -6858,7 +7104,7 @@ async def test_streaming_response_create_overload_23(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_24(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_25(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6883,7 +7129,7 @@ async def test_method_create_overload_24(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_24(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_25(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -6933,7 +7179,7 @@ async def test_method_create_with_all_params_overload_24(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_24(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_25(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -6962,7 +7208,7 @@ async def test_raw_response_create_overload_24(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_24(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_25(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -6993,7 +7239,7 @@ async def test_streaming_response_create_overload_24(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_25(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_26(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7018,7 +7264,7 @@ async def test_method_create_overload_25(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_25(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_26(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7068,7 +7314,7 @@ async def test_method_create_with_all_params_overload_25(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_25(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_26(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -7097,7 +7343,7 @@ async def test_raw_response_create_overload_25(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_25(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_26(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -7128,7 +7374,7 @@ async def test_streaming_response_create_overload_25(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_26(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_27(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7149,7 +7395,7 @@ async def test_method_create_overload_26(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_26(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_27(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7199,7 +7445,7 @@ async def test_method_create_with_all_params_overload_26(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_26(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_27(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -7224,7 +7470,7 @@ async def test_raw_response_create_overload_26(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_26(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_27(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -7251,7 +7497,7 @@ async def test_streaming_response_create_overload_26(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_27(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_28(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7281,7 +7527,7 @@ async def test_method_create_overload_27(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_27(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_28(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7338,7 +7584,7 @@ async def test_method_create_with_all_params_overload_27(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_27(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_28(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -7372,7 +7618,7 @@ async def test_raw_response_create_overload_27(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_27(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_28(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -7408,7 +7654,7 @@ async def test_streaming_response_create_overload_27(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_28(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_29(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", cumulative_grouped_bulk_config={ @@ -7429,7 +7675,7 @@ async def test_method_create_overload_28(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_28(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_29(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", cumulative_grouped_bulk_config={ @@ -7475,7 +7721,7 @@ async def test_method_create_with_all_params_overload_28(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_28(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_29(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", cumulative_grouped_bulk_config={ @@ -7500,7 +7746,7 @@ async def test_raw_response_create_overload_28(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_28(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_29(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", cumulative_grouped_bulk_config={ @@ -7527,7 +7773,7 @@ async def test_streaming_response_create_overload_28(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_29(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_30(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", cumulative_grouped_allocation_config={ @@ -7544,7 +7790,7 @@ async def test_method_create_overload_29(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_29(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_30(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", cumulative_grouped_allocation_config={ @@ -7586,7 +7832,7 @@ async def test_method_create_with_all_params_overload_29(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_29(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_30(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", cumulative_grouped_allocation_config={ @@ -7607,7 +7853,7 @@ async def test_raw_response_create_overload_29(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_29(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_30(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", cumulative_grouped_allocation_config={ @@ -7630,7 +7876,7 @@ async def test_streaming_response_create_overload_29(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_30(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_31(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7653,7 +7899,7 @@ async def test_method_create_overload_30(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_30(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_31(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7701,7 +7947,7 @@ async def test_method_create_with_all_params_overload_30(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_30(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_31(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -7728,7 +7974,7 @@ async def test_raw_response_create_overload_30(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_30(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_31(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -7757,7 +8003,7 @@ async def test_streaming_response_create_overload_30(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_31(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_32(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7774,7 +8020,7 @@ async def test_method_create_overload_31(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_31(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_32(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7818,7 +8064,7 @@ async def test_method_create_with_all_params_overload_31(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_31(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_32(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -7839,7 +8085,7 @@ async def test_raw_response_create_overload_31(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_31(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_32(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -7862,7 +8108,7 @@ async def test_streaming_response_create_overload_31(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_32(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_33(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7874,7 +8120,7 @@ async def test_method_create_overload_32(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_32(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_33(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7914,7 +8160,7 @@ async def test_method_create_with_all_params_overload_32(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_32(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_33(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -7930,7 +8176,7 @@ async def test_raw_response_create_overload_32(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_32(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_33(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -7948,7 +8194,7 @@ async def test_streaming_response_create_overload_32(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_33(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_34(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -7960,7 +8206,7 @@ async def test_method_create_overload_33(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_33(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_34(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -8002,7 +8248,7 @@ async def test_method_create_with_all_params_overload_33(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_33(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_34(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -8018,7 +8264,7 @@ async def test_raw_response_create_overload_33(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_33(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_34(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", @@ -8036,7 +8282,7 @@ async def test_streaming_response_create_overload_33(self, async_client: AsyncOr assert cast(Any, response.is_closed) is True @parametrize - async def test_method_create_overload_34(self, async_client: AsyncOrb) -> None: + async def test_method_create_overload_35(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -8048,7 +8294,7 @@ async def test_method_create_overload_34(self, async_client: AsyncOrb) -> None: assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_method_create_with_all_params_overload_34(self, async_client: AsyncOrb) -> None: + async def test_method_create_with_all_params_overload_35(self, async_client: AsyncOrb) -> None: price = await async_client.prices.create( cadence="annual", currency="currency", @@ -8089,7 +8335,7 @@ async def test_method_create_with_all_params_overload_34(self, async_client: Asy assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_raw_response_create_overload_34(self, async_client: AsyncOrb) -> None: + async def test_raw_response_create_overload_35(self, async_client: AsyncOrb) -> None: response = await async_client.prices.with_raw_response.create( cadence="annual", currency="currency", @@ -8105,7 +8351,7 @@ async def test_raw_response_create_overload_34(self, async_client: AsyncOrb) -> assert_matches_type(Price, price, path=["response"]) @parametrize - async def test_streaming_response_create_overload_34(self, async_client: AsyncOrb) -> None: + async def test_streaming_response_create_overload_35(self, async_client: AsyncOrb) -> None: async with async_client.prices.with_streaming_response.create( cadence="annual", currency="currency", diff --git a/uv.lock b/uv.lock index 173a71c8..08e8f2ec 100644 --- a/uv.lock +++ b/uv.lock @@ -4,10 +4,10 @@ requires-python = ">=3.9" resolution-markers = [ "python_full_version >= '3.14' and extra != 'group-11-orb-billing-pydantic-v1' and extra == 'group-11-orb-billing-pydantic-v2'", "python_full_version >= '3.10' and python_full_version < '3.14' and extra != 'group-11-orb-billing-pydantic-v1' and extra == 'group-11-orb-billing-pydantic-v2'", - "python_full_version < '3.10' and extra != 'group-11-orb-billing-pydantic-v1' and extra == 'group-11-orb-billing-pydantic-v2'", "python_full_version >= '3.10' and extra == 'group-11-orb-billing-pydantic-v1' and extra != 'group-11-orb-billing-pydantic-v2'", - "python_full_version < '3.10' and extra == 'group-11-orb-billing-pydantic-v1' and extra != 'group-11-orb-billing-pydantic-v2'", "python_full_version >= '3.10' and extra != 'group-11-orb-billing-pydantic-v1' and extra != 'group-11-orb-billing-pydantic-v2'", + "python_full_version < '3.10' and extra != 'group-11-orb-billing-pydantic-v1' and extra == 'group-11-orb-billing-pydantic-v2'", + "python_full_version < '3.10' and extra == 'group-11-orb-billing-pydantic-v1' and extra != 'group-11-orb-billing-pydantic-v2'", "python_full_version < '3.10' and extra != 'group-11-orb-billing-pydantic-v1' and extra != 'group-11-orb-billing-pydantic-v2'", ] conflicts = [[ @@ -779,7 +779,7 @@ wheels = [ [[package]] name = "orb-billing" -version = "4.55.1" +version = "4.64.0" source = { editable = "." } dependencies = [ { name = "anyio" }, @@ -1063,8 +1063,8 @@ source = { registry = "https://pypi.org/simple" } resolution-markers = [ "python_full_version >= '3.14' and extra != 'group-11-orb-billing-pydantic-v1' and extra == 'group-11-orb-billing-pydantic-v2'", "python_full_version >= '3.10' and python_full_version < '3.14' and extra != 'group-11-orb-billing-pydantic-v1' and extra == 'group-11-orb-billing-pydantic-v2'", - "python_full_version < '3.10' and extra != 'group-11-orb-billing-pydantic-v1' and extra == 'group-11-orb-billing-pydantic-v2'", "python_full_version >= '3.10' and extra != 'group-11-orb-billing-pydantic-v1' and extra != 'group-11-orb-billing-pydantic-v2'", + "python_full_version < '3.10' and extra != 'group-11-orb-billing-pydantic-v1' and extra == 'group-11-orb-billing-pydantic-v2'", "python_full_version < '3.10' and extra != 'group-11-orb-billing-pydantic-v1' and extra != 'group-11-orb-billing-pydantic-v2'", ] dependencies = [