From 8f54e2fa065cddbcaf87ad947a51c24263c2b523 Mon Sep 17 00:00:00 2001 From: Marvin Lin <37755670+maaarvin-was-here@users.noreply.github.com> Date: Tue, 2 Jun 2026 17:05:40 -0400 Subject: [PATCH 01/15] Update documentation for modifying namespace retention period (#4641) Co-authored-by: Marvin Lin Co-authored-by: Brian MacDonald --- docs/cloud/get-started/namespaces.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/cloud/get-started/namespaces.mdx b/docs/cloud/get-started/namespaces.mdx index 319ceae6d2..6ef959ec92 100644 --- a/docs/cloud/get-started/namespaces.mdx +++ b/docs/cloud/get-started/namespaces.mdx @@ -215,8 +215,8 @@ To create a Namespace in Temporal Cloud, gather the following information: 1. In **Region**, select the region in which to host this Namespace. 1. In **Retention Period**, specify a value from 1 to 90 days. When choosing this value, consider your needs for Event History versus the cost of maintaining that Event History. Typically, a development Namespace has a short retention - period and a production Namespace has a longer retention period. (If you need to change this value later, contact - [Temporal Support](/cloud/support#support-ticket).) + period and a production Namespace has a longer retention period. The retention period of a namespace can be changed + in the Temporal Cloud UI under the namespace's Settings tab or by using the Temporal CLI. 1. Select your authentication method: [API keys](/cloud/api-keys) or [mTLS](/cloud/certificates). 1. If using mTLS authentication, paste the CA certificate for this Namespace. 1. Optional: In **Codec Server**, enter the HTTPS URL (including the port number) of your Codec Server endpoint. You may From a510ec5114fd8ac03ee2c41d6d3683d6547b96ce Mon Sep 17 00:00:00 2001 From: Luke Knepper Date: Tue, 2 Jun 2026 16:15:55 -0700 Subject: [PATCH 02/15] Quick fix for Connectivity Rule stable IPs docs (#4648) * Quick fix for Connectivity Rule stable IPs docs * Apply suggestion from @lennessyy --------- Co-authored-by: Lenny Chen <55669665+lennessyy@users.noreply.github.com> --- docs/cloud/connectivity/index.mdx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/cloud/connectivity/index.mdx b/docs/cloud/connectivity/index.mdx index 1f863ebbc1..e88c3b8521 100644 --- a/docs/cloud/connectivity/index.mdx +++ b/docs/cloud/connectivity/index.mdx @@ -85,7 +85,13 @@ A public Connectivity Rule has one optional parameter: - `enable-stable-ips`: When set, Namespaces attached to this rule resolve their Namespace endpoint to a published, fixed set of IP addresses you can allowlist in your firewall. See [Stable IPs](/cloud/connectivity/ip-addresses#stable-ip-addresses) for details. -Only one public Connectivity Rule is allowed per account (see [Permissions and limits](#permissions-and-limits) below). If you already have a public Connectivity Rule and want to turn on Stable IPs, update the existing rule rather than creating a new one — attempting to create a second public rule returns an error. +Only one public Connectivity Rule is allowed per account (see [Permissions and limits](#permissions-and-limits) below). + +:::caution + +Connectivity Rules cannot be updated in place. If you already have a public Connectivity Rule and want to turn on Stable IPs, you must delete the existing public rule, create a new one with `enable-stable-ips` set, and re-attach it to every Namespace that needs it. Attempting to create a second public rule alongside the existing one returns an error. + +::: An AWS PrivateLink (PL) private Connectivity Rule requires: From 20d445e08e2ddbe804634197688547a1f8ec352a Mon Sep 17 00:00:00 2001 From: Luke Knepper Date: Wed, 3 Jun 2026 10:02:13 -0700 Subject: [PATCH 03/15] Control Plane capitalization and connectivity (#4642) * Control Plane capitalization and connectivity * Fix capitalization --------- Co-authored-by: Jwahir Sundai --- docs/cloud/audit-logs.mdx | 2 +- docs/cloud/connectivity/index.mdx | 30 ++++++++++++------- .../high-availability/failovers/index.mdx | 2 +- docs/cloud/operation-api.mdx | 8 ++--- docs/cloud/terraform-provider.mdx | 2 +- docs/evaluate/temporal-cloud/overview.mdx | 4 +-- 6 files changed, 29 insertions(+), 19 deletions(-) diff --git a/docs/cloud/audit-logs.mdx b/docs/cloud/audit-logs.mdx index 75db528ba6..ad80996d7a 100644 --- a/docs/cloud/audit-logs.mdx +++ b/docs/cloud/audit-logs.mdx @@ -19,7 +19,7 @@ tags: - Temporal Cloud --- -Audit Logs is a feature of [Temporal Cloud](/cloud/overview) that provides forensic access information for a variety of operations in the Temporal Cloud control plane. +Audit Logs is a feature of [Temporal Cloud](/cloud/overview) that provides forensic access information for a variety of operations in the Temporal Cloud Control Plane. Audit Logs answers "who, when, and what" questions about Temporal Cloud resources. These answers can help you evaluate the security of your organization, and they can provide information that you need to satisfy audit and compliance requirements. diff --git a/docs/cloud/connectivity/index.mdx b/docs/cloud/connectivity/index.mdx index e88c3b8521..2744c921d1 100644 --- a/docs/cloud/connectivity/index.mdx +++ b/docs/cloud/connectivity/index.mdx @@ -353,7 +353,7 @@ nc -zv vpce-0123456789abcdef-abc.us-east-1.vpce.amazonaws.com 7233 ## Control plane connectivity -Using the Temporal Cloud [web UI](/web-ui), [Terraform provider](/cloud/terraform-provider), [`tcld` CLI](/cloud/tcld), or [Cloud Ops APIs](/ops) requires network access to the Temporal Cloud control plane. +Using the Temporal Cloud [web UI](/web-ui), [Terraform provider](/cloud/terraform-provider), [`tcld` CLI](/cloud/tcld), or [Cloud Ops APIs](/ops) requires network access to the Temporal Cloud Control Plane. ### Control plane hostnames @@ -363,25 +363,35 @@ Different hostnames are used for different parts of the service. - `web.onboarding.tmprl.cloud` (required for Web UI) - `web.saas-api.tmprl.cloud` (required for Web UI) -### AWS PrivateLink connectivity to Temporal Cloud control plane +### AWS PrivateLink connectivity to Temporal Cloud Control Plane -Temporal Cloud supports [AWS PrivateLink](https://aws.amazon.com/privatelink/) connections to the control plane, which allows access from applications running in VPCs that cannot egress to the public internet. Temporal Cloud does **not** support restricting an account so that private connectivity is the sole connectivity method to the control plane; the control plane is always accessible via public internet. +Temporal Cloud supports [AWS PrivateLink](https://aws.amazon.com/privatelink/) connections to the Control Plane, which allows access from applications running in VPCs that cannot egress to the public internet. Temporal Cloud does **not** support restricting an account so that private connectivity is the sole connectivity method to the Control Plane; the Control Plane is always accessible via public internet. -Control plane access is always securely authenticated via [API keys](/cloud/api-keys#overview) or JWT tokens, regardless of how you choose to connect. +Control Plane access is always securely authenticated via [API keys](/cloud/api-keys#overview) or JWT tokens, regardless of how you choose to connect. -To set up a PrivateLink connection to the Temporal Cloud control plane, follow [these instructions](/cloud/connectivity/aws-connectivity), but use the control plane endpoint information below: +To set up a PrivateLink connection to the Temporal Cloud Control Plane, follow [these instructions](/cloud/connectivity/aws-connectivity), but use the Control Plane endpoint information below: | Hostname | Region | Control Plane PrivateLink Service Name | | ---------------------- | ----------- | --------------------------------------------------------- | | `saas-api.tmprl.cloud` | `us-west-2` | `com.amazonaws.vpce.us-west-2.vpce-svc-0c57a5930b6f6be0e` | -The control plane PrivateLink endpoint includes a [private DNS name](https://docs.aws.amazon.com/vpc/latest/privatelink/manage-dns-names.html), which lets your clients use the PrivateLink connection without having to set up private DNS or having to override client configuration. To use the DNS name, make sure your VPC has the `Enable DNS hostnames` and `Enable DNS support` options enabled. If you cannot use the DNS name, you can also manually [set up private DNS](/cloud/connectivity/aws-connectivity#configuring-private-dns-for-aws-privatelink) or [override the server and TLS settings on your clients](/cloud/connectivity#update-dns-or-clients-to-use-private-connectivity). +The Control Plane PrivateLink endpoint includes a [private DNS name](https://docs.aws.amazon.com/vpc/latest/privatelink/manage-dns-names.html), which lets your clients use the PrivateLink connection without having to set up private DNS or having to override client configuration. To use the DNS name, make sure your VPC has the `Enable DNS hostnames` and `Enable DNS support` options enabled. If you cannot use the DNS name, you can also manually [set up private DNS](/cloud/connectivity/aws-connectivity#configuring-private-dns-for-aws-privatelink) or [override the server and TLS settings on your clients](/cloud/connectivity#update-dns-or-clients-to-use-private-connectivity). -:::caution Finish client setup +:::caution Finish client setup to programmatically access Temporal Cloud Control Plane over PrivateLink -After creating a private connection, you must use the provided DNS name, set up private DNS, or update the configuration of all clients you want to use the private connection. +For Temporal clients to access the Control Plane over AWS PrivateLink, you must either use the provided DNS name, set up private DNS, or update the client configuration, as described above. -Without this step, your clients may connect to the control plane over the internet if they were previously using public connectivity, or they will not be able to connect at all. +Without this step, your clients may connect to the Temporal Cloud Control Plane over the internet, or they may not connect at all. ::: -The control plane is also accessible via the PrivateLink endpoint in AWS us-west-2 that can be used for namespace traffic, but we strongly recommend using the control-plane specific endpoint for control plane traffic. +#### Extend the Control Plane PrivateLink endpoint to other AWS regions with VPC Peering + +The Temporal Cloud Control Plane PrivateLink Service is only exposed in `us-west-2`. To reach the Control Plane privately from another AWS region, set up a us-west-2 VPC with a VPC Endpoint to the Control Plane, then [VPC-Peer](https://docs.aws.amazon.com/vpc/latest/peering/what-is-vpc-peering.html) that VPC to your other-region VPCs. + +To set this up: + +1. Create a VPC in `us-west-2`. +2. Create the [VPC Endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/concepts.html) to the Control Plane in that us-west-2 VPC, using the service name from the table above. Follow the [standard PrivateLink setup steps](/cloud/connectivity/aws-connectivity), but use the Control Plane service name. +3. Peer the us-west-2 VPC to each VPC in another region that needs Control Plane access. [VPC Peering shares VPC Endpoints](https://docs.aws.amazon.com/vpc/latest/peering/peering-configurations-partial-access.html) across peered VPCs, which gives each peered VPC a private path to the Control Plane. + +Peering is per-VPC, so you must peer the us-west-2 VPC to every VPC that needs Control Plane access. There is no limit on how many regions you can extend to using this approach. diff --git a/docs/cloud/high-availability/failovers/index.mdx b/docs/cloud/high-availability/failovers/index.mdx index 5a5d816ba6..70d6f98cf4 100644 --- a/docs/cloud/high-availability/failovers/index.mdx +++ b/docs/cloud/high-availability/failovers/index.mdx @@ -70,7 +70,7 @@ exhaustive list, and it may change over time. ::: -- Whether Temporal Cloud's services in the cell are reachable from the control plane. +- Whether Temporal Cloud's services in the cell are reachable from the Control Plane. - The average latency of inbound RPC calls (excluding long-polling APIs) to Temporal services in the cell. - The percentage of inbound RPC calls that returned errors related to server health. - The average latency of calls from Temporal Cloud's services in the cell to its persistence layer. diff --git a/docs/cloud/operation-api.mdx b/docs/cloud/operation-api.mdx index 498f2a1606..1369fbe710 100644 --- a/docs/cloud/operation-api.mdx +++ b/docs/cloud/operation-api.mdx @@ -2,7 +2,7 @@ id: operation-api title: Cloud Ops API sidebar_label: Cloud Ops API -description: The Temporal Cloud Operations API (Cloud Ops) allows programmatic management of Temporal Cloud control plane resources. +description: The Temporal Cloud Operations API (Cloud Ops) allows programmatic management of Temporal Cloud Control Plane resources. slug: /ops toc_max_heading_level: 4 keywords: @@ -18,7 +18,7 @@ The Temporal Cloud Operations API is in [Public Preview](/evaluate/development-p ::: -The Temporal Cloud Operations API, or the Cloud Ops API, is an open source, public [HTTP API](https://saas-api.tmprl.cloud/docs/httpapi.html#description/introduction) and [gRPC API](https://github.com/temporalio/cloud-api/tree/main) for programmatically managing Temporal Cloud control plane resources, including [Namespaces](/cloud/namespaces), [Users](/cloud/users), [Service Accounts](/cloud/service-accounts), [API keys](/cloud/api-keys), and others. The Temporal Cloud [Terraform Provider](/cloud/terraform-provider), [tcld CLI](/cloud/tcld), and Web UI all use the Cloud Ops API. +The Temporal Cloud Operations API, or the Cloud Ops API, is an open source, public [HTTP API](https://saas-api.tmprl.cloud/docs/httpapi.html#description/introduction) and [gRPC API](https://github.com/temporalio/cloud-api/tree/main) for programmatically managing Temporal Cloud Control Plane resources, including [Namespaces](/cloud/namespaces), [Users](/cloud/users), [Service Accounts](/cloud/service-accounts), [API keys](/cloud/api-keys), and others. The Temporal Cloud [Terraform Provider](/cloud/terraform-provider), [tcld CLI](/cloud/tcld), and Web UI all use the Cloud Ops API. ## Develop applications with the Cloud Ops API @@ -151,7 +151,7 @@ The Temporal Cloud Operations API implements rate limiting to ensure system stab **Total rate limit: 160 requests per second (RPS)** -This limit applies to all requests made to the Temporal Cloud control plane by any client (tcld, UI, Cloud Ops API) or identity type (user, service account) within your account. The total account throughput cannot exceed the limit regardless of the number of users or service accounts making requests. +This limit applies to all requests made to the Temporal Cloud Control Plane by any client (tcld, UI, Cloud Ops API) or identity type (user, service account) within your account. The total account throughput cannot exceed the limit regardless of the number of users or service accounts making requests. ### Per-identity rate limits @@ -169,7 +169,7 @@ This limits the number of concurrent asynchronous operations that can be in-flig ### Important considerations -- Rate limits are enforced across all Temporal Cloud control plane operations +- Rate limits are enforced across all Temporal Cloud Control Plane operations - Multiple clients used by the same identity (user or service account) share the same rate limit - Authentication method (SSO, API keys) does not affect rate limiting - These limits help ensure system stability and prevent any single account or identity from overwhelming the service diff --git a/docs/cloud/terraform-provider.mdx b/docs/cloud/terraform-provider.mdx index 7833d2aa17..3a0b841e88 100644 --- a/docs/cloud/terraform-provider.mdx +++ b/docs/cloud/terraform-provider.mdx @@ -465,7 +465,7 @@ For example, to change the allowed caller Namespaces on a Nexus Endpoint: ``` Upon completion, you will see a success message indicating your Nexus Endpoint has been updated. It may take several - seconds to update a Nexus Endpoint in the control plane which is visible from the Temporal UI or tcld CLI. + seconds to update a Nexus Endpoint in the Control Plane which is visible from the Temporal UI or tcld CLI. Propagation of Nexus Endpoint changes to the data plane may take longer, but usually complete in less than one minute. diff --git a/docs/evaluate/temporal-cloud/overview.mdx b/docs/evaluate/temporal-cloud/overview.mdx index 626488b9b5..8e6cd3d8e9 100644 --- a/docs/evaluate/temporal-cloud/overview.mdx +++ b/docs/evaluate/temporal-cloud/overview.mdx @@ -27,7 +27,7 @@ The platform stores encrypted Workflow state and orchestrates execution, while y ## How Temporal Cloud works -Temporal Cloud operates as the control plane for your distributed applications: +Temporal Cloud operates as the Control Plane for your distributed applications: 1. **Your environment**: You run Workers that execute your Workflow and Activity code. These can be deployed anywhere—Kubernetes, VMs, serverless, on-premises. 2. **Temporal Cloud**: Manages Workflow state, Event History, task queuing, and scheduling. All data is encrypted in transit and at rest. @@ -58,7 +58,7 @@ This design limits blast radius and enables independent scaling. **Data plane**: Where your Workflows execute. Each cell processes Workflow operations, persists state, and manages task queues. The data plane is optimized for low latency and high throughput. -**Control plane**: Manages provisioning, configuration, and lifecycle operations. When you create a Namespace, the control plane: +**Control plane**: Manages provisioning, configuration, and lifecycle operations. When you create a Namespace, the Control Plane: 1. Selects an appropriate cell in your chosen region 2. Provisions database resources and roles 3. Generates and deploys mTLS certificates From 9ebe1989318f52dbf6ba566cf1ad37d4fd977c73 Mon Sep 17 00:00:00 2001 From: Lenny Chen <55669665+lennessyy@users.noreply.github.com> Date: Wed, 3 Jun 2026 11:26:38 -0700 Subject: [PATCH 04/15] ci: add CI check that requires redirects when docs pages are moved or deleted (#4647) * Add CI check that requires redirects when docs pages are moved or deleted Adds a GitHub Actions workflow that detects renamed or deleted pages in docs/ and verifies that vercel.json contains a matching redirect for each old URL path. Supports both exact and wildcard redirect patterns. Co-Authored-By: Claude Opus 4.6 (1M context) * Use frontmatter slug to resolve old URL paths The naive file-path-to-URL conversion doesn't account for Docusaurus slug overrides in frontmatter. 126 pages in this repo have slugs that differ from their file paths. The script now reads the old file content from the merge base commit to extract the slug when present. Co-Authored-By: Claude Opus 4.6 (1M context) * Handle relative Docusaurus slugs in redirect check All current slugs in the repo are absolute, but this guards against future relative slugs by resolving them against the doc's directory path. Co-Authored-By: Claude Opus 4.6 (1M context) * Account for Docusaurus id field when computing page URLs 17 pages in the repo have an id that changes their URL and no slug override. The script now checks slug first, then id (which replaces the filename segment), and falls back to the file path. Co-Authored-By: Claude Opus 4.6 (1M context) * Remove paths filter so redirect check runs on every PR With the paths filter, the check never appears on PRs that don't touch docs/, which prevents it from being used as a required status check in branch protection. The script already exits cleanly when no docs pages are moved. Co-Authored-By: Claude Opus 4.6 (1M context) * test: rename terraform-provider page without redirect (expect CI failure) Co-Authored-By: Claude Opus 4.6 (1M context) * test: add redirect for renamed page (expect CI success) Co-Authored-By: Claude Opus 4.6 (1M context) * test: revert rename and redirect (test complete) Co-Authored-By: Claude Opus 4.6 (1M context) * Add tests for redirect check URL resolution Tests cover the four URL construction methods: file path only, absolute slug override, id replacing filename, and index pages. Also tests pattern matching and redirect lookup against the real vercel.json. Co-Authored-By: Claude Opus 4.6 (1M context) --------- Co-authored-by: Claude Opus 4.6 (1M context) --- .github/workflows/check-redirects.yml | 30 ++++ bin/check-redirects-for-moved-pages.js | 184 ++++++++++++++++++++ bin/check-redirects-for-moved-pages.test.js | 120 +++++++++++++ 3 files changed, 334 insertions(+) create mode 100644 .github/workflows/check-redirects.yml create mode 100755 bin/check-redirects-for-moved-pages.js create mode 100644 bin/check-redirects-for-moved-pages.test.js diff --git a/.github/workflows/check-redirects.yml b/.github/workflows/check-redirects.yml new file mode 100644 index 0000000000..499c6fed0b --- /dev/null +++ b/.github/workflows/check-redirects.yml @@ -0,0 +1,30 @@ +name: Check Redirects for Moved Pages + +on: + pull_request: + types: + - opened + - synchronize + - reopened + +permissions: + contents: read + +jobs: + check-redirects: + runs-on: ubuntu-latest + steps: + - name: Check out repository + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + fetch-depth: 0 + + - name: Set up Node.js + uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0 + with: + node-version: '20' + + - name: Check for missing redirects + env: + BASE_SHA: ${{ github.event.pull_request.base.sha }} + run: node bin/check-redirects-for-moved-pages.js diff --git a/bin/check-redirects-for-moved-pages.js b/bin/check-redirects-for-moved-pages.js new file mode 100755 index 0000000000..4bcbcba424 --- /dev/null +++ b/bin/check-redirects-for-moved-pages.js @@ -0,0 +1,184 @@ +#!/usr/bin/env node + +const { execSync } = require('child_process'); +const fs = require('fs'); +const path = require('path'); + +const VERCEL_JSON = path.join(process.cwd(), 'vercel.json'); + +function filePathToUrlPath(filePath) { + let urlPath = filePath + .replace(/^docs\//, '/') + .replace(/\.mdx?$/, '') + .replace(/\/index$/, ''); + + if (urlPath === '') urlPath = '/'; + return urlPath; +} + +function extractFrontMatter(content) { + const match = content.match(/^---\n([\s\S]*?)\n---/); + if (!match) return {}; + const block = match[1]; + const result = {}; + for (const field of ['slug', 'id']) { + const m = block.match(new RegExp(`^${field}:\\s*(.+)$`, 'm')); + if (m) result[field] = m[1].trim(); + } + return result; +} + +function getFileContentAtRef(filePath, ref) { + try { + return execSync(`git show ${ref}:${filePath}`, { encoding: 'utf8' }); + } catch { + return null; + } +} + +function resolveOldUrl(filePath, ref) { + const content = getFileContentAtRef(filePath, ref); + if (content) { + const fm = extractFrontMatter(content); + + // slug takes highest precedence + if (fm.slug) { + if (fm.slug.startsWith('/')) return fm.slug; + const dirUrl = filePathToUrlPath(filePath).replace(/\/[^/]*$/, ''); + return `${dirUrl}/${fm.slug}`; + } + + // id replaces the filename segment in the URL + if (fm.id) { + const dirUrl = filePathToUrlPath(filePath).replace(/\/[^/]*$/, ''); + return `${dirUrl}/${fm.id}`; + } + } + return filePathToUrlPath(filePath); +} + +function getMovedOrDeletedDocFiles(baseSha) { + const mergeBase = execSync(`git merge-base HEAD ${baseSha}`, { + encoding: 'utf8', + }).trim(); + + // -M enables rename detection, --diff-filter=DR shows only deletes and renames + const output = execSync( + `git diff --name-status -M --diff-filter=DR ${mergeBase}..HEAD -- docs/`, + { encoding: 'utf8' }, + ); + + const results = []; + for (const line of output.split('\n').filter((l) => l.trim())) { + const parts = line.split('\t'); + const status = parts[0]; + + if (status === 'D') { + results.push({ type: 'deleted', oldPath: parts[1] }); + } else if (status.startsWith('R')) { + results.push({ type: 'renamed', oldPath: parts[1], newPath: parts[2] }); + } + } + + const files = results.filter((r) => /\.(mdx|md)$/.test(r.oldPath)); + return { files, mergeBase }; +} + +function vercelPatternToRegex(pattern) { + // Convert Vercel redirect patterns like /foo/:path* to a regex. + // Replace named params before escaping so the colons and wildcards are + // consumed first, then escape whatever literal characters remain. + const tokens = []; + const tokenized = pattern + .replace(/:([a-zA-Z]+)\*/g, () => { + tokens.push('.+'); + return `__TOKEN_${tokens.length - 1}__`; + }) + .replace(/:([a-zA-Z]+)/g, () => { + tokens.push('[^/]+'); + return `__TOKEN_${tokens.length - 1}__`; + }); + + let regexStr = tokenized.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + for (let i = 0; i < tokens.length; i++) { + regexStr = regexStr.replace(`__TOKEN_${i}__`, tokens[i]); + } + return new RegExp(`^${regexStr}$`); +} + +function loadRedirects() { + const config = JSON.parse(fs.readFileSync(VERCEL_JSON, 'utf8')); + return (config.redirects || []).map((r) => ({ + source: r.source, + regex: vercelPatternToRegex(r.source), + })); +} + +function findMatchingRedirect(urlPath, redirects) { + return redirects.find((r) => r.regex.test(urlPath)); +} + +function main() { + const BASE_SHA = process.env.BASE_SHA; + if (!BASE_SHA) { + console.error('BASE_SHA environment variable is required.'); + process.exit(1); + } + + const { files: movedFiles, mergeBase } = getMovedOrDeletedDocFiles(BASE_SHA); + + if (movedFiles.length === 0) { + console.log('No docs pages were moved or deleted. Nothing to check.'); + process.exit(0); + } + + const redirects = loadRedirects(); + const missing = []; + + for (const file of movedFiles) { + const oldUrl = resolveOldUrl(file.oldPath, mergeBase); + const match = findMatchingRedirect(oldUrl, redirects); + + if (!match) { + file.oldUrl = oldUrl; + missing.push(file); + } + } + + if (missing.length === 0) { + console.log( + `All ${movedFiles.length} moved/deleted page(s) have redirects.`, + ); + process.exit(0); + } + + console.error('Missing redirects for moved/deleted pages:\n'); + for (const file of missing) { + if (file.type === 'renamed') { + const newUrl = resolveOldUrl(file.newPath, 'HEAD'); + console.error( + ` ${file.oldUrl} -> ${newUrl} (renamed, no redirect found)`, + ); + } else { + console.error(` ${file.oldUrl} (deleted, no redirect found)`); + } + } + + console.error( + `\nAdd redirect entries to vercel.json for the ${missing.length} path(s) above.`, + ); + process.exit(1); +} + +module.exports = { + filePathToUrlPath, + extractFrontMatter, + resolveOldUrl, + vercelPatternToRegex, + findMatchingRedirect, + loadRedirects, +}; + +if (require.main === module) { + main(); +} diff --git a/bin/check-redirects-for-moved-pages.test.js b/bin/check-redirects-for-moved-pages.test.js new file mode 100644 index 0000000000..9d05917c9c --- /dev/null +++ b/bin/check-redirects-for-moved-pages.test.js @@ -0,0 +1,120 @@ +const { describe, it } = require('node:test'); +const assert = require('node:assert'); +const fs = require('fs'); +const { + filePathToUrlPath, + extractFrontMatter, + resolveOldUrl, + vercelPatternToRegex, + findMatchingRedirect, + loadRedirects, +} = require('./check-redirects-for-moved-pages.js'); + +describe('filePathToUrlPath', () => { + it('strips docs/ prefix and extension', () => { + assert.strictEqual( + filePathToUrlPath('docs/cloud/terraform-provider.mdx'), + '/cloud/terraform-provider', + ); + }); + + it('handles .md extension', () => { + assert.strictEqual(filePathToUrlPath('docs/glossary.md'), '/glossary'); + }); + + it('strips /index from directory pages', () => { + assert.strictEqual(filePathToUrlPath('docs/cloud/index.mdx'), '/cloud'); + }); + + it('handles deeply nested paths', () => { + assert.strictEqual( + filePathToUrlPath('docs/develop/go/best-practices/data-handling/data-conversion.mdx'), + '/develop/go/best-practices/data-handling/data-conversion', + ); + }); +}); + +describe('extractFrontMatter', () => { + it('extracts slug', () => { + const content = '---\nid: foo\nslug: /custom/path\n---\nBody text'; + assert.deepStrictEqual(extractFrontMatter(content), { + id: 'foo', + slug: '/custom/path', + }); + }); + + it('returns empty object when no frontmatter', () => { + assert.deepStrictEqual(extractFrontMatter('Just body text'), {}); + }); + + it('handles frontmatter with only id', () => { + const content = '---\nid: my-page\ntitle: My Page\n---\n'; + assert.deepStrictEqual(extractFrontMatter(content), { id: 'my-page' }); + }); +}); + +describe('resolveOldUrl against real repo pages', () => { + it('file path only (no slug, no id)', () => { + const url = resolveOldUrl('docs/cloud/terraform-provider.mdx', 'HEAD'); + assert.strictEqual(url, '/cloud/terraform-provider'); + }); + + it('absolute slug override', () => { + const url = resolveOldUrl( + 'docs/develop/go/best-practices/data-handling/data-conversion.mdx', + 'HEAD', + ); + assert.strictEqual(url, '/develop/go/data-handling/data-conversion'); + }); + + it('id replacing filename', () => { + const url = resolveOldUrl('docs/develop/go/set-up.mdx', 'HEAD'); + assert.strictEqual(url, '/develop/go/set-up-your-local-go'); + }); + + it('index page', () => { + const url = resolveOldUrl('docs/cloud/index.mdx', 'HEAD'); + assert.strictEqual(url, '/cloud'); + }); +}); + +describe('vercelPatternToRegex', () => { + it('matches wildcard patterns', () => { + const regex = vercelPatternToRegex('/production-deployment/cloud/:path*'); + assert.ok(regex.test('/production-deployment/cloud/terraform-provider')); + assert.ok(regex.test('/production-deployment/cloud/foo/bar')); + assert.ok(!regex.test('/cloud/terraform-provider')); + }); + + it('matches single-segment params', () => { + const regex = vercelPatternToRegex('/dev-guide/:slug'); + assert.ok(regex.test('/dev-guide/hello')); + assert.ok(!regex.test('/dev-guide/hello/world')); + }); + + it('matches exact paths', () => { + const regex = vercelPatternToRegex('/cloud/billing-reports'); + assert.ok(regex.test('/cloud/billing-reports')); + assert.ok(!regex.test('/cloud/billing-reports/extra')); + }); +}); + +describe('findMatchingRedirect', () => { + it('finds a match from real vercel.json redirects', () => { + const redirects = loadRedirects(); + const match = findMatchingRedirect( + '/production-deployment/cloud/terraform-provider', + redirects, + ); + assert.ok(match, 'expected wildcard redirect to match'); + }); + + it('returns undefined for paths with no redirect', () => { + const redirects = loadRedirects(); + const match = findMatchingRedirect( + '/this/path/does/not/exist', + redirects, + ); + assert.strictEqual(match, undefined); + }); +}); From c32ba20906225899832516d2bd4dd7410213ee4e Mon Sep 17 00:00:00 2001 From: Kevin Woo <3469532+kevinawoo@users.noreply.github.com> Date: Wed, 3 Jun 2026 12:07:50 -0700 Subject: [PATCH 05/15] Document service account namespace permission behavior (#4649) Co-authored-by: Jwahir Sundai --- docs/cloud/get-started/service-accounts.mdx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/docs/cloud/get-started/service-accounts.mdx b/docs/cloud/get-started/service-accounts.mdx index 11edf92ff3..5154078383 100644 --- a/docs/cloud/get-started/service-accounts.mdx +++ b/docs/cloud/get-started/service-accounts.mdx @@ -159,7 +159,15 @@ The Service Account is deleted when it is no longer visible in the output of the ### Update a Service Account {/* #update */} -Update a Service Account's description using the Temporal Cloud UI or tcld. +Update a Service Account using the Temporal Cloud UI or tcld. + +:::note Account roles and Namespace Permissions + +Service Accounts with the Account Owner or Global Admin account-level role automatically have Namespace Admin access to +all Namespaces. Do not add explicit Namespace Permissions while using either role. To move a Service Account from Global +Admin to a lower-privilege account role, update the Account Level Role and desired Namespace Permissions together. + +::: From 5567f397d0e37de9a0a65d37ac64e2bd247f173a Mon Sep 17 00:00:00 2001 From: Milecia McG <47196133+flippedcoder@users.noreply.github.com> Date: Wed, 3 Jun 2026 14:15:23 -0500 Subject: [PATCH 06/15] chore(encyclopedia): removed outdated section with old repo link (#4650) --- docs/encyclopedia/data-conversion/key-management.mdx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/docs/encyclopedia/data-conversion/key-management.mdx b/docs/encyclopedia/data-conversion/key-management.mdx index e1c0505495..0ebbf81b1c 100644 --- a/docs/encyclopedia/data-conversion/key-management.mdx +++ b/docs/encyclopedia/data-conversion/key-management.mdx @@ -45,7 +45,3 @@ It is recommended that operators estimate the encryption rate of a key and use t Key rotation should generally be transparent to the Temporal Data Converter implementation. Temporal's `Encode()` and `Decode()` steps only need to trigger as expected, and Temporal has no knowledge of how or when you are generating your encryption keys. You should design your Encode and Decode steps to accept all the necessary parameters for your key management, such as the key version, alongside your payloads. Like the Data Converters, keys should be mapped to a Namespace in Temporal. - -### Using Vault for Key Management - -[This repository](https://github.com/zboralski/codecserver) provides a robust and complete example of using Temporal with HashiCorp's [Vault](https://www.vaultproject.io/) secrets engine. From a3b8f3f8539eabdb40d1b922d6c24087948f9453 Mon Sep 17 00:00:00 2001 From: Duncan Mackenzie Date: Wed, 3 Jun 2026 14:57:06 -0700 Subject: [PATCH 07/15] Just some link updates as per https://temporalio.atlassian.net/browse/EDU-6467 (#4652) --- docusaurus.config.js | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/docusaurus.config.js b/docusaurus.config.js index 9f742ea3bd..e4d42d1bb5 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -136,7 +136,7 @@ module.exports = async function createConfigAsync() { }, { label: 'Twitter', - href: 'https://twitter.com/temporalio', + href: 'https://x.com/temporalio', }, { label: 'YouTube', @@ -144,7 +144,7 @@ module.exports = async function createConfigAsync() { }, { label: 'About the docs', - href: 'https://github.com/temporalio/documentation/blob/master/README.md', + href: 'https://github.com/temporalio/documentation/blob/main/README.md', }, ], }, @@ -158,10 +158,6 @@ module.exports = async function createConfigAsync() { label: 'Meetups', href: 'https://temporal.io/community#events', }, - { - label: 'Workshops', - href: 'https://temporal.io/community#workshops', - }, { label: 'Support forum', href: 'https://community.temporal.io/', @@ -184,7 +180,7 @@ module.exports = async function createConfigAsync() { }, { label: 'Use cases', - href: 'https://temporal.io/use-cases', + href: 'https://temporal.io/in-use', }, { label: 'Newsletter signup', @@ -200,11 +196,11 @@ module.exports = async function createConfigAsync() { }, { label: 'Privacy policy', - to: 'https://temporal.io/global-privacy-policy', + href: 'https://temporal.io/global-privacy-policy', }, { label: 'Terms of service', - href: 'https://docs.temporal.io/pdf/temporal-tos-2021-07-24.pdf', + href: 'https://temporal.io/terms-of-service', }, { label: "We're hiring", From 030256fa9e0e3720eabff7e8ba30476dd3ea2ce1 Mon Sep 17 00:00:00 2001 From: Andrew Yuan Date: Thu, 4 Jun 2026 09:03:09 -0700 Subject: [PATCH 08/15] Update a bunch of links from `master` branch to `main` (#4651) * master to main * remove whitespace changes * Update link to helloworld temporal sample repository It would have worked, it's a redirect *again*, but just avoiding the extra hop * Update links to Core SDK metrics in documentation --------- Co-authored-by: Duncan Mackenzie Co-authored-by: Jwahir Sundai --- CONTACT.md | 2 +- CONTRIBUTING.md | 2 +- docs/cloud/export.mdx | 8 ++++---- docs/cloud/worker-health.mdx | 2 +- docs/develop/go/best-practices/multithreading.mdx | 2 +- docs/develop/go/client/temporal-client.mdx | 2 +- docs/develop/go/workers/sessions.mdx | 2 +- docs/encyclopedia/nexus/nexus-registry.mdx | 2 +- docs/encyclopedia/temporal-service/temporal-server.mdx | 2 +- .../temporal-service/temporal-service-configuration.mdx | 2 +- docs/encyclopedia/workflow/workflow-execution/event.mdx | 2 +- .../workflow/workflow-execution/workflow-execution.mdx | 2 +- .../workflow/workflow-execution/workflowid-runid.mdx | 4 ++-- docs/production-deployment/self-hosted-guide/archival.mdx | 2 +- docs/references/configuration.mdx | 2 +- docs/references/sdk-metrics.mdx | 4 ++-- 16 files changed, 21 insertions(+), 21 deletions(-) diff --git a/CONTACT.md b/CONTACT.md index a560e3bbac..a66d8e4134 100644 --- a/CONTACT.md +++ b/CONTACT.md @@ -22,7 +22,7 @@ We’re always happy to help and look forward to hearing from you! We believe strongly in Open Source and encourage contributions to our documentation. If you’d like to contribute or help us improve, these links may help: -- **About the docs**: Learn more about the documentation structure and how we maintain it by visiting the [documentation overview](https://github.com/temporalio/documentation/blob/master/README.md). +- **About the docs**: Learn more about the documentation structure and how we maintain it by visiting the [documentation overview](https://github.com/temporalio/documentation/blob/main/README.md). - **Contributing**: Check out our [Contributing Guidelines](https://github.com/temporalio/documentation/blob/main/CONTRIBUTING.md) for how to get started with contributing to the Temporal documentation or codebase. - **We’re Hiring**: Interested in joining the Temporal team? We’re always looking for passionate individuals. Explore open positions at [Temporal Careers](https://temporal.io/careers). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a76523ed18..bc489b3ad9 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -75,7 +75,7 @@ For small changes like fixing typos, you can edit files directly on GitHub. Once approved, your change goes live! 🎉 -Maintainers and contributors to this project are expected to conduct themselves in a respectful way. See the [CNCF Community Code of Conduct](https://github.com/cncf/foundation/blob/master/code-of-conduct.md) as a reference. +Maintainers and contributors to this project are expected to conduct themselves in a respectful way. See the [CNCF Community Code of Conduct](https://github.com/cncf/foundation/blob/main/code-of-conduct.md) as a reference. This repository and its contents are open-source; individual and commercial use are permitted. diff --git a/docs/cloud/export.mdx b/docs/cloud/export.mdx index c17255c5a1..cd072d5453 100644 --- a/docs/cloud/export.mdx +++ b/docs/cloud/export.mdx @@ -19,7 +19,7 @@ tags: Workflow History Export allows users to export closed Workflow Histories from Temporal Cloud to cloud object storage (AWS S3 or GCP GCS), enabling: -- Compliance and audit trails of complete Event History data in [proto format](https://github.com/temporalio/api/blob/master/temporal/api/export/v1/message.proto) +- Compliance and audit trails of complete Event History data in [proto format](https://github.com/temporalio/api/blob/main/temporal/api/export/v1/message.proto) - Analytics on Event History when ingested to the data platform of your choice Workflow History Export in Temporal Cloud provides similar functionality as [Archival](/self-hosted-guide/archival) in a Self-Hosted Temporal Server. @@ -31,7 +31,7 @@ Delivery is guaranteed at least once. ## What's in the exported data {/* #exported-data */} -Each exported file contains one or more complete Workflow Execution histories serialized as protocol buffers using the [`WorkflowExecutions`](https://github.com/temporalio/api/blob/master/temporal/api/export/v1/message.proto) proto. +Each exported file contains one or more complete Workflow Execution histories serialized as protocol buffers using the [`WorkflowExecutions`](https://github.com/temporalio/api/blob/main/temporal/api/export/v1/message.proto) proto. Each history is an ordered sequence of events that records everything that happened during a Workflow Execution: @@ -45,7 +45,7 @@ Each history is an ordered sequence of events that records everything that happe Search attributes in the export use your **user-defined names** (for example, `customerId`), not internal column names. The export format is **protobuf binary**. -You must deserialize using the [proto schema](https://github.com/temporalio/api/blob/master/temporal/api/export/v1/message.proto) before the data is human-readable. +You must deserialize using the [proto schema](https://github.com/temporalio/api/blob/main/temporal/api/export/v1/message.proto) before the data is human-readable. The following is a simplified JSON representation of what one Workflow Execution looks like after deserialization. This example shows a Workflow that started, ran one Activity, and completed: @@ -184,7 +184,7 @@ is the time the export uploads to object storage, not the Workflow completion ti ## Working with exported files -Use the proto schema defined [here](https://github.com/temporalio/api/blob/master/temporal/api/export/v1/message.proto) to deserialize exported files. +Use the proto schema defined [here](https://github.com/temporalio/api/blob/main/temporal/api/export/v1/message.proto) to deserialize exported files. ### Using exported files in analytics diff --git a/docs/cloud/worker-health.mdx b/docs/cloud/worker-health.mdx index 116a759d5b..22fe1873eb 100644 --- a/docs/cloud/worker-health.mdx +++ b/docs/cloud/worker-health.mdx @@ -384,7 +384,7 @@ This feature is currently in [Public Preview](/evaluate/development-production-f ::: Workers send a heartbeat to Temporal Server every 60 seconds by default. This heartbeat serves to provide liveness and configuration data from the Worker to the Server. -Specific data sent can be found in the [API](https://github.com/temporalio/api/blob/master/temporal/api/worker/v1/message.proto). By providing a consistent heartbeat from +Specific data sent can be found in the [API](https://github.com/temporalio/api/blob/main/temporal/api/worker/v1/message.proto). By providing a consistent heartbeat from Workers, the Server can obtain an accurate count of Workers, understand Worker performance, and respond to Worker heartbeats with commands. Some examples of how this is useful: - understanding the difference between a Worker that is down and a Worker that is processing tasks for a long time diff --git a/docs/develop/go/best-practices/multithreading.mdx b/docs/develop/go/best-practices/multithreading.mdx index 1992ff0d39..3bcacd7048 100644 --- a/docs/develop/go/best-practices/multithreading.mdx +++ b/docs/develop/go/best-practices/multithreading.mdx @@ -48,4 +48,4 @@ For an example using Signals, refer to the [Go Await Signal Sample](https://gith ## Static analysis with the workflowcheck tool -The Temporal Go SDK also provides a command line tool called [`workflowcheck`](https://github.com/temporalio/sdk-go/blob/master/contrib/tools/workflowcheck/README.md) to statically analyze Workflow Definitions. This can help eliminate potential instances of non-determinism. +The Temporal Go SDK also provides a command line tool called [`workflowcheck`](https://github.com/temporalio/sdk-go/blob/main/contrib/tools/workflowcheck/README.md) to statically analyze Workflow Definitions. This can help eliminate potential instances of non-determinism. diff --git a/docs/develop/go/client/temporal-client.mdx b/docs/develop/go/client/temporal-client.mdx index 14289598e4..f481c06804 100644 --- a/docs/develop/go/client/temporal-client.mdx +++ b/docs/develop/go/client/temporal-client.mdx @@ -881,7 +881,7 @@ if err != nil { } ``` -[Sample](https://github.com/temporalio/samples-go/tree/master/cron) +[Sample](https://github.com/temporalio/samples-go/tree/main/cron) #### Memo diff --git a/docs/develop/go/workers/sessions.mdx b/docs/develop/go/workers/sessions.mdx index 6363e5746c..407a4bb638 100644 --- a/docs/develop/go/workers/sessions.mdx +++ b/docs/develop/go/workers/sessions.mdx @@ -190,7 +190,7 @@ token := workflow.GetSessionInfo(sessionCtx).GetRecreateToken() **Is there a complete example?** -Yes, the [file processing example](https://github.com/temporalio/samples-go/tree/master/fileprocessing) in the [temporalio/samples-go](https://github.com/temporalio/samples-go) repo has been updated to use the session framework. +Yes, the [file processing example](https://github.com/temporalio/samples-go/tree/main/fileprocessing) in the [temporalio/samples-go](https://github.com/temporalio/samples-go) repo has been updated to use the session framework. **What happens to my Activity if the Worker dies?** diff --git a/docs/encyclopedia/nexus/nexus-registry.mdx b/docs/encyclopedia/nexus/nexus-registry.mdx index b5b6049df8..1dd0ca2929 100644 --- a/docs/encyclopedia/nexus/nexus-registry.mdx +++ b/docs/encyclopedia/nexus/nexus-registry.mdx @@ -126,6 +126,6 @@ There are two ways to automate endpoint provisioning and lifecycle management: T - [Terraform support](/cloud/terraform-provider#manage-temporal-cloud-nexus-endpoints-with-terraform) for Temporal Cloud. - [Cloud Ops API](/ops) for Temporal Cloud. -- [Operator API](https://github.com/temporalio/api/blob/master/temporal/api/operatorservice/v1/service.proto) for self-hosted deployments. +- [Operator API](https://github.com/temporalio/api/blob/main/temporal/api/operatorservice/v1/service.proto) for self-hosted deployments. ::: diff --git a/docs/encyclopedia/temporal-service/temporal-server.mdx b/docs/encyclopedia/temporal-service/temporal-server.mdx index cb21a01952..c21702791a 100644 --- a/docs/encyclopedia/temporal-service/temporal-server.mdx +++ b/docs/encyclopedia/temporal-service/temporal-server.mdx @@ -78,7 +78,7 @@ Temporal offers official support for, and is tested against, dependencies with t ## What is a Frontend Service? {/* #frontend-service */} -The Frontend Service is a stateless gateway service that exposes a strongly typed [Proto API](https://github.com/temporalio/api/blob/master/temporal/api/workflowservice/v1/service.proto). +The Frontend Service is a stateless gateway service that exposes a strongly typed [Proto API](https://github.com/temporalio/api/blob/main/temporal/api/workflowservice/v1/service.proto). The Frontend Service is responsible for rate limiting, authorizing, validating, and routing all inbound calls. -Commands are described in the [Command reference](/references/commands) and are defined in the [Temporal gRPC API](https://github.com/temporalio/api/blob/master/temporal/api/command/v1/message.proto). +Commands are described in the [Command reference](/references/commands) and are defined in the [Temporal gRPC API](https://github.com/temporalio/api/blob/main/temporal/api/command/v1/message.proto). ### Status {/* #workflow-execution-status */} diff --git a/docs/encyclopedia/workflow/workflow-execution/workflowid-runid.mdx b/docs/encyclopedia/workflow/workflow-execution/workflowid-runid.mdx index 7183454792..23bf90699e 100644 --- a/docs/encyclopedia/workflow/workflow-execution/workflowid-runid.mdx +++ b/docs/encyclopedia/workflow/workflow-execution/workflowid-runid.mdx @@ -42,7 +42,7 @@ A Run Id uniquely identifies a Workflow Execution even if it shares a Workflow I ### Which operations lead to non-determinism issues? {/* #run-id-non-determinism */} -An operation like `ContinueAsNew`, `Retry`, `Cron`, and `Reset` creates a [Workflow Execution Chain](/workflow-execution#workflow-execution-chain) as identified by the [`first_execution_run_id`](https://github.com/temporalio/api/blob/master/temporal/api/history/v1/message.proto). +An operation like `ContinueAsNew`, `Retry`, `Cron`, and `Reset` creates a [Workflow Execution Chain](/workflow-execution#workflow-execution-chain) as identified by the [`first_execution_run_id`](https://github.com/temporalio/api/blob/main/temporal/api/history/v1/message.proto). Each operation creates a new Workflow Execution inside a chain run and saves its information as `first_execution_run_id`. Thus, the Run Id is updated during each operation on a Workflow Execution. @@ -64,7 +64,7 @@ Because of this behavior, you shouldn't rely on the current Run Id in your code For more information, see the following link. -- [`message.proto`](https://github.com/temporalio/api/blob/master/temporal/api/history/v1/message.proto#L75-L82) +- [`message.proto`](https://github.com/temporalio/api/blob/main/temporal/api/history/v1/message.proto#L75-L82) ## What is a Workflow Id? {/* #workflow-id */} diff --git a/docs/production-deployment/self-hosted-guide/archival.mdx b/docs/production-deployment/self-hosted-guide/archival.mdx index 85a18a0812..73b93f4449 100644 --- a/docs/production-deployment/self-hosted-guide/archival.mdx +++ b/docs/production-deployment/self-hosted-guide/archival.mdx @@ -178,7 +178,7 @@ Setting the retention period to 0 results in the error _A valid retention period ::: Next, run a sample Workflow such as the -[helloworld temporal sample](https://github.com/temporalio/temporal-go-samples/tree/master/helloworld). +[helloworld temporal sample](https://github.com/temporalio/samples-go/tree/main/helloworld). When the Workflow Execution closes, Temporal schedules archival processing. diff --git a/docs/references/configuration.mdx b/docs/references/configuration.mdx index 4614a891d8..db8ad2228a 100644 --- a/docs/references/configuration.mdx +++ b/docs/references/configuration.mdx @@ -133,7 +133,7 @@ The `server` contains the following parameters: :::tip -See the [server samples repo](https://github.com/temporalio/samples-server/tree/master/tls) for sample TLS configurations. +See the [server samples repo](https://github.com/temporalio/samples-server/tree/main/tls) for sample TLS configurations. ::: diff --git a/docs/references/sdk-metrics.mdx b/docs/references/sdk-metrics.mdx index 6288bddb28..906ca34d79 100644 --- a/docs/references/sdk-metrics.mdx +++ b/docs/references/sdk-metrics.mdx @@ -46,8 +46,8 @@ PHP and Go metrics are defined in the Go SDK. Java metrics are defined in the Java SDK. Metrics are defined in the following locations. -- [Core SDK Worker metrics](https://github.com/temporalio/sdk-core/blob/master/crates/sdk-core/src/telemetry/metrics.rs) -- [Core SDK Client metrics](https://github.com/temporalio/sdk-core/blob/master/crates/client/src/metrics.rs) +- [Core SDK Worker metrics](https://github.com/temporalio/sdk-rust/blob/main/crates/sdk-core/src/telemetry/metrics.rs) +- [Core SDK Client metrics](https://github.com/temporalio/sdk-rust/blob/main/crates/client/src/metrics.rs) - [Java SDK Worker metrics](https://github.com/temporalio/sdk-java/blob/master/temporal-sdk/src/main/java/io/temporal/worker/MetricsType.java) - [Java SDK Client metrics](https://github.com/temporalio/sdk-java/blob/master/temporal-serviceclient/src/main/java/io/temporal/serviceclient/MetricsType.java) - [Go SDK Worker and Client metrics](https://github.com/temporalio/sdk-go/blob/c32b04729cc7691f80c16f80eed7f323ee5ce24f/internal/common/metrics/constants.go) From 500d8358980a71cae8244160b45039dbdb6778bd Mon Sep 17 00:00:00 2001 From: Lenny Chen <55669665+lennessyy@users.noreply.github.com> Date: Thu, 4 Jun 2026 10:06:37 -0700 Subject: [PATCH 09/15] Update Go version in CLI docs workflow to 1.26 (#4656) The CLI repo now requires Go >= 1.26.3, causing the workflow to fail with "go.mod requires go >= 1.26.3 (running go 1.22.12)". Co-authored-by: Claude Opus 4.6 (1M context) --- .github/workflows/update-cli-docs.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/update-cli-docs.yml b/.github/workflows/update-cli-docs.yml index 7ba742c759..3117c97ce2 100644 --- a/.github/workflows/update-cli-docs.yml +++ b/.github/workflows/update-cli-docs.yml @@ -56,7 +56,7 @@ jobs: - name: Setup Go uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0 with: - go-version: '1.22' + go-version: '1.26' - name: Generate CLI docs working-directory: cli From 0a891864cad20dc780ef7913d099148672a3b6a4 Mon Sep 17 00:00:00 2001 From: alice-yin Date: Fri, 5 Jun 2026 09:32:13 -0700 Subject: [PATCH 10/15] Remove export metrics mention from monitor section (#4661) Co-authored-by: Claude Opus 4.8 (1M context) --- docs/cloud/export.mdx | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/docs/cloud/export.mdx b/docs/cloud/export.mdx index cd072d5453..eb8d403bec 100644 --- a/docs/cloud/export.mdx +++ b/docs/cloud/export.mdx @@ -176,10 +176,7 @@ is the time the export uploads to object storage, not the Workflow completion ti - Usage Dashboard: - Actions from the Export Job are included in the [Usage Dashboard](/cloud/actions-usage). -3. **Metrics**: - - Export-related metrics are available from the [Cloud metrics endpoint](/cloud/metrics/), specifically the metric `temporal_cloud_v1_total_action_count` with the label `is_background="true"`. - -4. **Email**: +3. **Email**: - Emails are sent to `Namespace Administrator`, `Account Owner`, and `Global Administrator` roles when a Workflow History Export job fails due to a user related error (such as Object Store permissions issue). ## Working with exported files From 23f0a4b05a77f84f40d56569ddb4b8e81546996e Mon Sep 17 00:00:00 2001 From: Lenny Chen <55669665+lennessyy@users.noreply.github.com> Date: Fri, 5 Jun 2026 10:00:06 -0700 Subject: [PATCH 11/15] docs: add redis as an example driver, adds choose storage system guidance (#4654) * docs: add redis as an example driver * add guidance on choosing storage system * small copy edit * docusaurus anchors * add cross link * format adjustment * copy edit * Apply suggestion from @lennessyy --- .../data-handling/external-storage.mdx | 3 +-- .../data-handling/external-storage.mdx | 6 ++--- .../data-conversion/external-storage.mdx | 23 +++++++++++++++++++ 3 files changed, 27 insertions(+), 5 deletions(-) diff --git a/docs/develop/go/best-practices/data-handling/external-storage.mdx b/docs/develop/go/best-practices/data-handling/external-storage.mdx index 778ca84d4e..7836ebe659 100644 --- a/docs/develop/go/best-practices/data-handling/external-storage.mdx +++ b/docs/develop/go/best-practices/data-handling/external-storage.mdx @@ -93,8 +93,7 @@ w := worker.New(c, "my-task-queue", worker.Options{}) ## Implement a custom storage driver If you need a storage backend other than what the built-in drivers allow, you can implement your own storage driver. -Store payloads durably so that they survive process crashes and remain available for debugging and auditing after the -Workflow completes. Refer to [lifecycle management](/external-storage#lifecycle) for retention requirements. +Refer to [Choose a storage system](/external-storage#choose-storage) for guidance on selecting a backing store and [Lifecycle management](/external-storage#lifecycle) for retention requirements. The following example shows a custom driver that uses local disk as the backing store. This example is for local development and testing only. In production, use a durable storage system that is accessible to all Workers: diff --git a/docs/develop/python/best-practices/data-handling/external-storage.mdx b/docs/develop/python/best-practices/data-handling/external-storage.mdx index a2c2bc018c..4dbe19f829 100644 --- a/docs/develop/python/best-practices/data-handling/external-storage.mdx +++ b/docs/develop/python/best-practices/data-handling/external-storage.mdx @@ -92,11 +92,11 @@ failures. For a complete working example that includes a Worker, Codec Server, a ## Implement a custom storage driver If you need a storage backend other than what the built-in drivers allow, you can implement your own storage driver. -Store payloads durably so that they survive process crashes and remain available for debugging and auditing after the -Workflow completes. Refer to [lifecycle management](/external-storage#lifecycle) for retention requirements. +Refer to [Choose a storage system](/external-storage#choose-storage) for guidance on selecting a backing store and [Lifecycle management](/external-storage#lifecycle) for retention requirements. The following example shows a custom driver that uses local disk as the backing store. This example is for local -development and testing only. In production, use a durable storage system that is accessible to all Workers: +development and testing only. In production, use a durable storage system that is accessible to all Workers. +For example, see the [Redis storage driver sample](https://github.com/temporalio/samples-python/tree/main/external_storage_redis). [features/snippets/external_storage/custom_driver/custom_storage_driver.py](https://github.com/temporalio/features/blob/main/features/snippets/external_storage/custom_driver/custom_storage_driver.py) diff --git a/docs/encyclopedia/data-conversion/external-storage.mdx b/docs/encyclopedia/data-conversion/external-storage.mdx index 19441bb54b..061c0f0331 100644 --- a/docs/encyclopedia/data-conversion/external-storage.mdx +++ b/docs/encyclopedia/data-conversion/external-storage.mdx @@ -100,6 +100,26 @@ payload from external storage before returning it to your Workflow or Client. Because External Storage runs after the Payload Codec, if you use an encryption codec, payloads are already encrypted before upload to your store. +## Choose a storage system {/* #choose-storage */} + +A production storage system should meet the following requirements: + +- Store payload data durably and retain it for the full Workflow lifetime plus the Namespace retention period. See + [Lifecycle management](#lifecycle) for details. +- Be reachable from every Client, Worker, and Codec Server that encodes or decodes payloads. +- Support your expected payload sizes. +- Return consistent data immediately after a write completes. +- Meet your latency and throughput requirements under realistic load. +- Provide appropriate controls for authentication, encryption, monitoring, and backup. + +Start with an object store such as Amazon S3, Google Cloud Storage, or Azure Blob Storage unless you have a specific +reason to use a different system, such as lower latency or existing infrastructure constraints. + +- **Amazon S3, Google Cloud Storage, Azure Blob Storage:** Default choice for durable payload storage. We provide a + first-party S3 storage driver for the [Go](/develop/go/data-handling/external-storage#store-and-retrieve-large-payloads-with-amazon-s3) and [Python](/develop/python/data-handling/external-storage#store-and-retrieve-large-payloads-with-amazon-s3) SDKs. +- **Google Cloud Bigtable:** Low-latency reads on Google Cloud, but payloads must fit within Bigtable's cell and row size limits. +- **Redis:** Suitable when configured for durability (such as with AOF persistence), not as an evicting cache. Refer to the [Python Redis storage driver sample](https://github.com/temporalio/samples-python/tree/main/external_storage_redis) for an example implementation. + ## Storage drivers A storage driver connects External Storage to a backing store. Each driver provides two operations: @@ -123,6 +143,9 @@ examples, see: - [Go SDK: Implement a custom storage driver](/develop/go/data-handling/external-storage#implement-a-custom-storage-driver) - [Python SDK: Implement a custom storage driver](/develop/python/data-handling/external-storage#implement-a-custom-storage-driver) +For example, see the +[Redis storage driver sample](https://github.com/temporalio/samples-python/tree/main/external_storage_redis). + ## Key configuration settings Configure External Storage on the Data Converter. The key settings are: From 1cbdc08c96dce7a91d1b14ce8053d79e92739952 Mon Sep 17 00:00:00 2001 From: Milecia McG <47196133+flippedcoder@users.noreply.github.com> Date: Fri, 5 Jun 2026 12:40:36 -0500 Subject: [PATCH 12/15] feat(rust): updated logo and image with assests from Design (#4662) --- src/components/elements/SdkSvgs/RustBlock.js | 22 ++++-------------- .../elements/SdkSvgs/sdk-svg.module.css | 2 -- static/img/assets/banner-rust-temporal.png | Bin 1433364 -> 834299 bytes static/img/sdks/svgs/rust.svg | 6 ++++- 4 files changed, 9 insertions(+), 21 deletions(-) diff --git a/src/components/elements/SdkSvgs/RustBlock.js b/src/components/elements/SdkSvgs/RustBlock.js index 184b09c4e0..5d58f926b8 100644 --- a/src/components/elements/SdkSvgs/RustBlock.js +++ b/src/components/elements/SdkSvgs/RustBlock.js @@ -7,27 +7,13 @@ const RustBlock = () => { className={styles.sdkRust} fill="none" height="40" - viewBox="0 0 40 40" + viewBox="0 0 24 24" width="40" xmlns="http://www.w3.org/2000/svg" > - - - - - - + + + ); }; diff --git a/src/components/elements/SdkSvgs/sdk-svg.module.css b/src/components/elements/SdkSvgs/sdk-svg.module.css index a7b8251237..dd078fcaae 100644 --- a/src/components/elements/SdkSvgs/sdk-svg.module.css +++ b/src/components/elements/SdkSvgs/sdk-svg.module.css @@ -89,7 +89,6 @@ } .sdkRust { - border: 1px solid #a52c00; &:hover { .backgroundPath { @@ -98,7 +97,6 @@ } .backgroundPath { - fill: #a52c00; transition: opacity 0.3s ease; } } diff --git a/static/img/assets/banner-rust-temporal.png b/static/img/assets/banner-rust-temporal.png index 9bb0227ea8f5a85ee4a11aacd26391ae4827e2a7..d552a92530cf9ccf2305ee02c023849cb2da0ade 100644 GIT binary patch literal 834299 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%0AsX5)l)66#z5>@Y?$8MZt*+y- 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/pMoyXgb_mOVckkZO;n~h*a$y@MIL;J+ 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�ZaPO~i64n6Fw2|FP9nb?!fU{%)p zlB(oK$Vg690H(9u3Rp_G*?M-JYGc8RCrCfBEZA?fgCX z6@6mQW9gh#okDv^=pi@{{wsJdvt+Y2C_Sz6iT0o6yk4wm`KG4A3K$zJK4*qT{hlwS zmRF1QY~rknrY}pIagnTlyY{V-??!IWg;lbHkR8xA13A=R``{mK z!&`l&t&@FuNvpPGbQ0dSZKHe@_~*}G!pvzEwe%BEIj5H}dod|zJ-3;m($Ay_cp*JZ zoesktWu#AA+qY`NAIZ6lvr+bjF(twVSN8b?=8X5eqwNFFaXt|71u)rViOZ<@wX>en|XXEt?IZzpH8Q3Jjxe2c;N&iE{%9@1EIxQaESewuJ5^uJn6W{H9D(-wnMR z&)}D3y8efA50&f-(^MyJaaoeSEIrJCOYMvL_p{TNZQ|bj!xs`l)VE%9Swc3CjM8(7 z_V?w8`3LV#7*iZl&YNtZMZ%Qq5Sr(F%Sq^q@3GStJxo*T_lzy*Ia)hYN&O7pv3<0b zH)K~H(y^~HUwuN!6O}XPXpxplXNh*5K5b{#+?PC<4)#5`fU@nIkVp_da)G;MR4IX0 z55)PI>JRsi8%8_@1))PS;f_EDGGE{6;PdA`xcvBZv*(S5%N2fCZgHAbZ7T|B_b2!% zR>TVOIeZ|M9WRd5r1+ppeovZ#w#^}5Mrln_#-nZ;Y#EI0?=FPlk#4+`{=bNj-RcF> zq^p5lrJum|eeBWZ*1a~yfj%O5+Yf4%-DJP@K&zM=1||5QKd_QEuX?CCTqrab$=7G;6{IW6ce{eNS> zNhV=e+1oH~P?PjGvkc$z(sx!lJ@u{WZ=$a5Q~&p2qk<*wf?8vrkg;wzkdj+O}d% zJYk$l-SsbP!|;o(|KHAS+xkay9e^J-MkqU>tr#hC)Nf`vL`Lh_O=^#(HBCG4!6X)I z#Ev%7ccF+$4$5sNDRRR8cismsdRCDKDFRQ}NPbpd>!7BDW1j#0)+P^fb@8$7IbhD` zhU;hjcp%DS9cSk5I;Zr~j1`Hs1v6v&STpVDcd2Ztz4ZBc;lHc}$X^?1|Ge?|@xhy=k3< zySwXn7EYGU1xeve`7LbhAdDIc!+IJ66oWs$!UhgNYY%{;TAoK0q!{fBuH`e*naFIN z=NW$~gjom33mW#f@3EbOc^@>PT~x@aHl6gp4o1Q$JK2J5FRtEi9pP&l9LzcnMi%)6pLm60uCz$L=SKF+0&Z*serNi5IZ(1O;ID=9< zykLK}c^XOJs!&;wnbx5?Id7|EJ)r!s@!#)xhom3mZX#MG%OuYjs5|E-rdIo+!Ea%p zqvuDR5}_2}J5GRHVGm1z}Li;Xz6|MW^6CN5l08+;mReN|yQC;3&Aahw?j9KGEJ z2Qi_EWzn(4w=!N4xMU2c%I!M|v&&ccCc@l4x{?`6{|e<$C@JNuu+yjbJrx#u2^lUR z0e>NB=hBO;*GAj;^`f0o_3-dzoNdz6xE=AWc#f;evYUh!2bzspkUMZ8^pLp1`hmI> z6}Qw=_$6F&u%o}{*ZcQx|WS>Cs`P1j(&z79s4-yAfs#F}BFXV4b z({}lc*mv)~+hklDp7<^*oQDw)D*{-_$7Z%LSB%(8C_thSgdf>XDK*>cR~JG3gLh=u zA3ZRi8qa|dfoIC+0&!ZdyHdT3f-YM6g}j<#mWT7RtIbEf++_We9M@Ud+*iht{6=|G zzmJ$8hZi@%A6}a87X_Q1iA*?7m9?5)kBVTSApAdiwSJjj_+y>$%O{ih0QrNTL-_Bi zKTALE@h57P@99B4H9!Ph%zS+!;XMrws<7rLgUj$^ebUfH4_30wjqg`4F59a2o6SGa z;X6f>ku53PT0y*wR?)WiwXa~DY7JslWs=u^`HlzY!=4tqu91Uia4+-0OMX9gZAgX) z_b0-K(!ndE36+x=3I(^8rJPh-0@~SD&&!8WTWA!MJ`bcJ^@4O1_Fq8v5)*yt?Lv$H z_6h7QNY}O~PCuQm&aSoXgmAL`Jw9CvR)oPGs8so4x#htf49qTMmtem+NGK$C8oX2- zeIA6hc8eneY=X1Iksh~MtGhYg2OEo?jeJf{w8c(%i;{Te>kAR_6UGA=$AJyZ$4 zt?S*8^;er<-SySfoP}l(JNcFaf)OKHtIbe+PPoSYe_(`)Sm`iD)!H8>zj_G^V}UTX z;f_f5VPZ&Libg~ky^~0YLNjWe;@sMzdn3?yTw{gT5J~S8hu-E z`Ly|tF6-Y4pO{}ld~NNq$?+2p(pVlb!gg1K2UX8TX6)7n>jQd>>&F98mbyN$EcHM6 zUVjVeOUHlK8_)v)4ZU1wE7&44$&Z4^V|NKYpBU=zf&BCHm#vTVwBDqTV>L$Dc&Syc zz@L5p|G?yvG4NPkjU`NZ#&^wsX~j3P+NTX5=zKQWm!mUHz_;XyUyD>MJ}i&$4U1UH zu0`>eacao9SH~A0_*syrCl~DuHzixaGE@2mq;|#rlRvi1avhI)%2+fZb6;9^SOA>` z!_*{J{N)*avbX;U0K(IXW5uIPa!#4x6#A$m+tv!^#XriG@R`ne@4US@f78Z`)@@MS z`;DMAw$LRXCB|}ycf<}+W>5l4$bP3~344U6G3YBQ>|miSp0od>N^-U7uk$=s6BpCP zm?7mm59+h63anC^h(O7e+J&)Pr!sge=4EWF+IOt*^BV8l+136$<1b8~%5kAx2NTSN zeFv+=k(EM#{_Om!4Gum&+_u3%v0Pqm_4-=A-P~|H3Z%CPf!59-)4B`NBePLf z%&-y5JW#1gpxd3X?A;7T8VxtfNiVGq0y2|Ci54l}Qvm@e)B$F!jC!*YOaf}IL>Fy< z>hbY@3mT0XID_8-HlUwrnRuq8T3MmO8Q}rJ*-*MNfA`%7;eiz;;Q>FDR-~;sKXPtc z5=fR!|69gLP67uHBxx9_M8OKsXjLQJ@vRNo89a8>0kCNQ76zmGJE&c~=m*>SiYm*B zQvH*rekPCgPaB&{khSh3`5J8(+m8&vVdXc}W3+1woJ!?g&qs2WiCL*(-?M(04pIx9 zWW|JCR+f^!wcERQZ-?w@$TgfZPg{!HGa$^&WkVT7}^yS`QX~^?Jd11Bx5r0ujbPmwmO8a ze{JSX1VwEZKs&xv7LqAa8!A(p?q6<$gTC#I4_M(^+l;HVcf1_?+v*WX+#c^Wo~*&V zmS=9unC(9EjG5q1muYo32!uh+x@zc7#wIM9x^lTazlkEZbSOiI9VV_mUqH z*q9x2A;+$lE=0d3+lQ=b*!OrK6f9@MC$LQ#Hcm^PT@FBhn8pq*GQqQ0DQRCfli2Ay zNQ0<#k_ij6%d-a`{Mp0(b>=x3^+2;3SrjiXwg6$1iDP|>_E=fo(V68+ai=*etW!Rf z1N_U%J-q3Yv0iM0RYvU~!*=M@UUS}{Cm01#vM_a_b8ATIs0-sO<>}Y5T(sxDoldy~!^4i-2*-_sSfI<^PIc>Ttjy~CfRi5*qS-NF{pfXHNT|BLot`f8 zAOFK&pwVq(6Vp+S z*WG=Wj>){@K2w?|Z-a8!rQskfbkBVNvBW5?H4a`j+fD`AD!tt^B^y4`7d9g6JnIJXV$xwpIFR7i?cIaiH2Xf`g7PGYl1uQn+aO6_pjI;^ zK2!wh6&ORERSDBV1+uM}a@C60(MJ)h^#*^!rd!D~#B=TPjXYI&JH7rcw%|%08qt*b zW^gNX1pl3JYYg_{}p0hyG93?!N867QsRTA3fxJCG7g{ zU8J|?b6^{JNH^v9{L?B$c5vS>Klj9g6h1%;&nVwxq<|&FC*F`r7Ak!c1BK00=qaHQ zw_G9w=a5v^fof~MZ@MXzk2kbcT zR+Cs!bJb{%IgC9jeeu1oL}9MBvjNOc-tR_?<{`0F6%atmzwWTw2VruU$_ zmM2BETLeuOrXsQ__3US4l^K?0H2`?*Av9`>0z;a`VwB?nt!M8w3QR(XVayVljkdJ`?6Q zek}1)@c--Ao9;)IqPop?-ut<-7h7Xx^I~kLyG>BxoJU%>ze`E#> zcxq=q`XseD|M5WoMU&3pUYPiGG7-K!9W%T!UvvJq)Bz_onKxjf|sjXM1Vuv7sKLy}A9R@&4-SyRoe< z@l7%=jJyK@(rA@>`Y)W(tNf}Gg$gn3e5th?{0X&T`RX#r=hFB7NPHEvSQM-She$uT zWz!a9*$FjOUlSj#(kdkLFw28??HH-8|9QLd*p0_dIa%7`i8z)6_Ll9xCC{f; zu>UNt{_VO=9DnRQne0EuWYJ!;kLlOC8cBHSc>I;=$slHtHi?h8OR6FGb;BOkR?`(2)%N4cGYI#d%*tTAqN@eKymU3fRaoq13BXz z2rsXOVZ{g_l;pY3X!8BBQ<*^bQqsk~;XHd#3Ak#l$%4^46EowH><2`a;tc6N@9o~V zZ{OP9;&YuC9A+^0ExLTb#JA1$RX#AnM;*H8pr|tQOI!CgqTuI{J5>UPDVcxxe$_tf zXMI{rnM5kpTVsF)WcKa2k|b=;5ch^m0-{O_X@B2W2!8$YZ4CC!vqmz-IqC+i8#n;-{Rmp2gNY0~6wz zpHF#_+wr1|;WX!clCfhksq!TjGUGG-9x(exwO~NhmGc-(X9t4RDC8Do_!en?;Jk0S z=uXH&E3~5SB5l^;Bh?2pWTNvrc-dDJYv=|{gUhpThvyD+7&r;dlyFKk>s4j4>VFwz zAq*`^rkTvKMO`qgfA}Cv?}+!a)UaC9ARt4(fjJ&H@%lWCfqx-9tJ}U2eWGnPvQM&U z+qgd6#j`{}mbvH>C#_oLPeKl97M-O0xAtC=2Hs*Sw29=LA(>ek#SMFkX9##Bh>Ut; zJ0WlYF6mMfPO`34Mo|OR9kz%b;NSc_9I1TnXPaL7*`^OSZS|m5GNNo3nbmTT&<75$ zeTy8XSt`$xzU-t-ttb1E@_my^Oaz5?m+pSLEc&4ALphs8_vticlxMdC>y%|nhjge2 z9|}LW8!(+q^xu~keqP|yCg;~gfmZS?zqYNax4+b<$Si-c?dI|&^~DG5Tz7%howsQ< zVx~E9rnR|LJPoX#^uOhF(sk(fPoL$t-#?d(R3y&K1XqlB*r{J=i=cejXUji6t-?VV zBW_sGX8DYHKibr1fcuK@zS`ueC@%*PsllSY$_h`I89aksQN=t%f!z$6h+oWOVY@Xt zamnbTf2G;*aaeb?;1%otpa1;R79_lhf%Mw%;%+qQ z-;%UsT@heUJ*+m1TTH{prp}tkA^wSQP<(Ctf7w=VdO!l$wX+$6aV(bHN7VyaI4HPg zI={+|D>4i0!8`n-)!)IRxjdcHW)9rKN4!&cwr0=1`&^Zp>~8Yz+X4C%g~!L+UHW4w zJZKcjx>ilqUAj5-j1NcjCTBCpc18>3vr+(Q(IvNkw0`gDu@87P8%0|{FVr6Rn*IJ> z_^a11<<+ZK`)#!w-f9qA{6?$rKpy$Kz4jSlCXlpM;_c{QJJ8 zofaRrV_ZGXga_F3y=(m*>=R6L90<+!xl-!j{a?YU#gwN&L+N< zd^_t)IQ=orHdbt$pS^2aNqg+e4*bh7XViEhZ!D+qB_3=3@BJ)4BM>s$-jN)O6Ho1Y@XPZL z4O@Kc?r2|4P4<}NN%Uv9?Wqd1H7n$$@j>_AdBZfx0j_aMyPzM&=eR-tc-3uSmLBl~ z?{r$rU}AK%s(pz*oJ=}Fb;7x54RE?#ru}gC#M%}@5@hMH0TD;YTuq@X1wH+1^hfnKbFV0 zGcCL#n%};C)h4AsJUm6|vGa-Ql)IGjjLNL~pRxkUL;Hu%2qd!9Ib@o+ocW;6vM(i= zqSGoa=80pB_leFg-Zq)<(pv|O`~p_s9AU>_=-fhB?yI%kKUl{k@sKA;eem7D`fA%0 z_F~sG8JT_ZY@&scfb}GJin6(V29JYQ5h?i^>Aw^__MDa__2G}~f8jIL%U82`xxN6z z^YOU)w{N#Gn6}edl4<-%bgwcdGY=}{ru`r9xXoDCBfF$KePKMwI1lu{j#16>&e+F! z+MK6IwWVzTb+%9eO|`y^hhhIy#(j~~h2wea$3My*Xe(hSFF*X{Uz0$KhasrL-okMC z)_)h5uf>-x-nLZ_G*grCf(Il>l_T#?hY=X3 zh4Sn=xfLK-v6*MJ`c>I&GHS3+1WikX3Rz1wXUbGU&}xJD}*Ofsy`ayF^EbX&dQnB4G|_cYv0CN~%!X z-siHf`tUOzyNf=9t`b03M=8IPUND6yXKd3V(FRu2D;_ODJq%`cVsfAz80DWUpGyf| z@|FiuU{cb#smaQF1y5|J|FdCXTu_}_E7eYB1A4Iy4)${gubUx%PXBu_Zr#hNpi|fB zQMxBo7k_?scCtC2Z??gf>(~;yKhONwc_w=&=mX}8Sf#WQHpLw<%xGli9d(K_q|Oxf z6+y0RKC`j~aR|ejzH`g*d3FBC+plc1Fj<0y4gs}cYf@SW^9Rk?@&qeXWs)C^Vex&w=6W?A zlAJTncsb`6ubVG(yYarw=$v@!*V*amD8JTi<|WrlgjN&)CmO=6L~G)JM!H#>l4J9k zvt>IOrBvH@pFGe92lu*}zfE?AM78j+mwO_yf+avUC~4`8=*^G3d%6WOJ!pS-|9K3W zWRbCgLia7Y+A0LullHKTs#H+xZ#&61ZE#Sg9H3v8TWAWksnV9j(8IBvkg>xpy|eEf zY(FRD^OvtvutM`}&?rZR9e6`Q!P_n=ksdXM+-v4nctXE5>fd$qqMbjW8T;pBU z@|`=nRZiHp5YIJQrljyA0M1We%ERMzAD|i~J3kl3Qca%g&^_qitWRv)QU8U0E9o#p zc5kk|Z_$67U@KAfU0S;>;7MPhnG+3^OiXs<4{0b@-gA3V&(E0kSfT=a54Mc^5v|X( z5$op#f4jbkM)vbI9v^PnfECwyrb$?5sExzs3V#aGrp#a|cDFKPpM1(96?P|~<6pkd z(gFJIu#lRn@AeRW>9EzM@AgdpF20K#V)R@wAFw)E&f6J~x}!^Tv&d?eysVfCLU8a7K6rX6|zDm|d^VOBMiktPJe2T`d2`_J?UwF=Y~X2^pLk5`GB>QL|o4_{5-- zR~gN53oGBr0X*{mlLBGw3H*?KGeiB-W-pUuO}>xzbHjXq*8lvBHX`XD&z#(Oaeme& zF@!%3KZ|Iqf&a=+-19%*(%L5_-uV{o3(H*UZTkPzAJo3$tgWclv zbr4KTon*8|pxWRytwl^e69b?V?M%FOB!KU1^DQXjm`j}3H*7@iG!bjU0vi_Ex}5n? zE>&7NTs-@oPO-!`z6(`n@Rs}kcoppv|ApX;qeR}kX}c2Wgi*VGol5dP{JX3le+wQ* zMJC;tH!@;mVfW-Y*<6%Z8K%CsP1zys-xNR=C{!TQ6v2D--%dT zt`ZjtDVXFl^k2z`N*;5px*(M9%VYd({9JTLSEPd+461xLKF1*6jTx30gO`@-1 zkb_wU`uFC;jCcWKU1DRP%g)7O{qK`jmIJR!TmRIt{qpktIFpd@iS=FkifrFus^Krm z1myU|g``+E`PQZg^}afM}ge5y`zMEPszkxlOm)HWer@1=A8TKH|11{>{E@<&Zb z|7FL|`a5~I$WxoZ=i6Ss7GFtdHg-f)DR{Nhf2qYmZ*;EE_^SMV!9!^}hKcL1UcP9) zif>0>c8m1*K)YI`MoXqM`vmj zBs?&dm8h~CGA$x=Ko@U6d7vtw0{rRxuq-a>mmL|@Z4GCJ`HsOT&{EqXLEZRCRjt%- zk$v34a^izA_6&6jBb!z$=q|Gfi64XVc2M@&`HOab(*46XuGPM-V{5Z$*U_+!U$3`z z6{0x|ywvM{b4>sK_rC1i;t+1ea)~w%%!SM^a2^JV4&lYQlaLXgt^Gg!Pyf`n#e-fd z>NIH$wfCprKee+WgR!Fm97x7WN`L<8)0geK5kn0E3WqINDO>PsyLAG2=-*X>idD-?WO*r z5ikAOa*~orP2BK^;t^2~EdX9kFgnseBOa=+m+ye^qHkZkj@gr>=eT?;ZSMq3Y8;qn z<*vwn+l`_$ao=aI`5AMl+&*2;4bwqV&c}H^(ash3`#`6ZE9D?j?IpSiG^~y@!4tjNj4gLd|2rI$2J6&%NR`Tua)l%VHnyZZ!6J7SJ0Z@H|@OPK&bBLZo-QN04cBO?v^dYv@r z%eGyEUkwSl$_=LuCTAcI+4~Xv`;pJv3a(qUfnTfD{(rI&1HDr)R6zG=<3aE$G(lHT zo=A;pQER3#7r>ku+m8wy?1MZ#UAM_kK1j%y%3d`+oey5+_S{O;!4zsGNo41v;D*<; z_c^}w!NF)#60}L~(EnGeyW&%I*sPJqX#cZzHeJ#{a|r z*V{KJYGATAxgK)%3vpp+66A8J^6SvpY zn8_CO?4P!N>ObWC{M{z+=K^h*eHEL&q5U8$9%T2ws0-eHPX7a^@O@}EWOk&5kH(mi znwmJpxDpSDWVHLvMv}e2U96KT*3x~dnvt5JkHwBHDBYN9ALfVk^vFH~-^k%em9=C`zGV}sG zA99_BDKRMMkclqTUJCxlmZNggx79s4DRn{lMgNIJHi@j)@ysNtD7w&j+jewY*AVzN zo}iLAFbsshdv)=rLrp{h1+7FC2dCz zym&fyZrXvwt2HBh=_}VB@A}z}L8uJJ$)=k0IlVeLS1JHb@Uzw+0fPk^<*bn>f;@O* zcDQ5KJsChKhN+M=`aZu^!Et@{=a|_{js*h5xX(_4gaOG54qZ4W zBcD@j>3aXQZ9xYjqOB#3fx@r{cPhPcc(_8nBgaD){9Pmzm)e8UXGo~kLz%u;a;aG-l_?d%!)#$g|Pi@a+ z@V4xu4!#TNmGahddz;9%$;@E_O$_@q0ve zuvOjy-VFVMEkdV+X^xJgZ@)@)%l4CeSMuxL`uQLGz=tCQ&zcP=T{kvMT(G+eRbCPHk*I@AAc{pIAcRpX3T&=`;EkZ+F@pB=d;|r(-sB+M518A=TjZvLpj6WUl|^ib7zOjC)9D zg@(kEYy;(EbcnRH;#dw2JxZ87SrO%fNX&FJ*?3GhBC)wfdX&)B|O&|>sG$~KZ` zOCouigX zdd9P82YT+?E;`;^UVPUkfpEVobVsS)qzK^~JdLxlSpUa=s?_Gezhu;G|83HL6)C=8 z(R3TKBD4PID((OvAzkSuPZL#pxjd;Ma8G1czAiO7IKvn#E>Bdtz5mqGU0r?`*oQu3 zCsh*@Eoqg(Q?ao^t=-6q*@QR7ZB%FqQieWI@EG`FlJy_5J-JR&(Rg}9_2)iY=-ra% z^YuYWE3ymt0j@B3RqWBpht}PDh_Cdv-3Ct|er;#``by4dcda=`3X%oc;b(u|V@!)& zUR~r0M$nGFu#oN=c?(JdJ!rpyE&j^~-9LVK*CyzT$gwTaIX-!)DZ+82xHq+@CeW06 zGFLM9oW#z!g6nRRbKjEw$_ELz@ui592-;SH{?wZsuuQxdewvX=3EThd!vtj`bGOS6 zG~U3vOr%DeDhWN|20jQF$pYhpUZ?eg#Z1^S_K^U zP{tO?hKC!j$od7lqye0M&ZiMxDxktVT0s*^S*36_u%E@V{Y@upXED~W~>An zV5k%As7{KOl60rxVW%qd;6Xl%s^(zL0FAO$2P(~h?X?(Ki7J?sGx|j1Ul=5APtAmK z?&rVJ?2x$T1GEURh zb^8JB0h9>pg7+v123cSn=si)c1_%Pz1?Noh5^8-$rW1D9L6`C@ofHfG4+luJY>PLw zR7>x()7wm*Wo)&$J-@r_+lq#CQJG1jr09hn5buSWOjFL^ZwAysK3DkRPqUso9i20z z+r{b71GpzzRYDHP6W+IbpGKp4<$)S%0&b$)iS zb=Kau`!~10msZ;0%lQ5{0_H||gO2IV&FBPk;2b=b#4oJk4hMR2rlR4fVf+KG@bT#}>Mue5EF38}(MiU()=K&x zb&$}1=gZaQJL!jG|0c1Gl`x}=#20*z-iA{g=;-`#$JWT%WPO;GUsVbQ;pMG&AhyNw*@@DZFq14 z?hFoH`f!$Jvu{JCGO7Z`eeI2VHIoyK@Hgol$z<)*R~;v~BtKwRHws63rk3Z%t}q!BdTV zP?SZ!jOjg(YzARnUoe+gVl`&4MUY;j4a#@Q%D?#8(SGi=>kJ3D!{^|1nT*;uu~;S9 zmxEY)9eMUX=POn7e0y%+V)5He-|>U}lEW;BK5%>?{Ml*mxY+^%-@V^>(sc;W()XRQ zq5mnZjx4$={F`!M2WEON&p0IVNRQYz!{B4}_bu*a<%I5qfvZ%KoP>=f0(_#GZ=3Tp z&h$MJ3O#J@e6}pJ&k1al?1RkLK|djgudJQmTI(}8cyA{|6VFmnr|;EoeNNhO7EWpD zkya1OCE1;x`Ig4MRoD7-FGrXAZ1AV_z;5}!XXmFO*Gg0kpYT zb_U_1hi7pGCQtQkY17o@`_z`q9pI!H<*!nFMfR!GO2KSW$R1mp*yr1IwZ5uwMMwKl zMYz8heRZvTisk@c1CK54WnU(-cMj6_xD9($l&6UBzy{O zw0dLh{-VX7Rbtb>bc)ztmWkP@U3EBAFVEoNYt=8L45r z%cZmW*F3=&{$0wGESF`=2Xk<)UW?brlrIyasUy2~Alr-UN?_}V8ZCQa9I)P6~?m>-&~|k zf?C(y0i^n)`}XXaY66PX`b*JWjk}<%%kLDtm(-G?e8CVc1Bs zF!oG!5Ym6qA~&n0>;yfWPw0Q;G2W?dt3eCvTVjCz+aO>ZKFr2ZD4mUo5F$n1BaRvB zPjOActExlP_-5@KLSNnEyMXlVMp3J|S1FP%lTH4W1da%m7iC+v$5MPNA=$Iy4=@HM zuj?1iOQ&~6SBNw+^*rN~)OVuvvo6ea65^7SwwQP#9{V~i$ItNPev0pU)3(8se*WeV zR7u@RJxeo7vPSv&t&^>8zQb1A^ z_Vk!t(IW}GPkaPcjMbn@)gI5Gf5z{ptJ&$KcAQ0=b=to>Z#QexRw(xg^H1^4tp9B{ zpOZYkE;8gxCmtT^fBG(ecv;5li+q7Gvt5^zxh2N3B;p416|xihlni1U%Xmnd#0U^~ zpru8AP|mXK}$3Sy-STU4xwJ7!9qW5<}w;rHhg;Do_)Ldm9uJpuV21s zH0OCi7B*{9=ChHV=?}lY2!B*%d24qE3zVPn2cY1PK?Jw22b_hr(E%So#0)q_g z9z3bKjO`d>`;bMZ@(a6*5HHhjfo#a+h-uEg^E@vv-nCC3oRx7OzDdRSEEhvAs0w8+ zfpCMs8c@=}zpkrF>ChIo4eY;f=hNKW_DK^@PgcrdeCE%{Blt=IsUoj45@fr05U9vE zYzxW~VzWtkMg&f8_U|uWd~D99`!l$FcYt4i{e7&=)JocvZOwnriyB0g^o7Q@TfnMa z_L?2%Zo((I72_648np7;SBtrS_y~-N)KXIGNNB_%jBp2M%GP-~zh*BLX=>r6%8_ z-H7&5xAB7Wx1HN%E47U5KXorau!Fue*wu^l4T~>M{!GPsZa>*yN>$muc;M3Mzuovf zH&?5VGHA_39~PKeLY}W!P~eehxdY|!;fs|V?wUSq%G)YZYQj{LRzJmy=4-G z_?aY=?dsU>lXD&(pCsZTtt^@>qUe=m-zUm&KXDr{x!eY*)^;}7O$_FQ4;XbwTI@jF zOek|wJ^19o+Ywv9s;%JqD34bwg#Ry9^12&1CXta&+fkcR9_hDoD;r5qw?~)TU^nC^ z3+(mFuK}d>7369a%h)%B&+E6>r^mL%s853Ovj}zKr%v^aJ|5B0+m|oh@sOQt^k+rW za&WnjJxun)^Oba#Jkb zDY7biPsXT!m$J9he-(jFqwU)5h47$AVIOQ=OaF`HZqhrdT*orfry7Hs)96m0xptuk zidsq3H)P#vp1ZO@uVIkT*bXKa40VjR(x!ah>hsRN;tRt5ctYVoQ{u=b9 z^Lf4#^Y=RyFHPTz(n7i}e*jtNg0L)3vY zexyQKAt~A3{JAfX>Ne>z@<{!!ybf8X#tgg*S?z_iV=LA=nMQ&(ks~h8dZb*gR9{Mz z{j8FrU})mz&|@l`+Z=yB!D-$4O=o8>#a9&icYm*MAVYxIgX!mOuUniXuH1hAO@tJM)Qnsd}%;0y>WC6+^?DR9Ej8hH1r9+}~A$?WJWp{dRZa$5D zl2im|I>n*Z1I*T^EFl|6x{9)37#9;@U(*SJPA)Yc<}rYg-&JK1%toB`i}j~JI;j76 z7iENlHMYOO3kFAO5V7ophd!Vt@jQ)n7@9@f%0Ukx`QTtXL1HAzEUh1O?<+QqfKDV= zPs5Pv*!LXIhuk~%oNh+t`uaL%*szh3(I%Mf3Au&-x?Z2PtvpVJ+cR)zd|3@cPpSW* zKX4Eu_)g7lWPBtaKzxe4P}`AtY~Oqp(3j7jWj4vNg~v>|_(99BGp(f?SfDOqmFLg#S~u!1HFj4if!yxaBoD8JPI z*1;WlWQVaczdN>BE!azT{u%H2lef)>{=+|E3_@qee=N({h6m?kz{-T6Gq(9rsr6V5 zxNR~$ib{jm(QYE7|6TuJ!2_agU_&9Fa)?dBB+_pqyfmr8(fB+jVfcIf zoZvRKlzcc7BUhZ8c~L9u_k{d`Oj|dhvQ+9ctsuPHkt< z{POd!vZf&ozMD$%Cqv(eA1BMjnDH($+x~q{z-2~2Mahv z`aS0hK0|&(2f~zV;7Ol}8vrLfBx2P5vm%50B*nfzutUkxt_t^t#iLwwbrYS(eoQVw8sL$8UZnl03AzRX}H7gJh}P z6%rZ8$lh>vebE1LqGM7aYR{v*h0BjL`^QxR_j;bpn=8`GQ_fmv?HG8LZ%iZrle4ae zTqQdIdE{Ugr}5Q;eJ1k$YJS!>FyOj=b#);>{P}k zHltiCT|&nQ3_36|)rBUhS2yUWg+GM9OL#o3VC0hsZS_ca-Ck zKYXQllX>gYmQeJ0JQ=E5c?GsXjvG6ZqUoRFYr6ze?@@kID3*DN~lPMWfNZPlE{|p%s?> zTE&x7ze(BcCpcXz+{V~{rf$9AAr zS|E2HV86&htORjdk3}ZmB+?)r4;J!x3g;Vz=Mzq}cLA**6~dEdAO}h|f%QKDDl1@9 z1Bb15)mbet81^7BoZ3XADMW^R;mDh=+D}`b_m>unxwv?@$?z%ZcqhdDa&I^2zXqN{ zhnC=7=)6q&PcoYJCM`#-e&;qtLt4$FYAnUhf&c+$u>3@*aWW&bo&C?jKCS$d#97>E zJ9ALp7WSWcKFQ}OD<^P1#X_B{%MZ>?UqSfSe?_Lw+_Q6ELVmG1KHu6Fmn}07E@I$| z2tQeJS&u4Fib3~MM2&0>&!H$sqL-f{7=~3H+yUAt{-6tAz;~cr z%Dg_C7mObrD%40=3L<76j5h4x#are37+4{2(MX49QsmPOAy&w7KK-Sot)y~LySe#o z;Dv;7LA{*zw{PFHfWpn~ZEioP`Ho}IyX~F3`-j940>ckuZ*JczSgC-NPsp^E_5eNp z_h!rASBv#k40X00^CJ>8`!vrYkw{nZBme*As}3#12VVT=1+Wh#~Y5!9|1d}cTw@I!dL)Bb07W~}s<>K{*ndhx@1z)Id`MK^&|Kl6` z%UAn4_V8-(Y)Fmq8#r#boUY#X3GyLcrJPv6>1Z_=*R7u>OG6tg(gaS0hn{ONBkg-06p zslF>Q6F!L6lrR78XJ~k^@3yTh0zMJuh)L;GkI%YtU&?dVJ?|jLw!ZXM4u$EI!*iOu zzlD^S7jIjBZTl^=z<4tCsCsJp*lU(uH!1oLb`D=_A)CtN6qVF+ZwXt()N(LE_d5j) zOtc+MB2{-%9&m19(xT6#-P6r>Ri0~6!lq2G1(Z*>!6~2c_waaKVR0%ZZCoADDCO?T zn=+dnk{LJt=+b}3!vp$@Fzo?g|Kh(v$G<^k(Pf$KFYEcZ=|P>dwguf6nTO&K%<)MJ zu8+RsLEE*#>>1i>kDq-(;K3XpIL?PZE1sClZBH*(Qz5`Z@FE8FNcWJI-5HsDYQN`` zKl&;LseK>dB-N)4d=3V?p8A%s>tjFD_i4TFv+mn!hr9IuM|#hjw|nF5JNrx-O)=4l z_e5LqNtFC|a24%9wnXVOQY-2N*0B!Bgc;R`DkP4ZO91EASA6qQ`oy5@d(B$S?H4>| z|IxTl(YL$p)!Gkub>Hl%pDBL2+1iKCkr%em;{m5Rb@G@7her7&*gauf;ln7$C>{eJ zp!v`XrkPCqNT)gkulO&T9LxBR6d_0dpI3Fw^)+RA%UDh8-!EzZjRJ8Tb0YN%jPb2T zy{`Yu|NLL&^XFgW{^6mQUUq5HNWekSv$mCI;tlub(=JQ2Pr(b-egD7c4C|~(?GMP5 zTOBCRn2(fQbDSWoJz(3u(5_t()E=2H>}QFjJo`IzWK)eRO0+}t1(1KSkN&x~?H6BO zeZS%Ox26N(D-tu7XagxYQTauPZt1JQNP`B-YVdEaE9(Kjne7<(O<<=gK|%Bda7G+> z#_gz8hYtIslG`Nzk!^_v8x=&GAf|1S{`|w^ja;6;Yb$48zBrSIF%bf7)y}e9aDn<0(kPHr|pHJztLlZZ2wcz zGQMGv-%Nkh5h<-7gEQ-%P8>oV;3GUe-fg@;Z-e5#eYy|6irKTQ%FpqmF1*-D62QoDuay6q73AeE z7Dly5|4~3`XA$8Wz$RbB@>FJmc4pSy9xC1{S46TdzEZaNl|D%8XAt@W-=6N`;#EuT zv%dQQuBm_kLkK=Qp0Q#h(7dm};~-rBGBcQnqsA%BgrlI%;>aMY81rCgBVmckYm_ab z%d%t9+>y4)k!K|bxwE6>^#1hIPyKupY=OjADz4UB}iZQuX$m!I0XO4y%!sFqAvOzF~`^1#o^+vF1e zK7RaD8#KPX`MnQ>hy*C}EGkdsTV~$g+>JT~q>y3gs}JtmnT7@x3!eJY8S=~|wl3GZ(2+IeqDh0r@qV_k$kYs^1Ki<6{w$Zs zZ^Qb_x7)y=ubTUoWlLfoZm{FzRmn3PmkArw`Bs&Xo3sHbU#zo&4hX3TWV!eqO)me` z2E*JCE<9m{8kLiP%qLbf=VVFj zvT-({4^DaD^5)yGXtnlEo8?Dzr;a6`SVs79(f_4R=77xfKs$92NcLF&8PXV&kT2RL zoOc@-q-5X6{h$8yLvt+KpnUBAZaZ6*b<%imi37V~qa~qBmGnQvCC^DASx{0xzkkte z?aLN8etf*E&H0SIVcfCHvjRCYT&%?5#Rt5j)K^>ODDUOGH9?;CLzmY zG&KQ;a!o}~aLCSq2!*#|rn+zC`m{Ov?n^?vv<>Rnj>3XvRC=j1eY*ZPyAfc?^lIqD za44yc6@#<1l-)`}epg~wKChkC)HnKWWXpvnLD(KQMJqpAyK8M8ys-0mwCewfpB1wO zE+6hcH~%YjM$^aUPKaiQKX%gs{ur%7B+QYZ!7~4%G!y>`CM1h)1%11@X?8ZxX_*HE zb*!4H9c%Eu>Z%;-P?Q(^J$|?966qNN}3KFcGT znD(Ro)xLz}*Ad;NwRg`kuqK7?oR4pb*0+qhKV(ba>c3A!&EOx(&IG4zyQb{Z2)&bN zDrDDc?e|h!+d8p81KUeespNdi0T|p*;~mr^Z%d#2xw2uSj4Y>UZJQ?lAzE56-v?Jy zjI0fcpKLP!`1m#TL-tUuqarKL6SS0>Qg=a6E?7w&o&R z%ma5a(qV|khQEt?)qeP(MAL7dSXpTrbmmGyDv+FIrMBgj7D95zkhUy!6_Q9DD3ifw zAs*|U8rcq=Z~$$mWQc12zse3zf-LP7SSG?e z7Q(4|_TRYf*fQK(%z1aMa$39s;cJh$g<_itHDLvWM&Dt4|mscM) z`+6ZacVDyLEtWgKunbXNa~ps^A)h5lVml@{SL~f&CE3a!RsWf-RjHDHA_XfUk3o&5 zRt6RX9x=AcPR4fQ3Mi9!Q|(QSr}`t`0@IJM@_`fI!al}GrpmNzpr^v}%>Hd1WMdx+ zw8M7J_8-I+`5XM%W3rH3_B*^FM5#eS|AR&uyv{=K=CS`RQ4Z@rKq>p?LPBRnreNFq zxyttqUwU2-LBwqTg>jJRUBmWTZ5!mnJUeJdF@8J9jpAn9;W#VrcrfcD|4#kT%m+N1 zu!1Nfy^#@@H6a5pJ7tVyI>p%MdgO24w!RGzo}OK{0Gh92>w-_rIC4iu4(^aa8hfX>1fKU5aD^>G9YQVTgi%#4 zyFO1MxX_-^w<5*pZE4V{fx|fZUip`An)7+<=iM0_4=L%BPigGoG{kIq0gz|&kWLFb z79m5*&ufuUG|HNuhC&Zd#P9k_EyYVhjfRM<(oPNwiA@r34)d zE!(t!-$z$J==7|$fy?{--M7)Pvt8O6AekhJdty=HQ73Gtgn<a7kq5SpT4NvP>WH6Tyxx3C zKLhOdFtFfTs#WTsQG17c)2c7OZtw0T5(pWNLbOzmlXS;_JO1RP2x^y*G7d}`ae;-B|vrX_0(y<&suX44guikvuI<fhy>~=-A4l=eOvL%az7*wAG;D^74J-+3oFbA+xcEs~ zPHle=4`17CG+)j_Q+QmTlGVTdi)%#meWRvb&eL zK(0sGVktzR!sP-|?BQKI!lF{&y+W<(zz0_{wKlhD zV*Fq~rw{hoWV5TB=a!_2S?vGp{cX^k+@5`kcvF@BGCw0(GJ3CcyeWX?*yFR0eSokA zRD{K57Jz^2Rd`DyC^zHlDw3{PuGRgA7fnVK2keFOq$>Y`)=ZN(W>s z>`=iOgs=r=wSgwR^8kbd=G1rQd(iD5MI=vB87dflbKs*!{N&-jp0gxcvi`!p~i_^a7UObri&v-}H{ zzYsn|+e%LAOxe+Za%7;&JREI8X*_Old3oOAKta=N3dr_U+3cUbiqI#$p8J5w({+@` zHha&@p880xXC85zvjLB~j<&}6jo?wTTz3)>`mfn$J5xG%?>hwfu2KCwI;xLNgX9VD zfm?pG&5La?$yf3DM3=rR5niGG%Nz${Zm87$xmY`QQ{}4pV!p~}$G6I~(gtXl(BsMe z)Y9or2ovGDR6HsmG(ORr<#s7N)0t$>cleyUI}+FmT1uZmcPt1F_4l&hB~v|OYe}ht zHptWE#&`Mi<9N)Lpx@It=~ib0g==C;ayvu4s{qvQBD^gG#kkz+5d2DxncYRVE@e zxg)zt|7d$-`9La_QrNhyQ$0=QmIuc4n?ajn<;CUet%1(u_U3bIjP6`m0d3^aSZ@i^ zIP(wjSu_sz_{Bc?zWgzQ086$m#>HN}dMPhoz8LwcynFk$fofY0Pcy8J0RQ!yzWtw< z{g(6C`G3fN`)~hc8z{U?0Ek44oE`9VY`cSCDF>S^D;BIU=IHnZ@E4mEf6P!I z8S&1m2NGP^Z*D(J1e+DMB|lK%@hgE18md+w?gLVK}JsbEVGL#P67;#VbrC zLCFuq1)m17@m|bgl0J*eSAD@cS4c}W?|?BD>$m@x$*Cd(;xy=iVIbZ^$^9I#i*2Cl z@!_TcephUh0-2zH{OEP$+3OYtAkS6_YhE$Ol9wew2B2B31aMIf4**-#K;pSl{YvXv z{L`*=t)o0}Rs%5GUNQ%{1 zM;FRvurO%72keQ%j|LT4wa)0`_6+wy%n$4duM&`73%>FB&&$ zasTY}49Rj^9}N+junz`B#-Yi4f1qy2TIw9@eaI5qV}(GIJxi>Vs8`Oe z3Ryi)SGG9Y_2Jm_N*J+HKDBi2VC?cXdKYlTpir)q$?!#@!6LJ^ z#a!F+?C~~IML@6AW1qX#l0pWBQnUR_P0aul^i!TIi|vm84E;Z@byAfRc92HC68Ch}f9w_A-YXk+Yx#(i$D){on_!6*`n2%l z&Ffe4di!hTSQcU|BRhJv)YZ>`^=9y3ak1^gzc*%jAyjv~&5OU&>tdyI%Df$<4IWDT z7Lr@e!~gsY+m|md$M38a%SR8a0OQjBBdEc)p_Y@F@7GdRUL;RzU0HW^%7^QeKk&@Y zG4Vdu?mAX%^4%=zQ`!oNi(kaLqH|{dzKhj=ZgcbzjNapS%;pU89i4s?Zq)Qg?>}?d zESG=u?%MjczIyrp&(*cR+r{WlKJ(rvknSDX8Y{RyV|>IFhKSlY+`RiI>$sQohu!0q z3TUd378T*Kb+)-S^sc2L|0`|RpxvJ$P2j_&zJlQ0*vDWjz&PWEadA2`No}Qex zT}%8NOCW37m~v{yEzS&j+VEi;5O<&62ML!gfQ-0Q36hUIqi)3a{y8Sts}@&ADIYn&;dvE? zL8ruGcN-bpWlsU`3F#RIAUP(ZQq2I;5|fKPT*H3J&_#i;x3^p0h?>^>gnk}4n=IHr z@R!RP3>#r%%Cn-CqXoafMX!8Rr{( z9{hms0?!@4udlDiQ6H$jNp)-_^dIGcK948;_S>hH{yrwKOYuWRSpWN7Sb%z*4ts_h z&Y$157_v_S{RP0I-nUQQtx7{USqP3ZY7AW8xi|nJlsBO;V5& z832$^kmbu-7NoRwUQ z3`nFM68-cvwYCLr`X;A$x4*O;uC6{td^vj5lMuBw)Kt^m;2W4jK7h`Kdi#6z`bG0! zI{pr+Af7T`_-ys4ht+mxd1d})oSEns(t}w+$9LAFwop&lKGe(B+yRJGIQ0&F8x1oZ zc`v>#!rkrHwy(W2q!o-68dLpR!#OSEcq9)38Ulf6jN)+j0B8s;bUV1y8TI?8Pwh_% z1EC~Vn6(o$83B3obI;D&z=JC?oEj*P4NysgG6L=EVC`zVGNL}C!K-jsMJK9Q06qk9 zFzEE;VjCoR)d1#x8=Mk)O;bO@ac}o{Wnh8JEZb@K6&uWzz;sDa0(eJoL0~XPTM2|| z0<_>qpF@}TH16AqL#(av-OIdsaV6h<|4|_RKEvSF2Rr!isz`}{`|ow-L(J1qfp0;B zB(Nnm(O`;=RgPybH;3|dJBO;Zfw1|Z_NMme^1O(ay606P7B`HjnnH$_^=KC@@IhxT z2NI3IkAQuYSAi$nRz)ia`RCxbZ-eC>w6^+W0wSC>n&ppr4LQLI!H`?Lr5G4kMX5D# zcA4|sw|=_087l{aMagTZ4fBjUfXl4^For*@BL4`t^_WVQl0 z&*I{|pS9@&w0>@YfY<2*@3sJ(J5}jSOO#h}*+MRIpl`?*bxfV6CF}(kNLphStB!K3 zORG3I()#K^pYhlBh9`P^9vyS8uWtmhETkV{aM^}QlI60*2W(5!O$djqIN3UQes$3U z1~_+6;(ZX$wl3LW+zysy_U&;*SUo|*iw$StY=Y+@zhdOb^!hBc`lQ3275&E`C}6Sc z|I+oBaS+WI@Tmb^N}c7f8pX!u7vs9F7Fdc-E6pux`G32)D|xWb5@+mhaq2 z2qIg4yf=Ny0P02pNjyYa)Q>n)9NL}vTjEHPUX7pP;!ISnKqCc-4SHaeb~m?-qA zR7GV#TP*@Q@LzP`O4>)pseIYDPWO&fTdk~VT(L#xFm(IXXWdDN_XYSCWSNZplUZcy zp9tZ7|BUURaNb^heUybI)FT%j* zF2^1B^?SO1E8lv(d;g}L8$J*8@TW*+neOh@nw@L|4c-U!>+VqfNpuDh|A|V@rHCFvlVp-o8E5&vo5t) zmmiByx#&VR*9I*T{6M>7JKB|30+DZ~f>@>$pn+ZIfI9a>;xB5PgXGJy6t;u5oaAEl z-Y8q=epJ*%5<8f^#7o?7i#LWp)^_93s^d6^9`RCsi1Q0W5r-_?-v1(}%SD%c<3Yis zc^Q0yok#!fIS4=ztEH}lA53k)=`ny0`HcQQDWI}V4Ef0WXluXc$40gDOjYAAf-@v* z0{mq9W%eBoDu;Il5J2ZVU&Nzi$j$lIZvNNn^C;iG{eAoWvaQxHB>|U6|9g?7i%rj~ z{~vx3;$~K+(d9krAJ4HZq3@wGs+CV7J1#L^Kz`NHSkYKkE1$T?DZ^tP?VX!{`dQDpSN+b`<^508rg;t zC$TD(|K6*&{|Gu32bnEc{CjaB_f8X*N4r&-SPedJ5IDJzUMF3$yp1;z#EWDkeCcVs~ z{{PIY%*X#O&R@2bns?#%I$Pb)CUBJVv!g+boKNtO9q@Eal=#6sW-?;+-J(Zg zMfFWX)Sl5GbVX7CV+YwjH~^U;@g0O1w*?JYouBy@i+#ql=oSe~ zX%FytLVl&H`12PpUbJAbpK$~^X=hb5UQLHDQ{G-+Azb80VQf{+yp(ZBFl}Hp@P!1Z%kiN$sjS$x6Wv z`m~CjXtz)i(a>d8Ya%C8|V5(-K7T-e9!-H*Ef`pMY~{IAz(VUwn=qX zq7M8itnSo$z#Z!y-RNA7m4jy+&+qQPv{{zb&LqCfx*FH$<9c0vazoddnnyPeJ%{hU z`_Sz7(^DOQQDGTV)R-psC^^tfBq$Uqonc@Swf_*!kOLf0Phy?*RmhzNA5uRI1d9b8 zR@r2II?{h&h2MAn`&qwt_r6;HsjYIx)i7J;YqDcH^YHx5j>oU^u_Ea*ZI3Sna zP{KS6DvB6cH;HdmUZq$Ca@MGRQqp14&pPD+=z!i(88g$zJO1fgi~352ySv|_1DWlm z2lPCDL2lcj>y{mL8y(ftv%W3;>sK$^J8jaDblGa1=)ey>V#yhJ;4<&$Qr&O3 zsBL7P^o9ij5Ld%;ePpg!;QmZrg zhnfEyR|E}oj}Lmple|v!r1|_0TR?|>O_?a~pH)A+&wjJvW1Yy8Qqgym(C7;sJ;zVv z;27}k-P^VcM_VcE6KWqHvh<0i8h*44d(-0?KJmnDN)LjOzb+cOvV%Kfl}<7Tc~_BQ zs>5$q?(6oK+ABq#BvziEoxW=4RQW3A@TG{uG=-9yatYspw=_)uUkE-s&1V;9eL`}W zPThUB(%cT;+-23MUOd>Lq(gy?;F2cG7V1-?f9dx6aU7QsoW=L;MaSw0WLGv9-lOdf z`!+lJBT>-S{oe;U^X+xlwVj~^9FI1myd$2)0z!Q-t_S)(9^3kF|NH;k1_{r$?>^Y= zyKnvck6-(M!sy34pUP@St>uHiwXehWJ$280p}YHgf&=u)Qn;fol7mAs2EnVKbUuRt+JN?~v@0(5Z?TtYf z<3Z_*5Kq`Q(WwpbzDWx7QQyz+<+h<2%M+1;d66G}65XFW#A$ z$c?`--8O>vALYq5S!uf{K>S9YlDNRK!@8bvIHH?Azx(*U#Sx#@b>D6WdQ)OmQh8jZ zE6YXQ7UE}M6qU8(wYuHQNv`Fn6giM**119(@ptgg^LqK>MYCgfcMr|}tZk+KZC|nM zXS+Y$Rk|3!NoLz*hjE-2b+wC2<7L9fRYJ>@S1lOE@|nJStxMXQuaus$JOlJDVKd38q)T;W7cJAjw`k912Az>Zoud94N z=p_4yE4FS{DYz_T7nSI4HgGlBqp?)pgrZOzjkaF7Ox1Go7b_~E(=#%EaG|~hShQeA zYv1*;?Q-cW#@#Np?Ow@G)KaH(#p7>0@5f153ce9DCt5=_QZTB>5Wiv)MBydnH-mj9 zExb48iD0q|VW?(epM>tb@Coo3ykF+y+d|1}v5YgU|7;shUVixNzxsU-p2rAzC>03+ zz(WrzCfzAX(9{qX6r__P7J{@lS{zyqUa^w{=1>FpyYBEeuv^#0C?6dB^a)#c^43q; z$h(7+HR)`hi)TP>x0zVAJqlPxV-v3j|5C1rN|QDd(;d{d^&xdMlCrEv-?mb6hKfI9 zhbx@;bmnF}iF8ZlnazBYWJot=%LXd1#AkWm+#Vu+tXoy zt^}oQGKO>A0H|8q^GK$k9J8a--i<*#nFg0^FXvjF-TA(<-f#b1TweCAIE~*OpGy(c zpv!~v=jT^j@b=RHF;;G-QKN&T%!F2MKQj^OV7MhZz}bEa$uo@P!^3@(Q2=2K`XivL zm5=TDdfZuK8ba2r%20V<&=$ZW;<4=80lE5bkHsx~PTZ*56LpAZ*%u{8Y3V0k_zWkP z|GPE|=dNM~#F++4@xhKZWOk29WQaveTq*Igzl3(f1PGpC%5BDSA03w=gURdKae8`s zlrNvJX^?Md?t~Rw$)h$yJ!G_*6h2ru0m=$vIS|r1cx`sx$<|?d*E&x39yHdZUq)MI zqw$~{9D%{xL9y@e?z6W2d_Q(xVEp~#%N77zS4-KJ9Gu`Y3lm3E*MNDE?|7CzKyMAm z!;B?M(T}~11dae#MjK&5!)Qi zl+(&)zm3ToJ}}q@-3F~5K=44b4|=%1ARnc~p*uC#CX0DiA_ZKc7&M;fp62qCbTn)%`GQNC4UzH&{jXVS_#4tlS!FB;YR~#k5*2e7Z2!GeEW$?J z%hs+Q;2G7Q+vK?*vOo3X1AK5?mpl2>pT2MX%A4DRv+$ z2gQC?V4sl>+|a#*Yq>wsE;6xB4~spdHU*04w?i7{ynI7oUrqA#$mH;Y{8yuc z^a?bh(m($2U9+z_q0;i)c1c?sJVFtY{##vXlMT%B>EC@Y{Nm!p=6k)|;w_(rCw)rL z4^r#k5c~hZZ>eqa>g5ah>p%S@Qrc;eUw`>+YxBoO4EnAMtr~$p3n^uctucv|z0%($ z*CDVx^2$KE5bu=mLy2#yoM}$VEPX9~#-=mQN$Q=)bKFmM-_y6-wQ*QE+b`f`k3lWj z9@PIw?miIf_Pt#uL{}6qHNKp7s`gQZ+K~hO>GQC?#2`KLZoBMA9c0##2K{y1GolkJ z$lIVsTZPV1*(Q{q1iv~akbDT4k&rFuiT|x_tI@~J2a<^6B3;)>U3ldRVV{tUNWGw+ zyt&=_~czSLj<`qRGj_VF0c z#l_o}&-!#<`}&&Y#wYnvbNo@M!te*e9~zUR0&l@rHei$|Ce%F9E_}h`;N#%IQYkpX z+tmNs_e%S(QpRs4887kwk+;+6{WI(~wD+&A*eJ&s-=X5{vUv@x&_F6`az+~zRQMG3M??>W^%r1kK2G~hSUsOkvRnvad zg)eqs=SmfrSDN2rgPFdZ69z7qf-{vNhxlSyi#CJFH1ZP3QT!?>B-oMOw&3R1n7JL* z(9pqn7tRwZ+-J6uk{Hhnuq<7L08U07v%X!pXN580rLfsR*ZVT{W;8{cpc!w0IrcPsGoMBM_R6o1M^2G7Eo9q$_1E9qAGX9U4Pl8vY^Nf?V3pcf5ewijDfZq*C1W+Tz?u(~ALjzv zcsT37mDVu+QRoH_Y|V0bYmlfD@RFd?ru@kKhy43lc)r!54-Wdf*WbR$-~Y!y+Sw4l z{@S;EEirR5>O^FFECmyj9}?d+EraQVUs~v^Ji@>1EAeyLWc*D2I<^#^F+&KS+pN;y zBW9eRi160fdts2j{N<-{&Wi=jm4d9bCNPMw!5&WZ$;m}Klfh*^K|@HNG;xe*Nn6tE z#3i>a!q(hPg7MRXgS9p(_xKGpGa=h;Nxqg&iHwOTRR(3G*PxC{wQPfU)1@MT_ z+uwhdZ{Kc8KF0Z3ugi+mFy4avbm$*RlUZwrHk)3a>ihVI-v>LO@7kp~wgnw*ZCm37 zTNnA;fB(CDz5dpzu&%>PwBjBMWYF8&n*9uwDtq)txL$p}VOJ<^*dxhy_3Q6H|0uuuO z$;6q|R(lL+*5ECUomj{=8S@(T65?@URoiORM#-j9&s!#(9p9JOg<{#+$D~o?ylt*7 z=gF4_UzG3c{T4h`%}HqDE50t#&8t*)_>0*9EJtk% zGw{lKP%8SgLP0RCah(iE_H6s=&Up)9n|{}er@`d5n-=w9WZ-g_(f@Zlb=L-y2}>*o zUKg&rAZ~!_47>rhQrlFRNFF>qd}{gh?OrWZFwzTF@lc~%h$g3pjqO~B%`6vO^?Pz`h?-= z+x+Fve`+xVrdfosi4dspq(8;#;NC3hea3g|d1&afP5pG;AI(C~m|mtO2Uh7Xd?LyC zsNWx3)jm93Z!z3&^5W_T+NxGYlWS~sSYnr>vdWB21_VR>zt3ow!4KQnC=*sG9eipr z%4LZ*kkZ{Ba-c(HC@(zrea3lO$1Z zv$7Sm5H8Tog4K-I11zFWeC6Od@pEv*KOe{Bk2Iqx18wr<{X?{E>bpgI=D>dHzmQ!> z{U`l0Vp_X=*MpzMcc(i$e-r(^u)V->%SlH_8}Tw`MfsAlxsvY0cg}O-S-;(*0mknP zCbHd@olILis`@WPH)M4Q8WJLON6$j~FB8sjUv94dOq2WgH+R3ZbeETTE@9HE(XZdR z;M?`{)+dZOyV6*J^woO)&11eo{{E~hOlau85}nG;tg?fuf>k=kQB*L=I|pIo_26A; z-B2V=OcZKw+w%}~nC_o>etvE=`g3Cip-wA+>RA)K@?`n#;J@DZX<{hK>P^G~rE03-xG=m7YMALRVd zgBb(V*$L@0DY9L_vB*zFcmNDeM1QOQ#&#=tWdk@^xQ(PCAJB29{Q}5 zv$Iz%U~|6(4{W5t){-X+1@nmDW*EX?<=_m`Gkr^$c|;gL!EV)7?R>%uuLIyZ7%PZt} zNxm< zIx-P76Os#*u>`@p_LpMca3^Qe?Mcx?5@mXaJDAKLr{^}d6n-uTA${rewsU@IRUO-R zfQafzTVdE%uu*iql)|OKUpy*hpA)2O=DjjlMb+pw~4u5uh zcqR|>Ns9ByLKl8U=DTy=Cwe)w&GMyM%XN%e*GQE3$n-_oTJNDL$aZ%>{-mwmd3e0t ze7{?=9a?!perV()=vb({fB&w@`TfJal-Y>EvsU9y-PA_PGA2?)r&m=A?GfY#NyfbI z567@r&JIbidca*QHp}$TxlSx@uVIJKkfvS^Gh$$FqW3t(Fi^m9Z$3 z?R|xrZlcekaI!<$?>T8(jQXx7U$=pzPxATGm!@Zrk57fXxev=~AGm|YiXcqZH~g@{ zhwhV(iL$Kl3}SOdXXwN4oowp#y?T-QEJ(7vbH=a(BB7%beYK4;UA0q6_*pL>sPe## z`<*jI&rw_7>m@l~-96&1r0`h=u|%b6ZM}!`!k?9+>SfS~eOb;^0s|%G#lKp|K}=XS za{iUdF))DSCm+TK(WNbKv~x^U0get4>n@8m?7!Xo&YPQ?-fux0k9;{`xnL4%6$i;a zP`|?gYaNBRfl{T_KtjA&fLUBUq+g1SM&G5RpZGDy4J26@I0V{aH3*e~_qp#eTl-`G zUv_v0+Nk?bw94Z-en!&y*6;FFge>cxhp%YyRe-+Z!}axTyO#sF6lVf|B=dI+^FEtz zb?bwI{`>#=zyG!knt!g2Mqy+x9RsG^7O6hEki3V?5S`h_mg-_cWsGb! zwMY0aO29ilaV!wO|MKOFwnEq^;eaFHRehJJ>N|O!m~3^3Z%ntQUlsPB zbdB{lcuD$+EWMBV_<$A5;W3Tk7*j@`MArfxr#dq4K|=s?KVaCw;H1(A<#y*&D95?E2(ng?8?j)6m(ujP+O(>ab~*Lmn88F{ z4+$_VG#u3#IK)^0L+raX-mL$imnbV~lNjn!11^d?x_gBlv7z6iOa@w#?@%tvgcp(D z3mkwq+}}e?D0!oHEq*U1caM8Z*?44NOo}EdS`M(ad-8@EwzC9U7R1ec-Ak7pt0ebp zNd7Jh#JQ+z*cnSgkPz6XVMxN^_YKa2s$RSmN5|aHk8Wf$e zWdmhhkvQv2309?W4nQH?3pWL1?)A0&bW72ZH-#u(T;WMjb_Rgp{zoh_6} zyd>xfr*x7%LTyfFcu`%Rwd0|GI-6Yw^N6|uY1t6yvs4{Ro@n|`gVDN0PZ?^W?|=Ay zfc(>wZIyO&^?GdebboILi0hRd5Sgp5=RVyyIF_y_{!Ctzmiz5@ABMpi=jNblV8+=# zl#ayVU}q|1uszC)x-8w8_q?Q~E!hb?>ikTDHp>$OO*>u_(as=R84X&`=sy6YIc-~@ z;?3*tx6ahP1?&M&1LQ)Du}z|!_aEMktzGZ$AF~QO>?fI+wL9@0{)Bq;R++e@$4uitGQi?`e0 z%x{~ceotNh!9D>gEtoX5ZKgxnzz0k_Y`?s)0rYR)y&d0e>u_#1G@aXeEoCE~1g5q$ zzJjszWPwhHKV#@nxXdj~c_wkIV}rJu?V4Lkip{>%S<|_tAIKwfXGIWpef@6OfQN@) zb7my^8Szrb#o|kMahXv6lRrr{=>O!Q@y?!r&hgA&hJWpj@^(F)KgS8nDElAvA}Y`X z;n1gCvS3&!Q+@>XC+bvAWqY0nz8I@!AD=#rZH&{W@)WD|!QEcYXr$kMK*?zt0_{wn8PJGTNSxu`A~=p=qxS~*j9{NmE6 zKBb-kxeZo5JpM{ydqp647c`*XLmit(4SXWa&>aD9U5X+m2Ae|prD1Bw8gu{d<&K}I zGP6Q=b=vD|dyI8DBQMh>FQk>EL!gxS9wqly(e3@#t&@5@e(m{sop~yxRg25Zq?BJK z498iYOj=t84#Io}f-EW90_2iNz<23y)e1sBV}}@cFYUfP6TnY`d@QeZopqF^vism; zq(i?2gFVeZh4OR-v&#Sd!!LHM0a;+Z2WC1AzRoh(DIf{8lw@a3X1F&CO zpS-IAV|x+pzlV?FRG>eGcD(h|CYc%9ijSq?9d**r1EIL0ea+Sizb$+=DgT9`sZDf>^8$RERb?a<^Z}ziWLIZC zqswjkHIf_v=xhqiVXF92J()<#OC)S@r?V2uE(i2$ZM*lW4om5I@kh7VeQT34efvwC zknrZst1;*>&P(_I5__T+z{B(@*;cpdig?`t9WEv8i$Lf5jfsLG4{ z0&{wWJ5PcEyRx&L+S~98=!QwR_&e@}uc8x>b;9z4pNDJydQXdW&?3fpm20O(95+@! z#};D-lxb2FfmQ+`DE;p>Djimwk@d62)zepVUz}-gCs=oL zx*qp+o7pB~fl<`;KQJ=+K}AQZAA#OOo1V4-TAd)G{*RuG+P3)xc`e8TnS%0nx{yD) zeP=5Dj`)pWGRdl>t?!JFk9vU#c0%yGIx$06t*bu7ne21jIk57q{Rci0_#9j@H3Gf9 zj0yfF=>$!m$rbZ;a8T{-Dz;b&&qqY=RlkQ)E+>I0x&ad<__FD-_KV-Ye>aXU$u6B+C?H+!N{107 zCghxmXzrXx9_O9;sv|)iznrP=?VW7-R{)Mm^WuI))qX`mCb@yoXID)2Pe(Jme%6D+)R@73-5ZGcM8 zUi%E?6sq;XP#~3PY~87PZxbq9Vx^~@;KN@JLGxNKeUd@eb$l+(Fe3JZqY?RWBa&!m zQ288>J3gZmI_p0=DL4pdX~plMJou;7HV>iaI)nB3S%9#lOqp6#whL{&Aeq`|;!FFN4?A%=6(0~8;e;I?-I*8otKY{jw`Db4}s4EA@nVZb5uGiPs zzIqyF&`pfo^S1{HGEmh7RL&6w=+@79!t(&{Qt*YLj9k41^CQUV`%_S z&->BI5h0|Zy~vLYj=e-{$V%ukJDT}mZVrNjEN2IW_Liyt=J>zvF^`oC7h4DQ{_$hs zMdETP+OTENgqWv3)QM}cay|nAo_5LESd}MxM=0p9thfQMU_e@s?#ZW(JWxTHs;tbj zm_PfE1U%!3ukribCFHX$sidF%9|l>FDGv>Zsb6$_zH9kuk{%?W7dm|QSF`l%ldzTy zG9zbH7Sg`>BxLanPWAk_!0BytH7X=NvqxU#`oj% z=foR==Oi7w81g`wEJ)(4ZqaHq21->vRZ#SY`@l%ZezjBlZnm zzW`QEAG2@Ja~*@A(~bnu|E~cKq$0_q^b?rIt`)k2jvnn`1LP%7n$PEL;9>OFLC1Ki zC-R-KZeqKq+}+>X)~T?i=xkfKgk%QKENjMaZj&I1(D#YoxneLAS)tK)TCkk9qMB&l zA{%9lCQQ$F{I~YqwGZD`T6%@G%yBlR4o+RZAI^;pPz8SD%C&`{22o7+uaN)DX$xxA z9Z&jP^me=2v6asNz+r5W*ZU6GY;m=fW>ozV!Pu0PF3MDwlrxd^ap3W|bYgk-kMlo) z@E2!MST8#RU3_=ib!&&mEe7!eJs&lYzEb%sJju4*)9t|j_{ZOm?{RK;mD4$BJe~$A zf!pzgAy$i+mwE>E$=n^sb+WtiLVe(f|DiqCfiRtXTW6aRVNl=Ns}>J16?O`p(bMVb z_qe^W=ZTXb$06Gz1~GOIDZBg-JH@zwb>GW{&UI1ge*OBE?jN2~mXco#J2}D3zSz#w z;((yf6W`+KBoL?x$9w(b-!3;0n-t%(j=QV}hxF;ItuLqTl)Dg2`ahZSERXP>Hvt|= zG|NsTe%=NKFSh|g-Bo1R0)_z}W>nSWZ9YRsDCA|*8w8lyr)@3=zyjfY>SRaRoILa6 zNxUq*uUpRE>tOi`v0nh0$U~ryG_j@Wd)XvP8-V(Nv4I(4Cl(ApUw3J|x&C(Cv>hA8 zx7s!S&3zpm?9|;JYIQI*%#frx2KefCoI}l2`b<;)!&mfva>vZc&Jbce==dam&5DG- z!!w8b_l6;}%+Pt>Vk}heEz$Y1&b*5U2xHvWKOHpEnFVItC4oAe&aAoYpCQ93I$cXS z3njSRs;j>he01j2Dz(>oUv-och)9GFARG6R1x|M;$# zp0%bc)<#hB^h7`$_2w1$gf7imMIr~Vk!3|7hg{BR5YDO#H@*v|GzXQqk6Np7)PU?r z>0r>8yaFA?{%n`{7gQ+k8~bH|kj_{VPm`%;gW=_eD8{prFUh^h_1wp+>(^tc{qguf z)jTMXj=y>H8p3X;<(*{^s=9)9}-o1NEH#fIdKS5(jfMWo*K*Pi!LZ^OqK%)(j zek3epK)}eHy=2n=z!4Fky#^4P{!d0I%T5~Xn{KhiTafs8)L`Y>u#2FrrDafj9?sNh ztu2bYeoY@ilEkqybUPl)bY>`G=2*%3d`droBzSI)ca#|b6RnuD`4-SG@ofsc96PJY z@2@gp24J3qF(Nc!F znsgVZ0_ZCHYzJ@P==eHiV`7im{;);Py(lvo`%*6Tq%?wyZv7waM48-VNx>OcFb(!iz)+H>K3^M72{0VhyCBd!pW0Ag!q-b=K}JK{^%r|XJ!?;j(27ZQqy6lNb5eHlQ8Y}+r^mpLb9uD>);V-dAs|XUt?T$~TiRb;zHLRHqY(ROJUv5yfEq0V zcR+RlDeIG4+Qh@K94?P`{wz_q|29Ece=YuQ>lX=>68IK!6!;#v*{fh*)1Q)FCyBwe z!ix$@^(zCxr2Y2aHl5Q+qVEXZ0p`|J)SRy1-5DJw$h&l*b2lX-^tvN3*g;Ulc7YXqhxR zKVm{G^#51cD?7$xO2(@2z|g40D!{wZ|7aY^ToMC4!#VgIeLX=HCrNtH{yQTr-RkWT z{MVRF%39dTHR+BcE}DIuzs+qm^-YG2aUb$>>-XtulKY1r>E`PFI9`KOZc3-)yu`w> zjz3vmvspqt7~iohwgc6hZ2)yB96{pV&SQJVtBaK3R&VL@7OT)O+ek|^OV2c*Kyii{ zIabRKSMm5t5_}#q0^50kk{&J&7Dok;(KE0gAAjBA#lIUqso^3|`X6{~+sEp}JPq7q z+$AfZI0Bb`)r zL!K5!0;Xbn&}_+Q=R;}xDgNu94$i6_5Z7Cc0jvNJxCLvC1)&~I z|Kq-wQNAePIul@r(Y-8Xd#P6yzH=*^LeIdk;SL(**O!ITGmD=*ZaLDdEBGT**?zCl z#ZFwFR!Xft{?0>XodVY{dakf{(tC|(!JAk zsXprXlR`D(;uJzqe3!=K-VWnz#}>bmq9<}GaY{c5?Ln(DQVm#~u}G0-XQ|mfDl88D zf(niI*XM!z)(+o~okT_)vrKKfbd|JDYAF5ZEF;?AppuDX#>tYNsMnl->VN9a#Ph5c z@_w@aEkFDsnP-m=cR?z`7*?+wbZ$A9tKQdcTKBfvX3}M#5?Ph@2 zF^lJv%&hZ=LW?*Fh`{6cy)3=Lxa~sggjsn(xYf~D07_?U{D+;uxuKA++2H=EfTriP z4a3WvOaMEVa>-L(6wD=EakCAK9Ii(|ehdx@{rxKq-kd3C?#L4DOg3WxfHm%HyuHvg zaTX(HNdabcH=&cK;8*16&fPN{{u&b*5pH^?n=+?zIN7tSx(2Y;83$!hBJZF#gqTwh zD}chghS8bBujqOk9MRb`V_VVWMaTuuHO(~5fnX@p9jVwRBwqPBPK3^+-SqC~Up~^OkDrEpTks4*D!K#H(<&s^*7Jkg_`!pffCpTM8E=78 z?eM2l1R@ank7jX68A8{j@IQEZ~Cs$YBjPpnypFZz+r)4}m zJUN}^B&I_NF ziZf;5ich4M8;vMeJ6xmLtpR-60sv!6p)Dxze7wuHQ90Bzq|_NFz#koa(+(Sf{s&DA zSkRGsqG!h|NR>1Gn9gesHF-}**=sqru{xbuebnqfU|TVcn&TE_n1KOZb6T{_5Eg&0 zTCLq~xRE93cY*ZVm)q+Pqb!wu_8`v^Wx24&0Al2uaf3+~DoC}&jqHFD;59*wjkD#P znmZ(Q&MJZahTp?9VQI7nB|i3jNU8Ww+0~)Fl>D8G`K(M8ZO94yl(Wxu1+8u^^!W5! zq^hS(O%jFnSMjb73@%i%p3^V@Gnd3n)NhbIj$DfD!lxx=9(@_hOY*&u1EVeMbx(hJ zYKPfBA)>Td*#Vsf%0?T+u>tV@%jYH1uFY<)-w%1y?Ou8Bp!qxO@`(xtG%)1u>{Q$G z```aCc2~eaSPFVm2Cw6!FM7omJ}+MU!tY7U=PioQzK}4_T>yB_c$V|{4!(ic3qddI z$UR?`VO_~~ad9)YxW`=MJR5m|30j`|3%dJ(PIB5yR_GI-efOn%pcSbrBky1f6tXO3 zL;m@{{chMR^{L`HOUY3jof7w@s~|D{o_uY*LXMlxaQW}0pOr?aVl{T@M1`BNlgsh= z+5H6C*$xdFX^`8tgA+eP(Lb@h1CX6jl6_TbXM#tY&wdRf1CZv~cWv+Ro-b53POn@lpR{od!Q2s3S~kDv8=o+^R`bs$g!)--4YT-+ zJfj>Cs2-Oe*@t(0=Nobh%-|VGWjfOobvYas?;|g@y}bzYV}i6{7p zzJ9Bp-xoORsUwr`W)xVuJzSq{QnGHfYb&YVk1hYSFM#cp5|$WEdmH87msvh1T}sse z+65YAj@jjVkf$EmB2;HoWk1^ASr+ias0PQD$(ANPi|! ze~;B%j+5hAuF9me#jS0);&6@Hs(jrS@PVCGjSiaLiFN@W4RvAR;>yxikAY4^Sp-Dm%5Vn>M~ZgJ!M|%+vo(^$ERbqNz}X9dIH;%n9Hq>&9|H6IAkw)F}7QE zzcI?AN$z<5q`JCZO$&w$_-SXqL4-^H;Wa30{=Ops(pP`2o@v~38Fu&mC{S0CH(BvZ zu|{{k;}>*cne=XfExPAbhMK>wMwC{udY18TdbwJ=Riy%>T0szoW*8$shDr#`AYQs*3(5=b8Hk3N zW?^uVIaCdH&aq4fgp1DNv(w|LafV*L0w^PMxm!cr+`ip_;bIfE&%+=#RBD1Y3`Q_z;NDHoJ9xMWB@7a9rx1ucBR`nk2PC?2pmqNk7ff=MO3G-9HHu4 zN-MkJo%B4%pt1Ba#{kv!?IxdhzH-pPm3hkBfn{sEE8pk1Lqi8>{h~94j(Yew5LLW` zdNNXEf9X)I;#ADi!8w-?4+lw3mzQG;*t6Es^IYWljGBESfP$c5v4l zR%bK@2k!^}{kCu8MYaBAt z21JFL+y;f_>&VX5GTOrrWjt@WXeu0 zxh*$ZbW4-R4IkE%z*gN{{6QMiY3DuP<2TfYqw$E_78y7o7iuPJ@iO@z+4>etz0KKq zdow${~lh;0;6Z8Wg({9Fe@ zN4atMG)edz-1IqQMZ8Yr!9Z)S$@}2;0k@5yF{rwgr>hy&zGxsc+al66=3Ds-IDcTI zrc!2`QG#c|1GIaUch9T;&Y)l$X}7$U=Z9@@L}#vQFeY?M_3tqU2h*{v{J{4*Z*8DP zLTAmuxoh_Evi6|=NPmB~Y<8q+xa9@Z)5(tU?hCZ3G<+SU?~FkW=%xrzbKAgPm5tXj zF2>4{*VZYLN4nVBSqJx@V_O)azPdg00`9x)54nbF2$tInU5B-N6u1*D9RBU(?;^Ke zYTvXYU=VC@RBDwDo(@oCj!yL z1!*=|ClJ&-J!Rpxy_fyJNFlRtW50DJ|FZq3v$&1cGxBh*@tdqe3xbN?Z-LNf$4-7p zU|WQT>w6kOKA(Pur5A)KwsWgV43_XhcV3XP>j@wr@a0ecBk7!A6UeB9eYYRFO?%90*U3q` zx^M-0g|UfCXQeaSz5(W;>pSG0_p;7G6k{!Xpk=$Ss}$N`C1T#lSa;#D?aeeOnMWBy zxhgBKZm<1}E#L^xWqawvF0LLhb^mB79n7@cC(<=f1nej~50h^%3>L+^Yrf}Y?mJLr z3#oJ-w+9R!M8LG@b6lEejx=LCbdk2|Mt!#DJPVJrT-D9*zWde&OtxU<<>lLP8?qj#k3iEh^E0)#80FtnCX26LE0wlV4@BYtt~1Y zVruY{ng22JpeR;wa(u*@gt4+cTWLY=rXws~dA_oL?+v7yu<>KMdl{MC9| zN}Xo_;>*Z~Gj$Q_T+H%#9{A`bE)blKMvgmC2Yn4E*qYm5Xq&- zsba`Xywm@#XE1Q-GW_@af0}sG=%(Jzb3df7O09l=#aLd@{}^xpIuN(4tmpBsPEe3B z;n4;&6I+0wq=^V(J~Q=p)d{ZkZnqWnne}v3MzK} z=ZW*~q%3hLGna_A_a`1`AEj37X?(BH;+r%*N_~o$U>a8J(*d@7YeX94?~YkS zzidq*$R>cFf{%DK9HxA{R=dCW}E-OBbn``11eRr(JrsPnnKWcGKZ z-fC8{InM1c1r~%F9@T)n%ctyl8H?zu@{to1?TE4Z?rNt0=lL5%m0sGDC7QMxwG&Qh zbk^aNMv!A!rVcc5u2Lc>7&~_0{K7JYJKVq;UvNVpy(qS2gpnm`Tw_X-FQ&ff_IzSOj z7T~48s?%1*N$OhrB2PWPlE0Fh&NF8;fG!8kD4Wzl?g?_r+%c8g=0~rvuF$Qz|c{v3SiarLWY}MSDhlR5x#L z-w&GaA3hE|LMJTqW=?(y%!1DuX2F6aq(1v9x{eWXj}lKP9mAk8c@6m@Pl;!Jse}vQ zs+|MLP=0qTv^}EpF4XPM*lkl_vI=#+V>>NA8xVZB%yaeC+WL1jwsbv=6$__v=4m;T zI)MG#Z(pn&6zj!;+<~XsZg&0+wXK0J$I83|p=HQUg`j*y2g-4ms$%0En6;n!AF?MP zmrQf3CPqcTY&b-D&M*K8qXS>{on^4}mzs>W`bD+4Xr)BV9?U73JPa(-L8|BH`)b!o z=k$EFpg(BQf7FJ?EZ7Jl2*`*_Fr}O9ydS|M=MkU5&H5GFQ&_v{YLx%}Z-1nJ{g*%F ze)*Ig-?j6fP~W;gz^$}kS_L$4SX2K$dT1t_a9n(Cj6+9)zER0nuV<$?1@# zunAO3G44p8ycGF|eQWiKFT}O-Fh68$DWrMmD*m_c-q7!U_;#ECVL+b0Bb~O2Yj6pr zEF>lhh>myq1X;Jjlk{@~Oo*E7piHLJB7g#$GPOW$rRobU;JlF(DQ@*C8-oK9UGiwh z+aR7BS<0I#S%dPgU%y6+Gkn*#Z(dPI%q*70nW-oOe)~(f*>T7W<@++JQ13rsc|?1> zT~{XN*%y+0M$L{2{4Q-!d@B3F>3__Ah}zfI32iXOw#?X=oG48}ys&DQ{I#Xwyq zCg^+Qvo3$3x3e53MhRx?=%09J_mp0dUN4%zqqBh5OSpCJ{th$k(v@F7{O-Ft-v|g_ z{g{QS98}2tC6ubOAupMDmZfwo;{FiyhqFCSe$<8zR#mBHe{lOMl(x8Z5cbC(f6ga6 zUz5M(YMIHkJo6G&eM$ZQ1?$# zR+2`_C(e4WK4-r)@GoRA`Q$OQZi6^)u-7}_E&5}cR=?|@f7*hk&^U3$aY`!Yly