From 6fcfa75a9ffa861c75f43baa17720da504b51a98 Mon Sep 17 00:00:00 2001 From: sayan-oai Date: Fri, 13 Nov 2026 04:32:50 +0000 Subject: [PATCH] Preserve MCP registration scope across client operations (#61257) ## Why MCP servers registered under the same name in different environments need distinct inventory, routing, and status reporting. ## What changed - Keep MCP inventory and runtime status keyed by registration scope so same-named servers remain separate. - Add optional `environmentId` selectors for status lookup, tool calls, resource reads, and OAuth login. Omitting the selector preserves existing name-only routing. - Carry environment identity through startup notifications, elicitation requests, and tool-call history, and display it in the TUI. - Support `/mcp login --environment ` and update generated protocol schemas and SDK types. ## Testing Add integration coverage for two environments with identically named MCP servers, tools, and resource URIs. Verify separate inventory, explicit environment routing, legacy routing when the selector is omitted, and errors for unknown environments. Update protocol and TUI tests for environment identity. GitOrigin-RevId: 074a3db10549438cb6aff33eb7bed10791adae4d --- codex-rs/analytics/src/reducer.rs | 1 + .../analytics/src/tests/suite/tools_tests.rs | 2 + .../src/tests/suite/turns/events_tests.rs | 1 + .../schema/json/ClientRequest.json | 28 ++ .../McpServerElicitationRequestParams.json | 7 + .../schema/json/ServerNotification.json | 14 + .../schema/json/ServerRequest.json | 7 + .../codex_app_server_protocol.schemas.json | 56 ++++ .../codex_app_server_protocol.v2.schemas.json | 49 ++++ .../json/v2/ItemCompletedNotification.json | 7 + .../json/v2/ItemStartedNotification.json | 7 + .../json/v2/ListMcpServerStatusParams.json | 7 + .../json/v2/ListMcpServerStatusResponse.json | 7 + .../schema/json/v2/McpResourceReadParams.json | 7 + .../json/v2/McpServerOauthLoginParams.json | 7 + .../McpServerStatusUpdatedNotification.json | 7 + .../json/v2/McpServerToolCallParams.json | 7 + .../schema/json/v2/ReviewStartResponse.json | 7 + .../schema/json/v2/ThreadForkResponse.json | 7 + .../json/v2/ThreadItemsListResponse.json | 7 + .../schema/json/v2/ThreadListResponse.json | 7 + .../json/v2/ThreadMetadataUpdateResponse.json | 7 + .../schema/json/v2/ThreadReadResponse.json | 7 + .../schema/json/v2/ThreadResumeResponse.json | 7 + .../schema/json/v2/ThreadRevertResponse.json | 7 + .../schema/json/v2/ThreadStartResponse.json | 7 + .../json/v2/ThreadStartedNotification.json | 7 + .../json/v2/ThreadTurnsListResponse.json | 7 + .../json/v2/ThreadUnarchiveResponse.json | 7 + .../json/v2/TurnCompletedNotification.json | 7 + .../schema/json/v2/TurnStartResponse.json | 7 + .../json/v2/TurnStartedNotification.json | 7 + .../app-server-exports-experimental.json.zst | Bin 179514 -> 179469 bytes .../app-server-exports-stable.json.zst | Bin 169914 -> 170462 bytes .../v2/ListMcpServerStatusParams.ts | 7 +- .../typescript/v2/McpResourceReadParams.ts | 6 +- .../v2/McpServerElicitationRequestParams.ts | 6 +- .../v2/McpServerOauthLoginParams.ts | 6 +- .../schema/typescript/v2/McpServerStatus.ts | 5 + .../v2/McpServerStatusUpdatedNotification.ts | 6 +- .../typescript/v2/McpServerToolCallParams.ts | 6 +- .../schema/typescript/v2/ThreadItem.ts | 6 +- codex-rs/app-server-protocol/src/export.rs | 2 + .../src/protocol/common.rs | 5 + .../src/protocol/thread_history.rs | 7 + .../src/protocol/v2/item.rs | 3 + .../src/protocol/v2/mcp.rs | 21 ++ .../src/protocol/v2/tests.rs | 15 + codex-rs/app-server/BUILD.bazel | 4 +- .../app-server/src/bespoke_event_handling.rs | 2 + .../src/request_processors/mcp_processor.rs | 161 ++++++----- .../thread_resume_redaction.rs | 4 + .../src/user_verification_activation_tests.rs | 1 + .../src/user_verification_connection_tests.rs | 1 + .../src/user_verification_ownership_tests.rs | 1 + .../tests/suite/v2/curated_mcp_sync.rs | 1 + .../tests/suite/v2/daybreak_access.rs | 1 + .../app-server/tests/suite/v2/executor_mcp.rs | 4 + .../suite/v2/executor_skills_spawn_tests.rs | 1 + .../tests/suite/v2/mcp_connection_sharing.rs | 1 + .../tests/suite/v2/mcp_protocol_default.rs | 1 + .../app-server/tests/suite/v2/mcp_resource.rs | 8 + .../mcp_resource/plugin_metadata_refresh.rs | 1 + .../tests/suite/v2/mcp_resource_origin.rs | 2 + .../tests/suite/v2/mcp_server_elicitation.rs | 3 + .../tests/suite/v2/mcp_server_status.rs | 261 +++++++++++++++++- .../app-server/tests/suite/v2/mcp_tool.rs | 12 + .../tests/suite/v2/plugin_install.rs | 2 + .../tests/suite/v2/thread_resume.rs | 1 + .../app-server/tests/suite/v2/thread_start.rs | 2 + .../tests/suite/v2/user_verification_mcp.rs | 1 + codex-rs/cli/src/mcp_cmd.rs | 8 +- codex-rs/codex-mcp/src/catalog.rs | 15 +- codex-rs/codex-mcp/src/connection_manager.rs | 88 +++--- .../src/connection_manager/resources.rs | 13 +- .../src/connection_manager/status.rs | 7 +- .../src/connection_manager/tool_catalog.rs | 15 +- .../codex-mcp/src/connection_manager_tests.rs | 59 ++-- codex-rs/codex-mcp/src/elicitation.rs | 6 +- codex-rs/codex-mcp/src/elicitation_tests.rs | 34 ++- codex-rs/codex-mcp/src/mcp/auth.rs | 7 +- codex-rs/codex-mcp/src/mcp/mod.rs | 93 +++---- codex-rs/codex-mcp/src/mcp/mod_tests.rs | 33 ++- codex-rs/codex-mcp/src/resource_client.rs | 5 +- codex-rs/codex-mcp/src/rmcp_client.rs | 16 +- codex-rs/codex-mcp/src/runtime.rs | 57 ++-- codex-rs/codex-mcp/src/runtime/status.rs | 18 +- .../src/user_verification_elicitation.rs | 7 +- codex-rs/core/src/codex_delegate_tests.rs | 1 + codex-rs/core/src/codex_thread.rs | 20 +- codex-rs/core/src/mcp_tool_call.rs | 12 +- codex-rs/core/src/mcp_tool_call/recorded.rs | 4 + codex-rs/core/src/mcp_tool_call_tests.rs | 17 ++ codex-rs/core/src/realtime_history_tests.rs | 1 + codex-rs/core/src/session/mcp.rs | 5 +- codex-rs/core/src/session/mcp_tests.rs | 2 + codex-rs/core/src/session/tests.rs | 3 +- codex-rs/core/src/session/turn_tests.rs | 1 + .../core/src/tools/handlers/mcp_resource.rs | 4 + .../list_mcp_resource_templates.rs | 9 +- .../mcp_resource/list_mcp_resources.rs | 9 +- .../mcp_resource/read_mcp_resource.rs | 9 +- .../tools/handlers/request_plugin_install.rs | 3 +- .../core/tests/suite/codex_apps_protocol.rs | 1 + codex-rs/core/tests/suite/hooks_executor.rs | 3 + codex-rs/core/tests/suite/hooks_mcp.rs | 7 +- .../suite/hooks_plugin_policy_refresh.rs | 4 + .../tests/suite/mcp_extension_protocol.rs | 1 + .../suite/mcp_network_policy_compat_tests.rs | 1 + .../tests/suite/mcp_oauth_refresh_tests.rs | 2 + .../core/tests/suite/mcp_refresh_cleanup.rs | 2 + .../suite/mcp_startup_refresh_http_proxy.rs | 1 + codex-rs/core/tests/suite/mcp_tool_cache.rs | 19 +- .../core/tests/suite/mcp_tool_exposure.rs | 9 +- codex-rs/core/tests/suite/plugins.rs | 16 +- codex-rs/core/tests/suite/rmcp_client.rs | 3 + .../core/tests/suite/scenarios_exec_tools.rs | 16 +- .../suite/scenarios_incremental_tools.rs | 11 +- .../core/tests/suite/scenarios_mcp_ema.rs | 6 + .../suite/scenarios_mcp_resource_messages.rs | 3 +- codex-rs/core/tests/suite/search_tool.rs | 1 + .../discovery_grants_tests.rs | 12 +- codex-rs/core/tests/suite/token_budget.rs | 3 +- ...event_processor_with_jsonl_output_tests.rs | 1 + .../tests/event_processor_with_json_output.rs | 5 + codex-rs/protocol/src/approvals.rs | 4 + codex-rs/protocol/src/items.rs | 4 + codex-rs/protocol/src/legacy_events.rs | 2 + codex-rs/protocol/src/protocol.rs | 11 + .../local/rollout_migration/legacy_event.rs | 1 + .../thread_history_materialization_tests.rs | 1 + codex-rs/tui/src/app.rs | 5 +- .../tui/src/app/app_server_event_targets.rs | 2 + codex-rs/tui/src/app/app_server_events.rs | 11 +- codex-rs/tui/src/app/app_server_requests.rs | 2 + codex-rs/tui/src/app/background_requests.rs | 5 + codex-rs/tui/src/app/event_dispatch.rs | 24 +- .../tui/src/app/pending_interactive_replay.rs | 1 + ..._tests__slash_picker_overlays_history.snap | 4 +- codex-rs/tui/src/app/tests.rs | 6 + .../src/app/tests/backend_sessions_tests.rs | 1 + .../src/app/tests/background_exit_tests.rs | 1 + codex-rs/tui/src/app/tests/buffered_replay.rs | 1 + codex-rs/tui/src/app/tests/mcp_login_tests.rs | 94 ++++--- codex-rs/tui/src/app/tests/mcp_startup.rs | 5 + .../app/tests/session_lifecycle_requests.rs | 1 + ...ctive_thread_user_verification_prompt.snap | 2 +- codex-rs/tui/src/app/tests/startup.rs | 3 + .../src/app/tests/startup_warnings_tests.rs | 1 + .../app/tests/unavailable_commands_tests.rs | 1 + .../tests/user_verification_routes_tests.rs | 7 +- codex-rs/tui/src/app/thread_events.rs | 1 + codex-rs/tui/src/app/thread_routing.rs | 4 + .../app/user_verification_requests_tests.rs | 1 + .../tui/src/app/user_verification_tests.rs | 1 + codex-rs/tui/src/app_event.rs | 1 + .../src/app_server_approval_conversions.rs | 9 +- codex-rs/tui/src/bottom_pane/app_link_view.rs | 20 +- .../tui/src/bottom_pane/approval_overlay.rs | 19 +- ...rface__tests__slash_popup_footer_wide.snap | 14 +- .../src/bottom_pane/mcp_server_elicitation.rs | 73 ++--- ...app_link_view_generic_url_elicitation.snap | 2 +- ...__mcp_server_elicitation_boolean_form.snap | 4 +- .../tui/src/bottom_pane/user_verification.rs | 10 +- .../bottom_pane/user_verification_tests.rs | 3 + codex-rs/tui/src/chatwidget.rs | 6 +- codex-rs/tui/src/chatwidget/mcp_startup.rs | 62 +++-- codex-rs/tui/src/chatwidget/slash_dispatch.rs | 36 ++- ...artup_failure_renders_warning_history.snap | 4 +- .../tui/src/chatwidget/tests/app_server.rs | 2 + .../tests/computer_activity_tests.rs | 1 + .../tui/src/chatwidget/tests/exec_flow.rs | 2 + codex-rs/tui/src/chatwidget/tests/guardian.rs | 1 + .../chatwidget/tests/history_projection.rs | 1 + .../src/chatwidget/tests/history_replay.rs | 4 + .../tui/src/chatwidget/tests/mcp_startup.rs | 63 +++-- .../src/chatwidget/tests/slash_commands.rs | 28 +- codex-rs/tui/src/chatwidget/tool_lifecycle.rs | 2 + codex-rs/tui/src/chatwidget/tool_requests.rs | 3 + .../history_cell/computer_activity_tests.rs | 1 + codex-rs/tui/src/history_cell/mcp.rs | 24 +- codex-rs/tui/src/history_cell/mcp_preview.rs | 9 +- codex-rs/tui/src/history_cell/mcp_tests.rs | 18 +- ...ests__mcp_inventory_connection_states.snap | 2 + ..._tests__active_mcp_tool_call_snapshot.snap | 5 +- codex-rs/tui/src/history_cell/tests.rs | 15 + codex-rs/tui/src/slash_command.rs | 4 +- codex-rs/tui/src/thread_transcript/tools.rs | 7 + .../tui/src/thread_transcript/tools_tests.rs | 1 + .../src/openai_codex/generated/v2_all.py | 49 ++++ 190 files changed, 1821 insertions(+), 502 deletions(-) diff --git a/codex-rs/analytics/src/reducer.rs b/codex-rs/analytics/src/reducer.rs index 683685f71e..3d2b32e1c3 100644 --- a/codex-rs/analytics/src/reducer.rs +++ b/codex-rs/analytics/src/reducer.rs @@ -4292,6 +4292,7 @@ mod tests { ThreadItemPayload::McpToolCall { id: keys[2].item_id.clone(), server: "server".to_string(), + environment_id: None, tool: "tool".to_string(), status: McpToolCallStatus::Failed, arguments: serde_json::json!({}), diff --git a/codex-rs/analytics/src/tests/suite/tools_tests.rs b/codex-rs/analytics/src/tests/suite/tools_tests.rs index d84996e7f3..cdd20d1176 100644 --- a/codex-rs/analytics/src/tests/suite/tools_tests.rs +++ b/codex-rs/analytics/src/tests/suite/tools_tests.rs @@ -237,6 +237,7 @@ async fn cua_tool_call_lifecycle_requires_a_start_and_deduplicates_replay() { let item = |status| ThreadItemPayload::McpToolCall { id: "cua-call".into(), server: "codex_apps".into(), + environment_id: None, tool: "js".into(), status, arguments: json!({"script": "synthetic-private-input"}), @@ -797,6 +798,7 @@ async fn mcp_elicitation_classification_survives_turn_completion_and_preserves_c let item = ThreadItemPayload::McpToolCall { id: item_id.to_string(), server: "server".to_string(), + environment_id: None, tool: "search".to_string(), status: McpToolCallStatus::Completed, arguments: json!({ "token": "synthetic-private-input" }), diff --git a/codex-rs/analytics/src/tests/suite/turns/events_tests.rs b/codex-rs/analytics/src/tests/suite/turns/events_tests.rs index f9534d610b..2513b5da13 100644 --- a/codex-rs/analytics/src/tests/suite/turns/events_tests.rs +++ b/codex-rs/analytics/src/tests/suite/turns/events_tests.rs @@ -490,6 +490,7 @@ async fn turn_event_counts_completed_tool_items() { let mcp_tool_call_item = |status, duration_ms| ThreadItemPayload::McpToolCall { id: "mcp-1".to_string(), server: "server".to_string(), + environment_id: None, tool: "search".to_string(), status, arguments: json!({}), diff --git a/codex-rs/app-server-protocol/schema/json/ClientRequest.json b/codex-rs/app-server-protocol/schema/json/ClientRequest.json index e8502e4d5d..aac567aa6c 100644 --- a/codex-rs/app-server-protocol/schema/json/ClientRequest.json +++ b/codex-rs/app-server-protocol/schema/json/ClientRequest.json @@ -1913,6 +1913,13 @@ ], "description": "Controls how much MCP inventory data to fetch for each server. Defaults to `Full` when omitted." }, + "environmentId": { + "description": "Select this environment's registration. Requires `serverName` and `threadId`. When omitted, a named request uses the same server as older clients.", + "type": [ + "string", + "null" + ] + }, "limit": { "description": "Optional page size; defaults to a server-defined value.", "format": "uint32", @@ -2240,6 +2247,13 @@ "null" ] }, + "environmentId": { + "description": "Exact registration scope; omission preserves legacy name-only selection.", + "type": [ + "string", + "null" + ] + }, "originCallId": { "description": "Originating MCP tool call used to select the resource's app.", "type": [ @@ -2328,6 +2342,13 @@ ], "description": "Registration strategy for this login only; omission selects automatic discovery." }, + "environmentId": { + "description": "Exact registration scope; omission preserves legacy name-only selection.", + "type": [ + "string", + "null" + ] + }, "name": { "type": "string" }, @@ -2370,6 +2391,13 @@ "properties": { "_meta": true, "arguments": true, + "environmentId": { + "description": "Exact registration scope; omission preserves legacy name-only selection.", + "type": [ + "string", + "null" + ] + }, "server": { "type": "string" }, diff --git a/codex-rs/app-server-protocol/schema/json/McpServerElicitationRequestParams.json b/codex-rs/app-server-protocol/schema/json/McpServerElicitationRequestParams.json index 7fbc7e988a..f1e1d4897c 100644 --- a/codex-rs/app-server-protocol/schema/json/McpServerElicitationRequestParams.json +++ b/codex-rs/app-server-protocol/schema/json/McpServerElicitationRequestParams.json @@ -628,6 +628,13 @@ } ], "properties": { + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "serverName": { "type": "string" }, diff --git a/codex-rs/app-server-protocol/schema/json/ServerNotification.json b/codex-rs/app-server-protocol/schema/json/ServerNotification.json index f39713d496..3eb4d27eea 100644 --- a/codex-rs/app-server-protocol/schema/json/ServerNotification.json +++ b/codex-rs/app-server-protocol/schema/json/ServerNotification.json @@ -3117,6 +3117,13 @@ }, "McpServerStatusUpdatedNotification": { "properties": { + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "type": [ "string", @@ -5292,6 +5299,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/ServerRequest.json b/codex-rs/app-server-protocol/schema/json/ServerRequest.json index cf9fb5e86b..e96baf73ce 100644 --- a/codex-rs/app-server-protocol/schema/json/ServerRequest.json +++ b/codex-rs/app-server-protocol/schema/json/ServerRequest.json @@ -1493,6 +1493,13 @@ } ], "properties": { + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "serverName": { "type": "string" }, diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json index 762933428e..8fa3f62282 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.schemas.json @@ -4349,6 +4349,13 @@ } ], "properties": { + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "serverName": { "type": "string" }, @@ -14991,6 +14998,13 @@ ], "description": "Controls how much MCP inventory data to fetch for each server. Defaults to `Full` when omitted." }, + "environmentId": { + "description": "Select this environment's registration. Requires `serverName` and `threadId`. When omitted, a named request uses the same server as older clients.", + "type": [ + "string", + "null" + ] + }, "limit": { "description": "Optional page size; defaults to a server-defined value.", "format": "uint32", @@ -15730,6 +15744,13 @@ "null" ] }, + "environmentId": { + "description": "Exact registration scope; omission preserves legacy name-only selection.", + "type": [ + "string", + "null" + ] + }, "originCallId": { "description": "Originating MCP tool call used to select the resource's app.", "type": [ @@ -15962,6 +15983,13 @@ ], "description": "Registration strategy for this login only; omission selects automatic discovery." }, + "environmentId": { + "description": "Exact registration scope; omission preserves legacy name-only selection.", + "type": [ + "string", + "null" + ] + }, "name": { "type": "string" }, @@ -16040,6 +16068,13 @@ "authStatus": { "$ref": "#/definitions/v2/McpAuthStatus" }, + "environmentId": { + "description": "Environment that contributed this registration; null for a thread-wide server. Older servers omit this field.", + "type": [ + "string", + "null" + ] + }, "httpOrigin": { "description": "HTTP origin of the effective configured endpoint, including plugin servers. Excludes credentials, path, query, and fragment; null for non-HTTP transports.", "type": [ @@ -16128,6 +16163,13 @@ "McpServerStatusUpdatedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "type": [ "string", @@ -16169,6 +16211,13 @@ "properties": { "_meta": true, "arguments": true, + "environmentId": { + "description": "Exact registration scope; omission preserves legacy name-only selection.", + "type": [ + "string", + "null" + ] + }, "server": { "type": "string" }, @@ -24111,6 +24160,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json index d26f060332..d3964185e0 100644 --- a/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json +++ b/codex-rs/app-server-protocol/schema/json/codex_app_server_protocol.v2.schemas.json @@ -10952,6 +10952,13 @@ ], "description": "Controls how much MCP inventory data to fetch for each server. Defaults to `Full` when omitted." }, + "environmentId": { + "description": "Select this environment's registration. Requires `serverName` and `threadId`. When omitted, a named request uses the same server as older clients.", + "type": [ + "string", + "null" + ] + }, "limit": { "description": "Optional page size; defaults to a server-defined value.", "format": "uint32", @@ -11691,6 +11698,13 @@ "null" ] }, + "environmentId": { + "description": "Exact registration scope; omission preserves legacy name-only selection.", + "type": [ + "string", + "null" + ] + }, "originCallId": { "description": "Originating MCP tool call used to select the resource's app.", "type": [ @@ -11923,6 +11937,13 @@ ], "description": "Registration strategy for this login only; omission selects automatic discovery." }, + "environmentId": { + "description": "Exact registration scope; omission preserves legacy name-only selection.", + "type": [ + "string", + "null" + ] + }, "name": { "type": "string" }, @@ -12001,6 +12022,13 @@ "authStatus": { "$ref": "#/definitions/McpAuthStatus" }, + "environmentId": { + "description": "Environment that contributed this registration; null for a thread-wide server. Older servers omit this field.", + "type": [ + "string", + "null" + ] + }, "httpOrigin": { "description": "HTTP origin of the effective configured endpoint, including plugin servers. Excludes credentials, path, query, and fragment; null for non-HTTP transports.", "type": [ @@ -12089,6 +12117,13 @@ "McpServerStatusUpdatedNotification": { "$schema": "http://json-schema.org/draft-07/schema#", "properties": { + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "type": [ "string", @@ -12130,6 +12165,13 @@ "properties": { "_meta": true, "arguments": true, + "environmentId": { + "description": "Exact registration scope; omission preserves legacy name-only selection.", + "type": [ + "string", + "null" + ] + }, "server": { "type": "string" }, @@ -21814,6 +21856,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ItemCompletedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/ItemCompletedNotification.json index 3964c269fc..101bfc1039 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ItemCompletedNotification.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ItemCompletedNotification.json @@ -1414,6 +1414,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ItemStartedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/ItemStartedNotification.json index 861e638fd3..b839fb2e12 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ItemStartedNotification.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ItemStartedNotification.json @@ -1414,6 +1414,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ListMcpServerStatusParams.json b/codex-rs/app-server-protocol/schema/json/v2/ListMcpServerStatusParams.json index 437b60b64c..59d4ef8768 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ListMcpServerStatusParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ListMcpServerStatusParams.json @@ -28,6 +28,13 @@ ], "description": "Controls how much MCP inventory data to fetch for each server. Defaults to `Full` when omitted." }, + "environmentId": { + "description": "Select this environment's registration. Requires `serverName` and `threadId`. When omitted, a named request uses the same server as older clients.", + "type": [ + "string", + "null" + ] + }, "limit": { "description": "Optional page size; defaults to a server-defined value.", "format": "uint32", diff --git a/codex-rs/app-server-protocol/schema/json/v2/ListMcpServerStatusResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ListMcpServerStatusResponse.json index f75a3f22ac..497c6361a2 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ListMcpServerStatusResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ListMcpServerStatusResponse.json @@ -69,6 +69,13 @@ "authStatus": { "$ref": "#/definitions/McpAuthStatus" }, + "environmentId": { + "description": "Environment that contributed this registration; null for a thread-wide server. Older servers omit this field.", + "type": [ + "string", + "null" + ] + }, "httpOrigin": { "description": "HTTP origin of the effective configured endpoint, including plugin servers. Excludes credentials, path, query, and fragment; null for non-HTTP transports.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/json/v2/McpResourceReadParams.json b/codex-rs/app-server-protocol/schema/json/v2/McpResourceReadParams.json index a6e212c3ea..118b23a8f1 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/McpResourceReadParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/McpResourceReadParams.json @@ -36,6 +36,13 @@ "null" ] }, + "environmentId": { + "description": "Exact registration scope; omission preserves legacy name-only selection.", + "type": [ + "string", + "null" + ] + }, "originCallId": { "description": "Originating MCP tool call used to select the resource's app.", "type": [ diff --git a/codex-rs/app-server-protocol/schema/json/v2/McpServerOauthLoginParams.json b/codex-rs/app-server-protocol/schema/json/v2/McpServerOauthLoginParams.json index 387636e7d0..87ababfa00 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/McpServerOauthLoginParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/McpServerOauthLoginParams.json @@ -22,6 +22,13 @@ ], "description": "Registration strategy for this login only; omission selects automatic discovery." }, + "environmentId": { + "description": "Exact registration scope; omission preserves legacy name-only selection.", + "type": [ + "string", + "null" + ] + }, "name": { "type": "string" }, diff --git a/codex-rs/app-server-protocol/schema/json/v2/McpServerStatusUpdatedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/McpServerStatusUpdatedNotification.json index 8efb36bdad..37cd3fd470 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/McpServerStatusUpdatedNotification.json +++ b/codex-rs/app-server-protocol/schema/json/v2/McpServerStatusUpdatedNotification.json @@ -18,6 +18,13 @@ } }, "properties": { + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "type": [ "string", diff --git a/codex-rs/app-server-protocol/schema/json/v2/McpServerToolCallParams.json b/codex-rs/app-server-protocol/schema/json/v2/McpServerToolCallParams.json index 3465e60c83..7508548031 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/McpServerToolCallParams.json +++ b/codex-rs/app-server-protocol/schema/json/v2/McpServerToolCallParams.json @@ -3,6 +3,13 @@ "properties": { "_meta": true, "arguments": true, + "environmentId": { + "description": "Exact registration scope; omission preserves legacy name-only selection.", + "type": [ + "string", + "null" + ] + }, "server": { "type": "string" }, diff --git a/codex-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json index 0cc138260a..2d57b73e3f 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ReviewStartResponse.json @@ -1626,6 +1626,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json index bf0f3700cf..d19c190a4f 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadForkResponse.json @@ -2240,6 +2240,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListResponse.json index 586a2aa11e..105c7db09e 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadItemsListResponse.json @@ -1414,6 +1414,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json index ca46c1894f..28c4b5fbe6 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadListResponse.json @@ -2031,6 +2031,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json index 414dc05459..1c1521eee3 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadMetadataUpdateResponse.json @@ -2031,6 +2031,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json index 4b2f012ba7..f86b85814f 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadReadResponse.json @@ -2031,6 +2031,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json index f0ea2047d6..b5a90f5690 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadResumeResponse.json @@ -2292,6 +2292,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json index 58ebb693b9..aaba3612d5 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadRevertResponse.json @@ -2031,6 +2031,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json index 119aa09d6b..3d224ea071 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartResponse.json @@ -2240,6 +2240,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json index d4c524913a..da35cc5861 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadStartedNotification.json @@ -2031,6 +2031,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json index 384722f1e7..3f60975956 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadTurnsListResponse.json @@ -1626,6 +1626,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json b/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json index 0ee1eda4a7..9007984143 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/ThreadUnarchiveResponse.json @@ -2031,6 +2031,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json index 64552f14c0..fcc6d4ab17 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json +++ b/codex-rs/app-server-protocol/schema/json/v2/TurnCompletedNotification.json @@ -1626,6 +1626,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json b/codex-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json index 74c05749c0..2e5b2742fc 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json +++ b/codex-rs/app-server-protocol/schema/json/v2/TurnStartResponse.json @@ -1626,6 +1626,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json b/codex-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json index e424f8d17b..3ed4878d06 100644 --- a/codex-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json +++ b/codex-rs/app-server-protocol/schema/json/v2/TurnStartedNotification.json @@ -1626,6 +1626,13 @@ "null" ] }, + "environmentId": { + "description": "Registration scope, not necessarily the server's execution environment.", + "type": [ + "string", + "null" + ] + }, "error": { "anyOf": [ { diff --git a/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-experimental.json.zst b/codex-rs/app-server-protocol/schema/precomputed/app-server-exports-experimental.json.zst index 9d355f09caeab553e9c3edb606f64b0916cf2bf3..af91b03abcd185778d488978795bff4bd1632812 100644 GIT binary patch delta 148307 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�sP_w0Q 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%0AN31CpqE|ctS+Xly)-unNFiSwTEub9-w1O^ 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 GEfoe;OD3!U delta 148356 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
66H})_TYb8^8HS-6lN9LchWO6 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

wtW*mx`GHTjH#p*V7Z zth-Hr@IF1czo;V(Tjb}TUdlG)Wae<)TvDrJ?aY5+1i_x4jhoH@et-bO7zYDDng<&S zs%(a6Qx}TSoap4-Nw}RPTN%N;j926J8`>1l_VYX!LMIy*sYdZFy~O^c1n-KzpMk~I z07H&P1t9+19>RnZ?CCxr*aWjkbI~S$4y68nl|P?`cwYW|hh3UKlMb}ea&HNl@cAb^P2Q^3D`e^sHDj zxKhYF$so(V#@uTfZwj>6*>MI)eUya@~O{YV0M`-fP6 zRE7v94HdcBjpn>XLTJf1JaCML+jf+PN&~ans-?ZlK6rLgCp^nutDU{p!;hs9a~0^| z?L12w+`!e=cC^Ug;vdunI)i|WxKejyaF9%yGSHS$ym$6Tnl794?$H~|uLuo}C0_Ro z&utJ)!=@#L0Vxb3zTnc-A>o-RI7t0}fd+@cbivC1&KoTt9phL;ha3h>^oD!^+DMRV z*Pv~KZm3ZovK`qqiHbP|J)IB0nH^UdKzLHW!(f8}VXd(t0rI>huOHd-IVjUVXl~Eq z$1j-5en4mfpv9^^(~xB|<%u;8{N{iyuz~VPAg6dtFlezph%x>n+O&5I019w_0eQ~p zM3P0f8l|vNID*X{pE^n_=z?8VhA)=CKtkKd7eUW93fishV`~XWQOw~~Lf4QW{)pO4 zr}#AP?OzP*la#+}56j~**OP;ap0bWGl@$?WOFSaGIfjGq3gjC4s`!6UDo!SybzL{I zpf#;RF9M$0<))8Y!4;b5z!JcJQ=O~f`;)(c#zI><0#aTcmxcCvFcp*V%Q}|AUFR>0 zBnrWu9f`hoq5b72GpV#HnKf-F14VkDg2Yb%I8|<8cw=@kgDdzFKoCF>Kp+qZf)GFi z2mwNXAXo$;KoEo>KoB4yNH_$;ImKa7I%+>(IcToFd=w7nP4)mdWA{yejt4UPW57sn z8!c5)PADoB4&LWUP5p@zEYHclwD2UpP=ye3P>y3uG@K)d=Ep%FBJkItol7sJs=XcG z9oA!8+sVqv7DC;lwvY?ekq7Oj2qT;t$t9>r*CudnF55=4mbme8Y=x2%y*E8QtyR*c z0y>;EcV3VzrMLY3zsy>He6WxT0Q;t~i46cJbO6|;9x1a%0NjNV07v2;aijp)X=FUI zC~5VJG;SLJ58I`7kk|8ejru#T9AzFw>7gYSoBiUEt1;4M~xaD;hF58uBh#A2MFz^m)pa z;asfvJfD0Gnd;wN>Ks?|5H2vnZ@3{}e*MJ!hRg#2Ji$k_dckqXG>}97+*ryXU&cf< zhx|qK0tC1(ajzwR$Utu0VYFw3GJTHa9&(0y0Aq|7gFa-_^sG@#zp!H~t3)xM7!egB zuUJc70Q$O7ts=4oaKJVlHIyXxc^-D zNo3wI+B@O!3CY$yS*KZ;l%fl85Y)B6LPBFB0islij^ zH9XG=rXp7ldCUR8&s@uXJJekOu<+z8X0$nrUj>^4%E(p9$Q)!k7CTZAz<;_Gfn6N8 zi9ajZQK!v+$X+NZl0RimyvBx@sWnUsRqTg}+{u;HnUSwt+%zLBBV0lqgjN3!3`i$R_|3(x!=4czgMaBVQO+ zwByL)JnZlLg_(@)LPZ%S?VP4uAoJQC+qfn=vZ@Au%dT`}Rp`TGxinZ>tZKa1kpJTgE$vZ_G!le%L?FS(lM zH0KcnRCToB7bj#2XNZQl+{h`Sb$w*CRV0X&)tm?z&jA@ph$CyLECG_KFUjrLc$ulx z0&XOKJI&FY+QJqupE){5UV%GekX+&Ggzj>XjCb2>aa&|RNDfFyc1lQ21eY$buo3)_ zg`Zd3CPT7ZW=JL?`KXUG#ZV(09+II$IBh{Xf2Q-a?i*|$kzjfl-zH%s`*bZ+9OiI9nC=cw_a)q@+=u= zm0qDG*V)gK=;csrkEGBR$oQJ&@gvdM^og|9W!|Dx7BLZ_c^{WbQnz5TPI;0y@ibH`ImUuGT1&Vc2~bzsr8vWGIt+x1XVmrvBY~ z!T$@ohMmR5=RkKIx>08^WczT-@!u$0fGL{Xa+E1b{^uyONaM(k^7trzca+0d;Y|8G z%5-FT*~$YC~BN>j!MHV6bhPBwNv_|MFTQ(jZf zU{fZsDL+=JhM&Is*82e&8^C3;& z#cS2-;Ok-LHC|O_BP?Hpkely>favt=w0`^)xTu^0RGWE~hFEUj%cF8NB~#`_%MBe; zx!KTp5-nw!fh(Te1o?HI$|zfSTL=k0w(3_RODi`OM z`ob#j><1%{1P}079D7(|48UC=gChXw790UN~U| z{uN9?e1(JkABT+K@38-D#>&Hxz9z`Z8I^3er_Y=GurB%;6RaxJi8IW~@*U5~r(yW@ zNBvLUjru@`+}$M`pO4Caw_(G^hx*CJub+TY-a%ZP=Tc%7qG0c88-za%Uizy1Z$ z>Vff@;LtU8z44bpDLJRvz#zD*C>eFOXD$f1@*cSIFD+{lu3U2yNxjt%NT|XONWCDF z$2l3?_w`jP?;s%kiUwe@^G8Pk#E^&K4TPT2u}tdp1c)oDZEtUX?EJ!&@Pcb_?y&f= z8%ANvd%qn0R@z0pAQvuL1pP?!_X&6*@7nHVfQtomCPM^TVPrJgwtRs|Ld#ZKm$8|k z$Et?!DGQ;7v1}J8mAPI1wz_;34FGXQ7MJzWo&KH*JMi#b4h`eaYzPVZU3Tr*cdl|A zV?h(bm1VE^NBdBJJ}mNbBAmlpB@8siO*P_{rggL^9bf5XQVi6(35af}g}X09&3E#E zU_73~Os9~hm=4LF*683E~)1>pzY%YTZYTa{A{ea`^%LDOIRjQwY zG9Iyw=vq`hf*BiP(Jdmon;%dN;%?U%3(Jc z$E@3)2J|}sFkLKCa%pseVfYe2AP@u?1PK9xum})@K@bE;2oiz_K?sP106{=RNvS9# z>Kw(u0nUK-f8=Js#0`aeu-$zbjkIMUB>I_>StmJMxG#{o=(v;o46D15BL8TIxhGlc zxy4X!Du1lXw?K)o@22)$D~7_TQtLhr4pyH$kTW@Zkb6f+2AN?P*dAs<M(2P|C@x3Zv7+&E2%J^6t2 z3MEy-mFNW(g<)LJ{pNL20e~U!maBO=Q2hqEe*_JQBw{eMfLWnIzs)q->gLVVQ6$AQ zK@R2^6?@S!dm_s!MP^IlEI+$9;}^MC6_;~&uA+Ip5y_KHi39r|Kq$!PBDs+;pA&uJ zM{tp9j`^U&!px*pQbe4f*O(C*ld$}8iA9%l&K`44bgwQ@%U{C(xBZ*DigQK~zTdu7Tb4-SeOI(ALJzES_fGlY^5 za>Pf-0Wt@vf>Av?W+Y1yqZ*+66Lg^juGptoez_!%8Qd8Jt{VH`cZZAF{_*-Sf8E5( z^<5FlzPbOT&FYH|oIV-~1wSh!tiVLRfA1}>y|2B!@2G>|_TG217MU1$QSoci@#FjG z!K=8pNoT;JEO*J&T+)%X;cs~zt^2@(tD)Oafi$b)+tWmN2{K+UBl zrq=@MM4uW=qIpz59}IcvYg689BnUJ(PyMB@6_}H)Aa$}^8x=NcJ~agsKy9dve=z)r zbP5(gUkpCQaEnoa44{_#o*HdQz`1?FLKmudh8=7Ikr=u0_D6sYZjS^_rb>9W4InNXl&>Ft(BQseke?dz?tH1;_iMJ7#G`PhGks+r8NOBo zTS_U|1hBEIUag!3P)c{rw)-gARRDTS(R&mH_lJgj_xk+g#}vyY#%p-^e?~|wqu^Y7 zsoppNhR8Y;gvD?eL`eb^c>_H%aqR8`{f|Qf&1}ak3B=uk*7F(9JvQurF-jk0O6glD z$&zGAHz9)&|C!8`|Lm5tPN9t&B~!T$a0gCpCYXLIb9V>2DxTf}4V#XjFQ{w(kay8W zPQnGDF{Hqfg(Y!lxe2zie-|;eep3H&DPm~cfDb1=n9yQ;Ih$vEH-sE2(y3 z_*$$(_;O%Pwi_AO3`mjr;{MaDh$BF2(`+5Qz%*q}(&N|1iwJTy1bR!if8_3uNluR!NtW$MeB*;C(<9dC;5M|eKe+QJnE13}sn-Lqh z5LQ%Z#K368V?>MVG-A>IU6UzIbd7lA4g)vp4#bC*$sMzJFE@tF)Ez?%dE6wo9# zk{uR=0M&@84N@ELHHp!xk1`64Vj!O5H^AOW0rA5U#tG;+$nR-aU-$|Q`a)%1hPJc0 z7K5(}TY^b&Eo!}Ze=b1&lRESNq+%(c9qG)BK`~(cl$`!MGZ`ANg*%XOV3}WYQPVFBFq3Y~mH{Q9R>QyioCG_&zp3d(svtfn zMCf@MB&e@*RA?9l@2>CxU=m}2hv*IKYBUo%T2U}70QnBce}*#wgHQY!p@BBc7m)v0 zP5?5vS+ksu%tNrL^P>kH~SRW0bx{R{i7;K>)3?g*@PYX5SXz8dj z>7}$xsWON}xR@#nc}cYa5maS}+R2ueVYbrl!;PSuf5v%U{j}x{L>?=l2B!1=vX|Wa6S$svd|I#ERxSv>XG)mi z5#cjU6A?jd^G6D322oJQI4q1YdKoN3f^`?h0-;bNO!JLjkTCOwD=tZx=%*4nv{!iy zG;b0M@lthS638Zj{xmWP&+;H-K#ZGNfA%Fs`C0A7GU7wem@vAmLu=H;OA`Ho1b(mts?z%XTY3oW z2ut650ZUkNc%~!ob}wUB6Boyhwy-3+u+;gdwW3?Ya(@E_aaij2F~(Tbho$j{e`PM$ z4bob~5+sP3B_EL&x;U)r4mWQ5+HzWQpeUS&LD>&0#`#cgq%NtfE?Fa<`jW96FXo&# zJ+>kJ(c&TXl!{p(ieNAnFuy61^^%d#erz$!K|=mgk)m)m#?QbF%gLm~&@!oEHxdPac$qwWKYe*Q zjVaPhigfU;7$><%gF6a07WR<*Nf37X5{0S0XdVL|A2zNSLwcFW0-Ff4A++Y%rgip8pLdybQ!_AgtBuKvrQ6SInB`T_FL? z#bS!l_uJwVeriB^Py`%;ePCo&ogTFg+$78B*uC4jyaP@lVUNY)le-8XP#obGKJ<@S- zz&tit@fpk`n;h({Ak?D)qI6F^*PE(pyUdC5mPQyvw@{-)I(B(|Bw+uMyx{ z`@DRo8m8T!wz|D@rUXwYwXDu8_X^-EMw{R5VT@dUTBfVwqM&%pa9uJeHD7`KK1ICz zK*-9vswBDeM{jDmq3y; z%wuE{X%#|zBlAQE)1op6t&D9D1TT?kPNdD37&w5?JB}bIgp^--G`iXcIhU~76>?9Y z3F{!}N}d+esth@m)Mvk$gXI{2pQ~;ZBr^2Au-e!hf47n;R;D9w#}iZ*-utJ+B3iVW zzZRViYf77rDU|LN%Q%^K1_yVc^5(-vj+Bh^`^&WC>>St^%ry6tL+9F?#XTM?4i`U(Z9W^_%WE}sn4od%p!dPQ#g#c%;oq5A-K6ODy+cv{|1qBj z1jo%~e?5Ur)OYQ-`ib>Xk=^}W0Z-*cez=U9cSUHsrD8bFWw zS6!DzlEc;68p-r;Rekoz%hnZQtc5) ze-)@PA|RN8)Q@FBD(~*qt6PKAAr4Xz4 z?=lj9Q`2I_l!0c{9_A^V<#bQ$fD!c>e<{FsgX}f@8`eVpvm{10tVn=K@O>xQHnUr# zSa9kz=}AV%myw%KQcRsE&?Td^P`>S|@LU{w6ty52lJ~Fp{)xjVh~YzZwK~ z%m|giLf1y%TE~653BeP8{ArdlbXO8Lz3X^6C|7=~*D-gT`D~QJW503pq?}cgf0Iy? z!|ogVmvMsQHzo}_K}+KyzV69SAaBo8)K~L3zveOAwNl;Y(N?!%0g=yM=QJn4t#v?6 zrhHi)d5r{x0!(7>2OjXBU>^~-$$2{^>xt#!7nboeklaAUaS$L?(&jpQsqzNLA%(|ee=|?5V0isBPsacTzFFkVN7;!uXvg4}&r_JpHqtsc z;iAgmRy2CLc^y4%d=DxrUV7STj%oOcGd z-gbYFRKM7s=L*@OP0F2YYt~Or7%jKvx<(sUM2a6NSw0n_+4o-(LD7u%yVi1`JwOf;NT)KOCe_fUZOoC@H&tek{ zc1%%sn{}K~9a^lv_Vm7#Qtd0E`rS#BQyOgPM1`TiGtWELyI!9S`V^sXBL5io^B~?+ zr7u?2u6vx;&Wb~;azEATDApPwRUT1nnb=L25taJ?@Vc~4$8!gDLX=bC*>%3pjFNhJ zZk+^(4)5{oSSM+ve`r7Go?1%l9TBMv`^F&OT7)DzBBU8-oR9&{d2heoS&n4ihRFiQ#+_=9JuU69KnaGa*4hc*BF) z>QVB5$*Ip2e|sd?Qq`Wqa=gwjw7|x`owTqG3y>l1!ZD{;H&m@_-oI!RzK62D0`4xt za{s2j$O*RNkPvbM94&kvaYmR#?k6Id`@R|}oq-xkX{BTqEL{8wBX+7*x&2s14=fjk z5rVx0tL)i0-`hAFPH07JZe_oqz=|o;GXS& z0EA8xu}X3>O-;+x5>4Q0%)U^#b7?pCMT!+#%Y4{CRmhuWnT0(fkLKS^y^L}MM2nbH zg)|iZT>0rZ6{*2Ig}LH(w}Hx{Ek}nc%66+~6Ui7_@h(q=3Zo8JGgXD+_`E1CsNFvR z;?4V7e}H-N=Mu2qKz+b}hb(9iXHI~gikoa^444zq=V+2e41#+*mSe2vRM_!>a3b^& zp5Y)HlTDnV@ij5t7P4m^np63AJ$b^tbrA%g?6C3#7zT3#-GNDbXlR%4km%8uaDa>1 zgcOrv;1!o!t8@zTh{q*UUh2$NbBy51!HZvPeIv1=- zzIxmhu_AaIXF#-f)uC+LJHqbW5E6UC@N4=L_#toP8u?+xI0)dftq%E!7>S}+bkotv ztl=FwO8{YSkqz1o>GR0*`)BY7OF8AbS>B~wm6 zLp!jv$OPg6ftP*@48wDLwuoFO{4??E5*G{euA6gKOo--#ZGa2EBUidTA`vT z1TgSls)phuoVeGrs#C>yPhqo-0)@>tDi`KPLXT;V)Dr((U;o8FH!<@B@MIM5j{k1# za!pdC0z+2R^PmPlL<&q?0YWSKYrX8;g7LmwCcWiG$<8qEQmFG#nlNu2Z%-3> z7EOtm`>)DOIahfDcWpY8oJSMayg{4`6VY$5P&k+>=xR*tq2T;4`|wBT!P`?zA^7cf zTF1i4xIL-!XTUchfUO&?J;uK(oE~M9C`L~3QycSvXlwtBu%Rgl_+$lqMs*?G_#xe^ zVA8N!2)sHsa-=S*s zV9fnx_!pIgy(=g|%(Lf6VGAI^y(`eYHzvVDQCmIA{nXy2TR;yy#wm0De=0kk^G7<1 z$~S@&NuAY%P978rE73(^g5KkMgpkDL0H+BeNo1D+n~j>jxiI6pcsTH}UN8prxlZQ= z>=Gh`IMpx~1P$;|Tz=)}l`NRipTBPw9&)-N$b7UDC*GtCD`&~G+8?*9S$9{_BGNGY&c3~HRm zO^lYS_$pY0?~EREkeI_iocPmJDkz(6{0YU3fi0Jcj`0n$6(<~he=}Gqye*ylVF8q@ zfV%sq>e6y2W7b^p3rTWD9B1lg#};?X7SH|O8F(&^*L=sZN?Dr2Ovdf;rVjePgY%5T z!onRu>mr!eRib{2KGClVc_Xu8=s5=NZNb+tzx^3}Dp;{x#1?@=_5c)gC>1vXu&Wgl z2_mbKXhnn{?#a08e`wJ78xGy45#m%2QdMJ?uaNa4NOS0M;O!p#E@2uo5!}fOAMXBL zjDkmSz^1s^xZK>jjt3AJ1TZwi?Hli0+&##mM@(JZp~P^**u|TaEqaZ|kT#0RIK^Kq zEYnUeDw{_K-2sFXU9O1-B$3pz-R<3H^H5J8?htcnN=t&He=WG+u=*0d;dwJQs4pr_ zd?@)2Y@MhA8%H!Z&Up>snpNl;`=T*G074OWRSFT_TihM09NompcdgiA8Rc54CU}HH z&@exTL$8WEy62nu*e0_~%Zk3E^85P> zEHkhRlgJ_ee*u=T_lWYJWTU-#HeYH-mLm@|TcHKtbmZDL_j=fR4Jbli$yo&`z#0D?802Zl2H~H~*&J>M@eu@?H``4JR*fE3$NiP@-JKsj-=&m=H#} zjGyzagrISRH7Gc3Q*m{02HP%P9L#beaRGRsc;F~F+9_f=N<aUvUMrrJ$Ifz)tTE28_)eWzaM46iMyga0H8+_ zJ*J0IBg>}ZD{7<*I3RPq0cc;AYa&eu>?p?M4R^s>;6UItj}QJsBPMvR!EwVx;! z{ONYI1vmuEFaSVsEND|;jP{>c%tpIh_D_2&rS%>pWXjJ5FfOtIVN6GOTQou2CCl#qBt z0+vx2ZE-*+1zPIvI(OH|5T*r8GmNeAe~QgW)JK1Ip(WQ#E$GTg=l3X`#Jyz}cRF4s znXWRfMxF6y9Wzsa-7aJAFDgQ;V>wtsP>>)<1-0w}|M5ReO{rwWdMx1(FEH9*F5Qt1 zt@%MCDn}LMLdFmHaRVj%aM~HBE`CFN00)myRYPEU0vQ_ebc|q-qfLa#uWa*ge>Z^T zw9i%0%c&sM390PNM&J&?fP1A5(HfA7_Ig(XTn(#2GBpR}FF<|+Aqv~N13YusKk(G* z4z&YUGckb^F2Gz@sq)Sd$pcdWfsu)jfVu5C^Wz9ZY&IVu8?dk;oZ$A2otxX_;<52Z z#d}e)2nY_NSn*1FX|^kX3QY63e`xReb~E8$?($#zPbnL%IFtxHnij>_`X4JAgB-TH zi<_!5j10Ytnq?}gLRM-FJu7WW>T?QT=1Ebj+zD{C#d$iF$S4#bC@w`>FKTTxbmMJi z4Cw3G<*%NgK(yFF(E>DGg^payrK6qh3ngjv_;@v7ccz!)?)?i z!X{$hD%D>X3M~6hGV-@#lojK}$yiAT;MiobL-i~2P>c0K|b!{CJ8`4IIWhn=UTXCflwnlUbe`^~De2+#n0ia8d z@7-XpnA-}(!HCD7HQF!m0)!v(?fpt<_`_-6BDtt=HV+puH%bxc?1o^weWqJrO4g~4D_-4^-Te23i`?r_%+}@a()6TPr8L7S2rpHpU3iqWyrVF zx@2F0XQ-^?B4`Bd=S{GHvHdMz*o--~^KswelxxgLqaRX6f8G~Ja{VM5#jsd}55)uV zb4oP9R8N5lZXjX&L<%_j^hmP+Sr|QN6ZIl~H7rSiV=^ih8t=ene?plxLX z-8*>=Wx(|Je?nCD^iMgdO`ntV%pJBLC25*5PypS3lp@KaHk(N*P`gM8^%)972Mv)vu?JWCfJ)a~gJ2vMXUhwze^Wo9hLk%Ft9Caa>{WtOY`eH2 zFp1b;BPPNF$_plbfCP*y!o7WhQ^raJyd~OKdz!ybC(ok3XANaR2rWCa^TG+il<(J- z?;pWi4rAVYuRrJe1_kjRjg_|8?Mua?@7<&Cqw^>C()YM%N^XWM@Pm!IpCt~b;4~kA znoz~jf4#^z-{?q&TXM1|ButLMP72_kbkf@QUP0z_eyQ-|*7>yBHWkozi9KTPm3Hz} zvZ#!H+XyeG4jQKM{71m5p9e*&UFz< zbLqU8&NshLYL-o%bqiIyoORTLj}YrDAOJ8Re{*neMQ(va_!2-6P!QNffFKBh5I_-x z03m1)1mO_^gn2n}#zzV1M$Kx;tZ2uECcO8k*=30?{V zf5284Pz`y$=k>=GUi1c4zKEF586e*H9fH9K!N~TUzC|~30U2k(bLu99Bw*eei@`(6 zEk-I|&^CkS-0^cd^z>%v=Y@;c1N578zMijPg^Lu-QH0il_6@2Rj5~4P7ob}ye3}6) zfuf-utyjc^MDb(g0LzsF5EJpxGgmP7e`$M6KoTp!$)sD9UL|tUGqNVAXq4BDq{@QR zzg;eg$0^)7G$L9UpvR(PZpNnxJO^IH;8QRKVjH3Mu!cF95r3WzjP2k9iTeq~Pwuo= zfb7owILLeq&CzY-b?s1j(8X~~JlK@QA@*UWA@ zE?TCdgohOK2`cZK8PMUte5RyKe@3MBGLIOwOujOVqI&U>c=bdvGC!G`9SMdtN5qA4 zBsXDaiQQbPDb!H0Vnanw<)=s7J`7*t0}I+*M=cl)T_U2v4$UI(jMf%^55S%z1E`ZAW`jKiMzQ+VcY>Z^nYoQI92% z3vQXmzimUkFY<=xRVHkN1i_JV8jO2f4~1uJOMx`=4RFd8UEX>P1Y(FCxdr0px8;r! z$(JDRpoaT1VfV~h&}7~(e+jTW-J;26m_-vDK^nK7C0rZoLV}(Eenh=j)G6prO_{H- z6vh?$#fj%}8)m+<%0MFs$Z7)YBPqD&WJK3n-vr-S#Y=YykD@pOE~xxPlgv3qr2DwY zO}G{46BO!$v!2g)5r8}8(T8bNhsv4!)*l+ZVR$P+Q8a>rh%<*yf8w;Bvi7hbd^^=F zWi4i{nI*L^!Ez^Yd%tFcBITv+rx6qCjN&Z=Lcv2A4PJdBq7T4Op>esHXxbcJw_`T-673R*s%iZm#(?FOUMg@aNW=+ z9*O-oj6nv$@_qtGf98$Ylk(8ECWL@P93}uLcVts#bb)vH5|V$1R>B7 zgn%JP2oM4sVGsh2!C08`P!**Ew^a()Wk%8oqqZnP6q(2jYzKbP&Ny7>BWP--O#P1+ z>$fh${k1x=EMW$;x*J_3I>)$^`x%v{$$w$)@+;P5jYpDce`wpRTqX}ejCa@=RT8s9 z>l?%37a^T7BGnVulE~aTh?Pa84H*JQ`MUO0*uG=C@7jt-L4gJuizycKVE@<4u5Hj(pGeyRDq>I%Uq{NkWudp&O!qBKD*`$ts zY{TXvqtGrKf5n{P1dDwFF!H(9Zqe?*B&rmvc_QuaIVlkAZ%a_3?{ z4(=fr3q%_>O)zdsIy<{JJVFcGnFOF*3lF?gfV~Wc}oP4Qnu9x0A20n(!d;=@8h8Jad~Zl>`S2P|fy* zoIag4)u+P@S>0nZ*ZK$;sCnEyHm>tFBP0QRdDaU{?OvbipL_nGzJLe@Ym(-~>7FuOe_ynK z00VlM@2E&6FzH7A6i8)%M0hz|z`L34y%0fw)DzF+X%9Vw`Em`d({YwVkBL4ZXuRpD zgl8O|F9NUOUO;sQUJ>{>z@j2X2I0kjOZnYYe5iLt4>~S|12&PyDyXQA$qoP`r!S-Q zDo$7k!vbDDcjbsCadEr$C-NnWe`OG1&-dhBL=a&!$nkk>fHj4s)yS3a1|A&=t% zQ2qf%HLvvq7j9mUmGH!%-D=C*$Ll%lG?zjGy5lqX3GM3wN?IdEvY-Z3At$ZEF@uR! zU)0d%vz7+b3jjz-ZfS05ZfS05YWNah5O5Hj01=!J5D9*kV3NUD8nLape+6j+I$QUE z(lfyP6$&Tx#vrsYmiJ#p()-_tQD&;m3UgcgE2l=z+6`zRso;NFL~6DWL#8CpaxAJBAU zzEwUuL-Zg;y2PW;c4rYtf8VuK)rqJbNBWM*{3t(2`bBV;qke7cZ(h=Oer>r2GU=~* z-DihAg?HikTuoHE1hnh-Xm7Fy!I&mVIsi@2F4+dsM(to(2q8ugjmw|$xaeKE0@2Wb z#iMP*EQ_)md(i~0#llIu5!spRMqR#{U9t-UyA@BRQe$vtfkgBMnv- z1Fb7ykbZU{H%#9zE{p@JZ1IS7ml3Q|pz?^G9*kEP@Gs4~9(C0IQH0S_qCsX6UtyEA<8z>;CD5K{b&6BNn<2 zii4XOZVKM<_IVDAXNErK$u~|=Zx}SgOr@j~5;KztfADCAfzv^h+VXW)O$U0Q<<@t)Rx)3=$S6qgpk*(q^atZ29k9h)>dBIOLRte45=P zkzycsI~m|#V@0QLhV#A|c>T=fsE4@W}uRc7P_^g}5Jt4{@ts z!DI${f0Myi2Ef-hc_@I>9}2kobC*=fKx;gp<3vwr!)G@14gdgvk7xif1VyN44W`e=a~c;r-z3Z<$!K(KobPLyr=u~_i1FOASFJuE8|D9g7vnOn3;8_G6PoS#?)4eHXW{~@yizsNrd zJWe|Hb1mv)mNONzmT`N+5WF-eD_AgjVeaz6h^3sIP`W4XYl{cH5KdWDxqK>NVOc(C ze{e7aocBswtu}%5welB_M0a=#sNZRT_(Pg&#BR@op}nQOz^;b zoq;X?0(3O<;&f%%1XNU`^J=-#d>uUEe<3H#A0x{CkC6fe-_+)7?pm^m;mZ#nF|P_N zhAR$@i+E+zD)Lj)xOToIwT0IUDfESiIWCQdhuEA4(CgR(Pok(uhU|56A^lFHhl&T# zPQJW}>0Z4p`U=`d=qtu08KwItML@$$uHASonF#<>q?jnIz5H#b$l->$EerqLe@iO^ zoC5#|bQ_@H4rXKe(MbaAS);&&Xaqi>xx@Sin@+$ER zA2E(Qg0cu=r_wppK?)=#06=GNe{gekZ9!*&W2oWN0U-#1f-oS(7(#>)Lk{x+5)(@-X8IZ__@o#V`a1TBZLO%oCyh+8%hYx*;~cq^2|)Se_Fgtn(j;662k{fU zLzKSuIb)WtIM_xKB=4>}t3Ih)7DNajQHGs73twyKfV#IRBX4(ge{;tKT#@LxOd#8z z5fHRQ;}_-PFUr=VH{vo;UMTa4FeY9L*P{pX?O*{X-M(yO8`( zzMjo-l;ykN98Dj{xl1-v_EQfjxp*V9)4exyR^MARgnic5-)ZWEe2p^t<(OOhaz=%kE+3R-mXl)}YgI4L6K zU|{h>fws(n(@7mfp=;T`G^rI8TnM13Wxj0O7?EPzq{D5K+}pU4+oY_1thG%Vtq5ay z-k)x4mvI;ff0X|Q;wG4UAQ_$DOWqFhh4<%pzMIpVvQnqhzovP7Ooi8_JSfhKbvgV-Z-$=1vV~Iyqr^f^z5Om}oNi~iZj*4e)$OgPO<&mHc#}wWS zKHz3c$%NqWU1VjAXcY;$UpKrXAuT9g%N=ASZ@8J#f0}*ys9f#I`3~SBGYt>ZROE$t z3R*`eefW{f4W@tTA`#hqHzD4K0Yd}=B6)Hi;_?#M4u%KB(gOBp<5GJuR9DADb~s7vB}&b*NnCJIhRqWZiPJq{JWz(@Q&rLZj}&0r-~w#B;uqG?8PFt^gZ5hM*xeTjp_ zx{v~bwcYfyq+S!pYa+zjK1ytmMGP8dWoUv`MrXWMTtgknHCt?rg07bujWh>TY>8|B ze|I`Y3g3DysAtrnUVD)y0C80Rj%|U`OvT~J3f_vDjA@J5aH%-WwmS;^7sHenI*CpL zde637bMmrq`YYK-oqO-|8>Lay0VNj#tx^mhaM;6@^U_yLI_cx7aH9})aUU!DXoO1r zO{E9^Tn+#zX>WCOP<;3jNFWG|ARr<@e+X_P1SbRt0Z70g1T2Gb7-FF{X*#idXra{7 z5Dt@F1xq=UZZ^)8{NE#sZ`MX&JhFOMVw!hm&3}Utp}kdEfo5f7XlGTse4|B5;4!UI z=?%5m&mGM8!J1Sp#7k43j3D#|SM)-P_!2llKtUiwpb&Twf*S&#U=YGkkOLDUr7_$)eRX)#cnb}g z!qcPpjkb|>kYT8-L)jAwe+XYZEPRfip;t-QFHdaV6npZQAu+0-d(nd$Iwr@39y2>vtF%yy}m)ZH$Te=j$DU2Lupj{lk8 zmA$is|83ki9{}3;t!}s(;h3c{fRqj}YcLp&j(`RRnyE)(l-jVII9&dMd(Q6%OTOC$ z0D^C%jUvrgMoT0$W3c$c?_osyxiB4u-tZ1e)Gc$43QfJ!-9;BEg`*i6J01LiGV~U> zd0w2C?)H%Vznb`tf6Wul96Qb_r#;$Xhgmqo{>rI2;9p0$ijC?n6${Q(_276kYJE0C zm*5PYd$XTaB^5>d?GuITGUU6xW#_^eLl1`Gj2Vi{t0GLI(WqGKv9}ZfA^h*rRhlgGeovnH>Ou5);!r(h3l0_g`4mDF3hTg`sHjq4 zQc)pTF0DiYe?@N+;y(5Zu`IKRje69t#h@0xadEM~JLa#RsK)v*K}m63f3m(Ww}5e64j`(C0ZNx_2-GFZ zF8w(=j%R;kF1);ctGVH;?C&2r{!?1}(Bsu5>R2(9<6xFekLXHObW_+MM{BqVjib*! z1OZ|di4MtlDho&(1rJZ@8ssRJn1tvdQK8CM~v6qW)9Xa&Zh_srEOUXkh6a9)4 zT*WvnV%58HMqa`ud`4K*&(9S^sTLEvIENEGf6#YEz|KWS*QP+^00005Z~&twi(M%v z@sL(RJ`0N%&oCbJN+%S4p9+i!002aA0P-0zyuFuZ@!D+v8QgRM()~uKNbkIy&b3Ci z*|iJS(l{z<_cf%Cf)peqb>QfRf`p_zYv{Gx*XXw;M4@io*ht~@-$bhH7u-bD8vyg! zfBakrv@kg)jvaeF`=n>ZikMxo;;&N{5TVcsgAbJh23L_*2URI4j63)15$h3#%r|Oe zRzaPfx|8@sBntFa;bsD;1AMDEtql>oMZN(afG_`Zl~rgq%q$A;+j)E^$5*&xLg;rE z1Bq6zqmP*<`7?g24k`(0ghZaAQVm^weF;Al4TIQ z_4Ph9>vHf28sr))dOVy;o&Gy>o8@2B|T`0B>AV zRLC{`Ok+C$X(9P$eXg^R`D+Fff3-GjQXPRQ;+nsvsUUbZkE!+oe<=y{QrBQpQ+<6Pj%#C6JlffBV}u}^LZy&RKalXnBAY&mBbyE|ivxmz1jKIx;(jx8 z*n#m{mxuLiigqN{y_l~-zzE3n{j{maz=FkJxV$P^Hl zbGzBOMIRDTMCrvoB1#$of2%S61*}lGDvxYx{Bo&ChoMcTjUfS{L;~T8g>*n89l$N2-D{fs3_0B}Y|p4vPpG z3OC}_=yY;Mv>?X}IvS}yxIZLu*(&xGDS`nG8Ai7?5r%#gWizewf6x~rlBNhE@c>-9 zWhl3HqyylF4tp`mz{4TjV*Zzm(%r<80iY7UYUR$@*Ep5&22&tiV$8_4=o~~c6|qMH zPZ=~*_5l-s4)u3Yq+B@AWqSej0t)@-rA9i%XuJxW_!UfZ{pJVIW9c`m!b^yf#0FY3 zL>YN$^9nl>;9O$U7QAm6lg%bcEeJp)_ zfV`;S$1w=O3`RML5D^kYru-5(K>$HO!9oZSf&>8*AOr~kLVys^2!BF=fDngSCZa8L zRQysVkZ`|g;+zBqgNrtJf{n3((l|r?M_DhDYiZiY^`cW?yf-=>?+bg8Wcd;=CE9kR zL8mz+so;~lYwJb!fyyO%Fp2{ugt;Z8`V9Nys`4wK3eBZDu#aJeQ37>!+=v@1#>h-m zV5Us;)SSn=B^&#-n12C%1YMLWDw420XmE%~9YYz|WAWfwbS}q>gwT9g&_xX)rpbu# z=~VsiU+0V}F_$Js=v|u3D<2$Bli@Pa*#Un>X2?rv;_N4}KckZzoQnFK1o!M({7)!c zs2u-oBz?v_TFs7=pE~Ts2!65bVWbkAgEgN^V$DeN#sik*`+tJso*1ss%W??&LUFT( z;!f(34x+dcBxN6HSG{1SwR}MU`}F?jG%;c*0xiyUM(RpFF^xD)u%GRWEYuLh({CS4 zdZC#$GlKlZo7k+t_We&WP$6Qz-GG&n##H4pjx+KCxaF}NjY*x#8Brrw)+&zCeJ4&q zBMyUWjrzKg1b@UA1uo|H-3iyGc|oJHZ796NSV=PrnxyOY772|G ze@V|3w6?otX}pyO4($YeNIPZ{Y}QeXId=FP3#8psZbsgmw&y~lZW25SaqpXZ1w%wn zpugZ;RBC0#0KkPCO+DvGcdEYPlM8)7hYS1X&#r?MTnWNGC=opLQW*MMzX z({g7A{3e?69w%RT!4+Q01Z@Fs0dWCsQte>8`kwr{Em+Cc_~%OW3rwpcO_lV?(deil zo3Bc;*2s!#t~5rbTxb|$HB*0;;a2~bZ=JAQ8@KBCR`RdoWk;^we^sMdYI(_~acucm zD_&2l%5h4#i}AzjGXx8TDP=sl<0Uws%4;So8!1_@&BnO8kf9b1XPtK|zL_(0Xcn15no3|2o?*~-3{eF$HZh;#{Zj?;1Iq|mR zW>i{|B(b;}={PvwO0ifNylw1uDaZNBkvH3#W3-Lzn7efpEvaFdcZ8Cpa&3d|K{|tY z)U~>K(=Q~;V7Z~RoxClOfXhv+0dWM`ilCK%i~>%!-k!#ne;HUnzEKrTBK(($X|poj zG#=ePM>rJ?iD!D=wQnjZfn*^LSb-IB+2ZB-g45%I$Z-AY<0S%;KAr#p1df4i zty%Nx<+`>If4M>aSUzUVdU=bGadhSNRwJp9Jou|X7&DGrJ^$pmaieVV_X27x9m2c` zMeGWe-6}v2J%)Nci42g6-w9|rpQwW$eb(4{78`Vs#&QC292|0d&`6$i^VY$RZg|YE zzYgPniSu~ToLjbCT*&7RG>~~7OS#`Wy{(V>{;2KOe~w8oSy9I^ZU81Qrgmd3jJ(+h z-K|dmHYu67Uo)^HA3OQZ@DCa{-e7N3o~dq($@^SUGE{re7 zN8*2nL*oteJcv4yA25$PC=?6eqTpJcvA6qF3re;R)jNQCF` zU*4QRDisR|854U$jGAt?)g+hV>S#XI^Dv=1pL8U?xRV)(E^S2z` zf9Zqes{4n zVIs4KvH$;4)bSm;fd2S{>)up};U*o7nYHFw`I_Yh`g-%(*(9S^?0{VK`7sFNuiVyV zJvWMSsnj-%LLwADWhKf827wW=9$5@4e-LYVUXOcy#F%dUkmWlkFQAfhAAb-McAV_i zUjT2g=ZO3~0yEiQA`i=st4_`+J}!KPeyLC-T_N8o6gl1HGW1A>txA z-?ncDi$;S6ie*Z^Gx)g&)+q`(3d0nmPRO6KcIg#abZr@JwE9)qdc&pWFhmGi% zsQL>H>byQK_2Igu^8NXFbZ)wdk{vfzM`Y>y3Qfyx>hFxRT5=`d=2y9`BgS2?Rg&~y z_6u0Y@%|hL39BGjQ5!EDD(E{he~S~1I}k%}_bfQdci5me-^|!>Z@XG{{B8OZ*%o&m za)xOrO9JwDsow*npSp?5mc|*5Y3KMgdB*?naC~bH;oR_*e^aP*IyEsX z8UO(SQve76K!~VNGL*^V@mL{#bU*_Xjt`d%29m|W@G&G34MJlu8j6D$h69MeC`1q< z$^Zd;09$TN;49E;!NI*zM>R1-7C@Yk^H9DdNENLE;d#VhiOBEu(qE7~CGRW`$&~j@ z_?o`@tJ?O$un&2@ zb$AP&6{DLkO6%wGb5ZJ&n3@@osl1DFiK%a&-0&44?!vMq3Nj9V+`!-@k-Hu|K55!tiuut&2PeEM{ zX2grTip%HUbj5rbpcWo3%?}$KN{2zj$Gw9Nivupasd%~6@%iHwhl`s3O2IndRYqsc zAQ5S-I0}7@chN%!Jh!w<=e#=?n0nCc9`*l&=)zP=TpI>?f7H0Hk}JuS@^gE3mU1?X z{1eHNDZ*gP1bD6c?|x<&ULqQ?X(*ig1bjmPe0Oh@b`r$fA#b(vl0x~!%e#p;Hv|gL zaCZntpEAEdssqyc+-`i6*z5q8UTyUB;G$9hW@c=vTeP(frcCc_g=}{b*NVVHNd4h% zenh*|2&f+{e{sViB{i$b5^I#&*CILOoXK|YKx37>8D1CqWY4wAO>u1Sz%zF;-VBP&a2(@rX28k6aG{rf8*``0e|IzJe08ai0cvD(_ewu z4hd|}F$Ds%XCIF0cMNKf;s`$()Sb|Ees)K;aH2njZS&d(J7P_ zJVCmy$0icJ2O2J8VPNEfc!gzv_d>^9=DU?IvA28XOS zg`IPIlGe_n3uG)zz#_@&5Mib@?p91e{stD7(jM_(aznru8XcabLh8Vdk}!f zh0^SPyr3PBvw?5A&KR0JbvuIDMS4#N>s3+(N<{ci9LS>SdG83%=jSI_Asq=piEIP^ zYmJdGLpO!fyBUahnj}|gSLU$pYtjP5{l8tlyjLa^*lb9K!9A1629p6}9ZXeghIn85 ze=Sr1Lda45!t<)x(B`YY*(nS|1+U|C5-kio;H_rZg(f6$CN zGTn?f(xhW(+m$gRhyK*%P08?@9pmT=_?Xvu3oygk<-=0RRQ@Z7VcUW4^4pg~41!=O zcab+f!EwS-x#@?GDmVO-L%g2AMkFcGd=+13J?^MBHQU8y*;lqsVN~7iGyMcv71;ZG z(;r*I|6#b3eD?dL6hDrrXyWQHf5|A^I$zqMHwQ{HGSlMjmhTzF z83<@lcRk3vZ&ZV3K;dh4vJ?t2^#W?}&$=*OD^1NcqDUT`kn+qAv)2cKf3e=Fs@(@=PKTz00d2FIPNh(Q$mFY~!j?D*;GvOS2VfUHW( zqDzcywZZ{Lx9taF#d!bXK}3B_wAR(Vf^hhd4Z=GDgocHp?@N;_-hme#k9A3Ms5g{8 zly#_cB2l!&u3|AVJ4Daz#Cm>D8`gHnzaht~ce2z3H;`mkLWgXje*`mK{L@j_%7PP& zO<`T#4RYdI5r(6C)~{VnQ9dqyiLdSa$J5(yFu?EDjstcY^BsD!%)_MK4mkMr#}uQ4 zuU~M5xN2=hx?K+cPhE5Nf9Bzo@cq<5?L(;P=_#zE-kUq4GoChPg@8Alt8^2@covU+!ZtcAJ+=D6e{X7 zZB>9Gbh&^BjnN^~&|d9+dmX~Zkn~Pa77O~c5@wq(%(HMl8?U%=!@8BNNs6lxv_ED% zSacOiK3$5#*{d-1rr4=;Lu&}YT}|`+KB|hozoYZN!^WAKfB)PJlj6Sx=8H%~{1Hv^ zq#-TfA>=)0pwZgQJ#x6W31je$&P?@oWtXg%Q3jUjsnMv9wU=jL&djhqm^XhK;^(Cj zP*env>9<4+Jf4hk9dU7>vLUHbUrl3;WA+|TNWG;3d`z_=cdO^gfmv?d&if10d?S#kj6*|V<-SSdXFh-AB!5LC9y+9<~8Lml~ym%d1gorXp%}^D7KL>ZFY7x%e zaS!zsh4+GBG}t9*Ow!Se{ZVUm;H0UwdYEOA>~$+af8K=ms&GPX*HuCJz?JxF+P_A_ z1Q4(Nw5|3JlpX77l@Rp!(nHS+ap2!h(Gz97!zbm5<}%!WXGeU(cW^X_?x$$DM6Rp(bV ze-`iYe~2!9Bp{P_Bcr-~gSi5fFGPu1t1wa>DHf7_>XgipKXrM(dAK1=(gop)$*xS& zT8T0lz@(dMWzj;>4Y2{WFWAt@xMo7qhdSSYDuNm8P$Q~cfv!}-0zUh?&POQtx&Xd3 z!jKdF227y-s6a&Uf(}~s5irZbh7?vuu}Mc?e>0aQ2fS5};`uOAfTN#nYN98XKeLP~ zrj3^azV!nodc#dg#@aC2rA)Qd7S)?;emt|haUbAPG{s``JDGXJh*2_)ZSc#f7MSF} zfG{6yfekE>tots)?Ozqbs%XXc8_eBA^3;4Q|<-^aFu1|F?J%KYax_OP2Hyr!WS~A52f=IKG#jKsd&G4 ze`Y{9WhT7ji)ujt=ubSYEyzl3F4)s(q5Mg*cc_l`})YH?lSf0HhI zDbfE8)?`ZlsAas-VAqX9ERhOglCajt%n*bm^OC5|){2)_gd33|bfZ3Kqh!Yh?~s#< zWSkE=lHU2H+e5V*<89ZKfvq2+ZripTDpG*m|1?0E2Vb83Fs5wQw!ijkmaT zr{xwO_F!jfEoBdD4`UUmxM;tYVch$VL$y@gYJLg=6i^}h8!@mecb=*Af0b7#M%9>} z@=c!MUucFAV8)-qvc4)&Da_I=s}BfP?SH5i^I@>|LOSC5)KtuXU>ttYCAX9GmONWr zFhSA!747T3E*YHIA8BZB1oWhr3wKcTgJoXs##6r{*Hls#gvS~@p~uR=8(udZyV3te z$Vs}qy`9)J>sme7#t=pxf1Vf8_;vY!Yu&oihI^ciq^{@fPiA@Y+_=p`V=5{G)`)n< zg?3|DSX8Xz=^-M1m;}(`q5Po4hhmwMIzmJ$5g_b*}~cVL&d+Ip?Lf3WcKu!3a3;jAx) zt#yT_oQLJ*MIwkPd{ORSo%l_surce@x&G-A$`AuA^U^ykn(JjYyb6{Sx}xO;HNkPA zy_JJW$$K4hg7pDcrFQUBPxZ+Xc|)2d{m-ihjW&9bp)|a^<|Hu>m|i_eD*K+|FF{N8 zDCTDJf!sXzT&>Mif7}QwDgqB`G?K0YZZp_m8gpVh7{lA#W@IDn61eEq91%>ElPGMZ z_eMT`OH5FRScap<`fnzPei>M`q|1XcQwLLv3}RU_GA|u{a-&z8qC)ybHZ^D{#PgJS z4Yo4HFGyq1;BtV^O@%?gPn)9D#qeyN(uvNQ5&4^TcTu#7e=!h5?ejy6IY(Q5jP=7o z%CPd`R|%uHeWUl>4N#v|M<-B`z@c{dSq|fvTGb7)DRrST7xv|^u=7k|p~L0Uds*iw z%!2Z|5>cv$;o#>;;$3`*Y{d-oxojB{^Jqq!9Pds>Bz^OFNDY<^TRpIaeJ){ZTkVMX z7WY~R7nC>$e=fdbKSFUI{~SD?5U*QA&G+m}A?LWjQ;eA$jWhAAJPEmb?AoM#8;ibB zx<<1S#hLVXK|_-&Mz1>uWv_tH0)#EDBk{YhVdp#nAZL z!`+L2Upu+TB==i@WPxQ1!Ow5ZK{+~ORm`$!m!x6RfA%^8HDvvqtF0&%3-ibh&jIS+ z*qfrF-QX`G4XsxM{LJ?h5TFr3|5&k@a%+i1Yhz`%F$CTnw<;=1b2wl_;q1xC`DY(@ zf7=zP@GX<8I&0>Lxv=dUl$&Mdb3-~^{fTVH(!h!hErR`PKIVpaFdty|WE(1s?#^li z`)N>7fBH#Hv;rW_T(xWiaR*{N-hJ>I;tT1|DTU^)3o2mA$h zNVXAc3V5ukVj?tZsj*%kiJ)2;%k`z!e5tDHZ@GJ*9!Av}&cVygr@3s|qcB2Jn1zGL zx&kCZ#JM7F1f86+mzfjlD0jsFK#sePK*_Nxe_7Ui5csX4|BcH?1y|dBq*Pa390<;X zLgL(pAGS4i!D45sdQo@_ol%&A&$Oib{Cl|7=62}(=(p2>ghgQ{45~Auv>&<-O79NvPP*Q+26`sRM z%rnB!r;8XR<{yJ$1w=rP0VE%#AFI~czj&HmbuIJTgFB9DFcDxcjy%F%WJE=H#1T@X zJi6#}3+ULodu=;JD}rftHd%p}{2jW8Q)XbKWW4_>6daDGAFKo&;nm``mJJXK0yBfQ*}f0$=DK+j zB)@S`Ea+}X;5*ie$AXek|He23eY8Bc54&BN(bMsVGu`lzykyTUhc0XG{ z)FAmHeHujnnJPA08&78?6CuVPz7jj0H&nV}7CMkHA8aWa$O_pABhJ-%e;d(WQBrFs zXUcVplmu`(>id__^xL===GJ~QOrO`JBPwtFASAo=<3P(3S7T8YB{z!g%Q9y~QjtwnuQldLPY}*PH#U98EvvW8!+ZzWM)- z9`1;znfC5<(v;Lws&)@{FBxu5T!{!G#G}@oTb0b171A0Cd@<|CLGt&LJlKI~84GUq z0Gq3w3C5yNs2f%se;q|TVIa}BzgRMScdh!q@1EaCBU8SbM&JS#(jq%X4?y@CMOPy2 zmKkcRjsogn)=^3pGUh3?WThH((1?|YTd<}|T>117*{R^E0~vQL;bQKB`5Tf?fV80V z^$zg|0@V`P(%KN3y}$Q|JEwO3@mYCHK z4NUAO<-d{ye=rJxrAYHE+&^O#kxG>#DuI@YM7q^OqriHow#u?!gKCfsh*a+m6_<;#uc4UD`eziGNQ=EAf4ql_#MDd`woKaeyocMKP) zT#8vNdoH&D0eDAG3`WSNoUDFyj+?%!hdh^;StT$PNDCDpbO2nSpd{=*0}xiSFpxdO zWJMlw6*)|Ty)?W1sJR98$An$TKU&A|{25D_e`ItS%M_$YE>8y4)%+mx6u}b}P9?Ye z3OP1Bt{ZblU*kH|Z2AU%kFy5bRyj~Iq&AJaVzAsirecg^6J!XtRcv%TO^99Y&hNH? zjI?f9|LbCa5b?`6M3cp$N`E1F8E9UL<-XLXRg#qLSz=k`(H&3HQL0k;M8Fvln&}GI zf9F48#Ac2dH%_;=mm)BWg;UKyF9l-^g+c7k2R6>oy*X(>H*;UglD~QV9BHZV1%S4a z7?wX;GA=VjElD-6`MJbU!#g=x87C$I)_uH6RmexbeoG5V-Vhl20uPpeGBA~=-|%A< z0o&{aXrV3QNPJ%y`Jl30FgX-^02Dg!e{4l{WpRMfT{Z(X>D1HV)Fi^IYBV`6YDo9l zyRr+osDP0o)Z?BSy2VN}BQ6Z9-eDKAlz!{FwYj@X%(^s z4%$MM#SQBP@Oh4FVPpbK-O%rA!D-?d@B<3fXpJvRCDe;cA5 zTFKa8b_#plC;+!eY3W5z78Zq! zCnPig3eZX|XzkQE_B(O~1;C726&a_PvIby5@4TW)++T@o1^PV7&vSo9f6?56Rc{o% zK$iGb=}HKNW>E-D2LI>;ZR~Sngp?(9>XyuBHLf%1STT^Hsy(JXl|7`AvpS*+;NhTyAq`Eww$A(-1DJv&bxxd4#agB{nznflHh z>@K|+7q?k18S;vae_fRI4J2odTr?yG5b}cTz76FY&jDE0+hM;^gc;;K?`z7S>!|TT z$KA=hxzR~N&|T{swcZ^B+AX;AK0j)-Sl8X}wre*XVrX!J0W+UXLuHc+sjvls7mH%v zF-5wnxa?+SrDVvlUJeN!R3#q(74i>B0Z54&^>c|~EVJfEe;J;GF9MWgIU^zrv0Yzbi(d4B^+~@es9G%tWYo1*-+Ks z(zJT(CoYA_8`f+qFGq!nrEr(YbTf#%6xFj)eDBL3xC7|{D$+EZ23UcXYx17E=Im!%&vVq(EkgS!q?zIP4 z$kN8}_5C3*TA#MRz2(x)C)eTO*5ZGthu-azN1sYH!k+XyUEl9V!}F%5Xgpu@|F6z+ zU}qta%e!;X1miSzM+AWPXonTr?Bd=d@J2|q;NwOylK+2NFq5Q`)*V-9@#2yK1X8Gt zEA}ACf6^Hy@YWoa-uZ0chmn}`=Po_Q41kV)Nl>o9%b;>FNwHq10b%lyTy&;PhlJg- zq5B7;gwT3BZu3*gI7`$F8S{{4>?y+6@1=uK+mX-Fc>BI3U^H89ACjxydhOo%a|q~f z>rnVbE?Qxw9o6Ro!e{%}b{fycY>-Z64uJYBfA*UVbQ;TyPH?7FhgG2YEY8Z}z!m8k zYr?wZDmNp$$j$P4lJcjZK0=vVbu3+ItgvB)A~cy`%iaTKYXg4G4$kD^JD0S$fz;?- zxumrTG0HJYknNDJ{BuXMfKNMGPzi9XPNyU=9V!j%@^wuM$E8stU0rGa+BYR|J@V~x zf0T+1crR93$uI}R>t*^25Z8Hb{iXuueRCC>@1?pbLq>i--0=vyJlBvb;gZ{*@Q`V2 zlFgn55Al`OPQ&Z+StW4E1^=|)V&Y?G`4FqIRI&Yc!V(l&(}l9OZ`lngoZd9H&)xuX zESy#d>B4SWqG>!IaPtQPiaL2bZs4Yde`?#A#SY#Xm0{x9dR>1 zeUbp9!j+1JDt;}4T!9OPw3@|)9wf@@2JOGtSGI&?Q%TlyJJIfQ+qAKwxed8vTZ!vUnl0!6v?C}9NRK!Y zkz3M%j|^8$|3K5fDuw9TJAYjm5xUGU3Z*%^5Tc|(6X*69$+l(>V^aG~aHAe<;i+9x z$Ug=3CTuzh&#C;a60ki|;Fe`BmPiALt}>=|A0o#?e$q7`j#ONE(mwe6W$K*}t{pe0j-@r0i0rbe=QOUGrzZkSuV{Ej%ggOMf0j^q82!*B z3iX&y&l5f9`^*4w{Ex?+Hv}urz2OKU2=RRklQy9-rmxW^`kms%T2zq<8D7Xz2y2E@ z;+!}o52;~Gp^%vt`RAr?GgU%mY;TTQrbyIDq1H3ZLAk+;YDz6kQ^q4|;xa4>!9}wiK$IrJZcMW@>^$rlU6fzU}7?pUO zyQm$1)EFQM&HRzpW~Jc=nY%LOmt+YPL5IlkL=nI+he831iZHN-+FElg#x^c-4T3yT z*V58lSqxX!^i+l)g79ZQm!Qxswp9h^kKY~L%s=_ndGrfVf2L%zrnl`ztj(fx`ZTWu zI977+{4MQ^7G5KBsy>MgR2a*B7U7QC=VV0274$&oT#MzWa*_LoAR%)>Zr}cYAD$*y z$%^I-^EumLwX(U=t)XK7A`(uVvX#y4(n*!;(4CaT8ObW9F9}X%UP$q34w)0n{K;19 zyN)V`oR(c7e_bx2NoBh$_~U&e(rzCz!GqtF4@ws*l;RfVuG1P0C&j{k{H|Ttuvm%L zg&vzWBxoKFzy$T=_$Hdsl0!qD@A{nCFu8Zf6_;_+Vi?*g5(MDs>;&m%T7+vSx-pd^ zOzr4i(*8=~%?~2T^v$l^f1_fV>W?{HAC#crs{$cee~ILT{BEm?Q!}3d88BK7rHMP~ z*=bJ}TtS%_)H$*XoP-~P;I0?G4>mm<`0C48O(imUO#jy><7gilW1bm{s`S1KtEp5z zWhD`o;+pWnaq*yF@1!&?_4!@|6I91mx!5v8AXbKxggEX7VMyACQPK+ zOKA#KHO7m4Nj9eEfOA-lTmzK;1^VB7)%V-{{8s2<230?F29wzqyFR>@@`#pmg0;-k z1r=EKn5J!~`3Y``H6ZmVwl_kKc@a1EE>-+Ke+E_W0OKKv1g1NYD^FzD_w1#(Q7ofW zZgwfd4kjWk+BNKUxzD`LtLgmN9$4;~&sy|xbGi>@T@U0%V2A9m$^B7eXZ&I_#9DIX z%!jKHREIY)dXkD;`KLS>Z9HV=8*CJDSupRR3NdqU8z227MW_?<&2=;!f$ISm-HtBNVJLv(GaLSA$c?gP|2s z!~^maD?vSdzT>VX_o;i{lz~TG`l5!%e<&nLm7^}*Sz3X3BiM{kK-HL=@q4hJY}f%3 zj-QgW;^_gm=JOaPhxU-Sd!*xgN}zLvf_aT6FlS(`9i$;LgIJzY?EO^K{zeHYBlq8p znZXQRWUpj-C12E`+|)Jr%@GBf5>-= zD2m4N}?@X&vS+#u>==daP z2s8{F65ziA)>27gLIPnw>;gj!!9PY12($rZu+WJ!2AW&rdY>^G%QV>?I2Z|}-og># z4eD{q&i121eQXqG+uj>7ER{;Re^|G?%l;TBi5`9Yj1k)r(4&6y6!;nh6Ou9iow%~# zM>q*hw|Yy3L_F5)#J4~4Q~V#D){G;q%8>mk&)qsK@fJvL0}P(#B)KjRrH>~~u1w_? z1VKd?pSr{(YVB)~Ofvm<3#;~@x-2qg47i2q_e)z|*!QPAPv%!+sALu7r639Q$Bzj0s|b)< zjD)xt@bG-#na+!1tP36^ELb&?pmq%JrY{P7&y!i%2zX(CmaeB5(v8a)LGwLMtH!Jp z#Is~?(G}>Ljx?E38DgJT#l9ys0mixv*4E0g_Tzr%84TjnGDQdgf5mV^+2f(0Qkn|8 zs%lB62|s3RsTID_CYr;_OZ=mWAgu@UQ6lI^XG&ergiw`VHstBUGiA09vPy$j7!6^! z+6Xbif{o)vYy2?>E{L=TgsltZVG;47l4Zev*skY4J9Ld(=5u=CPc2Dd=8-y3Pt*ny zWTff%+#}9c_oTyIf0hr7|D?#~R+n>nL33m+7mfV0x(A?@ey&T6D=XfY99vpfEv#N& zd}n6Ek2a-=($?xT=>-G~xPex}#~gJ$tM3k3nP)BC;4RsEq-Z)Wl8&HD{f1_&be?&i5F^{x#S*9<_DnkNE z_&oo4Ga^K5kYFk{~}b81?b|SQvIQvRvm_3Aj)w;ftu9|AB)YMp# z7ivl&rjJm_^kJOG(#gfrGS?_XTVx;FWEoQky8Rpq&w88U)&+=5O*0nX@zKBuJbP6cWEHt;8adDe z!SgL>e^-n*Zk%EZr5v-OiYp==uqpH>wJH7D{?@C2ya)2A&+E-e7j$}}k3zbKs)dM= z+S{nCb?RJuh(s4{AOqdh((6f4JS&0Dlz>A!PE*QQ#N&@b+H*Sf z%2=?F@13cpb;90pS&sKHNy7S`(9ZfKJP@1Kf0vU=g;c|{2X~)LTK{;pDID-=$W#t=Wgg7 ze@X?&xYdD}bL0x5hXc!&D2k)Ho2?Urh>dB00^%oYJVKEz^RFdYU%lKaa&{H&gw@D}t@yGA1dy{DcQMeb)B~ zt-PX+5#(v4v?e{r3tKTbRn{uDRaq`Ff3G<$u~1#KW|UKCAN6=u9F!O~V3#iqe#Sg1yzn>4trBIrQGe~p%7 z4N@_t#D5Tclj~JaeqY8*tfF@foh-jzJ)%=_*j&B@94Cs0rHef-L{N=%C0zc}=TLrv z>!kCYJEL1If2m5~wV{7_C`gmI?KC#kg+}u{m!CR$x^skwad&nYHGxL>qB{meT$#8B$x3_7uggg{zQhGOYPNo~fWnwbV&U^DD zR2*?@FgBYMb-hL7GEE6!OJqagNmZeh?GLIg`)3hL=77?;fE&Bi2P+|>wvLukWN0+s zU9tE?Cyk7sm|-1&pp_n#e|~9lCnPANt$NPnUn0g$6Cd#Bk>CqQhasZ%LteD|l6Wqp z^gq(7kx@_}2u-X=;h^Rs7)p#hyMr>FVf)KkKJ$*PC_*3$tgjZ*Wn1?6>;|z|ScO!g z+r=f-9ofK>#k<2YP%;PQqc9=fdov;H>!{NG6~{G1B3)(*5+ho1f18yikR|`HzvQ5c zWtB`~;>GhR1|s19?uRbojCMx1qE~4qI86vGgOn&AkK!QrHwm(KfE2>;2yLH$Bc`l% zZcoag?h4u`rSEL@eR`8S+0_I3nCvHCD~Hr+MXrv~hRMZ2jz-z-_Qn<8HNR^FRl~d5 zBt19LM6SjC`-_DVf4u$)01b!2Q@w2%OHc4f+RNgrr%qy|Eq*kbdqLdfEgUs8hebZJhx)vhcipn{cMP=IhJ*9Tv{$ zU>)TZ{Qn^UFOvU_8qDM10po_c^Oe%XV&vL$KqoF%G!y_gLvP<>LB7k;sTc=veY~ms zLx?3D3}nXPf6d1H`bvf%($oDT`z8qga#KpQG3&h2G!NihG%rxx+V-8iRmVZEO($4qD#X+-pBl|qH#*W(Le;cIn`@hxfUI#^4jUHkVgYh%*LLLP?1fCM`#hH~& zAdW{+p1ogN+#o;1ZW4Kx|Z~EmEscq2zHv5OJP=3K^n_ z*r=akiYk@gV%RPauRK~FOR9mm7L~f9&n5MK?!(=EX+B*;y^^L40({pzU zc#;a_SA2D&X05jCM&AKTxvR(<$y4GTQRqc`Om|Mkee8J3CUOkG`J~n+yQihy>l({$ zCnJu|8APdqJ=GGT%e|hwq*hq7gU&fjJb5C984zHPe2R<9k3!LqDPN3$-iA2~B`R?p ztVP+lG>mr?WFaL!{PRW9H5bz~e=+x!g^07pXs@BZ20n&S)QSnk?zjX-s8dD%XNlQT zZ*FypL|b+K{FjnOizadTDz8p%zmFoo>CF&#D>Pp#o~c`$W~n1p^V=($j$h=xmFGkyG2`Z8sV2-nl(dr6EA1|81hv6*-q;wSXf;zhyyJ zT5y(Xb7%~@foGd5YRowVpxDr$#_cn*@2_qdnwmJN%6DBP76ag|f2Q~SE928rGeza` zDTCBDxG{ztp2)a`yiE6LDQu+x(cxnDb}95nl5I0rrs#+%|)*;;T-iW4ARG`lvEo0u4;Y zePpY{kvTorSU5DJU^W`pfPZjnCvSSBR%(rCJQ>nPoiUI-WF3p^&oZd1;L#Z-g{vc& z3~YthbF1d6;SIk~Hj%p01P|+AzdME_tD7}4QC{4?-dOYne;2*30eW}g=JJd1t^O_P zM>2{Adjf>6QW3xf+HdlAVBfKw-glX^tS|BU5HjO@sHKN zsi0xsboLM9O1}3HaHqr8@UoheezcdIKB&rQ5t?N{u-N?Y1Fd(AAz8JW#JZl5KAuWy z=H74Yb!#Q7fBRYZQU{dD9-@R8lvk9Yn>OoI*^sA~R`Dy%@E5gGG0Rh8z!07Lz!n7I zjA?>pOd+qO$}&F!MDliBN}|J3L}Ae5!9+aBJ4AQ=5H-A_>NDk$u$Ms-$EvB?Msm5{ zvr}7p`HZfAJF?6E3 z^z%x+*+l815FyvljQ%t*RJLZ#%#GA10aJ2-sh3_W5qRCkT{J?-eog2e&^WLZ{M-TB zSbPsA0I}u)puXH2p(L{=j~{N#`F3B9?+o-v5U(>FJxJrxGPj}$i zv|9cq({KK5;P(Wk;m!VZwv>9M`le(WEElL*f0Hjon!x@GR+ zs%}wwq@IVfI6MI>$0J(q&(kI(7fU50 zNhXf5#GT$AT-h%6v`k3KwbS_>vc?Ra&o}&q>|#HwRpq#apq?9de6x(CqfoC0C;@7L z3U~kqPsd***faXoqAg!qzwf6|{o^^Af41uhT^fk1rvDdnpJY1p27>~Gjk7&qblGDm zcXH>SIh-mzGg>>=f6QEI7E3fuq6SGtq7pSs7)gUGP9GEX zI8ANY)4@C+3j08~0#8wIAByS+0k1$%WtG1HM_HO+k58ZeOuxSVLY|NV09Ya|e}4VU zZrrECea@G6I5*O0N)CE{5@B>rwx-*`{YxhLYbjO)b|c&$sNKy$?!bx5vj) z_QgZg!P1*)ss;kRxX{4tl@kWYzcb6N)A_tZ%4lDUIRs(=-D&zikB>W?GMQly8Go~0 z!_X;;{r2@4`~2?E9`B(o5a529gQE7*c*n(PV>*j_;<=aZ<>~LU3tHbV;jizW7aM}L zc09hgP*vNGyBwYz&a#KYvL*W~KF!l+0w16e2!J*mebcr>X^Sr0e3c$mgX^41ksg2M z{ee9jsih#w*KfS512NrxTvg2|xPOj%JRT1g`%P3v|69ritTl{X3~Zn|Wp2@^`A2_u zOy{4ptteVjf<4^$d(m!;BB}$GEv&?wbVxG*Xb3|v5CCBCAgNp;kVnHISz3M#v7f21 z(TvbU0vN^coiDy`=w#&)du?55>FL}*^zPe5&b1*x8tkMoJvq9tWFQkB1%DLCiPi?L zZb!1#geV|=9lUp8jLOq(8JFq9Bh*E3fy#2C^YiP-%ac0^#TDyT8~>=BK@cmxq!K?1 z(>6TUz-wb2xH~ek3-9je4t~6sI-tk-SV%ox#xL*m56>WDmSj zqeh`qSd|=QHkSWhB6Hc{C{(VB}JV9Ga02%NLeCPziqFTBhzDJ!A?U}gz7u*1(Tz|GB7I}f!6uIpk;}=b| z?MpOVO!MruOzgT|Kg()1{zC-RjCG;&>Xr*1Dk7laCL~gEuD=o?@iz+1 zq$U%pH?YqMPyPbR?>}DoXi~;39hY!7ax)P)Fe`bfpH2B%2T|R< zoij-K8LndG3b#8>W)NahuN@FUtMaD#!(i()jeq@#<`qx)FIfIWUZe37MGITpAjX|v zv+}U*w_8u;5~q{R)T=%{Lcqx&QUtVB3+h4`4|z~Bwjb%oz$Rg##i#6WyQy%AvB~sf za&xp;ep3ppeq&3RD_#M992#A3`LIHZ)l9NKOGiZ{=+kL&7XdM__ha4*G^QbhEbC$Q z#DA0q-NL@wl@3d`SfiG_mi`nDqA@omQrq1~s1t}BR-_M`t59mdpZRQcO?h{HM#?^t zJt30g(Q$G%2W}I}G)a2;G;=Hvx$5Q*E?BjShDy8zE&yItMV8W*Yq`7EK>)6;ZbYou z87xJ>fp*L!ZT?8g7(ElEy&Ml9n))xzjeqcmd#R{Z(dA)FmvKY{`hk%?6R+ySv+1iZ zOp1<*{~5-SeCLSK zGs4l#X@@7Tvd#97(<}x^wqg@8+H8a;q>(CSpsa_c(h~~E6|RL2`Iu$Zml0VaQGY(@ zz8_w2;6XQ#`(|zQjTXQ}s;K0q5iZ2O zjN_Bhq#mNA@h02)H(b2yH-@!)EUX(Rai7z(NP;iE^~3ro!t~$^M_7AmMSptZ{v~Q{ zA4lK4O!w(h5^hph{=5*A(*#<1`DPZcNr8UrVQuI?sZ7w?h%w@jYV6t`H$}~_!SkPr z=HG$MC2u5v1qF+FAsSj!(vpS{+JBW^9#prm8xs3J?D6uTTh!A;l50!v`nsFOCeuiL z4tP`X)MhE0Fd7m4Q|)S9WPf;r!gaaTer;UbhyzWl$vm8}Yyuu!6F>_ME3=hxyNdvk z*!qp7V*8flUt`1BhhIv3Si0s@`{I;ZK0KJPnImbX9l11 zh|l_k@1LC+p3s=Jekx@cv%yQ;DU!4wDjBkK3YrxX0zZud6o16aI0B)d2H}2iY?jRs z;Dg_rV;oh(cZKm~f|9!+qemntt_`V%VP$$pW@8|#^02Sui}8Wjqt^3*oF@U(lMKEL zOc1Uo0s$_pnr$Z_t`GikpB2owB;kWbW40=J+!MdNzdzeRD9{t;pEk0D>--azq~7h? z^P3T~z;_j_mVXj#RpqU-a`AaCZ2y7Omy=Mdf-I+?sV6f7AmE_2{%5~1;=hl)P`R8y zz=o07{qL@vic89jIP+V_++y9#AC1<(ykukg{Y1W_)=PpVVnfXzfg~P_HGj(EvY!f+ z#PYDpLt$1+(}Fwp<)No?G6Z}b*xQPi+%5yro_zW0Hh*=1)CdB=YwHnubx98IuIFHW z#5nIMa|Vvfdy}83iiT`}!6tdfupIWW5SUEswZDl<@*j$RNFoDuF!N&1C&UjOu@lf9 zcC&o2X+ew1{KDf(VVEKOv?OD1fC_M%CORzhRNZ^lj|ID1XXGOPAJ{GHGpol&2<+J3HL)DXdFp5XiSEG5UJnBV1p$BO}Z5q2q{(z?mqG zuYV%XSfJ1HX2$AXX@c6E`?Qv2>me~0!;y}rQnRuLn?2JuS~W-1>#1Za9Ovf-z3Hzc zr*(j7B;D0Ry&G$!rnMNHO?{k$dUuUJ?;ag)&%|17@B1lkrm0mB`d(Il+wQxS0D&3) zM5inWP&NFaX50ZU*^BV>j;va{r6b9R)_;NX(tw$yfx4LGf+R-NuUL9$F6QMFK%#Kp zSGVF1;QjMc1w7dXG&I8<(XTJivtzXa3sA3a(}&O_U^ve3+I_5b$Vg~;m!7Je+mJko ztb5kzAxkKZLo-q}v;z{1%4QqgH)ic;EA2!hP~{!gkOhy3(r}Sc8@vetg+Hj^uYX4g z_R4;A25DEn2KiRHgJS>)JcbL3I>0a|O(mSt!Uko~N(ZIzq|{tr%<+iyq6~<|qtPAF z@3hAPrBF>jd<#k}-YaNn#ysMW@253Tpg+uTv-O)VlO^+zsl6{-sP+U zbt9>$LIt^R^mmbK?$R5WAXsyWKYvUD()U`%XK9Xbgj50697((uw*NUoku=o2mu^p9 zCxY;WV!6sg+3_0|V!^-@c0xcG6f}xZd@F1(U}0#@fg%H|@6T1NQlr7i&fyCD|8*=- zh~C2`i68!h3xaR$wKXbF-U>sM%qwH0|QxzuSuVG9f~lgZc5yeD1VgtzfniD zazYZ`&xtSp8??0*$WcbdHZs1qCxHg`^3ZDRA6Hp>rDEKrLN&wQB%oXr9#@u&>;QG% zWQ!PQ@2I)DGn(x{A?>wE?59iQO;}ZzjZTZIt6RdXmz;5FEmKELUwm^#u8=Vi!07@n z@Fg4RPTU8x5g2=X>nA(^1b@L2e~%tQ=bgbT&ytf?@_rZ52To9GpDo=o7inV($N)eY ztu^2+wY3_8oh4;_PV5W@qHhfzR>&|#PS02jg)@(W@vZJ&+$j0xId)q6&Pq+z$ngV1 zvfU90JtDt`B(F0Vbo|bD$>~${j=1i|Ei*Lh^P)}0JWB9*wDW|mn14r#H25#~ljiB+ zvUX`_K7R{D!3`0$mpOKtT?H|Y;cQjr%i5@AK85%!icmCOfnI|S@L`|+;B!9c*;6G0 zi7Y;d^hV52)fgFuFL;t49JB4i;J!x^K+jkk)s&VFPBSK0=_p;xAQZyh;TP&i7ndG+ zjOc7;-Hm8^OJteo8-L*MZ4y?ie)wB35yK!%xqMJch+qzRYe}GeJg5^)(7miF0A^sSqEhs3qj zkJyeoNEeK3k*D~HYMKy-ZpK{$y{dd!cSopot;NNT(XG$K1qek+%U#QQd1x{PjdSJdG*(-Za zJerPTCCmb|OPD=ZbaT<*c>uB?;=*oCkJB(8gaccGz?QQvwpS$*MSzr;(sY3C4bAt+ z?RhWim&k@apWUMV*#l;krSf7kH0142ZAAU7fBdYdNExMe#x%5eOoOfoe)F>``lC=TmOFIe#BAb+D-cBoS3^Q;Cu; zK0FhKdd+-_0M9RY3_y}9pZfZycd!85U~w)ER(ax^Nc?H#+B!h+sgFZR`Fz>{uu>h( z$cCFVTAO2+p2^HJ^a(gIntUCV^w;&d_g&(H|btE$F(jMmhQK2+p19)&_cT6^{>F$eDao$gS=;}0Dwz_$- zG7R)c$6(s{$2j(f;|W#)?0@e}JlOi0pi^naI`5%){n^0}+=R`kBBJT9|CVI(3v(){ zE`J+TPGPRsDxx4+CO#a-<*8_QU_ZW4@M779@LwY4U>D7<47oMqthAg&WIJIDMI)k{ zi+jPib&&|RK>)NEpG}MXDtPeivvwwc%WBRlW%)of?!sO+-`vlB63$Sk~qq&J~ zP?|-|P~H>boz(%bPCNrUo9td=vPRo-%~;@V{kYRaQ+jri0QT;jLswkfw8U=roFd?Gw#U(y7RnS2HOMmrr z>3=9aH9GkQI8R|1%irizH0){7(gXRYs?ECQS$0gY#fV6cy4_BQsu|$i`QvhHdsmlh6%FyV{ z67^TAze2?h6lpGX*w2UfcAeesOMj$QgLZ2VIfC-$__2V#d~7rUvnq25!5&G6bsH2p z*}Dhaaz)uZfHljwlR07Anx}_eX)jN$3e~W!{^V-b5sN3ne39#$T2Aq3Y&|F?3cMHE z>nuK55tD{5)dW&L_Z1t8V`^@5Qh8v(*6wpBiiwn#^A^mvJ-Fn~mJj*wN`Fqwzqyy_ zdUrfN?+ve3I6`X+)Wcc&Fyje1M@U$&eH_uq?yygU#2aCGGU06S=b*1{E-TQEl43CY zT}qG*+mzQoC3n$XbWJckq6egj1DON{tM|r@2!iNK|admjx|*eE62x zrZ4r%b#!JJHV6LW1QrS~cRQyllI{S>w?9afC2Hk$L*%SRC5QW4tauhkyP7%of`ibi zFZkr*HEK{Gg2>ROaQ711$of}uh93zm*#l<5EbaW&Hd{CPNns9K_kZKWQNUHN#2qF{ z%0`XkUI0$~A%HALkHhPDF<2twj}*0J)C_?4=Z_-Idz_esR@JIb1h`KoorDT_va3HX z@v_a35PIiPFojF4G_$pZH*y_KiRN1d4?3Bz6BHe{!C>#A?2f@FRNDfb4}z`5M7Nq( z(%g#fK&$b)G4whz1%Iv)m=$$jpBflOh*~T3)bN;pW8@WLGHkvAhoXqiz#RnK1kw;m zYwVi7IUyUAlFX4htb~imgSz7^aiH2rOERQ>AgEz{Witjg$$sFS4wC5Uw^z!8{#tb} z1U#rhCCG0K)m9N7hHnW~J>I3XI2FQ(of1%IE(S-N*6Sk7@qY&|u;XqI=$`Cr>E8#& z>A~X)$=@88I#v76yY)J&v_r0^0|q2Vn^am=|4mj}pmci-eaZ8$pcH~EiVo`vbuh=0 zoymd#c2E}#9J{W-76Yt>P=+yC5(pIedepgraMQ>ag^?jk7mfOG3n{?|41n|Otlff} zcjiMCX+<9?Dt`}U{Z=s_K0NRKONFe768@Kb3St#YBN1o(00R;Ay!nmWa7 zU~KK;t~uf}&yFy4*ZLHx$p?Zd%?X10O<=fie1|)i7JoGD9qZ@L`7VowrhaFb9+fi8iE3=2ltmwtCUWs zq>A^c+Cn5qJ=j;jYF(fZX7P(bfKV3M|AfMOKd9_x+>)|@{G;lb)V0p}i7*0|?kgJn=fC#g)mXshs zQ9Q(Ea&-jmv;)I{BSEb+{ax=_5jY^xPPyGdQz<12u$fAPW$`xqM1zLuNk|sZp~6^P zSvop`Mjq?jWV&B@MCRFuHhZl3rP>uUP!uX02Y*?gm}%R%aW*4MkU}(pp%8$}a4C%5 z{E8n!LW%&!k}ZK$t?T{%ADXZp5WifP4h5yE1>Ir+fE*>(c-c%8M72T^vQ{1~6T$EZoTz27T`5L&@oIMb5VCNFr zK_BO=O|bHvko*usIdx98T&_i}hhY-|bu`h=h*!tljkob*2a8zUq*yj}?Q4YDM4{m~ zb(S<5?`|sZe8^>`DpS^EkPtq`4PmI=H>jrSjR+RK;|z)s)z@`)JHFV@N-ZWCmVYe< zdU#o)V9D1W1B}D=gS0Nf^*WC9e*`wY>Xew6$H^m3kn%!`FNjZHMrPh3;5uD6YSaU@+4ZN zkw`4_+DH^{`p6PI?AOzAfVbV_Y5!@PG@{?XldhM`UL^*3lG7m?_4X-F;A9xxJ=z*u zmmysgAg|TNMt z_GOOiYg;&_;Xew|5JGsNqP%35+*8q@=ej)E za)^HE(EA)F%>xeAAiG?I1goRNT-rz)x&Nrtl z*1dQ>s7qVhlP+)s>K~cVuc9_Nb_MRaw$6^?iG zD}0!$|C!fa4oJ)7(qy?e`~o4D@%uBsqQ^36&v$lPWK~3`MUH-QfdeVCx;2YwO@!z24CO8xJs1z*@4-%@Z~ z_JHKQqVpX_1S7{Aom~qGn2ihBo=!X7(Kb}upIB`IW@j{HQO@0s3I)CGg4GJ1n4A+@ zlC|7hYRC@7c=@JxFtbgFs?6jH`mt!kU@$u5j7!5nr+*6rGAOAqYHR;hbHM2Fj(c&0 zbSN;Z4JJES;}u!`z?B%DcDnAj-GzvYH6+ur7u%oG10%S&|aL zl{M(H21LXxuHI0ZCuq{oTMRf$`Wz}X@3y1As4Z|bX8&Fcw(VZl4lpR4AGmQ_&mq!U zxpNh`fPXRVui`(!mJ2%-yeA&{zD2?)|GaL%$pK7PEyUhb{gO9Bn!Ym6NvP{g!0bh= z)~v!k_CseDAC=qOG~&QOnCf2pw6gk;{S)Y`=PD{B1sE8v+9czT#L@H7um=S~zD9?@ z@+BBjH!TTME{AR$=jiM{$oH`u?x|?HS!3Rev41uBaLSKxOqiq+j3!C>7y|I%B$sii z#j+b;b_Dlg)mrThn~Y5Y0ttD!GvQo$2|qZL%`s;MplfC?h;O+)QQ3nQtNK=B5oq-g zqLm_)Ftj9Qn|NHo->$dKk{mU7+_Vv8q}JBJ_(9BKy-WbTjaWsc0_cPDJ6pjup*dM- zgMS0&{7leRGN`!=F3?28;=ufYLN5(v3!;*4VjRU!$BL|+sNZpzJQ@%KG#Sd}qa z#UGt3t@8AClA5#%Jzb_~wYg1o0|vab-)RCLC0XVTdngRO)(xHXN^6cWgvzJpjid!VP}^;(uik zhgXATV`AFqEq(f#v)`vTR>bk`Z&~St)Et*AtGLHiBytz094Vz>sBnrx+@8`ptz~yK z-P-3+68IEwp%(bx`GyVMJPxzDy) zPwV88R`&R97xpZuCMRFzhNwh@Jb)Nt|C|t5{`QL31R=2-e7>Vt_i0hk@Og2_xWNEq z3F=*eVrPX>I->|HU0#c@TLoO!&%Uud@XHD=^otN+io={D2fE?tY~z(sW^g0+Y=BL# z<~wnfvKpHDyazNRQV0jnVt)pHX>1rq;Ofql7+B$hK%kJ?3t|3WVd*5ZycG-YgSqbQ zY4GeKcq76dVFsA*uUolN8qGwOyS;JaeSXgD+!;U#E@UKJMEDP%qmXt(f?5AemUyX0 zGAcs&S5@+bTga@m31Xq+)i9k}W&LkH;wr&?72~IHwJRRou6P3%y?^dT9P4$>5RTXR zg`*Vpv94x%a%^V{i}*g}{&;4g)jg_dvxSJx7H*?JZ#&S>M)WQynA|j)CjxDqdW>oI za9Ifu_X4I>vSA_%FBrg;<=4BMUvkLzkLPud6<^Y1MZP=bLodCR3|Aiy>k_9AYZe6} z$DM0mdAz<8P|N?vs(%CRtD%e1qENb4D_iAg?!zm{KQ*S4jwsG5@_UHWZ{2yZZ+B7O zt^cLb3ZUpcvRFk#3|>G^bGPTQ$Y%ZVk*h)p`$zqR&XOSqZ!3E+qQ}EI{0qwzcvT6t ztLb>wMoObD`Da&YH+5G#{}!YFp5k#Ib1UoU^H&NEk`gqc@_)h;bvxK|h=;ELp=XVo z+7wP!Po})6k>Um)p4Fg;Tr!`PczjEDP|9`Fk(Y-{)-%t_b$SKBtjDes=Si?Ct!r)7 zY(j`S=wSfWm=2vt3+AC1v@Gk4xw}EnV1Fh(+MXzkY8QY1;dlmbo;9lZe}c{c4Gr4#3eIwlyfy8u6| z^srY@&3hEin?|%?TfR9bclc~^70XB5txuOdt_Xd~_ampH!GALe_g*2Vct)L4uZj_dG)u4 zDNxwJTM78mmD>qvi_0N!HNo5#2XVI{m++s(AZfSk)vbw@61$4}@207aWP%lHU_|4m z?nL&df`47oQUX@e%ctCDaXIG!s7?c0;S8N+9yR$cBq$=83|a}L80(x50gjMF&@FD# zt0L-B5@(G5EAtPNOmJL2^J6qo%V`~J=`Y{Z0$U|-OZ6wRdXtdUk%0Ph0_V>T_#O#| z3CF!j@U|_5@t8>poPx*U-bpciOi@!9@hhF0@P8BuoukP`ka>pjDYSwutD=a2$~3D$ zEtS~!4_`I^{B(sif_5D4&V=X}NaQ_w^_`;*4cA|7Xk6*`A0pZ4*Ret868CY*!+OHd ze2%x4j#S7}tK3IBewfNQ$~V(et&SCGRw)63qp*IvCmqLLDm7xL{TcUp7+yb3UZFRW z=YMkvT$_8zdh@R$H}Td7xWBa9YE3~&y$^K|y~|+Y7P<1om_&O)wDeB_{i+^_JXnTn zRBb7@Covi9-9^3`dDKzR2xzbLE#Hy<9fF!Cqmmtmrb6fiIVYiN+`$FlH!}z2e?p+E#0&VRTt zbCKI8Ba{fnHgnu5T>;p#K zTRsr^4YU|rg4^BB5CB!S63E63Uqq7i@~#K+YBAkcn{50e5FHoza#uuKBZ))~(-h)h z-su9jCpS#6Ln>h0?S-0$iOZj@iBLXWCe_V?0-*T`B6J0+C6I49sWZDPr0%b*@;PtmSQWB9A&joenn+# z0ewA3Uw_|j95Ao?(~;HRdwH}_49?RWy1D5il|K8qgDXC8xD=@UhbTYnYT;%a)$7>_ z?-RMIT(w4-;lR=ORm_$_m3;C5gTdn z@gUMYK*yNRG}7t)=tUnT&U2~@ByB^;&Czw04L`tCG#{B;E5OXd+rHBDC+j;)yRlPFTk4}xd2>&e3AC9y2I0FQ_C0@(Yf6v38$ z_HPd-9bKozG#j{l27fFVNiuK=9eKfS*6|?JC)jTJS1JDpG9Y3ZVg*YMW+8D$jgS96 zk>>4M8$@C@H(*qwCyVWP;xwSgG5!F==eC>DLl`J=dc=D7_4rTADlZ-`_Gbt77JY4n zf#rP#q^>X&-Jg8FE88=km;LtE^2q!TNIcg<4G`ku2Y(%N=6@J&Xs&vsf7fLMvd5p4 z98QQUmN2Ey-DP5qo&utwGbc2#Xi%;4-~vvq#BVK!LjW9fS6K9odN~?vxUKX#G_}T! z&Q&i;pC>{Eqajv?8x3?B3aQc6@S?kc@Ow-fzl_fKfH8@rlJE)w922JknhIxAkM9ZF z`yodUgrL=84}UB1Yo`XH-Oyz}4c`^~)(7M911k%;$~bZ8Q7Dl!+s6bXllg7#ylP7_ zgx!G^;!Ei|3bng<@d+mA;%I2XYcDX#o`g*_E`&_~fa>B{eU!&_iqw+S`6Rzn&Q=y^ z*AkP4F$K$BO1i-|?dGuTG|<431=P(Uk_#Qm}oP96o7ZDWP&m&LXEY)*iwE!2`s)!C==iw5nC~MT8Ks*p~JT#-V z|EaAIv=ZwhP+U>jn;U+kVU|gu1vv9*o~3C2LE?+)GYAeV%L>1YI!ET;4G@GOJ7s#L zXBC&+9)Eyq+;o7DPtO&yIgzJ*Y6E7{u;OP)&1&bg6)6;v?fUMtrT-5as9sAoG0$9WlY)Uk<*p42$7z%nj zK)2UA+Bvxy7qM)%azR1?ZHpvmZ2~2T}}S5F{@p0jof{3dyn)vd>sJS54ebtansdIa_7qmPhmP! zbGY|fecSKWrUC>~@}|_h;7$@(g|B3Sbmk8~*92tICs6sCK!~8!dy&zhP}9oecVvb> zS$|+vaTT{Ui=pUW2cI7KyU8kKh+X*fY|)td*&aYfrHRZTk>3u)MyfsR&$)@|VIWC2 z!>?>+RrkviK? z=!9?5)%q!Wko0W!wn{n}XGzi}?l&IfF@Lhde@Ix2n(LvuQFQ|dQyJeP#)O=hW17B$ ze#p>`b>Iu7*b%r$@v%G<<5=H!8hkJZ0^{C zXnGg?AtUrR)5uLL(SIQmyAKY|@qG|O$cJ1{2_G*}8*B$%+zL)U&Oj)tZ@yO3Jbyj2 zNiR{(Bh6tIWWojt5UuN?x@F;gM|e-F+mt4NQX3Tig_s6Io^a_R(zc9EnmE>VqiQh? z)d04xjgDV_D`6f6I(sNK8&KJt(IV(EpKw zxQs1*XfHx>y1mafEDsX1RyEh0%6}FjZGg=f(jw+C^^l9J94IO`(B2)2PcwG>9jsj% zDkg{_RokF95_iN@YKn$w!1^~=L^JPe?@QWZ zQP}~OId_az6fRvVL~V0J0|LbQ6@u`m7GeV+=RCfTX&VE}@y+huX;rep0)J6X0vZDm z@ffj#Dx2B|AgI}{ec*H^Iap>s4cOyj)VMoBtgNC}!tDwX?~c=7btkZ#@!ZC%Inkge z`=Xy8)_&dUs`$!1@Ofigo z`@+X_yDER|vU;qH!vT$*A*lj=EZ}2uzEI+y6(up24@ed3RIq)P6Hh;Ja;ms-O5nTy zP;5wI_x+Jmv!6~&IW3gNAaKa=9s$9o>(?P+ZVd7k1~c3OmoX-A{ePo#ps1~d*mMyc zQ^Lny*$O1Cb=FH(N?dUtN|2@Owv`PsyvZ!k@j_mJ8*WSHx2HoW z4yf0g0957z%arZf#DLl4KCSk|XhV2^80^Atg2Q98GjcDCd7Gx1P&)3X|Jyf!MwNa? z; zrxPW00+sv`0T$8#c2NT)E6o8foysNFhVA6?1*y5egC1xr1ZZD!fQ774(kz5P-7gOk z6xE(hDZyT|}JY#)NnJR2b94|5LEE=663( zd?KuF-!Tu;vgxp@0WtL(16qZ-HNYKf*%wswoBeQUGxu40 z2~e;Mmo)9#=L`hTfcShz(xdj408u0+tt2V%3V zmec6TfUL2n7~h!t*}uRA6REzPKXcKO-v6d%o&{ZOaUK}(KLU+r>rwGjqWQ>9m1T=^z1SXdZ_TRt0J+J=%7x6 zM9BWCf1P;{^=-Wu1+}Tm5F!*3cYL7;R)2XWs+{b$OIYCSm(2b!T<*>|UO+tHW*}l3 zHv3~5J-~pkp?#FPz<7PS6ZG{#05=H;A|BF%CH}owEcuV4athf0kBd9`LGy*r_SKxe z%57{mHZ`&88V!D7yh7|$DA63~K2Me~J6va5_O9U)Q8VNz!?cLNTC;0k&^E(`!hh|C zCFScAI$mE2W(d8=RJ1|@;Eox4;Smj`RgtPV($&&fD=+1dNpE~$NfBKGU|wf5-6M2T zD1YbF7>r_z1=QC5Y_iBZxORk`TiEc^VKxo_(i6I%>kd11Vd4cI{ZO^Jk&@%O7S2JO zc%)c}25E^+y3CDdtG4zdAyZ-R?SDSj_=oNN{og-v_4|W4VPWJ}m6O;~41NhF84?UA zcm1{E7CmvwO7W1H?T}j1zW$|zBl%8?hlsNuERmZgV-r6VreZ#Kxt_6*?SAQK=r;t2 zcOW_AtE4HE=q4cvTcg~ZHy>jTEkge;M&SpY%4(bg_mAiK^_;;4u|2-qVSfMspq#5v z(;uxY1DPba7*K*KVYv{EroqRl!20qbT`5VZV|W$?Qd)3C+QJXg`iOgv{6Yj(s@z$q!QQ_J$%{TAxkYQ`Q0KvG89mi}ym zZ25seX+ARsqWwdz8z7?J4}Z{6C19LHSj!KB?t`HSq)G)e2SMOG=^mm8)A#%`vQsp2 zln*CuPj3*_BP{!yWsV_&Hi!hRzFfJ$RzDR)C6!tYrkp(sXE6j2#9WPNKQ#;>)Kgz0 zLJUnif!(Im4+1~u^~f8R4B3fjy^7&Q*nzgVHNfsyq)ns~Vu zM$1Ho6KKRdHujzE2@|;%F)vK4O$vm~`WxfgxV{m;7eHUd^?%CXEa%XFsw6GQ1?bn| z-a>acE4lD}$P*E!rhPElGCm1~8EYh*#zx>i-$g26cqWbaPwmmAZGqbNJ#tEE8Ho8` zL$)VVhVUh1^QJmYYw7GVk4ss?gaiO$5JH}F@^fg6X>QsQYuzoUmmvlVURc36NEFm5 z&){URlzZ3dJ%2pyF>q#tOA{4ee90nGr`^yX*Y)?Go9Hznd&}FmqiBuMStDA3Q~vE1 zeiQBU!b{$B-M3iRxa{kKweSc6@v75CeAi+4pDN<4b1JfG@VaelJPzL)>4?c~!ia`J z@rSMZIVuJ>1%V1DVim8%lf>;Q z69i;jCqXwoiSz$Ql%Lb4E8cl)Y}NfFASGsgk*BP_WNoXO%i`V8ypYH#l6Xn~zr_-U z{F1Ng9DfcK9xO7=<)F=BHIjFD6+%I~Bx|t>?%ZTi^Vn&-te%^%PRpE=1#+p|<3uUJ z5#xuxv%?PUaZg9peRi?p2LPL5b{O=NWLJkVFA31Dog613V&Zb7ZiqD@;vAa1y#VHx zL?1wPI`GdR`wm;FEvYCpw1y5s+>8X&LH?4tIe&*?xHmiiIRHEW47Doi`8G|rtE7rB zqtB*iDW-{JAw5fS|D@|qXH<%iP)TjbntdyZ_4PSSP3&V%6wYa0huwYzmPxn)ZdADY z_YrDmv*Dq5$VJwG_^hmKn5aCguHiLtBBH*x{6eGv$_dxeAzENtsLG$W1%~FnjleE0 z)PL7BfoNdfEdJEAR8?htrOy~~ybc5H zGCmLusJko8&{Xoc8L$OCAYS4z_%*eKZ8`^t%_rNr*~M<4GrU19ZhMeeYuRux5aMKe z&TF+km07Qof%6(~Dml75<&0Umqz?j)xa9VazK~FNO{=GB=7G;?zEHr}_kt(Waer)_ z1kvW$=g2D&=<9gsHAiDjt@=TmO&P9!nw6IF&sx)5vJZ5nV z8@(L07)9)!Eh$K&u0=pud1o$<$6=U)?`hItf4}!gUs~D+3ER$o8)Eh|auo^iXip)N-hadVY7i{;LQLunoIXU94LQ#Rc25+!Fhtfpcq&TB zmbTmVRt;cb4F$#03=>&o)NO>9F`4H!?mJ5|FGtPNSzsRN#zj|DQU~Vguc&RN*Ynar z8Bjx+K6|*}E0WYs#JypGwqhDd{=2*_T|#Qr3RHZ6Zyn;9>7o6(|QiP!Ef-XQR++o)58} zvh+^vO43G$X|&*C!@;r4fAXgrw2P+&wdTuhXQ?wQ7Ntp?#scP9gmUA|;`7d^$`eMt zBWNX8aOr=ue_OCdR^nj-w|`_^-+}kuraW|AfS_Nb*NdH9O&*9Ms8fDf)?(R&`uZUw z_@2tAZ@Jmgz?-KX3whI3h@doCOGl=FVovBgtABN9a5E-O#(Ow=-7u`K)oQL(;~a%f zyknoJ$k}XT%I5pmIgKMbDFbcQV@S{#zCU*|bC@osJ~pf5)R7*DM}Mvh?iTn4q3E6d zg^B~?e!RaAvE?A}7;+6+nzaw1l+DgGD3c^;c35cW=I|YtuF3T=N#innU2mD)X4TYN zc)@>*gmUt6j>8fOkn41nB!k74tSpT?!#jyVT+>1Mf5L3nZyt%LeyzFA?%WbLQ+C!H zZG23%a>@~EERzk9D1Tv^j|AGIz+81_EDZO*NFWo@R&(oipUDgY_K%cmP~41dt;uhGn!Z;I{kGz+QL1H;!D=SP$alrzY=bOEhnroyGoO~Nv&peBWL!f=WClEy<_2*JvP z4hxtJA?|QWRDS|nRKzo_;1at>u3}3Nu_{WnfE(_L5Gx-zD!QEZY#Aq2p(UGUbmBsA zb5hc(5h}|L>3O%6cjR!cg+*oNgG*dX~p|TwOa@{gmHAN1J+V3o|o3p zbuNS5&+~E%r|o23dJ0_2UKvLHYT@OSyWh)y>V?uD=6{lii*u@6w6Xb)Ma^srGThsC z41AT0+b^DSz}x4fZZj9TlLu-SB22Rq&l|6Iv#4H3o%;gK`$)pl-2>kF@+nHuY`Dohtrb`xUT}DheaTh^O_Xu>^&&Z z2v-287k^NeMzNWN`Nq2fxL_kW{3ZJu+g&~_nz zO!(sJ7Z}?uaFsz4#l$%#SyOOfFnzAiYVt=I>Qnrl@et(x@+hUppF&oyPN?RhH0$v> z*S=+k)HXTZue9eTL8!X^b)W$MKLEgm_S(Y%CImtOH6VYOId;!{rlmk*(ZDwcq>YrP z^M)aVjK23x@Sz&S4C`9{^hg$WeTmS7qG4slS=(nsA|Z4m1dpD`P#6BqhnXBhf+$z~ zpltN0f|hx;vm7C}vgkc?PK(|Jesb*2->(SD9Hnx9Qw%)qR`#PYjLQUOO)s@n*pO#= z0`0OZxcYxyoih>#f<6y7$t9v>!b!9Pt0p6RvpCAR00KC^!UVh|kEeIrT~UeDfdFcLd_@>4)V zCBbLVWy+uGMx73^uuIX?QrV*=RfoI4$SK#MuG}7l*a(*(F%#R6c@cgXSsvEFHcG2S z=8!E-F%b3yBl?)Sv&MYu){-?o4ZcS-{z4b=q64Tp4)biL*)>Y#aL$%(HUafNVpOb^HK8Bf_f+6zRF~^X90iHpblS|de2bjUOO-3j$Gz2#_WNRF3$~a z8`>W1j`3KFBxY#?!f%-%x9fLK1dS5+$t*YNCr&d4Y{w=*x<;>E@ih#b>)~WmELG*? zRF+WOs%uB_%;8KB1x-Of{W2xis@Vj>c7SF8$D!5@p8ubxpE(q30$723AWb%=NoVUJ_W+%HtUq6)*)|Fry!G{+N+M_P$!l)8@nTGTzoAK4<%ABM_QMtK`) zH^2x2T^MsezOJRR6g5Z+|KywpMf!f0`*%f|UIOl|X? zS=iJGj|QwD?v9oo#O79_AvNrkY@@N1LL@lOLLhCBIHEq>acFqJLV+6oXP1>*hmZpu zLXaxpL&z3n)v_oKE{wx>Tu(g?s$=U0n$IL`fjtaJj*>*T;VcGaQx4 zthcD0!=`0>xH8OF;qBWtCzU@eIIrh^z>$M(Bcx5A`6CH za!>5|qA!D3awi41kWDjT~M+z3{`%t!}B`vySeiF9JolstEq?+HWWQ0Ff22I@Hng7{SsnwJ3&(-FF zr+ro0tSna%%}fqW3_$KDo>cK65yDmidOq60dx-jqcvROn00VUVK1F{8>%NJ;^X^yW zJ>4+_(j`adwD+*Z81h>*lMbdyJj$*4pK&bDkbwL8T-kfY0Z~~k?sv~fypm5~D-tgEC$&mWK=rids z(?lIgmO(4jk6eQ-U;JDOyyHT@vu_1PviuB-e_7nMmSg;$2EF*G5jzJ6^xDNJJT^d0 zH-S{fqm$nEtK=$T#$y@1<*U=I+Yg|a;ArC2bEmM|Fi^0yBI$p%$o#w9BxiBbq-JBY z*EiPC5=8g;P)&}8v1WR@B1@$!&%}*cA6%r<&oTHgmo;p+j{ZEzoc3CqIJ(r#hl%^n zehx9KP;u^yCZ8GRftfiSSUmoVr8WNi#X&+=;`UOPt#w@tM7IC~(T zHMTyF;zg08w034{a=DiJLR7n^{~~Hfbxc%iY4>4?r%O&CYdaej)U3jP zZsZ1l3@d-WpBVTLar##J>h(Dt4w&&*A-l40{m9rt>lf;Bl_WDMbKh$OC(a%N>U3tr z#DQD86g|OFHror!3xI^mVVw~=xqUAYrhFk~G1s||JC>be|6^1Mb5}4tau7xxdQ6r{ zNXwXK^4xOZEhr4t2HbhDKYIAtb+n3%Hr69sq`QB2_B9XpoE5Qdb<4}#vMPV5NF6qJ zE^B)EBTxNisu0JszLh-k?9OpyWn|sGmc3IuYv+ zf{OL@l-rcKujmTD6(T1H60?)?#(j=Ho`mlf!!9!q|Io2F=A2njhiQVHgQoKLbM?qD zf4P6dY1+(E>mtX|;f{>k&%VWL>sE1@YLw*qWxXORwk*wy!E;<-INul zBCoYpI;9MWqyFyVR65P!wOyOuNyBzS&9=Y4_3u*A7EXi=2+xj@0&FRCryCF1$~u3{ zYMlZarT2SOiftAKK^(~1Q4e2SCzE#0NNl_ryr2e;}HR^@}WN2*v(vNpFXBq4Dh_tpat!oW#L^jQ_bB`!wlk& zbw;q+_mec%ko<3|{KuG(XyCG_b2FQgDtV(pu)Ym!jE9-apW~D~t>Mb%Y zwCsmyAsohVp=V_!F_WFEKawz_*|Zu#Jm+9c@0x(TJu}zuR20)z)s=eRSZ{GB7__G9 zbtH;5z+$Ai?6&WT)7byyt~v1JnVuADBbWYCp(VH>D*gh?>}eb~fRel7-ogXzxx#1o%At!_-?7`l_8rOm#8;JEB;tVdw#}Z4B;=dM z{IcHiSJqS{c8rE5yuye1wssbm?sGaGG1@9?PO1`RWmQybfUOE*Vi(^9SjC982;%v& zxk!3+c*R|*GERcL&80kl?z?|O^LFTeKr?UXwHR!YObh=|KNUSIJI7aCIa_N|4HAQ~LRq9F!P13k>Rvi=)|`K7pK3}W`Hu^rk&nedZ#cOv@o&fpuG5n{0>gtA{V=f?w+=0? zj|gp6!8gmn-n?pj(FP5QTozPg|s)DNjg%7gR_A(@tqZ zUFDiHoTpOL7d!2V+Nx5ehdrS_s1Lmov5bjZPTp=1n^8_&2f2S>a+2L}!*(Mlf|I@3 zMvl4PmCB*-l* zp*J|9*0hmsX5!SxpvYH+-IUf7fQ816oS2_dzJk_+L_ zk`)Ss{{X}P>k=m=rf*-8ihb0|mvkRY-AlxtT_${2(u5&NlipaRho(V(l9&*-=gn7q(pqOdGE8%jaGCK*VX%kjbMqM3xaW+>VaM=Hp= z+LgIMd_8}G^*kwi@F~tEyt`;B-BZs9h{D*cawrr42;Nb0ZQ}l+Yv8q0gceFtk^mto z);~y)@0xUEvPys22*aA~wVPowr&Ima*d?Gw4EoiEcW8jF66vXNepzTRf3}wLCL$v@)g*+{GT8W7A}8zov~hg0EZI{>Y6tqZjT;TY==t$ z%fGuE{5Cz>PA$t^qGYr^XtA$Wx}9@kEKFUV#C=ttjewDp>S?v!|6PP+CsD&yp&;m; zX~>m8%;mo^pW~#%xFUI_Ugh%=Dw8V=tz?Wl@kXW>18nqZ*E@t$_TcE+DJaPmVUk># zkz;=#kw_0RKPNjf7g1uUTtJHU%1w@}lIhG`W21)9!H>v6)Cxu+Sl*}TB5HsU5$de9 z0c`E@G1Xi{S4(c@9=OO*A0mAJ7K5U;y+F)!Ani;_w(ZEDCj|qd(2Y;@RUW-mqVn0Q^gF_QaM={}N%OBCOd?WRjD4jh6iVK0Gwo)rEif2^iM$?_d z8u@Ne$V@u)Aw(3dG+Jj>uqC-T^{Q))u0dd4(yrj=<;$R$UUl3*qs~8w?^1KL6LWvd zGkoO`dD6>%F)n-uhB9v2CawV38fkWjl8HD(CW7+fs|e`=QpfScHNo#tATK;S!thJP zpmds4#jX3E#*@gRu}c3Y9!SBk^4#(44g~ny8{yvz7j63nBdgC`0gEl`KT(z0sNK%q zW6rQq*{~o{vEk_i_}nH_(o3=^&*&!n#1=mv-}Z#PnWzI!2jPylc13ke!j!~Plpar)B_h+vzg?hX6yt5j?2Js#((EiQ1s=JgGQX2U(R#^o&afW@h(v#UShIYw33DcV$*Lb;XaNktV^--lD!l*T(_Cby^@@|L z;`A+go^GMOtw2TlyOabpUbnL6W{9JO8@mE^5?E?$?3#~+ngPT}05Df?b#z5;ggdC? zPY3fb2vmTHa+HG@2x1Tl@dFcpKtTY3fgpfEAP_JFf2tj`sh`}TjMIl^A zTxnzEL4Z{lBsc+6NQT)Y`hYr)4b%hkoO70CmOV{=@+> zfyZ0`5^*mEJ?c!D|G|G0M#;rhpuCPoP+@i%Cz_)&tnD-w@YT|haATi$2>?}} zgp?u$JQY*f4y7rwF5Mtnz7cPsn;(3tBB`Yj?NLyKc0L`V*NApvc`J?PnZ|y!bIzs` zBu|W9m_JICxDrVHXXF83cohsA%?@oq-gu&vOpb*jcpe!CTb_RycI{y(s^|052ED4S zk(uhLBPrXN4-sjX-sJo{Us;EWAUA+~OpGA8s42R`HD&0et zAR~IlHOsS#sC$3ypvoXtuBlX-CL4!#iSwgYZqQqRg54MrpbHknSUg}8+HB+sxP>+B z8tFos87eFXh;gMOyH_714Y_HUWdlhmhz!GV=2_{UGVVi(w-m}Vp2|iuaZXqVK?20G zmxf*F5hs!|N9vHb@O{|3W)JnJQ;2A2>dzy{Y2mz*m}Gx~h0znX>7#!+0Z6K}{-kJ; zxtTTWfw?AI#?j81{u4XX@VJ?P@1l7%Oj1US*3uJt#F8?e;rZP&7t$#f{Tv`k>tj0I zq|&(~a`r%2V3Q%An0OdO|JBJYkz#Q4Atw-LrVoKpsvEkE+%utYDkw9BF7+$Y1upb) zU<07w3JrgZl0paau)Dx91IoI>q>xZysofept5p^FP!qwef4k=k;@tMW6$hms=;y0Z?~PP)043rlmgV_5BAyf4E39Y# zcr?G}strXJMCSWbW!?meuQ*c_92pN)#qhST?Yn=aU}3k7W6rM8q5)QY)i3cJMg8uy zPk=qfhZ6D-{}RRcpg)&G0szb%&WSV~@g2z&8N_oqG0(D%OhU_J|9w6~TUYLIg2%&Y05n{>noWs2`#tGA9nq z@#D%Q`gw=oD76I}00$!mGc_S3;vSitVrdmwqzUBj{ zXUi34vva3&gA%126E`R0&L$|N>3l;yBt8gHWwO_Veh9rNvpP06HaRScsBgFk7BqV5 zL`1U`tA-{C6ux9xi~PTyr*`pNrI*oyUAiC{ol{lF{1BxY<<#}?uw1W@7JJ-)(0_m4 zR2%c{y|tF^LN&=9=~pU9f%Yg3{R@0;tLes8O$GQh+E(af+~J{+s&0jp%nf@jHdp9s zfi`=nduw!dC8|DL)z+n$lA8QJ?XmfsTOHE3)uS(*o{dN*5pwvRpbp6vZo$Ol@ko5c zz9($%K5jAaNC0U%LT%QlT{KG0|3`nS0{Pq{o4kzEF{+X{mPz!u-VJbGPY8QnsX!wj zMuL#!ChrVBB&VbP>4is8N3W$`IP8?;->41ME9!+v$AJWy&x6V}1y&#l0Q#S9PY&e- zEs1+FsIP-WZAkF~W(ud>D`DdPUmz6@tN#T#Cg&du>687C8x_CFXw^H#n@xYiJq#{% zb5jcYs}QuFebGfQgZ2=`*zP6D0>NLSWFg+P2Ep07yWvZsBmPs;kRnC0F4wKu!{cO&7ZCP< z6_6N}i7!~^n|=dxFnXW^8asbWztYr#q}xcG5OVWDj>L*^9m|CWF0Pq<8mzB*cTPM{ z*qigRl(<$P8-uFhUHmoV{J(~bQG7ytJ-gUM`?+K(`HoJw{5ZY{x;PSN=&LY7fk41} zSn~1v_s!!oKFmKwscVH#j1}+?u2N?AoHSXZFmP|w6I`7)u>+$TlzMyCws?@J}=ihY50uk5EG8# zC?&*#uILK6`-(Ah_XGxVBt1>*d$cJ==n^35LdwnCK(E~Bnm09FWW#&MB?}Z;gDkSH zr-Fg7;w<9t7+MvMhpK-Y2`8TpqWRI5;n^Ur5jJIh-6NFDs%wVRUiODo&0p|?f*U?w zh^m>-ECPvE_`HHq7fn9lZd1iBFPMlF9nXuL>?gw!;koMjN<8j1eII zf_Aa4qoS?1wi^KjzNl}UIUEDjler3q`NsF%%w-&z!DtD z)(&beL~sT_#7M&*S&8;dv%b;M%7O-LSvro8G~t%601=BtOW``lS%vgY3q?r4E9&u* z;-awzsg(NFP-D2jBqTegu8d;LJrSxg?Cq`*cELaj+n1q65ug!sqk=slVQ6anRsa&n z8yQg71F(PB!s~V#HRdJzPA%Fy;I0PHx30oa?ga(^J%l$$vT2{{?!)3&CEu{e5=N)#&f?s*H7;gIy z$R)b|gy(?@A@K8jw8KvjsL#m1vh^Q<3AiAPfP@n`2*(BE=C--e&h;rE<+VU9I|W#s z4>W&KwNFIjv#5RYqRZ1%pw8)!YkfxI^u>cHihd;)!;R_uMT0#Not?Ti1Bh=YBT>eu}khbpaK)CK&%M=L*Up?CmR!E%e~ z5V&J?eT7=NKcn`?2RinqZZFb0dz1B>9~pn(A^j$3y8Gp?6j^VK2euY%z^i`2(yV^w z^0ff{inYTWQa|MZ1DwT}d0|=|`kR6h^iVz=g&;Xia*p%SGXf%0=J0nWxXYZLm>Dv` zNegufonCSXI<$V0IA(HgM?=Iy2#zAn-yV-N8jFccvtsPWxT%DP__0UiQ2VFinj?Su zv|Wnge=&nkl{+pNPnWL1A64YQAEBuO%xwErR8(yYc8fm(nW})=hp5J`2CHha3`F{- z;c)(&EP^bVxKYwDV{UU_0d3;|fZAShf?f}jM!bNfs28v&@&)X~egSI`Fd(TqV1`d0 zn+O-q-pg1L2jg(S2X!YRC?xg`Qqh0Y!idw8x7Y{h73Y>+zbl-{!cchSqGqyZxn%K$ zOD9IW=igh`(sRT7v@M`85e)3lmBo}u0gZX`#rEOFdAy*9D|q>m`Qu?q@uv1$<&Q-ZrcbNuHimZZSgJ2;mk5XZnAfZ1q%1 zN;nl1Dtzy$NPh202=M(LWC5dr??dh2d;fl&wE$WTj9{msHK1TS_$`LXw0=aviq>T4 zJFJo4>Z>TER;g_xSD`M}z5T6roFI_6a~{a4wEu%b`a{vrhX5sJ0{~POK@>V&cG6N^}~XdyM5;>QI*>AjB{#$^j)4UP}yT1&E=Scg`i z&`0F5&zd&EwlY94<-;_AYIWUtbwVxir1-SE6F^wZQCec>EY}fRaV~$zuKAjPi}*yP z31wBbH`ta{@TfR(r_ z^AnSk1q)qHN`$T^Q6FSbR{MsIko(m%{c4f!^CHoz-7^V+9(>6Yw5N*{5v8PRl zB{QXQRqXb{L-599`EIO@&VVU1+5=bnrb2Kr;;cSc4V2!rw>OYZB)nMOeZ_^+-5TZ1 z1OE~9WHSHTCaXY`Iad(`OR9o`i!h!1cppi=H#>*B^Q6(H2YG*3k2sh>xC~lZl{~AP zTq|_8IQiX)(Ew7V6423ed?IpgFD+;MUa|LT3r_%P1uy)yAfA6H^d`z7c)k$fnKw2C zdcM*pg1Khcqpf1xAobAiv=(3LFo9KCXL@xHrzuOu6Sr!{Gqb}@s36&1?X8OJRO!B#ss}|IG{ikp!WC1Z?{fPZK zWwOgj*IxWQG%~rb**_n_I>3Q=11k-Lf|1F*QF*|41zcWb97DCBk0i#e630vuqy9}m zFyVPsZ^nWLq3A?Awof--Q(ZL)h}Wyj>CU1vQdEfp=p}y*KH*oWrf|hg{^#*dW`rJR zPyz&A`6`eV(MLIMcto2dbqUb<8-lGwjA1KZVOz(nq;g6oNL_~#V{`5 z`_RhDB=LVJOrF=j(3P4!@ja#MLU*}6Q>uzH6RIgq)H74Z4FE(~EHx21blM8tSEn1G z;S|J`P61Cf{dC0*0GkL127q<>Y@Yr32x!dXPCpvc-playsX`orD_wCSo-v{LV`Ar4 z#7WK6#JZ-y@p=a7?BITJX~bo@%Q)NyPac8bHQs+{-ws5rb$cqd!}>*eA0!rd)PKv3 z&Wk9r{L&1a+9;IRJB{IaqaUu3><#tHp$Y)4hXqE^aFmn+=x{J7Cx+_+-*urA$t_~= z;|t;jy#o5t0OsKbVDmh%Y{WtKWlY;~uz8^0oS}!_HCPlrq3L&Qke7hEBB9sREcAc! zgeQMluu>h?`SS*z#H$o_$G6yjeI|Y z0j1N7Sex3=!v_m0&1J3&Xlb)vFf@#9vJ1P6()3%afin)f%)z6WdjEdH0OX_hIgSyqYsMLspo~$6(w4-}FMeY2e62t5QG%mWspfV&F7;^3Ejktfm z*F^6|m^~uL>AhzMnVTpgp+6d=Agdxpb-$9>E24}M7En)Knpl?EpN=D9m4Gv9q^|s@ zlDG!2x>^gswtb84x-0W}kJJ~e#naAHL7L}DLhhEx7fwc??hU!y(F_!#yEq6VvH#fZ z4pXl3=&riTEQ5^F2p7Z-x`xet)?I(2{>M>x2u$YNPZ)@OhphN1rxZs^8y|r+taf(A zQSzX?mF`5i{C-gqA)9#%?Odb#r?f1j$4`W-gF<)qhV^t7dCD$q^$vUk9RuLucB8fNUV(wkFE1~%2;{%O-K32|lp-rXW922WHpg_$efw>d+Uglqr`CX5+ZiWX8-A{bO34$Rc>fTlm{ z(^uT@lj>9CS(h;_=;Ux^66b$D!bToGJssvHr_cy%wyQ~!G4!$|@F*8g428%~(M&pf zTga$b&EsoR5OpS_oK7z~NN#wTVf$b)<^~~IFWFcc*aPHmt8pzD>iG|02)5mQ2%8V2 zYy@t33@1|Vv9ZWkAm|dO4HqM9u!#^A`zbs}g7tWIMcqkaHbp`U@@#)&d$`R48DK-2 z;hbX;riM(LEcR~&yy<2PhR~^~f<^VamDmQnjxN2I;yXZu!QG69Y1e8%>Z4(HzwsKG z_823YKzk`{XU!Dq%5Bs=HTz&slGB+lD|Hk;IS*aoVa>Gw4n+&%V*LHPF>vEbA8N_ z-F-Bz0^+q-n>!hNsF(vqRiUivB+#T(P*a-(QlzL((V~A_(tdxW75oy&QR~m$Po+67 zB|2(^z&I@r1hoN)aj4Wj%hvw@LjVW>C?FsxEE>(@@n|ASxgP|eKm`K?5Ceb?=>q@JL~cF;65Y;w#Rjmf9ZsuR>Xp z?H0ijY5Jd}5{G|^&Ev#eKs-0n2RSHvz=vMff>Bon3ZRt;Ib}0mh28TS7=$ifrZhLv zZv-RX-LaqLS);o;>dXf!Xe^6+klyJcAqx0C7C70*Vozcr`(wfGQs&&i;(a-L33Pxz zCm-O*Oixi%N5BWRJw;CS`fAy?ze0P|(%Rz`g$X+7qBeh!(f1u6w%~s-G*fb)mOoC? zuLuKMw1*|Wbo>q1DVpGFLwcilhs%iB>hx!-k2gE1@yIPD{3#ieZ)~{deexZ}ODVV< z;_=m#B9%O)FfJ+u1NSA#WWtQ(0k!iplyc(iWEA$VOrr-AmL-}5-UZ)(aK^bx`$IR+E;!V6e87l$xZI9X0Rh~i86ne|7!KHYv8 z37SC1f8o1J_jW_2kMd&p>XGHE!0@wEpvBHZirV6NXzNiJl>2N8qcQTTXL3(o{J5MJ z^83A)=3ZX?Si(c7MYnsJGd2x#S7JCA6u%QtNJ)RZlrd1dfcn4EnMTfsnyi-b(cQ9( z59VVw0v0a|e;skZDZPh(wZCL89?hSTBD#O&&IO-f&N+AeZWo^}_#;mweB>bh$t^bq z*?y)Ku^9}KHUo*X)x;y`zjmeLL1A*9CJ?WRIj^=v%oJiI=%KTlLny3~kyw8`uVl7_ z6bpYzGUL4Ab_YRwmE})apys}`GBtD=rT?YSzxt7W>84NGx%8}&1p*hngLYGa zC1+dKz|&a(rj()ml;qMRflfmghNCwX+{p1 z5LFSQx<#I5&jCBl(5S&RBHF=Z&BUhr3+SW-Jk}+v3og%SVQ!qT_<*a@LCWiztdud` zC{3&p)#RrYg(Bji6Bhw~!c5pTY4E$p(E@rFy*>7%218oqgM~BNoH#PC$~t&dxdeY9 zb=(K^u51m;C_GXndKN(7(k{LFEy8=E^B*VIaKBd~;4a#MiK zti%xT&Gy<73C%Z|DqIf9)GgE0(d+8pZeGg`sZp3ijiGORIK0_OKybW@MMel7(t4!$Gl=ohh}H<;Q=WfWd7cPj8U#tA-`_4*w#IBIOInyY3L{=F?a zltBg?MSY+&4*pJTy5?do4(CH|RVi_(!Hw&7y%G9MwP=yTaX^v+HJA;&a+H)VFXi#}X@tERh$@xbc4;AYDJ85xbF@ zbCp>OfKiSk9|nXE|J@iYfGxam=Bh3NG1G73DA7GuX_Fqg#$`Syov8p`x=$IC{-sC{ zf5Z;Cav^ef;;pK*8OHj@-Dgi7wyb`Gad@hyqQkiGI%a|10|)1^hI_(YSv>)%uWX3; zU9~V0XxgPL$ot&YBiny&I8>o(rY0=a0%GjP>ff-z{oG}BCT8LQ$a4#k)!v5Kerxcv-Glzw% z7_5*u9kII^NmQ_6jkumTn^r$?27W#EoilFo=m`<7!UbVWq`ZG!BN77?(PO|`-zT%# zVx8WgqE2?>2nl*voon+>>O9AO108}CE5yq0U%V*JK>Mn87tBKs7c7d#mXrZgVa*Tz zLyDIjq>3riwDG~FnKM1}V~WwHN|t+C;$)!UDT?LvfxVImE$z|K&a=Z~!@& z2%~Etr|T_Sp)~3cG9*19l+)9yAST@Z=Ko(+A(ocrO^kmdfYA-e@gZ_TPZhc{2KM6r zgLJk+!WQ;POJaFJ^EkfnF~Y9;zdD&1v~=enY&Y%`eh!?q+qR3K<4!&3as6nB^ikf} z@bYCSQ-%n@`+feUj z@FTX+VxWHn7Cri1NJ!k{u||h&i0CY6z;u?lvb8}j>Y8*v=%7Aym@40+8qL_RsPhFs z3{Z$3f!4+r#ca=xFp}EDmMKVe;-9r&Pe{ej0jjoDY9KV=H5a_m8|4w9QmQD%5}BNS zCCvyI>O&RO0i?oJEoH@HRUk=LY8)KSsV>5Zkv}6ar01a8S#MR146M%iyRmLn_ zG>$uJ1D~S_|!lVF81%; z=Og<>xM!kcjjhZRu?XK|b+20|!Ue>B)L`R8=mNNJA}+>vwu$g`{%Y%$Rk+;$lxHGb z$u5X*_$mghd)u&zGPSSR;>;-D)vt8lJEwnJln`feyTNI_UR`0Yk${FQ8A~V(#Kt3+ z3i0V&>`jCw!G-4AD1NPXav>la+U-KKih^-@&g~oyvC5cGlfL^qWdp|4?NDPv;L+z|^TGD8LpBosm~B)kAD zxg>#NSM$bM%PrZ&QjhHj0{VXoN5c%mu>b`xXXzd4oXnUv6n{F200}96(;J|TdgDpH zn>}Xa9NQ`b->_2_cI&|gLnjmP&Bcs-&QQ=vzf*(Zo-H_scE4T(cPzZ%2&IW=Bvr<${PQxg z!har@N>7!Byb5bJ6)uHxtEt=s>@Q25dSypx$#Tzxw54b8o+VPqX>@ua(A@vD64soV z7!FuY%xRD~Tw>^HU}Ar00W0+V+$`TmBh8Wr^Dhj)Aje&f>G>B_%EP*0Tq$LkrTf--18p zs&V00*@V~X6+N3p1IFNG>*}V1i;46cdQX#SfR^%P8+DYuO2|rZ_9dZYg08DJ+N4w zxzMAH;Om2tWDJ-gV;VCX^wLWR^vMv=KDYtB}tX zS1C=h8t^qm7~(H662IK51b!wZ`_HI=SZP#1qb`u*Y*g?#=y?cVM$Wn59%i=TpdLmI z6!M2e5b3fYv(Hd?j&}wHa$-FnAT1R?1N2aXhLIR+E|Px}$x9cWOBXB}OcgY_3HPxbp9@JW>X-xYyr2-?)}-|IgWBuQMb6%eO8Nvt0*@? z+sEOC1xrZAm%Rlo8q?hCY%fej^b$v&QQQI{U#i{dR4aqlI4~p&+~>4E()|#*n2`yG zx{10g%FuuJymty`##^1%w;>f2lU>jp!=Vf$rVy#K-EwfKQ)uZ+*Bk|iCk_zw3&(;9 z)}lA+?E;rYy$J2liDsYIXl4syHF7RG(Jd$+Jw7@r9r4}yB@=|RZeM<;9=xN{(cY8< z6xY(l?o&NVUbzv`49`4G=#W3t{@%;hBF(Env5tR$6hMm-u^Fkk(TF6If|Rgq1fP&# z0>HUaU;ZvE0n6uOMcVfiKvbL|&AzSB6_T{VZ~7UeZSIZZZ_E$ZjEzf#iyK+;xRFVlNFccpN)2^+ca+V7&qiuD_Db$fXhH&VjYiQm z;*|EnJ^NlytK*)>$ZIt2r^C6X?YB|evhgcuFHPLVrg#woGK8S_qS0Iz4}2*xsJfoc zdtR|WCi7>vQ3u8oyp^bcB10mFqV*4^re=S`$7j#QYji@;i~Lf%d>XkDPlr=y0}G8c zm4Tq3*3qKc-F~ILcNqG5>x#o<2;Z#?M@1)ybE8s;#K$t#0hO!wDiEl#eH3ylBzf(6 z6&|v?8c+1gd-*WpyI0G^SwTP#mw5eQfS3>I%?iYa2JLB5iAF@IeN@O}zK{LkL|PuMU)kQp(a$ zVQUTnd~OJRWgGICZ9`+biPfQ*`P`&4EgB^xU5 zt0-`hyrRI^&;FN10X23S7_f2*q4~piC}k20qlsNWGCSYE=h`9z1o@RM%@jCjyDa2m zvXF`hGca)LH!v_g$8I~lfJ;5_T3ZX^ASSywW`XytB-FiF1uH&T1zTNOo6b_WF?%^^0nz`H%=m7B1MZ+xKwz1&cN+GTdzJSlij z?+XHo0vZCv-T6o0AW(or4g%LINR9ca7iqcesoTfU5)Krl4 zuftbOg`aOM(XDikx`P>x$ICYhCIgUhP z5C$IPz1g9~girj$bmSz&%_&0yNDDXeO33Y_rG7iGO6TC1?j{AEmE}=vTU$Ym{Vw3S z%d&0a01wSD&u%V2WolPZ+>T-}x$x~HR@%crH zEkDKiboM(e@=nPy*QkQmsWjw8(v2@X?slRR zMwQ>D7=@22!c2bcx>xO~I_o{NK$*YrPj$t{i2E4{vlX$1R!&q~;EQ7}C%L$2@)4N9 z;G>s{tl+!=Q>=gCx~)6V3tcl|O5DX2ngf5Z|b zpIROEUQ^Glq4>E~u3#`v!ii%Elcr5-t0?$tL1DVq@IikoZzt#1BzZWyZlBe#v3CN^ zLQ&GG=O{35T;}Cm&9>ojuD&#IIM>0a`!`qId-`s!ZO0IAb8R$9XLAX%{+g=@h`(vGF$pe;-T8|JFrLvg*5DnCizHu8ZTcbvi zNgy3St$}~=^Wx~Z1spQGnn%Oy<&D*Z0KrdYSCF9DwIlqWK-HcU&u5ukZWmu4?XqxJ zFJj8K6DY3Ep?`*&mn^Zh0J!QLLCZkuh0ccP0E9y8@;AVk&aQF%g9*g$}v#l z3Mh|ym6MAZejLX~9wcy(Mvt;%*b}!(E&q2O(!hW6_2kUC%$o`eFa9uqLqtZMS+eK! zyPTF_iXKZXeq?8@2L0}Z8Z&k8itD>IB!WcN0`xJRbgxKjr-VvSz`&e+lqa9_B9?%GQ>b{}t4hE!|%bel(oAJ(A@Yt7POUB*w5-K4+Et@OUT$ zQwT$_9dQWevM|4}=~87}`TG z0w*~~!sI!2M1y+-N#?KDC5vKb5jziJ={$ea`9FJ(nO;pHsHin=pR)*Kfb}>#l3&TM zk954Uflmwxe3DF322GfrVcb~H??nE=;=%(f2lPJxmeBW2wx{JapFvPmEmZ2<|ziS(9OyAFU=(QAQ-_!o>^&w@8xQFs{~|ISy$Fw6Fy(j|h8V;=q6U z{C7dIV^JadUdOH=t{N6Q)*#t27(#OKl#G|}JPV%-uP#rtX2agqhgYF8z(6cZkAJ2K zZHqcd=3%aFSqW_g6d7+i{FN0G)MG378xxH9#{d6omj=6u>@}(qKf-;tnNI7_nPClk zjr$%?))3pYWvFzIp8yXErhw^i@hpFLu~pDuFp5Dn9SUom?H;UBSIjfm6rl~hZ|&AED;IJJ8#=h(}vg(wQzqJp;TwZg7IvMV0~>ERgP6_b4KVp*;N1=f#LP$Jl)F{eZYu(}h^{E#^UkdZ9}?e%*r`aNvK;zL@Tqjp^vE zoMvt`I#&J`hR{UKW7G)+hACZXqG4YJ`}PyGRF-|D^rJ{-xLLNR0BgB0P(JUd$x1OM zA)JounZZ0+u_uw43wtLTbY0m`yU9c76 zONY9de{<;(aIUg;N*RBGb9aC3(=ZWUNGK4)2P5Z#iq9rm`cGbpoU5EIl5<<7?JuOc zs|BnG3Y>#>4{QYI(9VT_YFKl#%sP#wEoZ-$trx(K{@EA0EPD%3b83n{z6sqipU}ZL z3SGab#%&5+X{bU6z&VC2nD$6@p-EcR$Q_=z;$W@JWj~&Gk>gS(;TPdcP{JdnPGnsT zQ2~?`u-A%Gq1L%!zMj~UDyvNEYN?>)<0qSY39laPxIJ0|bS->;kNnvRxV4OYQVzgS z7V=h~0TNiWy)6UjuHF~KA$YVwhCKeS-#z*{US&T5*=RB5Encm?;sfle076F>7=Ud9 zTnarm6Qr(0+B3y95HM10yhiKo~#_1POsa;1CD|0|7w*5(E$k1OkCT5(>gLH{ zWh62gr1UNoX2UhHOls`@qcp`k+C$^eekD+FNrA(KM$CkNaApZfT=X#j=d)Sj z+@FmD02(L7hen7*Jnx{C>TH5B&&JwKJ_+vmad%>fql(c33hgZ+WEai;MTr=NDVvb^ zJtPHZszn}ut}Ig2jq59Nkre3MsZZ*ENn2It3tn@{oId^&nmM0AP--Y}E{^n&$#f*L{+wdh7wcyVO;pfD zuvzp2DIj1FQ8b0f(BDQ9FESXH%*hv_N-B0X%yA4MN3y0DYy)O|p{PqT{K0@j(IVM( zuYu|?x_Dm<2i3&Df3=-UX1s&&iNeH?1M8oE#PuxG8%ggRUHvuy>-STdy*lzbvVMWu zMn_e`%(x>bSn!_0TzhRf)-X>4nwd!B;w5mA%jV`!%nuux3{3#dI9VnI{TN@A*Gv>l zK#fbolK!|SGfhxEAm)Wd+BSls-Ug4mE-4{A<>(ONVJ*@Tw7O}kn3tzIBUUiry0(vh zl&Hy6LO^*{)MT0`fF(K+Pv3q_h8*=!wpK%wBt&3G@d@+dKGWWqog`rQ_AgGIU?NaX zZug`btx5g{bAW?ifknMw0o%>BZ@330TGo?5S6yB&umJrK!rziLgYhtUH2?;8mM$bZ zl#YioU<1;KJ5a08g8_bVe#x*SI zd~NZ5lp^b@eIYa(tY57cf5QMPBNoYpW_E5g5V;dtMnUACT`3tKC;bkR#&gAgNX@$4 zerjMk0G-AQspBY}-h^TOoDb7{h~s?Uhm*bP^fO`Oj(Bh_5-0*E|Hef$lhGT2!@y+| zX+XN`1Vd5LM3o=*tlnnVoLlkCj%z8vdbQ<$$$dk!2%OyYlbJZ;v*@jmYu+;+iN>K& zp}jo77U?>sX;J_Kt_F_w*^aq?_u{L!Wg7@yIc|kbd!qnVW-~(>xxG>>`u-HHWnYt9 zD!`SgN2W1)xYT-s!rxz^uePpnYnbi~ByNEJP&^$Lw>7C|1-g10Pd)jhmq#L|m>+a% z%9^Na91rcMIfd5gpoW0=#*o0eZr9=QwA~DRajLaf_>C8}y)Q#g)owL^2j3%h3p&3Y zB>T|m$tTA2fl21F<=~gyNFxGgrv8v<{k_QtP3?&~v7*d^Gwve`f*u26Z3T?L+>ek4 zjMoo?V$arM3kMGP7Q51>=*~RAYJP7{M6f*<8YqBL&H7@WtgnYqZ;<>&S?+S*8ljbcRg-g{_Wbyg7d@QusBC3)gqTRJ7Mx^n(_| z%PP@!%70$mfGMrco&?;|x03k7oTg7TkJE^myTaVdFhTatRRi{a3|(u(PNhn021^Ae zG{HXc1}lw5jGfi(jhdeguK+WmAKGzpHhL#;u$1ac^%Qo}GauRQ!^kN*8zt<>P|43=G;ia7%q^B^o~Cf&bAso=h782E z!Nd{gUGI(Jt)4>S;h&Q`!uqjuMMN)(Yw%@v8b$C^wp=n#jb_JEm`-n}_Myb^K^en_ z(xn0qmva@6MK_@%UUW$J%fV?Mlqw24i||h!q<-xX!m>q5lJ*BtiS^{RN47efqh4Qn z|H6{uVEGv|d@}wHHgu!~u2FK-cZZ5=BWQ!6ky8SXY=dp$LP5K}ME)cxd9l)w z99+bW$&EsT-RR2RxIF(x$d+)QxDVtQdxU@f3mZLNZ(!lJM$6I9_zaX|Jg|H#UKDPN z1P0nHtUS2OXJs3mszQU2%gCnKEPNLm42{l*Ig>~u$f5E+#GtYB`ap?O zCNoNZJ0lWA9uY=950wPL2Pu%epQP7L*R)N@)XXT61n{+LtKeARf8tx~S~khLJ~|{* z!Cq9`qX$Ai4~r*YZ|~TRr*$+lp}%Q!upV~a@u-0XSRd^30#pq=M)?2F3QGI|{Z@%OJ3_I7A!FKa z1%gSY?j|E1Oo!B1JS$dnR6OdrK!FZV{GcI!4u$&0O(8qcgvIk>hS(tZFvR1#;tAuS zS(d^9Mvm>P@iyA;@-U(lbKEZdGXm<;L1x?wx zk{FajYKw^6Ba;Xy|D|sjo*EA|$Kw;fCxPZWsh$W0B}Rc@#q(CcnXSuafzDI66xs{R zrC2f;?qVYfu0Uo0CmLc&(&SHe#B|fJU=`6y5NLQLhBw^T9 z)-2t20(ejbJ${ft6doUD3@oaD6lj?XdM_}uFtv33I?K4Vn|}O z*j;j^NpFr>Jo(>L!w;~?`NzXqx9H!+M|e=Pn3cbCCflY}yp>Jc4f=0?EG^hSmIFm# z>v;PA^!~;}^|*~WCl-ltQ~EKLrruFII+LNEd3{V{-Q8O;Qw1Z#w5Q0})nKeKWQQ^O zx>qY^WrOIL7?n~@EE$v;-oH37tEAO3KZ3nVo64vn7D_jz4p(7V zJP+lLwMch~Ilp2=X_hH_4FVInT}TNb*Y+XMXFic)%*YyW5tL+qAu-6yf&C#~SHh!U z^#&B2L-z1~hgB*o!97S^zWs=PhpKRc07b42q@*}+znnOmvp%wamsuvO9=FDbLG}+* zG>vEl1_lgsd=_vff%|Y7ME!q+lEW_ za?MdNSF?b}Go~GX6IH~0C#HZ=PQiP%ffvG`2_}=97-wHiEh**r;qvlLAExMvR#YNy z*~kABjy+!JQ(@nWq9zW!BYfrqz)t}F!sO64Cq_@9J2ch{u(Z=wb;I?9TL1Gws52C*Cs3l0_Hz`=z$7t4Kr43(uET%Mo?GbrcCKQJkC zff62Zm|M6R=ml{G^8}s2=;*zg>T=JJzgO4t>A@;)b5svo5LSh7(YNe#5PkhphA!aP zcp;PFwGlzjnmqd2d;WV-I#tR*PtMUH7qpKte!l8v;@0G`zN_b^7?spr5X4r(8$7oO z2O5CZ`FV7IP_0L=>y1V^J=r^0xY|`0dYumU#^IYEWn3p73fo;AwB2o!C++8MNp(j# zP&&bJl40~?oBmEj9ed2Y0-G#VemYoADsN*a4Yn`wmo;C|ae63{(}O`S&!2RXNAh^A zbj$@Mje+LSowVt-A5Cdx}cMP?`2GS@AvS|aB}VdCOlR~6@WXoXhI$R4v{8&{YU~H<}%e1)nzHtISS1D3>=bn#Cjt*Xb z)B^Vx1$8q8@5xjVDUJB<$4! z3wl)g_W6sLApzTMB=a*pcR~Ari406&HA4f;$`I^mB3cfZ9Dq?`ta}||Nv`Mj2xK}2 z%B{;L z^yacibZa#BB7aGz+2K2`<=9eLrw4o8-6tMr#D@XVB{%+7`+m4aiu762#@J9{P=fRW z0WOYw%l#iYl*i8oVOnK+xK;{?fABudNb0)vMw5c**k;T4|?>lXjZmB zEuAeOtIr+#a%Z&#|DJ6@@OG;Za9iNb;1;|Pxdo%>7If>LE9(DD=(h$D@AC_ln2UPw*g&s&}E_An1>X?9ph99DhPC>n7OF9c^*~5cOvjihQSk znmtHB((2hc+FUnR$QCVs#!)na$+LnmF*W$`t$nJ{_ZTJ8^XPNRJU)$DU`m_K$)o6KE7l!I8<6=Iv!wjk-7t}{_#p}xI9=57rVIBW#ioprbAS6Qe8~R_ zp&np?XND7vlx~9M;16s8*9@NmHbZbGn}Nk4RZRzk5}z1x8$)h?lCR9RM<}io)-4*K z9axTTmPWC?kO2||(`hk4jGnhF-W9ayTfPH)}?+@X_MZ8-v(&+QaD$tg|w=& z(Y-gr#z*$lMsm)V5aJmS8u4xg4&eclrEI|1e;^HvBGbOOgk(;6xjTc>(gGDNoIH7Y+BnyqpCr%lCt3d1g$)TO3tM5x%?sq~p$TS%D_W7O znwP_~GaR7me5R(VP1L`WE_goO_8Q&k2!72XcuGQl_XHOui0ug||ByX#&e#!U*az4S zr{`#JYM6+Yg5o6ajl}u<7h|T@sJxU)hN%xtz_rM$O-!TyTn}0+e=1NEpH|zpC62W20fyD6Lw}QWLm&`9fS|A-p=2tLhQq-uQ~3cSAb>zHR1^jY zfk03Z2nGiML9h`B1_FUVAh-y^AP5jaL`H;v>N4rotssuocM)Dd-SXm55>U!m0TmhF zzfN8bL~LnW^6lE(J*w2hzmb+AKfcicN~VCb0gAUofecWCO|C@DUh@-=rt(iZYu6vQ zCL=pJHUtFgc*unO%Hn6{Hz4D9@pc$>?+P-$3Qfu$Foe|3H6kM8K(T;p=0~rASkM7~ z1r50WaRv?o?t5X7F8N;G`Y{Y#WrIId6HDuIpF2>R|D!%sfXdX5N;s_LK+)jV`ZeAs zxSaiGm$8dIV_kd=)B~=&nSMnIO6~^AE#nt_nt@@q&>L$}P(%v5>=djz?JMwj771khz}7z53Za&ADV-0xO-9 zv-ljekn?W=d~(=(tKj%!!2Eu@Y;cgo(9c|XAI?~xjZ!xx)C{LoT=g@UB7dGhEOs$l_s_LHjCeX%F%Xw+L-y_iv%T?+S{iv+G0!vq=+<G* z2<>btwgAe$Vn~*yes7bMO+7_rlc+sQ=bCCB3k@r}3R{=i4%e57b^YppLp6iVhs>(H z?dKz#9jbzcqA|xLh2Z1N=COxP?w)+3Y$o@?O*T)h#T(dO}`>rxH_>G4m9l=`C z&8JLX_vh;8Jndb%rOM&c89$(-qFnTYrF-GVW>xi+l0^5_v%;1ciPmLqPR%~b+5;&jT*=eB^R$8!94Qzzd zyr@8cg7(^QoW_+IC`$fR(suQ4{h0l$;oz=`1^!uknou0a3V)E*sro0U26eJ-jQ=tu z&~R>edYoQ=MU&O@jKiW#Rtvzjjb(;`=#oHGyY1DpiHP+~3{P&gSpOk|ONVy(%v@nU zlSd@PN#-**EtZ`OIL^u?`nj%pv8yVMp`I??6bF68rJzeIjhK7~{dsOy?-fU&z;ZKu zA^$E7$2e|wOnRlLi7?zOy7r3TW}+S`{5D&H0?{6S%zeJ|6~WpY;iG0ZqnF}}D-JE8 zFx^;GisD6W$+(-^=VlJQ+DZl{b&ZklUn)S5QWd(>hL zw09hT--}8)84F{|dgv&_gSh;f!>sD?v%xNkcn-yi((D@1W>*PW@POSgDUyq(lDUR; zA#(vY>WoO1IDAdIf1&Y((f#C!)G1~z78E~Aj1Q2--43&cl%?VGawIOFjfOJK{zVab zqp{Ludv!{|xER?OBJ)X^=X0?I^EK~{anON(#tO!r3TTlt_~8p)3AVge#*3i!CUVeZ zE{DcNtTLIAG5!lOM?RpgCx_zOK;VHP`j*0%Vl)`xz2v&Q{sYGWoz7~|+h7Jp?v+E5 zP$vE|d!@0IMKMoBI4e>HwM^=xew26+n9yQ$+H!KE7iDNX0JNK_6i>n3ni*V>c|C zDsaEaI6s)&j~WE)D5`fYWSgvDsOx5vy=zvn^Kas>q{LCmrNSc=DgjXTCAzMO4LD@J z2D2Mn@-V-2WDMnQ|YLM&r57KSr8Ls0x z^tA)D?%q^8O2UH3Z8AWn8OCkg;P4x>qa_vo+bWS1A`u#Wd5m8M&^OUC5UHu>r0I-l z4pM`lkb_UQ)UnAJ2e86?rj)dK7-fUZQ36dVcCK?j&KZ9j0a4!Pj5IZo13uGSg;-O@mx3g4ufM&cK>+ znfWG5GW9JzbkE>a_g_9uh7b<@j*&yDp^&1O5N4E=R!`J0it$PMryT<)CM|I6X+u~#}Sg6@nw3L@08u}p!LH( zi!BgNC0!u6zAZqjCNhv#nLCvul#>nVI`qlJ|Hnc6`Ha_DwO??Ju z4zd+W4*h$k8T4ooT#6};Js@{@C_Y-dp$DKAuvSvAHK(+b~rBlX=1fN+cX(R$PrgXb=k#ZKa5JA;_ zm`c$VqJ*Pri?Bj}L0C$@J4MtYJ4}cVq@~tjhz%}8^*1bXTgH{A^es?9O4o=rGkY$L zQy!I1Y#Nw#JMR}ek>wo`$#{C_ZvieQluZT!lFwAG!j*56d);W|#jS#k7h&a@74OI5 z^lnuG!>EwG>mGM9oEa^l$BNdIX$%DnS$z)?1b%@(jC2@(ejqR-1Vcenp@FExKeG@$ zZCipj3y|_(Aq(>(sCl8dT83ncoJj>1(?rC@G$++yl94)@o~_bgx31FG57EhX1WNNg zp~XW8gG1Y<;YS)wb2MZ>nFZty&CxnrBue{BxP~^m3S?)HMGrUw#T=fa%<-iA#zJdk zwRBdpnj>|8vYJaMvZJi_<;~Zw58k)w`imO8bQSw;_YQPW8Gkr0#aIJ~!Bq=xWZ`tD zTZjl|XMy~L-DxnGC;TT0{YO0&{D8GlVaj9HG7#B17%Jl?0N5+}8F=_6`V?&ns33Vp zQP9JgD00Q-{UK^}VKd&( zAuM3i>JE|XAbrULBO;PQd%&YDY(bqYo)9bc*FR@m>WXdXe((01DIVY+W(iNkNQEU0 zR0K?a;$$7DSYv{!kqU;(zN$%3gfFD%4P+!V#UDA3WDU|OqHn6O$p^G`brhb`3Q8!l zV-C#LUq9CzI#+UU#eDcmXrDPjwKG&96`kOa3Y8*}3Ke9Liu%+eL>Z}w*9r3c^`eX| zt={zETJ&6hi!5dQWXnhr!Lya7|C@)3*ch;XEfljE-Z|6*|3)t`1eOmV9*`hUXICRB z-mZJ&0btY{A0f-{$5Nb6OShwT31{sA0+8crS00TY#>B=sR11@-fv z8M_n<9H#>wD;)X(TmrhwJPe=?K%z@`0Pdd&<`dsMm&>ky`K#IH5L6sC)o2(C4>D(e zVJLm)Qd9f*Qeunk1++)D{ROr=vfkz?{H(H~oiqP^2dz|H4@pf$NLxA!CaI-@c^9UR z_Vb3OQP{-g@=ZR0}8O!1{BxnArj|+ z0&R!|@YCE&-TT(%$6MAI4$E6<0<^OfUa>;;+rDuInqZ4U?aqualEJFYj$$i+;&i1* z#FerhN%K3VHYddeh8rmOscbiyFgH!PZN`-utPd28X?;3)Wb{_m&xk*kQ}WXlA!Px4 z(Z(P!m$``2Ng(gc@I7QK2nCA%FZCCNggI?J-#(zq-iqcMXM>E;sot08q?`h5xefHb z+cbY~Nf+f5=yyAL>k0A!ts_-`O!c60?s|wp4NgauXq~Zvh$OLZ%;g2*3zur~f&0Kq zOAXgZuL_P7o$5S*R?(cNIo>9rT$4fXCF-vyBbkoTnr=cNL4Q{omfaw2#7B^`1YIwl z-5lB_O(!1d$7mtY_^D{-5|Cg?6qyF~l`ZPZDyxC0?b<5Ot zsB!{3j1Y%@{!4DJ^uOh5YfnRwtGM1DVCV)t0h3tNwDsi{JT)RENGN9RsknE}O6Woe znQHA)(Hlu2vR{sg2haiH*UXAYQF^MUT74V7hI@qh?N1y5JGkW*154IzcwwXiFmf9D zA&mugaF#mLi`-fc4h@8VF5%vThPP)n(g`}dA?mIfJi+TO@^}mV?-SpMTV*TrrlSL# zmjk45Y%~0WUSI5Iia-)SgnS89=D)FKlU52ukr6CIEAa%BA2zs&0E!9_b*tDP3X*bX z?&@=`*@=Q~!n)|u0POSU-eA!JJ|Fa*+67as43jU&g0vW5d2cL#?WmLz3rW`AElG3l ze*tvx^G{&Ks?H${?H0kBTkp#O0(0E`#u6GvLK#Q7A$oIPoj!V5eaaf!wLHzbK@;ss z4)DK$bGXE-b2UKmk}CulEW}-rq}op6AiBtPD5<8)<3s!^iJr=v@%M8S)S9Jq6&v#W zGpL^I5rqSm@oUI`7=A~1D!+YZwola(^j0Fo!S0L4Zs$n_t2`#me z2GGl_cAhMMs}*1@$ugnhW@s-5zxWvctxn>M!WA1KoSWwElEdFzjbQq^EeLHSqJs9mQZ_%^sNg=w3-X-C zhf+&@c+lI*(aSg*;-+A4z?hHsI+z+sm?E!^tNz3na!HrS5BZXOU}jRsd`;&bmM>Tp z5WgTb&llfl++d0+(^mndO)byuJ)Y-gkLkJTuDz|nz-8#5Hl#xt(YE!vO z^tMTVMI9knhtLf&BBg=18*Ep8^CvE!oP6}YbOQ24t% zAOCZAv z2LtX+8kY`wAjq$z!{szy5*p1YT?v)qeTYlIg4_o(P@$|UPM%SL%$u?l(t=D;fy@-& zipdK)7;Ydnd&zo)2myS&0Aj`y5}b<62Y7<)hg`HVY% zCe}&zg6nULNs1!bB7YQJ{*XLA#QBTSvjK_2d;6-ZJw{eo{cLxPMJoM4nA%z*hwH3^ zUy?QhQy>sXP=G*ju|Oh?#ljIGo{y;#wfUp{Wq6K)A>Ey+nBaIA6=KFS2!sdlRn?z!br`S}P zrfprP-@o7{djN$8Qc&KgjqcQY)LO+EZf!pd|9BiuhB1X`gg?u9k%IP54Ddc*Z2ae(7ncoTKiWM6jrK~iG%I~9xi{gTk^ zjRVtkK&?5x#4z)A4k*-;HrY;gEeu=a3;YuBV*`}$7PZi%Bx^umW#`%SOIHAx z)usiMOr(LpA#f+8z(2`#B6!j6UdJnJ zblptStRtQ@EpP{zw&lh!p-r>X%v4EPro;sFDv( zyh@kyGoghO`o|lnfc7~+r<@<)QrLLPoo}h^qS%XJ(w5d;UkO%!whg1qca7R*mPbrS zNY?vFMFEJbHfDwsm*p7CfYi@91!D}gs3iden&;`|;W6qtLAK&y-qdsIjfOP+6k(+; z!W{CVeD@-K4BfUyp~oPBlWKFl%$0agDox7kzVF*U*Tl4drvPy3s4g) z_k);}3NW!EW2<1#+ZM4hpwx5L--#l$3|gsd#k+1 z(_bDteL16Ttki-0xHh)r`k0h)(~d>`X4HYfZZ3aogKo}$!L`^UbDB#NQgiW3v%&t~ z9wAlS)5zfk&;pt>&=+|bhRm|wW%8t(0*vQaj^DvaBh-PKeVX}BP*KP!RORL-&-2m7E? z>eytGAc&uTqArFD;$$PKZ9F6S& z`M`*yVTrPb1R{IMZG(vUgDIkThzU)eu;o!er9Kd_#oO3XbL#(}8dPe=p2cF;>6W7s z-rdfB$ELxi(rit)4w-f+x2y_WVKCpwq@~v0wrT6QSDpaS@qxsi4_I4TWyb)-oTGGN zx13!IoPu5&JJW_10%5fMfmq8*H432Fr1qE$)!gE$V~%lHTEYxwJ6-Z4E#|A6uze5J z-vm7kEpZG*DX8aZFr6I$ReL+Yx*D^n$9d#``ofb@X%M=2+QmhZwL8mSilpJ!okiZf zvlup2RGMTj3S7zG9%S$IgH(9%7m-nQ?WGWNNPc}Due-@K@=FY5;=TPvYANl*fxSE= zvwx$IJgu+;A4$;s3&m*tIesk@uzuvBWP#u(Wa^mG(rp}99kT~D3aCpp0>B55!T>aX zr5EE}M>VYg^bmw>3DYoo_4g!57)L_t+puTJ5`+~ofLv#M-xW~`zCEdxvZU3i%G=j; z!;vgE&zI#^Bl}}mPY3~#BYMwXAOk^y)avmGRD75=ug z%9^=>DZw1Fy_HijHK1J6#h|b3Eta`4BeRS%jAa%~1+dIb92V6+{*`_qMM6A(=I!CJ z4%hH1pf`j+Pz=XCEQenwHYhtn*`S}uhO~|p)iz^lFeJ3uX~b~;FKN~VYEN%ucxE`9 z$7xeBgz_oJwN(jyrc@7n%7$EO_at4Lmoe1ka*fVd`(9;4gwk^`C-~q(0SDhoW>B34 zcRhf>0Vz&kf-4ERAg>*H8w2Zq8|RXTJT^G|!z2*Ksg^QfzU|5M^^3BBA?P2}?7iQMxAmy$w}n;}lbCu)ud`nq?ImVPlcRkrbjw}uC8Uv59&?W>#6Q2vpJ^`oRC?fmi`qDIjH>jV99f6w0p=-*YnohZuDgXGE*a%1q9 zR9yslM1c5%Qb+7ttloCZu*1_TW3vw$cOj;El*)jZlCyO4hU4CU#~aC=$*miHsj>Py zq#v7a@-lF`dmSTG>F;|Atgso7s>8&RNKR`yuflBC=HdjfB?4ngTv7s< zEinJr0Bos7ySiL|vmWJ<4s@*b)fsK5w_|;3tgj7XUVDAt7Q$-JyLA=hc}oCbjh+_a z%dCb~q_c`P2=X*O()@Zk2;xhB&T2BbQXWMfT50yB0-)4` z1%sm~+yqh!v4cr#$Jo3R6LIJoe_I11{iU8~;oM}SsQ{y3yTB-)Cm6+Sl}Egx0By+RlmrZ=c8Kj(gc@_MdGX1Fnkyoh?dEu2phG>(ecqD(msQic z-Ibzd3(`h^>U}08Ias3IAKP~wC8P=hLxjpXC-gE5tS?#MC*A< z%kpRs_P}b){PKm^U;er7pLdoT#K_E1TQ`V}OLNe{6a_!COx^9>0e=AVZx-+tX`1eH zz5+mD&t(C>dh(pbgJ#M*43=NHK2VC{->W{Y*bD||qKF6cjNo8% zEXs)S%%|I-eH3JlM`AMZ$=C$+0N6~x8ztkzW+6JmZEzy7Y|8eKABzdeiFgSxlA4UP0Uf~94*AI@Fe7AVQFMW6xPe#ax&+6*FY1k&oOTUJo$*VP z`Ca61cLA*vMJa>;#i;WG){7&-3n>q!kPdsxhdRRItGa;K@!Z-w8j)<~LtO@)<96Yw zh%Wie!)AD=X)AzV?hMl3wthV-VQvE&d!KfHiVT$nVy=mIIf2(gc4DIZLP(K5ppYsp z`Vb}zRFKdoJ!?^orh{+#oYi~+;N5srACOf9s3IKFU($HOjh~mR0|9q}__~toG{0-N zwI3h@(bo?Xoh!GDlIamzm$tl4a2+Caw3G=(*kWjXvrN*3CaJJ>^5mhY?^sm(ekfgT-<^M zHt&LE?lT{0mJdG$T69H+pSO{ZGJM4oENh3zA1f>CobRdTI}e#BPfCDxnF7ResW$KkhNW^< zO$P}8%MR@pwIa;w$(t3PALOMYPq6=LL!*_nY60IozLoKP&^@p6j_7zkSHaDk4Ovua zV6WU$nas=vveu`PMxVr%O(i&gQ+Yo**KY3#WB{RiZY?3FBw$^~+Pwx__tF)0iK@ws zfWOkknosHW6J3<`cfInyd+=FaIS))&JJ1fJ^&JjVrj@1!2?^@46~A)3u1H#4mo#0! z%W?7ys*Y$h>5@7^sQE26lxE4dh`$r-nSPNMkD>{F&gf{$dpU8U*n+Qr&R&B^fux@J z$rY*hh-is6M@qC_quGa2L`;$GS=wy&Z;P!o`m^Za>m*qgX4FoV@X{{f2BjeUr>Jr* zNYR5-uj}v6xqj2tj!mT}bE5WtYAf0&>I)4dRn?)=bwBMV@A6Zel%=Z}9o$U=57i80 z6?t^7c(-eeLvv;ZN+`yEFiTK8?h;5R+?dS&?Zw%3{>Kl>!*9%F2IGZjwuU|uIfRQR zs7e*rf}va#N80e}geP(H4GKr{S4z|T6-45@GxS%yCl1qA=^&dVt#n`WGN4OiN^IcF z_f^aH;?oCe*{!FR;aUhqlc+(9qN;6n?O(5c$Nh}z*_W3hsNMqAd^M2q656e@0* zkVm7nDxXDo5}IYxFDoY-)@=jAylH@S80vzi`VMz^AU98vy|Ld7cTZg{g{DG?g+j+d zbf}}9IbC#@?yXtsXvik-wrWyM@|OSjd2wb;LO{Q*Qwt9{=d-2`Dnw3NZ6q7N3_lme z!(|`vPiV}=5ex=@2Wzn^f}$NS0I>urEL+5ck>D4s3saq5T~b<%W(40jeXufrnqCo& zTHlFMVjOWjvq$16WQzx0$~6p4g@nj=Nwru7d`r{;TsX;A{9M5&Cs&ib%au!#Pvb7p zxZPzLVDA+F+j{Oi9qQLe%|613$8kLB!ARCj*Vu-gh&ow+yF(YMMO8m`E~`;=Fd57U z)(TyD!>8i{4iCz#Gcr_KEU%l88tA{{2X zi&!A2g71xg1>}XInywwiEH)N6k;D|FVZjx}{VIwD<1aK}nq|R8!7#Qu7{*2#Ex7Ov zLxnaBMhx622ePHBOMFyi#Q%gTiI^q!*(BBg!H~uU-!WtS`*Z&L&W#^+hQZmwwywqN zGoCEK-+;oDs-Q4pvI&I3{5>}%APas*<`U*CL}T!O5@t?>%b3ado&eAFp9+CO&Egc%;o{ZL;8-ia0Je; zAKFllK9aa~MlcHqjCzBt{%?TSTn@KdxluLTI$wQju!>L%x1!tRrEsfrKxAwLMFzJ-WXsu->V&8eB*>{wJc1a7jA^6ma-D^;Jd{i{t z)Rt2X;`&sed%K+~0@#3EwaYN8uxF&8-ci*y1VFrCD~>2Q^w`eevpxb$UxMkW&CV#q z1>bkf<*tx?Ujlp82-^KBk)e? zwCS3zBMMQJ0TsVJ6u` z(&F!pK23p5pc@F#v*AQH{s76b`UgeRRR{*=@ITsacj^8$8o(+Q6c2N>Pn6*t74F`D z8Pex3jc1AhUS%RnGKF1BE{FH@LYnG^hvGtLvT)j9XtGXkjr71N5MEn|noX!5lZB|A z>T&k_VI;z)%41MO<5ZJEkXZg^5}D*jXT?^ysar_6K_D=bvJh2ubYU7MIvQ_S6*(Um zk<8Df!D069DV+}?9rkYW6z2NpxkSBxOCMS|YoW!n@DLsuM^H7WKEL#Cm4K71XX$Dv zI95Yzxy?FAv6wgC5VJ}^)w_+8Z#z7LOq!`O5bwkU{Vz-v=CG#whzQ5Yo}8!m|Lz@q zd$VJAUGx@S%s(z&TtzVHKO9!Fmo^1c<-+WCmLb5MQB?p1K>EMITgEcG&F|Sfgdg`Y zf1_Tn!G+as^o`ce?wVU56xfGIH0Wz(Hxn^>Jhz9auef@{Ii61)2;QhV3`nGjD!Y=| z2OWz@ZA!wHjYoL(OCKqkCSIogrFXN`no7ob>h2pu%u`z?@mW8rp*P*51v6(duf0~- z%5h`3l?MN$a{zH9U!n#8&5HZ-J#evko^|W{*4dZ{;jCu6)bhuJW1{YY|qr9+nA0S=aQlc{($C6zl_3CtPZ7<6=rAc7iO{y#59j`ykc`QO&0v^ z&Y+;|lG$^m%KQ-MI|zB8(6!>95gIKp1zzb`Qh-G>r4Mp+3Lm@0qm~&>kV!5}b%SIx zM|ogXF*j2#ByDq1$Iu9&Pavcjpii2U7V!CWl|dMuPol?{#?~@8pDd3(f9|0a7_~&h zF&Cgv;!28GQz-%i->c-Mn+5Vl_f0}umxn@~IqtK>r}Bf^<1d6oBSUiFf$$FBpu_1{ z73b}Ca&?THb!Pgw_2Bqi9|?7hj-4<<@pXia&8l|mt6nO~X>WlHu-&+LsSa^bXX2oC zlJ*wVIMV|cjEXG~cuKGNe>tv=XqUk$F-CuNy>d9k_F$mGgKK{NT$*yoJ8`b4c}oDw z!mT&_>%8H`0Y~9^+T;MhwyLwlN=!bER#zAagjLz|Z-UThz&sJI&~1G-eF-U=yqx$+ zMk2km=c)Xd0ONApuN*um!hr@UJ@QZ`XE%-QLzZ~6ydvVW;ly4re}44zx8O27KAerB zEqX6u0g9B3$!_+nn;|^70wj9?q6HKefNcYa$&lO@$O0Qt9>8!D*xScDl6C zVG@&ESm39kB?Hk8*OZrMRdI9sLlo2t|2^D+I=+zpKO)m=ap_Mv+La7MVmi)MR&fD^ zY^ZZzw5$PhAP6KVe>@~gf(_(I425YrKNEmJ!N4FvASeg~f=2*BfPz3ESOpLW0tf_x z0GB`lfq)_mlA#&YP9+@*G!zX`?7bo`RRi^e|0s*yI)}M{F!#^0J3AVDh}Un>8Yyfv zlxc-HB7iX+oWZ&z#PEs$aa646_$o&b55%rNNSa$}7Klxhf5;mkXCF?LCl(Uo>WDd_ z=SKE}FA7F+nhtli@dw7us2ba`ts#;U=@I+uU%6#5t3Juo1hPMajTiGy4 zbqlqyM|yUrba+9AgK1{ml*}YKyd#jkDMjKfFN=jSkxZA41>+4L2xLnoaIzk`VQ3p{ z;55^vVnJWSe+L5Cl7e(s>-@r`1zQ zV#LC(Bufm}z%V)(uJ*z(d;^30Ei8+P6)9hMB5ExexZ)~@Qy9pwEBwkITjg)zBN6K< zj7nAl*}@`*Q><#QppqF2i=T>burPIaZ{KD(%3d88e^g>tVSy;ckDyM}krlh|g-`k@ z76}D3DGU>%M)Yf?9x@8=7ETFO#9|6KPZ%Of4GQR_8s>y=an$@~)zm62>l4pf|6|rs z2%lo3S;Ck%Y;lxuY5)i;KT2Umpy@f-xMp%(BrNZiSZ!$NC6-JO&^CYW!XU1cK-4hN z33a$Te>TE-Z()q#ZZI-Zc~qY)I@I%ZdDaCX!Y$74DHd zj7NRwhHvQ8E#Je9O^9w5IjnMy>*xwW^y`S^JZnjI2;qn<7%Es5YL&;~DQK3y)5r7@ zT!PK)6d_okK2ft~MSiJxj-leAC4+eU16UM~e{s_NAIUR`g$U>R_rIug3Ffunza=9; z)eujW`xNGFKIa-2g)ismr@cI#`4ESPwG7M8A#OrA^Jk4c4Gk$8nL|`G+od^Kd|C-c zy3pvQk*rKX@ezrZ$l>l0(9Y?*h)T(N^k5P5e9m~Vg&p28SC6K|^AXb*q{&P34QuyR zfA&-Ck3x0fQyzX{$?)lm`w~x$K&AP@iI-)FKsB^GsDuHTYQRC2DH12}YCw>T6rs{* zso|wm^vxEhN(NPFgjA)XssvV*EYj|fR+*mE%ECm%F2^pGTq*xX@dKN;nkW@-eW5N7 zejdcf!@s^_;BkxxA5+3RVo@b+khzxNf5qD%+(P)P#m}MbyTyQt*Pf@<8T3>`#O|QR zi6}DZS#}i11UUZ=!~8AAfFGSdL)u+4H>j0yR2snD?V3MesR23(tWG-XXF6RC1S(A5 zUr5uVvc$*)$kF~P^$mJBN~CI1rmbRm<9T;+P}W%m9=@2bE0Pp4*-phKk+yC2e+`uJ zQwZ1DD$s+WF${)Kz(~G1FBj!s z*V)M;Z;p1Rh#oPg$r>Rx4_Ajke?@g8bgXj!aT|U9CKcQ26){T|H)@myIw*XN=;eLv zAa@t>Chzef>B{os0-EL2h^ob@X~p?5!&Ss z4J-d|o{_@n@GBrBy6qsqrUF+;bKPE&WIiu;;9|6UYFL@6I`Nz11~jEof1TmJl<6nc z8}g~B@d*K${eo0I`*NdbRExK=)2lB^x!o@Wn9z!V3 z5!arl2V-pBf(1HS7dFWFP{meMELenFn(00+$gnA@+ZGGO%S;$Ys{f~ZBVt(Tf!~H7&Gw+bo{H7$uSG( z$T!?H%l@@5<7{6*N;9TE(?`&ZyDMgMqDmik>0BL4~`RD+5OFf5E~MLchftTYDOFI_I3Gzq^vHyOPLvuRU`opaxzy4!Y1_THb%@KxKut3^6kf8UmWAsJ3f%Ybi&8N2&}C_pHh{_+y?* z`8*{&KvPs)vsxh=f3BHb@nxBGpR5OuZruTaRV|9PMl6Nmk-}@Oq5VNI9!dkMrsM1g zs16*);U~hvNCa#p5L>1*-~c6PbW@9Y=`?O!XD}gBn6>j0xXB5#VDOy!-8O$ZO?d5A zO?zK(B5LIm*D9Z+*QRfY$>gJS$w#e{-Xx!eK_7>F2Hx2gf5^vV2LpY4tnKkBH;~lv z;d@^a8ZHb0H-$l9sPVe^7&m0NcL>2y;BS{sKfB~tW{V2%;g%J)n-u#eUko4B0$g9+ zXyX0*Hvg>$D4CwA3O)$f2W1W`TwC1`p#{eu(sUmZ$>Tn9sl3iOhTWCvd&nrAi0Sqo z%GrC|e2w%afAx6n^>rOlA6N~}hzt(VCeqRS-;a{~wMwM)UFpWrd{7OCPqvv- z3O}Qc0gn&K6MpQ_6$ls7i_abERLjMHgu4Siy`x@Fe-0Qr&-yQX9JktC%#yOS@CE03 z`2U5dLvbpEKbhi>bUM2AyPoh6wj#hAY7ql1eHlFAaj9ed8(drJO{`Ls1@dw z+$-SXf1ZEW1jf4$UYJ7Td0;jP`CA9jG!cg!@3ee=8)F~tZy@L_3XY2l<{XVRaTXhd zdz82$WP<}DeMn~LcfeX~RKDRa8W~jii?=Bkf5r>ZAh6U81sgsG*v&v8r1Zq=zftCxncIjK%~; z{dwVns14aD7Sb@rb_fxrmz$k;Lry4BMn)r{{JXL9uZ+WFp>23f0okVxN+ac=8kBU6s_>f2uJu|oY+c?D)4qG z7p)y@hx5%eQ3?zTUxu)@k3BQ)oqIiWwC3G*u;CV=@p9+q_UA!#qI#BUa zKgW_0lc4I*I7$+25KdrzGZ%H__=rFt26yGWB4ms=i6KM! z3)qlQ&?Ur?XaPA(>`eu~gH-t+_5`8`93cYKIKZ-C7Y!W)9r!jdR6UrDBlOg12#$Nb zSYRw1@?T(mYQV1%Un0u(-Qc@Kpmf4Hdi<`o-v0*S%e5FB87XFK zz!gN+KsmE6E`kGd0Z;?33b@1b4WJ43Pf6Q@SFMNT%!Zidg(KV$GM>e=;A!O9608f4x^lAL44H z-a|X?`H^2aJaoFbx#R{(qNJ-qy+P7B$pcao-^9DxQnpF2SN;_{-4>C{{I8u7=_B%; zkFqqM7Nmp+RGa(b6got+ps129eEW$AW8easqebWboP`L;xo^B`D*fnTpgiQ@aS0n% zWaZKzwEJrS`I39P6L7=2f0gR#-r~LZ-R7I|6e2xL9?DVoC+pHDY*)-G2)Att+d!5N z@BPD^(K9hOP#8*tC&1{=Ip!&bynUzzGEuqsiO0()@+u?J4wCrBLr=b z0HUt7qYsIXq8en0`x5pSY5ySQH{h0818*jk28Drf%Hm3o3EXKpf7;6r(<8E%Ii0L) zV|0JcR`cAL{D+a|_{~PaE!UT)C((aV**T>pc%-RRhCc}3HT_WO?mdnqpEkBF9$x;s ze*F>n&FMd;k>){uV*mq^#blw!kImoDj%Y-hzZi2Sy#NZ;?F90qx&IIJ%s8}pxU zD2hi0)40ql<$`$Gf6=Bvh~XdN2MA6yEHQ6@7sd_Wg~inJ1v!NxnOJD(gP1i+W&MX8 zVP>dETV5>_PD{xQc%_Zf4ZsVH)PcwUhZg{75X$@O1QI?#VDJ6fNgT4N@)e0 zQ9;!czyL`EvX>}tabZpZERB1|MHs=sSXVLVCZGQSHG_8sf44*6H zkTVGWc{pI<|_W#S{%%@j8`u^}ZB8zzs#QPc^x*VTBegcGUd*hEmgzT_} z?^4`g_5CyJf6+K7qHn9yl#V}^jOKTQ%Q$3-&qxT>ZyrobTOaiZ=zp zN4Hm})G0^{XSxeM2NEp6n)%G?2{4m)DsHfq>1+To=VS2tjKWr!PehR5087062gi!# z2+9avh6_MAcw&DwL_GTRk4N^_DH1%e$N#0h6MBazf9DjRaxUd$!KO$Ayc7_?P(=nB zc7s8ka*vEklvV1$){+-gxCs7Dm8Odp3^=9QK$V@gHT-lePzgeE;wKcaf~8pYt7A%z zU`n&@u}H~xwiA{VQj{>HWBH>(7h--&A_$R=kDQ!CM3C2KD%A;V8i{jnO6wL%VG3jw zsHBf5COpR`P8Olk^2I|!Wl_2ZhDy1j@KC9?dZ@I5bI>opJSY(aUH~+gZ%_dqe|9ou zWNCARFQ~(>Il~|bBoII#Iz$X5aSGy)_6;K-Kp+qp2n2%w0s%uH2rv)`1U3N#fG=-aOzlJH^K*8@KQ;*2Wc4B;c;50Da#R;%yVv2y*<5VGxOc~w zn%IkVaY%PRh#Zb(ug4{EH;Du}v!?6MTTBBX<)gqnam;b%eAT!SBF6~PY|xDBj+mL7 ziv~(@!%~`!S*$2RPRq6w;>;BBNia}M)@WI%)F`>pEKQGYDtU3SLek|cf6&byTr3d$ z7F0cVX0}+}`X<@jz$F<^&ktBHbElh}AjTFpNng3oVa915U;>G9CrwMziqv3ohTO|B z`s8SL${` z4LM8fKO$+|)|Dlfg7%Z}Z~L;Q@TckyB|f%2S$nIITw6^6k~e zM-`(9(Fx+qG-pTNP2Be(pw!k58&7|>KFRF9zLm>CgUO0OCiDw9?vnu5d>CHf4Qjc{=|+Q;pPqPgaLhgZboY8y8pOLOH|k@gL}3~3 z^DV^1p?zKc$-VpJ7NS6*-g7DhO-{>g%n_ZaQT24qM`;@4e;{jZ>F2{08lX#0vRVGF z?rx*df7M;~{_VMNO5!}O&H+U3HV7B!Ab0U5)_wqYr)0V5h3a-I`@*y>^bXylX;|e3 zEa){&988qrR~V+Eyj|o2cV-rF{ngbcv$6f9WUYNCs7kN3Kiae>6=D?%pZN zf*!Cl_NU3h(SdTkACjzI(%bckEU8Z%P}j5C?gx*kS`GuwEi~GOo(zEtIK)tK3VJyq_YP{r19lOe2gk&*5kUjqSG% zkOqyAC=?*##xjqPr2d4QE~KP>5`eGVD^00-e{BPHR5vD?SE9psV4x7& zf15Z3M`O+$3CCm`Ky=I4gJwhdO&w;*o|wts>!T90b0rFqn5Qf>CRdbaoWg6Ee@BnS z29vwyg&DXYRb#L;)r`YnDL8o^2X=;A!OSZ7q~E~&dYjV>Q!?umjK$?aB~_W(UuLOE z;BS68`XP;1sF&bS6pOo<%a2G7cB;_ef5%>y{z5RNQW)0E%PVhqgS@;P8jP1A@F4>7 zUB1z&U4<&CcEOQV_X$$1x~t1eg!Ck`x&>Gsb2Z{#|x6E09k&-S=7dQkYPFqzt*fP5U3^%l0M?s9zvbWgePvZhFQP46Qe}s9q zMNqR!+NH}fPLVSS%UqV`ljSJ|rc@VsC57AzW~=Ljul54Bz>}a5mWf_4P0OMZ$AE!~ z!|}6}@X8h+e6c6;P)Mw=KUJm|flHN9Er?GQ6r#dtfB($F8W?a?jzMT@yUm57DeWm!Ul~d}<&W4m>6DKh z#M27q9%0jA%7*}!*y9$l#FjGa1hQ#j;weT#QeH$d;R{(~%OGV-3kCW=rg_vZ%6^1X zpUA9FnV=|R8GKiAC*BmgEJU3wnaCyx<=G8ow#b4r&DfueXmDWTC#QDmfA-0q5g=(^ zKTo-vL!K;&acC>+rGZp;GN!N$p82U+pe?228DL)Wh^9WAJdq*NIcw^uNASrh65y~5 z5>fr0Ni{ht!Oc6KwbGfF$^1bsnw)+^44E8>5DE*E2IH5^tI&jU4Xe>zvd0$EH1KOK z+FzqX3S@p38X{WX>8|8Ze+64ct~fj<=Y=t_${wU&Ax6ocE^s4&MgFO!mDd+x2r^ocXQ4I~jrQUZF98wFhuS7Abta{mHtJ=#ho{!*^sA zv>jPmVSF|v_k@4^Z2mrl!Wx;R8mN&y7YxO&jJ$|Z!V%D)e|B||EshLoBStJ` z#>^ab6aKO32u1dE0Usw%q6jtTh%Ek7+(hKtDm+A<3$xNK4j_t^k5>Z-gXvaqVbu_> zPurG1&AvdLq(bg8$Pff9KDEq2$jEO6rUyBZlGs7^37gbYzsMv*LFU9I5Yz7uR$2#> zgeBcb!f}=~#`1Y4e?Et_(0A+?VI-EMOf@X|Fd~&{?Ng;+bw743uvKDt;`o>LOChe0 z$#+<{Lu^I1lu=hck5r`*e2uU+E_|w93FcKE^>`4oHY?a~C57lQcCZWi3aD1x<1rv! zT^cM&Mf-BR7e>ib2@xf(JI0AnAOHoZ%-iw#0bGkH?+B&ie>z4pDcY;!WooQCKI}l) zM;f&)bR3c-HaHW*b9|F9Dsc_QDtp6CpAt3@r~f8AL1PlcC;Y?lN8<~WkiB3;!f{~1 zAj847(m^hYFo;v*dlmAMFlNa*Ntn)U{0U!ePHwscYvWrG?-H+HU&F?;2DylirkcFQ zY6b5?xCJX(e|)NOD3DnW^A~7FjXxXoir}(rOpwMxi02fcb`yWJ~J0yhdqEgWCj&YGWJp z>^{meL|HV~#X*FLzq0H@8Q=Uo^)E&CxA+64v$uFy!7KD+*?c9P8Q=pfPIZ(63~6y; z2)9Hbix4keWHBUWVJ5GnLMj#qEBt{)iFc%9f=2VW4wCU~B(6AyU_AcIN-skksQWGH zW)&}%f09?llT>-EpNds#hHJaPL&bj#kA=ln(NhcqLMn;NF|cGR#e`TD*uq{4I#L{h z!4PSbzQyB+ixGEOL;pQ%V5Ox`2-zyHp5f))6C)9BZdeGy6Q?BrvyAD_%WPrHlfG~LGZXm)0pEs|wP)5AmE&^!QR9|{($e-eMhuTCL@UMi%-^Tn?81teP8mXE_3 z0=UUk1nW|KCMoRoT)z7Q?YTGm>2GBGmx!$_o6Dw$ZY;Y6VVF_{hw7-aKUwxWQy>sX ze;`&tVm3Ci*rTKiO-zq8o zASrI$f-X#(`lMQXmNAlUaqXJVHK&LsrD(vj=gsE733lp+a zCj`9919(^KqhZ0F$alAxCvGyufU0*F2fe#MSB751yL-XAdt~*BySoVNf1+2Hf5`Pg z+`3X@jDNVhWrxj09}MKaP~1E^&`sdp;VRMY`ao8%Wbtt9Ir;|K-NLcE!#AX0r4;Ng z^S&aH$ENZ>(vH#WyLFdj>+ascll^AhrDWaJmV0@8tnMPIJzV^aT}q|y3WbiJfgLtP z-EDf?PSETj3Zv=^wPgsjrw>eR4REuw z$>Wk(pbd=sy;U+CHu@Dehbwf3;A;lUfS1rf9s`bwrNDStR?v5yBXoDce@@=kRvy?b zNt1?;mz%Yif2+cRX8N~Y(9!jdL<3u3v!N8Hl_ zyqHej*FcDwBX5tR7$9A=9_7I7+-I8V4{l1bFhDpW=voAqNlnR7UN( z#ji2|`cBHxZeWVxbC$-pf4Xc$6{1>0@VkP1`c`MaKRiX9VXz>!RUI{J&!?v}24>4o^*&=82s`Bi-ke_MD6V6uUeo?sh7IEtk+Mx}47&OKUOFC+ z!K($)zcTm((x$Eqf5>MPj;opG2Ll7)X8flzjL(MJR==nWXQp$lAJ;yc2SASME!XLj zJw=b|%*kvE{1(pLw~&j@N6Ijg!U~3pGRV+qh$zFuFKdpfYDz&F_5)>D0?IJ_lVR9T zhIyY11Lc!px+lZHdNPc8GK|NQVRtq;8C&R=!e;JmJJXwD8XS8%$K{>inx}7Zt*;Q&qd3sy4D=Yw?j_QlPk`$`A}u!08YsNm4AU??(6bR{im2 zE;}{1yzTQqf957`qE0647;{RjL1=0l#TV85w0Z`_p|X+8j->EdT#oY-TN&+<*nrn+qsQsW>VXaOkcSm7lRRJjq@Mf7g<|X3Z8FMVywt1lZ;e2iZXi zs5Rl-`iEBJH+s-Pi97Em)Mdt;2;kSe3Oedk-A8~h-eo!nQPTiboY~=*oEvW3lyGd6 zr4_dHj;zR&P(3jX(kCKzw9mE|+T?aRqfsAi01nj{D9DVcl-uj6j1j432`~bh)O~DUfbQ$o2v(KLQ ze?IWYG-%ws55geY%b$hY>C1gkR($ie52#$UzV?AM$DNVDNO;#J`v6E8fPQ`OMS>pe z`k+Jo<+VQWW_@tz@vb7?eTc;OXH&7u&#~CYKr*z3PV|9k2M~V#eDLT&694RQHggW) zT_2`^8^6hIi}t)lzQ(qEUMv3P^*jKTf63E4ue03z+|M-Lc^wN}Y;3^JE2iS6&g*XK zKe$%!$MnKnQN+f1rNnt1o#VG@+PF|>>E^WySUlmtFj=&1HzKXFSnZ-Syt%Q?3bRLE zvL2({^sO?#{tD|+@W^5jh^s4X!J%>E%-Yq&+7;TyLZVb^*E?$0KPKv*cC|L3f0kV_ zK7WTX_n+6?!IONTIZP%>?g)F~bG0<>O2`RXklSx_rSz2`Zb)Uq`2@Ra!dxSLtxgj+ zt1XP6fE{V>`C0cy$F6s|-l0p(o9sw@PlDOZb5RNXZOfGbA7UaZVld$WcYD%ONl|^S zY$>*+(CTqz%@x;Zn-d(2IcdJ4e_-nMzB?Z{Qqio&?rPXUszk2;!P{9gR2SK{co0b(Xz?aBCFoA{0}0QVmt z#w3BVBmp`E+DRU~l%WABI9SLi7<@ysP=0T?&-OYAY~k@i zbx5<$D|j~RKFGbI7Hjuac@8#Z6MKQ~Vl$I18L0^+LH%{$I=#wze-OrW25=%9Jv=g^ zResQi(x|sT*%*Ms_)y&&so5Jo&Xa|Q1C8> zO6oPfZksi2!zK-h1>&e)=Yju^mRTc>y6c#+=fh8lyz{IL80f)FYu>%aStgZ1>_g2d z!^%UF9#RSu7+UWDfi<|9u(nk&v;*9dvEe#E-E>$H;8S?+e}19^M9S8I4)6&08d%S2 zearyP0gQ+#WjVm}Qz|!B9Vre_$+00ZH;dq0SbBgG0tcAC5^rw+#7RSY=0gm!!@IAC zrwu^Ua;MkoUw7g)0N-n2v^4<7TfskchQ@D{)t7r|+2mkGQ-C}-F<@p6u*&p@YME(> zJZ5l}%;;Cse|AC}W<1vEBj!-K{fa{tQN}!dnVX!a0^eUh1p5ifc9x-4ysBkhNQ9o< zi5c@mHk4SIML(by8ZQ3c1nLy0P)SB74@4n;77O9N?!-v9m)E{B-AGr1mDB}MJe;Yh=^E@0S{I3)nzO{b`8)n1A z<(b|LCl0>blYCguu=W5(B)#mS34M_j z&^LWpm@T5qqLZN66;2;~Zp}mRf5qto!oC25To0D-LS6m-wh!Vr|3#VOD~@kQZa}2h zm*(Ste=L6A&xx$WkL#k4@X)uZ(aZxJiDcQ5pXLnh!#@NUVR%#s^jWaO8tU)te@`R()lVr2p9((q+cM83NE(5 zkiZ$VN@^DSJ!*tM8`~by5&QqE)y>F;{aYFK4w-y}G*pG*!QQEdQtaec7dpK;n~U ze-d%F8KB}ar}<#`ber^zVwh^u6#q9V>#UPM_HUvy6+URiRUzEr_M3=aWU}0V^)kq$ zXxB-<&h4R5s-K)+GHyFd>j}Y4@A<}_8bnx4haDh2)a%ny=%H;n*E?S;&~hGXc2kU_LF3xxlMzdUjloc73HPM^#-G?!1zmkLzdJ*B>3^CI9qO^CUe;ETy z5tKKx*Rmsrejf=$|6Na&;&ddb*QKB=4Z?~k12hP9Mjvn@5PrvB44_u;9ltCg34wn} z3zjv6n0)1zNfQNWWS4M1A=biwUtdfMckrXJ)l_r^(P-fVv5GyN!dDwprWuP1C9z_&msne>nsPLTWo-4Zel>jxfY;P^@*@?gdM_(HtvacfyEW zsA_nLCSl3H1Zzbm0MS>FOKJ#EE1-sHL`fZ`d@mGEW+jjVoZ8P%sn8@x_!C?&FnVt6 zLrV8rK}QsJYk+xS505PBIGJ(Vkb2ua%9ELuqQvC(e#k8kI`LBnFih@HFkVhsQ2s%(DK#yWs$H9J|P+CC251=zQ6Op!SL!7{BhduV&x z+F2MQ3v_k1CtU{dGETK)TFe#gh6sX1W{E#8rryS|Ox`W?R{@)05!GvZ_xx<@ zp@)C;FW>j3LXwW?82Ia$>?&i-b7e>nX^OJtr{yK5T7|e=s)Xeh%j$S6Tj=eP<(Js) zOnDt6H?(A*k_|=NWUGXr4M6Gv!>n~wY9p{N@6!`%tpx!L(yfmIf8k>{(%*&&wmthp zE}vB3-=F);!+_ze!I=|hAE!sQN9Gcq`cNbyBsq8CNY3Tyro?E~+ZwS#qi?`ZTx9(i zZX49+J#X==_Vh9TFVV&=q6cSeKyC9-h7j6)dUKX&rOoOSqL54sqYE1; zn0Y;7>?^Ud>V7&Me=87TkzM^VECxWa3hP&-zAdz?jNVF-hs#k%?gJOAWGgB|y2xp= zB7riNVD8DJHdb-TE9)Bp;MA5XMqttEXQ{{(yL!1cl+DJqn|Nsbii{o7lT+k?gZO~| zLI`A1eCg~1c*#0`09)RyE=CayA8m6jiKtho`&|PxNfZ)3el0-h*Jh8BidLZV;I2heRwyTrxrmJEx#}D^F)-|>orf{XnN3d10k zRykzAQ1Rf5wpb?yqQ%+MMZ6p@#Cvm8@$uHGRavsKaTQ95(KFw6g~oga@x4# z9ic{!ba`^2TEl#N%=%+%9)}g(bCQw`IB;9#KEZ%n3ix72`0ozW0Bv59&)=tJirF=&NfJpe>6QD zK@dSru?~s2!=JSesb!;r@?Bl!-O}VU!rdHB+3=EbL%nWfjkskvYP5kjWw*H~F&vW4 zw66Nn#?ThNKHQX?!Dl-4ukg8~r;~Y59{r*4+rU$Yu-(zr15fSP+G1GpO+h34HM-Rw zOzSkIz!S<>{t3b<_Eg)Iu#UJTjRts0bJXNkGI8Vy*20{Bt02cISo-g; z4DwLZ`AONE;6o)9EQC>4m?Jpj&$<|br{)a0>XvEpeQ{E7|y8$o-N>r zU=MRmP6Uo4$^b~eX)w4Oa8__Z6ffZDOM#TqZzYxi4k@)fF@WvmO!|9SwO|2g^~mQeV}y%hJpviF$gqf1cI@I+h$27AyCN(qHUk|*5}ly@q1)h zLhVo@^wld#XR-GZ|87h=8gh+jk2l48#+2zM@=|0xyt&Gzq#_Sk3`$tarXJx>9kpvT z8IV%EThe<+a)1?$ot=A+f0vYs6k0qvmc3_36M)5rBiFs&fLEeMrva?M0OH9W7+}`} zpujY{RUJ!=)Ast+uPCUzXAl73Jj`sp=~sOI{3%59!gdyo^V=IfeQc{+&e=$w_DP*r z$iH|s;=d5x)>t3rez9k^x@p1c-P%M{>J z71=Uy7|KbYIT$vyEb=BchzqFXK8pbWQve7A5EM{URu%_i;XICFtRDoRz=DH{%52Ynx@o_Cj9c3yt}e3psl@;U0^eC^?el<}e}zh(Wi<=go}GTtm4!He z6oHe4_ACK~ECilvE|mj-t;ifNWBO^l z`>6$nE$tI#|E0i(kV=~;`j8RXM0&X&q!ReZb8e6(lLbt>3!pE}Y(HM?8h`d4B!tHz z(~j3DT4}Y&f7XedOzDvn9a*AR$uI-`Cpgszfq>p^5cXmQlH1;1J74rwky$3r-G#M| zGl_F5zA!b$O064&DI@?QoC!QnMUb~~AkA4hkeq4{A2L7Kle`2NY#Cmg>W8vW45a2H zMKrMkboGj|szX3(3t)>JnEY0H3MARuaK%>@)`LU9f2IoyvOtRT9DRS~5Yg!HnE_Iw z2}FhgsU4_Bf-QLewYnQvaIWN?wCkh#_4+8$?M!UsqmG1CY3tyAzCXVjlg>x&3|?$k zt9{fUuYD9A1>BvNk9-*RUe>2a+|~3?y-}`6657eUZ1~ifs9csr<*F}5|MO6J1c%Dg zrwC?Zf2e$Hp>iG?+*Y{`yqFEXfyB{;(K$aE%`vek1oZ zey$1NQ)VxkqK)pnmUS<-W#k_H=z#H$#7LN+90ZbcKXU6==VpG?`Flv*5KhPOP5BjL zD{958kKL}k`uJFXhDh(+gl{h0Vf6zkiibW*IEApYP$VVilU#pfZ_wU&V z0?3DxTGb*SJKx0#l>d&f;6L2ts|Yl#FgsIBR9 zf494(9XA1X>Tz`HxxY`;)`;-(J5+l9l)L0zni)(&)hQ)_wl7bBgIXIz;~^g9KjcIQ zIxrysqLAg^T?{3qq5l-*7TBjEeAD1sV_e3#hpmtQ58@)_)U_n zP&}JQ)e1^6JQ{USeB!t5p(u@k;tUY9yeI9YU&ZghR7dCKw0fW830Oo>&Jq{OJ}ASz63Dg~e!miCVF199 zwOwoCW8izoz>`_fC&NWN^-DjCga8j0D@1Ez!sr*t=YM-r(c}^AtKZQy>QKe*@Wu%OgnS zP_#fWL>6HmK&M~~|3zexsKA*}Xua+T*|7+6KKHJ-FOX%l!<$(fA$KAAxf6Z&3~sCS zIQ`ba1&g9*RaJMNd;Rf}ghd2EGU!(n8yz2&icZ&XvkCBlujtFgUJ-+(kq1!G2I#)F zOcaq`MGW8?nFB`RIf{j~e_D}9d1dhvd_Wy$n|!~QPuxOEwTm-b) zJw%~~DxwkU-T`z-*O(q`4)EbOcZ4c9{1#?p85UXROZW}&egk~pqhEdcd|%W2H>${{ zY~XCqpol$sQHsl^xRpEyKwEv&v(FATSfN;v#ZY|{rMsKS;ikU#e@_%;&8Y8Nr}+`} zy~pSp(zg`GLIqdDO4iGv+T{BLczkYFi|@H1XZxJrLp-75yx_S}ymQn3(F^U|$lVXK zH7Q5bH4;;3QN_)+)HIL(lmw6m)xwaXa~oO_>P!GR^LBCy46y4Ut3gBRcjRxu5bLi$io9}cJm3WP?04+JBsf6;P4oFfP*yRn|=##g#O(J+TL%$#esH2;({Lk>}%YUBYhkZAv9fCG=>HIkkic5Ypfgj zi7*YiCsH<6&7pH;VaxUYqBGLna@_^99Z*hfm^Szg-zCNXIplKY4$&;o1j5s|h|NW3 zprSKvf1)#IL}&U#XH44AnRB5tP(o+)L1z|U&>6Ozk)#^(u!qog_NtpB0(MJHXJkvZ zw=@=++Hmj7RM^XH7TJ~NBK@5E{3jz;w>jM2Z$vQDYDmcFN)^J&ND38di9@AO?X5eJ z?4tOTC=Ww5$%%ibV9S2DLe&8Uo0g<=1mWtFe+jmJ_2C!tctJ?8rIB@d@Bq`@MTVd? z)hjv)64$wL?A8G#;&c?OO(Jvt`#XKDXq`FxC`!8KwYVW9?KG%P-TrEh9~^1k-kRhO zc+@#``R4UP_6$blt<(B9`9RZ&mO683tlpM{?dIAz^)oS5qKFe zf7|--0u zUq#mgkHn+*(C@y6w~gmwhQi6d`&(rMEy?c+@?ry^zmvo1Rx2#6 zu7B<pw)>(x`wA6mg-Ls_{8{5K~QT?{NPTcO4kbjkbQ`-xH7J{jqxG zt`zFryjfUgNwV+eAwuEEfwgE7$8)FlpdRo!AMET+bh zeO@^kd8~CGK&5+VVD#09w#Ad=jxRZPvS44$U>k!CzMp%teRL-^uw7%5swCK;ymA_4 zxtxIbi-<`NrV={1mld!+@yQ;88y;|ssM&{1tfuIphAKJs&qD(?l_E3LH z$udi*N|wi2v@#|n=#_IS)oJDeT!WGvci@g00OWq2N(e%r?+=E(5J`k;1Fwue6vpjc zgqTb~4?r07lp-Ij5OO2Jf#R*of$e;d7Gmh8+Jg?U7-#d14{F?x4~j}9jD`_F2_rb1 zsXoM&pw)8H!hAX?44V-llRRF#(tlb3%alJ#SFUX1Sh56M#RAPJ+9~mP(yL6^mrh1q znnNAZmnPcC%KX$Qjdh10LXo=_%s^%nBRQwaWRG_7`Y!W12S1zhh7?%Hgf_%<8)(wE z())fkK(7#=ff^-U6wU{7R8;1K`m+kuy9zR)%o%eb8mkQtMOZC;@Mv&n1AkCypE@Bd zS(^RsbU@*!(qt)A9qHUOA_Vrl$&voC`OZ{kRs_$HO1t<8w4z4S;RRuns#NYid}6TR z?LLcdAOZ}46#@=2-kV9k%n{!gna5{ZfMFjnZ|(O&g~Lx{*N^A>mh4+nXDIxrN_9xJ znY{v$XTxQR87@T26gcu%Eq|6D{KtEZDe&yiocZT2ro8R$gUdphL1#+WL<3n9Jya77 zRK^X{L_#z$p-KTkaHmr8wZBXBS^2&_bXFa6 zbnKze{VH$qreEmU!f<+3Jd*vno$(jnIC45pUq6tq+Uc(2CZRtXK7Uqdz)r4r65v=W z^na2li}4wzD1lP?PT3%fsQ9#FW2ss@;A%QJTH#wl%MII<#7)v1H^sn4rfeL|#YtkM z5P8w4)N_)#8idYJNLmJa{cifA&2M{P;?VT+LA!5WR^n#5HVX6S>9!7;$9p4!JzT0d zT#jUnBcUfY%bP&T-hWvd^*jtP_EGHiu@ko)!9c|EIHx!hq5Vrjx(uChYh=S3WiSuj(iFe5f4I>4N5sNDt#n^%o{ z!HoUU$ZmtDf#vgil(07R2e`%97pM1vPy}clp4Ec?>fn=IliLJ9YFte&Te3Vzn1s9p zIl{p~XT1B;n14iTm0f<`eVd|yJXd7xO$2$rXA}R+(=m+W3Z99dDJJuh_^29||*42%vKOB0x z1sW&pm2l=Y`{%k)bYqTaJyPXin2P5VeO9SNOMeb4d(;i^%1zva9yvs(kJ^_f zfg6noV|)aM603gb_9x#kta8h+K-^JhCgKE`lv4C2?&s{oieb=}B$k!ex8w)dU-Cog zWAfv0_PjJ0rllwl~ALHIbJdL>{?4uQim<6PJ7kV2nxTv5t z_(`$Ac|_c3TCrk$ctk9kN2WR=hW;c8b3|4-UKBVY7_xq$BzPo$8|+C35hs4;^8zIYT*Z*zNn@9^Kw#7kttV$*EviA|u{D zx)O5Wp#+z4T%JnMv=6Ee(&eR9_y;dz^XcuLB`TNsG!Yi)rO}Jq1C+Qj9~S|b%yrTW zkAEvZ?V~HPn%W^BM#s4{3!Hm*eRfg7d9o@`?o*x>k3 z^l|EQ?-|GeECLkqnR6U$(PBe0*n18RHI53`-yipy?Sf*@N-DzL%6nXj{K|C_zBk_4 zT^Q)?xyc!N(w^MY`-aXcPF@Bdq-+oF=YOKVB>1x}@h{}x6aO;7Z?yfyNk71gH z%&x-BO!i2%#FJrHfPY0m!PXPT3vr;srzi0>?_Kp=dPzku!PIjJjO>Gc^-Q0K+>Dcn zcOFgf0D$`~1en}t=3+woO2txvCSq;_iG+(8qz3jmTe+z27>hjUhyF1Qc_|YH{$#OeRt^-2%U`z};IZJaDb}#8c&aWu9Wh>Eq{sxaB(DtlI`GV5?8PEc7Z-T_sQ9_|H*#9wT&Ft zKXDfR$~;0sxT?;9pA2ayXz@ir$yMT`Jmc<7$YjJG`J0OLrM6*guhJiTEs^Xj7nM={ z9=|QyUq0iZpWoHMpUs42Q@*~XOBXP}XJZ_rhhzQk1HUiMoezl7q=?(!j(=F63;kS> ziEqM1+si16?fl^soq#O3J*Dr){tEp?0@X#{@I|9ogX z>R1SQ7;*r3#@J8WIpvRIVD4YMgYO8#Fbx{|F!U${K3H;^I(+P!h&liXg3U6NRsoZ0;`2u^m<)8)S z624E~yBg;h_AbY8dHvre9pM!^!u(~=#1RGxJeCb(cvGM(2Y*;6tJXX_^_~YY6vMKm zHO5a%$@RTfS4MwwQ$_|XE#>hYk6@z51l#;gfD(VF!@#%H9*+o;!TQdi?+T6kJMe;k zHiX2*~tMLDdTNC_xoR+>zEp8zZIt4fd%c{B-3TZ zy*3bI^F0D?;>cg=<_MyE4vRbh<^^C)UU63Tu}^Xv|N>+utLEd z_$xTB?Yef(|v57GK zn5Sq&uP^V$NI$S{FYjM3FXS&}&dWRLjt;NQ4wiUI!`uTj8`Z*k;s`m-U-t)u`axRT z%hf8g5f^{W8Plsg|L_8{fK@i}f~o_2#Q>574-ud}@Y_WaBpIxpH`ia&e^CQV(sQGT z(tkU*jjr!SK>mi3Re9YTtJRVIy;N-P99rL|u0;(2%=gaJs0N5%sAS&;08;<}1ONaG zC@h&t#KA~B9tbHv1VDfRfq?`90tWyD03ZMc1{MGa0Pp|+7zh9u0077U0t^ZO4gw*Q z;3+xW0MmriLujL^-UG2yM{%YihC+?mSG7I3Ej06td@#Kt)-%m z|E8dP@kl<)yYq{Ylt)Yuou7|*BM=zb8o_Io;5=0#r$;X&l7!skfOonNv5HuZOn=7x zoUF|cdr4PU}`-pji&Xr*Pu|r$og&_#&Vw5z-ov*|LL3$m>?y#L#Q;-sMblvr7JrYTo#q~6u;4>pMcjL zLsYEw2X;JEp6>6*0%)l0G%hTX7JslC+G3sH9VJP*FS|u21EAZ{S~{U(?Oy(x1XZI) z$qWVoJ}Y)T1{C*ASPs3!oL-JAL0eX^{Zp-c|5S~Kb;hGfo=hb5TBdtylw<*36Y|~{ z+n!>YlNw`++xz@?DtJec6QM$NB1U*t(`H&QW=U<_;vi_KzCmfGc4TqJ9e?QrQX$ZD zqOQ=6qZw+|J3@BsQZCzLHb^9Q?!w*=M_!M37(9fBq3}2T{7nnYw+@4Z*a83v@Wod# z2npWZs~E~Y@LvU{cy~%>#g!IC#X&izGFzCSQ(oxPDUWXPoK7*b*_1?-$tuF*I@Ln= zL4?AyPGv|jLY!a5zMmK?6n}L7T~>`$3RDQ+hgro-HYD|Y_RQ(x7iJZ|uxWzNI{U)g zT?Rb>(E!Ou5}Hh&Or#biAeV!M zinfy(MBMr;_>l3MuKL0szh%N3)Q!ZWq3-yt`OKO(r}wm7$Ut;QN`F${4o)uFR5~Y@ z#kQ#h3jZRo*(2TaQ~y;{$-itwk4gyQO#r^Gfa!7jv)mcU!<6&+|D##ju&h{zrs;Tf zv^m4H50P?468e&(z6)u)xST~YQln_L9#dK%t(S`>1v;TQC(r;P#tBq#Qwlz=-VXKv7Diu6-( zOlOs3N*`O3#l)GIV!eTEbl{pc>>=n(7USD~yXwinluD7=#hU)Dc)fe&XbdXY4+oH*)y|GNR=x8CBkLOrjZJDyeAO$9ag$DH^>TzKvN5 zn6MG;%_AK}TbjxM=wWIp($5x9w3J@cwY3;d*zrUg`N3p%e-jO1W)`Qf09XtT|Cpm! zo)%QlfR)<4Pl~iBIU;N-<$iyRSe2-Tn(5e<&ItN9Tz_ws+T0x+k(8LiTehndxga8q z<-IdqIr&g2FTkkNs6z#`jU>M0teJd+z&!+JJCrC)#t|a%?K(3 z7-1|4=zk9ANF=2sxuU;o{X9rfATwPB{fgnIDH&K@AP{|ywBFv+%R%Z^LsLybSAIkk zBqjzR^Z%EYfxso_F`p-O>{_2Vw}KD6J?X6?2IKofPj~I+HAO|GirAO@F8u?t2|QjvcNS>U1pAG}650cFJD680*d3d;X zP=C*w)E#wcndXB4%W)=Tb0xg$h)9_r)mAOKEOlzd>93(AYJvZXRn<ZLlk9$ZHh4ol?SvT_lb|I1&0p}t_HW7VWxMSgUs(Y6iG|*zu;C~c% z{zGvoXi!ejfObYsbxH(O^wXn8#qLAt45Hu(HldTDE(L-p4~mU*$C_WzG86N9ShLcM z5;Ig4K^#r_4^vZn>mNpk)f4B?M5+WSeyD?^Xr>2n?HtOt+wbS@4JFUeNF#74nV^9! zt!Sv!CA+(g?I1*RO&X|05cer=z<<0!oK$bK3i*V!PEZdN%2L8o>nW1=((qD#Gj|l0 zE{*DW)ErV2HVUKnLThV{q|#Qjps=y6vL5=6C#zBCjDjniNl=Gv0)^!E^|9YzespKi z67D&}!=#uRG_HhY>LyMgNvb-&hJ?Ly$B~e*LEZ})h(Dh(^13&klffr%NJtP!Bj_L(bEnSgbnQ5(vpf3BZ<)M1R(6EbphM;C_HNsO$zs;SsV&Sz-#B z2KIqgE+|nAJX+wxRL+DBetdRlJH^>le^rIh1^SK0aAFnjYHAyv*HKV3$-B@ILBRtr zq66e&i1V+cq=Tx8cmf3&m4Bj)c$4}kMCuzdYfm>4zqN0!?B&6ph#^*gVcP=j4qPNU5Xr0mor}D(w8K6 zp0qRs=UMRU>vhtr>c1Fr@7%X_m1Y?sDCtPB$a6qLLs4GMNic9`$Mtl{e?Il>Q9A7HHBs0ah&!LS&p}TllL-ySXTGe3c}&u%&{zAXqK=3=jh>ubVmrr)y?=nR96cuERU&WxKHKml zGF@L*15YzHGA}i`-j1hjo1AaXJF%WTiYTgqAn|_N>8zkOp@VgjE`zBMz*C^HVE!~} zr%POR!~JmqvlDSM1L5hx=IsE*dV-L$BCL#YuXVJsqjsb03J;SjWY1{JNtETaIuD84 ziq{f9KskZe`hUm;n$}&*&t1!R^H@2%*5=a=IAYed;#b$21e&^5W1l0vWNl3CBTW~? z2fsmgU-OZqi{V{ESm20~5{bHaj^A_2B9Xv3TD!2NJx^Q8PD*0ft@LU?-9<>Coj6%n ztL>w-uit(WNZ^dHC^#*|S@Dm6@^zDsB(&Oc;2oj0s(<_-gqB%1l<$t95PSEWmRrZ_fqu1arw5zP9I&sSSgy<}Ahx40cFni2Dew^k&yu3Yl2Bcjn z5?l__3pp!?@L~I~u=shrPmc8wCo#$aOB8%IxkwZX3+Yqrs&1A6>ncTl?RR-TXx9D6 zqdld(XLy>QX9N&zJ5_)|hV^CZhvy_FRiI)Oi+|wNLq6&j=X2p#J$`r>jo9pL6enQlTEwBZi9x9zlWwXVpdOWt-?*3HjdZQZrU?c-ehw!;JoT&xasT{PjdVJvhE#R1wParxV!V3kUBz5lF_@) zrNkx`F|i5xH56|6n$j+eru7<|0Bo3zFeY%*M-jhx8%C2o5#645+SMn16viR#>VOpN z1=^M9!#B^aHg;UmtD@URvO5hyY8BP}CVxSbSNbeV1+{5hLv2D&6~ziNviWWkv?=}C z%F(pA0KZ}B@c=xrN<;}Z1+F-l%YX{wKLg``w%CTCF8;G(w13*p z4*GeXuroS3m96~o$xrG*aLWxqaaomLrisA~DF%~+vM7NtHp6}A84=UwmO)URSKRCz zGbbQZRnpY_PvNKAVpaS0^KmN`h{8l~FB>~E6?2T)?1{ypLXOa>R#oB(r*D!be|nAz znj4i*NR_25vzBTbRggISQc(VLFMpg>${^qGyfUCdFs{el8RQxloSy0SWGiy-4Xz;>Q1_&)P$uj?s>2unP}}{7 z$(H2M{xpdN+TYSX<@}3ZFB5}U8K$faaL)c)&VB$AFNwJK8~-skr{f~$SAWOB3;nX6 z(5o5n*PO6J;-O=|3-pau4)*ng*J1(OJhs~_3`ylbrkPtlcQ*ta}{=ql!jJsQ^jTs;y$ z8{7900}g`Dje|^7QCjBJcs3>{(H!Z7A`q(4_PwC2yu4ZkgKtlry!uH zoWQVuL`E30_feG~L@hqu?O-&se>uEzuC#s!FwdMeWpW@x-T-&;0)Lh&Pmv-%>7?VH z=vMT%WMJfu^a!&@zLQx_xm2w?why(pk@pFZOsGGO>gYkNeej54sPY3h=z&87?9q`B zW1OSmZaIl>d6U2ItH0P@Gd{R-sO?G519NaJ(zBW+woTAeV>7hO6`dlO5z05?y=S4k zE*cYa=%)mt!BbjpOn)txkz^P%;cT`lU70Dcw-nqcn_(G>zHA6bw?vDS1bZc}dYxQM z@EmnMp!CR!IvV{oqR9cad#pH!Id_Ew$j>hE^9 zwaw?go44ZbRU2yCNgl9Ha^*~Nk^T9RRScM1QAV-r}B1NKF^Y&WY3G zcGIopuj{G)n)P}!FM6_|RD~h2&ISM7NxtH0HY+n{;Zx}$1dx-ZbUw0h1A$258J*IB zEKU8&hJ`Vlofp8)&2l6AG3t_O&i1Gf2i(n46HZ*tpm*~RW*@*ce1CIvdn@=JyMd0ufUaM8p53n7due6RcANm^@x_-b z0oRa5QsZ%54vYpy@Ph0l?0xP&+B*9_Ch_%Nsb23#M<+6&>pk!|wDP7Zms{^SAa7zF zF!~5lm`nhVL`=O$MoGU6Z?;94zD<_i$MkA3mxx@0*MG&7nxglo=RH+slS&0C-U31I zMT5Pg?DIZ-B$kV!gZh`EH6-GVsU{8yzBBNLXO~E?M;yL?;0Vrxj&Wmh^S9sZc+WUm z@?yo+>?gRg9;!cns-i^&6z}z+i-^18!`UYI@V<~)Y&N+CN`nZ!XTtjo23dc4^pYZN zFC2+fVt-(IQWOy?;=V`#yobX*=bWnCmRxXk3v48+HkWy=Qx~}6AEt(W;*7nEdx2-i zr9f~&m5TdI9=f1RwTb(qmm&PG#69#iJ76O2Pufa2XYYFX=>*W+_UoLdT&w4%1}bM* zKJ~%B8v~a={|O+3DYfF6D#)X!x66Wq0*{Cm{C`2jcyRnqM+{3aWXq#q?8x3ka%r~e zB`lO_=!!unHD!D|nwvYT6)_Cb5Gj%&(prX$tBHh*WW!9GGKz{2sUd_c-U7gTh38V6 zAd&}4p=}9afT&%oxPAg9X!~)VPsa|yaz`(>VF&I z9m0`A;6|)7D{_>Y$su$ysmU>IW40N=ku-%39JSGGEi^7**PX&C6hQv%4%~Rg<-0!V#q8s2AvZ?{C^0+;1grlL`PFJ^c1%Dz0biNS{ z8v-^sxvF=Z1dscyz{PuSZYQz`Bo`&B)y5MEevf0xaZy?;eKujQyoL>F)hjOgcH0&# zW(pUR{q#ULUqtdu2ifN=&=El3C$&WONtxs|_IQivIVgsrmjK^kV_|^n7Fpg#qpRZ> z{IK-4=&2IVZIRQ)LZS6E_kU}P;?@?8RfSVq1W1{u2|hm$ZZ-|VrJ3i=p_p)kLea13 zZO=>CqFgX1h-Wa-7wZ&){aOZN2s3ODy{E%oUmyf}oBy$l(+2P6x8MRw(Ese5(&^i` zsRKBY2^^<1YCn|htCD~$BMG7@Oc3SWf-MKG!lV1={lfsE<D3iJHGe|+j&vDTXnbeK@NFK{FI@iyCKYAWVW>-&cEYXAXjhaT148+Y z8&X|+$TPU1`0xKVgaFu_9Vw1141u`~$>TOO-Zs?IwxPPVp)+km;cP?6vJFXN8#)uV zq2_BtebK zL#M^C7uNz@9R_!F2`ob%PT|Us`_K=m3gAtMee!J57bY?!_zWNM3mHmS;bRVlIH{HK z6J1&i1uUvzF{F=RV_&r!*c3yuB^3b4>+V7m$|cYTfpB7|%MB3xWC)pC5m>Q}WU@m} z52Hp7BR^pTF@H1xF(mt8Xn^}S{ zr8k%tlEerZ&*b{8U)}W3a zI@PbAI)JNQD9Qc%_o;!p|T0J&3z1Q`s3Xe4CiYJLP9 zu>i6J5f^Z+4n!ys;S*L!z7e$eid?|W!2zf`FaPS}W>*PPETUPI!%$rj!);dCPeQ=_ z|C40xQGeI^I~7}J#s&=sV4OPDJ${F7>_ZTsfPeu+MWcx<917%-oazTm+RhhfP@!q& z3!VWh1pa-}O=tC9Qetc9W4{w?PQV?ad^=?2G4+(Y4!QY}4B<7pbJwWVn%wFdEzT|z z4+gEbQ@#aux2v0rdO21*1sBTo&>D3T-c*dlqJON>*58llyst)!i4*Z!#tcxORnn~* z<)ET$B2Is*Q3NCwa%jqmRgxM__=uxMx4G~I@`C+)`0GCKWly8{lt-OL&A*s;FByHz zG-{DlJp1^?0xOMf%nMQ)eF$~$q|rU2piFPBK#7~t8;!D?d}eu_qR}#)4tS4^Xw=i} zU4I<42AqeGJujfqV*l&n>$qP(qx;hc4$RF^vuE`C^C>Cvyff;~ol#WwAy3d5{hTw3 zU-LK@&gdVVmRg{j(fkik%ZtXE(X>??4(tLV&8SkuiO@VVy5r2KX#--J(fAAC8#Ag> zRX#DJ2HVU!B`tq^e4Z|&sjYwy&@!r;Wq*{kE!hZwWwZgOg9R|YRz`C+>OfHE$NC+z z{X-ee7tM|Bq1r9%WK_?|C;_dK4h@y;25LC?aXk@ zBAMtKv5~|Pk1q-UY?NJ?BpjUG7{!S_0+d*VVVOP}qb$!DbOn)~x zi%~2Vqob4dP1FxV1xSPXLHQ7<(bEqY)?ud~l;rGj7Q{O{H<}=u>A&+}TI}Oh>8w5M zusz*{emnO1I2E;;X`Jn5J%YDrReOlxI>qC*{N{JpP`9>dc#*2>@i04ZH%$wDDwQ40 ziOfX`w-zOXgeY&_CFs?nygHUplz)4<9o_G_-^<9M7im!#?D4@NS~L_^mTC_o#l@?) zzO;t|*R$xW1gxD!Swr!ap;@$c0L?7=doDu%3)_FyG>0alIA9r+MI&MQ9d{!oi{g3< zQhjo%lqw681RmUlCCdP^xu)cfc%7!!M*}JnKig=}7vooej*a2@yH*=?pnsz=xKK1Q zYcj$LB!kzuiXQk2gw-#Yp+}(zO$cZiEeJk;>Wb;K1qX9Kaz? zXiZIWxTT?==Mg3-4|>vV<`Vor%M|;SsPBRj$!K32z9D;S)fkaG%zp@eYZ&V|mhsfF zXAm7O`10_e6*T1ZQ$ohlY{GMB*@;mI5 zq8TzE^dDOk&xX!hYK1B$5=djI8o`))+WE0C z72xCHN*QViCDU%Gpq&Jk2ikcLXlLx7o$?dgTf8h`w?7)gO_&NBFm3N#Mq zm;fxjI_Ga!m0mmBy_oZ@&JnJmJysD&b#mrpP(Mu9e{9M+Co`GBP=L{-Ox19Lrv;Kg za8XlGe}Wm1UjH+=;%jv+!7;juO*#cO(+tl(V97wQ}atz0=(Po(0m>BnYjko@L36aZ95i8 z_Xwv@P2+7MCe7{P(ka6kzi=U!GQx2FP_3;H5eh6~$bV=$?NK|BdXV(&!}_>bfx<=a z%ovloO@Tv>{B(|Y45NM_z;HvpDl0QSfKX4?UyWh9<^8iXyV;Ld@H-V5l008oXP84W zkcS;!taXEP$)z6`;gLlObuJLuMozh+4=nQbG!Rut{(2fYyp3@W3%|^5IC*F9BNhd`X;98r-I@UKon@wj zAqSqH*gGI0XqHWX4KIFS;}wV-u%o_SR`)H&r zrXaA;0$!GvV($kV7y)uL#(z)WJaW+`9DfaW5^@rqH=bQin=xW-bQa6Fx|_DVDDjMj zYm=Q@^}7GNMt1Lv4;JzwC8BjhqrsaAMq^cB8%1d3m%zuR4 ze9}xtXmpJoXCxxQLr!Q6;1vNH`UW6n(8#OiGq1WMDYw}<^mZ%yGu+52RM7CZi@p|G zDa*PyL4(^Y*}DV{!GlQK3PktBYNemixZXX`n7$jqg%8BL{Qqf@gf3e9xSUMj#4zzo)tdD#DENoAo!G~)N><2d|IOP?XVnmSrF$O=e{fHk7 zCeb~EqeMdd4Up)+4-0|(cySu{sy8W)IoLq*YaV9MjVSY$83xkOyfH~C0)NDnCP(24 zDP%P^-f9KN*kms1ls!a@x`FuvUU%FZY)*EG--+;-&SGkC-Ba7>FO;g2f`9AQ5!X^G*HS0~ba4BK~F zGBK1OoiV(=s%lH0$bL^r=6?`#W|5T@nKOufD8gjUkR+yv%C>N;&vRorW9^;|0&<|N zyrxliVhig`-Hi0AE|N3yPpT(!Mw%*Id?^TYGJeuc^IaTLNDybF zVPgGV`sbm}EDa2E4m+$Jw+)atI6!!c02?~a);2I3Ux*8=DQ5x)9Df!Ki%iUAU8b65 z6L)?dJCCf((#>w7KSb-}!X0G=8r=-U_o!axW+;#e7+dbW)NL~?0XqX6099a01AN&E37>kA`TnNWALOtnKT*)B<>Y7kuSGjAU5ZP}Dtwc3DS{+w zpznh-MyEqB-Q3?w!GAyG?j2F49|P?1uij(}Jml=5u?$_!sB4sLHKX?0)~R^EPW1ve zDPKnTA*xfq+BuM#QGRb=igREM;3yt&hNm6oa%~Z^Ymwz=A!@Wwr2B#H_?jk<5#=ty zT_|RXU7c;F4-6~O4R8KXM;i@)6y|LY_PYD{^-vW=&toh&eSbdtlVU!DK$Jcz(--lb z3P3C_^aPSFqN?hGgptVorgf->j$jjYm0J z+t^TDU3tC0y?^$_!zcg@D_+@(^htLD(&l#rQz|lLlv;Ynx5YO$3+IQaY$;uLM-5<5 ze)xT65EM#(H{-z*Mn9nH7Yiux8}1KI7!-R?)2LjiaL)tP!&AP1A(eWFCd?DPxd2r_ zpodtd0;Y~Go8mlWE*wkx!{lb`6Rn(pObSZsMWhMS8-FW;9gs?INaev#8&OR4Ud170 zg;~g94zDzqyt2djF379Ukf-n)J8TXs9;(M^=3$56qj+3$Mz~sFQ!mhq)bkgMto*JE zb;6%s5U#hU7lLv%VVYi`cUAU^Ra73#E&^3PDe|pr^y0Z~wNH65GAW~x6RYyLZBN-) zZcEaa^?${%;=T(zUSC11($SEcLb7c2W0*4I$8hwsF}Sb|EU0sF(~J21Z;h)fiKlW8-IQ&7p_Sc z0Fy3~C0#5fU0g}Js01Wklp|fd8Rpc#3_CBFr&cDqh`u<|le5thI|r4~!wf@(h8m?(J{OZRrH@&b zWPg9H{h(VwGqm~pyvNB0*{QR1wH!^eo z{PDvw*AIY&2qRrk(;z~#|0b!vUblJWW>*}R;W}Gi05%Afh28Yp1wxZH8EUf0Lfd8d zf`E~-#3v+WbtWZc-CT~Jc1c+PPygn@XK{N>T}u|CHJMuK?9X0WMKkT-tfegKk$)(l zdTzMgfVpM%HqgGSRG=1@0tRKu8rY4&!nKVzS zf@rqj8I~;=Otzq)im=#%sdFvF*?-uW1BJ$>X|3fIOtP+6jckDcx5#S!&LF|uToyuu z+&BQ!2<4Q`e-q5R6p4)9jm(5DU8%vrbT}R7E92>PUNLJUUcz)PLxt*>;BU9;EMAF~ zfm@W68u~~;p69y^5dEq-0U=Z{F+!1{I^`T8We=es)1p0^l8*%y82DU#sDDeE?0J*5 z`l6OY6?dQ#=cE^x3smS>pkl>h+#?om0U-YH*nl5|91qVwqY?{UABX-z+=8VNoE2Co zn%eJ1R*@_N;xQ_N6~NatRpaa-9od_;2}9wm3Buz8WQhC^F@*f4@(! zEH?Y6Fg}|+dahv9r_+tG=YO<4*^uE*dk=BUURjFX(KlODdw(H3?;Ndse= z$U@w@UNW;=!EdFvw(-_Zt`yvVdcv>*<|+~2psA-Nw3eBqECI`np_ zJ8{TXtatu!$nn*E<3~8;gx|CyhC`yC0SZQpL%>kceWEHkm zh0JuGvAYW-;R(}@U4JqSy z@LHt#cl-6`iWLgHt#v#6$_RQEj^6i; zmK90!FOlOJ{F^B8#g4C+_X0k?Y>b*m6@B~`T?9*-eK4?&U4LzN%|CKJv&W^#1yj0$ z$(GmxA^0|o5MNOMSh?yzG;&*{<)*)kSNPf=s^J;QRlBd}f&hMLu8mR1tvLS|JAU|9 z1;xcT-4|4-t6LjYD?^Ks>?|sEC|L~;$8z1dwTg>OZUYZM`UzTjSa@&U^Y>?%=_IlA zJ36+zbiZ_H{D13>2)MPV2gocdRzVQ&tWZ3$BtKdq3qRp9m4+8skN{0L>?G^C~uDW_I zuso_w#($}O>JNn#@FiAg9BK&MnI4iuh-Bn85{uBZDiacS)g%yz&lchb>JWR1RDktg zwUWYCa69*P;sQd%WT~bw9V_@+KJW3;>ToOZ6QTRXQMZzNA)kL=6$xz_d3l9Lk7Vpk zeoX999Nr*ErW6EFD8@qlh2p>>XucuI!ixyK%zu=}q92b*ya+P&16e@0KY)JcN-PbC z#ocP%z~yQBYJw5ZVB1=T@Uz}g|G~<@ufNsRnixocRGj1tc=Pt2Peg*yFArC?K@Y(9 zaMg4YtmzQ^fk;7)kfzL7I061a7Az?>@3Uw=D---n9t$=0beV`w# zxE|0yKM>aZswiATG442G84}|!X3l8;#D=oE4=`UM%er!H*~kkdE5Z_Rvs@Juo|2}Q zT~(n!iv~ZXS$UM#Ne_%B6iwm|dYhZB6MqTqI)k4oUli~h(v@&p526YZaRgvoSTrO` zE%uO*#m2HY140=emC{d7wPWh3UXvi8tVOgZId$c!@bBfRexG?NUHcGI9j#f$XWv8kI(c)D+Lb`9 zB%CVjB{0N5Z> zAZ%Y6U;}Ma`Cb;=jzb{9Nc7r&4`#0~ zPnw6ecGX9hsH*mvrBJS7Cg)1NHkJ6=NWs_U;k`DMdu@dMhFAoLfPaQVRuzX7g2e29 znE_{PhTii2h1bTSILp=DWM2m1@dz~nB+699 z5E>4T(DvSSun$XFvVWGSAVG7dr(OC3)R*+_c;9Z%?+p9HzI1~H?o1mV0pQw2+OJe^f*bXTfYnscvcj>#i^Pwc~eUG@)Y+#Hci49%~V zH$0w!fO&nwL8@w+df7hN_o*6YG~GN&)>q-=LDXHRU?%Y4gTNOCWI=*g?>IH^ zpMdj-Q-jCp6@RYs^}YE|y26fvAN>3UN=h_4mFo~ogmIytGTs|iPtWV-7Eu$5@}&u- zD$z`L!cqd8=IdR&tS}SiSqf9WPq1Xs*4|~ z0PoGfC^Pb=+a+D?(o4F|(HUp;C7p#ny7-h7(q)FgE2Nz?n$A7=Fvfkix)~08zUvxh)Y?}c{if(4I$@pu)j-Wz6kc4@cKNUQO+$M_eKg|aMra%b_m6iUj+`qfqTbc~56|1Dlkbim4Z)krqJqb;wPuhX3x5`fz9vld{;Ddic z2xr!aQ^+MZ*`btMa;0x$!Lc!4PuLJDJMOkwvXj5gkwMnQVajmF=>+!S1aE9y z&DnpO(u71j^9Eq*^15ReUWBo%+xe*P2{7j`wzq~8>Gm*48^oc#dKYEu2X zUW&LFv1BcZJN)zpN1?bBLUEO?9+6|zaDI;nVJeLHJ6Nm(I$=&u^2zsrH4zEk8N~gX{iSIHxYSA?AX6 z2K0oD*O);P@eWywIN+(^Huua_qU0}!rIm;uJ3#&tLSbQNZ)2vFF4K2MkH>x%JY7>8Z>#hR;IB^HZz!Ugnf4Y_wter1d%6lyFH*asR zh5US_I`#4sF!RP+JH5iU##?=vTg2^H>dWJjWU!+u;W9P~7p}1q ziDRqXONVwZo%IqPRstO^Iy?fUcWyi>oJ9Qm;KcQQP=%Jx%%~}79oli*eG-4XLEs?y zLRVpfSAIt*0*%RV6q{Xp(vM!J`NS1R@uw*i~JkD7tjc5MKMD?lQVA`ge=sif8f zcx-FrIslQP6}N9|fHW5fVp|af-r4`l_O_yHJJ5S~4HMQ@!kO@nm@3v^aHt$@D<`F~ zPeJeJIOkl^C9Z9sFZ#la+%SJGkQ^J*r;a&)Iv7~^oa36a4BZEj2?KH;4;gqO{)7H1xS>IBU_^(WTDl>RgOJ{mcJzOiTNUH}LxSGoZo)Nlu}s4ThZ_a!KD?zIAaLqGt=vFjWzPwn zWml{)PjF>?JroYM|HMqpB0#ouSkc{u6q=4(3wZu5g!|hUe%;L$j^$f)|C%klqeJ)4 z!M9bDieb@ER;z;ytFqodx|aCjIKzkuMd`9+X4 z^a1V}w-qJ~kn?}V>-laZH~h~3^7n`puMA5KOnHPxF)in@n&U-gySN%s`qq%6@s++m zQ(^5q(pxODo4YD($uj$G=9rjQz+#u~I(d22ZrrUEQIC!e+oUN>`EF9q1~R-64n^AJHi$SfJPW9R^Z~Un`s5p z4-ZJOK^}kdu(#>SI_TRl zrUBWtlJdJccEth0dMJcFYY6slOR;M!{bxwY@5O)KV3b;v)+0Z{CTh;1uJ}7}RZT(_ z*pl!A79{3;T@&mfF3L}y#R^{6Jy@+P=7N;b*tTQfwOrSvO~j1r5=PiDzqhVrQ@2}J z?{bpcx~@4zjo)*70`g>PG3htID&(;j^3k|yrjx}b*@=oS*Ta7)nx?W5&T`NZY zu068(&P+~zkOo-zqGl^Wv{s`Y5DIb(X^)irCz#5|1*=v%2ST4 z2q|5!)2wGSX2jzTn@73|-vwbf!QLNTlLvouCq1{zB#hq2~E9M8#JmkVs?@YCAmDC0>EHutl%mvrpf6_u=nlcOdHw%)R>$(HrHdp%($Utna0^?cbqx>G# zT$iLOWCJi|otcCnfProdp1JOzwCpNMVGuivC1shbEumAh#>HuqgWpz6$Q~o9u&=fb zM)FWc+Sah85$4LX3XD3A_;DAQ?a+S%@c&Omw#&y0dz|IjH)d;^V;i!l2F zX2>-mLMyGJw;wcvvb*CdU=KQ$b%UN**0U3Gov{J)nl0`k+>h%RJ??z+apiwcWEWQZ z>m8>AGLMZRcNRFV!yBlhwAS-Y&1qcAzpSzMJswBKH9`_jd^g3xG9L6mYlOLwJw}ND z@@LG@;_8ewE>>|35|Ma{s}N91-XR2|?7Q+o_iHAu%&_~HxPJbxnSNg39%A*O`N9cM z5qp-@-}gsui3r3s?+0eUlb(Nj{o&Mt7E&7^4)VuYvByW~o2pJ!yts0SD*0t0ih_;w zrNTmN9Tu{yZtLW6PjsQ@wz`lW$A>sAacnCx26hl8s6r9qo;kK1XOz;Tt?b}vYrts* zhtbw((N@1782MJWtJ14^aF8GE(S_Y`0KCYg(wnV@0BU=S;mUgoR?vUj2%NJ(rIu3& zsLiB-PTU|^?oU}WE8sxzT#44Xl1J(#xz1+n=9y+3Kaa64Cl$|Kdq1Mv zWK)X_!VwrrkYNZS6v}_^OV_q2q|9}-;=}R+WnH~=o!He?8E9>u>M9Y_<`7a>Ef&e! zlc%cyIN}>IKx~nS9mzmbRVkuqGzJlrZTKHzNp6OCtEOR@c!#;r^TS+}sLalxSH3cH zp0YW~qaq?o&a1V-kT*zT z%by!JNCeLRI)i_)JUfH0o*`izU7BTm$rMv2hFTd>ghln$W4wyJ;5q7wjUfSg49WR@705$5NL zx~G0kLo5=G0g?XvzCDep6nXiCuY{SYchek6I}~U01q;9_uLD4~;p)?cm+&kzLMh&h zP!LW%i<)0}C5{UCw@MlL(de#J_&Noi;!gn|J3Sy75^MC}FTb6>@AUvG>8jrGMe1Jy ze#93km_&b?AaBaLd68|d`N9H(M=3zhXc-bt{*U$QcOG#@!-RdXiknFI^a1tE!Qpe? zmv-Kl`T#8YhCNs81sHIB*@9Y^2@XW%Fxo}gMU3JtM*l+$S}!hg^VwdIi~u7}augx* zcr;s(0Tf`wz{WCvm7A7OFD$uWP^$P*3QL|0AXJ_eQaVFNBYJl9Q< z;ZK32S$g`*O7aWg5Pzk`T94$ zQ|8xu+i~6E0r(etXN5nq(?w5TQ-rsulfTUvLm&`HAV2{HB_l~J7zRY5(U3nQAV44x z6bJ$c1cCsJ00IF)AP5j65DWwYfgpe-kU)PBAR!n?3=aWfx(-2&2Z6p=$EtH*E5rMBC(r(Y(ovdBT6m zJKM;~8w;J27vHIqmt<-uZ`=n@UM)3G-gC~Lyf9Ked378=c~7H%^1^ch<=sdHMxGVesGqY?vFO$M zTX@NYqIb@76IJD&z|Q#V$0c7shP1Z|_A`ywOW@2$G9%J-zEJj~AO=RWpOk;puYmS* z5#RIc*`PX`H{O0qWlqE#6jeZC>j|afKQ2!W8-02|G10iG?`JyNUVHm^Y~#n!agl1! zdUE!9;DtXgiwuq1vi{7rSga059wb~=Grjn;C-fl7_%l{lr}3xdzfk|THTjC$xV+by z-;5M8f83Aa4`glfhlA2ql~aHIOou0J3?iNCua7)s@$K66S*Jjxgv4T$iMOtj!J0Czh&m@O_Y1vwRyj+Yep7r{nK2)QDuosx~l*9nn!zyCHdEX;>@3uJBhBZ zpZ@_KAlR#L^w06{Yij=!@>JL8QAZQ_KLd1k>f>*>@_&5FNPxQ#^pFy!Kax8RZ7Pb+ z<*ufrs$I)*hTB4u9$J4&j^V7D``tnT=+@Jl1t7cA$n9T|K8b9!wI;eR7y*<)tG(7R z^C*C3oDF#jpubcAZ8UfP*Z-6Jx)}qA-}G(~`=-5ufPWy+gyP{ld?sG!p(aodpruK$ zx&fWCmaa$lqSp5-K%{kr0O6bz2kJyBg;=-zNq) zW=V;EKS=)$$Zzm~tnnkN1?f8P4u3*crWWE7XILGK9IOh+gxCbqIbUAon?M;(pe4=u zasn|n?!1gA&>&H|K7qCZGIw@yChs^pERk_+iEjWT=hlA{b8&3Xm#d327^ohLb84MEq3zr|rz>?A*mqKcrqcs+jf4PPk=y-1Xg z*YpSyV&H$7lvO|^D9K3I0stDQ9tmnQbZ4$C37R-#FbP7C03Jj7nJvu8(>g+!DM7`r z6)Hja@@Oupm7p&ukV+k9(FoA90H?u0gD^p*N%FYL8*Kc<3yA#|?h6kCLk4&^c}Zq$ z-ha?&EDPkQOm~O)5axgBe~_!Cw-7x=JV6!<_V<6!ytsHW@Ckwj?D$53XaL7b%KHQ~g9TgTeZ3B5w;h`>aB*EGxVL}-Mw^hV&?=b!%d%;C{*|C%WHd@aC7f$H zZzQ%SKY8< z9`%2uF-#TI`yv7Juw?2X5nLWgCco`!WtQSIT7k3vMh!G9r~(+x&tF~F=7mEMB@6oI zGw&kdzc>&(7z+UV^%=r#h&V(W5LFA}t`-zCBN?RpXal>RUleq_UQi2N9hPq&AoNzG zgC&XlvSSNn{mui6B$DlT>c-%_SRH8>s3U((mf8mprbyKb#T z(}$yvAo>Lasms!9XjT5*EcPvueswmc?Kw@=>w_jqLw?M>8Uc4+gM63)9Ct$-)b(DXMvsHH%%1glp<0}-hZ#Lpk)^bfzr`*Er| zhXx+p?n+}Qu&O8=Vl5eBojo#COLhcBUrIQR#9c5zK7=`zn|>sE1)vWZsa(U|{7ROK z`WnMnp@fB@Udk?4HBJo+y6^PSt4q z%4P^bsGtYM>NOpn1;4HePlIP@tK*#3h>)Kr-7IR_sc_$muoI{*n%oubD#|yGbF9&| z?qQo&|D*xfY8t9mh9$6dH_KsbwyJ7uZRl-m9RW|a9_O2xt^4AQG}wM;VduZX$o!{L zJ@^|&Dq?$#)G;q3UH@m|XbFFozQTf~x56zajJRQ^m+tsE*oCB(O-(o&>8bIv81drx zvdu6H@a(&{fuG4Peb8S}h1{E=trxihhX`EXx)$^Z*{lopD-|VR+4}2NBac)+F`N0S zl%^YgTi_xzK%a^^3oq_8j~f6}<^8Q*!@3jp_rd00pUTq+KYt(LX9|BHzlyW6zM*F| z9gfOIL`t$`GWCpUIlCq@SU?~8Z#1wR zppS3KgL!1a*SB&()W)J^L(r}*h5LYxznjl&4pid>+7Gm0B9i4}LY9vxkKovY3;->evlws>Ou5=~ovM*)h1h$|JwA&*5G8Pa#E*aP_<-(?&$-16 zXW-L98=v`SbAX}m!?S5(*UG{l{p{`CM#&&Vu_#Dxtx$s4_*CEY`BUMFGyB{NeM{>u z|E~_LS7$7~r%-&4>QyC~!T0ou5J`cukn6AW-t#oio^n%J+|qyE^91cZW?~WnV(&S1 z7m0>^y@$4)8G?t_={wCqc8|kH1Qtv!G;tLodXQ-A>Md%;_BBAVt6ZSq+zG+-Q$M(m9EMKG_iNm zWM5QYGv1a|Hh6zuU*fIeSjc?yeS-u&`(Hycrv?u%v8e76nc1|miAtr(Qu>7kfR;4t zKo7(&9cX|Lp-stwR)S_9$^&m~T)UbP_um3dblrkb0a$tTI z$G2)~QhwI_5>4{6+nX5G2OUTbSn9Jh6&641Az2~$9)32)fl+>J4);DK$m_LMHV7E> zh!Sj)uvvm0$F#+YOb?!CHUUjrLXW0S;$oj}J@20UG4;&$kQmCB0s9WG_3Pn{<#P4} z=sB>}VMBkQrP6lyP&Z6&O?Gf&R);}5&sV1i|K7)yD|4PxS5@tAq$ooFo-+Rc~%-)T#aix|}98Ppm0Cc{uO zmE{?#K${1V6Xx_P&$}wmIzdI{dAAY4z=TwfXB>aP*QS2p4v=1p;0?-_5+kfi-w0o| zjiM(MFJ@?7u2vLnld8?Ok-21b6;Xq=3uWG864-AT1V*X=Vb5fX6-k~M$P7v3+1;+| zvy)D{2+w|zwt5_BrObjLsn_T+vjpq+@(~A=zl@4z^ub6qxjko#I>WdK=xfc!g06*Z z7ju7cA9SUN>K-U;1G3AlHJQplP5Je6s!j<=KB!mYCMs<(XO}rfNa6U%&g`i(^T8D}cBbVPiEo`!Rn&NB3*((_G2 z4Nhn>_99G&V#4#Hv1E9z8XCVdnOnJh`L#BRGP69WbCizkZujZH+xhUNq$s9oNf;c>hc zEzG`&hZk>1fmT{}2oCiYnKV6vvB!V7qq=iT>=UOv^hS0TtN~70 zk!6o>${XoG=#p(8;bb4jX_w@S-`BMXpb@juol6~O`W>xE?@t^fmvhE4Y0k`ZZUjq( z)L|5*L|RNHkZjkAqmCkg14f;D8@-(?(Lds*zXf`)c%Wu=_gxn--P{P9a8`e-7H{MA z$Dv6=nW&TsjTYa~l)%4ey>muiHr!Mht7MqeOYnL4+U$zH`x_YC761T%!e{^yJi;Id z0TB>^5fJ(T68IGaP7r_)e1qT!Az%=WfMTGt4rD|GNd=Z8AFu&}toCdUVpUiXVoiA$ z#xYf@d?Ks^RTZ`7h52D1OP+u4UT5-5Tg4s+GE@eFt?xkI16lMwkTK{6JgjSx_aVsg z+r<1MRfQTCeEo!c?O?hfqfb5@`(x_;Bx^&$@;KpbLnb~)*C{r1Q;v?SLc+h|hxxa0Ep82gE3xGkn`UHTo00M3;HKjIF@k>`$J`_meB!j8 zYw`Nh7B8A^@ft$l;;l9=ULSMuvX(AhAa?Q6Tkqn1DKB2Odhx=CFJ7p9@xtdXUZ{Za z;zclCnS=3aQy6cdhVeRw7;mJB@w&DcFHpvKJLVWK&Bu6A78$Qi$#|KejF-;Jcm=wQ z7gx-9H51KvJ-!+5oX&rEJ@$+@8PIq!4~=)9(Rj5{(s(xw(|CV-8ZVL5ctNWguMpOF z_0ZOM)$gcf81a$BPp@Ubu+I3v)bPxRl2W(>z|#pvTKIJziwi-!$2YIoCkXIH7d09@#OPdOLg<8l<91MAlX2?sL z4S9WX$ZL;>yrF)`D@};JeTv8{4T-!yOXSVViM%pVX65v+h5sf;0pFeCdCI6+_p0Sv*D3KW8Af-?dHV@QF^9SZ0ga%=zM z5+KC(BbQV)HAYnO)Yu_vw$V*BmKIL38%7F3hr}4UfW7G;ay2G_z*XrDlml0`_Xlu| ziJp@dVd{VN$3xoJWh@_ha0He9nuIoN>=9-~_x3S{Tr{Z$F-_yym|xCaXp-u|Ng249 z)8qPIQ}1EmLy%%wuxh$7iSGlWCob-8%$fL0-q_~lFTJsS^QGH1ePb$6+WL(F0Nn!| zyZA;1j(y$P)bP;It2eT1q9PP>d{0u9+NR=|X0U&r7{{DH6<*^Q+TV9o%j1~i!)~aE zGar5Wwq-saP&sxPi*L&@&65bf9P>EN>+b(ss&2D6Ci%7K=L3M}Sc3RQ`8l@Vi~)4) z1W(S;G4<_dMaROdc|P!|%F?k2GXXFiyQ{o!ZmKhi`J;}xIu?ge^5I0lJF(|F=DJ=h znkj$M!r4x@W_#hy&O~sAvSH+eO!h=d7mCD)BFY()5mE<_4b1mQ_gAyj(~ zNiJOlk4;w}97FUnaQr2X!@Isic7wxe#58{7hq};3GB(r<$nCVOLJapW^wAkNmKX-Ml17YR%M$J!DKq$L0VfrV%QAp|EN1eGz!5Q2XQ zeiA?+5C{Z9fDkwY2|~aSPze--KqyEE5RL#L5v+013;r&SiycJgl?;>md(wNqHdX{)mXVhk2O4vSL-ld6=+Bn=DuTMi1-1smSZc4yYam zM8IW7rRRE>?)9)kA=Am#9#+^MCeDAKa1Y}|pB|osv(#uiKh@$}%Tc4`X-=dA+2n`i zD@>tL8U@oNIjrCj374j8m2lrhYfKTd1PgajMNwlJ4~yoEY-U2P5f}Z2)G~7>1)>m+ zSRRzy7A5cYMgYVZ76D$DIa{Fb0;`pn#-5#H@*_kbALntshC_;(UBQ{yPJVyPRpz{U zhLoGwTl*N=#N_rOwuv2V`c6ihqSu=k^wuGq*xMA3II)NH=Ml+?$$*8-a$>ya^?-9? zr8L_QBOu&~VO&=J--&T*0ixJPA!#-BfsUV8!-n1c0sJJyI|L*jqLqn>T6)h}1AjMvE^RlN?MQ0M9aeiRE2cqRG4gc1`X z-hL{|c2Z!xRW}GLD~dv;*uF!A;@1%bVHPLKK)N1Xy|XTDgUm+b7E3te?i3T4EJ^`m z65%cMEE~w9V-7Sh#>Zgaxe(N&J}4FA=RO)@bX?hx$5<;(=2!t_pg?~is+gXyFybTp ze@+!^OUJsG6F~r20{&#uh}y^$WNjn4uwn)g67%@Ub@}lep%n`pc`vOPAhep2T?xH; z=|@bmm_Z~OTlR$haZ8~QQ^8t^u$cC6fz9Qn%$l65kfG;MSqv|^_Ie;Oiz(R4SD9I? zFXC6T*w+51D&Wo@L;ZhQOxJLALig5BtY*5jm{eq1YB8E-?rJf{3V#>hCW}hRKZ?QM zl8?67MlHp0RqOq5i~Ua_a_QY-kMTkGEw*R$Pq-NV@RPV0zG9GzVf1lQE|#0eoxF3g zNVD^#i;;d_N?j~Z``qhd%D+e6I*1B^pg{l)UTp7mbTr0`88m-_6z0X^o5M(YG5&>z zUjyO07wh2Os-}+XwNrl!1hP}P(L9`AjCwNb2@Q$`|HVEXoXx3;#?lCkmE=HD(1e`4 z5sW#rXyRK=_cQo#FxGT1c8!=toQASjrk^m@Lj!GLj86$X!x+y7d=6vWIQSpN2uU65 z>1vA?pkIRZN{}JP7!NiqRZf1Bg1y?->f*1yG;}oBF=I!=@kddgU~5Cjn6cQ-kdWz1M9(lVAEpPPSR$7QU-X9icES(PneVQWzo z3;OzbUdsOiXl5*e3i+NHiwtep6TfU3croWm+wB8xmo4HeXKdBIK_7(B8ABpqUGy8z zSX=p5yf_B^dk#pKevIjkLx9E<6=bEfpt1gQX5w)|V`$wf13p7z`mqX8gkgwGGRB6E zoBC(*?a_Z&Vf4ZBP#UW)>@pX72GOl4GJm&zUB+N^@1`+Y^E1&I|0S~gH0F-N3u{tKy+bbS8jA~aD%L<;->>L5Cle$NT3BN3W6wz!G01zAP@u)1PFqJ0D=%82!aq0 z5d=XHgaBa)5`+Lm5ST$4GF43nN9nMU&ls#0z(Rj6fbGgu0t1-oNAs+}0j$XZY!D2< zVrTF>XSCKY1lTzQn7$Du)S&|%GEf_|nJB<^Qh+JxMnwhKxquYOrr{SykgykEEdXIJ z3Jt?#qYIoYgBTsl<*SMAGVW_aN3!JuZ0-ZB9*Dnx5HMbRNw#n{cDZ20_qT_b5n&r| zA$5NOHZrYq46tvxwkx&Nw(!4%sD%}KlX3yau%b ztf}5A(U)*aSO(Tqhb?x}+YIbF^>Zu%GSCtVuSe3r^b$x1uNUiW^J`>rLAvt5PUe9n z=YiqS1Itz?2MqfDS=0tvhVg0p?%~_gz!?t?57DU|)@O_u7+(?>8XAImiaEptc>jOP z5HKYWNd{Z<(0b>-&`P>CiWF%SVP7RwTQ!dO_5Od9n;g$z z4AtuR3`SsB3VqJ=;^@iHV4PrAS}{baOVPqP7`X{^?&zF-jZ>yfS}PJ^>_o8nO`l?t zL*tR&U|log$j}>Xts@J8R$+dFVc}x?9$%nveJx@t4~x~~D?eu6HV0h;qhqNdL8qLB z)$!RQN$6mi=wLelBMO3i8>xRkkOqs+1}lv}hR5ARMhO&R&f7Ag2EvclV%7VhK*7{v z9pkUa(qcUaHsV8z^*IX#0iDIV9AFCAl3A=yWxyfpu!0^CS**<&A;@SfR&fL!;7Kgj zHuj1tEY@tSm&S#_Vm-PYGWP^3)`a>`9~jDd2?Kv>5tFbEx|6gQ z?FC^Sy(i4NWd5o8jy_0`3LH=r#uR4TQz2?roCGXS1;J2Zt97H?srFx{ep06r-d7lc z|D02We(Z?W-Ul~M9HD9s9SrDMi%WN!{tytp-NJOdg{?mvDPLMX;lhx1fB~b8abewY zVe&*+Bo~$_7q;&UP=9}qcORal3!9E$H9aA4c^B3&Muh+`?C*f)Z@jS1 zfeICSg1i9xadh=q19qjI!UjwWi!(YUVX-?9t`_WI)5}gRh<%u`P6At=7{^p}hb!|1 zpB%Y5kaJ4z-(ArJW5xh|c&KuRuoo^=Y*$IGNMm+P4y6{aKM;R3ml;=J#JS@qjqVBy z48h_N-&kP%HK8jD%!jP9(tk29Su(xJG4=aP6e=Y<9BY-x;xrDaaSS)|;G1A&1xsa_ zME+K5&x86POm4EwtFWoQ- z_DP}x0a|&fOWPEzhE$~k4Q+RM3*;^O?0iO!JuD5n+nsjQBKqm~|4qwm=M&V4w>jS^;&5{Cb$P&p-x zK_x8c(@2BC`Q4)2)aI992rXfB(q&AyOIYL@f&UT)lZMmm<$u`-_EuWPEE7iJ1>o74 zF!Z{)BxHXfh)Y7+J2+v>p3WAXu;~Y2v=cTK0RMR>4DO<5?_hM|Tof8+yZF|WKKK)6 zatnI96IM3H8z^iMt0GuM>EB)1v&lOxZWiZszyi3Wt)NF?rapBIXtys*NDA{$bikyr ze)V2{D`3A51uFEZ>6gN8n8FD2>Lh$q82NvQ;3Wzmrqa}`;1e@IMnQOc8j&1t>J%rFMVe%-(0_Uv5PwI(CbTm{C}^rGnqRz=-S zy)aNsLwkyranB-qs)jI(=Pw6kU07cvLM}@UF+q<6%_WFoi*IrBh7{f$imYN-<*tov z5ymi|r@oeNV_3tQ)FS?XpaVpnD2ogmdBlI{eD;xHOFBj5BzS2{bKLEIGK_8l55*U# zL%^9xpY-B|{ta{sO_vLdoeRw8@E{2o#S2Vdf^vl(8sqZB3N<7HD?LBzVFniSy$d(T z{`e{pBuxXO7=tsREC0pqCKrbX!GYmk9R93-83%R=6&|6UayJEyP>1TkI_tn_@Zx_J z#P-*AV3ar=A(Zx;qxyjnWB}*r=1m5Q^OPKD@CSmi`i%}aJQ)NduJdtFKd2xcg6+N5 zh*@UEvqV2Rny)z+KZ{^4?UqRR7r}Z-l$RQCB`srvg; zq`aS(8$mF>>9SBh>X0Rvr6m~tobG?P1Z#8&_9p0P%aNeC42*4EmEWEf5Su&m%+g>J z3~LiC@dY|K!47eP5v@c=Cm31(S6FN@g(n!O|5xb0p6BQj4Cg195rq|?V75uA+XSsp zFs{6U0i6^<=EMTpGE=atZ|kIUCE z3_1)pv9C6J3GMa=8)^{NOY0WI0i>5IVh{$flKRl%yhG zg-614MT482&B?ekAK1wvKvMLXFh#IH`lQJOZXhTN7Y&CDnlwY;3FE~R=924gF3Owm z1CaA_8HMJ~kuZ;TNxz+Ge*b8KgB2i$^!PhysrU$)P6I^rQF?SoXBU5!)=-!a3)Fj0 z0;a(ar5XJSGh+r9b1G_$eBFiSq$*z$Mb5qo&4mpxnIb1&dcxqJ@>h~!A0^tx`718( zal#0(*_(5c&hH4w0P5>P>b#ij2}Zs-|4cca-aL9oo1z~Mh}Cl5yx>fW55pA=8`zr} z5NxqL{wNPnip%t8fYyH;tyP5)AA>N|FkV2EMcSX&V$KzbnO~&$Yv1{uY-}C2f|KC#5QCdoIFGurl#e-ZW@VTx&2b#*>3R?4trhGEgXhV$pGRojKzw? zVR%$)E)GNeij2dshg*3ZhKKe7au@;$%p^z8I@)$}*j=P6>Vkj%2r!0_5isXPi4xYK z&PCxfN-D&_T67rf6~fuHYOtN&%Uv8*>nvKT=dU7twZr($RE-HcMmhZe2R+sc%!rLH2fL-%l{Ncb|4Q_7>RN`9{qbsdr3ioY)D`O#wG==>kj?A{eDR58 zr!Mc-&%0Grk^xjy`I+z5ytySG=eo?B5bSVQ2U5Od#v8>`zMZKQK zo)AC&JrP@iiy(OV1Q)s;oI3wMY*cVbG$bpy)~du*6<;c{it%3@OAc4CEPdfkkQQd> zTk70;l@pE(o4kz)`%|uQ7Ov^T4;L={Ei&7krmKHV%{-||V<;EJIGq#Xjr=>qrFRz< zq;zW_Fk>XR*E#p8xLh&z&Hv<8ipP*!EdhhM;!BBHTzmAb{gl}xw%Q&E2k=TEtSJ-0n!;&0y^e@^N%nB;1CVC916 zu8O{I?NQ;mGs|W0KCX5|(py9TQLRfBhixug0rVuyYarTY~?I<*o9RV9oh)Y-s2k zIxj>|8nvr)HPC0gOfb(CLG3rC?ju6dPx$Dkp3CDi=+W|fn0?O`t;6Zc=lWht5ojoe z0uk_Y1@b})l>J<@FM~f2pT&~*&5$WeqTfx`a|B)cpj_rm26HUFQVzY! z&R}`<%6QO)gsy9*k$xb%N50%Z%ND6d1sE(F@j-3Zb35`pM)|Ht8M zd3l^2(M1>F3dw#aOLVEGgeFnIFxY=!HFf|Q9e%%C2vAe~=wswqWN?S^I4OVf_5G399mgJGz2MjL5a6IoByWV*u$GdV;&}xF0yKE($zetO^DFuiP@5tO4s~X1^GKGxt5#N6`Tx_~v3H9oC{3&SX)NlNNnoGF$**)I?u#?EebgX6g zd@f~%cSukdIRmKjyJ*4`ygid&jXpGtAqyu3^PVN-Yu%^1G8*(>#9Hlh=BmrhL+tnc z{Y$Xa%lEy0Y>;*B=V2O7(%0*lF-iK)`}QH9bxGY0>AMFejHSdwAhUn$wyFvDU{t`m z#^-ge@FtkO0^}|Y2ZKh)QMC&4+I87`aWYRFjJ~1bjRBAp6<-+(e$+Zaw2Pwhd^NHxt`FucsJ=c zU;mW*+^Bo$`|exzFx~Le+~yVtVR(8PC+#X)krXkGTN;(O!TDyF$INIpa=-PjEoe)R8kNb!>%Ha!S z$jS?rFQSOKlF-!A0BO5gy+=bjYrEF9UHe6Mz#++W+eNWjfxzvGXsCvW+l7tWB{&HB z7+u#3TkLjGU()1KA7?;y{37Y?5|5$Bd7nLZx|)siKI;jSFeBl;jnC?wSlo4_OQnF`_4c&x<@V0O?hu3`x8DhzwX+k07&D-c zc{1MSLObPvcc|HB1K)83s zf}niw!n2Sb;=2}qtH=;rzKfnAvi+RzioOSfcv%VEJ}FeEkv;MD|kUrNOzz>A($vDfQ>m-7Fq7=u;TR)k9r+{kxY!dK_PTQ-p@ zWH}nqbHM*co;hIt)zDkhBS--;U|;MUye4LyEu$NM@cJc>igtTGEiD9Fw%~WlG|+V- zuKq z4CA#C<8_A!H!0F#^6$|BF_o)c`F1=?b`MQ?zMFsPUuRker&4ef_|g^HI9@ZMSIzON z@T`fBR|J)3K)k!I|3Z%!^u;$okuom;oTjU*rgA%wnjtUr2Yi#%QPCuH3|4B`B7hg8 zg1EKZ9vx5xMul*am;2SGyacgii_~87`VxA#(BuUK0Waa?H3~=YJIOiS_n9*+(gfFZJDa@;%1YP%!F)xuC*D3+Xyj)~n za>P;P>NI~lL=PsiS&`Db6z*!x{PAhK4!Y)5AdYgme+Ihb)bF|FhBN1dot*nP=5$UM zs+R}rWIU~#)?YAgIP_A$=7a~L*SthT^vZt${z{|N{1JRmi(WL})v-7&oZI2()wP1; zqZc6}K@sWIbi~3n!;?s|`xGX!RCTKKN_k%mgwMwXGKGCt^?MVWUPy6DJY1b#`6@mN zs27tAbVI$!Be)s$@(N>@)a!bYj$`UYa%K~@?ki85fK;#6sGG!J`XX5M>L*Z84Xl4& zM66y$IYF`J_c#?Cu3oWX?4%ZpVL@nY8W*MbjFibJ2|i9GGks z*^Z%XijY6fWsl*tmF_r~!PjdHU-b1ls@wc}{cHSQC>91U(3tiDLtGlXXq&cr&|oia zf<)L0?NHHN`(dxARMxXT%{3|ZnhAg4LAY5_NPl=dG6se@bczdy>S$omm%VDL0OG8TdBoVfPBNkR%DoYlIHlqX6T**iN-!-V0&o3Gb+0&3dm@D=qH5@=*z> z!(RDb%zQ7i$!IM0y~5$gNBq-ml~ljiW2vGABa4`CV&J7&Q(YW2@Z}%}zP>{|Q?NDI z7GDfsz<3tR8op+6Gn)+9?{$Cp5-c2!VD7`F-~~l6W&LO?V~)-kU$MV15jSdlwKcx* z#y8^lGL-%iEYRc2%~<&Oig|xelRcYWDXA#{%85QZV-HbiAj#KKzIp?O`*zjj3>eHW zU!YAO44C7yY|xGcj0cd;X2n+8=X|Zh>x!$w;9sH-=xK;?&zHgH>j!_-UIBl;l-_d| z>553a)FgwQl#UEea~r$-ker6TfQVdd?=63|Ao_3gqA!yjirk-kdVj)BEDnT}w2dp) zsg(yn91zz*sjZ}8#mAs96sE8FgV}5PI*tG!K;OS(oaX^}VQryIM@m3^)R!t}&lI56 zD6Aq9iy%E`NIKepF&b+1HKo#j$<-HXa!^vwWN}y!x$)(cW+LdK^>uEtJ`e!&;X(t1 zUu#G1x@wrNb!gyWFtNt*^#wXJ`E0tlty=I|#EX47pInIWCjL(}f3mMQBkV2v0x!m$ zoaO_WU_`pIe%)Dd(A){L?AB$?=M?vRh7css?MqX;ah!G0k30>PZ21L$u3(JQBjo-q zz*~NFi0{jy-~>qDS6tuM8|@?S`_lM*6&~iOCtMU6l6F}cxPKZ=5HnPOJ;VXO{=c|T zmBFuYJ13mcYyQD=;a71(>Z0LSijkJ!@JqOQ0mQG(an?utq8w*G@vF_e7Y^b<`p?C$ zDbkQdsEg;Y#_>!2$cFHLfBfpce2|`pwa71Qw&#=l;^JbLV4y}xvr=;qQGOvf9;UnU zYi{vJO7X6j-+jQCUnz}H<`=51fdfHEM_yI70IvBJ-5YVXVQaq+-1(&?U0U$-YxpPa z7xc?M~r)mChA^zq!)xPOt!On@j5V zua~kK7tXWZjPhT5r!lSv5P*l0jH&*M`Ww87oohzzAtSz&oBwOJv>4>FOF$=;&8_B9 z;sTE*RE+2X%r^iKX=#EB=pqmVW?)z_2{9A{F&KvS0}@CONDx3E2oMAi0tZ0|s00W? zkPxH<3c?`>3*iWVmd=(An64CL(0+_}HX&%^G~)P1eJDr%1;jTX|9UUVfw+%A+Q6fn z1WXV}LrY16kOLCFG3wI(_eWni%<>L6Vtvk5Hn|&Kn7x-~br=P*w-#>BP}xtLH^ng) z_u&jM9%bzV`~mL7n@qh&lQDq88@U`7LE_d*@u;cWG zkN=J}e{)ht#G7*xQH*v$7Yjg%O!Pb#%Rs`u`z2k_Syf2GgUxD$%gNSoF1vk=?w4bX zHMIQY{!!_FZQQ7$LjkV*uYJm{>jMRUa;Jl00|e$OmW_7tti^vs=#~#KmjL}xvQD}m zNTFO|5@c*!qYto{6I-Cx=!(7@!yve?lU$3(oIUsn-YW&{V~(^oV(vh#@>amyQ-BF@ zVnOwbhExN|@02+dhCcFVkp@=goN`EVSDZ6M!I7JPsb(&q9QyUfbTbDanAtV}&YUgb z%vDeplQAQLeic^`{dOW?LS?+HkqrNtg8&r$8@GT2&0PqL;ZE!WknYk!fG3NjcbCve zMw{yx1V)J7ooLpW0K6VJMGw>5ZI46!xb9ffoECTkZqpL{GcU4vTBqhZ6!~KEQO!M- zYK|#?qxNIyZM(uFF~&yQZUm*b_f&aF!T@<&>uk+k+nQr71NLBm!FSHw`vo4>-p=6q zsLO*+g;c1{Un^Rn+xz9f802`r#k&0>Wpjv*K5iS7ebLWluGAFh*y2rPf!T6M?c78# zV2epwj>XlkvC350G()0Jiycb!9K2hW7Gbu3g9?hHMR$QaY$VxD$ngdG0D4Z~RVonU z>U_?)Yg*V>)k{`Z*a?&V{~`?NjSbglbPxc{gAdmIdCnLR$e&;Y4`t~xzZ;;R6AW$y zdtYvT>;pS8Ih#!>HvOU(E$ef{(kOpkj5Xb#17o-VJNQ%e8-Sha0lJM00=nA3PU!J} zi2OolD8Kf%S6>5%9g8v#Sb@&XMSDO3X*#25UREB6y05QkeN!Nx`PY-Kw3R8~EmL@T z>UwR^nWi-G_6D6V4f62NsgRIv*NubpcBo%!kf~OmR{#Ig2%QT99gxs<)&j~n@rwAE z(5(?E5Ix5|ZHd)m{CyWn*u7sup<*e2rt(ZCk@5l;FGar4-A}ERL)^3hPX1apf}y}O zbfg2&Oeyl)(9rhmYN!g#QVf!yS`2>3-?uqJk^B7&1h=B@rQwA!38xI<& z5O`~#a$DR$1yzXy70HGUR7mI!RHz_5P&t75Km{ZM1eG#02rA@_A*i@AiJ+pAH6y6N zA&;Q)j!1$EolyxY(F7AzxSLH-@nk$fh4h4i3SmPED$mF%sL&y*ppsOrpu*q4f{O1m z3o3-g7F0->Tu^zFctM2@`URDLbP)y>o~0O6yc%RsAuh|HLby1C$`cd~D)bLEsN~Hx zsBkjcpyJDPg9^O?2NgnX98_KDEOfAyzGMt z&EyX%NfZz&oC`sy_#X$MLP-=tg%D{7mFEK@RH%-LPzf6rp~9bJgo-bJ!x1W!<|9;y z9g$FZX-YzcLO}_YELjN^KE)+ee3zI|p)NF`Lb}|9${V8-D)dTEs00a6sBj=dq2hfQ zg$fBt3Kc?xDO4Vir%<6&q(UWMszQY`!3q`MVk=arhF7Sd*qfz&U~^nG(Hc$t%1Mi& zrBt0SNDxyPU@BV6pZqj`7NNIv&PGqME?Pn%QLocWRCNvF9eM~=S2AJr#*7w_Oj=|E z&QwYcVUa&NEwbj(GSQ=zNIhDIJz7V)N6WxR3#5FsAj3oZXx*FLN9M-{?MEAnNxGwm zLZFOP{}Ix9P{R~mSUQ6QsQ1yQKarLab?gwT-*wOG_4)`j?V6rW&SY;ay!Ztq5<& zJEqmK8~w6Nre(Q*dveOOj(3>H9)pYrGk}c7F}OA$PPUddwGcP8EQX^bx3;W^pV6r` zh{5A=5>C!LzUvi_xtpB;z*;#5e+?L{m2ChFAgl!>tVM7Wklk_12o#hu01#hF1x_Y$n$KZ5gG| zst-z7!zte?=!GfDYj$0IZwhW384cB=22F8<8@(-L&?wI-q)E7&QPd-@6=Ni39#fyD z7RiDE108ONiYNl=xf1CGY<1>DlAC5Cmp)Pc4u9a$=g{NI4Z--(r)@sh5plZ{HY9zb zIX}qJTTfMg^{ivzSN>p+32HO9(D%{!T-X?ho=M7c^YO;+>G@ywLiZHe&#fRh^3ELp zf*Ju$xTkM33}L5^@W#MkUoM!_t-2f=Q1WyGR^GR#+W<0NfVvGG4-?dFaDW*|4s}y3 zBZEuSt)K!wk5M;3qi*n|8pcl}W-_*CvZ-4qqJWWqPu;Sw0n(QcSl!4xLd|~{HqTB9 z-2b!p{gwU!g23aMblv(>ylSg6KQ9`4ZyV-Y_3MUXCU7CYRSuP}i?N;UuHJ@WfjOUQHRPL>~r113}!SVOTT_VNPz(lIjS5`*H^4saQtr8c_iD(SLJ%yPHslSA0@y z%HGUoZr}yL6bz?nB=}>`Y7oP%w^cn_jyI@~zGoh9FeZ6#7o3rwwpIINY*hi+p7=G9 zw>R(S@>I5K8(!tc!0E#ua_chlxd6+@Hkr@yGxKS=0=mC8qCA9MpIrqpu2$`JN*@M) zA@cZDE$HllzP--r!lIHzFM+lp+BV@_y{tTSdj@9nCaTR_3DTn8&6^1^uA3eXNP~S* z-F*1Ng2D4HcjZl@1<1Q(5Rvi)IbmeUqC0c7H^Hfi=zg$;&g>I86o5iPccFN$Vh7v1 z;Tz>!@wV2vKQB(2aqa=veA^=2oQcYRDhd*uP0l<%8wDhwUn*4hjkd3AyLsfas@l#q zytN5CN(R3T!dYi?2yzyF%h9r8`%lJZXB@5o+AB&#t5!Z+nBSZD9SVgmWcZ=blj`gesOD`>yvPhzM&C)-&jx7pgnpqt0~aF0Qfhf zfMj6WY(*sIiVDoGyiWE_!72iW`QrqAE4B^bNCjwuny(F6+*q*CdfCur42gcjxI{?B zDXLEgxF|-!LrWh$K+h;jVYs4ytYk_Bm+7pXfZIL-g#Fcn8x%O$PXH?+e7}b4C&=S~ zqb?%`?AwfTG8_%Z??UTEtXl-`rHHL=a!V_hSuYp3FGk&1f|~CkZ$ICl`S;Bj!$B-J zuYn6tX+7(0NTgflpe#^uPkWs}p>o!9m%CMJ&IK2J;A)lOuXEUDl|~hRgF7a$SY?6$ zK^7Fm>Y>5a0A#DO>C%KW1Fp{eo2p+GZ&UIK5Ds=7Hl>G+I528TG84jWcmz#3ex#|x zOljRjI5g|Wl!2#0+QXDX@(8E*0GQJFOyc@oN(xZIsXV}?JRU)spQQ|NOt^hRu#_4u zeq#X+E9KL#LHcl?7Y=cMH6vy1choZ??N^=XCJf1+x4seP>r^BAZd4>#8 z`dwcm7eAErMt59^L+BeIs=6Ld!&Cm;;u#(Lcb009s31)IK7Z1J`r%y7*-zFUNxjKW zZY2;W`>p$=%pFdYsQP5xB;sz5I-kUq+dUeeZ0915U>&?8pSF>I6uaoKMx2t%WSn0H znLUS8oI8B$>(ev+hN=3t#0~z_Y51qI-AkNROL6l9#LY*w@q+_Wq+80f>6Y19-Qc2~ zxB?`==DEeD(G$1zD8AAh5*7AGj-!=rv& zysNuUA1$t_@tD6o-R7>5zrZu(~e_ApL=i#;mz0az{0ig7(s zIl;xaYhQGwAY1Q>EIa^6X>@pFb}?mcc7j{zG6;-da6lU6K#ZdpgyH!CA`l1!0fgX$ zMSu`62!ap^f)F4G0Rkfkf)J1hp$IqDRdo)or`ui5_Nn=Q#;1up@W)+pq2Pmawh;9D zA0p|0P228=V~TmfPlwdf9&d}(cf7ml;Wo87foxd)O9?e&!1wh_3S=E44Xm?ENHAHZ zV&72GoaC@b0lV)8b$yRPPt_Gk1fu$@l;x_G%w=btdDitkj)H6&)4K}afN?;-i#+9k zeojD?5U{>~sbY27dlYv!t{kZhqcPTmoMA>{@>aq=sjJwKg4$Nj=jX=wXrurx;$y3} zD(-`RV{<=+M1TS$T41trqHkcG`*UMkI$lz6?maT6k$6os#_VPEieBC^j>Pj28BNDW zp?Gfl3W_cDlh}{RC2oZ9fnd;xA$GIC5u^LWRk}TYl+ZA3e3~OC!XhREJ?)J2m=5HR zk&OalS{96n@Kqtu>au)p>c$M_9LYEuyjGDr*VIS_QC0in$uHnVM83M zbDcVWdUgeakH`{$L#ku&9S*boqSs^d`zEq--|eufQ}j=ra5}u&t>Y!mEI=wP4>c3Q1vFtPC>{ofV75q6Lgc6hO!NMWbibxF)=ulWVbuoLeaSFF60 zK5^&j!uu%C#X^U~&hW{5qOM@061#I(9yK0+x8>6)!RJp}@T?U2sc(${5=H{te((pc zIDW@MIo6T&Sm)`#zcm$QjLSW3J&RUG3`?VX>M`9@pa`fBuX~DQ_hj9&2e^A8t?oG& zn+N-0q&m5yJJvdKZBwRCU&`}obBb|9N`?@`d6Lc*uT37?3GEFCC+ zr0yt(PipvuLjxfJX8{fzfHvuGj;5~obkO3HYbGPRF+N4i__Xy%%H#0(wC`#i`Osdc zMn18;TF3ZAaAC=(2XRBlt0IYAnjJ7dDtHWq4VG8G=Qg)lY_hG{c58P(h=e!nvVv8q4jHS{lH6*+P~wXZgUrdV7A~@>Jx;@xR?v$=RxvTgXA|p2s6;>UA*|EP z)(WuDO@Z_%sCFJ?6rlrKk@@9FhLCoPPyetVQZlCug3v@)WT#h0OrR<8G-LPv+2r?>gF|H;W{(3A{J$!>E*S7L#SfPXnfhN zHN6`MC6QUV?*WpNzvWA{;Cv}?FF8?PigRs|PRCLqN10AYfKnc)>5G4V$1kWPvqWrZ zXvDO@V#L+zp^znKPPLjtw>n(iFRWa$?Bov&7Rv?opo|Hmc=+n0DB}ge$_OOlt1p=b zQxGTgl=p`<(R0O>4!ir*wJQKur?t_~5)P@}hWiuv;b0*@5RZ0zth{!?mF|usmDQGl zl+#J2E_oRzH8?$dOAYpaT`UbkDQm2QAcv154R%unk-mCAMEuM5n%hB#9`lwNw~dYM zF;2ShGw#<9XuN72+4OE_VMOu4%>@-1TDQEj$k*sv;>$;4Ws+GC^tR-JZaG-|MAfj? z&c*psC(8f+YMf^jEtS9_fBJPWfz!zZu2hel8cyIKI)O9YgP2c$;1=l3apjeI_NwDc zf!lA#>p-1}%UKIp)dZCL+1VX8f8?Hj6r(S_Hr_=W5gl9iQR;gE zq6)Wxod)^*549kGn8rldc1YO9GcRK$WvH+%lBeqH?)&-aP)LVu4Kly49-oG0dsWC( zg)VDx5#X`i=*G6>3=vckkZoc^KpV0xQTcOZn}lTBup$OZwvCo-!|5X7$up-`*ti`kXHnh<*p+nVZfFJSlv6=Z?hFx(O*A~D%fjQ=&~#z7 zQ7X@&*=@ZU)mUd$6zdjwLhJqx7GE3 zw?x+=h^z!n`KezG)G^<+PBr2q2onZl9f+f7Xt?Qz$z`tbEG(qlCCP^eOu2Q}!D{X7Kf?G4?5# zMGQzp+oN?@l@R>Aea(*I@LL6?^+2_Mj{&bOlAFy!>0*%ez?h&s!QyS*US)wOXbj6v ze(6x*7GmE}FnM)v;7|oL>@OS&_}WSm;g=}F37a63%CmE*_;V;I1LCDaEx(_Im(#Vn zJ5*K&-|H(-)fxP(5T(GZOI8B**eY)7!F+JC94ZJ5i@!IN4^cX#Lr9OLR5Hka|A334 zf5QJ{L}Wz5QeJaL;<8SlU_u+RWp)5|S((^1MazIkYeP?=sM+-@11A;5lI$;{s4&_v z&=~r(im7$0O%bQ5RoxJW(Z5?MpVlfl98-`6=7aTdR9>BBL$;$Nw}l(ISF;|U=*#CmvHk&7%(RS^+AN){&1rF(r~z=fCfs{ z9F!{dp~*z4^hK$93m->+N>$xJ)tJ>sGo^BXp!yHPS)e^frIMvmIm79vN|lRO$ojiJ z#BaIf(JNIz%P^E?siZ&@3&hr}#*WqMbMvT3j~6eR5MSge7FcvO19TuDl`?_>f>g7| zE84z`o0(b}Ar>AwQdzk{oPe5sOjNG+MQ@x0LLQ{v?o!cNA2QB-ssRHUMkHY^KI zg<2WRP-;BFW~k-EDYLkZs8vfseiakhu-3IM}T-6QyclBEL7g z4~P{4WlErOHqPpQNiC_a-aWx1-%zX0Laoikin59Zsqcqd%w8C)h2*%nUq(@uU-At? z?h3k_2CEYLRFBIPRlKm{tJ9X7nx)3@%B(?B3;FY-Mz&XG&0JqNr!YYFbv(l}7OSnR z=wdHcxK&kDl|k4t))UlcVg)r(VqX%#$Iv_cPEa5=zh|Os3@Y0#YqRrix2Tml+)kufDoYGGjbacjH1pT8;fED` z>WEL2?iEQ)R`kI^iz;t8?0Ql%dj67DA&i|nDYLXXIJuP9-uAit-%63(KzKm`WCC2S z(M+3RYS#gO7(?3xkM5(ZR@z~L4y{9YgFns6Osv9JJM)T~SY3FyU9{hXRf+G9gSf1} z!ixT`CE&B(a>zb)SHSn27v-jr*1Rifny4UD?r{w@Ke>QA5_a+CtRkV=1eh}J4xTT6CHurqd^A8Vm^6am||ksO$|g=sYcJHH<1QRq?e z17U-Eg?f~D5yHGOq^Q+)+tK`+-OZJQeL}9)TCiyn zl|F$)o;YabCRF{T&CB~1Qr|(5O^)=)>4Z>!3>bN^51`ybk;+@x4iELq>+Y}WbOltC zX>J%mGindEQ_{&@Jc2w@TGlBR9|xpXHOc_yq)AxZ_%)~XB(Pe1@{Iyy6^kW8?#3sK zXS_i{KH;W~VyI3bLwG3y+yt!iNtsN2TjrM-E=UgNfsx=AKB}fPT`A}Wpj17DOOk$n zk_34NewnJM+J#xV@puKezZov_y3!T(Q_0EED&jvi+Hi6re8E(DGZaNql42eOqv}hd zNZ%+*7uw~GFwLV>V5)t69Ig$|sd!ro6|Z6{-E0Y%}A3{vM9!|!>^l9X5f z43&@;RA()y*!v=#|5#SI$g)_Wg7B(;^wUFjC55_5n|o(6?B|1pIc0mG0_ZG+dE;1~ zfSu>FUNP@9{EE_%gI=I`B2P6j1ONGgts1-$kSIv|P_xwMfVfJrMy+GUMDey9p&zpC zzD)46SwdF4MI`DNpW-CU7MafejZZ~;bq-ME%+b!xldM3`-P9>r;bW~$H^Rezv1H+w z&WUDpyzWX?AN9%BL^}5lc@*V|sh1*~Ez2$cd5m?__g*-N%*s&_qvwdRVlb#C#>GDK z6fG`x6+2*Wp*D_5*EA6Vk|*V3kvz1DCr>aJIE_SkQiVSZQ=Z^B#Nv_VX$43u3@%St zh>#jCBz97k7re43RSy#=w31(cEXi34X1#tSH00@aYsKN@3jhFKU;q)UAPB+{5(zOv znDzlJ^;#o#9X3a+Ob4NTgLQX0nBMhw@E0zX2z>4U?6~@y>Jt5J;25E@Ene&2B|k}$ zap!OoMAhQNHO=&WnUuk9)qRG9>3R8z{-fszsgkj+sdrp-Y3Sx?m-@ATtc046Z8`t3 zjj1u96P+c4>mce5(-C;4WZUbvEJ8ad+k|=+s$rb0YoTJah# zQzHJNA@aRgZ&au@MMh?S8cBT)*PWSG9I%pyg4#@TQUT)X{QQn}JlS17(UH14{dOlj zQJy#9?b!(p5R$5&E9=`7O9)ETmm2v04<#-Jknftx0a*Ex%K%pX8N~p9G{+ub>LZhE z)Gz=*3-p_GAW%KYL@auH0$s}q(J%PO3Rd5RQ6==@khlf@@OdtO1OH$YYoOX3*&bLu zMc^LzdSpQW5N>UPsHoyUA`k==3=#^YBnNR2;z0Bs5DSS3jVnc*%{!$zc9n7 zKZ`<@%-_SmkPoDP43zE(&B0=<;wt?DokWk*>`+NVY#}SzSpfgci2ekOhTOw2{;9c0 zIvt&hif0Pqk{cq*PT~Gp;+G#>Zr`p;mxl#_nx^5HuW(bUMoG?I6fvDZS(fs27op^C zuPlX-n)(1X%}y1M9Qd{%T*QP zyGLNP#wU$jD2;;+?T4t&1sBvbgcWdcb2cd_S|zAi=ja_sa%R?osD`D&I%k+;$3I|_ zl8v>@g1JPJn7YIS%nn~IclZ|VfnFFRk@iXGY*bJITa1|b2huz`puTPX#Tn0P1&VuI zLvFbCO9(4}A_nx5>}mp>QndvyjtKY)%5M5X_MZ+ok>V7W1gl?(O8RLO2aiI{{YKwT zf$SAxov;8W%@zj8iNqtfe{yVKHqB^YIB|~}$(eZ27(aXKECyHXj`tj_MiK_} zQJD3I?)3ZY6z%u-iN2V#kP<|VS_K70>B8}5h=(qJgH=*7%5^M5YCctqO@!1lX7r#; zL4)jB`qxdILUe@a$gmFD5>a-E^^fq0S+sPOrabcYkKxZu#DF!Nm#&8Xv3l)_GVg3Z zO)mcwMY$v_BbJVCdY{ZTr#_%tFy5#n(Hn<3Mnk-yWfcbIS!fgpr^Jb8?cypWgvSmB zUCkVS;!;jk5Lj8eb>gDnK!~EhiFU)8#^nCHR}Uowz?FRLrvfdbEH51MGIt|>gBRw| zSv2}HGK%n>B|e6B$e{BOk!k1wD3F-0_8xVCj~DIhwtuF5T0wP5K{H#%@d^5Bn!uPo z?LaXxD7Y6itQNHSC-gUs@v=Di&>}sewJdLcu$_wOK@2K%4qEz0Mf>%0fyII@|G&gL zwS(5LaXe{Kp+f%#B+M*TGHmxr=vmY-RjT)NT0SUH7j|B`@WjquOmkEt@rS=2f`15O zCKDilc%EPpV<1G96-OL5h_5a;hx~?!B{_WzRU1#2~j8m%(xW!%5ipo zSWdN#G@C4EFQGunC-OEeCqR=MfTf(>Zl7z*d4kKq_xplFVE7jbO@#|xiEarLoIYP3 z{s??=dWwavR=2~S@+jk5NY7XA$V7j&npjBYH>i?L9sr8iXL1d7;(JfY{A{Bpk>Si* z9vV$W(bwqHZ=$XT1pyQ7^FP9d{rWwB2>0JIS}xy-&F0QhSP$%ZaT9&_hdsM9F;3+) zzSz?iv#_(MDpq6%;*}AdsFC>U4(x|^((>cWH37(>6a&eZS=w-Z++5fZZc9b5#3)1*mj(y8xzsN1S<42P?5^>dLU74*P|Bbe92LNBWZ}a zY%@o}&q$w-S{P_^B>&hcFs~+CK-oqI`vu13qvsm$o2^3`UpMzqB5){v^eM6SWM`8 z$(YBz^#&YBKn4~JHHAe@0d--)P^ocQp|dk86>>gqGWc`O{ljVExbMsF2zFgYY(>Xo1$+m%jJSLc!-RGMKYY_Oq3#ev z2CfP1DqAfZjWIIfTd2Gjh_N*4Wxn&^07M{jBAUX~u}Gw5*$&{lb1wCG8B+mELmgm;sRxYaFO9Wr|NIp}nDs zUK0Yr)nNz8l?$mz;P?*V_VrjoJ{xUE}Ds95W~4>Kp#eQQJ#SUY4|`l-9%(x zvaF1R)E|=kkp5qPv8^oVD`wEeNMfQ#sreg_C-OzJ0Mzjr<2$gW=Y1;=s=x$Q`ucXG zV+dG6D|0|Fz|P3KZ?3x=xKMe$5{3+gD!uCM0=8`j4OdxK4w^@5p-9pgv<+FIq z@0pHn{)5!##i)Jdr^pyBq$csev!OGL0?9F|@K6h!O)e;ZZZC)S48dn(yLj(_i{y>; za?7c+?@g3ZjnPN;vJW5jX0;K~yU?)-Bp^*j-824Ry=9`jPg-M!kGkao?0_G4_d?^U zZ5##WWk(d*mK7puz*Tr$OPhoSu2kg}gtV24Cp9ibPFS`LZK_Bk=;YT7J}K;GCqajY zTHgOnKb6dX0YzOn8wj4d2|6=!J5(Fg0bjGs+Co;7wyY`ibqS-=0#@IVs|ZO3nunEx zKcVHwzA%)tmjNCPA}w>+MyzLyu!fXHY{xMG?f)0Y4_XIyv?Bl*a8qG{VW{zQAp{D7 zU=(DG5M>miJ z7ek&tFK+%jPcWhNTEn#gK0ggZ$Zf}hukC37=nDl&h>7I1#mm>|M>cm;{o7GtKke^C zw4vmMS=t4--YGG(A%{&7*A64J*o zLlEqLu)~Iqj&?z_(`_L5K-7McKsvma{^N(I8?*|mkVK?mV@9leWT44|7vv9ygNPM> zy_-TwMgV>Rk{})z%4T>T%Xs)mkAg9$blxYQ&Y9<>8)DuF5Tn&&EDu>jvxRS5icr-+ z_pneOrJ)NyE90CCRy|ph*sNJtc96N^_^jn028y4jZA5!UCFMY_quo)*0@-b z+vn|YL1c+_ofRmCLW>bp11Yu&78Hvy(7h`U+^|jJ3^nbC1-C)Uq}>}CI?emUMt@9y z2-b4B$AooQxew4WK`tz(<1u0JU2?Y&G9gZlW6@HW=gc(u4abOV#?q6{r3e1lJ7E|Ldj@xFiY6AiA7fg@{7Ri-h(er{8kDJvg z4Zv`?lQmRKi$g`~o}9E~p0Jpl6c(9(p+yXU$Qc&>%7r}scK7PpuX=2fWtfn)`PN%F zCX4D?Z$Sa)l#7xu=o$l_SpZ`Z&OjjO!F&p>bNs4^w{=(+UWH3B3t zV-@lfS!FzoOcX&Et{g*Awzh`L6>2EVB(z9 z3#*I^&I?eg1WP!{_K>5$yZ~c=8t4&}#CrpTWOGWcv6^%DJhjSC^`!02~j`{ zD#PS>qAGX4;X8{~gX4P_rv*io&9-Ox8p<)6mIa7%{Ha5Lpm5idIdbW?AMxvU3+q!_ zUWk`RVF67K%j9qioHjJp36hmNV$PCi|Q#M^3xCoTdoe=$lOt;pQW$#&A{KWQ8qV5_dk%`J*VxgKz7tzg2=fzHQb_dlg*1}Rvif%$1hn>`p)&aaA01$U% zfkNmZ2!VoNm~+SwLJ(4}2NFmSNDx>=fDj-A36>xsNDu-PAwUp+gk=~M0hNcwwmF#z zo~H)eXL|Ol`Bom~Be#P9snN@E5M}M%ucMHn8xG?_wY3b1wqGS+RflRnUy7!6PlJ4@ z(hI~(%OLkaLc3EbcMMKw_iPh-cnTJ8(dy-!z;5ph^o7bs3s(A*qxM%hs*{Mn{Ivf6 z0=TSk7I85L4tq$~B6&d|uIe*o^#J65l@O#Ug!SvYj}NHzrd(pP zB3UMI_OVu=NiR2QbGoiC(xJ}Mp&hIsB<%gdofd@yBCZ-r3?t)e{-Lut(b+>G&)=eE_t%TLLArbi zG-GCe7`z3`U>1REs{39zLeUXq!+meIlqS^#s-AddBxLs)vuM@l0-96&LvG>FyU*q> z%dMKzo5WWI`CX9+T?ECI?9Q8k?lwL#c6TF(QM8L^^x|xWwtIbWpli2a_O^C=+kWFu zPVYIca;i6S9^4A9GWLsdEWt^2$;P0N6^A{4Y%Se#{)UCbDNL!nHB|C}PD0OX7XV`Q zY6rI*hhc_x0;!A`g@;T%OqA5P?R+%D`!1WRgj5@hzLS25e8!d`V(Td zEMpl>-Bz)Db=wg4Kzd0-gqW_bkLDI9Klg!u#j#&qC|aVVjTO6kRqZ&edBk-z2o>=oI9S3B)4; z(W^**G;QkMN=K(AtxX0^M_t!FC+OVPbD=s)b8YgGRvn$nP!tazukoH`Z91NR3|--1&%|`=FLVL%M<#?x$)4K8IP-6 zMZWS%)k$c-N`=pjLne&$T@-<0=26yzq`7vMVAc)o2hZm7pE&YIa@nJwqpyJ_wwKI{_ zTBVi6B$)VNZNB<(^FgOAzysyv6;$lz(Zlo{NCEOiAhpY={!z6qbW$7y^b(w%5iCKB z1?ziNDb(T%KLKc$Y}AUPh9f4whycUgudP7pr=?|OEp9%RqS7`c`On&aT^p z=U1(D@#-JK`-3gzB>)jN@4|^pPL;`&ji&>j8l7>FSDFx0Sla-LMiTfQLV1LJ}oW@D?fgjBs-y_24 zAQ9QtEZVa-hR1z!@S2^Q*DT3boYWjPI~B26@(%%jux!@x$hNY!vX_vM)JrSd>@2j+ zk_{l!hV@_$DuN|>h#ggkazUtKwbIq1qHcEN>Sn1Q`0dVr?A@&AqHo>AopY1C?H_^W zZGnTj>e1Ms1qRgoFZ}v1Vj0Y|sHu}bQ`w59wa}NNHD0Qx_*EQ%W0(zndcCT=iq8Rj z1pojuZ~(kd9CEG4pOQ5F84B#MYLY?~)Zr^JC5zYio4~$@Qm}7olT!gqi^J2-U3K6C zq|(~NYq1G`wGB_}Q0;CL3t^;a{l^-dk7-DotoEcp2qJ#dzd)j^&Cur2 zKnO?z1|~on@X*<|0mJ*Z@2ZEB77+S*L_dMQtWFo7&{#az$!2JN=S2jTI38xd+bOVt0i33M-MGlx-*uMj) zMx)t(nzJH*sTPI;MN0AbRmheN1!DQehTI%YJ<9Ve4yvFbfA*`u4IWa1PUF-m9)_o} zY;iyyygX_Q5r-5f#t&h}k@O?sduV5|ehFJaEk*42rvznkkMC$TQPny!Vi~M@emiSz z%+2;aV=YQ}SF!ix0?ms-T?jHL0gn)CsvrG-9&fZm@DVTax|34F$o4#AKeIaG5<*U0 zOaLX_PBeF;`-u3g^0J@j<6~gb)ALzD|H2JvIeZQatebSxRgiJKNqC=+BYr-9{cxs! zKH~!D^ZfWIs~JmIrwv-pgZRRG<%sW3Ge}lbv+k>-y^r5w6>d?>ytf|40MKIU4JMy| z8PC#+X<}5?`z$$5gQVEY*#4+LBowNFIP~~P>ix55hqgh9heYqiNDrYAUxBo%9>FF0 z$y3m^xUco;g`DRde?5o$yh8)xBh>DUhxgd@=|Q%iGDOZiPwTBbQx88&B+roeO{=l+ z>hQ~3^f7$O@+5vjvZ3UequiX03V$hook0mdGKe$AYWDcA+2b)NQnrGT%oJCO%4qe2 zIcHPbFjIW;CG>IXY(&q17T~vSvx8a#bOitqc4aBB;K!%YD|6L1oDDSd7gdvucF{Uu zPW^ROqRFMe4Z%E>Loi>DGixDCVi3i;Q8yEmQc_^$fRC$;`uLwwkH_%*qR8CdL1r> zSN=+>+7tC4Uikm|-3@eISqGE>MyphexdW(wiz!j7V(!ByMb#MevA*h0Rdo~=09bNm zRd8f=aAb60a)8FT@Pz{sNFWG*AP6J~Gz1EP89@+&Q-V8&feCmBG$)HXRi*9cZiO2K z=P<2#jYT-6v2#;DY`W`_XvO#EAPn=*9W0Wt8}q%zX(P-~TXOku&%|x;@=b6judHB! z;>Ks$a_I4gLDwe@Nd;I|iMIIFJdeNol#u?$L}q+Ta@EBDdbm02MqlNBAv?Neg#OE5 zNY>#!RUfCvCDfY}2gxn)4t@w(OFD?JV{5hme7+&V*y2O_&*L3(;`kDyn*J- zA~G@RYz~atSIz>FDxc8O6p8h-YMff7W>&1 zb%(H45N^dvhJ5#1SSZ?my`acWC90c$wOH2dV#U*itoG}PB&1{w0J%sIX3|xZ@Zach zW^XcEeR2QI*%h3Rp`=9=2!S=LOp(%6aaVZ?T5pwCxSKb-^HvjAP18^~1S{Bfr~CVk zYsaouE;0P`T)R02Tm(AyV|87n;x@D zwcUij36D4BbJ=-sm&cppU+i2hIkni~fgdcXr(bm?dX!Y@HVVg6+<33^%j9$?J@NH{MzJtDar*C&iVz4eaa9 z;7Xip?$RtFGL5tRxVZ%f#69!YI)Jz$oIQL5jNPzRt&9Nx019vbPLJ;Xmv*<1$`KWy zRG%r2^a3$Tf-OfqO~1vkiP!tj{exkowO*0y5*#tr425m8x@&y zuNcQ3Wndi;r~i5H0uVyFdubl6Gy2a!O&4VMP5<=N(;W3&dtj%jx`dylNzNm;X?~gn z`HDKwT@BNN%^HTdfJK3aJhxKD*NbvPLz5B(0rbsubxG1fN;{Wc-)(` zgP#&4;ipt@G?Irx=QamlF;F$4Ri*RLlxzW3eI*#6b6t!VeXzT7r#E#teh=R|+Cd7) zR0se#b#iWWP;6mH@GzB%S-(Z@+GYJsE4C%oG9&w!3K|0bUp-wH-Tdo9e*aa;=r4Dw zb{x8Yfi?RW`5_6L>xq5J4Zr<5z>%?XpCy4Btfi_qL-F#r_M2MY94;{pypWsY%3X=X z9pFY$y7;|1@Brz?eLIdqJnDWE)B-Dps+Q5rB-bmv9R*VWJ=AaSWQ$J@+G$5pNCJf@ zg-Oa#gqX>?1FSKwcBv@#OtGli@T_W!M=jug2>}*hNgT@nOG@iaxYkpcZzQ>I%~n#( z-WxBqy*7HwNVI=-|Il7a|3E)eTJ(%r8kIcXs--VZY4mf}X-Lw!MxTd8qKtzvG&0ar zE%pO{w~^o5T@?W|2mlCWLGbv7!e6bg=CO57?|h|=s!14}i^JtK0~H}T*`hR090Rm} z)Z|&?5zpv`0~NH$VVA06qY(I_Lamhr0bNN}}>u7olHdwsajQoTA-y>t1)=(*`(xIybToPxtTV-cjo6 zQr+udIyUeB?3aH1+2MEfAeWq1k2SCJf4_VFeRC`bthg;n0jut@TZd2jLIro;+~PU> zDZf7J3UJ}2t!z3a%w?qzChMgpc3hcTz5K``Dju%F_vQj0xNq*H zv^$>FRZ=dp42){m)DdnCaqYNxEY3zgztP9+SZ<3tZ?^rM2d<}S&aRKie=*C( z>aUp9()L(0u=6im&U093LuMwtrCtupR^osR zN-N6KVvD#ZsfZUMDqoP~zVlOQU7WkkbB_hTu#squsObqABn52F6HNw(iG}UQX)_7Y zByJj}qMwiHF(cXPi`nTwqdS$h=mr8H`JZc3HNE}j!}FLAZeuP=FztDWe|)0GnXjh2 zBx;!2`7Dc!QCFie^oX)x^TO~XYXW->$p2=enP7BitYJfmwz281kLI`pBRu+aer&pl zd7Dq>{oat&=C+yOtIND;5R^HLc2%Uz#TP32k=KbDC-qAX{6uS(h9w|ncC$2{JN@yI zygOD%X+39_wsbU#`5z88fA!I6aWLllYgvQi8#Fax>+|I24H>4KgjfmIrT#4_5ugEv zQ)U~8<;N6fJd9&DDO*|L)3?hQa>`D}V12+#ol(}CX+Nr>5YASOWcmxvo16%8Ym9RcxbI%;P}(2$imwa|`0Z$)-% zIk4pawMrq>jzHDMfA9<9yi}c%o=CiQg!S6b+SaLnQ(F()j<8YS$vU?qC`g5=E%bJT zh~A~xY`*_Rgn|HZN1*+K_9GRnIXLdPE6W{$Vv4j`iu1zJ$!Z(Y9bv=$B(vfy7}`s> zVOtKXL0sMpS{gV;2q(PrZIQCBSc?>F|M3<1hl22e>bY2l+zJQFLCb(aR&&c zj_(Mk0aY>s^&P<%EGQPgBb-LIlG@?#2)<@P$^RYU3hI7MFyIlQ-X+(@Oc1(Mw?C$% zrn}b_^T7>b_bpZVVVE19DX$<`C`Q___g5v^BbZi&uDuTV@kN(}RL2)>xtr?;hcCkX zrVUza+UEzvVOC5hvnTb$T7=gIYY`f<8eMhD0>5BHNAWn8Tw$MraN$WH z4TzEVt!ZsZl$-!UB_u9vLheB5n$vD0^x^XeDe$H4d0rIotjWN{cxb!5mKMV!5#7U^ zsS?Lpe+!}B%f)0WMRsbdHUOu30~Xljy=;9}80

6>f=>D|~Xhm&6MK8iXB%g@W%N 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 FAPUEJ!Epcp delta 154575 zcmV+aKLEhqvkJPe3b36(e~jb-x{06{EYOaM8)7qJS1X(Sx$%eWR?c7`1JN}M;#z?& z?VhUV)C$k1dP)YlnnA8U18MuFUvP6?Maet3O`aG@}zjVEus1m|OU-K6D`vNgLl#??zg>!A(iNm;X%+{=B-w!o_2 z(U&88tqvO1P;nbp-*l0iByj~Ud(wo|ct$BX3OT7kBz2sJXrnQ7_7BIEDs~_N|4zKj z_?2W{|F_Hdy};?ae`!z7svkr`ki2-Mz1!=p#NGP=)o#CEU#weTmysJKQ*BPX?YJ71 zm?TLp?nXKe&bLx77Y1(~Tg#N=eC5d3I_DQ|BU{YvI*ORou+2L{Nm9wyLF++!gLqW7 zdcEluvQ=1K6t|PR1rm^16JtOe!NwwJC19g~v#qU?e!)ZX#njPS?h_@uzt_F&3TKTes8vtzMFp9|QTb z$AR>X{F9?P8n?%m)heMDbK{CLIVaLZ%yR~(#|4og`&GwF1SEAl0Rjjd1M6Hj=he%# z+CpRp`D6LGe{pN(F2csqmD$^kq(buG&jM-OIBxa)ljFvX(#c;7$gy-N^ClFrD_FLx z06p{=YW5^DKq`JGAZGbQ8~o@u$IiFtpapR(ClJTMA;*V}kEAHz_ zMz+9~LW2`|3*hPUp0+K$R)@0O zN%dr{f5SFN)+9+%em>1trdr48d8)tg4;t6a&s00kRCM2rd|Z94EaS`Zk@&yS*tp9) z52B9bhs>i53dI7*D99Exu4s?{jE}{z?!n zy3<@&Ou4zm-y7$(by-+DpR6n6_+`H&Ng7Y9f09Mhj+f8vxiUwY(NzsI|BtRJJyG@R zK6Zna{K#!vk=tbtFWcgsQuH_~OVJ~n!Nk_Cr2Ky!qo7n&|84wHAQ7I!k9l(fu~;4u zDig^=BC$A_Oc+dHqRQhz-LtS;!)8bmmKXo;}#1m(Z+vmV`|l!R$Ewy+|kt|M_|jVOyu@7_Wxgs zHohYk&>w$rtv6L>*vUp?ZoPR{zGitrXKy}xn`HEg8xV{>zXoOel^wg-v!f`NO0CN% zBtr31TB3|-5El{a5ysF0v6pA|xYw0s{mLND@o0merBs6UxF`*1V7p!x$7;nl;}8nplq< zmnTSLYC;%y9@3cC5K2HcH)DNV_|P#Hili&#JB1>ryIh7IsYs5DBbsCN{#*C$e{jKQ z&_Jy?-c>21%{-2O@{15}dEW5Yr;9nMT z#tV4*5@PLp4>ia&;UGz^BTKfX$KiP98~=l&@yE{H8UO(S zQve76K!~VNFq8@8@mwH&bU*`>j*piN1`@`>@G&G34MJlu8j6D$h69kmC!P4fd!n7*_hSfG__8E?Sq~g<~LLUV6 z^631|182-o(xRU{Bc*F1!R89-@5xy` zB6x*XyU+><5o#M0ic}T*dMdw8gvC6>a$9ZHbg%toL5Uoq%ma-pe?K8N0k#LFM;A6T zTLtYQORLT8IB6VhCMF2gW7Oi>t?kt_M1J_82X?O__)3d_=G5B}h1~ww$Gg%Z{}bDd z-KTvJ#E$FuiHG>8j_f93sW*Oi2!`GpbjwYedDb7q1rx}Vbv?;yHML)n%Y?8%54ky? zPk+QDyT$MA6pWk6e|eZ@@)vd$=NMuby4pcUWXeX&s0&fd)qx=E684P-_eH47(F}Rf zQQ`Ca8}1kz1CZ@mrTM>EJy{+|;5bLfwmAI4Q|m8puzR7r!XM!IcPZEayh^bw86+Yf z6-c44@$PY0geQsY=iG89ol*}29e)3Rm@XitjcY|9h#J?)e{>;9Mt<&Rr?Rz%k$*B- zGA|5&nQ*Qp^TB6I;YCEFV+{y$KZ$P=z?$}EV>4M?m+~etV*-?mU*0XLxqwi3gfT)G z`-1pDQFM2X;l|Ckpv~%VV`|r@6&4jdFgarr9zd;xFhy)?aU?J@-D zq$sE`b@t&vFT0orIYUU0!RNWJvt!p-3)?yiZ2L8Qa1Ot51_4EN!f%%un{Ra5`3%wl zK6dAbI#7xja{wc4JHbb8m$Y?%k8VGD3|YK_o|3?zBwlW=NqQrQ2@4aigdNh}q?0C2 zbj}wVe_2A)LjDJdf$vaN+*r;z1)GYpO4LZ`B(h8fmi|BjXbwJ5BlQOyE^A%;dwRRM zpE6jQX!%l1SIhF4B`&i`@;lW1@*JAJyl?sm5&LYX$6JUx6wz+e@Vr@Io#&9IqHXI{ zV!f=yn=?8o0?Ujr3ub6eqqDd^y7reB9LKwlfAYzWnTp)uO!Vw9vJHM(n^GV!F1*cd z;=S9!{0&d$CA!eg)3>9Tp(T|BV^Ym3niaqP%WWxkiS#bqdEzob71CedlaMyaxz>pK z7dkEny_L(1CTSiD)g2G$UV zY}`flxchVT2~~Y^fDsT2Gpz$AAF~OeNkLBtep*fz zBlvekQowlSxMC+C@U)R?(?JXT>S8OEf6^fYkvtUl44D$N0}^8!v~M%KVGbe3r75u# zYC`FO^XXB#OCu}GB>H)#l_oUT=yGztt-)|9(L-E)6AD3ko}if!I;4suPHJI+I%w+h_4u|@wB*_ zFZ3YH#}@hUNtq3UAk?T09EeWgOmy+fOkz-#e>K}(7A7>Cv;X|aKEO|qt3WlDF=?La zPd|o>q&RB4OPYz76qj#wSnk*+e{6RSn8ATej5Hdnt(ePEhJ3$8KUdi8mV}jz_V5cA zL{GzYAS0-ij-qd1^Xbg+WXQ~bk581DlR}iu{s|XZnGIb=%MA<3amiZj^!KVFv<|o4 z@|On&vri$Z=-X_J(^$0NY6~#n7fXAtw0M_C~e^Mn=&+U1D zaeWW+_AjLm51$zguYIB*SxY^kbXemgbtFw5GS93>;-5(ciDZ$vv9$_%SFO^enWcE zNz7yonyvP`GU5T&`yUQee-wS9RZ(jT!UzW0z{Cg;JQ<4axJ<2h8+a{vtZ|Za-HP;~ zI78bLiCTTTiXh4C7Rt&#*7NJy7_>vK);3;yB})w`1xZ{bbi5ZzaOmPc7Iob$IKd){ z#nnb2f!2zMJ3?puqIimOaPdWaQRhG2zx@UUK4|SYsMFy3p=ZlHe@yD@fP+(i3^Gc% z`vq5ztJYnl+som9@ik}q&!|la%TL|aJ_MLPTn*Wl@FmIRK7wh2sqodfQJO+hXgMee zlm_TbB2}(Q3?-h#y+e|np~0c)!W-StWZM1I51~K_2-TUtYZ=KUjE3=XZy{2lqVuNB z6(|}nA9-jpdNhsSf2&1&Pa#bVNe>8Gv1p%GR<`+BcvjA5gNhrsaJRBHX>=uv_5+N^ zwyr`6)5Uc-&4np$ikas>Wz*m~yoZ<}GV|67}U5o{5^q)GBL zq=jjqyyxs1?lyB99q!pMhPLU=RO45+n9VTOfn|Edjrzp#fAWm3GtjmN!RF5@ep{#n zw3nzcTdPrl$0Rf^`WFo<8`4#(lWD|p%)aAE>bBIz$5b|?x3Z3&gf9C^RqzcJYfDu_ ztSFjHYQl-A$x4_74uCX!@~Qv}g(nZ*E_p<_)Pm^G(&};waU1U1$ZCtu=ch5ac*2BxK@V~0& zX7S!YbSEMK&3L0S>iBo}6`*?|M#@_4Fx8PlzwFaRWRCf%%l^&751mOD2(FlVrJ2@B zGLr#Tf4WgCkQR!{iZ!B{!TOy9n+eHI)Nu@`4`wJ2HI8v$xfVI#!+JEx=Pm^}s{W=2z3B{}CB@=j9y)of?rm(Xh{BV zgrlH#*gz~vULIX<5&_Kjdo$>bXI8#U)jg&XfMOi_wuGLHZz@5d9n2Qr#VrtrdZb3X zzQhD88Ici`1Ny3AKU?AfG>ryVS!Uj1GxPZtLNL_SKiD9ANCtIYS{mU4-9)*HhYa^` ze+GnC=EhIHC>BhBKGj2=P}wwT0Hq)Xo0=#}d@se5!aHxkMmibmH%6Z4&I2$4VE~WH zP$6uo=}A@1#*D8|M{t!3%wInL$~N*^U<5#&6p-k?0$BjZgl|v} z5@FPaiUcXpx|Ax=b1|icc>P+%2)1p3e+BKK5YQ_(A&HAXh&T<*T6jyRz6}&$4Mz1; zh9jJWfam@5pmWm!z82xbu%fA&mJFdU23?y~B~zGyOSDqt5VVp7$72Pr!ud1H(poS%p5f9} z%V$57hn=ZdWse*^+!d(K-Ts&1xxXKTYN@!@gcKYopq}$LVqsVAj8^G~zc7rbF+Ind zO2ePfu+ip>|AnxA)ln(TvM#F^5vMf9twm;u3get9Lve<$fJxkg+- zgQ8h0+UUNP862~}0ck%7=*cff?x5%=@4WBEQ>7x;ucR0Rg*6C6kDdM-UNarK(dvWC zNiw{*o#;910(r0nBTOHj7u9%!^0{l>mZuG`jg6$<=k2#=(d9X*jYUHkRaS3fX~spt z#sFYZz2hlqMEu5tO^gTrf2@fQ*=0&pgr#P9*wbKdpvq@tA$xIsyujjUZ4QW-jXZ(S zF2$C1Y1!bV4*xJ&mxcqsMvHr0=V3&hStX0EQp7--+pf*p4z0W{_VRF#$-v_5tA?%h zg{B;b<>f^ph$(zY?q8Mo&8@I8O4s`S>H5{MA*?Rx9hS=VGRM6Nf4~%ajOE4VKw6`{ z6~Lr$dZ{^)^#KE<_ViO>^~w6YA=8q+;MHS88;zw=8rofRLRbY%&)g)HeNXY1pe1t@ zbMyHCZk}td)}|?LxD^$F2Q?Z=R{^&fY%qLe>Ddzrh!Nl#?pHu zAKVfpC`2s7d0~dPe-9LSp;s->;X&q<)YS4Ju`U^zQO8KR(KAj2A^kR*8gvTrkjnRg zt&Exxq%r+~a)2aLk$b>TVz>h!V_u{wAlpX#T_{FiGt*qjfl6ToT55WsyBt z`K+mgG1vZ-SLE*0XEp5!gdlK8bH91PIHp!=LkvfqpvF&D<#H{vEIsOI z0dQSAlrC%t_%o7g7vDQuF^haI91Tf4s?{djyWAp@m-(Dk1KftCFKvOiO9{2D0>^xd z?JYzFMd<;<@7PmN+`T^sStrE(7tzao?NS$WoZ+b*CWre@6e~}D?kV$V(w)byFO+W4 ztoY(1TBO(@f60o`3;r?Lt7xby2qRav&a>jE?{R4aB zR7^Gas7T}M*MOh=o}yPY66qgXl(F1emuT0lcpI0(f4k#+MWt)bIczsvB(ZXS@8fFT zc0U!q6?V0}W-gKoTd_d7_03FbfT!s{k^NX2#MsbsZaUluIiBa+_O#Z6MJ=3?z1ZUd8zAE3p(jKt=VP!%jBKkfm44IGl0 zV@GK(kAhn2*ta1OTq|Rly42b|Ro(vfcMqmvXgI@-yhQQTjxEC-qeu#~eh{Ts zfOLg8r^Jn*lT-3CbHW{ESNsnIZPx)1xmG0$moEdqRlGlN8R_C`gOAj6^{NARJm@yg zZScdkju$MNwW|Aux5kv3Yn!W*K&|uMV-Bz};M%|+{!f@5EPYGR=zHzM1{rZwtF`of zPjIwYTQMS)b8M&#o(NT~g0glPP{o`o?2U(VnHvG0Z?2%{r7FzK1kD3rS+`zef%ReyInn`^p*ZpdZYHbC$POQ)<3|M*pRJwqePZtiQEFy-N-lafX5Gtvh6T& zZyXeCbWaZ!$HK&8;WHAd0feBS#m#rM|2vlK7VqN9x@AB8J;!$CeAT_CG#mrizWRtg z*3;mKKE_wwEgCDHDnf=t9@7maf9mDKpe{@;dK;KSH~tpee2Oa4m7h2AWC{$N9~Q_n z2>M8m42?fiq?={s>1=o+gt3Q<#ERw($5%^24;JPFlH#*jWeQ>Bwpwl@qpL2p7V}KG za!JtvN1(oc8k&An3Pe{N{j*nKvu zeCU8=XdwYcnSdO9OP(~kF*?M;Q1OIzOpdR>@x2qvu}$NQs0hXrs@qM>v7G8=0iO2< zm0(rvYGGy11%Y_&ht-%Qv%1tDLYOlWPqnb75fGlL5ze)muvgEpOdl`nOAp;8;bqaa z3snxHlu#*)P%5}>*c;HXe^Nq0T&?nuTHY%EA|^-rKiHw?;(j^xBQSjkNrOz8Mn;Nr z5(x_ndMtVrhCCs9^&2?uAlVpA{(TjZuV~QNF{jfYF}tuv%F2cO=*jAhwr@<0dT()H zIZLu2O6s`>7Mc1$=>9fh1ep;4L-q!+$XFi1LF;|YR$e{#qvj~^f9a2jYngSa{CCT6 zXE)6_bq9*(Tu*7uJ*s`(aC43)qE?GXad+-kvItg4^%UU8$d7~O?_cs@C#+=(xS;|L zS4}4vL7!bWtbTM9&4hvE?^Cga^X?w^eP?-o1B{IFYPx`nv5=(f7-s-G!6;mbG_lN3 zU-cL$hFM4XvS5`bf6CFkVi;OeYFSKL($cZLT-Xe>;gQ@5TU!mcA)_Z~5m} z&n>;G;uy$VnIo(XKJc7wlGxw}_0GV+^EvbfFxkw~^62UnncYl;|GIG!D=e^(tbP>0 zq(3YC7fOJl5YQB9^1}V2tRksYC!!!>sZX*@J$wgl%t_+>m%oZbsNz|qel=uvKBeV) zQoX$p-qB%zf212f?begK`Tn%N9AZ9pa+Fm{Fg7vfNKe*X70n$;_g)r7z0^ z3HxockYRe0w30Mwp?DQ9uv$W(Dk61jNYp2>z3@5O`|zdJAeApkSP}2bqO^$wq4NZW z8dX0}zq>5OAxI${#ruZ9HFyQTSfHB%*8`qm)Xp_Uf7tw_6a@N|N(!7B3!DZjd!S5OAit<$&0* zO7W2~2l`r#LzSg(`HMMgh_}jzk|DEc+?9ppf95_FQyiP%Lbxqxqhr;CmUDN0kPYP6 zb<6i(mt%yiU&d*eETUEVi^%&M($u1DxN<^?c zf4-8rh7oFsqIn6=CB`)vmxEP3vE-WW+f}N9e2ev4LQvuX0nisju!NOCQ`!B78>H$1?{&co^TO3FsC2PqCFeU+Q?85Ux`yGCh@wly}AjRrtv&I2WpGh(6VIg7Ha z3bdSsCpNw~X?`vN^{BBz33Vng)!vZ6VzS7w_4chZ|%$Fal->ZBSoEY%lq! zD_UZ}2)darao=dOa#RQH41MKF$t2VRKswzlznrn}?*_t8OB=(zRVuwxF+7IZ^*%Z z>7{XTv*pt9t{C&8L~W>XN93XrF~BP?SnOM^->AyKvZNid8y#tov3XxB1fAQ3KOT3& z-_43nmO<@W;iz@Le;}W1!JYQ`aiGPd?uxQqpXty}!ww9P{A?O38%#;XT9A!c6r+w; zq^k;LH|r|}u#VMp2=Jh4`~awsehiG zGnVPPEV8D@f0j}9EvaK=BSF$?1}I=nx(?Gn%8t0;evW(xifc>H=Ho!^UP63IFuE*;)i5cwso&Pz(STb zhOhSrK-v1V{cV;@AD;pYkLdRDLp@}4pS1eauo3oLe-FKVzcU&RJ+-6p+=2hLbp`>p z3Rhel&Or+jr%gK|CcMXHxbZ?3FBk#LV%16=JBlHTKhT1iC6zXJoUp|UloVi)LOoQ~ z1xcREFu~2t5%ry;2HqISId|@|V_*Pw6ov$)5nj!eACVN%I$aPZx8!1G%Ct+^tpara zh)OiAe;31Tepnr6iPMlFgk;B_0(bp(a>#1C2pmnh@0%G$Bh2mF@+hs>&YeGlfd0Mi zg%uWhLBS`*RMNswQsO ze@5^SRHab~-nu-a1jfIBG>uYBd_Y=01Rd)lw!eE=g2-#iU)FvjjG?g8W5qsL2q2rn zX?j8hup20{kLUAf{-BN0A&Ez1+nc1~r3=kWZkRbBde~^f* z?9SN8@YeJX1pTXqh_3zj=Y$cL$qXx3n!^ks3LZ3Xwogq0V)igCwcm_e=|L|%B`$?H zr}Z~s4@h`Im)k2BdniPzb|@moT1qrbe$NWg{oILJn<>0<_GT+<4wP7W>~5{N3$Dbk zQI;a>G9;{g38F0;_x55iod$9ye}UZANixm3%u$l?%1kgolXeugM}9J?b3%s?RiwVD zmA}xOL7^w@!?Isy{1dkBxY6afudzgumudE#hGLWIMC$dVhDU5(gx`b-EsAlQCQ+lu zEbD3NL6@Ex5YfMQ%(;YM#lte{&B2!Ge{@o8_KY+rH~S)(s)cE&eVsN2W`Me$xJ`r` zI9L1w#&Fut;aM?L2cn1lW`Ys0O$;zSyJc{dbT~zx*RqC3%MQvHTv%4SC9rj-h&rks z0XFYtg5OtaM-RyKkL=Ype?pY@pr;<3Q{k$Bf3qCHZxTXL2V+?7M0h0*>!&JRY=yTU z7MpE|oTB>ppCm+-nR9}qi~AKau}Qt|dk-Sd@69(uj#w~@E5bEb4x7lDoiq%GjV&a1$rJ@(CX0>kb0)nA!k6Bq$>CC)7gf6c6418|ux-MyzQ zx-vyjwd7yzxYLQL^#1b4*fczg;8~v7!$IIwj#&Ul5y4F?UQMx9Cov<%#&;&Y-;{z7 zr%{QafHCEF6_}|reMHr91~NT{6dt-94@UFDqwdA1GQ1X)*PMKHcDKBAm!Dy zTm@IA;Yx>|Uf{=d{Mq~^C~%7{Qo(uNcegt8&wh0p{Q{IBSy0xPyAhJJ=$vcKt6q*3 z!wa#c`9=HRC_I6m#1a*=;r^7IM@>38l5qunrE|Jzd0M$Bf9JPI$c7;OZzI1Gr%8Hc zMRSJv9OE#HvRmoaf?)p(2`7}Y(ZcQDNu_k?jFiNWWX;hR5KiS?NaboynUiP!#H#iC zjw)GByI3JuE)hv}J1zL-eIpWXA2h*>-IN)n%RZEX6XveL8WtzTf_|K=UD&W#jjsze zHf{K64m7}=fA-{{COXiPi-t__`aIq+DRzfNF29m=82S3tU#QmMX` zbt3G?HIcw^@hXD7Inuaf+g?N&Y8)MMi&Oa)7{R;U!mjYe1-Kr)G^nsOSZuP41Va)+ z4Kc8Z{A@IK82LUmgYv>khYgjpG8_&WtK{T=Sa|(gd7w))Uj&?jv}9Tkftv9S@w6B5 zDIV1be^`{8Y%k9N1j1?o4NyuY(0|=kziZ>*x7oD~YIrCry%X zr4KtVL|Poy?%QQQ^PI2d{bzfC-qt*81>)wpe?EkDJs1#yC$fVl_t}$```gV>Q^}Jv zEw4so+{e`5$tZ5^pMo%&c_^K4ut`K^K@Epv7zi0;w>+#k727QKv(U|EjO`U!xF%io zc#sN0SrxlzY*WCE$9&gBDndZv#Q#ooZXR59)*>a21~)dGU7-Q!pm86&aV&zzwG`2| zf3)@{@}~2HzBAk#0Pqb7lqVE9=sUuNw z4@gj~1d-|Uxw{tnr^9=SV^|&9Bi`;k9pWjI)+?0!e>DpJoPnNppaYR1VLeN+L#N{6H%gNjxyLei zk{RG9dyeHPBE)(JSP^^~Pob-;C++yf**z`cL~3M1E8bQ?GVHxsIW`{5MpH>4-zlOf z9+OB8T~SOgfpdR;4_&m3L!ZL`znsW=m3mfO)G~~o^PPZ?Nf!S)F{r@fBD3)R7PZ#Zn>KMaiOFD`p7g!3>hGmdXFivQV@(gWB#DHTE~w- z7gBGvD-{x9soD6qU+O3SKY&^@e~ui>F#BqWyS3vaA&}nc7`%8%3S1r*A5W&PT+J=m zh>C_eC&VN#+Se^PWBQNSVP&jIe^TQVUE2mOR=owmQ;<&qP|cw|v;=C~Kxk)3S2Wck zZ|Z1^ZEi-iw!_|-SBy*f*%dgDa8X9%5pnm0Xx5gsQwPB$fh>(RLmWIye^!jVIH=}Y zK~pa8(P|nP+X!OpznMb7RjZL3CB5$f%zF2zC# zg)%77`SNBuudA`oJw`%de}^Q&>KNX8UmN(IC$o}H@WTEKT~9Hj8#80H=KEGwiC8I| zXUWmi6;M1K2AO9WF`vGJnMi8#fOR#lt=+Nq;{cyq7{sb&tq|bOh=Ve~VL+vD7miic zA)O?C%-~Whn4#q~hsc(AO4EY02KD!stvjj z@TP<1v2o7cgAMa0R~Y{_kN{d;j_w7`B(z*K-=Ec;1+AdC0&Cona=he85_4){ee}iS zG39>rRhj{`R%1!8e??$K2AT>!KCjML{W@g5oZ8XIw1Ip4vbFN=)p0@2*+Oe|pN%YL zESly71sTI>1fnG5wTV#$7D4Mh)Hw|G#vR4AfJ_^Hj;hfn`q7U0siiBcz9_D&0_3ab z`QK*5H9@}Rl9|8=Q!$t0a_bZs1~&Ij1GXOvM3ua61Z4u|e`8AGk&P#~Lcws?A4JGG z@jr*qtrDJ>>j+djb8Qo=#b1$}TmX8iBbmDgcVdz$l^^LkH#J2OjzGl>(Dl4OccVbL z-mo9xkmM)DJ{p(P_ftSvi)e&T$;s}40RPY~FtlfT{)9yAGs;~S3Cc3>E3clr9RR^l z&1Y2lK`jpOfAEO3cR(h;c_L~jy7+?8Jy-ztEwt7?` zsmd>bw@cl7GtBHfH5=Ibm6CBpsSw~ly-jiJLd2z(92U~}XuX6a_o{5NYFF`%9OxUt zv!+F^0BRAgy@fJ+vtGrOkPg`7`ZH{le!~9hRph7#^1M&!&CwJVdLj*lbWhcWiPhQL zD0K_`e_R`d%rC=0ND^GEo4aXQ0w|Kw3;3&~7?R?6MgoN?0f=>urjW6S#~lT==XA=I zv0$6;^;1oMLKtybj{Rd2gY~!H&dLrv8=KBM=R}2++%p?@pDeWSc(Fm5gHuz+JHz8r zs1%T-IpMR4A!{2#e&12N(igIOt>=2xqK)HLe~|AZNLFvoHcBr$nNEM6vebaGnOih;nfbPAv0tq zfAcK3Bc9{YySg-T#^QHdN>7=jliyP6v}wk_h%wJDr}`l%f=%Eu_9(i@4G(#e*}f$;OUosU^_ovdzhkZ>rJl!op{Y33wm#x zX%jOMrQ@GjF$vO@4}q&e|$fM))R^EM}}?{U@JiUH}h>KVQ!vD!`1k^m8{&h+2m(1 z?XEN&;^5^)TFT5QOE;I8Hu1|*B%$fqsO(}ir&@m?uw;Kye~{&R$u{a7PAW%$3H)Yt zg^Y!;dcoDd8Yj1!MUrRci|Pt&D4He%s0j_;rqdGCP@svqUDY`gXbfo)e}g=1?#+u( zaYUqnu~}1?^A`Qf041JVAP|Z&Rb^1N{ZS3<_@eg1M2ieu8z=#q2gwaM#6S`+ZNw7U^N?6>s@U& zy*JS&*X`Zz#flYt{{-L)1BJ7C+wjOeCUtcb;4uc8@&m^+j{sOKXaM91D(B)%&isvQ zjau4_pedI7Py)Z0eO7qw8@1VjoCRKLm`3FV{LJf8v?gDq zIMLF;b}}b^F={qUD4jc*Y~@daCXv4_Ux!51$jOG) zKjfs7UQ5I#Qjf7=r;bWY`Z@qX4B%UZ)Y5bfpe zf@O>(dyQKxa&BTwI`3H3w>t!zf4SPC&VUk$%u#}pei}|tUPaw9QyEPcRjd&FER>bN zz0NrKkkK2Rbls2q^VAYMYSaF0aLw=WR@1%KjI!Q(7($H75625B8axDFN&uE`R{lUv z9>Hbye~xMK(f}Juk#;W}s%>Sb8bR1CI1r^pyg}ZFgXm4rWx(DxCDs)GlWM=H)csz< zC|=~C=!HGQt`KLIf5*Wf!W01VW@uVNh?Lm-8h9`5T~$QmfNsh#Ym$5;f1x!B-lo09 z(^j7+7a}$cCe&cXxTp+*+1{c~1bg!4;Uv^ye^X9q*r-rhq+Fpw$>S0rVmbd5E<_Wt zQ31u&RH{>pVOcO%iMu?OR0o16D%C`vx$6Dihr{{O+^~k4n75;;V4qyd3@Oo|qZ4^& zawkZO)+N6!*9F!;olO7ZpPrwTP%XLHsB@9ns$OghLvZL>9;FRqV+EgV4&|Iz^mNZn zf6laI@K9|UOGE}7Ws>sEF;zaR`8kY~Osv01R*no>%X4 z^i%4>6e$9OO6Hb_@gUOf^DVw=h}xZI_-xnn1LfiGm%Uo5C72bT`3ZXdM38TNe!~90 z62e9x8sPlrw$XDy)OltPPxt5neWMgCe?|hcYXLwKLJ$rfxFEya0mKMrYaVPEFLkM4 z=&|?A3>VOTLx-jUPrcfWLZlxiV9|ScS{m)yT)-}`ZLp(ZtIkbaV*nv>jya?}J|T9J zuFJ1^b)z$0_129P1D3O^C^NFM#5)Yoi_S6SoQx##_mquzWQX${T3hw3rCseBf9u>% zM&&sIh*COxQYOUg?K^q(tnkYY1~^Po@`M5NB)}fN64#$g3q`A>{D*)}3eyLaXvcLh z8D&?~1l8rPg_O|n=cS};@Jv%@?s5x(X6@QuLs1#ThAGmD^^4s{34B(k>iKUYv!%@3 z>h2J2#s2)4Q;imT;_?+=ooIgte~N(S%}nlA=zOhs?pvH=t`UGoDqQ{2)E2&@Uc%Kd zP~Ow8Z&Bpd3(Ksuy+A?C5M0ilBgVk~N!V0EE_wXnD7MR{31Q_RPBhvQ2N=RVVYosB zb&=g(Kf<^KXb@qrB6BY()QsMdTcM_HTb#-{+#su2F(ms8c4Tu7_^)^`e>^uZQqRoA z2PKBkLv>RXBN@@pexw*gs{-xfNzAxad8He+k8D;C_JFZFF&l}m8?OMvQ)$6Sd+En2 z@4Mza8XSZYNCLR#{p!h`O7ZgO)iYSNYJ@&> zhrs_<)`}wxq-?uR2YsNUe=QP5Pi@qf~>JXY0koge>ZjkyW>Vq{_|9=(;5kTGC7WgG4^|i0E>$w3shGjykkoWlEW|= zmI}q^gk_204L_jl40WZ+I;>-+I}r!En>;dc-?xvbu^0<3I$h&^ciqjw72#XXTT+Z< z91Zvc2(4lfz)iH@@wOr`!U3{ePILk(J8yvlIhrA0;^S(me-!KVZwa)%5P@Q9jMYCg zK~ul!+7BaNzV{GNr{mP{dQBET+G|fAWZY;uW*Gypn5FOoraO`$S#?2TrJj*qmr9y* z?@#P0ZzaS3EH*+1OA;7B)WcxgkDkSnQ|}KJ4O?OYpUXt+*|M2 zcw2jxk2xc(m#8ql1k7lp@`a8?im4nxxeD!h)$~tf%adMMi(xIexh7D5n#ch;QC*~Y zrAFEi^--QB*H9LF8bm9DXU(9D)RX`dEvTuE8BUbP}!6668Se}z2dJ_C8>WgjBynmPrgu!*n2A1P=sf~V5_Ik}HY#cl^|h`I{|iFc%-=p?a41zw^- z7_8pgVV&iy+WE@oeQnrp18cGreeb1GHiUY9NE#v#4Xb=58prj;nB|)O8Ka&b5ruPr zElfFrFd@9QEx4Wk%qXYu1JKoIs1l-qOTF~{f5;%YVa4e1Gm3-Gq%bu8SsOy)v{On} zv~O>^T4fiFV)@Nohy;2Z9YvseGxs!dgY1!r__(O|z9LRI0kIa=ndkSgwn6?isaa{-H0+dCJa2Sj zdrXcOCWYz1l<)u)>xzeXSij^?2TWtS5RBckW1!xx`$}%?&1KRo#qwXm)ji&?8wLm{ zK2J!-z6u*`EGY1e=HJlB!|=RKpr4YgA_dtk0bI(0C}RQ0ZEZV z;y5%IPRoTP8%h$>6%5L}rwTt!PMK-q1PTplnz^WU3r#K*v6%MuX1p&yU*CGu002Z9 z4E}tHQo7y2EmX?0>(TqOh~v7uQLW#8JKFy3_ScBc}d?OVbo7ZGc7>$G4EI4a)AYlCWs+zWR<`vKcw^mD`028E2-tQVRt!TNT zWc^#K`pLeYruE8~pU~fL2expGWQBzGx)jr-mq}Y1bRu}GmLq;yr9!-X{dIZO^M614 z^BdzJD_D#bZY3ZliYZjBtXC?!n94?u>o3qvUh-1-go#2zLs{4qrk2NYCG}B$LJNvL z?aF*WZeQ}9U@;0Oof^59kKitrW~H)QisCgrZPQ}0SS-j+nkM+2${nzHvepH`T3{_# zSJGkqu)h`F`!2b1U=<(MKT132sDDDonK+d$tfZTKiDm%M5CB6k5CCBCAgNd)5J%%7 zRhoWNDw^=~K0@tYUx}Mo)WR|+;VTH_MD?)t!J^3`b8g9k#X%Uj5JuIk+S;gXe+$`M z8&1nOjEiyNYiququ(=H~B@T_KE~sN}MbBA;ZY}xwRt!$ENF#smDf&{rHGlIpH3f{+ zd}p=cZM<2Dhy}MsQL;K;4(ah3A$r&}rUiSIN}otut@qCjk77QuuC*bz+j)erAgW(p z*!Re8(f4#f#${^91Sts?Pc<;n&Ae>#@~Tg!aYa$9iGTF_9*Bw`U4fbf#n_YTU$-$f z++i6R3USu!1KZey5Y}O30Dr}=xdgspx6INv>Oz~A;ST80UV^ka5`}xzTVxqqLYbFY zrs&y()J~bsnowgRcrdiS36qK$n$jQioll;~G4mb@YJM}fp{q#$-^YNqwCGIPzwFOL z9Q#R6muHQC)DmG@kZ|g=wq7Bb=CxJi%7wL*y*g<#4)@THmr*~uZ-0lav|sHr_t2aG zj?~oz10Gg%UXf%Q=teNPm9kl23A2Gb5xW}y{4 zxT2X58{}|<2u$MupAH;84S2}z8w_e|b5QO_JLgXtiRO$?6{B5BKXI!}&c?w5#}NL{Fy$1@`{`GJ8P!yF3S7YCq_zv^C6 z$7KT--r-!3Y*zfj64_=*c!e!IM9eLwoxtiR!ki}!A(6&yJ=9I$^!KtG1a^Msi-jTX zd9-msDD54YHioz(dip^Hoho(_a*#@?;rPD|PS%%saA@*IZonyn4A%6-fK}RQoFr36I5I zRjoO4FcbCti~3ANv2f*t0*n%?s?|Wb#laMV0T^sPx(vF7byVb8zX~Y=T?PXf<$SYG zJ>>BZ+kfu|{?cTP84(Bctp(J%&cyJ6p)W=u=b=!$^oIryc;~xB`2NeH8TSty#zvo! z^q38pB0Mc?*dc9?!9*{Kx`xBwxrdE31L)RmFr?yZ8wk}(ye`L0K6^a=?B;IE$JXkP z8{%w@<+HqpmmF;kan zB@;>gO{CbTy&n!OGK0<6ZcVAri7Elf%IyKxRVeYb2N_$7tJ=4p8xMcnO+3xfWlY;x zAuVESQFqYQ%4vpiVwtNufWI^ zVagwWWskLp6Nj@|43(=yWY--_=_x=($!f@zD2*kdDOqIt!sCT71AYBHDABL&fwS)} zklEb;axF(H{|aOVyD^c^v(CrfR0}Te`m-xWy1aY}P21dA^45T(&Ky54MsTDsI)75h zYx{@x>EeTyR91fq?28vsvU28HY=vD?qJkep=R#|>L&#-`l*AyK7<%$)<10*@iYEFa z26GI z`iiA+?#8n!<(22eOe>d~oMW0HFn@+&L1RtIN^jmny8IJXHvRG z3v)A0teJQ;x}WXS_q)_WyYTC%AWACfgCmkTV8nQC*wbQm9@3I8KZB*U zlV`LJ>OU7(lUF!1cb|fGv=?`mVeQZN(a9F zK9S`;U^}bDen^ARqyM2R?tfFYz~>zHXr3opB^|rYTe?X zOl83kLL<{LsAad}4HIhN@ZMFpFm_V=CoRk|X;ACe&pe1G8$w@mCUHcBf1$8p*gL7Lp=YS7TZ?5{N;@XwQmkC>; z1spvaK=Ia74L1}67?T+tQI!$>qkqR&h&_Ve6Ye~@n4Wy}J%UI0k)R>y7ftqH!Hoay z?R)hz6G@5>i+{%KO7e66_z9r>uYqzPC5&8`!6?A{byhXK*k#_2Q&gT$4QQ647_}O= z4*tT1->$=ftUc#tHU%lFut6XP6L7%a65&_2Fi^h?d2BbC^N}Wf&>`Nx9J?~ZbkOVT z!rbCGuRjd1zrwXK{QX3}qv=Y6#EPu?Y${5Q!RsR zr9tWPj=>!NVj(cO)=Q85E$$~2<&abc%7l5bkWX0O{(&lxAnay8*gQpxy!i$06=B#! zm`xq8Vt4y*w|CWW(Sei2NL;MU+xD|dV#4)2*_ z6hD^Zai!VP*{iv>k`1qk%}v3sfMI+5l7;=998-_Ye$$)=H0Vmg=jT5IcvLLX`@PnGE4tP0U zgo1P=TV(B)BqPrS&f^;98%FA4PFRviQ;*fs%Nl!U9$<;WjbGl11AzPDPEr??LXPK=u8vRd|^RONiyc(4DSVda#Ch-;itbjinCD1PW&85oP_!@*y>HdxZ zAczr46!qkDAG(QflB*y|=);gC`jL{ezQo5a(hEc&mXJorMZawuF_N^ceV9CwSkG2T zX$C*UAIFc$fIxqk;b!Z%UnWb&A%D~3U$#N*_0V&rJRJpsoC>NVsjh?;a;4h>B9Gjq zH!;aLD0T>{fFSI5xHPWwtxBt+(>zF z;5lGBq0T1||5{ivQ3B)e8H%q(fp-&%|7%W5f9lXBO}|kcwk|>v&Cf|c{}M)SPq?Ct z%w)vux2F^c>@}j*2p-p$dZj+?xIsaN(8w_^3fF7#7KH&^-YknaKhHR~x>GlsheDdY zNeripeMb1f=Cxys>R`7-&VQGjdg)gtOijXkbKqPddNse%HcwD9Z9fpXr(QE)o%PnA z{Qe27mQ{N6$eQ=DSDqv%73BLGL?)b|RNY(JWeTQ^X*UCaGFoe(T5ZpY5bPvMmpQRp zuz>D)Fj$lUnmigKJA4-&HRFTXU40|o$aA^W8fjLrz6Gaf?kKRdMt?3Lh--ei&LgP3 zJz!UNpGu&JXE(IWK*qg5ZG4%d1mrQ#bC|MJr0atJBA*;jPb|Gv4xk@e&w?95YA@Ae z)9)(KTY$4!nQhkIEtmA-LsvrKX@z@1(ihop7miBg=F;Uur1}%f%5XNY~s6o1zW07ZxPSJEv+{-1hut(_| zAoq?4Pgg(s6X~l3K2G^sP)gyj1K#>N=zXU5|JCT;G)3bg2M4Vex4G!^yI0{M)yMJC z6AT@rTjjF9JMGM9%*{SACRSYVp#M@qQsr^hYURv+aIio$jDPvXIU47(WlDYLUoHva zdDO(kk1%{|_BD_-fEY;#f{^99l<@F%e#wFcO4nUvWU3hx-W>=(E{FIt@ z6xVL@t$|)%zJJ8KBNSP!;?;8)Z?C;<_xAGO-z0H!;}Zo4?}qs+?s1dF=I|T*=rR6J zeXZmn$w+EU+9&vqZfrczaa^qgrex| z;fNMbDY6;H)%7IN-rVO<<^HHfkx0&d_ zpYWxXeDUPxZwXsIaZF+imsa9Wm}}Yrf_`pPRe#pg=JJ1*yjKiE*BMWnBT&zKc6{9Q zn%HW-4utxO*dsl%U!%@YzfK|>zjvlTDp1q5f|-PZ$i*=}%ENRa@pV}e>>`SVW9r|j zkQgPH`D*XHKME-=pW&cx>=Y);Zo0E=+s&S<7wRzKmkn#)9!p^~(t%Eb`ahg8Oxi@6 z6Mr?yok=xYr6#_4XOi@J$gMwo-cV#DneH3%IrJZzOfF#FY>e9ll|Q%jx@~K;;E3bJ zKK{~n2KM6$eJ?cI5Nstv8o0{rx)56v&Pw}5bYq2yVNh4IaBm`$jGA< z*Z$CdF)mTEs@_1krI_n-@<7sr4wbZ;D}NpeuvfEU?iewFNFQ6+ufTv9Yw|P$jB5!) zy@H{{0+$y78ZFb0CesT*L4cvokdR>>?N30#%cA#hbhuvMMVoMl;D;7bRy)yf^2IT#IUM}N;9 zV|R$^@)Y;5WOKGRoL-osmJg#~Q9~Eh1-?j?M@bcQ&_D6SEd80JHq$GV6BklQ1Ng}S4Bwv>S?S8P|nEmxk+1K4vJIhj3- z4P4rR>v(VJyU;;z!B56yb!GAV%r&{VDdF_3qnZq*Y#Hz_?7tEss|14~qkpDG%6*N% za&WZG?L1Q+tZe6eVslPqFjKK1t;I1Tzsb}cIxzVP_=Sk$%mV4-W0=i6b z9etY!alC|OlZ-LZot<7M*uN2|lL>uI`VKmD6TAW|;$sZ13rNL0*tt9HQ!lR7?hY9q`c3S8cPCSXpaLE#b&=#%vNA%=Qvwn@> z8@d0`IsZv88IV^;%PG3JWpE-NuuBv3)|OC$AVhd3xip(oR8Jd+mRu5*wI2xJ2xFqy zU33mJ+ z(vlj5N>79xh6*#bG|>`Q(C^y9INV$rlJ;9b<3Y^j=&0prwW;F$wNK#{QbrW28Eai7 zghBgaIDb==+3l~OaF)`M$DpK(?1;kcWnxFIMv!q>m(q%dAgmROr5ldVhP#Lhevu5fl@Pj_kkfcPq5t zdZ>m69p6IMyH-G0YC(osxFKJ}I&Phbf|RZpglyfT%S6h4-t$4fs!w$&pF+v0G3{lP zm468OpON#&1sVamSvuhpahR{Wh|y9lFS2lS$x^R9RKxv2!7>~X)(j;jpNr?W;I#H6 z;k*1|84p{Is$`sRrDj?A8X4o5Ht0j$y$=?$(qv9$*XYuKIdqHoNv)wO!MOn)-{QcK z5LJF|lURHynYgU@>{8M0kP3mK!P6DD=YN(tn}TwY_}iGdq1^nb2?WWn1O!5rXkn0ZK&fCv*^H-UmpTl3xCS2 zYk5evALC{|XyXI5vKr||CHXkhS0w%QJG!0e_KgSmVuO`@aXCCMF}-977<=K!+(G&m z;h>=+(F6jas&NT&%I^fz>!*7uBKiY#Uk0={27?@9J)Mz4@wpIuVzA6>mC9UL>w|@) zPKyP*D`O3SxTBsz$6;W2axO1a zE^n}+hupX&x=5;|B~x?f^6WkCO`;wqjAU@Oh<9on34raYPozYVpa9t^keBNd8d{2W zyGQsmDAPfJePi$3J+8<^A{%9JDsfzgM->Q8$m9Si7_0;J|8oPErhh4ge{hioBYGp9 zc9yh0Yc$h78cU~htas8rI)ml2q!g^?m|{EeZDe8debtI`v9NS09 zEg5CY5<)VKg5@{v0H&Vu`aTRo4L_bFBj~M@8xlYd%#e5o^93d@OLL@B@$ccN>{fEv zg4)9{P>?_T0c@_Dy?@Z<{sdxa%t0WF!PP0;^=MDtw&05}Ia2B>ZX?Uql%+U`cWSR$ zc-X6}z+H~8_%zHtsbZF6QuHcV`v8`_@uw?6vgVoOq*D7nx2g|>1AU>GlpsVBbybNv zUT^=1$l8f=>~{&}owYzv^N3q~qa7U|#gb$e`rt$tokn38%74DvkEA&o$+;}*7-<(7 zeBP6`IOO!x8}c%2FE~JzTG8cg+F3!62zfBqqE@xg4GcCNtV&_N{}W?(`2&{GqWN;a z_?1j9tMKQzEC+sN-|jAL5m{k|7H$1#0S6NI5Y-gZnz_niX=DeoUAfO;9ovhN8S$#? zGTToPqA&rG(SIeIZNotOH4?g9%UeA{f!LM&$V^ochbr2Yg}sz2)ji?I8hy3ekr^&DF;nF1i*7 zV7@6No1J!i?>#due^PbM7le_JMHyR4X$q*7%UF&14S$%-K$6IEx72H=YVkfwV=%Ly z7FB!7m16CX@xWqqqK%(|fo>NDF*~RsRbW0#RaVd=FZbdCT5}M#fA=VBn0eAZxsrm1 z(C)uzhZ%8c!?GS6FOKyNqI~);a)Som<%{8;^UOV`oTLX3O$`%%KbtYJss6`vWSREM z6}!fw%zv?^Cb}i*J!(6Qro^u+gB`PXq66bfCl1t7({ZK8RnR#H-;V1t(3ld(D(R(X=EH9NV-tTCA-D&;jdi8vIX zOI_k9b{qI8e+qpydrzuH0gw;t3e4!qz3{-z8=0?p(X z2jeZ0H%L`e1qh`k4i>&#iC)xi`k;1he~z}r-^YByij3r``Y7D;6w2EU)XG!(*|sUU zYVohzB;pg4$QM=AHfFcgJbNM<|(pdCkYj|+X4*twUgG_$f@gFNU zrI{%34ooZFs2;&PAvO;LRI3qWG5P$svO6+o$vc$HKnmP(S0!<$Y|Yxs z724$kYTOL`W#RCY(4^jul_o6Qnt!#GOJ|0Mq@>&&%k2lmdNPDO2BEEzzGY76kj@M0 zIEq;cs>&z6bzbuO4oW7Ox2F&UwfvYkWkLK-d%%eY&OwIMcC}uFc263w`B&pCXwh1# zkUR1?$Uz&#$}84*i(5g;1x;{hbi)IIRK*Kg14AI6ot_I*%sceYY@iiB9DjuQC* z1>{~&zcCZwpA%eO6`{@)$A79KE1l4BpT;yHa~KnQ0RZ8SfbZlF6?kNPMu)p2h7hAq z@jdNwdjJs$)}668R022=hC(t5y8T~aaFSWD7AxKdbLahU+=Lr2MYNb!0r(2nFfrVj zrXb5Al5C@s@}()~4g{=Ip(x^Fnm_*>6t!az%=*t{J)s#6?Fam?R)4iA?xRR$uku>3 z7oUO6#vtAo5jO$u8_wT@+fK21yU8oFAKeX5>_9aaxWt@+j}l?WYRGi@A z{ah69gwnMdS(O*_KJ?l6sqs8Xt2lKb_dpzG%V`Dsrf+@C{Et4Yz(hmE-YkMqFjOd% zSU!)ZY}P*=%qf!KaMYXREPmj8wx$Oo#_+BhzwkYVk`=uF`F}+{)}(U8CI55%)SKpl z_XDx@BP_lEFjkuW8?U6G56J-lgfE($&JTO6|M1o1Q`xvsn>yTTsgzGFiud5dvKm-% zMCM2d6K?5_rCie;>GN>8c|xUfxlR%=b-;DTc`Bkx>r9_1pAf=!dOT1z=0hjDLKPQ- z_8`TCco~$Eoqq|ARkE)Hg*4_qAVb|na*xZp@VT4>Rl!0{Uk2(u<4J#|0^Ktms$oot z2vnpZ-UF{tb!AxX;gpkO-sNK%H5&xb00=ABzihPBaV*P=A02RvOR=RA-=7=S>w^P%CGJ zn>!%1`1s{C5z(imrz=8_WAQkEx3n|0a?Hl1k3dJXC^0-IbMjBMgnZtW6kA@`D!~ru zAIoBF9Re+?ayv)u%T!YV(iLWpzOG;CR_%G9>7b3zIl7193!o>ZjT3zN%5Ax{vECpw z`oL_9LVs~r+(%H)VqMg3;_57jKM8|M)bGw=J-@yNg_1QBP}fBEYtC6|DVZx7)lUf* zn>5J-w9X7$T$96UHpN6i_Bk=_`4+e28m02|lCr(`kP zNk2xFQNp2+2iQ!L6hVL!4l`VAL3DwGUR3L+_>*NPCG=E*X(jGxHF1kjb z%%uwCrFg}fqfS28M1ZGYcKc+M5*f+Wq{&M1af^pL12nhI+nh%yWT}-rg;RBzgo^8J&79Wglk3~jz4r1uIVald;TV$QL9N{5j>+{!N z5@`XW7p>lvIS77`V6jC^dFxEFU_qYxr!`-8jxJx7v|A_)`QAMy_%w8+E`%O6lNLhj z)tnY+EaDbG4S;QgNeGjveL{VVP)N{PrGK=)k9)q0F5E9S$bwOt+D3-toN>Xr8*jyb zA<>8bktZC4U+jJp-OI~iOWxDR2`2t2!!TdbI9Hd$M~3+_m|51lzlVOm*O@)+uOIjV zCfvg--z3akHvNeLsATLWgmEiGMJUI7Ny?jeb1DIc2>kv_1;_~K&Ph1FwC#k*?|&-i zQdShHBqHSSro)f%OU2ReCQti7pM`9bS;8T?&v*kI~aGhTGpOdVZW4F z6Jlwx{D?)|hbGU-rYEP8S3}V)-G6D zu6%E@c5Uf#rQbIv<30gOK;NfKvZ>}@5(XnfdMHnu{^QQrXiwZ@$WgLNtADQZTe9JB zM*ln_V@%E^G;3vhPCmNy-GO87O)odZ9-(Jgj))O#xBkX{BQb_4uXzPL4_EoG)QT&7!7Cbw2xbDuJRC9fbGpPIa~>ub;09K7=pEBzSKZ1X z4nR_4(ROw!Ph|m!PqTR&t$zdIY2k|sHfyMptw#iZb^|_X$$-rTy!hC%Qc9Tufo)b4 zWoWNRcMR>n)_zdH_g9uWPB1|c3AiCf$FCN0+S-^;*B^u8RPeVOVJdYqI`;D`B6lGi zz-a}CA2+#bpVW4);R+2Lu13oLA&8&2T6iHCU1xRz`$X$^s5Vhrvws3(_bMhvum^W> z;0fy(aTsK!tEJ!*tSIFn6i1=Cn>r?TI$~ra8*+K2-Ni+7eTWANh6pwoVVL^*wB_jvDgN#fC1h?5)@pf zO8-@4V)`}urL1nfHah|`p^bo~sUk|AmJ-1qu8IAMjl;{e63j}@G|-^VH^P;+geD+K zpbiV1H)y!|Ok}zbmz5+>`xw z-twsW|EL~EQw?9@3_IZdme-`f#*`aNFEDoW~j`9yQ*m{4s2}A1?C)d{kqh zVGHb2f5bOgmn=1tq~}n zA9ln#Yl?H>Qvep~s-iX&&ax$xK$a05?@tJgF>OX`v{N7x01xJ)f>=f6`0e(Q`B5f? zW^guG^M5~t{0G%5PG=bcR+b_BlIA>?;hsYfe0Hj-R&ISJvsv++m(%99HS^HqHN3~2 zR?}J@)4@3T4?xVk%?|`);G7gxALn(@=t_N9#yW1e6EO(s(c`+{drWFUXr4=PRxl1i zCs4ee4(|Bl(W2I^+1SV0aD00V=j5UJ-FEcMC4V!xx5MiM4FbS9VoW7gl18r_&YDcz zc5ffJv&|3aoZk<0+3^qDf+(;H!bPnaGKh2v#qjd9j*M7K%Ux4<-Y>l9G83)N+r znj^JKml1T|psqpxrT@V+yOiS((BLCYFJmp)c7N)-yS%H!AlOJA(At#a6HB~=#ngW0pk|EyVp zN>d9rW~pe(-zbQ{PX{a2gE;Re~NvJbd_nXUoQ6%~W zreXDMK0P=p_IP*j=y#XW16NBNPUXnML4OQ|M;J!)_-}z?pY}Xn&Nf}l!(PTJi7_}jWn!>z_#&9Ku@3CQSu&^ZWjSiy?eq0v zrW)!t-bOoH{J{jRn4k{-_BDT;aXDt(rTIv?q?1uBU~}z4|A5f?nvEt~iBd%)5r4gd z8#=zR(ZYNP$tg|q5+DPMAhl4z`OF!hpn8>S7n*X-Y*Hu2e5A>DEtmaf|D`%`RJyDx zciQgs=eC#vT(l{SU&U#v@2Qe5qJ_((rA_U4yR4em00#`y_ahWyXtfDkG0q9F%W~UY z7K()aLs5PeS|}&bg3o=EC?|-RzkjdwW)hn!n@%I%u9$VQrB8d2ieua7SAp1rWSwuu zovV2vvOS^MhGMP?S{`y}r~)Gk{Iuyby{)=#+Z}IQP(M}qsnpuIK?TUDwBd-C@_Tn0 zB|bw{x}9*<-y_(*D!H4Onp0|c0St`aAQtmLcCjRfp~`ZzP}Q`rcEB}6C4Z?+*WRxt z))An-zdld|fOd|kyGsivSfTD|9Zej`9u|oHn@>=Ji2qv|s(&P#y0n7nG6~A!mPJal?%@7n#BOrz7HDdAg7bD{|(;q6&r%zsCn?h>3ZHU?27 z!x#lbkw#eWg#9r{X)ws-7D&NZj#Y9FM4{#fHk~bnP8^7ORY|^ULTFK{G!2e@O4_aAbpUkuBbD$m0xYKi=b~07kCp@8 z9u+8d7~2h)i^g#WQ#t%lOi-r=(*eg=7jc7Fx+_E?zB7FRFMs7r76xmJ$8iPR{j?wX zdL`YlbA9JtFJCp?Cz^OSqO&7_q^brC%&J5SIFgV>_h^7CHxWf|AI|K0B&Vh6r7?1W zo%`8&Y;D^fv0&Pa`5g`;&8<*Oq@LfatR>{w9WgQX7Z{dhHDGg^VnCcN)NCjAjB6AgKuRxJPiB+sV*gEPJya{-2DU&Iaa`uzd~W*E=O6i zn6@kJ6lYCV!x$T=P~x%o071Hxp}~EFg8z@ErqdUpWL~>;a?uq9!GjM4?hr5_dbF#I zeN#y3#I9d0&u`d|{m^&nrLVw3Bc}ix@VgJ>?|%=2OflLFa*v}**pzYzCjAdD)QeM! zutN1;$zJ3{V56`KzT>G*P>PDsOoa=k9PWwxw1qH79g($GriFJ_*H>}(#t0tREOcCP zC&%@Hxa86gqz|a~*m#ZfHPec63ZoWv;rLw+wR+KRqOO%*ebgvp#%UPcS^%+->Hq}t z%Q$5i_$lFL==`&p=$red?yOnyM;p<$yl0X=8E- z3S=B!P&BGW5Eo9BwxueV`3q~;YWUe5J98Za@Cu%hw;aB)ehe_S`m?{K7g)N19uoig z5*pyefZ~GofUc%3mgV~K^cW8IZ{y-7KWPf>QOPkEDsmgVhh^`pxpeklxUY~mJAX)g z2QtVLLKv6T-KOna&~(LosJl`w0AZXS7z^hU*{< zy@i#Z2WF(`SocJ)Y~7K#F4Uv|lz)LC8<`p6Sl41wK|p{83bT+v^gZA%)ELzUPK`$* zxIzrM+AN}-xg)wA7I%g_IxFZPpK>Ky3Js3jUYCKMdoS7?G#a_Oc?|F9P>Nm(cz>!b zi{!R3|KTbOwMm+&Gj*`-sAMMR9JSL-+;6Xs>md1=cZXK+(CH6jl*Or|B7Zi(;b>h6 zBI9;Ov#fjg?(nALszV4(`~9Ckf!TC!XN@<#4i160!yZ%B=8eFw@t3QWb%-H* z3)`;Q0eO}h71Er9khglJsYodX!$h{nb$R+|tn17v}hm3c(f!PMJ zW;By$fpL%EqRc_$-82X4HwBKakm}l5XJ}DgVFxyxZ#(W>-b8pL3MS6Z{VvX9h-18q zLlLUJR6+oL_oS44-*?n+=qn0z$i$; zFgT;FRb(f+7_bNR6@Q&B|Bm=F#=h?PGiy@PVk$#Zfq^3}?~8bcHF8%_m#EN%aeW;4 zxHJAYMy%^*8@CZ4bV}yNILuD>gVji5f#2`I8f{#W0H!hzEyg!NENR)I$PgWL+=bh% zGrf4TUa1W0#4f^43DO=i{gfvr1RmqijbK_RzLC0Cf5s2zxPLZz?I$@6k`mzW0`$#8 zXxovzTny1AV%Jg(Hd#7Wp~z({>C?!j*xtMA5=ntc>HcRACA2LTkG`gLsGIZ}6WXI9 z32W$n!Zj~G6Exq}(%5aP^i)Xx%_sLh~V9r`;@134y;yCgP zVcj(F4CPv`goPA?R$b6K)YVO1yHx-ygmrWCrl&q+KxL_|9#&7-x=i)ZTq zXG=7KsuopB%hqb$@=^}_16`YeNLk%A4*Mbe7pO1B8Gn|Zv~%^T=>I<+SU}u+JWTzx@Od9H{`d zmP8*wbvp3RAo~tmsZA;i4XvSr5H}+Mb&$V=usDZdxHmfhIRHBVP#1bp)bnkbZr6wv zAx583?@CaTh+=xzqL$ zfMo)pn5rr`G8lI^#B#G74F`vRtV1qulEyc`>j!GmL>vTTJ4&y1QTM8&NZ$buR`~KvA!Vo(fLn@-`(c*M=@D|u*)_>Z* z(#D5ZBWF2M4Pmm86Q!j2$izGd%(dW*EkBBj465<9O>iU|76y>4i3sczYN)JQ zifC7lr!dtZmKcFfDosoPZ7@T2^9yFAVubl<&fpcO8lf-2AVW%dKEWyT z&GwaZrpcaC&`OIp6wZX=bJoJetd!#*guipC5TOMdO!^qVYTZKOCOF->jepLcV+laLx^;cAp(LeJhAmxaN+I|vDoq;RzY@niTDV-mH zIV*-@cskIE5<>7GyQ&W~3JEtb1!er=OY=lRfj(AP+Ijx~MH4a&`AHkcf|V32^U^-# zy2xOkp|uRhX%EZ`i}pgkR{uyL&er?4*HD%P&1A2nf{@4|fDG#{ZYw)RYZA5{d~g?tbi1y~e7KPjLYlRL9JG%f z!E5=VogWD`Y(X2$Id$}|f{EhbO!4rbpCQ%En<6w1&q_KP@_)EYIA40HE8!Lz@)qE~ zfFP}uh+IYqdk`)7QzXTT7o`T?`X|m5yApsj z10mD3@e6Gzdw=|rum!<1saC;hTb`RnJ<@qrXo8@Lx)h>Bv8~zD3PxfJPku@_Op;j! zU#89nUX=R~iFPTLF_kneXLc|KM$RY>x=hrAi0v-INMGWb%!`!UsKt|fwozp*5(3iG zUWO}AfW1$Y${MrXni^B%GsNFE>dRLIEFJL_WgN}g%zsX39xn213EKoI{uI?3D7T_5 zdnD!-uJ0dCSg>e>QPea$2y)?d-jU!xDjo0Y7)paTacGLYnEuR=@-|opQcs%3S;XMk z0bOkw#2zodDiML#5ZVf9=G-G5*6FF*V4Xx)>-QxB)_Frke{tqNbrGC%S;#4LMuf06 z`H~e7#D5e1YDb4IiCBz{5e!uXF9QpkhH!Yc(tHe+?&VD~#&em27y}Q46kKi%pU~E~ zJBEYL>F@^r54g(&@e8+?B5-xuFAvN-pIn$TU_G10>M*?gVXI|u(uWgGvDA?JQ&|Ek z1yw@?XHNM?D0u||hsu(|t8f7SKLEfI4(J#&cQ#@zEUxDZc}0~r1IoUZ=6rg!|wAOl1G{30nOf1VjudX}+P z7|$%wc=zYS6di%f2IEJ^cAdhSt0H9|DhS& zRb<)(UeB^DD9Fk1f{~V*u`<<@hZ^u*kd}hF3*v7Iq)NJ=B2p!~t2Zn$(eoNOoF-phA(clKDSc}Lfro(Fu%j55{WNK?2UiR zQ~>Pu%9aJn0qqi0JI;5e({rTtgtQe%@Yf5F4TDX9a|LuBhr-Gn&=(CJ6C&Aj-f&^TJ=NOyvG;MmJxPb>~CmVVUc7%!@{4ZEv@Akzw1S>;ICo!K*oA4GFrw4 z!s{l$$!K*d`hFFp%C+&B(d~bA8a{ve929drie|k$ip32BRT!(iUX#pY%uRxTlUZuE zhr{>A3NA}@Od6`m&|1|@Pglf2y7DdDm@!EUb^6H$C+6OS{nla6gUofWYja0m*?gFg z@5JXQtqK+A<&GpJLw+~&=VRX=e6g`cCO2~MtG{9jqA zA}{Af1#B8|(i2F!LKO6+;wsM54r_+gZu19XX zPfsKK-!^C*-1J-JMo}GRNy>j~3oV3J+uU(%F*pVTV`4Sfd^hE?+l-q`JUW;}%0!|a zO)&T0ruqT7U}b37{gK|FN=CiCeQQlnZ(xPBO$7DWT^L2@4M^F4qO}&$Lk+^8+cYP5 zbuG1lnHtu=iS<3m_46B(rp~-97cnU-glpHc2|c|7cRkfC54-Hs)Z2dv{Iq*x==2r* zABx-nR(9h42}A!Trs>t*PM(wCpw)lPx3&t;kBlv}UK}p24zl@?Yf}So;@C50=Mp34 zFYf75#qjF z3|%D%X=kk;OJm7pRaX%Bw={U+q=uOf*`!cOLdYJEflAImFgu|Y80NAt2jeU_)o}%t zbNiIz$_Q63zoR(w;srH49ym$S6M4vE%tSyGVbhnK+C=ul((T`r*VM z)#0?-xkQ4Ghyv$4(N2^1P-?iy!RdA5x9tIcF|q@oxGIz~7T*S2S%FtvLRBPPxT>50 zGF{mt2{Ra?$3=2Db1*7P6Bb#Y*@-!Q&pUKJ&yX?xTO2)_nlM~X5pt&dY={(J6qG%M z{gCqk&7(=M^r(MLF3o0|#2`DhLP3nMKNE^+JFr+RmU|eHo+bFWo!6!7pc0Zxge z%SO@BV^Q<|sV{w&{&hi&-L0v<1_FW}dt@Co&fD|U>~(SPU2H28NMDwE-IQ<2!l}sA zT1y?}eLSOr{NmI&&EU12HsPy=?MltI1iv-zl4xTidIo=J0UaWZY?-~=8V`SEmCb6q zw?mA;dQ^Nbqr4wHVQmh>7b7K;A;d?Ix*3s)!5z>AoIwjWvJt{+}ZM@m$HdXr6ymGI}#bL838t>49sA7Mm(9r}--SU8bm1QqOs{V+!l~ z5!r-87%o&<2|{#`<#dWXf5L2x_TzefWW@U0BRloGot4PRr7z;YFy>dZwb zNQZxqUhg*eBdFV@%A?BL5sYhp{STD%mR|=~Dy{CMspvZ0X4~eH=-`XB#z`IKiW*?k zUrnWUESO%ffB{&ZR=?Y(sPl`rVC`| z_O5~eoiym3xK4n@KHQ)J&cNs;hQ&!Kbi{vUjnDinHd?gE1%76VO!;r7KboRr8OpAJ zzsxM-x@M{f`x09 zI}zlxq1=s>Zk>NwBg?%Zqa7WmI@3+SxQO*OI_iqQ0>5jU@wc!dtP7tn6<~|+)ark_ zqIdz91<;7^<3w0?276YPMe?RCU`9Tc27SWGxnHOeCsJPq*TgM{c=Q7xP~1AS+-dt0 zp`oq#blE|jWyzR-b&98yN1i1fRxH=Y*PLzv@j(Rr4UM)~Q3!8#doJscx~HAvghCe~ zWhhfA%|q`cOQKPG^7RH6Ai4c0+vjG5HDCg&|Lh^S>|w}zF+AwM2YVzT=j@bVoVF`D4a5>tA8yi}gU53A zK{~+Hyq!dcO7Jt3jBAfY2_@NsC4v%g=UhqGA(rHUSQ0f>DItR(2U{$NfJVv}ECVa$ zG{m3|oh@^gMB-~yPARmP2H1a`t(^d`gjoD%NANZtmJ>3Q42aQFH=~Jj5tsX6%aB;T zwDolH3E<=dGYNmOmIHs*z{EL6zs+!JiaA>eo${mei&@{JtIe1spZ#b3=w3wFbO*!I zlBJa`oyt2a6{;fbZfDbMh3P)|Q*v3BXA>&O9+PYa%t1HL%8QxgT#tVhb*l`Dj;?6P zqhbEq!+HhETJTxn(mzkMDczGd0^(>4lb4BH0D_e${dMuw;4l;sL*&SkRDvr;2&)w% z%k7#ZWb#K{76kQ-Hpa`QjEGY`r)V+Rc8`8Flu)w@S1I_^)V@eDcsdhCdFx35BhGqE zG2OB>yvHzwDzQswZTf%sL}42QoV(u;eAmLGTHmS%n&)s*1X!AQPFrDymCRxDV)?Bu zr>9L%0#VC4H_lq1Dp0(&GZdN3 z&s;t~a|uowfisbZ=!rR>rLv~N2PI?5iGO999KeSj3cb-eMHPQX*C=j~NQXUgG1Dmq z5@~v1@!_&8b5ZhWDzYKQR}OW&ktEejG&br9oqa?K+$x}gU@<>M^H77Rh)`dx4Pa}E z$JJ&&xYUnWH{lw3tzvn3%&}qZkF~GUE@dIueH(hnNX-RVo zxo;8fuiu6T*He{aDYsMJz+5=B)IrB0uqhWJ@Tz~t;7*>Prpo;?(~R!4DEZ_FMD&~@ z40I7EsgCG3+my?uVL=QdF(ESCu7`2fPZPg-64CpficH|hCtXALrcTAyzDt+C=F)DK zL$CvxL00T%cXK12K&FOz$T`!lr-K~|CPQu)*$;!hio(_H>j5_#KB@C}6dbYu z!iawz8DMz>@F`Ll*~;S=adi*^1_c;&%#KiAOqvtUqC>wc*|l)i6pq1#>Zo&*)dD z_FZC5#`~AnFaqv;z7odxGBk;Gs1*N*1VMiTvoHVv3MV}hhoc}!F%(So0|cNzgo1+$ z0|AKvf&q_#0)vEs34*&pK`|H*4uhY8A(0rUkO3W*YC&9uo)zwOq@Q-|^JqOx*NWOl z{#Tf<2gpb00C34dA(Lk}B(T-?!Uoc=MiIl>}g*FpVJ5pX8(RNH5AWC!L{tWDVM^$)(G2F&~K$d9xS+fVKHQ(il&`KmhKqn(l z-sWh8C*Xi&1VeEGal#plafG+I(9U@g5OQdN8t)W9|M>vOK>4g1qx0meFS?7G3RE%u zkxifMMT*^n%oRIMXO!M`rhumJI?jK6e)OMtl2{sksVTjf3w{h$C$|=#%v~f}>>;sM z|MvCmiT{&`h~@U|G1Wer3z%^|T5*Rh)Cm|BWNhvo((ITtUy+O4pKALfH#*); z30aZW=@-<#9?8Jauy29(alb^D;?^612gVoOk)eGCkfMDMT`_ijQno|GnSFmlfC?u_ z&b*M*a{RJ_5~h?*e;RnbrsU|yLmdYm*<#}Q^uKR;|C8R335Zz8b)o4=4&R^J_q@j} z=Nl!NEQB5@(q!7lE*Xs(BlFyM`(E6X>xcMgBXa-rPsK7G@X=9fm$ezB4LvGERRggCB#;nt|FcRAY+|#OX^J0rX{%!~5S+5x$X$!+EnX zW39_d|IX?F07csRIK3XL2C{$XVD?WzK>K%w)c)xJ+dr`C;1qm1or!R<_Xfw34_uxC zKI(Sr@Penmfvq@=g<(fgcV!FE>y6v7{jR^vkpYF*uha-0Fe-Ifz@>l67~OPWx2{^v z|KX>tU35umV4#I4=7`+VSUJAfUR8wuDVz*BTY3DS+>tG~cik;3+fKDlwBUF#AO%In z^_IXCaCE)+6NdGO8ULCq3|ltdDy)8!JY5b=v2|O>%oN3DIzMc6+Bqq~<)Hq0*4`hS z)*g-5+UtPqB&DrAfq8#xFWGO8765|-M(|5RElUBM;h7k7r?sOf0-}3{Du!LuTg_i2 zM(Fg>_7|@%%D3_jaa_;jyHRU$F2uJiO$w^L zmNH%3xCZfbPc(mNxu(@3+2iRl9QGb2-Z}!Pez@xf z59oxyOb(by`}$Y+zAxVSL1g&r%_d{;l7l$gsgu)>M`wu$lM@cE zPcQ$dAj>;Ret{yf)ZZrp3J4Ru9(O(;jl3R46a&fz_?Lfd<(P3XJ>A*7`ObuBop0DZ z?MbYfDeYCvw>N08OR44S7Hv@SE}19_wrKO6!4^Yz%Lc>*N`HlXZv&f1_ztXF%tglC zT6b?A-_L`d?BqGyl+&n57gzaffmFp1F3h)+U-U@w_r}bp%YZab>8XSZ7YCEv$51F@ zDL%8vt=oU;YyrO&5HsFT*%;8mCH@JAxfQjX!@rVRlU6ywrWHVrFL&Z?LSbs6Oau%T zf}irnvOwihd^@<-j0Ch5jfY4*g3YQqOM8s6Vij68m-lq*i;5c3`AvoG+a9(Lv-nP% zB|)w(3z6Lnimd@uFDd`^`(y3e7MH){A>D3hwh$CM!lI5Y>75h1*5g00m^kagw zRh_XDfL#2OKp^nEu5KbTVT8#O-)VK%c}`$4oJg zo8*7zf1RigZB#){$X4Z9p-pSP#qm>*G$yfJYT~SjtW=t&E0wJ?`j`aYH zusFhr2$j>=u={Gm4FGdeai32Cv)Dc@#|?0rQ~(3Od-7=o_G5XRA?BTa=-9`&FX~Q0 zD>PL)a#}PA3H;CAc5|F2DN&8p4o7)9c*f|w1O46w7Cp;<%MDF;W-H)&HL-2?KwW<| z@J|vvoMq!q%^3?!t54{SPB=lbB&9VsH-VJk`R&Ie0|`9y+<24%PDOCA04oe3mLUU4$>(5K-gylY&dTKW}Py5!d4M$;;5Cx83(xx z6N3i0LEA%Qp% za^AnV+mQ?a=`T03K%f?KbA#$w&d>`WbY(Cpi^QN4P&H|@i~ExL|BQbQLah=0{jaFN z6kLj-WEfw;%2F~r7ZmjLdn_c{&|;$c~k-6Duvb#{IFKjDksi` z&eeDto*6xch=6Xt!f#l~%ZMRh9W>SG58SK4O>4C+3DL{d%}wBGohON!VmVjXw}|(x zwq`Zpm3D<<4S_oh#jk%(rHy37#5yJZk5gUN>9I_zrW=R+e+O(^XgO{m+JppGlS^d8 z+ssm$Xw~8og%vz>=59`rXpeu3jgqJ_T+ryz!*?b9lOYRin{32G$Od*{!if1w6_K*D zFtfedFjJbBjc1fir}$p-%BF)Ekf7G-RB~mKxYIC@xu!}7w_JY|JXp(jmsFXdmsaN< z>GGY<6dPo0WWhp(?;iF^fvKAs$8^HyF|xqRf$W17Of3k>hICOHSOVVPR^MB=sOLCz zs2e-%keU7-Y>j*A(uCkX%Z+>ogd_fJ(KJF@t|uBj$m6oh)u(dKzuubOI%KDSxzhO~pjfpC>?kk%)ePi=i#;8UvU< zf@iBXB17G7VsIDOB36mZGNk!##L}s# zo~r3(*QtL-;KpbfBT_@oV0BWhIN*?T6e7~W2Re>cak6{+z@Y*5$?lGBZiY=FSGZ^w z&ui`^@ep4p&alH(ce$O6B1n5coo=C0LYyBI_IS9RdkJD>O>R!7PY9f@^rQ(^r>-Hij@1Zy&LA0o_jGoD9kYpy4NKh%jZ z{_UV@*aavq#Af(NW#rerKEuPU_GHhY{wPmn&rk4Ieshy+@`U@$k{GBC9l#L_q+Y+Z z6M-^N1I2zaUedq|ts$oLyq$RPq@{on6f=Jerle#n=*N-);^|4!KFi>Kc^Fy}h6PMn-+f8vuqmAwSMURm?lpUAa-@QBi=-lMjFYCeyCu&Hy~tY z5cY9=|KCIaWLicSZY)?AWpW@1WYG)H+eUra~`h)lmZ)s&%Uvn6bT`xxIAhv+`cnU98_l5axpl1ei%oycs+rG~b!AV8 z8-kFnMp&8TewEj6JvYrdP!vBZ02LpblBe2Ow*_}c`c&~J%?kE@9IOl7*%47Y$65pO zluY8iA)3#UcD1e~@Dkr;%CWD!{Xflu6J3qq)vf^Oh`+nHL4a+9SJEnqG;{53byxu0jGOI{pTOwFc-3L zRIUk>hJH@++F*tfkcz(exued5+b2zQ7$yi(PLNyB(*}GF4~>60I(YzJKg?t%zz>zk zhzm_*#P}4-+4(SkBM4}u+DI3`qLp>ntFlcahXP*{z)ZlMX;ComEQ|xdpVpevfwNdJ z?uY#F6cs*vBB%6BqYEtcd4hcyM9 z`~~4KMF4!f1)G15kE=czwF_w%CZ1+Ei^Evq4jNt<*n!=<^+ZZ
mOIZ3xEW~i!9nQyUc!EE6hEF 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

  • Ni#U~JUa;K?Ai^*YKG*%gZuu=eOllE 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, status: PatchApplyStatus, } | { "type": "mcpToolCall", id: string, server: string, tool: string, status: McpToolCallStatus, arguments: JsonValue, appContext: McpToolCallAppContext | null, +durationMs: number | null, } | { "type": "fileChange", id: string, changes: Array, status: PatchApplyStatus, } | { "type": "mcpToolCall", id: string, server: string, +/** + * Registration scope, not necessarily the server's execution environment. + */ +environmentId: string | null, tool: string, status: McpToolCallStatus, arguments: JsonValue, appContext: McpToolCallAppContext | null, /** * Legacy compatibility field; prefer `mcpAppUi.resourceUri` when available. */ diff --git a/codex-rs/app-server-protocol/src/export.rs b/codex-rs/app-server-protocol/src/export.rs index 7a8bd79656..979eba47d8 100644 --- a/codex-rs/app-server-protocol/src/export.rs +++ b/codex-rs/app-server-protocol/src/export.rs @@ -2437,6 +2437,8 @@ mod tests { && matches!(field_prefix.trim(), "startedAtMs?" | "completedAtMs?")) || (path == Path::new("v2/McpServerOauthLoginCompletedNotification.ts") && field_prefix.trim() == "loginId?") + || (path == Path::new("v2/McpServerStatus.ts") + && field_prefix.trim() == "environmentId?") || (path == Path::new("v2/ProcessExitedNotification.ts") && field_prefix.trim() == "outputDrainTimedOut?") || (path == Path::new("v2/MisalignmentErrorDetails.ts") diff --git a/codex-rs/app-server-protocol/src/protocol/common.rs b/codex-rs/app-server-protocol/src/protocol/common.rs index 52ed76c606..16c96b79ad 100644 --- a/codex-rs/app-server-protocol/src/protocol/common.rs +++ b/codex-rs/app-server-protocol/src/protocol/common.rs @@ -2586,6 +2586,7 @@ mod tests { let mcp_oauth = ClientRequest::McpServerOauthLogin { request_id: request_id(), params: v2::McpServerOauthLoginParams { + environment_id: None, name: "server-a".to_string(), thread_id: None, client_registration: None, @@ -2603,6 +2604,7 @@ mod tests { let mcp_resource_read = ClientRequest::McpResourceRead { request_id: request_id(), params: v2::McpResourceReadParams { + environment_id: None, meta: None, thread_id: Some("thread-1".to_string()), origin_call_id: None, @@ -2799,6 +2801,7 @@ mod tests { let mcp_resource_read = ClientRequest::McpResourceRead { request_id: request_id(), params: v2::McpResourceReadParams { + environment_id: None, meta: None, thread_id: None, origin_call_id: None, @@ -3193,6 +3196,7 @@ mod tests { thread_id: "thr_123".to_string(), turn_id: Some("turn_123".to_string()), server_name: "codex_apps".to_string(), + environment_id: None, request: v2::McpServerElicitationRequest::Form { meta: Some(json!({ "suggestion_id": "request_plugin_install_install-github" @@ -3214,6 +3218,7 @@ mod tests { "threadId": "thr_123", "turnId": "turn_123", "serverName": "codex_apps", + "environmentId": null, "mode": "form", "_meta": { "suggestion_id": "request_plugin_install_install-github" diff --git a/codex-rs/app-server-protocol/src/protocol/thread_history.rs b/codex-rs/app-server-protocol/src/protocol/thread_history.rs index c64c81e11a..3bc2409bba 100644 --- a/codex-rs/app-server-protocol/src/protocol/thread_history.rs +++ b/codex-rs/app-server-protocol/src/protocol/thread_history.rs @@ -961,6 +961,7 @@ impl ThreadHistoryBuilder { let item = ThreadItemPayload::McpToolCall { id: payload.call_id.clone(), server: payload.invocation.server.clone(), + environment_id: payload.invocation.environment_id.clone(), tool: payload.invocation.tool.clone(), status: McpToolCallStatus::InProgress, arguments: payload @@ -1019,6 +1020,7 @@ impl ThreadHistoryBuilder { let item = ThreadItemPayload::McpToolCall { id: payload.call_id.clone(), server: payload.invocation.server.clone(), + environment_id: payload.invocation.environment_id.clone(), tool: payload.invocation.tool.clone(), status, arguments: payload @@ -3590,6 +3592,7 @@ mod tests { call_id: "mcp-1".into(), invocation: McpInvocation { server: "docs".into(), + environment_id: None, tool: "lookup".into(), arguments: Some(serde_json::json!({"id":"123"})), }, @@ -3655,6 +3658,7 @@ mod tests { ThreadItemPayload::McpToolCall { id: "mcp-1".into(), server: "docs".into(), + environment_id: None, tool: "lookup".into(), status: McpToolCallStatus::Failed, arguments: serde_json::json!({"id":"123"}), @@ -3689,6 +3693,7 @@ mod tests { call_id: "mcp-1".into(), invocation: McpInvocation { server: "docs".into(), + environment_id: None, tool: "lookup".into(), arguments: Some(serde_json::json!({"id":"123"})), }, @@ -3726,6 +3731,7 @@ mod tests { ThreadItemPayload::McpToolCall { id: "mcp-1".into(), server: "docs".into(), + environment_id: None, tool: "lookup".into(), status: McpToolCallStatus::Completed, arguments: serde_json::json!({"id":"123"}), @@ -4135,6 +4141,7 @@ mod tests { item: CoreTurnItem::McpToolCall(McpToolCallItem { id: "mcp-1".into(), server: "slack".into(), + environment_id: None, tool: "search".into(), arguments: serde_json::json!({"query": "incident"}), connector_id: None, diff --git a/codex-rs/app-server-protocol/src/protocol/v2/item.rs b/codex-rs/app-server-protocol/src/protocol/v2/item.rs index 932212343c..c4eef0021d 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/item.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/item.rs @@ -422,6 +422,8 @@ pub enum ThreadItemPayload { McpToolCall { id: String, server: String, + /// Registration scope, not necessarily the server's execution environment. + environment_id: Option, tool: String, status: McpToolCallStatus, arguments: JsonValue, @@ -1129,6 +1131,7 @@ impl From for ThreadItemPayload { Self::McpToolCall { id: mcp.id, server: mcp.server, + environment_id: mcp.environment_id, tool: mcp.tool, status: McpToolCallStatus::from(mcp.status), arguments: mcp.arguments, diff --git a/codex-rs/app-server-protocol/src/protocol/v2/mcp.rs b/codex-rs/app-server-protocol/src/protocol/v2/mcp.rs index d10695dc92..ca4402eb60 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/mcp.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/mcp.rs @@ -63,6 +63,10 @@ pub struct ListMcpServerStatusParams { /// Limit discovery to one server. With a thread ID, reuse that thread's MCP connection. #[ts(optional = nullable)] pub server_name: Option, + /// Select this environment's registration. Requires `serverName` and `threadId`. + /// When omitted, a named request uses the same server as older clients. + #[ts(optional = nullable)] + pub environment_id: Option, } #[derive(Serialize, Deserialize, Debug, Clone, Copy, PartialEq, Eq, JsonSchema, TS)] @@ -78,6 +82,10 @@ pub enum McpServerStatusDetail { #[ts(export_to = "v2/")] pub struct McpServerStatus { pub name: String, + /// Environment that contributed this registration; null for a thread-wide server. + /// Older servers omit this field. + #[ts(optional, as = "Option>")] + pub environment_id: Option, /// Current thread-runtime connection state; null when unavailable or the configuration changed. pub runtime_status: Option, pub plugin_id: Option, @@ -122,6 +130,9 @@ pub struct McpResourceReadParams { #[ts(optional = nullable)] pub origin_call_id: Option, pub server: String, + /// Exact registration scope; omission preserves legacy name-only selection. + #[ts(optional = nullable)] + pub environment_id: Option, pub uri: String, #[ts(optional = nullable)] pub connector_id: Option, @@ -207,6 +218,9 @@ pub struct McpServerEventStreamNotification { pub struct McpServerToolCallParams { pub thread_id: String, pub server: String, + /// Exact registration scope; omission preserves legacy name-only selection. + #[ts(optional = nullable)] + pub environment_id: Option, pub tool: String, #[serde(default, skip_serializing_if = "Option::is_none")] #[ts(optional)] @@ -299,6 +313,9 @@ pub struct McpServerRefreshResponse {} #[ts(export_to = "v2/")] pub struct McpServerOauthLoginParams { pub name: String, + /// Exact registration scope; omission preserves legacy name-only selection. + #[ts(optional = nullable)] + pub environment_id: Option, #[ts(optional = nullable)] pub thread_id: Option, /// Registration strategy for this login only; omission selects automatic discovery. @@ -374,6 +391,8 @@ pub enum McpServerStartupState { pub struct McpServerStatusUpdatedNotification { pub thread_id: Option, pub name: String, + /// Registration scope, not necessarily the server's execution environment. + pub environment_id: Option, pub status: McpServerStartupState, pub error: Option, pub failure_reason: Option, @@ -433,6 +452,8 @@ pub struct McpServerElicitationRequestParams { /// elicitation itself. pub turn_id: Option, pub server_name: String, + /// Registration scope, not necessarily the server's execution environment. + pub environment_id: Option, #[serde(flatten)] #[experimental(nested)] pub request: McpServerElicitationRequest, diff --git a/codex-rs/app-server-protocol/src/protocol/v2/tests.rs b/codex-rs/app-server-protocol/src/protocol/v2/tests.rs index c3b8f01786..ef422c214f 100644 --- a/codex-rs/app-server-protocol/src/protocol/v2/tests.rs +++ b/codex-rs/app-server-protocol/src/protocol/v2/tests.rs @@ -2694,6 +2694,7 @@ fn mcp_server_elicitation_response_serializes_nullable_content() { fn mcp_server_status_serializes_absent_server_info_as_null() { let response = ListMcpServerStatusResponse { data: vec![McpServerStatus { + environment_id: None, tool_list_meta: None, server_capabilities: None, tools_error: None, @@ -2715,6 +2716,7 @@ fn mcp_server_status_serializes_absent_server_info_as_null() { json!({ "data": [{ "name": "not-ready", + "environmentId": null, "runtimeStatus": null, "pluginId": null, "httpOrigin": null, @@ -2747,6 +2749,7 @@ fn mcp_server_status_accepts_older_inventory_without_runtime_status() { assert_eq!( status, McpServerStatus { + environment_id: None, tool_list_meta: None, server_capabilities: None, tools_error: None, @@ -2775,6 +2778,7 @@ fn mcp_server_status_updated_accepts_missing_thread_id() { let expected = McpServerStatusUpdatedNotification { thread_id: None, name: "optional_broken".to_string(), + environment_id: None, status: McpServerStartupState::Failed, error: Some("handshake failed".to_string()), failure_reason: None, @@ -2785,6 +2789,7 @@ fn mcp_server_status_updated_accepts_missing_thread_id() { json!({ "threadId": null, "name": "optional_broken", + "environmentId": null, "status": "failed", "error": "handshake failed", "failureReason": null, @@ -2798,6 +2803,7 @@ fn mcp_server_status_updated_serializes_failure_reason() { ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { thread_id: Some("thread-1".to_string()), name: "expired-oauth".to_string(), + environment_id: Some("remote".to_string()), status: McpServerStartupState::Failed, error: Some("OAuth credentials expired".to_string()), failure_reason: Some(McpServerStartupFailureReason::ReauthenticationRequired), @@ -2810,6 +2816,7 @@ fn mcp_server_status_updated_serializes_failure_reason() { "params": { "threadId": "thread-1", "name": "expired-oauth", + "environmentId": "remote", "status": "failed", "error": "OAuth credentials expired", "failureReason": "reauthenticationRequired", @@ -2822,6 +2829,7 @@ fn mcp_server_status_updated_serializes_failure_reason() { fn mcp_server_status_serializes_absent_server_info_metadata_as_null() { let response = ListMcpServerStatusResponse { data: vec![McpServerStatus { + environment_id: None, tool_list_meta: None, server_capabilities: None, tools_error: None, @@ -2850,6 +2858,7 @@ fn mcp_server_status_serializes_absent_server_info_metadata_as_null() { json!({ "data": [{ "name": "initialized", + "environmentId": null, "runtimeStatus": null, "pluginId": "lookup@test", "httpOrigin": null, @@ -3714,6 +3723,7 @@ fn core_turn_item_into_thread_item_converts_supported_variants() { let mcp_tool_call_item = TurnItem::McpToolCall(McpToolCallItem { id: "mcp-1".to_string(), server: "server".to_string(), + environment_id: Some("remote".to_string()), tool: "tool".to_string(), arguments: json!({"arg": "value"}), connector_id: Some("calendar".to_string()), @@ -3735,6 +3745,7 @@ fn core_turn_item_into_thread_item_converts_supported_variants() { ThreadItemPayload::McpToolCall { id: "mcp-1".to_string(), server: "server".to_string(), + environment_id: Some("remote".to_string()), tool: "tool".to_string(), status: McpToolCallStatus::InProgress, arguments: json!({"arg": "value"}), @@ -3758,6 +3769,7 @@ fn core_turn_item_into_thread_item_converts_supported_variants() { let completed_mcp_tool_call_item = TurnItem::McpToolCall(McpToolCallItem { id: "mcp-2".to_string(), server: "server".to_string(), + environment_id: None, tool: "tool".to_string(), arguments: JsonValue::Null, connector_id: None, @@ -3784,6 +3796,7 @@ fn core_turn_item_into_thread_item_converts_supported_variants() { ThreadItemPayload::McpToolCall { id: "mcp-2".to_string(), server: "server".to_string(), + environment_id: None, tool: "tool".to_string(), status: McpToolCallStatus::Completed, arguments: JsonValue::Null, @@ -3821,6 +3834,7 @@ fn mcp_tool_call_app_context_serializes_connector_id() { let item = ThreadItemPayload::McpToolCall { id: "mcp-1".to_string(), server: "codex_apps".to_string(), + environment_id: None, tool: "calendar.create_event".to_string(), status: McpToolCallStatus::InProgress, arguments: json!({}), @@ -3846,6 +3860,7 @@ fn mcp_tool_call_app_context_serializes_connector_id() { "type": "mcpToolCall", "id": "mcp-1", "server": "codex_apps", + "environmentId": null, "tool": "calendar.create_event", "status": "inProgress", "arguments": {}, diff --git a/codex-rs/app-server/BUILD.bazel b/codex-rs/app-server/BUILD.bazel index 051a7dd8e4..de87d46d2a 100644 --- a/codex-rs/app-server/BUILD.bazel +++ b/codex-rs/app-server/BUILD.bazel @@ -6,12 +6,10 @@ codex_rust_crate( crate_name = "codex_app_server", extra_binaries = [ "//codex-rs/bwrap:bwrap", + "//codex-rs/cli:codex", "//codex-rs/code-mode-host:codex-code-mode-host", "//codex-rs/rmcp-client:test_stdio_server", ], - extra_binaries_non_windows = [ - "//codex-rs/cli:codex", - ], integration_test_timeout = "long", run_tests_with_wine_exec = True, test_shard_counts = { diff --git a/codex-rs/app-server/src/bespoke_event_handling.rs b/codex-rs/app-server/src/bespoke_event_handling.rs index 485f8e1445..dd99b3cd41 100644 --- a/codex-rs/app-server/src/bespoke_event_handling.rs +++ b/codex-rs/app-server/src/bespoke_event_handling.rs @@ -226,6 +226,7 @@ pub(crate) async fn apply_bespoke_event_handling( let notification = McpServerStatusUpdatedNotification { thread_id: Some(conversation_id.to_string()), name: update.server, + environment_id: update.environment_id, status, error, failure_reason, @@ -941,6 +942,7 @@ pub(crate) async fn apply_bespoke_event_handling( thread_id: conversation_id.to_string(), turn_id, server_name: request.server_name.clone(), + environment_id: request.environment_id.clone(), request: request_body, }; let (pending_request_id, rx) = outgoing diff --git a/codex-rs/app-server/src/request_processors/mcp_processor.rs b/codex-rs/app-server/src/request_processors/mcp_processor.rs index 07134fe3ec..bb42671554 100644 --- a/codex-rs/app-server/src/request_processors/mcp_processor.rs +++ b/codex-rs/app-server/src/request_processors/mcp_processor.rs @@ -137,6 +137,7 @@ impl McpRequestProcessor { ) -> Result { let McpServerOauthLoginParams { name, + environment_id, thread_id, client_registration, scopes, @@ -165,13 +166,12 @@ impl McpRequestProcessor { } }; let effective_servers = codex_mcp::effective_mcp_servers(&mcp_config, auth.as_ref()); - let Some((key, server)) = mcp_config + let key = mcp_config .mcp_server_catalog - .resolve_server_name(&name) - .and_then(|key| effective_servers.get(key).map(|server| (key, server))) - else { + .resolve_server_key(&name, environment_id.as_deref()); + let Some(server) = effective_servers.get(&key) else { return Err(invalid_request(format!( - "No MCP server named '{name}' found." + "No MCP server named '{key}' found." ))); }; let redirect_mode = if server.is_agent_plugin() { @@ -417,12 +417,22 @@ impl McpRequestProcessor { (thread.as_ref(), params.server_name.as_deref()) { thread - .mcp_server_status_snapshot(server, detail, /*expected_registration*/ None) + .mcp_server_status_snapshot( + server, + params.environment_id.as_deref(), + detail, + /*expected_registration*/ None, + ) .await .map_err(|error| { internal_error(format!("failed to read MCP server status: {error:#}")) })? } else { + if params.environment_id.is_some() { + return Err(invalid_request( + "environmentId requires serverName and threadId", + )); + } let config = match thread.as_ref() { Some(thread) => { let thread_config = thread.config().await; @@ -455,6 +465,11 @@ impl McpRequestProcessor { ), ), }; + let selected_server = params.server_name.as_deref().map(|name| { + mcp_config + .mcp_server_catalog + .resolve_server_key(name, /*environment_id*/ None) + }); let mut snapshot = collect_mcp_server_status_snapshot_with_detail( &mcp_config, auth.as_ref(), @@ -464,7 +479,7 @@ impl McpRequestProcessor { mcp_manager.codex_apps_tools_cache(), mcp_manager.tool_catalog_cache(), detail, - params.server_name.as_deref(), + selected_server.as_ref(), ) .await; if mcp_config.xaa_enabled @@ -472,16 +487,18 @@ impl McpRequestProcessor { { // EMA can only use its admitted thread connection. Keep ordinary // status discovery unchanged and replace the threadless EMA results. - for (name, server) in mcp_config.mcp_server_catalog.configured_servers() { - if !matches!(server.auth, McpServerAuth::EmaAuth) { + for (key, server) in mcp_config.mcp_server_catalog.servers() { + if !matches!(server.config().auth, McpServerAuth::EmaAuth) { continue; } - let Some(key) = mcp_config.mcp_server_catalog.resolve_server_name(&name) else { - continue; - }; - let registration = mcp_config.mcp_server_catalog.server(key); - let (selected_config, mut selected) = thread - .mcp_server_status_snapshot(&name, detail, registration) + let registration = Some(server); + let (selected_config, selected) = thread + .mcp_server_status_snapshot( + key.name(), + key.scoped_environment_id(), + detail, + registration, + ) .await .map_err(|error| { internal_error(format!("failed to read MCP server status: {error:#}")) @@ -489,27 +506,25 @@ impl McpRequestProcessor { if selected_config.mcp_server_catalog.server(key) != registration { continue; } - snapshot.server_infos.remove(&name); + snapshot.server_infos.remove(key); snapshot.server_infos.extend(selected.server_infos); - snapshot.server_capabilities.remove(&name); - if let Some(capabilities) = selected.server_capabilities.remove(&name) { - snapshot - .server_capabilities - .insert(name.clone(), capabilities); - } - snapshot.tools_by_server.remove(&name); + snapshot.server_capabilities.remove(key); + snapshot + .server_capabilities + .extend(selected.server_capabilities); + snapshot.tools_by_server.remove(key); snapshot.tools_by_server.extend(selected.tools_by_server); - snapshot.tool_list_meta.remove(&name); + snapshot.tool_list_meta.remove(key); snapshot.tool_list_meta.extend(selected.tool_list_meta); - snapshot.tools_errors.remove(&name); + snapshot.tools_errors.remove(key); snapshot.tools_errors.extend(selected.tools_errors); - snapshot.resources.remove(&name); + snapshot.resources.remove(key); snapshot.resources.extend(selected.resources); - snapshot.resource_templates.remove(&name); + snapshot.resource_templates.remove(key); snapshot .resource_templates .extend(selected.resource_templates); - snapshot.auth_statuses.remove(&name); + snapshot.auth_statuses.remove(key); snapshot.auth_statuses.extend(selected.auth_statuses); } } @@ -529,26 +544,27 @@ impl McpRequestProcessor { mut resources, mut resource_templates, mut auth_statuses, - mut server_names, + mut server_keys, } = snapshot; - server_names.extend(runtime_statuses.keys().cloned()); - server_names.extend( + server_keys.extend(runtime_statuses.keys().cloned()); + server_keys.extend( auth_statuses .keys() .cloned() .chain(resources.keys().cloned()) .chain(resource_templates.keys().cloned()), ); - server_names.sort(); - server_names.dedup(); - server_names.retain(|name| { - params - .server_name - .as_deref() - .is_none_or(|server| name == server) + server_keys.sort(); + server_keys.dedup(); + server_keys.retain(|key| { + params.server_name.as_deref().is_none_or(|server| { + *key == mcp_config + .mcp_server_catalog + .resolve_server_key(server, params.environment_id.as_deref()) + }) }); - let total = server_names.len(); + let total = server_keys.len(); let limit = params.limit.unwrap_or(total as u32).max(1) as usize; let effective_limit = limit.min(total); let start = match params.cursor { @@ -567,15 +583,14 @@ impl McpRequestProcessor { let end = start.saturating_add(effective_limit).min(total); - let data: Vec = server_names[start..end] + let data: Vec = server_keys[start..end] .iter() - .map(|name| McpServerStatus { - name: name.clone(), - runtime_status: runtime_statuses.get(name).copied().map(Into::into), - plugin_id: mcp_config - .mcp_server_catalog - .server_by_name(name) - .and_then(|server| match server.source() { + .map(|key| McpServerStatus { + name: key.name().to_owned(), + environment_id: key.scoped_environment_id().map(str::to_owned), + runtime_status: runtime_statuses.get(key).copied().map(Into::into), + plugin_id: mcp_config.mcp_server_catalog.server(key).and_then( + |server| match server.source() { McpServerSource::Plugin(plugin) | McpServerSource::SelectedPlugin(plugin) => { Some(plugin.plugin_id().to_owned()) @@ -583,9 +598,12 @@ impl McpRequestProcessor { McpServerSource::Config | McpServerSource::Compatibility { .. } | McpServerSource::Extension { .. } => None, - }), - http_origin: mcp_config.mcp_server_catalog.server_by_name(name).and_then( - |server| match &server.config().transport { + }, + ), + http_origin: mcp_config + .mcp_server_catalog + .server(key) + .and_then(|server| match &server.config().transport { McpServerTransportConfig::StreamableHttp { url, .. } => { url::Url::parse(url).ok().and_then(|url| { matches!(url.scheme(), "http" | "https") @@ -593,17 +611,16 @@ impl McpRequestProcessor { }) } McpServerTransportConfig::Stdio { .. } => None, - }, - ), - server_info: server_infos.remove(name), - server_capabilities: server_capabilities.remove(name), - tool_list_meta: tool_list_meta.remove(name).map(Arc::unwrap_or_clone), - tools: tools_by_server.remove(name).unwrap_or_default(), - tools_error: tools_errors.remove(name), - resources: resources.remove(name).unwrap_or_default(), - resource_templates: resource_templates.remove(name).unwrap_or_default(), + }), + server_info: server_infos.remove(key), + server_capabilities: server_capabilities.remove(key), + tool_list_meta: tool_list_meta.remove(key).map(Arc::unwrap_or_clone), + tools: tools_by_server.remove(key).unwrap_or_default(), + tools_error: tools_errors.remove(key), + resources: resources.remove(key).unwrap_or_default(), + resource_templates: resource_templates.remove(key).unwrap_or_default(), auth_status: auth_statuses - .remove(name) + .remove(key) .unwrap_or(CoreMcpAuthStatus::Unsupported) .into(), }) @@ -629,6 +646,7 @@ impl McpRequestProcessor { thread_id, origin_call_id, server, + environment_id, uri, connector_id, target, @@ -636,6 +654,11 @@ impl McpRequestProcessor { let mut resource_params = ReadResourceRequestParams::new(uri); let mut meta = meta.unwrap_or_default(); let is_codex_apps = server == codex_mcp::CODEX_APPS_MCP_SERVER_NAME; + if is_codex_apps && origin_call_id.is_some() && environment_id.is_some() { + return Err(invalid_request( + "originCallId requires the unscoped codex_apps registration", + )); + } let reserved_key = meta.iter().find_map(|(key, value)| match key.as_str() { "x-codex-turn-metadata" | MCP_THREAD_ID_META_KEY @@ -664,6 +687,7 @@ impl McpRequestProcessor { && let Some(target) = target { if !is_codex_apps + || environment_id.is_some() || target.connector_id.trim().is_empty() || target .link_id @@ -671,7 +695,7 @@ impl McpRequestProcessor { .is_some_and(|id| id.trim().is_empty() || id.starts_with("synthetic_link::")) { return Err(invalid_request( - "target requires codex_apps, a connectorId, and a real linkId or null", + "target requires unscoped codex_apps, a connectorId, and a real linkId or null", )); } meta.insert( @@ -696,7 +720,11 @@ impl McpRequestProcessor { .read_mcp_resource_for_call(call_id, resource_params) .await } - None => thread.read_mcp_resource(&server, resource_params).await, + None => { + thread + .read_mcp_resource(&server, environment_id.as_deref(), resource_params) + .await + } }; Self::send_mcp_resource_read_response( outgoing, @@ -741,6 +769,7 @@ impl McpRequestProcessor { codex_apps_tools_cache, tool_catalog_cache, &server, + environment_id.as_deref(), resource_params, ) .await @@ -793,7 +822,13 @@ impl McpRequestProcessor { let task = async move { let result = thread - .call_mcp_tool(¶ms.server, ¶ms.tool, params.arguments, meta) + .call_mcp_tool( + ¶ms.server, + params.environment_id.as_deref(), + ¶ms.tool, + params.arguments, + meta, + ) .await .map(McpServerToolCallResponse::from) .map_err(mcp_operation_error); diff --git a/codex-rs/app-server/src/request_processors/thread_resume_redaction.rs b/codex-rs/app-server/src/request_processors/thread_resume_redaction.rs index 8ae17d9a13..6c2e876591 100644 --- a/codex-rs/app-server/src/request_processors/thread_resume_redaction.rs +++ b/codex-rs/app-server/src/request_processors/thread_resume_redaction.rs @@ -83,6 +83,7 @@ mod tests { ThreadItemPayload::McpToolCall { id: "mcp-1".to_string(), server: "docs".to_string(), + environment_id: None, tool: "lookup".to_string(), status: McpToolCallStatus::Completed, arguments: serde_json::json!({"secret":"argument"}), @@ -147,6 +148,7 @@ mod tests { ThreadItemPayload::McpToolCall { id: "mcp-1".to_string(), server: "docs".to_string(), + environment_id: None, tool: "lookup".to_string(), status: McpToolCallStatus::Completed, arguments: JsonValue::String(REDACTED_PAYLOAD.to_string()), @@ -173,6 +175,7 @@ mod tests { let mut thread = test_thread(vec![ThreadItemPayload::McpToolCall { id: "mcp-1".to_string(), server: "docs".to_string(), + environment_id: None, tool: "lookup".to_string(), status: McpToolCallStatus::Failed, arguments: serde_json::json!({"secret":"argument"}), @@ -195,6 +198,7 @@ mod tests { ThreadItemPayload::McpToolCall { id: "mcp-1".to_string(), server: "docs".to_string(), + environment_id: None, tool: "lookup".to_string(), status: McpToolCallStatus::Failed, arguments: JsonValue::String(REDACTED_PAYLOAD.to_string()), diff --git a/codex-rs/app-server/src/user_verification_activation_tests.rs b/codex-rs/app-server/src/user_verification_activation_tests.rs index 336a581292..18f93cde80 100644 --- a/codex-rs/app-server/src/user_verification_activation_tests.rs +++ b/codex-rs/app-server/src/user_verification_activation_tests.rs @@ -77,6 +77,7 @@ async fn user_verification_initialize_owns_advertisement_and_eligibility() -> Re thread_id: thread_id.to_string(), turn_id: None, server_name: "codex_apps".into(), + environment_id: None, request: rpc::McpServerElicitationRequest::UserVerification { meta: None, challenge: "AQ".into(), diff --git a/codex-rs/app-server/src/user_verification_connection_tests.rs b/codex-rs/app-server/src/user_verification_connection_tests.rs index 15ad705e54..d999cae31b 100644 --- a/codex-rs/app-server/src/user_verification_connection_tests.rs +++ b/codex-rs/app-server/src/user_verification_connection_tests.rs @@ -23,6 +23,7 @@ fn request() -> rpc::ServerRequestPayload { thread_id: ThreadId::new().to_string(), turn_id: None, server_name: "codex_apps".into(), + environment_id: None, request: rpc::McpServerElicitationRequest::UserVerification { meta: None, title: "Approve".into(), diff --git a/codex-rs/app-server/src/user_verification_ownership_tests.rs b/codex-rs/app-server/src/user_verification_ownership_tests.rs index 219868795a..4de68d3af5 100644 --- a/codex-rs/app-server/src/user_verification_ownership_tests.rs +++ b/codex-rs/app-server/src/user_verification_ownership_tests.rs @@ -17,6 +17,7 @@ fn request(thread_id: ThreadId) -> ServerRequestPayload { thread_id: thread_id.to_string(), turn_id: Some("turn-1".into()), server_name: "plugin-service".into(), + environment_id: None, request: McpServerElicitationRequest::UserVerification { meta: None, title: "Approve".into(), diff --git a/codex-rs/app-server/tests/suite/v2/curated_mcp_sync.rs b/codex-rs/app-server/tests/suite/v2/curated_mcp_sync.rs index cecf285620..20a5502b9f 100644 --- a/codex-rs/app-server/tests/suite/v2/curated_mcp_sync.rs +++ b/codex-rs/app-server/tests/suite/v2/curated_mcp_sync.rs @@ -239,6 +239,7 @@ async fn existing_thread_loads_api_curated_mcp_after_auth_switch_sync() -> Resul .request(|request_id| ClientRequest::McpServerToolCall { request_id, params: McpServerToolCallParams { + environment_id: None, thread_id: thread_id.clone(), server: TEST_SERVER_NAME.to_string(), tool: TEST_TOOL_NAME.to_string(), diff --git a/codex-rs/app-server/tests/suite/v2/daybreak_access.rs b/codex-rs/app-server/tests/suite/v2/daybreak_access.rs index c61b973854..21930b3d5a 100644 --- a/codex-rs/app-server/tests/suite/v2/daybreak_access.rs +++ b/codex-rs/app-server/tests/suite/v2/daybreak_access.rs @@ -205,6 +205,7 @@ async fn daybreak_access_respects_plugin_provenance(case: AccessCall) -> Result< .request(|request_id| ClientRequest::McpServerToolCall { request_id, params: McpServerToolCallParams { + environment_id: None, thread_id: thread.id.clone(), server: "sample".to_string(), tool: "get_daybreak_access".to_string(), diff --git a/codex-rs/app-server/tests/suite/v2/executor_mcp.rs b/codex-rs/app-server/tests/suite/v2/executor_mcp.rs index bad020ce4b..3c8177a611 100644 --- a/codex-rs/app-server/tests/suite/v2/executor_mcp.rs +++ b/codex-rs/app-server/tests/suite/v2/executor_mcp.rs @@ -1382,6 +1382,7 @@ startup_timeout_sec = 10 let request_id = app_server .send_mcp_server_tool_call_request(McpServerToolCallParams { + environment_id: None, thread_id: selected_thread.clone(), server: HTTP_MCP_SERVER_NAME.to_string(), tool: "echo".to_string(), @@ -1398,6 +1399,7 @@ startup_timeout_sec = 10 let request_id = app_server .send_mcp_server_tool_call_request(McpServerToolCallParams { + environment_id: None, thread_id: selected_thread.clone(), server: OAUTH_MCP_SERVER_NAME.to_string(), tool: "echo".to_string(), @@ -1443,6 +1445,7 @@ startup_timeout_sec = 10 let request_id = app_server .send_mcp_server_tool_call_request(McpServerToolCallParams { + environment_id: None, thread_id: selected_thread.clone(), server: REFRESH_PROBE_SERVER_NAME.to_string(), tool: "echo".to_string(), @@ -1562,6 +1565,7 @@ async fn mcp_server_statuses( ) -> Result> { let request_id = app_server .send_list_mcp_server_status_request(ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, diff --git a/codex-rs/app-server/tests/suite/v2/executor_skills_spawn_tests.rs b/codex-rs/app-server/tests/suite/v2/executor_skills_spawn_tests.rs index 129006b3d2..8f387396cc 100644 --- a/codex-rs/app-server/tests/suite/v2/executor_skills_spawn_tests.rs +++ b/codex-rs/app-server/tests/suite/v2/executor_skills_spawn_tests.rs @@ -230,6 +230,7 @@ async fn spawned_agent_inherits_selected_executor_skill( } let status_id = app_server .send_list_mcp_server_status_request(ListMcpServerStatusParams { + environment_id: None, thread_id: Some(request.header("thread-id").expect("agent thread ID")), server_name: None, cursor: None, diff --git a/codex-rs/app-server/tests/suite/v2/mcp_connection_sharing.rs b/codex-rs/app-server/tests/suite/v2/mcp_connection_sharing.rs index 0c52bc325a..cb00f36a2e 100644 --- a/codex-rs/app-server/tests/suite/v2/mcp_connection_sharing.rs +++ b/codex-rs/app-server/tests/suite/v2/mcp_connection_sharing.rs @@ -155,6 +155,7 @@ async fn call_servers( .request(|request_id| ClientRequest::McpServerToolCall { request_id, params: McpServerToolCallParams { + environment_id: None, thread_id: thread_id.to_string(), server: name.to_string(), tool: "echo".to_string(), diff --git a/codex-rs/app-server/tests/suite/v2/mcp_protocol_default.rs b/codex-rs/app-server/tests/suite/v2/mcp_protocol_default.rs index 094ed3a9fa..660ab30ec8 100644 --- a/codex-rs/app-server/tests/suite/v2/mcp_protocol_default.rs +++ b/codex-rs/app-server/tests/suite/v2/mcp_protocol_default.rs @@ -50,6 +50,7 @@ async fn enabling_hosted_apps_protocol_refreshes_an_existing_thread() -> Result< .id; let call_tool = |thread_id: String| McpServerToolCallParams { + environment_id: None, thread_id, server: "codex_apps".to_string(), tool: "calendar_list_events".to_string(), diff --git a/codex-rs/app-server/tests/suite/v2/mcp_resource.rs b/codex-rs/app-server/tests/suite/v2/mcp_resource.rs index 0cf3f25e68..9ca684f3cb 100644 --- a/codex-rs/app-server/tests/suite/v2/mcp_resource.rs +++ b/codex-rs/app-server/tests/suite/v2/mcp_resource.rs @@ -190,6 +190,7 @@ async fn mcp_resource_read_returns_resource_contents() -> Result<()> { .request(|request_id| ClientRequest::McpResourceRead { request_id, params: McpResourceReadParams { + environment_id: None, meta: Some(serde_json::Map::from_iter([( "example/trace".into(), metadata_value.clone(), @@ -239,6 +240,7 @@ async fn mcp_resource_read_returns_resource_contents() -> Result<()> { ] { let request_id = mcp .send_mcp_resource_read_request(McpResourceReadParams { + environment_id: None, thread_id: Some(thread.id.clone()), origin_call_id, meta: Some(serde_json::Map::from_iter([(key.into(), value)])), @@ -314,6 +316,7 @@ async fn mcp_resource_read_preserves_protocol_errors(protocol: ProtocolVersion) for thread_id in [Some(thread.id.clone()), None] { let request_id = mcp .send_mcp_resource_read_request(McpResourceReadParams { + environment_id: None, meta: None, thread_id, origin_call_id: None, @@ -531,6 +534,7 @@ apps = true .request(|request_id| ClientRequest::McpResourceRead { request_id, params: McpResourceReadParams { + environment_id: None, meta: None, thread_id: None, origin_call_id: None, @@ -546,6 +550,7 @@ apps = true .request(|request_id| ClientRequest::McpResourceRead { request_id, params: McpResourceReadParams { + environment_id: None, meta: None, thread_id: None, origin_call_id: None, @@ -589,6 +594,7 @@ async fn mcp_resource_read_returns_error_for_unknown_thread() -> Result<()> { .request(ClientRequest::McpResourceRead { request_id: RequestId::Integer(1), params: McpResourceReadParams { + environment_id: None, meta: None, thread_id: Some("00000000-0000-4000-8000-000000000000".to_string()), origin_call_id: None, @@ -717,6 +723,7 @@ async fn metadata_and_mcp_requests_complete_while_unrelated_resume_loads_config( sender.request(ClientRequest::McpResourceRead { request_id: RequestId::Integer(7), params: McpResourceReadParams { + environment_id: None, meta: None, thread_id: Some(thread.id.clone()), origin_call_id: None, @@ -729,6 +736,7 @@ async fn metadata_and_mcp_requests_complete_while_unrelated_resume_loads_config( sender.request(ClientRequest::McpServerToolCall { request_id: RequestId::Integer(8), params: McpServerToolCallParams { + environment_id: None, thread_id: thread.id.clone(), server: "resource_server".to_string(), tool: "best_buy_product_search".to_string(), diff --git a/codex-rs/app-server/tests/suite/v2/mcp_resource/plugin_metadata_refresh.rs b/codex-rs/app-server/tests/suite/v2/mcp_resource/plugin_metadata_refresh.rs index 65ffd90a76..0060cb3354 100644 --- a/codex-rs/app-server/tests/suite/v2/mcp_resource/plugin_metadata_refresh.rs +++ b/codex-rs/app-server/tests/suite/v2/mcp_resource/plugin_metadata_refresh.rs @@ -247,6 +247,7 @@ async fn list_plugin_skills( async fn read_mcp_skill_resource(app_server: &mut TestAppServer, thread_id: &str) -> Result<()> { let request = app_server .send_mcp_resource_read_request(McpResourceReadParams { + environment_id: None, meta: None, thread_id: Some(thread_id.to_string()), origin_call_id: None, diff --git a/codex-rs/app-server/tests/suite/v2/mcp_resource_origin.rs b/codex-rs/app-server/tests/suite/v2/mcp_resource_origin.rs index 4d472cd41d..7f454cbe89 100644 --- a/codex-rs/app-server/tests/suite/v2/mcp_resource_origin.rs +++ b/codex-rs/app-server/tests/suite/v2/mcp_resource_origin.rs @@ -173,6 +173,7 @@ async fn widget_reads_survive_history_modes_compaction_restarts_and_app_only_vis ] { let request_id = app_server .send_mcp_resource_read_request(McpResourceReadParams { + environment_id: None, meta: None, thread_id, origin_call_id: Some(call_id.to_string()), @@ -298,6 +299,7 @@ async fn read_widget( .request(|request_id| ClientRequest::McpResourceRead { request_id, params: McpResourceReadParams { + environment_id: None, meta: Some(serde_json::Map::from_iter([( "example/trace".into(), json!(call_id), diff --git a/codex-rs/app-server/tests/suite/v2/mcp_server_elicitation.rs b/codex-rs/app-server/tests/suite/v2/mcp_server_elicitation.rs index b6cac451d5..4d6cfaad0e 100644 --- a/codex-rs/app-server/tests/suite/v2/mcp_server_elicitation.rs +++ b/codex-rs/app-server/tests/suite/v2/mcp_server_elicitation.rs @@ -200,6 +200,7 @@ async fn assert_standard_form_elicitation_round_trip( thread_id: fixture.thread_id.clone(), turn_id: Some(fixture.turn_id.clone()), server_name: "codex_apps".to_string(), + environment_id: None, request: McpServerElicitationRequest::Form { meta: None, message: ELICITATION_MESSAGE.to_string(), @@ -246,6 +247,7 @@ async fn mcp_server_openai_form_elicitation_round_trip() -> Result<()> { thread_id: fixture.thread_id.clone(), turn_id: Some(fixture.turn_id.clone()), server_name: "codex_apps".to_string(), + environment_id: None, request: McpServerElicitationRequest::OpenAiForm { meta: None, message: OPENAI_FORM_MESSAGE.to_string(), @@ -285,6 +287,7 @@ async fn mcp_server_openai_elicitation_form_round_trip() -> Result<()> { thread_id: fixture.thread_id.clone(), turn_id: Some(fixture.turn_id.clone()), server_name: "codex_apps".to_string(), + environment_id: None, request: McpServerElicitationRequest::OpenAiElicitationForm { meta: Some(json!({ "example/request": "template-picker" })), message: OPENAI_FORM_MESSAGE.to_string(), diff --git a/codex-rs/app-server/tests/suite/v2/mcp_server_status.rs b/codex-rs/app-server/tests/suite/v2/mcp_server_status.rs index 1f395396ec..19ef0371a9 100644 --- a/codex-rs/app-server/tests/suite/v2/mcp_server_status.rs +++ b/codex-rs/app-server/tests/suite/v2/mcp_server_status.rs @@ -23,6 +23,7 @@ use codex_app_server_protocol::ClientRequest; use codex_app_server_protocol::JSONRPCError; use codex_app_server_protocol::ListMcpServerStatusParams; use codex_app_server_protocol::ListMcpServerStatusResponse; +use codex_app_server_protocol::McpAuthStatus; use codex_app_server_protocol::McpServerConnectionStatus; use codex_app_server_protocol::McpServerOauthLoginCompletedNotification; use codex_app_server_protocol::McpServerOauthLoginResponse; @@ -32,7 +33,9 @@ use codex_app_server_protocol::PluginInstallResponse; use codex_app_server_protocol::RequestId; use codex_app_server_protocol::ThreadStartParams; use codex_app_server_protocol::ThreadStartResponse; +use codex_app_server_protocol::TurnEnvironmentParams; use codex_core::config::set_project_trust_level; +use codex_features::Feature; use codex_http_client::HttpClientBuilder; use codex_protocol::config_types::TrustLevel; use codex_rmcp_client::McpOAuthCallbackMode; @@ -43,12 +46,18 @@ use core_test_support::skip_if_remote; use core_test_support::stdio_server_bin; use pretty_assertions::assert_eq; use rmcp::handler::server::ServerHandler; +use rmcp::model::CallToolRequestParams; +use rmcp::model::CallToolResult; +use rmcp::model::ContentBlock; use rmcp::model::Implementation; use rmcp::model::JsonObject; use rmcp::model::ListResourceTemplatesResult; use rmcp::model::ListResourcesResult; use rmcp::model::ListToolsResult; use rmcp::model::PaginatedRequestParams; +use rmcp::model::ReadResourceRequestParams; +use rmcp::model::ReadResourceResult; +use rmcp::model::ResourceContents; use rmcp::model::ServerCapabilities; use rmcp::model::ServerConfig; use rmcp::model::Tool; @@ -142,6 +151,7 @@ async fn mcp_server_status_list_reuses_thread_connection() -> Result<()> { .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, thread_id: Some(thread.id.clone()), server_name: Some("widget".to_string()), detail: Some(detail), @@ -203,6 +213,7 @@ async fn full_mcp_server_status_skips_codex_apps_resource_templates( .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, cursor: None, limit: None, detail: Some(McpServerStatusDetail::Full), @@ -558,11 +569,13 @@ async fn oauth_login_automatically_selects_callback_specific_cimd_without_metada let (token_request_tx, mut token_request_rx) = mpsc::unbounded_channel(); let (mcp_authorization_tx, mut mcp_authorization_rx) = mpsc::unbounded_channel(); let tool_name = Arc::new("cimd".to_string()); + let mcp_origin = base_url.clone(); let mcp_service = StreamableHttpService::new( move || { Ok(McpStatusServer { tool_name: Arc::clone(&tool_name), tools_error: None, + origin: mcp_origin.clone(), }) }, Arc::new(LocalSessionManager::default()), @@ -728,6 +741,7 @@ async fn oauth_login_automatically_selects_callback_specific_cimd_without_metada .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, @@ -818,6 +832,7 @@ async fn mcp_server_status_list_returns_raw_server_and_tool_names(plugin: bool) .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, @@ -925,6 +940,7 @@ MCP_TEST_PID_FILE = {} .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, @@ -939,6 +955,7 @@ MCP_TEST_PID_FILE = {} std::fs::remove_file(&barrier_file)?; let second_request_id = mcp .send_list_mcp_server_status_request(ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, @@ -1003,6 +1020,7 @@ url = "{mcp_server_url}/mcp" .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, @@ -1017,6 +1035,7 @@ url = "{mcp_server_url}/mcp" .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, @@ -1073,6 +1092,7 @@ async fn mcp_server_status_list_reports_thread_runtime_connections() -> Result<( .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, @@ -1112,6 +1132,7 @@ async fn mcp_server_status_list_reports_thread_runtime_connections() -> Result<( .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, @@ -1196,6 +1217,7 @@ async fn mcp_server_status_list_reports_disconnected_stdio_transport() -> Result .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, @@ -1244,6 +1266,7 @@ async fn mcp_server_status_retains_capabilities_when_tool_discovery_fails() -> R .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, @@ -1283,11 +1306,15 @@ async fn mcp_server_status_retains_capabilities_when_tool_discovery_fails() -> R struct McpStatusServer { tool_name: Arc, tools_error: Option, + origin: String, } impl ServerHandler for McpStatusServer { fn get_info(&self) -> ServerConfig { - let mut capabilities = ServerCapabilities::builder().enable_tools().build(); + let mut capabilities = ServerCapabilities::builder() + .enable_tools() + .enable_resources() + .build(); capabilities.extensions = Some(BTreeMap::from([( "openai/settings".to_string(), serde_json::from_value( @@ -1323,6 +1350,31 @@ impl ServerHandler for McpStatusServer { Ok(ListToolsResult::with_all_items(vec![tool])) } + + async fn call_tool( + &self, + request: CallToolRequestParams, + _context: RequestContext, + ) -> Result { + assert_eq!(request.name.as_ref(), self.tool_name.as_str()); + Ok(CallToolResult::success(vec![ContentBlock::text(self.origin.clone())]).into()) + } + + async fn read_resource( + &self, + request: ReadResourceRequestParams, + _context: RequestContext, + ) -> Result { + Ok( + ReadResourceResult::new(vec![ResourceContents::TextResourceContents { + uri: request.uri, + mime_type: None, + text: self.origin.clone(), + meta: None, + }]) + .into(), + ) + } } #[derive(Clone)] @@ -1399,6 +1451,7 @@ async fn mcp_server_status_list_tools_and_auth_only_skips_slow_inventory_calls() let request_id = mcp .send_list_mcp_server_status_request(ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, @@ -1454,6 +1507,7 @@ url = "{underscore_server_url}/mcp" .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, @@ -1494,6 +1548,210 @@ url = "{underscore_server_url}/mcp" Ok(()) } +#[tokio::test(flavor = "multi_thread", worker_threads = 2)] +async fn mcp_server_status_keeps_same_named_environment_inventory_separate() -> Result<()> { + let server = create_mock_responses_server_sequence_unchecked(Vec::new()).await; + let (first_url, first_handle) = start_mcp_server("lookup", /*tools_error*/ None).await?; + let (second_url, second_handle) = start_mcp_server("lookup", /*tools_error*/ None).await?; + let codex_home = TempDir::new()?; + mock_responses_config(&server.uri()) + .enable_feature(Feature::MultiEnvironmentMcp) + .enable_feature(Feature::ExecutorCapabilityDiscovery) + .write(codex_home.path())?; + let executors = [ + ("env-a", TempDir::new()?, &first_url), + ("env-b", TempDir::new()?, &second_url), + ]; + let program = toml::Value::String( + codex_utils_cargo_bin::cargo_bin("codex")? + .to_string_lossy() + .into_owned(), + ); + let mut environment_config = "default = \"env-a\"\ninclude_local = false\n".to_string(); + let mut environments = Vec::new(); + for (id, home, url) in &executors { + let headers = if *id == "env-b" { + "http_headers = { Authorization = \"Bearer test-token\" }\n" + } else { + "" + }; + std::fs::write( + home.path().join("config.toml"), + format!("[mcp_servers.notes]\nurl = \"{url}/mcp\"\n{headers}"), + )?; + let home_value = toml::Value::String(home.path().to_string_lossy().into_owned()); + environment_config.push_str(&format!( + "\n[[environments]]\nid = \"{id}\"\nprogram = {program}\nargs = [\"exec-server\", \"--listen\", \"stdio\"]\n[environments.env]\nCODEX_HOME = {home_value}\n" + )); + environments.push(TurnEnvironmentParams { + environment_id: (*id).to_string(), + cwd: AbsolutePathBuf::try_from(home.path().to_path_buf())?.into(), + runtime_workspace_roots: None, + }); + } + std::fs::write( + codex_home.path().join("environments.toml"), + environment_config, + )?; + let mut app = TestAppServer::builder() + .with_codex_home(codex_home.path()) + // This test owns both executor environments and their configurations. + .without_auto_env() + .build_initialized() + .await?; + let request = app + .send_thread_start_request(ThreadStartParams { + environments: Some(environments), + ..Default::default() + }) + .await?; + let ThreadStartResponse { thread, .. } = app.read_response(request).await?; + let notification = app + .read_stream_until_matching_notification("notes MCP ready", |notification| { + notification.method == "mcpServer/startupStatus/updated" + && notification.params.as_ref().is_some_and(|params| { + params["threadId"] == thread.id + && params["name"] == "notes" + && params["status"] == "ready" + }) + }) + .await?; + assert_eq!( + notification.params, + Some(serde_json::json!({ + "threadId": thread.id, + "name": "notes", + "environmentId": "env-a", + "status": "ready", + "error": null, + "failureReason": null, + })) + ); + let response: ListMcpServerStatusResponse = app + .request(|request_id| ClientRequest::McpServerStatusList { + request_id, + params: ListMcpServerStatusParams { + environment_id: None, + thread_id: Some(thread.id.clone()), + server_name: None, + detail: Some(McpServerStatusDetail::Full), + cursor: None, + limit: None, + }, + }) + .await?; + assert_eq!(response.next_cursor, None); + assert_eq!( + response + .data + .iter() + .map(|status| ( + status.name.as_str(), + status.environment_id.as_deref(), + status + .tools + .keys() + .map(String::as_str) + .collect::>(), + status.tools_error.as_deref(), + status.auth_status, + status.http_origin.as_deref(), + )) + .collect::>(), + vec![ + ( + "notes", + Some("env-a"), + BTreeSet::from(["lookup"]), + None, + McpAuthStatus::Unsupported, + Some(first_url.as_str()) + ), + ( + "notes", + Some("env-b"), + BTreeSet::from(["lookup"]), + None, + McpAuthStatus::BearerToken, + Some(second_url.as_str()) + ), + ], + ); + for (environment_id, expected) in [ + (Some("env-a"), &response.data[0]), + (Some("env-b"), &response.data[1]), + // Omitting the selector keeps the original first-registration lookup. + (None, &response.data[0]), + ] { + let selected: ListMcpServerStatusResponse = app + .request(|request_id| ClientRequest::McpServerStatusList { + request_id, + params: ListMcpServerStatusParams { + thread_id: Some(thread.id.clone()), + server_name: Some("notes".to_string()), + environment_id: environment_id.map(str::to_owned), + detail: Some(McpServerStatusDetail::Full), + cursor: None, + limit: None, + }, + }) + .await?; + // The selected read waits for the thread connection; the bulk read only observed it. + let mut expected = expected.clone(); + expected.runtime_status = Some(McpServerConnectionStatus::Connected); + let origin = expected.http_origin.clone().expect("HTTP MCP origin"); + assert_eq!( + selected, + ListMcpServerStatusResponse { + data: vec![expected], + next_cursor: None + } + ); + // Identical tool names and resource URIs must reach the selected registration. + for (method, mut params, content_key, expected_content) in [ + ( + "mcpServer/tool/call", + json!({"tool": "lookup"}), + "content", + json!([{"type": "text", "text": origin}]), + ), + ( + "mcpServer/resource/read", + json!({"uri": "memo://shared"}), + "contents", + json!([{"uri": "memo://shared", "text": origin}]), + ), + ] { + params["threadId"] = json!(thread.id); + params["server"] = json!("notes"); + if let Some(environment_id) = environment_id { + params["environmentId"] = json!(environment_id); + } + let request = app.send_raw_request(method, Some(params)).await?; + let result: serde_json::Value = app.read_response(request).await?; + assert_eq!(result[content_key], expected_content); + } + } + for (method, mut params) in [ + ("mcpServer/tool/call", json!({"tool": "lookup"})), + ("mcpServer/resource/read", json!({"uri": "memo://shared"})), + ] { + params["threadId"] = json!(thread.id); + params["server"] = json!("notes"); + params["environmentId"] = json!("missing"); + let request = app.send_raw_request(method, Some(params)).await?; + let error = app + .read_stream_until_error_message(RequestId::Integer(request)) + .await?; + assert!(error.error.message.contains("unknown MCP server")); + } + first_handle.abort(); + let _ = first_handle.await; + second_handle.abort(); + let _ = second_handle.await; + Ok(()) +} + async fn start_mcp_server( tool_name: &str, tools_error: Option, @@ -1506,6 +1764,7 @@ async fn start_mcp_server( Ok(McpStatusServer { tool_name: Arc::clone(&tool_name), tools_error: tools_error.clone(), + origin: format!("http://{addr}"), }) }, Arc::new(LocalSessionManager::default()), diff --git a/codex-rs/app-server/tests/suite/v2/mcp_tool.rs b/codex-rs/app-server/tests/suite/v2/mcp_tool.rs index dfc2368555..1aaed0e4af 100644 --- a/codex-rs/app-server/tests/suite/v2/mcp_tool.rs +++ b/codex-rs/app-server/tests/suite/v2/mcp_tool.rs @@ -124,6 +124,7 @@ async fn mcp_server_tool_call_returns_tool_result() -> Result<()> { .request(|request_id| ClientRequest::McpServerToolCall { request_id, params: McpServerToolCallParams { + environment_id: None, thread_id: thread_id.clone(), server: TEST_SERVER_NAME.to_string(), tool: TEST_TOOL_NAME.to_string(), @@ -211,6 +212,7 @@ async fn mcp_server_tool_call_preserves_protocol_errors(protocol: ProtocolVersio ] { let request_id = mcp .send_mcp_server_tool_call_request(McpServerToolCallParams { + environment_id: None, thread_id: thread.id.clone(), server: server.to_string(), tool: TEST_TOOL_NAME.to_string(), @@ -288,6 +290,7 @@ async fn mcp_server_tool_call_forwards_only_server_extensions() -> Result<()> { .request(|request_id| ClientRequest::McpServerToolCall { request_id, params: McpServerToolCallParams { + environment_id: None, thread_id: thread_id.clone(), server: TEST_SERVER_NAME.to_string(), tool: TEST_TOOL_NAME.to_string(), @@ -433,6 +436,7 @@ async fn mcp_server_tool_call_returns_error_for_unknown_thread() -> Result<()> { let request_id = mcp .send_mcp_server_tool_call_request(McpServerToolCallParams { + environment_id: None, thread_id: "00000000-0000-4000-8000-000000000000".to_string(), server: TEST_SERVER_NAME.to_string(), tool: TEST_TOOL_NAME.to_string(), @@ -602,6 +606,7 @@ async fn assert_full_access_form_elicitation_is_declined( let request_id = mcp .send_mcp_server_tool_call_request(McpServerToolCallParams { + environment_id: None, thread_id: thread.id, server: TEST_SERVER_NAME.to_string(), tool: TEST_TOOL_NAME.to_string(), @@ -700,6 +705,7 @@ async fn mcp_server_tool_call_round_trips_elicitation_for_thread( let tool_call_request_id = mcp .send_mcp_server_tool_call_request(McpServerToolCallParams { + environment_id: None, thread_id: thread.id.clone(), server: TEST_SERVER_NAME.to_string(), tool: TEST_TOOL_NAME.to_string(), @@ -733,6 +739,7 @@ async fn mcp_server_tool_call_round_trips_elicitation_for_thread( thread_id: thread.id, turn_id: None, server_name: TEST_SERVER_NAME.to_string(), + environment_id: None, request: McpServerElicitationRequest::Form { meta: None, message: ELICITATION_MESSAGE.to_string(), @@ -858,6 +865,7 @@ async fn mcp_server_elicitation_survives_environment_runtime_refresh() -> Result let tool_call_request_id = mcp .send_mcp_server_tool_call_request(McpServerToolCallParams { + environment_id: None, thread_id: thread.id.clone(), server: TEST_SERVER_NAME.to_string(), tool: TEST_TOOL_NAME.to_string(), @@ -942,6 +950,7 @@ async fn mcp_server_tool_call_forwards_url_elicitation() -> Result<()> { let tool_call_request_id = mcp .send_mcp_server_tool_call_request(McpServerToolCallParams { + environment_id: None, thread_id: thread.id.clone(), server: TEST_SERVER_NAME.to_string(), tool: TEST_TOOL_NAME.to_string(), @@ -966,6 +975,7 @@ async fn mcp_server_tool_call_forwards_url_elicitation() -> Result<()> { thread_id: thread.id, turn_id: None, server_name: TEST_SERVER_NAME.to_string(), + environment_id: None, request: McpServerElicitationRequest::Url { meta: None, message: URL_ELICITATION_MESSAGE.to_string(), @@ -1090,6 +1100,7 @@ async fn mcp_tool_call_completion_notification_contains_truncated_large_result() let serialized_item = serde_json::to_string(&ThreadItemPayload::McpToolCall { id, server, + environment_id: None, tool, status, arguments: json!({ "message": LARGE_RESPONSE_MESSAGE }), @@ -1240,6 +1251,7 @@ async fn mcp_tool_call_hint_survives_mid_call_thread_read_and_resume() -> Result let expected_item = ThreadItemPayload::McpToolCall { id: call_id.to_string(), server: TEST_SERVER_NAME.to_string(), + environment_id: None, tool: TEST_TOOL_NAME.to_string(), status: McpToolCallStatus::InProgress, arguments: json!({ "message": ELICITATION_TRIGGER_MESSAGE }), diff --git a/codex-rs/app-server/tests/suite/v2/plugin_install.rs b/codex-rs/app-server/tests/suite/v2/plugin_install.rs index 0fafd9cce4..b2df7b1bb7 100644 --- a/codex-rs/app-server/tests/suite/v2/plugin_install.rs +++ b/codex-rs/app-server/tests/suite/v2/plugin_install.rs @@ -2563,6 +2563,7 @@ async fn plugin_install_makes_bundled_mcp_servers_available_to_followup_requests let request_id = mcp .send_mcp_server_tool_call_request(McpServerToolCallParams { + environment_id: None, thread_id: thread.id, server: "sample-mcp".to_string(), tool: "echo".to_string(), @@ -2579,6 +2580,7 @@ async fn plugin_install_makes_bundled_mcp_servers_available_to_followup_requests let request_id = mcp .send_list_mcp_server_status_request(ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, diff --git a/codex-rs/app-server/tests/suite/v2/thread_resume.rs b/codex-rs/app-server/tests/suite/v2/thread_resume.rs index 096ddfedb9..976418dad5 100644 --- a/codex-rs/app-server/tests/suite/v2/thread_resume.rs +++ b/codex-rs/app-server/tests/suite/v2/thread_resume.rs @@ -3095,6 +3095,7 @@ fn append_resume_redaction_history( call_id: "mcp-1".to_string(), invocation: McpInvocation { server: "docs".to_string(), + environment_id: None, tool: "lookup".to_string(), arguments: Some(json!({"secret":"argument"})), }, diff --git a/codex-rs/app-server/tests/suite/v2/thread_start.rs b/codex-rs/app-server/tests/suite/v2/thread_start.rs index c8956575e0..90a9ed0fb1 100644 --- a/codex-rs/app-server/tests/suite/v2/thread_start.rs +++ b/codex-rs/app-server/tests/suite/v2/thread_start.rs @@ -1345,6 +1345,7 @@ async fn thread_start_emits_mcp_server_status_updated_notifications() -> Result< McpServerStatusUpdatedNotification { thread_id: Some(start_response.thread.id.clone()), name: "optional_broken".to_string(), + environment_id: None, status: McpServerStartupState::Starting, error: None, failure_reason: None, @@ -1657,6 +1658,7 @@ required = true .request(|request_id| ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, diff --git a/codex-rs/app-server/tests/suite/v2/user_verification_mcp.rs b/codex-rs/app-server/tests/suite/v2/user_verification_mcp.rs index 3b6aec4c2d..a6f60c53c1 100644 --- a/codex-rs/app-server/tests/suite/v2/user_verification_mcp.rs +++ b/codex-rs/app-server/tests/suite/v2/user_verification_mcp.rs @@ -166,6 +166,7 @@ async fn user_verification_mcp_round_trip_requires_proof_in_full_access() -> Res caller .call_mcp_tool( CODEX_APPS_MCP_SERVER_NAME, + /*environment_id*/ None, "verify_action", /*arguments*/ None, /*meta*/ None, diff --git a/codex-rs/cli/src/mcp_cmd.rs b/codex-rs/cli/src/mcp_cmd.rs index 70cf78283b..173b8bb515 100644 --- a/codex-rs/cli/src/mcp_cmd.rs +++ b/codex-rs/cli/src/mcp_cmd.rs @@ -710,8 +710,7 @@ async fn run_list(config: &Config, list_args: ListArgs) -> Result<()> { runtime_config .mcp_server_catalog .resolve_server_name(name) - .and_then(|key| effective_mcp_servers.get(key)) - .map(|server| (name, server)) + .and_then(|key| effective_mcp_servers.get_key_value(key)) }), config.mcp_oauth_credentials_store_mode, config.auth_keyring_backend_kind(), @@ -720,7 +719,10 @@ async fn run_list(config: &Config, list_args: ListArgs) -> Result<()> { &runtime_config.ema_state, &runtime_context, ) - .await; + .await + .into_iter() + .map(|(key, status)| (key.name().to_owned(), status)) + .collect::>(); if list_args.json { let json_entries: Vec<_> = entries diff --git a/codex-rs/codex-mcp/src/catalog.rs b/codex-rs/codex-mcp/src/catalog.rs index 76ffff068c..2962a31d9b 100644 --- a/codex-rs/codex-mcp/src/catalog.rs +++ b/codex-rs/codex-mcp/src/catalog.rs @@ -801,7 +801,20 @@ impl ResolvedMcpCatalog { }) } - pub(crate) fn servers(&self) -> impl Iterator { + /// Resolves a client target, preserving name-only routing when the scope is omitted. + /// The operation using this key checks whether the registration exists. + pub fn resolve_server_key(&self, name: &str, environment_id: Option<&str>) -> McpServerKey { + match environment_id { + Some(environment_id) => McpServerKey::in_environment(environment_id, name), + None => self + .resolve_server_name(name) + .cloned() + .unwrap_or_else(|| McpServerKey::unscoped(name)), + } + } + + /// Iterates every resolved registration, including same-named scoped peers. + pub fn servers(&self) -> impl Iterator { self.servers.iter() } diff --git a/codex-rs/codex-mcp/src/connection_manager.rs b/codex-rs/codex-mcp/src/connection_manager.rs index 072a9d0bd1..87c6d4c931 100644 --- a/codex-rs/codex-mcp/src/connection_manager.rs +++ b/codex-rs/codex-mcp/src/connection_manager.rs @@ -372,7 +372,7 @@ pub(crate) struct McpConnectionSet { network_policy_metadata: Option>, servers: HashMap, pub(crate) event_stream_connection: Option>, - disabled_servers: Vec, + disabled_servers: Vec, required_servers: Vec, optional_startup_deadline: OnceLock, tool_plugin_context: Arc, @@ -402,20 +402,6 @@ impl McpConnectionSet { self.server(self.resolve_server_name(name)?) } - /// Name-only status and resource APIs still describe the original first server. - fn legacy_servers(&self) -> impl Iterator { - self.servers - .iter() - .filter_map(|(key, view)| self.legacy_server_name(key).map(|name| (name, view))) - } - - pub(crate) fn legacy_server_name<'a>(&'a self, key: &'a McpServerKey) -> Option<&'a str> { - match &self.config { - Some(config) => config.mcp_server_catalog.legacy_server_name(key), - None => Some(key.name()), - } - } - /// Creates an MCP connection manager. Threadless callers can pass no `tx_event`; startup /// notifications are then skipped and interactive elicitations are declined. pub async fn new( @@ -466,12 +452,7 @@ impl McpConnectionSet { let disabled_servers = mcp_servers .iter() .filter(|(_, server)| !server.enabled()) - .filter_map(|(key, _)| { - config - .mcp_server_catalog - .legacy_server_name(key) - .map(str::to_owned) - }) + .map(|(key, _)| key.clone()) .collect(); let mut required_servers = mcp_servers .iter() @@ -535,6 +516,8 @@ impl McpConnectionSet { let server_name = registration .map_or(server_key.name(), |server| server.name()) .to_owned(); + // Name-only clients still route startup errors by server name; publish only that + // name's default registration. let report_startup = config .mcp_server_catalog .resolve_server_name(&server_name) @@ -912,7 +895,7 @@ impl McpConnectionSet { ); if let Some(error) = unchanged_auth_failure { if report_startup { - eager_starts.push(server_name.clone()); + eager_starts.push(server_key.clone()); } let reason = connection_identity .oauth_credentials() @@ -938,6 +921,9 @@ impl McpConnectionSet { tx_event, McpStartupUpdateEvent { server: server_name.clone(), + environment_id: server_key + .scoped_environment_id() + .map(str::to_owned), status, }, ) @@ -1067,7 +1053,7 @@ impl McpConnectionSet { let submit_id = startup_submit_id.clone(); if !defer_startup && report_startup { - eager_starts.push(server_name.clone()); + eager_starts.push(server_key.clone()); } let startup = async move { if let Some(mut startup_receiver) = startup_receiver @@ -1084,6 +1070,7 @@ impl McpConnectionSet { tx_event, McpStartupUpdateEvent { server: server_name.clone(), + environment_id: server_key.scoped_environment_id().map(str::to_owned), status: McpStartupStatus::Starting, }, ) @@ -1159,6 +1146,7 @@ impl McpConnectionSet { tx_event, McpStartupUpdateEvent { server: server_name.clone(), + environment_id: server_key.scoped_environment_id().map(str::to_owned), status, }, ) @@ -1210,7 +1198,8 @@ impl McpConnectionSet { startup_submit_id.as_str(), tx_event, McpStartupUpdateEvent { - server, + server: server.name().to_owned(), + environment_id: server.scoped_environment_id().map(str::to_owned), status: McpStartupStatus::Starting, }, ) @@ -1228,16 +1217,18 @@ impl McpConnectionSet { .map(str::to_owned) }; if let Some(tx_event) = tx_event { - let mut summary = McpStartupCompleteEvent { - ready: reused_ready.into_iter().filter_map(&legacy_name).collect(), - ..Default::default() - }; - for server_name in &summary.ready { + let mut summary = McpStartupCompleteEvent::default(); + for key in reused_ready { + let Some(server_name) = legacy_name(key.clone()) else { + continue; + }; + summary.ready.push(server_name); let _ = emit_update( startup_submit_id.as_str(), &tx_event, McpStartupUpdateEvent { - server: server_name.clone(), + server: key.name().to_owned(), + environment_id: key.scoped_environment_id().map(str::to_owned), status: McpStartupStatus::Ready, }, ) @@ -1468,14 +1459,21 @@ impl McpConnectionSet { view.metadata.environment_id ); } - if !view.tool_filter.allows(tool) { - return Err(anyhow!( - "tool '{tool}' is disabled for MCP server '{server}'" - )); - } + self.validate_tool_call(server_key, tool)?; Ok(server_key) } + /// Validates an exact client target before startup or execution. + pub(crate) fn validate_tool_call(&self, server: &McpServerKey, tool: &str) -> Result<()> { + let view = self + .server(server) + .ok_or_else(|| anyhow!("unknown MCP server '{server}'"))?; + if !view.tool_filter.allows(tool) { + bail!("tool '{tool}' is disabled for MCP server '{server}'"); + } + Ok(()) + } + /// Invoke the tool indicated by the (server, tool) pair. #[allow(clippy::too_many_arguments)] pub async fn call_tool( @@ -1487,12 +1485,10 @@ impl McpConnectionSet { requested_timeout: Option, wait_for_server: bool, ) -> Result { + self.validate_tool_call(server_key, tool)?; let view = self .server(server_key) .ok_or_else(|| anyhow!("unknown MCP server '{server_key}'"))?; - if !view.tool_filter.allows(tool) { - bail!("tool '{tool}' is disabled for MCP server '{server_key}'"); - } let client = if wait_for_server { view.connection .client() @@ -1543,9 +1539,10 @@ impl McpConnectionSet { /// Capabilities belong to the initialized connection, never a shared tool cache. pub(crate) fn list_available_server_capabilities( &self, - include_server: impl Fn(&str) -> bool, - ) -> HashMap { - self.legacy_servers() + include_server: impl Fn(&McpServerKey) -> bool, + ) -> HashMap { + self.servers + .iter() .filter(|(name, _)| include_server(name)) .filter_map(|(name, view)| { view.connection @@ -1566,13 +1563,10 @@ impl McpConnectionSet { /// connection-specific, so pending regular clients are awaited. pub(crate) async fn list_available_server_infos( &self, - include_server: impl Fn(&str) -> bool, - ) -> HashMap { + include_server: impl Fn(&McpServerKey) -> bool, + ) -> HashMap { let mut server_infos = HashMap::new(); - for (server_name, view) in self - .legacy_servers() - .filter(|(name, _)| include_server(name)) - { + for (server_name, view) in self.servers.iter().filter(|(name, _)| include_server(name)) { let server_name = server_name.to_owned(); let client = &view.connection.client; if !client.startup_complete.load(Ordering::Acquire) diff --git a/codex-rs/codex-mcp/src/connection_manager/resources.rs b/codex-rs/codex-mcp/src/connection_manager/resources.rs index 39bd08d7bd..a3577a2645 100644 --- a/codex-rs/codex-mcp/src/connection_manager/resources.rs +++ b/codex-rs/codex-mcp/src/connection_manager/resources.rs @@ -45,11 +45,12 @@ impl McpConnectionSet { /// Returns resources from servers selected by `include_server`. pub async fn list_all_resources( &self, - include_server: impl Fn(&str) -> bool, - ) -> HashMap> { + include_server: impl Fn(&McpServerKey) -> bool, + ) -> HashMap> { let mut join_set = JoinSet::new(); for (server_name, view) in self - .legacy_servers() + .servers + .iter() .filter(|(server_name, _)| include_server(server_name)) { let server_name = server_name.to_owned(); @@ -91,10 +92,10 @@ impl McpConnectionSet { /// Returns resource templates from servers selected by `include_server`. pub async fn list_all_resource_templates( &self, - include_server: impl Fn(&str) -> bool, - ) -> HashMap> { + include_server: impl Fn(&McpServerKey) -> bool, + ) -> HashMap> { let mut join_set = JoinSet::new(); - for (server_name, view) in self.legacy_servers().filter(|(server_name, view)| { + for (server_name, view) in self.servers.iter().filter(|(server_name, view)| { include_server(server_name) && !self.skips_resource_template_listing(&view.metadata.server_key) }) { diff --git a/codex-rs/codex-mcp/src/connection_manager/status.rs b/codex-rs/codex-mcp/src/connection_manager/status.rs index 79107328d2..b9a2f8e2b7 100644 --- a/codex-rs/codex-mcp/src/connection_manager/status.rs +++ b/codex-rs/codex-mcp/src/connection_manager/status.rs @@ -5,9 +5,12 @@ use std::collections::HashMap; use codex_protocol::mcp::McpServerConnectionStatus; use super::McpConnectionSet; +use crate::McpServerKey; impl McpConnectionSet { - pub(crate) async fn connection_statuses(&self) -> HashMap { + pub(crate) async fn connection_statuses( + &self, + ) -> HashMap { use McpServerConnectionStatus as Status; let mut statuses = self @@ -15,7 +18,7 @@ impl McpConnectionSet { .iter() .map(|name| (name.clone(), Status::Disabled)) .collect::>(); - for (name, view) in self.legacy_servers() { + for (name, view) in &self.servers { let connection = &view.connection; let client = &connection.client; let status = if connection.startup_is_dormant() && !client.cancel_token.is_cancelled() { diff --git a/codex-rs/codex-mcp/src/connection_manager/tool_catalog.rs b/codex-rs/codex-mcp/src/connection_manager/tool_catalog.rs index 8fe51274df..a2f57bfc99 100644 --- a/codex-rs/codex-mcp/src/connection_manager/tool_catalog.rs +++ b/codex-rs/codex-mcp/src/connection_manager/tool_catalog.rs @@ -198,19 +198,19 @@ impl McpConnectionSet { #[instrument(level = "trace", skip_all, fields(mcp_server_count = self.servers.len()))] pub(crate) async fn list_tools_with_errors( &self, - include_server: impl Fn(&str) -> bool, - ) -> (Vec, HashMap) { + include_server: impl Fn(&McpServerKey) -> bool, + ) -> (Vec, HashMap) { let (tools, errors, _) = self.list_catalogs_with_errors(include_server).await; (tools, errors) } pub(crate) async fn list_catalogs_with_errors( &self, - include_server: impl Fn(&str) -> bool, + include_server: impl Fn(&McpServerKey) -> bool, ) -> ( Vec, - HashMap, - HashMap>, + HashMap, + HashMap>, ) { let mut metadata = HashMap::new(); let mut tools = Vec::new(); @@ -223,7 +223,8 @@ impl McpConnectionSet { .map(|config| config.mcp_server_catalog.exposure()) .unwrap_or_default(); let server_results = join_all( - self.legacy_servers() + self.servers + .iter() .filter(|(name, _)| include_server(name)) .map(|(server_name, view)| async move { view.connection.client.reconnect_failed_startup().await; @@ -234,7 +235,7 @@ impl McpConnectionSet { .startup_complete .load(Ordering::Acquire); let server_tools = view - .listed_catalog(server_name, &self.tool_plugin_context, exposure) + .listed_catalog(server_name.name(), &self.tool_plugin_context, exposure) .instrument(trace_span!( "list_tools_for_server", server_name = %server_name, diff --git a/codex-rs/codex-mcp/src/connection_manager_tests.rs b/codex-rs/codex-mcp/src/connection_manager_tests.rs index dd9705c53a..803419255f 100644 --- a/codex-rs/codex-mcp/src/connection_manager_tests.rs +++ b/codex-rs/codex-mcp/src/connection_manager_tests.rs @@ -688,7 +688,9 @@ async fn connection_statuses_observe_clients_without_starting_them() { use codex_protocol::mcp::McpServerConnectionStatus as Status; let mut manager = McpConnectionSet::empty(/*prefix_mcp_tool_names*/ true); - manager.disabled_servers.push("disabled".to_string()); + manager + .disabled_servers + .push(McpServerKey::unscoped("disabled")); let ready = create_ready_async_managed_client(Vec::new()).await; ready.client().await.expect("ready client"); manager.insert_test_client("connected", ready); @@ -727,16 +729,17 @@ async fn connection_statuses_observe_clients_without_starting_them() { pending.cached_server_info = Some(create_test_server_info("Cached")); manager.insert_test_client("starting", pending.clone()); manager.insert_test_client("deferred", pending); + let scoped_key = McpServerKey::in_environment("remote", "connected"); + let mut deferred = manager + .servers + .remove(&McpServerKey::unscoped("deferred")) + .unwrap(); + deferred.metadata.server_key = scoped_key.clone(); + manager.servers.insert(scoped_key.clone(), deferred); let (trigger, _receiver) = watch::channel(/*init*/ false); - Arc::get_mut( - &mut manager - .servers - .get_mut(&McpServerKey::unscoped("deferred")) - .unwrap() - .connection, - ) - .unwrap() - .startup_trigger = Some(trigger.clone()); + Arc::get_mut(&mut manager.servers.get_mut(&scoped_key).unwrap().connection) + .unwrap() + .startup_trigger = Some(trigger.clone()); let statuses = tokio::time::timeout( Duration::from_millis(/*millis*/ 100), @@ -745,19 +748,25 @@ async fn connection_statuses_observe_clients_without_starting_them() { .await .expect("status must not await startup"); let mut expected = HashMap::from([ - ("connected".to_string(), Status::Connected), - ("failed".to_string(), Status::Failed), - ("auth".to_string(), Status::AuthenticationRequired), - ("flattened-auth".to_string(), Status::AuthenticationRequired), - ("cancelled".to_string(), Status::Cancelled), - ("starting".to_string(), Status::Starting), - ("deferred".to_string(), Status::NotStarted), - ("disabled".to_string(), Status::Disabled), + (McpServerKey::unscoped("connected"), Status::Connected), + (McpServerKey::unscoped("failed"), Status::Failed), + ( + McpServerKey::unscoped("auth"), + Status::AuthenticationRequired, + ), + ( + McpServerKey::unscoped("flattened-auth"), + Status::AuthenticationRequired, + ), + (McpServerKey::unscoped("cancelled"), Status::Cancelled), + (McpServerKey::unscoped("starting"), Status::Starting), + (scoped_key, Status::NotStarted), + (McpServerKey::unscoped("disabled"), Status::Disabled), ]); assert_eq!(statuses, expected); assert!(!*trigger.borrow()); manager.test_client("connected").cancel_token.cancel(); - expected.insert("connected".to_string(), Status::Cancelled); + expected.insert(McpServerKey::unscoped("connected"), Status::Cancelled); assert_eq!(manager.connection_statuses().await, expected); } @@ -802,7 +811,8 @@ async fn connection_statuses_follow_latest_reconnect_outcome() { let manager = create_test_manager_with_failed_apps_startup(Vec::new(), factory); let client = manager.test_client(CODEX_APPS_MCP_SERVER_NAME); assert!(client.client().await.is_err()); - let expected = |status| HashMap::from([(CODEX_APPS_MCP_SERVER_NAME.to_string(), status)]); + let expected = + |status| HashMap::from([(McpServerKey::unscoped(CODEX_APPS_MCP_SERVER_NAME), status)]); assert_eq!( manager.connection_statuses().await, expected(Status::Failed) @@ -3063,7 +3073,7 @@ async fn list_available_server_infos_uses_cache_while_client_is_pending() { .await; let server_infos = timeout_result.expect("server info lookup should not block on startup"); assert_eq!( - server_infos.get(CODEX_APPS_MCP_SERVER_NAME), + server_infos.get(&McpServerKey::unscoped(CODEX_APPS_MCP_SERVER_NAME)), Some(&server_info) ); } @@ -4502,7 +4512,7 @@ async fn list_all_tools_uses_shared_codex_apps_cache_when_client_startup_fails() manager .list_available_server_infos(|_| true) .await - .get(CODEX_APPS_MCP_SERVER_NAME), + .get(&McpServerKey::unscoped(CODEX_APPS_MCP_SERVER_NAME)), Some(&server_info) ); } @@ -5170,7 +5180,7 @@ async fn executor_owned_chatgpt_mcp_accepts_only_safe_explicit_authorization() - "{case}: executor-owned servers must not retain hosted OAuth credentials" ); let auth_statuses = crate::compute_auth_statuses( - [(&"fake-first-party".to_string(), remote_server)], + [(&McpServerKey::unscoped("fake-first-party"), remote_server)], OAuthCredentialsStoreMode::default(), AuthKeyringBackendKind::default(), Some(&hosted_auth), @@ -5185,7 +5195,8 @@ async fn executor_owned_chatgpt_mcp_accepts_only_safe_explicit_authorization() - McpAuthState::Unsupported }; assert_eq!( - auth_statuses["fake-first-party"].auth_state, expected_auth_state, + auth_statuses[&McpServerKey::unscoped("fake-first-party")].auth_state, + expected_auth_state, "{case}: auth status must only accept safe executor-owned authorization" ); diff --git a/codex-rs/codex-mcp/src/elicitation.rs b/codex-rs/codex-mcp/src/elicitation.rs index fc4da8cc33..5dbe5cd775 100644 --- a/codex-rs/codex-mcp/src/elicitation.rs +++ b/codex-rs/codex-mcp/src/elicitation.rs @@ -275,9 +275,10 @@ impl ElicitationRequestRouter { &self, events: Option>, authority: &ElicitationAuthority, - server_name: String, + server_key: McpServerKey, request: ElicitationRequest, ) -> Result { + let server_name = server_key.name().to_owned(); let Some(events) = events else { return Ok(ElicitationResponse { action: ElicitationAction::Decline, @@ -319,6 +320,7 @@ impl ElicitationRequestRouter { msg: EventMsg::ElicitationRequest(ElicitationRequestEvent { turn_id: None, server_name, + environment_id: server_key.scoped_environment_id().map(str::to_owned), id: ProtocolRequestId::String(public_request_id), request, }), @@ -684,7 +686,7 @@ impl ElicitationRequestManager { }, }; router - .request_user_interaction(tx_event, &authority, server_name, request) + .request_user_interaction(tx_event, &authority, server_key, request) .await } .boxed() diff --git a/codex-rs/codex-mcp/src/elicitation_tests.rs b/codex-rs/codex-mcp/src/elicitation_tests.rs index 79f1955987..b32953a412 100644 --- a/codex-rs/codex-mcp/src/elicitation_tests.rs +++ b/codex-rs/codex-mcp/src/elicitation_tests.rs @@ -31,13 +31,13 @@ async fn abandonment_is_ordered_and_exactly_once_when_the_native_waiter_is_dropp let mut first = Box::pin(router.request_user_interaction( Some(tx), &authority, - "server".into(), + McpServerKey::in_environment("first", "server"), request.clone(), )); let mut sibling = Box::pin(router.request_user_interaction( Some(replacement_tx), &authority, - "server".into(), + McpServerKey::in_environment("second", "server"), request, )); assert!(futures::poll!(&mut first).is_pending()); @@ -50,6 +50,19 @@ async fn abandonment_is_ordered_and_exactly_once_when_the_native_waiter_is_dropp else { panic!("expected sibling request"); }; + assert_eq!( + [ + ( + first_request.server_name.as_str(), + first_request.environment_id.as_deref() + ), + ( + sibling_request.server_name.as_str(), + sibling_request.environment_id.as_deref() + ), + ], + [("server", Some("first")), ("server", Some("second"))], + ); drop(first); let EventMsg::ElicitationAbandoned(abandoned) = events.recv().await.unwrap().msg else { panic!("expected abandonment"); @@ -107,7 +120,7 @@ async fn bounded_sources_preserve_backpressure_across_close() { let mut pending = Box::pin(router.request_user_interaction( Some(tx), &authority, - "server".into(), + McpServerKey::unscoped("server"), ElicitationRequest::Form { meta: None, message: "Continue".into(), @@ -150,7 +163,7 @@ async fn abandonment_closed_receiver_cleans_up_without_delivery_or_replay() { let mut pending = Box::pin(router.request_user_interaction( Some(tx), &authority, - "server".into(), + McpServerKey::unscoped("server"), ElicitationRequest::Form { meta: None, message: "Continue".into(), @@ -188,7 +201,7 @@ async fn abandonment_close_joins_elected_actions_and_rejects_retained_router_adm let mut pending = Box::pin(router.request_user_interaction( Some(tx.clone()), &authority, - "server".into(), + McpServerKey::unscoped("server"), request.clone(), )); assert!(futures::poll!(&mut pending).is_pending()); @@ -213,7 +226,7 @@ async fn abandonment_close_joins_elected_actions_and_rejects_retained_router_adm .request_user_interaction( Some(tx.clone()), &authority, - "server".into(), + McpServerKey::unscoped("server"), request.clone(), ) .await @@ -240,7 +253,12 @@ async fn abandonment_close_joins_elected_actions_and_rejects_retained_router_adm router.close().await; assert!( retained_router - .request_user_interaction(Some(tx), &authority, "server".into(), request,) + .request_user_interaction( + Some(tx), + &authority, + McpServerKey::unscoped("server"), + request + ) .await .is_err() ); @@ -256,7 +274,7 @@ async fn abandonment_close_invalidates_a_published_responder_before_returning() let mut pending = Box::pin(router.request_user_interaction( Some(tx), &authority, - "server".into(), + McpServerKey::unscoped("server"), ElicitationRequest::Form { meta: None, message: "Continue".into(), diff --git a/codex-rs/codex-mcp/src/mcp/auth.rs b/codex-rs/codex-mcp/src/mcp/auth.rs index d193f1e608..d99a1a3e03 100644 --- a/codex-rs/codex-mcp/src/mcp/auth.rs +++ b/codex-rs/codex-mcp/src/mcp/auth.rs @@ -25,6 +25,7 @@ use futures::future::join_all; use tokio::sync::OnceCell; use tracing::warn; +use crate::McpServerKey; use crate::runtime::McpRuntimeContext; use crate::server::EffectiveMcpServer; use crate::server::has_explicit_http_authorization; @@ -205,9 +206,9 @@ pub async fn compute_auth_statuses<'a, I>( auth_manager: Option<&std::sync::Arc>, ema_state: &crate::EmaState, runtime_context: &McpRuntimeContext, -) -> HashMap +) -> HashMap where - I: IntoIterator, + I: IntoIterator, { // Share successful, missing, and failed reads without starting storage work for non-EMA servers. let account_grant = OnceCell::new(); @@ -223,7 +224,7 @@ where let runtime_context = runtime_context.clone(); async move { let auth_state = match compute_auth_status( - &name, + name.name(), &config, store_mode, keyring_backend_kind, diff --git a/codex-rs/codex-mcp/src/mcp/mod.rs b/codex-rs/codex-mcp/src/mcp/mod.rs index 4d5953fce0..130b84dc8e 100644 --- a/codex-rs/codex-mcp/src/mcp/mod.rs +++ b/codex-rs/codex-mcp/src/mcp/mod.rs @@ -482,10 +482,14 @@ pub async fn read_mcp_resource( codex_apps_tools_cache: ConnectorRuntimeManager, tool_catalog_cache: crate::McpToolCatalogCache, server: &str, + environment_id: Option<&str>, params: ReadResourceRequestParams, ) -> anyhow::Result { + let server_key = config + .mcp_server_catalog + .resolve_server_key(server, environment_id); let mut mcp_servers = effective_mcp_servers(config, auth); - mcp_servers.retain(|key, _| config.mcp_server_catalog.legacy_server_name(key) == Some(server)); + mcp_servers.retain(|key, _| key == &server_key); let cancel_token = CancellationToken::new(); let runtime_config = config.for_threadless_operations(&mcp_servers); let manager = McpConnectionSet::new( @@ -518,25 +522,22 @@ pub async fn read_mcp_resource( ) .await; - let result = match manager.resolve_server_name(server) { - Some(key) => manager.read_resource(key, params).await, - None => Err(anyhow::anyhow!("unknown MCP server '{server}'")), - }; + let result = manager.read_resource(&server_key, params).await; cancel_token.cancel(); result } #[derive(Debug, Clone)] pub struct McpServerStatusSnapshot { - pub server_infos: HashMap, - pub server_capabilities: HashMap, - pub tool_list_meta: HashMap>, - pub tools_by_server: HashMap>, - pub tools_errors: HashMap, - pub resources: HashMap>, - pub resource_templates: HashMap>, - pub auth_statuses: HashMap, - pub server_names: Vec, + pub server_infos: HashMap, + pub server_capabilities: HashMap, + pub tool_list_meta: HashMap>, + pub tools_by_server: HashMap>, + pub tools_errors: HashMap, + pub resources: HashMap>, + pub resource_templates: HashMap>, + pub auth_statuses: HashMap, + pub server_keys: Vec, } #[allow(clippy::too_many_arguments)] @@ -552,15 +553,10 @@ pub async fn collect_mcp_server_status_snapshot_with_detail( codex_apps_tools_cache: ConnectorRuntimeManager, tool_catalog_cache: crate::McpToolCatalogCache, detail: McpSnapshotDetail, - server_name: Option<&str>, + server: Option<&McpServerKey>, ) -> McpServerStatusSnapshot { let mut mcp_servers = effective_mcp_servers(config, auth); - mcp_servers.retain(|key, _| { - config - .mcp_server_catalog - .legacy_server_name(key) - .is_some_and(|name| server_name.is_none_or(|selected| name == selected)) - }); + mcp_servers.retain(|key, _| server.is_none_or(|selected| key == selected)); if mcp_servers.is_empty() { return McpServerStatusSnapshot { server_infos: HashMap::new(), @@ -571,21 +567,12 @@ pub async fn collect_mcp_server_status_snapshot_with_detail( resources: HashMap::new(), resource_templates: HashMap::new(), auth_statuses: HashMap::new(), - server_names: Vec::new(), + server_keys: Vec::new(), }; } - let named_servers = mcp_servers - .iter() - .filter_map(|(key, server)| { - config - .mcp_server_catalog - .legacy_server_name(key) - .map(|name| (name.to_owned(), server.clone())) - }) - .collect::>(); let auth_status_entries = compute_auth_statuses( - named_servers.iter(), + mcp_servers.iter(), config.mcp_oauth_credentials_store_mode, config.auth_keyring_backend_kind, auth, @@ -595,7 +582,7 @@ pub async fn collect_mcp_server_status_snapshot_with_detail( ) .await; - let server_names = named_servers.into_keys().collect(); + let server_keys = mcp_servers.keys().cloned().collect(); let cancel_token = CancellationToken::new(); let runtime_config = config.for_threadless_operations(&mcp_servers); @@ -632,7 +619,7 @@ pub async fn collect_mcp_server_status_snapshot_with_detail( let snapshot = collect_mcp_server_status_snapshot_from_manager( &mcp_connection_manager, auth_status_entries, - server_names, + server_keys, detail, ) .await; @@ -774,8 +761,8 @@ fn protocol_tool_from_rmcp_tool(name: &str, tool: &rmcp::model::Tool) -> Option< } fn auth_statuses_from_entries( - auth_status_entries: &HashMap, -) -> HashMap { + auth_status_entries: &HashMap, +) -> HashMap { auth_status_entries .iter() .map(|(name, entry)| (name.clone(), McpAuthStatus::from(entry.auth_state))) @@ -783,8 +770,8 @@ fn auth_statuses_from_entries( } fn convert_mcp_resources( - resources: HashMap>, -) -> HashMap> { + resources: HashMap>, +) -> HashMap> { resources .into_iter() .map(|(name, resources)| { @@ -822,8 +809,8 @@ fn convert_mcp_resources( } fn convert_mcp_resource_templates( - resource_templates: HashMap>, -) -> HashMap> { + resource_templates: HashMap>, +) -> HashMap> { resource_templates .into_iter() .map(|(name, templates)| { @@ -863,12 +850,12 @@ fn convert_mcp_resource_templates( pub(crate) async fn collect_mcp_server_status_snapshot_from_manager( mcp_connection_manager: &McpConnectionSet, - auth_status_entries: HashMap, - server_names: Vec, + auth_status_entries: HashMap, + server_keys: Vec, detail: McpSnapshotDetail, ) -> McpServerStatusSnapshot { - let selected_servers: HashSet<&str> = server_names.iter().map(String::as_str).collect(); - let include_server = |name: &str| selected_servers.contains(name); + let selected_servers: HashSet<&McpServerKey> = server_keys.iter().collect(); + let include_server = |key: &McpServerKey| selected_servers.contains(key); let ((server_infos, (tools, tools_errors, tool_list_meta)), resources, resource_templates) = tokio::join!( async { let server_infos = mcp_connection_manager @@ -901,7 +888,7 @@ pub(crate) async fn collect_mcp_server_status_snapshot_from_manager( let server_capabilities = mcp_connection_manager.list_available_server_capabilities(include_server); - let mut tools_by_server = HashMap::>::new(); + let mut tools_by_server = HashMap::>::new(); for tool_info in tools { let raw_tool_name = tool_info.tool.name.to_string(); let Some(tool) = protocol_tool_from_rmcp_tool(&raw_tool_name, &tool_info.tool) else { @@ -909,7 +896,7 @@ pub(crate) async fn collect_mcp_server_status_snapshot_from_manager( }; let tool_name = tool.name.clone(); tools_by_server - .entry(tool_info.server_name().to_owned()) + .entry(tool_info.server_key) .or_default() .insert(tool_name, tool); } @@ -918,19 +905,13 @@ pub(crate) async fn collect_mcp_server_status_snapshot_from_manager( // connection attempt instead of retaining the credential-presence status read beforehand. let mut auth_statuses = auth_statuses_from_entries(&auth_status_entries); for key in mcp_connection_manager.authentication_failed_servers().await { - let Some(server_name) = mcp_connection_manager - .legacy_server_name(&key) - .map(str::to_owned) - else { - continue; - }; - if auth_statuses.get(&server_name) == Some(&McpAuthStatus::OAuth) + if auth_statuses.get(&key) == Some(&McpAuthStatus::OAuth) || auth_status_entries - .get(&server_name) + .get(&key) .and_then(|entry| entry.config.as_ref()) .is_some_and(|config| matches!(config.auth, McpServerAuth::EmaAuth)) { - auth_statuses.insert(server_name, McpAuthStatus::NotLoggedIn); + auth_statuses.insert(key, McpAuthStatus::NotLoggedIn); } } @@ -943,7 +924,7 @@ pub(crate) async fn collect_mcp_server_status_snapshot_from_manager( resources: convert_mcp_resources(resources), resource_templates: convert_mcp_resource_templates(resource_templates), auth_statuses, - server_names, + server_keys, } } diff --git a/codex-rs/codex-mcp/src/mcp/mod_tests.rs b/codex-rs/codex-mcp/src/mcp/mod_tests.rs index a5389763c8..c0addd6d2e 100644 --- a/codex-rs/codex-mcp/src/mcp/mod_tests.rs +++ b/codex-rs/codex-mcp/src/mcp/mod_tests.rs @@ -91,7 +91,7 @@ async fn ema_auth_statuses_do_not_wait_for_account_refresh() -> anyhow::Result<( }) .map_err(anyhow::Error::msg)?; servers.insert( - name.to_string(), + McpServerKey::unscoped(name), EffectiveMcpServer::from_host_config(server), ); } @@ -119,8 +119,8 @@ async fn ema_auth_statuses_do_not_wait_for_account_refresh() -> anyhow::Result<( .map(|(name, entry)| (name, entry.auth_state)) .collect::>(), HashMap::from([ - ("first".to_string(), McpAuthState::BearerToken), - ("second".to_string(), McpAuthState::BearerToken), + (McpServerKey::unscoped("first"), McpAuthState::BearerToken), + (McpServerKey::unscoped("second"), McpAuthState::BearerToken), ]), ); drop(lease); @@ -173,7 +173,7 @@ async fn status_snapshot_only_downgrades_oauth_and_ema_authentication_failures() } manager.insert_test_client(name, client); auth_status_entries.insert( - name.to_string(), + McpServerKey::unscoped(name), McpAuthStatusEntry { config: name.starts_with("ema-").then(|| { serde_json::from_value(serde_json::json!({ @@ -186,26 +186,29 @@ async fn status_snapshot_only_downgrades_oauth_and_ema_authentication_failures() ); } - let server_names = auth_status_entries.keys().cloned().collect(); + let server_keys = auth_status_entries.keys().cloned().collect(); let snapshot = collect_mcp_server_status_snapshot_from_manager( &manager, auth_status_entries, - server_names, + server_keys, McpSnapshotDetail::ToolsAndAuthOnly, ) .await; assert_eq!( snapshot.auth_statuses, - HashMap::from([ - ("oauth-failed".to_string(), McpAuthStatus::NotLoggedIn), - ("oauth-ready".to_string(), McpAuthStatus::OAuth), - ("oauth-provider-error".to_string(), McpAuthStatus::OAuth), - ("ema-failed".to_string(), McpAuthStatus::NotLoggedIn), - ("ema-ready".to_string(), McpAuthStatus::BearerToken), - ("ema-provider-error".to_string(), McpAuthStatus::BearerToken), - ("bearer".to_string(), McpAuthStatus::BearerToken), - ]), + HashMap::from( + [ + ("oauth-failed", McpAuthStatus::NotLoggedIn), + ("oauth-ready", McpAuthStatus::OAuth), + ("oauth-provider-error", McpAuthStatus::OAuth), + ("ema-failed", McpAuthStatus::NotLoggedIn), + ("ema-ready", McpAuthStatus::BearerToken), + ("ema-provider-error", McpAuthStatus::BearerToken), + ("bearer", McpAuthStatus::BearerToken), + ] + .map(|(name, status)| (McpServerKey::unscoped(name), status)), + ), ); } diff --git a/codex-rs/codex-mcp/src/resource_client.rs b/codex-rs/codex-mcp/src/resource_client.rs index e84c4c6908..9ce31c3d22 100644 --- a/codex-rs/codex-mcp/src/resource_client.rs +++ b/codex-rs/codex-mcp/src/resource_client.rs @@ -346,7 +346,10 @@ impl McpResourceClient { /// Reads one resource from the named server. pub async fn read_resource(&self, server: &str, uri: &str) -> Result { let params = ReadResourceRequestParams::new(uri.to_string()); - let result = self.runtime.latest_read_resource(server, params).await?; + let result = self + .runtime + .latest_read_resource(server, /*environment_id*/ None, params) + .await?; let contents = result .contents .into_iter() diff --git a/codex-rs/codex-mcp/src/rmcp_client.rs b/codex-rs/codex-mcp/src/rmcp_client.rs index f2b1139d2e..c082941e16 100644 --- a/codex-rs/codex-mcp/src/rmcp_client.rs +++ b/codex-rs/codex-mcp/src/rmcp_client.rs @@ -151,7 +151,7 @@ struct CodexAppsStartupReconnectState { #[derive(Clone)] struct CodexAppsStartupStatusContext { submit_id: String, - server_name: String, + server_key: McpServerKey, tx_event: Sender, } @@ -173,12 +173,12 @@ impl CodexAppsStartupReconnect { fn with_startup_status_context( mut self, submit_id: String, - server_name: String, + server_key: McpServerKey, tx_event: Option>, ) -> Self { self.startup_status_context = tx_event.map(|tx_event| CodexAppsStartupStatusContext { submit_id, - server_name, + server_key, tx_event, }); self @@ -247,7 +247,11 @@ impl CodexAppsStartupReconnect { .send(Event { id: context.submit_id, msg: EventMsg::McpStartupUpdate(McpStartupUpdateEvent { - server: context.server_name, + server: context.server_key.name().to_owned(), + environment_id: context + .server_key + .scoped_environment_id() + .map(str::to_owned), status: McpStartupStatus::Ready, }), }) @@ -505,7 +509,7 @@ impl AsyncManagedClient { ) -> Self { let server_name = server_key.name().to_owned(); let is_codex_apps_mcp_server = server_name == CODEX_APPS_MCP_SERVER_NAME; - let reconnect_server_name = server_name; + let reconnect_server_key = server_key.clone(); let reconnect_tx_event = tx_event.clone(); let cached_server_info = if is_codex_apps_mcp_server { codex_apps_tools_cache_context @@ -614,7 +618,7 @@ impl AsyncManagedClient { })) .with_startup_status_context( startup_submit_id, - reconnect_server_name, + reconnect_server_key, reconnect_tx_event, ), ) diff --git a/codex-rs/codex-mcp/src/runtime.rs b/codex-rs/codex-mcp/src/runtime.rs index 570ff1aea1..55b3b50551 100644 --- a/codex-rs/codex-mcp/src/runtime.rs +++ b/codex-rs/codex-mcp/src/runtime.rs @@ -4,7 +4,8 @@ //! environment in which MCP servers execute. Transport startup lives in //! [`crate::rmcp_client`] and connection-set behavior lives in //! [`crate::connection_manager`]. Registry removal revokes EMA authority before -//! the thread becomes untracked. +//! the thread becomes untracked. Client targets resolve against the same runtime +//! publication whose connections execute the operation. #[cfg(test)] #[path = "runtime/apps_tool_refresh_tests.rs"] @@ -829,29 +830,53 @@ impl McpRuntime { pub async fn latest_read_resource( &self, server: &str, + environment_id: Option<&str>, params: ReadResourceRequestParams, ) -> anyhow::Result { - let connections = self.latest_connections(); - let key = connections - .resolve_server_name(server) + let current = self.current.load_full(); + let key = current + .config + .as_ref() + .map(|config| { + config + .mcp_server_catalog + .resolve_server_key(server, environment_id) + }) .ok_or_else(|| anyhow::anyhow!("unknown MCP server '{server}'"))?; - connections.read_resource(key, params).await + current.connections.read_resource(&key, params).await } pub async fn latest_call_tool_without_attribution( &self, server: &str, + environment_id: Option<&str>, tool: &str, arguments: Option, meta: Option, ) -> anyhow::Result { - let connections = self.latest_connections(); - let server_key = - connections.resolve_tool_call_server(server, tool, /*environment_id*/ None)?; - connections.wait_for_server_startup(server_key).await; - connections + let current = self.current.load_full(); + let server_key = current + .config + .as_ref() + .map(|config| { + config + .mcp_server_catalog + .resolve_server_key(server, environment_id) + }) + .ok_or_else(|| anyhow::anyhow!("unknown MCP server '{server}'"))?; + current.connections.validate_tool_call(&server_key, tool)?; + current + .connections + .wait_for_server_startup(&server_key) + .await; + current + .connections .call_tool( - server_key, tool, arguments, meta, /*requested_timeout*/ None, + &server_key, + tool, + arguments, + meta, + /*requested_timeout*/ None, /*wait_for_server*/ true, ) .await @@ -967,7 +992,8 @@ impl McpRuntime { pub async fn connection_statuses( &self, config: &McpConfig, - ) -> std::collections::HashMap { + ) -> std::collections::HashMap + { let current = self.current.load_full(); let Some(published_config) = current.config.as_ref() else { return HashMap::new(); @@ -976,10 +1002,8 @@ impl McpRuntime { statuses.retain(|name, _| { published_config .mcp_server_catalog - .server_by_name(name) - .is_some_and(|server| { - config.mcp_server_catalog.server_by_name(name) == Some(server) - }) + .server(name) + .is_some_and(|server| config.mcp_server_catalog.server(name) == Some(server)) }); statuses } @@ -1342,6 +1366,7 @@ mod tests { runtime .latest_call_tool_without_attribution( CODEX_APPS_MCP_SERVER_NAME, + /*environment_id*/ None, "search", /*arguments*/ None, /*meta*/ None, diff --git a/codex-rs/codex-mcp/src/runtime/status.rs b/codex-rs/codex-mcp/src/runtime/status.rs index bb4b382e62..5a4d393fa0 100644 --- a/codex-rs/codex-mcp/src/runtime/status.rs +++ b/codex-rs/codex-mcp/src/runtime/status.rs @@ -14,11 +14,12 @@ use crate::mcp::effective_mcp_servers; impl McpRuntime { /// Reuses the selected connection and catalog without starting unrelated servers. - /// Configuration and metadata belong to the same captured runtime publication. + /// Resolves the selector, configuration, and metadata in one captured runtime publication. /// An expected registration excludes mismatched connections before discovery. pub async fn server_status_snapshot( &self, server: &str, + environment_id: Option<&str>, detail: McpSnapshotDetail, expected_registration: Option<&ResolvedMcpServer>, runtime_context: &McpRuntimeContext, @@ -34,16 +35,15 @@ impl McpRuntime { .as_ref() .ok_or_else(|| anyhow::anyhow!("MCP runtime is not configured"))?, ); + let server = config + .mcp_server_catalog + .resolve_server_key(server, environment_id); let mut servers = effective_mcp_servers(&config, current.auth.as_ref()); - servers.retain(|name, _| { - Some(name) == config.mcp_server_catalog.resolve_server_name(server) + servers.retain(|key, _| { + key == &server && expected_registration - .is_none_or(|expected| config.mcp_server_catalog.server(name) == Some(expected)) + .is_none_or(|expected| config.mcp_server_catalog.server(key) == Some(expected)) }); - let servers = servers - .into_values() - .map(|value| (server.to_owned(), value)) - .collect::>(); if config.xaa_enabled && servers .values() @@ -52,7 +52,7 @@ impl McpRuntime { // Finish selected startup and any rejected-grant cleanup before reading auth. current .connections - .list_available_server_infos(|name| name == server) + .list_available_server_infos(|name| name == &server) .await; } let auth_statuses = compute_auth_statuses( diff --git a/codex-rs/codex-mcp/src/user_verification_elicitation.rs b/codex-rs/codex-mcp/src/user_verification_elicitation.rs index 984e7d3384..af83f2ceb0 100644 --- a/codex-rs/codex-mcp/src/user_verification_elicitation.rs +++ b/codex-rs/codex-mcp/src/user_verification_elicitation.rs @@ -28,11 +28,6 @@ pub(super) async fn route( }); }; router - .request_user_interaction( - Some(events), - &authority, - server_key.name().to_owned(), - request, - ) + .request_user_interaction(Some(events), &authority, server_key, request) .await } diff --git a/codex-rs/core/src/codex_delegate_tests.rs b/codex-rs/core/src/codex_delegate_tests.rs index ab7e698585..ed83029dbd 100644 --- a/codex-rs/core/src/codex_delegate_tests.rs +++ b/codex-rs/core/src/codex_delegate_tests.rs @@ -76,6 +76,7 @@ async fn forward_events_filters_private_events_before_blocked_send_is_cancelled( for msg in [ EventMsg::McpStartupUpdate(McpStartupUpdateEvent { server: "pending".to_string(), + environment_id: None, status: McpStartupStatus::Starting, }), EventMsg::McpStartupComplete(McpStartupCompleteEvent::default()), diff --git a/codex-rs/core/src/codex_thread.rs b/codex-rs/core/src/codex_thread.rs index 1ad0ce3d68..9222dff46e 100644 --- a/codex-rs/core/src/codex_thread.rs +++ b/codex-rs/core/src/codex_thread.rs @@ -1264,7 +1264,10 @@ impl CodexThread { pub async fn mcp_connection_statuses( &self, config: &codex_mcp::McpConfig, - ) -> std::collections::HashMap { + ) -> std::collections::HashMap< + codex_mcp::McpServerKey, + codex_protocol::mcp::McpServerConnectionStatus, + > { self.session .services .mcp_runtime @@ -1388,6 +1391,7 @@ impl CodexThread { pub async fn read_mcp_resource( &self, server: &str, + environment_id: Option<&str>, params: ReadResourceRequestParams, ) -> anyhow::Result { self.session.refresh_mcp_if_dirty().await; @@ -1395,7 +1399,7 @@ impl CodexThread { .session .services .mcp_runtime - .latest_read_resource(server, params) + .latest_read_resource(server, environment_id, params) .await?; Ok(serde_json::to_value(result)?) @@ -1405,6 +1409,7 @@ impl CodexThread { pub async fn mcp_server_status_snapshot( &self, server: &str, + environment_id: Option<&str>, detail: codex_mcp::McpSnapshotDetail, expected_registration: Option<&codex_mcp::ResolvedMcpServer>, ) -> anyhow::Result<( @@ -1416,7 +1421,13 @@ impl CodexThread { self.session .services .mcp_runtime - .server_status_snapshot(server, detail, expected_registration, &runtime_context) + .server_status_snapshot( + server, + environment_id, + detail, + expected_registration, + &runtime_context, + ) .await } @@ -1460,6 +1471,7 @@ impl CodexThread { pub async fn call_mcp_tool( &self, server: &str, + environment_id: Option<&str>, tool: &str, arguments: Option, meta: Option, @@ -1468,7 +1480,7 @@ impl CodexThread { self.session .services .mcp_runtime - .latest_call_tool_without_attribution(server, tool, arguments, meta) + .latest_call_tool_without_attribution(server, environment_id, tool, arguments, meta) .await } diff --git a/codex-rs/core/src/mcp_tool_call.rs b/codex-rs/core/src/mcp_tool_call.rs index cb62c150c3..4084f21dbd 100644 --- a/codex-rs/core/src/mcp_tool_call.rs +++ b/codex-rs/core/src/mcp_tool_call.rs @@ -184,6 +184,10 @@ pub(crate) async fn handle_mcp_tool_call( let invocation = McpInvocation { server: server.clone(), + environment_id: advertised_tool + .server_key() + .scoped_environment_id() + .map(str::to_owned), tool: tool_name.clone(), arguments: arguments_value.clone(), }; @@ -959,7 +963,7 @@ async fn maybe_request_codex_apps_auth_elicitation( let response = sess .request_mcp_server_elicitation( turn_context, - CODEX_APPS_MCP_SERVER_NAME.to_string(), + McpServerKey::unscoped(CODEX_APPS_MCP_SERVER_NAME), request_id, request, ) @@ -1136,12 +1140,14 @@ async fn notify_mcp_tool_call_started( ) { let McpInvocation { server, + environment_id, tool, arguments, } = invocation; let item = TurnItem::McpToolCall(McpToolCallItem { id: call_id.to_string(), server, + environment_id, tool, arguments: arguments.unwrap_or(JsonValue::Null), connector_id: item_metadata.connector_id, @@ -1182,12 +1188,14 @@ async fn notify_mcp_tool_call_completed( }; let McpInvocation { server, + environment_id, tool, arguments, } = invocation; let item = TurnItem::McpToolCall(McpToolCallItem { id: call_id.to_string(), server, + environment_id, tool, arguments: arguments.unwrap_or(JsonValue::Null), connector_id: item_metadata.connector_id, @@ -1926,7 +1934,7 @@ pub(crate) async fn request_mcp_tool_user_approval( prompt_options, }); let response = sess - .request_mcp_server_elicitation(turn_context, server.clone(), request_id, request) + .request_mcp_server_elicitation(turn_context, server_key.clone(), request_id, request) .await; // Missing replies are interruptions. A received Cancel needs provenance // from its source; RPC success alone does not establish a user action. diff --git a/codex-rs/core/src/mcp_tool_call/recorded.rs b/codex-rs/core/src/mcp_tool_call/recorded.rs index 3e55e63f68..e083176641 100644 --- a/codex-rs/core/src/mcp_tool_call/recorded.rs +++ b/codex-rs/core/src/mcp_tool_call/recorded.rs @@ -32,6 +32,10 @@ pub(crate) async fn prepare_approval_action( .map_err(|err| FunctionCallError::RespondToModel(format!("{err:#}")))?; let mcp_invocation = McpInvocation { server: advertised_tool.server_name().to_owned(), + environment_id: advertised_tool + .server_key() + .scoped_environment_id() + .map(str::to_owned), tool: advertised_tool.tool.name.to_string(), arguments, }; diff --git a/codex-rs/core/src/mcp_tool_call_tests.rs b/codex-rs/core/src/mcp_tool_call_tests.rs index f48097c04f..e11bf8e32a 100644 --- a/codex-rs/core/src/mcp_tool_call_tests.rs +++ b/codex-rs/core/src/mcp_tool_call_tests.rs @@ -987,6 +987,7 @@ fn custom_mcp_tool_question_offers_session_remember_and_always_allow() { fn custom_servers_support_session_and_persistent_approval() { let invocation = McpInvocation { server: "custom_server".to_string(), + environment_id: None, tool: "run_action".to_string(), arguments: None, }; @@ -1042,6 +1043,7 @@ fn custom_servers_support_session_and_persistent_approval() { fn codex_apps_connectors_support_persistent_approval() { let invocation = McpInvocation { server: CODEX_APPS_MCP_SERVER_NAME.to_string(), + environment_id: None, tool: "calendar/list_events".to_string(), arguments: None, }; @@ -1592,6 +1594,7 @@ async fn mcp_tool_call_item_includes_app_identity() { "call-plugin", McpInvocation { server: CODEX_APPS_MCP_SERVER_NAME.to_string(), + environment_id: None, tool: "echo".to_string(), arguments: None, }, @@ -2104,6 +2107,7 @@ fn approval_elicitation_meta_merges_session_and_always_persist_for_custom_server fn guardian_mcp_review_request_includes_invocation_metadata() { let invocation = McpInvocation { server: CODEX_APPS_MCP_SERVER_NAME.to_string(), + environment_id: None, tool: "browser_navigate".to_string(), arguments: Some(serde_json::json!({ "url": "https://example.com", @@ -2145,6 +2149,7 @@ fn guardian_mcp_review_request_includes_invocation_metadata() { fn guardian_mcp_review_request_includes_annotations_when_present() { let invocation = McpInvocation { server: "custom_server".to_string(), + environment_id: None, tool: "dangerous_tool".to_string(), arguments: None, }; @@ -2193,6 +2198,7 @@ fn guardian_mcp_review_request_includes_annotations_when_present() { fn guardian_mcp_review_request_ignores_untrusted_connected_account_email() { let invocation = McpInvocation { server: "custom_server".to_string(), + environment_id: None, tool: "dangerous_tool".to_string(), arguments: None, }; @@ -2972,6 +2978,7 @@ async fn approve_mode_skips_when_annotations_do_not_require_approval() { let turn_context = Arc::new(turn_context); let invocation = McpInvocation { server: "custom_server".to_string(), + environment_id: None, tool: "read_only_tool".to_string(), arguments: None, }; @@ -3056,6 +3063,7 @@ async fn guardian_mode_skips_auto_when_annotations_do_not_require_approval() { let turn_context = Arc::new(turn_context); let invocation = McpInvocation { server: "custom_server".to_string(), + environment_id: None, tool: "read_only_tool".to_string(), arguments: None, }; @@ -3117,6 +3125,7 @@ async fn permission_request_hook_allows_mcp_tool_call() { let turn_context = Arc::new(turn_context); let invocation = McpInvocation { server: "memory".to_string(), + environment_id: None, tool: "create_entities".to_string(), arguments: Some(serde_json::json!({ "entities": [{ @@ -3216,6 +3225,7 @@ async fn permission_request_hook_uses_hook_tool_name_without_metadata() { let turn_context = Arc::new(turn_context); let invocation = McpInvocation { server: "memory".to_string(), + environment_id: None, tool: "create_entities".to_string(), arguments: Some(serde_json::json!({ "entities": [] })), }; @@ -3292,6 +3302,7 @@ async fn permission_request_hook_runs_after_remembered_mcp_approval() { ); let invocation = McpInvocation { server: "memory".to_string(), + environment_id: None, tool: "create_entities".to_string(), arguments: Some(serde_json::json!({ "entities": [] })), }; @@ -3409,6 +3420,7 @@ async fn strict_auto_review_forces_guardian_for_mcp_policy_skip( let turn_context = Arc::new(turn_context); let invocation = McpInvocation { server: "custom_server".to_string(), + environment_id: None, tool: "dangerous_tool".to_string(), arguments: Some(serde_json::json!({ "calendar_id": "primary" })), }; @@ -3501,6 +3513,7 @@ async fn assert_mcp_user_approval_persistence( *session.active_turn.lock().await = Some(ActiveTurn::default()); let invocation = McpInvocation { server: "memory".to_string(), + environment_id: None, tool: "create_entities".to_string(), arguments: Some(serde_json::json!({ "entities": [] })), }; @@ -3594,6 +3607,7 @@ async fn prompt_mode_waits_for_approval_when_annotations_do_not_require_approval } let invocation = McpInvocation { server: "custom_server".to_string(), + environment_id: None, tool: "read_only_tool".to_string(), arguments: None, }; @@ -3662,6 +3676,7 @@ async fn full_access_mode_skips_mcp_tool_approval_for_all_approval_modes() { let turn_context = Arc::new(turn_context); let invocation = McpInvocation { server: CODEX_APPS_MCP_SERVER_NAME.to_string(), + environment_id: None, tool: "dangerous_tool".to_string(), arguments: Some(serde_json::json!({ "id": 1 })), }; @@ -3724,6 +3739,7 @@ async fn approve_mode_skips_guardian_in_every_permission_mode() { let invocation = McpInvocation { server: CODEX_APPS_MCP_SERVER_NAME.to_string(), + environment_id: None, tool: "dangerous_tool".to_string(), arguments: Some(serde_json::json!({ "id": 1 })), }; @@ -3810,6 +3826,7 @@ async fn approval_metadata_is_released_when_the_invocation_future_is_dropped() { let review_context = GuardianReviewContext::from(Arc::new(turn_context)); let invocation = McpInvocation { server: CODEX_APPS_MCP_SERVER_NAME.to_string(), + environment_id: None, tool: "write_record".to_string(), arguments: Some(serde_json::json!({"value": 42})), }; diff --git a/codex-rs/core/src/realtime_history_tests.rs b/codex-rs/core/src/realtime_history_tests.rs index dca8f02ffc..c11a087416 100644 --- a/codex-rs/core/src/realtime_history_tests.rs +++ b/codex-rs/core/src/realtime_history_tests.rs @@ -93,6 +93,7 @@ fn mcp_tool_call(id: &str, server: &str, status: McpToolCallStatus) -> TurnItem TurnItem::McpToolCall(McpToolCallItem { id: id.to_string(), server: server.to_string(), + environment_id: None, tool: "create_thread".to_string(), arguments: serde_json::Value::Null, connector_id: None, diff --git a/codex-rs/core/src/session/mcp.rs b/codex-rs/core/src/session/mcp.rs index eaad9b74d8..69ce341eb8 100644 --- a/codex-rs/core/src/session/mcp.rs +++ b/codex-rs/core/src/session/mcp.rs @@ -22,6 +22,7 @@ use codex_mcp::ElicitationReviewRequest; use codex_mcp::ElicitationReviewer; use codex_mcp::ElicitationReviewerHandle; use codex_mcp::MCP_TOOL_CODEX_APPS_META_KEY; +use codex_mcp::McpServerKey; use codex_otel::auth_storage::AuthStorageOriginator; use codex_protocol::capabilities::CapabilityRootLocation; use codex_protocol::capabilities::SelectedCapabilityRoot; @@ -782,10 +783,11 @@ impl Session { pub async fn request_mcp_server_elicitation( &self, turn_context: &TurnContext, - server_name: String, + server_key: McpServerKey, request_id: RequestId, request: ElicitationRequest, ) -> Option { + let server_name = server_key.name().to_owned(); // This callback carries a request ID, not a reliable tool invocation owner. // Do not report its human wait as ordinary tool execution. if turn_context @@ -827,6 +829,7 @@ impl Session { let event = EventMsg::ElicitationRequest(ElicitationRequestEvent { turn_id: Some(turn_context.sub_id.clone()), server_name, + environment_id: server_key.scoped_environment_id().map(str::to_owned), id, request, }); diff --git a/codex-rs/core/src/session/mcp_tests.rs b/codex-rs/core/src/session/mcp_tests.rs index a6dd60fc13..fc35545194 100644 --- a/codex-rs/core/src/session/mcp_tests.rs +++ b/codex-rs/core/src/session/mcp_tests.rs @@ -7,6 +7,7 @@ fn plugin_install_elicitation_telemetry_metadata_requires_install_tool_suggestio let event = EventMsg::ElicitationRequest(ElicitationRequestEvent { turn_id: Some("turn-1".to_string()), server_name: "codex_apps".to_string(), + environment_id: None, id: codex_protocol::mcp::RequestId::String("request-1".to_string()), request: codex_protocol::approvals::ElicitationRequest::Form { meta: Some(json!({ @@ -36,6 +37,7 @@ fn plugin_install_elicitation_telemetry_metadata_requires_install_tool_suggestio let enable_event = EventMsg::ElicitationRequest(ElicitationRequestEvent { turn_id: Some("turn-1".to_string()), server_name: "codex_apps".to_string(), + environment_id: None, id: codex_protocol::mcp::RequestId::String("request-2".to_string()), request: codex_protocol::approvals::ElicitationRequest::Form { meta: Some(json!({ diff --git a/codex-rs/core/src/session/tests.rs b/codex-rs/core/src/session/tests.rs index 743b949807..df78439180 100644 --- a/codex-rs/core/src/session/tests.rs +++ b/codex-rs/core/src/session/tests.rs @@ -731,7 +731,7 @@ async fn request_mcp_server_elicitation_waits_for_user_response( session .request_mcp_server_elicitation( &turn_context, - "codex_apps".to_string(), + codex_mcp::McpServerKey::unscoped("codex_apps"), RequestId::String("request-1".into()), request, ) @@ -750,6 +750,7 @@ async fn request_mcp_server_elicitation_waits_for_user_response( codex_protocol::approvals::ElicitationRequestEvent { turn_id: Some(turn_context.sub_id.clone()), server_name: "codex_apps".to_string(), + environment_id: None, id: codex_protocol::mcp::RequestId::String("request-1".to_string()), request, } diff --git a/codex-rs/core/src/session/turn_tests.rs b/codex-rs/core/src/session/turn_tests.rs index 5ba9b18821..8d81482b38 100644 --- a/codex-rs/core/src/session/turn_tests.rs +++ b/codex-rs/core/src/session/turn_tests.rs @@ -164,6 +164,7 @@ fn realtime_user_verification_notice_excludes_request_payload() { let event = EventMsg::ElicitationRequest(codex_protocol::approvals::ElicitationRequestEvent { turn_id: None, server_name: "private-server-name".to_string(), + environment_id: None, id: codex_protocol::mcp::RequestId::String("private-request-id".to_string()), request: codex_protocol::approvals::ElicitationRequest::UserVerification { meta: None, diff --git a/codex-rs/core/src/tools/handlers/mcp_resource.rs b/codex-rs/core/src/tools/handlers/mcp_resource.rs index 4746b000cc..a5f8614c01 100644 --- a/codex-rs/core/src/tools/handlers/mcp_resource.rs +++ b/codex-rs/core/src/tools/handlers/mcp_resource.rs @@ -410,12 +410,14 @@ async fn emit_tool_call_begin( ) { let McpInvocation { server, + environment_id, tool, arguments, } = invocation; let item = TurnItem::McpToolCall(McpToolCallItem { id: call_id.to_string(), server, + environment_id, tool, arguments: arguments.unwrap_or(Value::Null), connector_id: None, @@ -455,12 +457,14 @@ async fn emit_tool_call_end( }; let McpInvocation { server, + environment_id, tool, arguments, } = invocation; let item = TurnItem::McpToolCall(McpToolCallItem { id: call_id.to_string(), server, + environment_id, tool, arguments: arguments.unwrap_or(Value::Null), connector_id: None, diff --git a/codex-rs/core/src/tools/handlers/mcp_resource/list_mcp_resource_templates.rs b/codex-rs/core/src/tools/handlers/mcp_resource/list_mcp_resource_templates.rs index f93be9ee82..1ebdde81ab 100644 --- a/codex-rs/core/src/tools/handlers/mcp_resource/list_mcp_resource_templates.rs +++ b/codex-rs/core/src/tools/handlers/mcp_resource/list_mcp_resource_templates.rs @@ -66,15 +66,22 @@ impl ListMcpResourceTemplatesHandler { let arguments = resource_arguments(&payload)?; let args = ListResourceArgs::parse(arguments.clone())?; + let target = args.target(&step_context); let invocation = McpInvocation { server: args.server.clone().unwrap_or_else(|| "codex".to_string()), + environment_id: target + .as_ref() + .ok() + .and_then(Option::as_ref) + .and_then(|(key, _)| key.scoped_environment_id()) + .map(str::to_owned), tool: "list_mcp_resource_templates".to_string(), arguments: arguments.clone(), }; run_resource_operation(&session, &step_context, &call_id, invocation, async { - if let Some((server_key, params)) = args.target(&step_context)? { + if let Some((server_key, params)) = target? { let result = mcp .list_resource_templates(server_key, params) .await diff --git a/codex-rs/core/src/tools/handlers/mcp_resource/list_mcp_resources.rs b/codex-rs/core/src/tools/handlers/mcp_resource/list_mcp_resources.rs index f4ebc7e956..7b57a57140 100644 --- a/codex-rs/core/src/tools/handlers/mcp_resource/list_mcp_resources.rs +++ b/codex-rs/core/src/tools/handlers/mcp_resource/list_mcp_resources.rs @@ -66,15 +66,22 @@ impl ListMcpResourcesHandler { let arguments = resource_arguments(&payload)?; let args = ListResourceArgs::parse(arguments.clone())?; + let target = args.target(&step_context); let invocation = McpInvocation { server: args.server.clone().unwrap_or_else(|| "codex".to_string()), + environment_id: target + .as_ref() + .ok() + .and_then(Option::as_ref) + .and_then(|(key, _)| key.scoped_environment_id()) + .map(str::to_owned), tool: "list_mcp_resources".to_string(), arguments: arguments.clone(), }; run_resource_operation(&session, &step_context, &call_id, invocation, async { - if let Some((server_key, params)) = args.target(&step_context)? { + if let Some((server_key, params)) = target? { let result = mcp .list_resources(server_key, params) .await diff --git a/codex-rs/core/src/tools/handlers/mcp_resource/read_mcp_resource.rs b/codex-rs/core/src/tools/handlers/mcp_resource/read_mcp_resource.rs index a38c5dee17..cae7d4d8f4 100644 --- a/codex-rs/core/src/tools/handlers/mcp_resource/read_mcp_resource.rs +++ b/codex-rs/core/src/tools/handlers/mcp_resource/read_mcp_resource.rs @@ -70,16 +70,21 @@ impl ReadMcpResourceHandler { uri, environment_id, } = ReadResourceArgs::parse(arguments.clone())?; + let server_key = resolve_resource_server(&step_context, &server, environment_id.as_deref()); let invocation = McpInvocation { server: server.clone(), + environment_id: server_key + .as_ref() + .ok() + .and_then(|key| key.scoped_environment_id()) + .map(str::to_owned), tool: "read_mcp_resource".to_string(), arguments: arguments.clone(), }; run_resource_operation(&session, &step_context, &call_id, invocation, async { - let server_key = - resolve_resource_server(&step_context, &server, environment_id.as_deref())?; + let server_key = server_key?; let result = mcp .read_resource(server_key, ReadResourceRequestParams::new(uri.clone())) .await diff --git a/codex-rs/core/src/tools/handlers/request_plugin_install.rs b/codex-rs/core/src/tools/handlers/request_plugin_install.rs index a79fbaa983..84f2f875d3 100644 --- a/codex-rs/core/src/tools/handlers/request_plugin_install.rs +++ b/codex-rs/core/src/tools/handlers/request_plugin_install.rs @@ -8,6 +8,7 @@ use codex_analytics::build_track_events_context; use codex_config::types::ToolSuggestDisabledTool; use codex_core_plugins::remote::REMOTE_GLOBAL_MARKETPLACE_NAME; use codex_mcp::CODEX_APPS_MCP_SERVER_NAME; +use codex_mcp::McpServerKey; use codex_rmcp_client::ElicitationAction; use codex_rmcp_client::ElicitationResponse; use codex_tools::DiscoverableTool; @@ -254,7 +255,7 @@ impl RequestPluginInstallHandler { let response = session .request_mcp_server_elicitation( turn.as_ref(), - CODEX_APPS_MCP_SERVER_NAME.to_string(), + McpServerKey::unscoped(CODEX_APPS_MCP_SERVER_NAME), request_id, request, ) diff --git a/codex-rs/core/tests/suite/codex_apps_protocol.rs b/codex-rs/core/tests/suite/codex_apps_protocol.rs index 687cd25c9b..b1b646b184 100644 --- a/codex-rs/core/tests/suite/codex_apps_protocol.rs +++ b/codex-rs/core/tests/suite/codex_apps_protocol.rs @@ -285,6 +285,7 @@ async fn next_model_step_uses_the_in_flight_apps_refresh() -> anyhow::Result<()> Duration::from_secs(10), fixture.codex.mcp_server_status_snapshot( CODEX_APPS_MCP_SERVER_NAME, + /*environment_id*/ None, McpSnapshotDetail::ToolsAndAuthOnly, /*expected_registration*/ None, ), diff --git a/codex-rs/core/tests/suite/hooks_executor.rs b/codex-rs/core/tests/suite/hooks_executor.rs index 09837754aa..e2c81bab84 100644 --- a/codex-rs/core/tests/suite/hooks_executor.rs +++ b/codex-rs/core/tests/suite/hooks_executor.rs @@ -868,6 +868,7 @@ async fn thread_plugin_selection_disables_executor_hooks_without_disabling_their .codex .call_mcp_tool( "node_repl", + /*environment_id*/ None, "js", Some(json!({"code": "1 + 1"})), /*meta*/ None, @@ -1385,6 +1386,7 @@ async fn executor_stop_hook_rejects_mismatched_environment() -> Result<()> { .codex .call_mcp_tool( "node_repl", + /*environment_id*/ None, "js", Some(json!({"code": "1 + 1"})), /*meta*/ None, @@ -1550,6 +1552,7 @@ async fn executor_browser_and_computer_use_cleanup_hooks_use_separate_mcp_routes .codex .call_mcp_tool( "node_repl", + /*environment_id*/ None, "js", Some(json!({ "code": "1 + 1" })), /*meta*/ None, diff --git a/codex-rs/core/tests/suite/hooks_mcp.rs b/codex-rs/core/tests/suite/hooks_mcp.rs index 3f44235564..b14bfd4521 100644 --- a/codex-rs/core/tests/suite/hooks_mcp.rs +++ b/codex-rs/core/tests/suite/hooks_mcp.rs @@ -1,3 +1,4 @@ +use codex_mcp::McpServerKey; use std::collections::HashMap; use std::fs; use std::path::Path; @@ -602,7 +603,7 @@ async fn mcp_tool_hook_starts_cached_model_hidden_tools( .thread .mcp_connection_statuses(&mcp_config) .await - .get(RMCP_SERVER), + .get(&McpServerKey::unscoped(RMCP_SERVER)), Some(&McpServerConnectionStatus::NotStarted), ); subagent @@ -630,7 +631,7 @@ async fn mcp_tool_hook_starts_cached_model_hidden_tools( .thread .mcp_connection_statuses(&mcp_config) .await - .get("unused"), + .get(&McpServerKey::unscoped("unused")), Some(&McpServerConnectionStatus::NotStarted), "a hook must leave unrelated cached servers dormant", ); @@ -748,7 +749,7 @@ async fn mcp_tool_hook_timeout_includes_cached_server_startup() -> Result<()> { .thread .mcp_connection_statuses(&mcp_config) .await - .get(RMCP_SERVER), + .get(&McpServerKey::unscoped(RMCP_SERVER)), Some(&McpServerConnectionStatus::NotStarted), ); subagent diff --git a/codex-rs/core/tests/suite/hooks_plugin_policy_refresh.rs b/codex-rs/core/tests/suite/hooks_plugin_policy_refresh.rs index 6cb93812ce..04583d40a8 100644 --- a/codex-rs/core/tests/suite/hooks_plugin_policy_refresh.rs +++ b/codex-rs/core/tests/suite/hooks_plugin_policy_refresh.rs @@ -152,6 +152,7 @@ async fn native_stop_hook_uses_plugin_policy_refreshed_during_turn( test.codex .call_mcp_tool( "plugin_tools", + /*environment_id*/ None, "calendar_list_events", /*arguments*/ None, /*meta*/ None, @@ -227,6 +228,7 @@ async fn native_stop_hook_uses_plugin_policy_refreshed_during_turn( test.codex .call_mcp_tool( "plugin_tools", + /*environment_id*/ None, "calendar_list_events", /*arguments*/ None, /*meta*/ None, @@ -239,6 +241,7 @@ async fn native_stop_hook_uses_plugin_policy_refreshed_during_turn( test.codex .call_mcp_tool( "hook_observer", + /*environment_id*/ None, "calendar_list_events", /*arguments*/ None, /*meta*/ None, @@ -273,6 +276,7 @@ async fn native_stop_hook_uses_plugin_policy_refreshed_during_turn( test.codex .call_mcp_tool( "plugin_tools", + /*environment_id*/ None, "calendar_list_events", /*arguments*/ None, /*meta*/ None, diff --git a/codex-rs/core/tests/suite/mcp_extension_protocol.rs b/codex-rs/core/tests/suite/mcp_extension_protocol.rs index 2a8b9ad32c..1409e24607 100644 --- a/codex-rs/core/tests/suite/mcp_extension_protocol.rs +++ b/codex-rs/core/tests/suite/mcp_extension_protocol.rs @@ -415,6 +415,7 @@ async fn hosted_apps_protocol_override_preserves_native_verification() -> anyhow caller .call_mcp_tool( CODEX_APPS_MCP_SERVER_NAME, + /*environment_id*/ None, "verify_action", /*arguments*/ None, /*meta*/ None, diff --git a/codex-rs/core/tests/suite/mcp_network_policy_compat_tests.rs b/codex-rs/core/tests/suite/mcp_network_policy_compat_tests.rs index 2a54e9cdca..1fffc26dc0 100644 --- a/codex-rs/core/tests/suite/mcp_network_policy_compat_tests.rs +++ b/codex-rs/core/tests/suite/mcp_network_policy_compat_tests.rs @@ -34,6 +34,7 @@ async fn trusted_server_without_policy_support_keeps_caller_metadata() -> anyhow .codex .call_mcp_tool( "legacy", + /*environment_id*/ None, "network_policy_meta", /*arguments*/ None, Some(json!({"caller": "keep", "codex/network-policy-meta": {"enabled": true}})), diff --git a/codex-rs/core/tests/suite/mcp_oauth_refresh_tests.rs b/codex-rs/core/tests/suite/mcp_oauth_refresh_tests.rs index c0207b95ee..d5a879b8e5 100644 --- a/codex-rs/core/tests/suite/mcp_oauth_refresh_tests.rs +++ b/codex-rs/core/tests/suite/mcp_oauth_refresh_tests.rs @@ -316,6 +316,7 @@ async fn oauth_mode_refresh_replaces_the_live_connection( .codex .call_mcp_tool( server_name, + /*environment_id*/ None, "calendar_list_events", /*arguments*/ None, /*meta*/ None, @@ -348,6 +349,7 @@ async fn oauth_mode_refresh_replaces_the_live_connection( .codex .call_mcp_tool( server_name, + /*environment_id*/ None, "calendar_list_events", /*arguments*/ None, /*meta*/ None, diff --git a/codex-rs/core/tests/suite/mcp_refresh_cleanup.rs b/codex-rs/core/tests/suite/mcp_refresh_cleanup.rs index 9a278f88be..103e1fa4a0 100644 --- a/codex-rs/core/tests/suite/mcp_refresh_cleanup.rs +++ b/codex-rs/core/tests/suite/mcp_refresh_cleanup.rs @@ -190,6 +190,7 @@ async fn refresh_keeps_superseded_mcp_server_alive_for_in_flight_calls() -> anyh codex .call_mcp_tool( "refresh_cleanup", + /*environment_id*/ None, "sync", Some(serde_json::json!({ "barrier": barrier, @@ -204,6 +205,7 @@ async fn refresh_keeps_superseded_mcp_server_alive_for_in_flight_calls() -> anyh .codex .call_mcp_tool( "refresh_cleanup", + /*environment_id*/ None, "sync", Some(serde_json::json!({ "barrier": barrier })), /*meta*/ None, diff --git a/codex-rs/core/tests/suite/mcp_startup_refresh_http_proxy.rs b/codex-rs/core/tests/suite/mcp_startup_refresh_http_proxy.rs index 82c2aa4286..d750952cf3 100644 --- a/codex-rs/core/tests/suite/mcp_startup_refresh_http_proxy.rs +++ b/codex-rs/core/tests/suite/mcp_startup_refresh_http_proxy.rs @@ -186,6 +186,7 @@ async fn local_mcp_startup_and_refresh_use_configured_http_client() -> Result<() .codex .call_mcp_tool( SERVER_NAME, + /*environment_id*/ None, "calendar_create_event", Some(json!({ "title": "Proxy refresh", diff --git a/codex-rs/core/tests/suite/mcp_tool_cache.rs b/codex-rs/core/tests/suite/mcp_tool_cache.rs index c1008cfb7d..f62ced8732 100644 --- a/codex-rs/core/tests/suite/mcp_tool_cache.rs +++ b/codex-rs/core/tests/suite/mcp_tool_cache.rs @@ -20,6 +20,7 @@ use codex_extension_api::McpServerContributionContext; use codex_extension_api::McpServerContributor; use codex_features::Feature; use codex_mcp::CODEX_APPS_MCP_SERVER_NAME; +use codex_mcp::McpServerKey; use codex_protocol::mcp::McpServerConnectionStatus; use codex_protocol::models::PermissionProfile; use codex_protocol::protocol::AskForApproval; @@ -224,6 +225,7 @@ async fn mcp_calls_stay_bound_to_each_thread() -> anyhow::Result<()> { end.invocation, McpInvocation { server: SERVER_NAME.to_string(), + environment_id: None, tool: "echo".to_string(), arguments: Some(json!({ "message": call_id })), } @@ -788,7 +790,7 @@ pub(super) async fn cached_stdio_first_use_scenario() -> anyhow::Result anyhow::Result anyhow::Result<()> { thread .mcp_connection_statuses(&config) .await - .get(SERVER_NAME), + .get(&McpServerKey::unscoped(SERVER_NAME)), Some(&McpServerConnectionStatus::NotStarted) ); } @@ -1179,6 +1187,7 @@ async fn cached_stdio_negotiates_sharing_on_first_use() -> anyhow::Result<()> { let result = thread .call_mcp_tool( SERVER_NAME, + /*environment_id*/ None, "echo", Some(json!({"message":"identify process"})), /*meta*/ None, @@ -1206,7 +1215,7 @@ async fn cached_stdio_negotiates_sharing_on_first_use() -> anyhow::Result<()> { legacy_sibling .mcp_connection_statuses(&config) .await - .get(SERVER_NAME), + .get(&McpServerKey::unscoped(SERVER_NAME)), Some(&McpServerConnectionStatus::NotStarted) ); let legacy = &processes[0]; diff --git a/codex-rs/core/tests/suite/mcp_tool_exposure.rs b/codex-rs/core/tests/suite/mcp_tool_exposure.rs index c5f868974e..59d01135fa 100644 --- a/codex-rs/core/tests/suite/mcp_tool_exposure.rs +++ b/codex-rs/core/tests/suite/mcp_tool_exposure.rs @@ -655,6 +655,7 @@ async fn timeout_refresh_replaces_pending_startup_and_reuses_ready_connection() .codex .call_mcp_tool( "ready", + /*environment_id*/ None, "calendar_list_events", /*arguments*/ None, /*meta*/ None, @@ -675,7 +676,11 @@ async fn timeout_refresh_replaces_pending_startup_and_reuses_ready_connection() // Publish without waiting for the held initialize to finish. let error = test .codex - .read_mcp_resource("unknown", ReadResourceRequestParams::new("test://resource")) + .read_mcp_resource( + "unknown", + /*environment_id*/ None, + ReadResourceRequestParams::new("test://resource"), + ) .await .expect_err("the unknown server should not exist"); assert_eq!(error.to_string(), "unknown MCP server 'unknown'"); @@ -688,6 +693,7 @@ async fn timeout_refresh_replaces_pending_startup_and_reuses_ready_connection() .codex .call_mcp_tool( name, + /*environment_id*/ None, "calendar_list_events", /*arguments*/ None, /*meta*/ None, @@ -913,6 +919,7 @@ startup_timeout_sec = 0.1 .codex .read_mcp_resource( "refreshed", + /*environment_id*/ None, ReadResourceRequestParams::new("test://resource"), ) .await; diff --git a/codex-rs/core/tests/suite/plugins.rs b/codex-rs/core/tests/suite/plugins.rs index 47fd6f4fbc..1a9aa9e4d1 100644 --- a/codex-rs/core/tests/suite/plugins.rs +++ b/codex-rs/core/tests/suite/plugins.rs @@ -937,7 +937,13 @@ async fn thread_disabled_plugins_filter_skills_and_tools_without_changing_shared // Saving pending settings must not change the admitted runtime. for (server_name, tool, arguments) in &tool_calls { test.codex - .call_mcp_tool(server_name, tool, arguments.clone(), /*meta*/ None) + .call_mcp_tool( + server_name, + /*environment_id*/ None, + tool, + arguments.clone(), + /*meta*/ None, + ) .await?; } } @@ -1015,7 +1021,13 @@ async fn thread_disabled_plugins_filter_skills_and_tools_without_changing_shared for (server_name, tool, arguments) in &tool_calls { let result = test .codex - .call_mcp_tool(server_name, tool, arguments.clone(), /*meta*/ None) + .call_mcp_tool( + server_name, + /*environment_id*/ None, + tool, + arguments.clone(), + /*meta*/ None, + ) .await; assert_eq!( result.is_ok(), diff --git a/codex-rs/core/tests/suite/rmcp_client.rs b/codex-rs/core/tests/suite/rmcp_client.rs index 45c13ab02b..0fb8ec0d77 100644 --- a/codex-rs/core/tests/suite/rmcp_client.rs +++ b/codex-rs/core/tests/suite/rmcp_client.rs @@ -978,6 +978,7 @@ async fn environment_mcp_policy_filters_runtime_config_and_model_tools( .codex .call_mcp_tool( "allowed", + /*environment_id*/ None, "echo", Some(json!({ "message": "ready" })), /*meta*/ None, @@ -3369,6 +3370,7 @@ async fn stdio_image_responses_round_trip() -> anyhow::Result<()> { call_id: call_id.to_string(), invocation: McpInvocation { server: server_name.to_string(), + environment_id: None, tool: "image".to_string(), arguments: Some(json!({})), }, @@ -3396,6 +3398,7 @@ async fn stdio_image_responses_round_trip() -> anyhow::Result<()> { end.invocation, McpInvocation { server: server_name.to_string(), + environment_id: None, tool: "image".to_string(), arguments: Some(json!({})), } diff --git a/codex-rs/core/tests/suite/scenarios_exec_tools.rs b/codex-rs/core/tests/suite/scenarios_exec_tools.rs index 51a62ba101..b211a211bf 100644 --- a/codex-rs/core/tests/suite/scenarios_exec_tools.rs +++ b/codex-rs/core/tests/suite/scenarios_exec_tools.rs @@ -182,7 +182,13 @@ async fn changed_sections_and_entries_append_without_repeating_the_catalog( )]))?; let _ = test.codex.refresh_mcp_config(current, updated).await; test.codex - .call_mcp_tool("echo_service", "echo", ready.clone(), /*meta*/ None) + .call_mcp_tool( + "echo_service", + /*environment_id*/ None, + "echo", + ready.clone(), + /*meta*/ None, + ) .await?; test.submit_text_turn(prompt).await?; } @@ -240,7 +246,13 @@ async fn changed_sections_and_entries_append_without_repeating_the_catalog( let _ = test.codex.refresh_mcp_config(current, updated).await; let result = test .codex - .call_mcp_tool("echo_service", "echo", ready.clone(), /*meta*/ None) + .call_mcp_tool( + "echo_service", + /*environment_id*/ None, + "echo", + ready.clone(), + /*meta*/ None, + ) .await; if tools.is_empty() { assert!(result.is_err(), "removed tools must not remain callable"); diff --git a/codex-rs/core/tests/suite/scenarios_incremental_tools.rs b/codex-rs/core/tests/suite/scenarios_incremental_tools.rs index ddebaf69c1..663b320760 100644 --- a/codex-rs/core/tests/suite/scenarios_incremental_tools.rs +++ b/codex-rs/core/tests/suite/scenarios_incremental_tools.rs @@ -573,6 +573,7 @@ async fn tool_removal_appends_a_standalone_notice_without_rewriting_history( test.codex .call_mcp_tool( "echo_service", + /*environment_id*/ None, "echo", Some(json!({"message": "ready after removal"})), /*meta*/ None, @@ -595,6 +596,7 @@ async fn tool_removal_appends_a_standalone_notice_without_rewriting_history( .codex .call_mcp_tool( "echo_service", + /*environment_id*/ None, "echo", Some(json!({"message": "unavailable"})), /*meta*/ None, @@ -623,7 +625,13 @@ async fn tool_removal_appends_a_standalone_notice_without_rewriting_history( ("cwd", json!({})), ] { test.codex - .call_mcp_tool("echo_service", tool, Some(arguments), /*meta*/ None) + .call_mcp_tool( + "echo_service", + /*environment_id*/ None, + tool, + Some(arguments), + /*meta*/ None, + ) .await?; } test.submit_text_turn("Continue with the restored echo service.") @@ -660,6 +668,7 @@ async fn tool_removal_appends_a_standalone_notice_without_rewriting_history( test.codex .call_mcp_tool( "functions", + /*environment_id*/ None, "echo", Some(json!({"message": "ready after instructions refresh"})), /*meta*/ None, diff --git a/codex-rs/core/tests/suite/scenarios_mcp_ema.rs b/codex-rs/core/tests/suite/scenarios_mcp_ema.rs index 16c9c8baa3..1cd4611c68 100644 --- a/codex-rs/core/tests/suite/scenarios_mcp_ema.rs +++ b/codex-rs/core/tests/suite/scenarios_mcp_ema.rs @@ -361,6 +361,7 @@ http_headers = {{ Authorization = "Bearer ordinary-access" }} test.codex .mcp_server_status_snapshot( "ordinary", + /*environment_id*/ None, codex_mcp::McpSnapshotDetail::ToolsAndAuthOnly, /*expected_registration*/ None, ) @@ -434,6 +435,7 @@ http_headers = {{ Authorization = "Bearer ordinary-access" }} .await; let mut call = Box::pin(test.codex.call_mcp_tool( "enterprise", + /*environment_id*/ None, "calendar_list_events", Some(json!({"query": "permission"})), /*meta*/ None, @@ -479,6 +481,7 @@ http_headers = {{ Authorization = "Bearer ordinary-access" }} .codex .call_mcp_tool( "enterprise", + /*environment_id*/ None, "calendar_create_event", /*arguments*/ None, /*meta*/ None, @@ -563,6 +566,7 @@ http_headers = {{ Authorization = "Bearer ordinary-access" }} .codex .call_mcp_tool( "ordinary", + /*environment_id*/ None, "calendar_create_event", Some(json!({"title": "control", "starts_at": "2026-06-18T12:00:00Z"})), /*meta*/ None, @@ -633,6 +637,7 @@ http_headers = {{ Authorization = "Bearer ordinary-access" }} thread .call_mcp_tool( "enterprise", + /*environment_id*/ None, "calendar_list_events", Some(json!({"query":"blocked"})), /*meta*/ None, @@ -665,6 +670,7 @@ http_headers = {{ Authorization = "Bearer ordinary-access" }} let result = removed .call_mcp_tool( "enterprise", + /*environment_id*/ None, "calendar_list_events", /*arguments*/ None, /*meta*/ None, diff --git a/codex-rs/core/tests/suite/scenarios_mcp_resource_messages.rs b/codex-rs/core/tests/suite/scenarios_mcp_resource_messages.rs index 2e1fe2fab7..c48b3a4e4d 100644 --- a/codex-rs/core/tests/suite/scenarios_mcp_resource_messages.rs +++ b/codex-rs/core/tests/suite/scenarios_mcp_resource_messages.rs @@ -5,6 +5,7 @@ use super::super::rmcp_client::remote_aware_stdio_server_bin; use anyhow::Result; use codex_core::ConfigRefreshOutcome; use codex_features::Feature; +use codex_mcp::McpServerKey; use codex_protocol::mcp::McpServerConnectionStatus; use codex_protocol::openai_models::ToolMode; use codex_protocol::protocol::EventMsg; @@ -142,7 +143,7 @@ async fn mcp_resource_messages(tool_mode: ToolMode) -> Result<()> { test.codex .mcp_connection_statuses(&config) .await - .get("resources"), + .get(&McpServerKey::unscoped("resources")), Some(&McpServerConnectionStatus::NotStarted) ); test.submit_turn("Query the deferred server by name and read its example note.") diff --git a/codex-rs/core/tests/suite/search_tool.rs b/codex-rs/core/tests/suite/search_tool.rs index a917925c02..280fa33ee2 100644 --- a/codex-rs/core/tests/suite/search_tool.rs +++ b/codex-rs/core/tests/suite/search_tool.rs @@ -649,6 +649,7 @@ async fn tool_search_returns_deferred_tools_without_follow_up_tool_injection() - end.invocation, McpInvocation { server: "codex_apps".to_string(), + environment_id: None, tool: "calendar_create_event".to_string(), arguments: Some(json!({ "title": "Lunch", diff --git a/codex-rs/core/tests/suite/skills_extension/discovery_grants_tests.rs b/codex-rs/core/tests/suite/skills_extension/discovery_grants_tests.rs index 3d79904697..88671e9b38 100644 --- a/codex-rs/core/tests/suite/skills_extension/discovery_grants_tests.rs +++ b/codex-rs/core/tests/suite/skills_extension/discovery_grants_tests.rs @@ -2,6 +2,7 @@ //! Exercises skill and plugin discovery before approval, after approval, and next turn. use super::*; +use codex_mcp::McpServerKey; use codex_protocol::protocol::SKILLS_INSTRUCTIONS_OPEN_TAG; use core_test_support::exec_server::ExecServerProcess; use core_test_support::test_codex::TestEnv; @@ -316,6 +317,7 @@ async fn executor_discovery_uses_current_environment_grants( }, }]); } + let server_key = McpServerKey::in_environment(&selection.environment_id, plugin_mcp_server); let thread = test .thread_manager .start_thread(StartThreadOptions { @@ -331,18 +333,16 @@ async fn executor_discovery_uses_current_environment_grants( let plugin_is_published = async || -> Result { let (config, status) = thread .mcp_server_status_snapshot( - plugin_mcp_server, + server_key.name(), + server_key.scoped_environment_id(), codex_mcp::McpSnapshotDetail::ToolsAndAuthOnly, /*expected_registration*/ None, ) .await?; - let published = config - .mcp_server_catalog - .server_by_name(plugin_mcp_server) - .is_some(); + let published = config.mcp_server_catalog.server(&server_key).is_some(); let has_echo = status .tools_by_server - .get(plugin_mcp_server) + .get(&server_key) .is_some_and(|tools| tools.contains_key("echo")); assert_eq!(has_echo, published); Ok(published) diff --git a/codex-rs/core/tests/suite/token_budget.rs b/codex-rs/core/tests/suite/token_budget.rs index 06489bd53b..b379f95575 100644 --- a/codex-rs/core/tests/suite/token_budget.rs +++ b/codex-rs/core/tests/suite/token_budget.rs @@ -8,6 +8,7 @@ use codex_core::config::TokenBudgetConfig; use codex_extension_api::ExtensionRegistryBuilder; use codex_features::Feature; use codex_login::CodexAuth; +use codex_mcp::McpServerKey; use codex_model_provider_info::built_in_model_providers; use codex_protocol::config_types::AutoCompactTokenLimitScope; use codex_protocol::items::TurnItem; @@ -834,7 +835,7 @@ async fn token_budget_context_injects_plain_thread_hint_text(cached_subagent: bo .thread .mcp_connection_statuses(&mcp_config) .await - .get("notes"), + .get(&McpServerKey::unscoped("notes")), Some(&McpServerConnectionStatus::NotStarted), ); (subagent.thread, subagent.thread_id) diff --git a/codex-rs/exec/src/event_processor_with_jsonl_output_tests.rs b/codex-rs/exec/src/event_processor_with_jsonl_output_tests.rs index b1809c88d0..5b3f655c62 100644 --- a/codex-rs/exec/src/event_processor_with_jsonl_output_tests.rs +++ b/codex-rs/exec/src/event_processor_with_jsonl_output_tests.rs @@ -104,6 +104,7 @@ fn mcp_tool_call_result_preserves_meta_in_jsonl_event() { ThreadItemPayload::McpToolCall { id: "mcp-1".to_string(), server: "search service".to_string(), + environment_id: None, tool: "web_run".to_string(), status: McpToolCallStatus::Completed, arguments: json!({"search_query": [{"q": "OpenAI Codex CLI documentation"}]}), diff --git a/codex-rs/exec/tests/event_processor_with_json_output.rs b/codex-rs/exec/tests/event_processor_with_json_output.rs index 56909a5f7d..45ffea39c2 100644 --- a/codex-rs/exec/tests/event_processor_with_json_output.rs +++ b/codex-rs/exec/tests/event_processor_with_json_output.rs @@ -562,6 +562,7 @@ fn mcp_tool_call_begin_and_end_emit_item_events() { ThreadItemPayload::McpToolCall { id: "mcp-1".to_string(), server: "server_a".to_string(), + environment_id: None, tool: "tool_x".to_string(), status: ApiMcpToolCallStatus::InProgress, arguments: json!({ "key": "value" }), @@ -584,6 +585,7 @@ fn mcp_tool_call_begin_and_end_emit_item_events() { ThreadItemPayload::McpToolCall { id: "mcp-1".to_string(), server: "server_a".to_string(), + environment_id: None, tool: "tool_x".to_string(), status: ApiMcpToolCallStatus::Completed, arguments: json!({ "key": "value" }), @@ -660,6 +662,7 @@ fn mcp_tool_call_failure_sets_failed_status() { ThreadItemPayload::McpToolCall { id: "mcp-2".to_string(), server: "server_b".to_string(), + environment_id: None, tool: "tool_y".to_string(), status: ApiMcpToolCallStatus::Failed, arguments: json!({ "param": 42 }), @@ -713,6 +716,7 @@ fn mcp_tool_call_defaults_arguments_and_preserves_structured_content() { ThreadItemPayload::McpToolCall { id: "mcp-3".to_string(), server: "server_c".to_string(), + environment_id: None, tool: "tool_z".to_string(), status: ApiMcpToolCallStatus::InProgress, arguments: serde_json::Value::Null, @@ -735,6 +739,7 @@ fn mcp_tool_call_defaults_arguments_and_preserves_structured_content() { ThreadItemPayload::McpToolCall { id: "mcp-3".to_string(), server: "server_c".to_string(), + environment_id: None, tool: "tool_z".to_string(), status: ApiMcpToolCallStatus::Completed, arguments: serde_json::Value::Null, diff --git a/codex-rs/protocol/src/approvals.rs b/codex-rs/protocol/src/approvals.rs index b651d55ee7..6b1f0ef34e 100644 --- a/codex-rs/protocol/src/approvals.rs +++ b/codex-rs/protocol/src/approvals.rs @@ -476,6 +476,10 @@ pub struct ElicitationRequestEvent { #[ts(optional)] pub turn_id: Option, pub server_name: String, + /// Registration scope, not necessarily the server's execution environment. + #[serde(default, skip_serializing_if = "Option::is_none")] + #[ts(optional)] + pub environment_id: Option, #[ts(type = "string | number")] pub id: RequestId, pub request: ElicitationRequest, diff --git a/codex-rs/protocol/src/items.rs b/codex-rs/protocol/src/items.rs index 12d96c56e3..424ba6e562 100644 --- a/codex-rs/protocol/src/items.rs +++ b/codex-rs/protocol/src/items.rs @@ -481,6 +481,10 @@ pub enum McpAppDisplayMode { pub struct McpToolCallItem { pub id: String, pub server: String, + /// Registration scope, not necessarily the server's execution environment. + #[serde(default, skip_serializing_if = "Option::is_none")] + #[ts(optional)] + pub environment_id: Option, pub tool: String, pub arguments: serde_json::Value, #[serde(default, skip_serializing_if = "Option::is_none")] diff --git a/codex-rs/protocol/src/legacy_events.rs b/codex-rs/protocol/src/legacy_events.rs index 3dc1775968..6f38619550 100644 --- a/codex-rs/protocol/src/legacy_events.rs +++ b/codex-rs/protocol/src/legacy_events.rs @@ -522,6 +522,7 @@ impl McpToolCallItem { turn_id, invocation: McpInvocation { server: self.server.clone(), + environment_id: self.environment_id.clone(), tool: self.tool.clone(), arguments: (!self.arguments.is_null()).then(|| self.arguments.clone()), }, @@ -548,6 +549,7 @@ impl McpToolCallItem { turn_id, invocation: McpInvocation { server: self.server.clone(), + environment_id: self.environment_id.clone(), tool: self.tool.clone(), arguments: (!self.arguments.is_null()).then(|| self.arguments.clone()), }, diff --git a/codex-rs/protocol/src/protocol.rs b/codex-rs/protocol/src/protocol.rs index cf4d3d83cf..6aeba01792 100644 --- a/codex-rs/protocol/src/protocol.rs +++ b/codex-rs/protocol/src/protocol.rs @@ -3034,6 +3034,10 @@ pub struct AgentReasoningSectionBreakEvent { pub struct McpInvocation { /// Name of the MCP server as defined in the config. pub server: String, + /// Registration scope, not necessarily the server's execution environment. + #[serde(default, skip_serializing_if = "Option::is_none")] + #[ts(optional)] + pub environment_id: Option, /// Name of the tool as given by the MCP server. pub tool: String, /// Arguments to the tool call. @@ -4199,6 +4203,10 @@ pub struct TurnDiffEvent { pub struct McpStartupUpdateEvent { /// Server name being started. pub server: String, + /// Registration scope, not necessarily the server's execution environment. + #[serde(default, skip_serializing_if = "Option::is_none")] + #[ts(optional)] + pub environment_id: Option, /// Current startup status. pub status: McpStartupStatus, } @@ -5844,6 +5852,7 @@ mod tests { item: TurnItem::McpToolCall(McpToolCallItem { id: "mcp-1".into(), server: "server".into(), + environment_id: None, tool: "tool".into(), arguments: json!({"arg": "value"}), connector_id: Some("connector".into()), @@ -5974,6 +5983,7 @@ mod tests { item: TurnItem::McpToolCall(McpToolCallItem { id: "mcp-1".into(), server: "server".into(), + environment_id: None, tool: "tool".into(), arguments: json!({"arg": "value"}), connector_id: Some("connector".into()), @@ -6853,6 +6863,7 @@ mod tests { id: "init".to_string(), msg: EventMsg::McpStartupUpdate(McpStartupUpdateEvent { server: "srv".to_string(), + environment_id: None, status: McpStartupStatus::Failed { error: "boom".to_string(), reason: Some(McpStartupFailureReason::ReauthenticationRequired), diff --git a/codex-rs/thread-store/src/local/rollout_migration/legacy_event.rs b/codex-rs/thread-store/src/local/rollout_migration/legacy_event.rs index e5c8d442f0..af6d199931 100644 --- a/codex-rs/thread-store/src/local/rollout_migration/legacy_event.rs +++ b/codex-rs/thread-store/src/local/rollout_migration/legacy_event.rs @@ -203,6 +203,7 @@ pub(super) fn completed_item( TurnItem::McpToolCall(McpToolCallItem { id: event.call_id.clone(), server: event.invocation.server.clone(), + environment_id: event.invocation.environment_id.clone(), tool: event.invocation.tool.clone(), arguments: event .invocation diff --git a/codex-rs/thread-store/src/local/thread_history_materialization_tests.rs b/codex-rs/thread-store/src/local/thread_history_materialization_tests.rs index a12bb69fa1..14799e401f 100644 --- a/codex-rs/thread-store/src/local/thread_history_materialization_tests.rs +++ b/codex-rs/thread-store/src/local/thread_history_materialization_tests.rs @@ -526,6 +526,7 @@ async fn paginated_mcp_history_caps_large_results() { let tool_call = McpToolCallItem { id: "mcp-1".to_string(), server: "test".to_string(), + environment_id: None, tool: "large_result".to_string(), arguments: arguments.clone(), connector_id: None, diff --git a/codex-rs/tui/src/app.rs b/codex-rs/tui/src/app.rs index 972bfb2f04..fd43c036dc 100644 --- a/codex-rs/tui/src/app.rs +++ b/codex-rs/tui/src/app.rs @@ -719,8 +719,8 @@ pub(crate) struct App { rate_limit_hard_stop_generation: u64, rate_limit_refresh_state: rate_limit_refresh::RateLimitRefreshState, pending_mcp_login_start: Option, - // Latest accepted attempt per server; stale retry completions must not update the UI. - active_mcp_login_ids: HashMap, + // Login ID -> requested server and environment. Retrying one target keeps other logins alive. + active_mcp_login_ids: HashMap)>, // Serialize plugin enablement writes per plugin so stale completions cannot // overwrite a newer toggle, even if the plugin is toggled from different // cwd contexts. @@ -737,6 +737,7 @@ pub(crate) struct App { struct PendingMcpLoginStart { request_id: String, name: String, + environment_id: Option, thread_id: ThreadId, completions: Vec, } diff --git a/codex-rs/tui/src/app/app_server_event_targets.rs b/codex-rs/tui/src/app/app_server_event_targets.rs index cc5d3d8fe2..3fc59064a4 100644 --- a/codex-rs/tui/src/app/app_server_event_targets.rs +++ b/codex-rs/tui/src/app/app_server_event_targets.rs @@ -331,6 +331,7 @@ mod tests { let thread_id = ThreadId::new(); let notification = ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(thread_id.to_string()), name: "sentry".to_string(), status: McpServerStartupState::Failed, @@ -347,6 +348,7 @@ mod tests { fn mcp_startup_notifications_without_threads_are_app_scoped() { let notification = ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: None, name: "sentry".to_string(), status: McpServerStartupState::Failed, diff --git a/codex-rs/tui/src/app/app_server_events.rs b/codex-rs/tui/src/app/app_server_events.rs index 997c85bcd4..c931e3f2c6 100644 --- a/codex-rs/tui/src/app/app_server_events.rs +++ b/codex-rs/tui/src/app/app_server_events.rs @@ -367,13 +367,10 @@ impl App { pending.completions.push(notification.clone()); return; } - if notification.login_id.is_some() { - if notification.login_id.as_ref() - != self.active_mcp_login_ids.get(¬ification.name) - { - return; - } - self.active_mcp_login_ids.remove(¬ification.name); + if let Some(login_id) = ¬ification.login_id + && self.active_mcp_login_ids.remove(login_id).is_none() + { + return; } } diff --git a/codex-rs/tui/src/app/app_server_requests.rs b/codex-rs/tui/src/app/app_server_requests.rs index be5c776085..c31fdc6eb3 100644 --- a/codex-rs/tui/src/app/app_server_requests.rs +++ b/codex-rs/tui/src/app/app_server_requests.rs @@ -957,6 +957,7 @@ mod tests { pending.note_server_request(&ServerRequest::McpServerElicitationRequest { request_id: AppServerRequestId::Integer(12), params: McpServerElicitationRequestParams { + environment_id: None, thread_id: "thread-1".to_string(), turn_id: Some("turn-1".to_string()), server_name: "example".to_string(), @@ -1104,6 +1105,7 @@ mod tests { pending.note_server_request(&ServerRequest::McpServerElicitationRequest { request_id: AppServerRequestId::Integer(12), params: McpServerElicitationRequestParams { + environment_id: None, thread_id: "thread-1".to_string(), turn_id: Some("turn-1".to_string()), server_name: "example".to_string(), diff --git a/codex-rs/tui/src/app/background_requests.rs b/codex-rs/tui/src/app/background_requests.rs index c9d4585375..1eba13498f 100644 --- a/codex-rs/tui/src/app/background_requests.rs +++ b/codex-rs/tui/src/app/background_requests.rs @@ -48,6 +48,7 @@ impl App { app_server: &AppServerSession, request_id: String, name: String, + environment_id: Option, thread_id: ThreadId, ) { let request_handle = app_server.request_handle(); @@ -57,6 +58,7 @@ impl App { .request_typed(ClientRequest::McpServerOauthLogin { request_id: RequestId::String(request_id.clone()), params: McpServerOauthLoginParams { + environment_id, name, thread_id: Some(thread_id.to_string()), client_registration: None, @@ -821,6 +823,7 @@ pub(super) async fn fetch_all_mcp_server_statuses( .request_typed(ClientRequest::McpServerStatusList { request_id, params: ListMcpServerStatusParams { + environment_id: None, cursor: cursor.clone(), limit: Some(100), detail: Some(detail), @@ -1629,6 +1632,7 @@ mod tests { fn mcp_inventory_maps_prefix_tool_names_by_server() { let statuses = vec![ McpServerStatus { + environment_id: None, server_capabilities: None, tool_list_meta: None, tools_error: None, @@ -1655,6 +1659,7 @@ mod tests { auth_status: codex_app_server_protocol::McpAuthStatus::Unsupported, }, McpServerStatus { + environment_id: None, server_capabilities: None, tool_list_meta: None, tools_error: None, diff --git a/codex-rs/tui/src/app/event_dispatch.rs b/codex-rs/tui/src/app/event_dispatch.rs index 06dad6766d..89b502af3f 100644 --- a/codex-rs/tui/src/app/event_dispatch.rs +++ b/codex-rs/tui/src/app/event_dispatch.rs @@ -1900,7 +1900,7 @@ impl App { AppEvent::FetchMcpInventory { detail, thread_id } => { self.fetch_mcp_inventory(app_server, detail, thread_id); } - AppEvent::StartMcpLogin { name, thread_id } => { + AppEvent::StartMcpLogin { name, environment_id, thread_id } => { if self.pending_mcp_login_start.is_some() { self.chat_widget.add_info_message( "MCP sign-in is starting. Wait for it to finish before trying again.".to_string(), @@ -1912,10 +1912,11 @@ impl App { self.pending_mcp_login_start = Some(PendingMcpLoginStart { request_id: request_id.clone(), name: name.clone(), + environment_id: environment_id.clone(), thread_id, completions: Vec::new(), }); - self.start_mcp_login(app_server, request_id, name, thread_id); + self.start_mcp_login(app_server, request_id, name, environment_id, thread_id); } AppEvent::McpLoginStarted { request_id, result } => { if let Some(pending) = self @@ -1924,11 +1925,13 @@ impl App { { match result { Ok(response) => { - // Track the latest attempt per server: unrelated OAuth logins can - // remain open while a user retries this server. + // Replace this target's old attempt, not another environment's + // login to a server with the same name. if let Some(login_id) = response.login_id.as_ref() { + let target = (pending.name.clone(), pending.environment_id); + self.active_mcp_login_ids.retain(|_, current| current != &target); self.active_mcp_login_ids - .insert(pending.name.clone(), login_id.clone()); + .insert(login_id.clone(), target); } let completed = pending.completions.iter().any(|completion| { completion.login_id == response.login_id @@ -1956,13 +1959,10 @@ impl App { // A rejected start leaves the old attempt current. A successful replacement // has changed its ID, so the old cancellation is discarded here. for completion in pending.completions { - if completion.login_id.is_some() { - if completion.login_id.as_ref() - != self.active_mcp_login_ids.get(&completion.name) - { - continue; - } - self.active_mcp_login_ids.remove(&completion.name); + if let Some(login_id) = &completion.login_id + && self.active_mcp_login_ids.remove(login_id).is_none() + { + continue; } if let Some(thread_id) = completion.thread_id.as_deref() .and_then(|id| ThreadId::from_string(id).ok()) diff --git a/codex-rs/tui/src/app/pending_interactive_replay.rs b/codex-rs/tui/src/app/pending_interactive_replay.rs index e4818be701..fdcdaf1812 100644 --- a/codex-rs/tui/src/app/pending_interactive_replay.rs +++ b/codex-rs/tui/src/app/pending_interactive_replay.rs @@ -301,6 +301,7 @@ mod tests { ServerRequest::McpServerElicitationRequest { request_id: AppServerRequestId::String(request_id.to_string()), params: McpServerElicitationRequestParams { + environment_id: None, thread_id: "thread-1".to_string(), turn_id: Some(turn_id.to_string()), server_name: server_name.to_string(), diff --git a/codex-rs/tui/src/app/snapshots/codex_tui__app__owned_transcript__tests__slash_picker_overlays_history.snap b/codex-rs/tui/src/app/snapshots/codex_tui__app__owned_transcript__tests__slash_picker_overlays_history.snap index 20e5d5c268..9e1233a9aa 100644 --- a/codex-rs/tui/src/app/snapshots/codex_tui__app__owned_transcript__tests__slash_picker_overlays_history.snap +++ b/codex-rs/tui/src/app/snapshots/codex_tui__app__owned_transcript__tests__slash_picker_overlays_history.snap @@ -6,11 +6,11 @@ Transcript row 30: content behind the menu Transcript row 31: content behind the menu Transcript row 32: content behind the menu Transcript row 33: content behind the menu -Transcript row 34: content behind the menu › /model choose what model and reasoning effort to use /memories configure memory use and generation /mention mention a file - /mcp list MCP tools; use /mcp verbose or /mcp login + /mcp list MCP tools; /mcp verbose or /mcp login [--environment + ] › /m diff --git a/codex-rs/tui/src/app/tests.rs b/codex-rs/tui/src/app/tests.rs index 0544ded881..8168755975 100644 --- a/codex-rs/tui/src/app/tests.rs +++ b/codex-rs/tui/src/app/tests.rs @@ -520,6 +520,7 @@ async fn handle_mcp_inventory_result_respects_origin_thread() { app.handle_mcp_inventory_result( Ok(vec![McpServerStatus { + environment_id: None, server_capabilities: None, tool_list_meta: None, tools_error: None, @@ -7324,6 +7325,7 @@ async fn inactive_thread_url_elicitation_routes_to_app_link() { let request = ServerRequest::McpServerElicitationRequest { request_id: AppServerRequestId::Integer(9), params: McpServerElicitationRequestParams { + environment_id: None, thread_id: thread_id.to_string(), turn_id: Some("turn-auth".to_string()), server_name: "payments".to_string(), @@ -7364,6 +7366,7 @@ async fn inactive_thread_invalid_url_elicitation_is_declined() { let request = ServerRequest::McpServerElicitationRequest { request_id: AppServerRequestId::Integer(10), params: McpServerElicitationRequestParams { + environment_id: None, thread_id: thread_id.to_string(), turn_id: Some("turn-auth".to_string()), server_name: "payments".to_string(), @@ -8293,6 +8296,7 @@ async fn primary_thread_ignores_child_mcp_startup_notifications() { &app_server, codex_app_server_client::AppServerEvent::ServerNotification(Box::new( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(child_thread_id.to_string()), name: "sentry".to_string(), status: McpServerStartupState::Failed, @@ -8371,6 +8375,7 @@ async fn app_scoped_mcp_startup_notifications_do_not_render_in_active_thread() { &app_server, codex_app_server_client::AppServerEvent::ServerNotification(Box::new( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: None, name: "sentry".to_string(), status: McpServerStartupState::Failed, @@ -8451,6 +8456,7 @@ async fn active_side_thread_renders_live_mcp_startup_notifications() { &app_server, codex_app_server_client::AppServerEvent::ServerNotification(Box::new( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(side_thread_id.to_string()), name: name.to_string(), status, diff --git a/codex-rs/tui/src/app/tests/backend_sessions_tests.rs b/codex-rs/tui/src/app/tests/backend_sessions_tests.rs index a6f3162ded..f791054aea 100644 --- a/codex-rs/tui/src/app/tests/backend_sessions_tests.rs +++ b/codex-rs/tui/src/app/tests/backend_sessions_tests.rs @@ -63,6 +63,7 @@ async fn backend_sessions_parked_request_does_not_hide_disconnect() -> Result<() }); let failure = ServerNotification::McpServerStatusUpdated( codex_app_server_protocol::McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(thread_id.to_string()), name: "tools".into(), status: McpServerStartupState::Failed, diff --git a/codex-rs/tui/src/app/tests/background_exit_tests.rs b/codex-rs/tui/src/app/tests/background_exit_tests.rs index e6be606923..5960485a77 100644 --- a/codex-rs/tui/src/app/tests/background_exit_tests.rs +++ b/codex-rs/tui/src/app/tests/background_exit_tests.rs @@ -742,6 +742,7 @@ async fn daemon_ctrl_c_during_mcp_startup_does_not_show_background_exit_menu() - let thread_id = prepare_local_daemon_thread(&mut app)?; app.chat_widget.handle_server_notification( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(thread_id.to_string()), name: "slow".to_string(), status: McpServerStartupState::Starting, diff --git a/codex-rs/tui/src/app/tests/buffered_replay.rs b/codex-rs/tui/src/app/tests/buffered_replay.rs index 7952114d09..4412dab108 100644 --- a/codex-rs/tui/src/app/tests/buffered_replay.rs +++ b/codex-rs/tui/src/app/tests/buffered_replay.rs @@ -781,6 +781,7 @@ async fn misalignment_buffered_replay_preserves_input_after_continuation() { let failed_turn = Turn { error: Some(error.clone()), items: vec![ThreadItem::untimed(ThreadItemPayload::McpToolCall { + environment_id: None, id: "tool-call".into(), server: "sample".into(), tool: "inspect".into(), diff --git a/codex-rs/tui/src/app/tests/mcp_login_tests.rs b/codex-rs/tui/src/app/tests/mcp_login_tests.rs index f6ace33306..6054708c85 100644 --- a/codex-rs/tui/src/app/tests/mcp_login_tests.rs +++ b/codex-rs/tui/src/app/tests/mcp_login_tests.rs @@ -16,6 +16,7 @@ async fn overlapping_mcp_login_preserves_first_start() { app.pending_mcp_login_start = Some(PendingMcpLoginStart { request_id: "first".into(), name: "enterprise".into(), + environment_id: None, thread_id, completions: Vec::new(), }); @@ -24,6 +25,7 @@ async fn overlapping_mcp_login_preserves_first_start() { &mut server, AppEvent::StartMcpLogin { name: "typo".into(), + environment_id: None, thread_id, }, ) @@ -68,17 +70,27 @@ async fn mcp_login_retry_suppresses_old_completion_and_late_browser_open() { let thread_id = ThreadId::new(); app.primary_thread_id = Some(thread_id); app.active_thread_id = Some(thread_id); - app.active_mcp_login_ids - .insert("enterprise".into(), "old".into()); - app.active_mcp_login_ids - .insert("other".into(), "other-login".into()); + app.active_mcp_login_ids = HashMap::from([ + ("old".into(), ("enterprise".into(), Some("env-a".into()))), + ( + "early-peer".into(), + ("enterprise".into(), Some("env-b".into())), + ), + ( + "late-peer".into(), + ("enterprise".into(), Some("env-c".into())), + ), + ("other-login".into(), ("other".into(), None)), + ]); app.pending_mcp_login_start = Some(PendingMcpLoginStart { request_id: "retry".into(), name: "enterprise".into(), + environment_id: Some("env-a".into()), thread_id, completions: Vec::new(), }); - for (login_id, success) in [("old", false), ("new", true)] { + // A same-named environment's completion is buffered alongside the retry's completion. + for (login_id, success) in [("old", false), ("new", true), ("early-peer", true)] { app.handle_app_server_event( &server, codex_app_server_client::AppServerEvent::ServerNotification(Box::new( @@ -114,14 +126,14 @@ async fn mcp_login_retry_suppresses_old_completion_and_late_browser_open() { .lock() .await .snapshot(); - assert_eq!(snapshot.events.len(), 1); + assert_eq!(snapshot.events.len(), 2); for event in snapshot.events { app.handle_thread_event_replay(event); + assert_eq!( + next_history_message(&mut events), + "• Signed in to enterprise." + ); } - assert_eq!( - next_history_message(&mut events), - "• Signed in to enterprise." - ); assert!(events.try_recv().is_err()); // A cancellation delivered after the replacement response is stale as well. app.handle_app_server_event( @@ -147,32 +159,39 @@ async fn mcp_login_retry_suppresses_old_completion_and_late_browser_open() { .snapshot() .events .len(), - 1 + 2 ); - // Retrying one server must not discard a different server's outstanding OAuth result. - app.handle_app_server_event( - &server, - codex_app_server_client::AppServerEvent::ServerNotification(Box::new( - ServerNotification::McpServerOauthLoginCompleted( - McpServerOauthLoginCompletedNotification { - name: "other".into(), - thread_id: Some(thread_id.to_string()), - login_id: Some("other-login".into()), - success: true, - error: None, - }, - ), - )), - ) - .await; - let snapshot = app.thread_event_channels[&thread_id] - .store - .lock() - .await - .snapshot(); - assert_eq!(snapshot.events.len(), 2); - app.handle_thread_event_replay(snapshot.events.last().unwrap().clone()); - assert!(next_history_message(&mut events).contains("Signed in to other.")); + // Both differently named servers and same-named environments retain later completions. + for (name, login_id, expected_events) in + [("other", "other-login", 3), ("enterprise", "late-peer", 4)] + { + app.handle_app_server_event( + &server, + codex_app_server_client::AppServerEvent::ServerNotification(Box::new( + ServerNotification::McpServerOauthLoginCompleted( + McpServerOauthLoginCompletedNotification { + name: name.into(), + thread_id: Some(thread_id.to_string()), + login_id: Some(login_id.into()), + success: true, + error: None, + }, + ), + )), + ) + .await; + let snapshot = app.thread_event_channels[&thread_id] + .store + .lock() + .await + .snapshot(); + assert_eq!(snapshot.events.len(), expected_events); + app.handle_thread_event_replay(snapshot.events.last().unwrap().clone()); + assert_eq!( + next_history_message(&mut events), + format!("• Signed in to {name}.") + ); + } server.shutdown().await.unwrap(); } @@ -188,7 +207,7 @@ async fn mcp_login_results_survive_thread_switch_and_session_refresh() { app.primary_thread_id = Some(origin); app.active_thread_id = Some(ThreadId::new()); app.active_mcp_login_ids - .insert("enterprise".into(), "login".into()); + .insert("login".into(), ("enterprise".into(), None)); app.handle_app_server_event( &server, codex_app_server_client::AppServerEvent::ServerNotification(Box::new( @@ -235,10 +254,11 @@ async fn rejected_mcp_login_retry_preserves_previous_result() { app.primary_thread_id = Some(thread_id); app.active_thread_id = Some(thread_id); app.active_mcp_login_ids - .insert("enterprise".into(), "old".into()); + .insert("old".into(), ("enterprise".into(), None)); app.pending_mcp_login_start = Some(PendingMcpLoginStart { request_id: "typo".into(), name: "typo".into(), + environment_id: None, thread_id, completions: Vec::new(), }); diff --git a/codex-rs/tui/src/app/tests/mcp_startup.rs b/codex-rs/tui/src/app/tests/mcp_startup.rs index 462983a7b1..cf649b0cd0 100644 --- a/codex-rs/tui/src/app/tests/mcp_startup.rs +++ b/codex-rs/tui/src/app/tests/mcp_startup.rs @@ -41,6 +41,7 @@ async fn remote_mcp_startup_settles_when_attaching_mid_round() -> Result<()> { let update = |name: &str, status| { ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(id.to_string()), name: name.to_string(), status, @@ -158,6 +159,7 @@ async fn remote_mcp_startup_reports_terminal_only_failures_and_cancellations() - ] { let notification = ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(id.to_string()), name: name.to_string(), error: (status == Failed).then(|| error.to_string()), @@ -261,6 +263,7 @@ async fn subagent_mcp_startup_settles_while_cached_servers_remain_deferred() { &app_server, codex_app_server_client::AppServerEvent::ServerNotification(Box::new( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(subagent_thread_id.to_string()), name: name.to_string(), status, @@ -311,6 +314,7 @@ async fn resumed_subagent_mcp_startup_settles_while_cached_servers_remain_deferr ] { app.chat_widget.handle_server_notification( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(subagent_thread_id.to_string()), name: "eager".to_string(), status, @@ -341,6 +345,7 @@ async fn side_conversations_settle_despite_unreported_locally_configured_servers ] { app.chat_widget.handle_server_notification( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(side_thread_id.to_string()), name: "eager".to_string(), status, diff --git a/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs b/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs index 0e3a2b6094..6230e2e30e 100644 --- a/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs +++ b/codex-rs/tui/src/app/tests/session_lifecycle_requests.rs @@ -2529,6 +2529,7 @@ async fn local_daemon_registers_approval_gated_mcp_tools_for_both_start_paths_sc .request_typed(ClientRequest::McpServerStatusList { request_id: AppServerRequestId::String("tui-tool-inventory".to_string()), params: codex_app_server_protocol::ListMcpServerStatusParams { + environment_id: None, server_name: None, cursor: None, limit: None, diff --git a/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__user_verification_routes__inactive_thread_user_verification_prompt.snap b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__user_verification_routes__inactive_thread_user_verification_prompt.snap index c8de6a573e..3c600dde7a 100644 --- a/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__user_verification_routes__inactive_thread_user_verification_prompt.snap +++ b/codex-rs/tui/src/app/tests/snapshots/codex_tui__app__tests__user_verification_routes__inactive_thread_user_verification_prompt.snap @@ -6,7 +6,7 @@ expression: "render_bottom_popup(&app.chat_widget, 80)" Thread: Verifier [worker] - Server: deployments + Server: deployments (environment env-b) Verify the production deployment. diff --git a/codex-rs/tui/src/app/tests/startup.rs b/codex-rs/tui/src/app/tests/startup.rs index 4954bf3ff7..d465cc0c53 100644 --- a/codex-rs/tui/src/app/tests/startup.rs +++ b/codex-rs/tui/src/app/tests/startup.rs @@ -1053,6 +1053,7 @@ async fn auto_declined_mcp_elicitations_do_not_leave_startup_quarantine_armed() let request = ServerRequest::McpServerElicitationRequest { request_id: AppServerRequestId::Integer(10), params: McpServerElicitationRequestParams { + environment_id: None, thread_id: thread_id.to_string(), turn_id: Some("turn-auth".to_string()), server_name: "payments".to_string(), @@ -1544,6 +1545,7 @@ async fn startup_thread_started_discards_another_threads_buffered_events() { let other_thread_id = ThreadId::new(); app.enqueue_primary_thread_notification(ServerNotification::McpServerStatusUpdated( McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(other_thread_id.to_string()), name: "other".to_string(), status: McpServerStartupState::Starting, @@ -1758,6 +1760,7 @@ async fn send_failed_mcp_startup( app_server, codex_app_server_client::AppServerEvent::ServerNotification(Box::new( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(thread_id.to_string()), name: "fixture".to_string(), status: McpServerStartupState::Failed, diff --git a/codex-rs/tui/src/app/tests/startup_warnings_tests.rs b/codex-rs/tui/src/app/tests/startup_warnings_tests.rs index 85caff3418..47c251339a 100644 --- a/codex-rs/tui/src/app/tests/startup_warnings_tests.rs +++ b/codex-rs/tui/src/app/tests/startup_warnings_tests.rs @@ -199,6 +199,7 @@ async fn mcp_startup_summary_counts_servers_and_sign_in_subset() -> Result<()> { ] { app.chat_widget.handle_server_notification( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: None, name: name.into(), status, diff --git a/codex-rs/tui/src/app/tests/unavailable_commands_tests.rs b/codex-rs/tui/src/app/tests/unavailable_commands_tests.rs index 478514670d..b501425a16 100644 --- a/codex-rs/tui/src/app/tests/unavailable_commands_tests.rs +++ b/codex-rs/tui/src/app/tests/unavailable_commands_tests.rs @@ -216,6 +216,7 @@ async fn unavailable_thread_new_and_clear_start_a_writable_session() -> Result<( ), "mcp" => app.chat_widget.handle_server_notification( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(id.to_string()), name: "slow".into(), status: McpServerStartupState::Starting, diff --git a/codex-rs/tui/src/app/tests/user_verification_routes_tests.rs b/codex-rs/tui/src/app/tests/user_verification_routes_tests.rs index af9ba4eec7..ef49e991de 100644 --- a/codex-rs/tui/src/app/tests/user_verification_routes_tests.rs +++ b/codex-rs/tui/src/app/tests/user_verification_routes_tests.rs @@ -5,6 +5,7 @@ fn user_verification_server_request(thread_id: ThreadId, request_id: i64) -> Ser ServerRequest::McpServerElicitationRequest { request_id: AppServerRequestId::Integer(request_id), params: McpServerElicitationRequestParams { + environment_id: None, thread_id: thread_id.to_string(), turn_id: Some("turn-verification".to_string()), server_name: "deployments".to_string(), @@ -40,7 +41,11 @@ async fn inactive_thread_user_verification_replays_queued_request_once() -> Resu let primary_thread_id = ThreadId::new(); let side_thread_id = ThreadId::new(); let thread_id = ThreadId::new(); - let request = user_verification_server_request(thread_id, /*request_id*/ 11); + let mut request = user_verification_server_request(thread_id, /*request_id*/ 11); + let ServerRequest::McpServerElicitationRequest { params, .. } = &mut request else { + panic!("expected MCP elicitation request"); + }; + params.environment_id = Some("env-b".to_string()); app.primary_thread_id = Some(primary_thread_id); app.active_thread_id = Some(side_thread_id); diff --git a/codex-rs/tui/src/app/thread_events.rs b/codex-rs/tui/src/app/thread_events.rs index 3d0079c2a4..7d2aab9e93 100644 --- a/codex-rs/tui/src/app/thread_events.rs +++ b/codex-rs/tui/src/app/thread_events.rs @@ -1112,6 +1112,7 @@ mod tests { let thread_id = ThreadId::new(); let notification = ServerNotification::McpServerStatusUpdated( codex_app_server_protocol::McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(thread_id.to_string()), name: "sentry".to_string(), status: codex_app_server_protocol::McpServerStartupState::Failed, diff --git a/codex-rs/tui/src/app/thread_routing.rs b/codex-rs/tui/src/app/thread_routing.rs index c579aef87d..1c21ebebc1 100644 --- a/codex-rs/tui/src/app/thread_routing.rs +++ b/codex-rs/tui/src/app/thread_routing.rs @@ -397,6 +397,7 @@ impl App { if let Some(params) = AppLinkViewParams::from_url_app_server_request( thread_id, ¶ms.server_name, + params.environment_id.as_deref(), request_id.clone(), ¶ms.request, ) { @@ -419,6 +420,7 @@ impl App { thread_id, thread_label, server_name: params.server_name.clone(), + environment_id: params.environment_id.clone(), request_id: request_id.clone(), message: message.clone(), }), @@ -430,6 +432,7 @@ impl App { request: crate::bottom_pane::user_verification::UserVerificationRequest { thread_label, server_name: params.server_name.clone(), + environment_id: params.environment_id.clone(), request_id: request_id.clone(), title: title.clone(), description: description.clone(), @@ -2060,6 +2063,7 @@ impl App { AppLinkViewParams::from_url_app_server_request( thread_id, ¶ms.server_name, + params.environment_id.as_deref(), request_id.clone(), request, ) diff --git a/codex-rs/tui/src/app/user_verification_requests_tests.rs b/codex-rs/tui/src/app/user_verification_requests_tests.rs index 654b5b5272..3b75e8923d 100644 --- a/codex-rs/tui/src/app/user_verification_requests_tests.rs +++ b/codex-rs/tui/src/app/user_verification_requests_tests.rs @@ -16,6 +16,7 @@ fn verification_request() -> ServerRequest { ServerRequest::McpServerElicitationRequest { request_id: RequestId::Integer(7), params: McpServerElicitationRequestParams { + environment_id: None, thread_id: ThreadId::new().to_string(), turn_id: None, server_name: "deployments".to_string(), diff --git a/codex-rs/tui/src/app/user_verification_tests.rs b/codex-rs/tui/src/app/user_verification_tests.rs index 9bf779f36d..ab8c53627b 100644 --- a/codex-rs/tui/src/app/user_verification_tests.rs +++ b/codex-rs/tui/src/app/user_verification_tests.rs @@ -12,6 +12,7 @@ fn verification_request() -> ServerRequest { ServerRequest::McpServerElicitationRequest { request_id: RequestId::Integer(7), params: McpServerElicitationRequestParams { + environment_id: None, thread_id: ThreadId::new().to_string(), turn_id: None, server_name: "deployments".to_string(), diff --git a/codex-rs/tui/src/app_event.rs b/codex-rs/tui/src/app_event.rs index ab8735faad..aae7d5f5bb 100644 --- a/codex-rs/tui/src/app_event.rs +++ b/codex-rs/tui/src/app_event.rs @@ -1286,6 +1286,7 @@ pub(crate) enum AppEvent { StartMcpLogin { name: String, + environment_id: Option, thread_id: ThreadId, }, diff --git a/codex-rs/tui/src/app_server_approval_conversions.rs b/codex-rs/tui/src/app_server_approval_conversions.rs index 1f0153cd2d..fdd77603d2 100644 --- a/codex-rs/tui/src/app_server_approval_conversions.rs +++ b/codex-rs/tui/src/app_server_approval_conversions.rs @@ -3,7 +3,7 @@ //! The TUI mostly keeps app-server approval types intact. These helpers cover //! the remaining cases where the UI consumes a private file-change display //! model or needs to translate a granted permission response for outbound -//! submission. +//! submission. Server labels include registration scope without changing routing names. use crate::diff_model::FileChange; use codex_app_server_protocol::AdditionalNetworkPermissions; @@ -14,6 +14,13 @@ use codex_protocol::request_permissions::RequestPermissionProfile as CoreRequest use std::collections::HashMap; use std::path::PathBuf; +pub(crate) fn mcp_server_label(server_name: &str, environment_id: Option<&str>) -> String { + match environment_id { + Some(environment_id) => format!("{server_name} (environment {environment_id})"), + None => server_name.to_string(), + } +} + pub(crate) fn granted_permission_profile_from_request( value: CoreRequestPermissionProfile, ) -> GrantedPermissionProfile { diff --git a/codex-rs/tui/src/bottom_pane/app_link_view.rs b/codex-rs/tui/src/bottom_pane/app_link_view.rs index e78b2ff249..ec15355fa4 100644 --- a/codex-rs/tui/src/bottom_pane/app_link_view.rs +++ b/codex-rs/tui/src/bottom_pane/app_link_view.rs @@ -83,6 +83,7 @@ impl AppLinkViewParams { pub(crate) fn from_url_app_server_request( thread_id: ThreadId, server_name: &str, + environment_id: Option<&str>, request_id: AppServerRequestId, request: &codex_app_server_protocol::McpServerElicitationRequest, ) -> Option { @@ -95,7 +96,7 @@ impl AppLinkViewParams { else { return None; }; - if server_name == MCP_CODEX_APPS_SERVER_NAME { + if server_name == MCP_CODEX_APPS_SERVER_NAME && environment_id.is_none() { let url = validate_external_url(url, /*require_chatgpt_host*/ true)?; return Self::from_codex_apps_auth_url_parts( thread_id, @@ -112,6 +113,7 @@ impl AppLinkViewParams { Some(Self::from_generic_url_parts( thread_id, server_name, + environment_id, request_id, message, url.as_str(), @@ -178,6 +180,7 @@ impl AppLinkViewParams { fn from_generic_url_parts( thread_id: ThreadId, server_name: &str, + environment_id: Option<&str>, request_id: AppServerRequestId, message: &str, url: &str, @@ -186,7 +189,13 @@ impl AppLinkViewParams { Self { app_id: elicitation_id.to_string(), title: "Action required".to_string(), - description: Some(format!("Server: {server_name}")), + description: Some(format!( + "Server: {}", + crate::app_server_approval_conversions::mcp_server_label( + server_name, + environment_id + ) + )), instructions: "Complete the requested action in your browser, then return here." .to_string(), url: url.to_string(), @@ -954,6 +963,7 @@ mod tests { let params = AppLinkViewParams::from_url_app_server_request( target.thread_id, &target.server_name, + /*environment_id*/ None, target.request_id.clone(), &request, ) @@ -982,6 +992,7 @@ mod tests { let params = AppLinkViewParams::from_url_app_server_request( target.thread_id, &target.server_name, + /*environment_id*/ None, target.request_id.clone(), &request, ) @@ -1018,6 +1029,7 @@ mod tests { let params = AppLinkViewParams::from_url_app_server_request( target.thread_id, &target.server_name, + /*environment_id*/ None, target.request_id.clone(), &request, ); @@ -1041,6 +1053,7 @@ mod tests { let params = AppLinkViewParams::from_url_app_server_request( target.thread_id, &target.server_name, + /*environment_id*/ None, target.request_id.clone(), &request, ); @@ -1264,6 +1277,7 @@ mod tests { let params = AppLinkViewParams::from_url_app_server_request( target.thread_id, &target.server_name, + /*environment_id*/ None, target.request_id.clone(), &request, ) @@ -1709,6 +1723,7 @@ mod tests { let params = AppLinkViewParams::from_url_app_server_request( target.thread_id, &target.server_name, + Some("env-b"), target.request_id.clone(), &request, ) @@ -1738,6 +1753,7 @@ mod tests { let params = AppLinkViewParams::from_url_app_server_request( target.thread_id, &target.server_name, + /*environment_id*/ None, target.request_id.clone(), &request, ) diff --git a/codex-rs/tui/src/bottom_pane/approval_overlay.rs b/codex-rs/tui/src/bottom_pane/approval_overlay.rs index 46fd8ef491..a0ba70a7b1 100644 --- a/codex-rs/tui/src/bottom_pane/approval_overlay.rs +++ b/codex-rs/tui/src/bottom_pane/approval_overlay.rs @@ -117,6 +117,7 @@ pub(crate) struct McpElicitationApprovalRequest { pub thread_id: ThreadId, pub thread_label: Option, pub server_name: String, + pub environment_id: Option, pub request_id: RequestId, pub message: String, } @@ -303,7 +304,13 @@ impl ApprovalOverlay { ), ApprovalRequest::McpElicitation(request) => ( elicitation_options(approval_keymap), - format!("{} needs your approval.", request.server_name), + format!( + "{} needs your approval.", + crate::app_server_approval_conversions::mcp_server_label( + &request.server_name, + request.environment_id.as_deref() + ) + ), ), }; @@ -803,7 +810,14 @@ fn build_header(request: &ApprovalRequest) -> Box { lines.push(Line::from("")); } lines.extend([ - Line::from(vec!["Server: ".into(), request.server_name.clone().bold()]), + Line::from(vec![ + "Server: ".into(), + crate::app_server_approval_conversions::mcp_server_label( + &request.server_name, + request.environment_id.as_deref(), + ) + .bold(), + ]), Line::from(""), Line::from(request.message.clone()), ]); @@ -1273,6 +1287,7 @@ mod tests { fn make_elicitation_request() -> ApprovalRequest { ApprovalRequest::McpElicitation(McpElicitationApprovalRequest { + environment_id: None, thread_id: ThreadId::new(), thread_label: None, server_name: "test-server".to_string(), diff --git a/codex-rs/tui/src/bottom_pane/chat_composer/snapshots/codex_tui__bottom_pane__chat_composer__status_surface__tests__slash_popup_footer_wide.snap b/codex-rs/tui/src/bottom_pane/chat_composer/snapshots/codex_tui__bottom_pane__chat_composer__status_surface__tests__slash_popup_footer_wide.snap index bb446cf9e1..1367c6450d 100644 --- a/codex-rs/tui/src/bottom_pane/chat_composer/snapshots/codex_tui__bottom_pane__chat_composer__status_surface__tests__slash_popup_footer_wide.snap +++ b/codex-rs/tui/src/bottom_pane/chat_composer/snapshots/codex_tui__bottom_pane__chat_composer__status_surface__tests__slash_popup_footer_wide.snap @@ -1,15 +1,15 @@ --- source: tui/src/bottom_pane/chat_composer/status_surface_tests.rs -assertion_line: 344 expression: "format!(\"{buf:?}\")" --- Buffer { - area: Rect { x: 0, y: 0, width: 80, height: 8 }, + area: Rect { x: 0, y: 0, width: 80, height: 9 }, content: [ " /model choose what model and reasoning effort to use ", "› /memories configure memory use and generation ", " /mention mention a file ", - " /mcp list MCP tools; use /mcp verbose or /mcp login ", + " /mcp list MCP tools; /mcp verbose or /mcp login [--environment ", + " ] ", " ", "› /m ", " ", @@ -32,8 +32,10 @@ Buffer { x: 3, y: 3, fg: Reset, bg: Reset, underline: Reset, modifier: BOLD, x: 4, y: 3, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, x: 13, y: 3, fg: Reset, bg: Reset, underline: Reset, modifier: DIM, - x: 66, y: 3, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, - x: 0, y: 5, fg: Reset, bg: Reset, underline: Reset, modifier: BOLD, - x: 1, y: 5, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 77, y: 3, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 13, y: 4, fg: Reset, bg: Reset, underline: Reset, modifier: DIM, + x: 18, y: 4, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, + x: 0, y: 6, fg: Reset, bg: Reset, underline: Reset, modifier: BOLD, + x: 1, y: 6, fg: Reset, bg: Reset, underline: Reset, modifier: NONE, ] } diff --git a/codex-rs/tui/src/bottom_pane/mcp_server_elicitation.rs b/codex-rs/tui/src/bottom_pane/mcp_server_elicitation.rs index 3239844997..eb18d98e71 100644 --- a/codex-rs/tui/src/bottom_pane/mcp_server_elicitation.rs +++ b/codex-rs/tui/src/bottom_pane/mcp_server_elicitation.rs @@ -173,6 +173,7 @@ struct McpToolApprovalDisplayParam { pub(crate) struct McpServerElicitationFormRequest { thread_id: ThreadId, server_name: String, + environment_id: Option, request_id: AppServerRequestId, message: String, approval_display_params: Vec, @@ -197,6 +198,7 @@ impl McpServerElicitationFormRequest { ) -> Option { let McpServerElicitationRequestParams { server_name, + environment_id, request, .. } = request; @@ -210,24 +212,7 @@ impl McpServerElicitationFormRequest { }; let requested_schema = serde_json::to_value(requested_schema).ok()?; - Self::from_parts( - thread_id, - server_name.clone(), - request_id, - meta.as_ref(), - message.clone(), - requested_schema, - ) - } - - fn from_parts( - thread_id: ThreadId, - server_name: String, - request_id: AppServerRequestId, - meta: Option<&Value>, - message: String, - requested_schema: Value, - ) -> Option { + let meta = meta.as_ref(); let tool_suggestion = parse_tool_suggestion_request(meta); let is_tool_approval = meta .and_then(Value::as_object) @@ -328,9 +313,10 @@ impl McpServerElicitationFormRequest { Some(Self { thread_id, - server_name, + server_name: server_name.clone(), + environment_id: environment_id.clone(), request_id, - message, + message: message.clone(), approval_display_params, response_mode, is_tool_approval, @@ -951,10 +937,17 @@ impl McpServerElicitationOverlay { } fn current_prompt_text(&self) -> String { - let request_message = format_tool_approval_display_message( + let mut request_message = format_tool_approval_display_message( &self.request.message, &self.request.approval_display_params, ); + if self.request.environment_id.is_some() { + let server = crate::app_server_approval_conversions::mcp_server_label( + &self.request.server_name, + self.request.environment_id.as_deref(), + ); + request_message = format!("Server: {server}\n\n{request_message}"); + } let Some(field) = self.current_field() else { return request_message; }; @@ -1748,6 +1741,7 @@ mod tests { meta: Option, ) -> McpServerElicitationRequestParams { McpServerElicitationRequestParams { + environment_id: None, thread_id: "thread-1".to_string(), turn_id: Some("turn-1".to_string()), server_name: "server-1".to_string(), @@ -1874,6 +1868,7 @@ mod tests { assert_eq!( request, McpServerElicitationFormRequest { + environment_id: None, thread_id, server_name: "server-1".to_string(), request_id: request_id("request-1"), @@ -1945,6 +1940,7 @@ mod tests { assert_eq!( request, McpServerElicitationFormRequest { + environment_id: None, thread_id, server_name: "server-1".to_string(), request_id: request_id("request-1"), @@ -2003,6 +1999,7 @@ mod tests { assert_eq!( request, McpServerElicitationFormRequest { + environment_id: None, thread_id, server_name: "server-1".to_string(), request_id: request_id("request-1"), @@ -2594,6 +2591,7 @@ mod tests { thread_id, request_id("request-2"), &McpServerElicitationRequestParams { + environment_id: None, thread_id: "thread-1".to_string(), turn_id: Some("turn-2".to_string()), server_name: "server-1".to_string(), @@ -2675,21 +2673,24 @@ mod tests { let (tx, _rx) = test_sender(); let request = from_form_request( ThreadId::default(), - form_request( - "Allow this request?", - serde_json::json!({ - "type": "object", - "properties": { - "confirmed": { - "type": "boolean", - "title": "Confirm", - "description": "Approve the pending action.", - } - }, - "required": ["confirmed"], - }), - /*meta*/ None, - ), + McpServerElicitationRequestParams { + environment_id: Some("env-b".to_string()), + ..form_request( + "Allow this request?", + serde_json::json!({ + "type": "object", + "properties": { + "confirmed": { + "type": "boolean", + "title": "Confirm", + "description": "Approve the pending action.", + } + }, + "required": ["confirmed"], + }), + /*meta*/ None, + ) + }, ) .expect("expected supported form"); let overlay = McpServerElicitationOverlay::new( diff --git a/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__app_link_view__tests__app_link_view_generic_url_elicitation.snap b/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__app_link_view__tests__app_link_view_generic_url_elicitation.snap index 540d511551..92ba0954f6 100644 --- a/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__app_link_view__tests__app_link_view_generic_url_elicitation.snap +++ b/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__app_link_view__tests__app_link_view_generic_url_elicitation.snap @@ -4,7 +4,7 @@ expression: "render_snapshot(&view, Rect::new(0, 0, 72, view.desired_height(72)) --- Action required - Server: payments + Server: payments (environment env-b) Review the payment details to continue. diff --git a/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__mcp_server_elicitation__tests__mcp_server_elicitation_boolean_form.snap b/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__mcp_server_elicitation__tests__mcp_server_elicitation_boolean_form.snap index 0415c24071..3eb39ee707 100644 --- a/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__mcp_server_elicitation__tests__mcp_server_elicitation_boolean_form.snap +++ b/codex-rs/tui/src/bottom_pane/snapshots/codex_tui__bottom_pane__mcp_server_elicitation__tests__mcp_server_elicitation_boolean_form.snap @@ -4,6 +4,8 @@ expression: "render_snapshot(&overlay, Rect::new(0, 0, 120, 16))" --- Field 1/1 (1 required unanswered) + Server: server-1 (environment env-b) + Allow this request? Confirm @@ -14,6 +16,4 @@ expression: "render_snapshot(&overlay, Rect::new(0, 0, 120, 16))" - - enter to submit | esc to cancel diff --git a/codex-rs/tui/src/bottom_pane/user_verification.rs b/codex-rs/tui/src/bottom_pane/user_verification.rs index 8edae9bf61..cf9bc7ccf4 100644 --- a/codex-rs/tui/src/bottom_pane/user_verification.rs +++ b/codex-rs/tui/src/bottom_pane/user_verification.rs @@ -36,6 +36,7 @@ pub(crate) struct UserVerificationRequest { pub description: String, pub thread_label: Option, pub server_name: String, + pub environment_id: Option, pub request_id: RequestId, } @@ -285,7 +286,14 @@ fn request_details(request: &UserVerificationRequest) -> Box { lines.push(Line::from("")); } lines.extend([ - Line::from(vec!["Server: ".into(), request.server_name.clone().bold()]), + Line::from(vec![ + "Server: ".into(), + crate::app_server_approval_conversions::mcp_server_label( + &request.server_name, + request.environment_id.as_deref(), + ) + .bold(), + ]), Line::from(""), Line::from(request.description.clone()), ]); diff --git a/codex-rs/tui/src/bottom_pane/user_verification_tests.rs b/codex-rs/tui/src/bottom_pane/user_verification_tests.rs index 351f909d55..ee36bd8837 100644 --- a/codex-rs/tui/src/bottom_pane/user_verification_tests.rs +++ b/codex-rs/tui/src/bottom_pane/user_verification_tests.rs @@ -25,6 +25,7 @@ fn make_view() -> ( tokio::sync::mpsc::UnboundedReceiver, ) { make_view_for_request(UserVerificationRequest { + environment_id: None, title: "Production deployment needs your approval.".to_string(), description: "Approve deploying the reviewed release?".to_string(), thread_label: None, @@ -158,6 +159,7 @@ fn full_screen_request_is_available_before_and_during_verification() { #[test] fn long_url_tokens_remain_visible_in_a_narrow_verification_prompt() { let (mut view, _) = make_view_for_request(UserVerificationRequest { + environment_id: None, title: "Approve https://example.com/production/release/candidate?".to_string(), description: "Deploy https://example.com/production/critical-release-candidate".to_string(), thread_label: None, @@ -205,6 +207,7 @@ fn long_url_tokens_remain_visible_in_a_narrow_verification_prompt() { #[tokio::test] async fn full_screen_pager_reaches_the_end_of_a_long_request() -> std::io::Result<()> { let (view, _) = make_view_for_request(UserVerificationRequest { + environment_id: None, title: "Approve release?".to_string(), description: format!( "{}Final approval details.", diff --git a/codex-rs/tui/src/chatwidget.rs b/codex-rs/tui/src/chatwidget.rs index 4380cb2353..dccbfb3e48 100644 --- a/codex-rs/tui/src/chatwidget.rs +++ b/codex-rs/tui/src/chatwidget.rs @@ -642,11 +642,11 @@ pub(crate) struct ChatWidget { unified_exec_processes: Vec, /// Exits observed during the pending list request take precedence over its response. pending_terminal_restore: Option<(uuid::Uuid, HashSet)>, - /// Latest status per server in the active startup round. Its presence keeps + /// Latest status per (server name, environment ID) in the active startup round. Its presence keeps /// the composer busy, and its terminal outcomes determine the round's summary. - mcp_startup_status: Option>, + mcp_startup_status: Option), McpStartupStatus>>, /// Last diagnostic per server, so replayed terminal updates are only reported once. - mcp_startup_last_diagnostics: HashMap, + mcp_startup_last_diagnostics: HashMap<(String, Option), McpStartupStatus>, connectors: ConnectorsState, ide_context: IdeContextState, plugins_cache: PluginsCacheState, diff --git a/codex-rs/tui/src/chatwidget/mcp_startup.rs b/codex-rs/tui/src/chatwidget/mcp_startup.rs index e373b1982b..69d1971ae5 100644 --- a/codex-rs/tui/src/chatwidget/mcp_startup.rs +++ b/codex-rs/tui/src/chatwidget/mcp_startup.rs @@ -7,7 +7,9 @@ //! already shown the same diagnostic in an earlier round. //! Initial and runtime diagnostics remain in retained history and the warnings viewer; //! compact history hides their full text behind the persistent warning notice. +//! Server-name/environment pairs keep same-named registrations independent. +use crate::app_server_approval_conversions::mcp_server_label; use codex_app_server_protocol::McpServerStartupFailureReason; use codex_app_server_protocol::McpServerStartupState; use codex_app_server_protocol::McpServerStatusUpdatedNotification; @@ -37,7 +39,11 @@ impl McpStartupStatus { impl ChatWidget { /// The server announces eager starts before outcomes. On attach or after lag, /// an outcome can arrive without its corresponding start. - fn update_mcp_startup_status(&mut self, server: String, status: McpStartupStatus) { + fn update_mcp_startup_status( + &mut self, + server: (String, Option), + status: McpStartupStatus, + ) { let report_diagnostic = if status.is_diagnostic() { self.mcp_startup_last_diagnostics .insert(server.clone(), status.clone()) @@ -74,26 +80,28 @@ impl ChatWidget { let total = current.len(); let mut starting: Vec<_> = current .iter() - .filter_map(|(name, state)| { + .filter_map(|(server, state)| { if matches!(state, McpStartupStatus::Starting) { - Some(name) + Some(server) } else { None } }) .collect(); starting.sort(); - let first = starting.first()?; let completed = total.saturating_sub(starting.len()); let max_to_show = 3; let mut to_show: Vec = starting .iter() .take(max_to_show) - .map(ToString::to_string) + .map(|(server_name, environment_id)| { + mcp_server_label(server_name, environment_id.as_deref()) + }) .collect(); if starting.len() > max_to_show { to_show.push("…".to_string()); } + let first = to_show.first()?; Some(if total > 1 { format!( "{MCP_STARTUP_MULTI_HEADER_PREFIX} ({completed}/{total}): {}", @@ -104,26 +112,35 @@ impl ChatWidget { }) } - fn report_mcp_startup_failure(&mut self, server: &str, status: &McpStartupStatus) { + fn report_mcp_startup_failure( + &mut self, + (server_name, environment_id): &(String, Option), + status: &McpStartupStatus, + ) { if let McpStartupStatus::Failed { error, failure_reason, } = status { - self.add_mcp_startup_warning(vec![error.clone()], [server.to_owned()], *failure_reason); + self.add_mcp_startup_warning( + vec![error.clone()], + [mcp_server_label(server_name, environment_id.as_deref())], + *failure_reason, + ); } } fn report_mcp_startup_summary<'a>( &mut self, - outcomes: impl IntoIterator, + outcomes: impl IntoIterator), &'a McpStartupStatus)>, ) { let mut failed = Vec::new(); let mut cancelled = Vec::new(); - for (server, status) in outcomes { + for ((server_name, environment_id), status) in outcomes { + let server = mcp_server_label(server_name, environment_id.as_deref()); match status { - McpStartupStatus::Failed { .. } => failed.push(server.clone()), - McpStartupStatus::Cancelled => cancelled.push(server.clone()), + McpStartupStatus::Failed { .. } => failed.push(server), + McpStartupStatus::Cancelled => cancelled.push(server), McpStartupStatus::Starting | McpStartupStatus::Ready => {} } } @@ -206,19 +223,28 @@ impl ChatWidget { notification: McpServerStatusUpdatedNotification, ) { let refresh_connector_mentions = notification.name == "codex_apps" + && notification.environment_id.is_none() && notification.status == McpServerStartupState::Ready; let status = match notification.status { McpServerStartupState::Starting => McpStartupStatus::Starting, McpServerStartupState::Ready => McpStartupStatus::Ready, - McpServerStartupState::Failed => McpStartupStatus::Failed { - failure_reason: notification.failure_reason, - error: notification.error.unwrap_or_else(|| { - format!("MCP client for `{}` failed to start", notification.name) - }), - }, + McpServerStartupState::Failed => { + let server = + mcp_server_label(¬ification.name, notification.environment_id.as_deref()); + McpStartupStatus::Failed { + failure_reason: notification.failure_reason, + error: match notification.error { + Some(error) if notification.environment_id.is_some() => { + format!("{server}: {error}") + } + Some(error) => error, + None => format!("MCP client for `{server}` failed to start"), + }, + } + } McpServerStartupState::Cancelled => McpStartupStatus::Cancelled, }; - self.update_mcp_startup_status(notification.name, status); + self.update_mcp_startup_status((notification.name, notification.environment_id), status); if refresh_connector_mentions { self.refresh_connector_mentions(/*force_refresh*/ false); } diff --git a/codex-rs/tui/src/chatwidget/slash_dispatch.rs b/codex-rs/tui/src/chatwidget/slash_dispatch.rs index d28b12f6e3..4523395a3b 100644 --- a/codex-rs/tui/src/chatwidget/slash_dispatch.rs +++ b/codex-rs/tui/src/chatwidget/slash_dispatch.rs @@ -873,8 +873,38 @@ impl ChatWidget { && !name.trim().is_empty() { if let Some(thread_id) = self.thread_id { + // Keep the old name-only syntax intact, including spaces and quotes. + let (name, environment_id) = if name.split_whitespace().any(|word| { + word == "--environment" || word.starts_with("--environment=") + }) { + let args = match super::slash_command_args::parse( + name, + &["--environment"], + &[], + &[], + ) { + Ok(args) => args, + Err(error) => { + self.add_error_message(error); + return; + } + }; + if args.positionals.is_empty() { + self.add_error_message( + "Usage: /mcp login [--environment ]".to_string(), + ); + return; + } + ( + args.positionals.join(" "), + args.value("--environment").map(str::to_owned), + ) + } else { + (name.trim().to_string(), None) + }; self.app_event_tx.send(AppEvent::StartMcpLogin { - name: name.trim().to_string(), + name, + environment_id, thread_id, }); } else { @@ -883,7 +913,9 @@ impl ChatWidget { ); } } else { - self.add_error_message("Usage: /mcp [verbose | login ]".to_string()); + self.add_error_message( + "Usage: /mcp [verbose | login [--environment ]]".to_string(), + ); } } SlashCommand::Keymap => match trimmed.to_ascii_lowercase().as_str() { diff --git a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_mcp_startup_failure_renders_warning_history.snap b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_mcp_startup_failure_renders_warning_history.snap index 079e5e0c65..fd8ac7caf4 100644 --- a/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_mcp_startup_failure_renders_warning_history.snap +++ b/codex-rs/tui/src/chatwidget/snapshots/codex_tui__chatwidget__tests__app_server_mcp_startup_failure_renders_warning_history.snap @@ -4,8 +4,8 @@ expression: normalize_snapshot_paths(term.backend().vt100().screen().contents()) --- -⚠ MCP client for `alpha` failed to start: handshake failed -⚠ MCP startup incomplete (failed: alpha) +⚠ notes (environment env-a): MCP client for `notes` failed to start: handshake failed +⚠ MCP startup incomplete (failed: notes (environment env-a)) › Ask Codex to do anything diff --git a/codex-rs/tui/src/chatwidget/tests/app_server.rs b/codex-rs/tui/src/chatwidget/tests/app_server.rs index b282c88491..e7ffb560cb 100644 --- a/codex-rs/tui/src/chatwidget/tests/app_server.rs +++ b/codex-rs/tui/src/chatwidget/tests/app_server.rs @@ -590,6 +590,7 @@ async fn tool_suggestion_install_url_is_validated_before_opening() { chat.handle_elicitation_request_now( codex_app_server_protocol::RequestId::Integer(9), codex_app_server_protocol::McpServerElicitationRequestParams { + environment_id: None, thread_id: request_thread_id.to_string(), turn_id: Some("turn-install".to_string()), server_name: "connector-server".to_string(), @@ -654,6 +655,7 @@ async fn invalid_url_elicitation_is_declined() { chat.handle_elicitation_request_now( codex_app_server_protocol::RequestId::Integer(9), codex_app_server_protocol::McpServerElicitationRequestParams { + environment_id: Some("env-a".to_string()), thread_id: request_thread_id.to_string(), turn_id: Some("turn-auth".to_string()), server_name: "payments".to_string(), diff --git a/codex-rs/tui/src/chatwidget/tests/computer_activity_tests.rs b/codex-rs/tui/src/chatwidget/tests/computer_activity_tests.rs index e291b4206c..7a8f0fe2ea 100644 --- a/codex-rs/tui/src/chatwidget/tests/computer_activity_tests.rs +++ b/codex-rs/tui/src/chatwidget/tests/computer_activity_tests.rs @@ -6,6 +6,7 @@ fn computer_item( status: codex_app_server_protocol::McpToolCallStatus, ) -> AppServerThreadItemPayload { AppServerThreadItemPayload::McpToolCall { + environment_id: None, id: id.to_string(), server: "cua_repl".to_string(), tool: "js".to_string(), diff --git a/codex-rs/tui/src/chatwidget/tests/exec_flow.rs b/codex-rs/tui/src/chatwidget/tests/exec_flow.rs index 229667c4af..a36592d215 100644 --- a/codex-rs/tui/src/chatwidget/tests/exec_flow.rs +++ b/codex-rs/tui/src/chatwidget/tests/exec_flow.rs @@ -13,6 +13,7 @@ async fn external_writer_snapshot_freezes_active_command_and_mcp_rows() { chat.transcript.active_cell = Some(Box::new(history_cell::new_active_mcp_tool_call( "mcp-running".to_string(), McpInvocation { + environment_id: None, server: "server".to_string(), tool: "tool".to_string(), arguments: None, @@ -134,6 +135,7 @@ async fn replayed_completion_preserves_unrelated_running_command() { chat.transcript.active_cell = Some(Box::new(history_cell::new_active_mcp_tool_call( "mcp-running".to_string(), McpInvocation { + environment_id: None, server: "server".to_string(), tool: "tool".to_string(), arguments: None, diff --git a/codex-rs/tui/src/chatwidget/tests/guardian.rs b/codex-rs/tui/src/chatwidget/tests/guardian.rs index 75ce2e316d..96b52e812f 100644 --- a/codex-rs/tui/src/chatwidget/tests/guardian.rs +++ b/codex-rs/tui/src/chatwidget/tests/guardian.rs @@ -804,6 +804,7 @@ async fn guardian_cleanup_drops_stale_reviews_and_restores_mcp_status() { handle_turn_started(&mut chat, "turn-1"); chat.on_mcp_server_status_updated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: None, name: "alpha".to_string(), status: McpServerStartupState::Starting, diff --git a/codex-rs/tui/src/chatwidget/tests/history_projection.rs b/codex-rs/tui/src/chatwidget/tests/history_projection.rs index edd451f65c..edf5f4fc5a 100644 --- a/codex-rs/tui/src/chatwidget/tests/history_projection.rs +++ b/codex-rs/tui/src/chatwidget/tests/history_projection.rs @@ -77,6 +77,7 @@ async fn older_tool_projection_matches_initial_replay() { }); } items.push(AppServerThreadItemPayload::McpToolCall { + environment_id: None, id: id.to_string(), server: server.to_string(), tool: "js".to_string(), diff --git a/codex-rs/tui/src/chatwidget/tests/history_replay.rs b/codex-rs/tui/src/chatwidget/tests/history_replay.rs index 59ac521103..b3a68bee25 100644 --- a/codex-rs/tui/src/chatwidget/tests/history_replay.rs +++ b/codex-rs/tui/src/chatwidget/tests/history_replay.rs @@ -1389,6 +1389,7 @@ async fn replayed_mcp_tool_call_stays_active_until_completion() { let _ = drain_insert_history(&mut rx); let mut item = AppServerThreadItemPayload::McpToolCall { + environment_id: None, id: "mcp-1".to_string(), server: "copilot-bridge".to_string(), tool: "copilot".to_string(), @@ -1434,6 +1435,7 @@ async fn failed_repl_mcp_tool_call_preserves_status_and_result() { chat.handle_server_notification( ServerNotification::ItemCompleted(ItemCompletedNotification::new("thread-1".to_string(), "turn-1".to_string(), AppServerThreadItemPayload::McpToolCall { + environment_id: None, id: "mcp-failed".to_string(), server: server.to_string(), tool: "js".to_string(), @@ -1500,6 +1502,7 @@ async fn deferred_mcp_lifecycle_events_keep_fifo_after_stream_finishes() { )); chat.on_mcp_tool_call_started(AppServerThreadItemPayload::McpToolCall { + environment_id: None, id: "mcp-deferred".to_string(), server: "copilot-bridge".to_string(), tool: "copilot".to_string(), @@ -1518,6 +1521,7 @@ async fn deferred_mcp_lifecycle_events_keep_fifo_after_stream_finishes() { chat.stream_controller = None; chat.on_mcp_tool_call_completed(AppServerThreadItemPayload::McpToolCall { + environment_id: None, id: "mcp-deferred".to_string(), server: "copilot-bridge".to_string(), tool: "copilot".to_string(), diff --git a/codex-rs/tui/src/chatwidget/tests/mcp_startup.rs b/codex-rs/tui/src/chatwidget/tests/mcp_startup.rs index 3460c975d0..eeb2c59f49 100644 --- a/codex-rs/tui/src/chatwidget/tests/mcp_startup.rs +++ b/codex-rs/tui/src/chatwidget/tests/mcp_startup.rs @@ -5,6 +5,7 @@ use pretty_assertions::assert_eq; fn notify_mcp_status(chat: &mut ChatWidget, name: &str, status: McpServerStartupState) { chat.handle_server_notification( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some("thread-1".to_string()), name: name.to_string(), status, @@ -18,6 +19,7 @@ fn notify_mcp_status(chat: &mut ChatWidget, name: &str, status: McpServerStartup fn notify_mcp_status_error(chat: &mut ChatWidget, name: &str, error: &str) { chat.handle_server_notification( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some("thread-1".to_string()), name: name.to_string(), status: McpServerStartupState::Failed, @@ -48,6 +50,7 @@ async fn mcp_startup_ignores_status_for_other_thread() { ] { chat.handle_server_notification( ServerNotification::McpServerStatusUpdated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: Some(child_thread_id.to_string()), name: "sentry".to_string(), status, @@ -78,6 +81,7 @@ async fn mcp_apps_readiness_retries_an_in_flight_installed_mention_lookup() { chat.refresh_connector_mentions(/*force_refresh*/ false); chat.on_mcp_server_status_updated(McpServerStatusUpdatedNotification { + environment_id: None, thread_id: None, name: "codex_apps".to_string(), status: McpServerStartupState::Ready, @@ -540,47 +544,72 @@ async fn turn_start_replaces_idle_completed_mcp_startup_header() { async fn app_server_mcp_startup_failure_renders_warning_history() { let (mut chat, mut rx, _op_rx) = make_chatwidget_manual(/*model_override*/ None).await; chat.show_welcome_banner = false; + let width: u16 = 120; - notify_mcp_status(&mut chat, "beta", McpServerStartupState::Starting); - notify_mcp_status(&mut chat, "alpha", McpServerStartupState::Starting); + for environment_id in ["env-a", "env-b"] { + chat.on_mcp_server_status_updated(McpServerStatusUpdatedNotification { + thread_id: None, + name: "notes".to_string(), + environment_id: Some(environment_id.to_string()), + status: McpServerStartupState::Starting, + error: None, + failure_reason: None, + }); + } + assert_eq!( + chat.status_state.current_status.header, + "Starting MCP servers (0/2): notes (environment env-a), notes (environment env-b)" + ); assert!(drain_insert_history(&mut rx).is_empty()); assert!(chat.bottom_pane.is_task_running()); - notify_mcp_status_error( - &mut chat, - "alpha", - "MCP client for `alpha` failed to start: handshake failed", - ); - notify_mcp_status_error( - &mut chat, - "alpha", - "MCP client for `alpha` failed to start: handshake failed", - ); + for _ in 0..2 { + chat.on_mcp_server_status_updated(McpServerStatusUpdatedNotification { + thread_id: None, + name: "notes".to_string(), + environment_id: Some("env-a".to_string()), + status: McpServerStartupState::Failed, + error: Some("MCP client for `notes` failed to start: handshake failed".to_string()), + failure_reason: None, + }); + } - let failure_cells = drain_insert_history(&mut rx); + let failure_cells = drain_insert_history_with(&mut rx, |cell| cell.transcript_lines(width)); let failure_text = failure_cells .iter() .map(|lines| lines_to_single_string(lines)) .collect::(); - assert!(failure_text.contains("MCP client for `alpha` failed to start: handshake failed")); + assert_eq!( + failure_text, + "⚠ notes (environment env-a): MCP client for `notes` failed to start: handshake failed\n" + ); assert!(!failure_text.contains("MCP startup incomplete")); assert!(chat.bottom_pane.is_task_running()); assert!(drain_insert_history(&mut rx).is_empty()); assert!(chat.bottom_pane.is_task_running()); - notify_mcp_status(&mut chat, "beta", McpServerStartupState::Ready); + chat.on_mcp_server_status_updated(McpServerStatusUpdatedNotification { + thread_id: None, + name: "notes".to_string(), + environment_id: Some("env-b".to_string()), + status: McpServerStartupState::Ready, + error: None, + failure_reason: None, + }); let summary_cells = drain_insert_history(&mut rx); let summary_text = summary_cells .iter() .map(|lines| lines_to_single_string(lines)) .collect::(); - assert_eq!(summary_text, "⚠ MCP startup incomplete (failed: alpha)\n"); + assert_eq!( + summary_text, + "⚠ MCP startup incomplete (failed: notes (environment env-a))\n" + ); assert!(!chat.bottom_pane.is_task_running()); - let width: u16 = 120; let ui_height: u16 = chat.desired_height(width); let vt_height: u16 = ui_height.saturating_add(1).max(10); let viewport = Rect::new(0, vt_height - ui_height - 1, width, ui_height); diff --git a/codex-rs/tui/src/chatwidget/tests/slash_commands.rs b/codex-rs/tui/src/chatwidget/tests/slash_commands.rs index 36b7ffeae0..f7959d50cd 100644 --- a/codex-rs/tui/src/chatwidget/tests/slash_commands.rs +++ b/codex-rs/tui/src/chatwidget/tests/slash_commands.rs @@ -3026,14 +3026,24 @@ async fn slash_mcp_login_targets_the_active_thread() { let thread_id = ThreadId::new(); chat.thread_id = Some(thread_id); - submit_composer_text(&mut chat, "/mcp login enterprise"); - - assert_matches!(rx.try_recv(), Ok(AppEvent::FollowTranscript)); - assert_matches!( - rx.try_recv(), - Ok(AppEvent::StartMcpLogin { name, thread_id: actual_thread_id }) - if name == "enterprise" && actual_thread_id == thread_id - ); + for (args, expected_name, expected_environment_id) in [ + ("enterprise", "enterprise", None), + ("Team's notes", "Team's notes", None), + ( + "\"Team notes\" --environment env-b", + "Team notes", + Some("env-b"), + ), + ] { + submit_composer_text(&mut chat, &format!("/mcp login {args}")); + assert_matches!(rx.try_recv(), Ok(AppEvent::FollowTranscript)); + assert_matches!( + rx.try_recv(), + Ok(AppEvent::StartMcpLogin { name, environment_id, thread_id: actual_thread_id }) + if name == expected_name && environment_id.as_deref() == expected_environment_id + && actual_thread_id == thread_id + ); + } assert!(op_rx.try_recv().is_err(), "expected no core op to be sent"); } @@ -3050,7 +3060,7 @@ async fn slash_mcp_invalid_args_show_usage() { .collect::>() .join("\n"); assert!( - rendered.contains("Usage: /mcp [verbose | login ]"), + rendered.contains("Usage: /mcp [verbose | login [--environment ]]"), "expected usage message, got: {rendered:?}" ); assert_eq!(recall_latest_after_clearing(&mut chat), "/mcp full"); diff --git a/codex-rs/tui/src/chatwidget/tool_lifecycle.rs b/codex-rs/tui/src/chatwidget/tool_lifecycle.rs index 04fbbc9d6f..830b81c83d 100644 --- a/codex-rs/tui/src/chatwidget/tool_lifecycle.rs +++ b/codex-rs/tui/src/chatwidget/tool_lifecycle.rs @@ -178,6 +178,7 @@ impl ChatWidget { let ThreadItemPayload::McpToolCall { id, server, + environment_id, tool, arguments, .. @@ -188,6 +189,7 @@ impl ChatWidget { self.flush_answer_stream_with_separator(); let invocation = McpInvocation { server, + environment_id, tool, arguments: Some(arguments), }; diff --git a/codex-rs/tui/src/chatwidget/tool_requests.rs b/codex-rs/tui/src/chatwidget/tool_requests.rs index 1382fbf550..2c0fca1424 100644 --- a/codex-rs/tui/src/chatwidget/tool_requests.rs +++ b/codex-rs/tui/src/chatwidget/tool_requests.rs @@ -355,6 +355,7 @@ impl ChatWidget { if let Some(params) = crate::bottom_pane::AppLinkViewParams::from_url_app_server_request( thread_id, ¶ms.server_name, + params.environment_id.as_deref(), request_id.clone(), ¶ms.request, ) { @@ -373,6 +374,7 @@ impl ChatWidget { thread_id, thread_label: None, server_name: params.server_name, + environment_id: params.environment_id, request_id, message, }); @@ -387,6 +389,7 @@ impl ChatWidget { crate::bottom_pane::user_verification::UserVerificationRequest { thread_label: None, server_name: params.server_name, + environment_id: params.environment_id, request_id, title, description, diff --git a/codex-rs/tui/src/history_cell/computer_activity_tests.rs b/codex-rs/tui/src/history_cell/computer_activity_tests.rs index c6b9766fc8..bab07a41b6 100644 --- a/codex-rs/tui/src/history_cell/computer_activity_tests.rs +++ b/codex-rs/tui/src/history_cell/computer_activity_tests.rs @@ -7,6 +7,7 @@ fn call(id: &str, title: &str) -> McpToolCallCell { McpToolCallCell::new( id.to_string(), McpInvocation { + environment_id: None, server: "cua_repl".to_string(), tool: "js".to_string(), arguments: Some(json!({"title": title, "code": "await cua.getState()"})), diff --git a/codex-rs/tui/src/history_cell/mcp.rs b/codex-rs/tui/src/history_cell/mcp.rs index 6aa4e712e6..4939d18a0d 100644 --- a/codex-rs/tui/src/history_cell/mcp.rs +++ b/codex-rs/tui/src/history_cell/mcp.rs @@ -2,6 +2,7 @@ //! Tool output previews share a three-row budget across all result blocks; //! the expanded transcript retains the full text. //! Invocation and result rows retain exact logical source ranges through wrapping and gutters. +//! Environment ownership is rendered separately from raw server names used by special handlers. use super::*; use crate::line_truncation::truncate_line_with_ellipsis_if_overflow; @@ -60,6 +61,7 @@ pub(crate) struct McpToolCallCell { #[derive(Debug, Clone)] pub(crate) struct McpInvocation { pub(crate) server: String, + pub(crate) environment_id: Option, pub(crate) tool: String, pub(crate) arguments: Option, } @@ -177,14 +179,7 @@ impl McpToolCallCell { .map(|title| title.split_whitespace().collect::>().join(" ")) .filter(|title| !title.is_empty()); let invocation_line = if compact { - Line::from( - title - .clone() - .unwrap_or_else(|| { - format!("{}.{}", self.invocation.server, self.invocation.tool) - }) - .fg(accent_color()), - ) + Line::from(self.compact_tool_name().fg(accent_color())) } else { line_to_static(&format_mcp_invocation(&self.invocation)) }; @@ -661,7 +656,7 @@ pub(crate) fn new_mcp_tools_output_from_statuses( ]; let mut statuses = statuses.iter().collect::>(); - statuses.sort_by(|a, b| a.name.cmp(&b.name)); + statuses.sort_by(|a, b| (&a.name, &a.environment_id).cmp(&(&b.name, &b.environment_id))); let has_any_tools = statuses.iter().any(|status| !status.tools.is_empty()); if !has_any_tools && matches!(detail, McpServerStatusDetail::Full) { @@ -699,10 +694,14 @@ pub(crate) fn new_mcp_tools_output_from_statuses( }; let count = status.tools.len(); let unit = if count == 1 { "tool" } else { "tools" }; + let name = match &status.environment_id { + Some(environment_id) => format!("{} (environment {environment_id})", status.name), + None => status.name.clone(), + }; lines.push( vec![ " • ".set_style(style), - status.name.clone().bold(), + name.bold(), ": ".into(), label.set_style(style), format!(" ({count} {unit})").dim(), @@ -853,7 +852,7 @@ fn format_mcp_invocation(invocation: &McpInvocation) -> Line<'_> { }) .unwrap_or_default(); - let invocation_spans = vec![ + let mut invocation_spans = vec![ invocation.server.as_str().fg(accent_color()), ".".into(), invocation.tool.as_str().fg(accent_color()), @@ -861,5 +860,8 @@ fn format_mcp_invocation(invocation: &McpInvocation) -> Line<'_> { args_str.dim(), ")".into(), ]; + if let Some(environment_id) = &invocation.environment_id { + invocation_spans.push(format!(" (environment {environment_id})").dim()); + } invocation_spans.into() } diff --git a/codex-rs/tui/src/history_cell/mcp_preview.rs b/codex-rs/tui/src/history_cell/mcp_preview.rs index dbdfe85a34..6879b943d4 100644 --- a/codex-rs/tui/src/history_cell/mcp_preview.rs +++ b/codex-rs/tui/src/history_cell/mcp_preview.rs @@ -18,7 +18,8 @@ use std::collections::VecDeque; impl McpToolCallCell { pub(super) fn compact_tool_name(&self) -> String { - self.invocation + let mut label = self + .invocation .arguments .as_ref() .filter(|_| self.result_kind() == McpResultKind::NodeRepl) @@ -26,7 +27,11 @@ impl McpToolCallCell { .and_then(serde_json::Value::as_str) .map(|title| title.split_whitespace().collect::>().join(" ")) .filter(|title| !title.is_empty()) - .unwrap_or_else(|| format!("{}.{}", self.invocation.server, self.invocation.tool)) + .unwrap_or_else(|| format!("{}.{}", self.invocation.server, self.invocation.tool)); + if let Some(environment_id) = &self.invocation.environment_id { + label.push_str(&format!(" (environment {environment_id})")); + } + label } pub(super) fn compact_mcp_lines(&self, width: u16) -> Vec { diff --git a/codex-rs/tui/src/history_cell/mcp_tests.rs b/codex-rs/tui/src/history_cell/mcp_tests.rs index 7bb789edd8..fb3f3d79bb 100644 --- a/codex-rs/tui/src/history_cell/mcp_tests.rs +++ b/codex-rs/tui/src/history_cell/mcp_tests.rs @@ -12,7 +12,7 @@ const PNG: &str = "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR4nGP4z fn mcp_inventory_connection_states() { use McpServerConnectionStatus as Status; - let statuses = [ + let mut statuses = [ ("unknown", None), ("starting", Some(Status::Starting)), ("failed", Some(Status::Failed)), @@ -24,6 +24,7 @@ fn mcp_inventory_connection_states() { ] .into_iter() .map(|(name, runtime_status)| McpServerStatus { + environment_id: None, server_capabilities: None, tool_list_meta: None, name: name.to_string(), @@ -38,6 +39,12 @@ fn mcp_inventory_connection_states() { auth_status: McpAuthStatus::Unknown, }) .collect::>(); + for environment in ["env-a", "env-b"] { + let mut status = statuses[0].clone(); + status.name = "notes".to_string(); + status.environment_id = Some(environment.to_string()); + statuses.push(status); + } let cell = new_mcp_tools_output_from_statuses(&statuses, McpServerStatusDetail::ToolsAndAuthOnly); let rendered = cell @@ -141,6 +148,7 @@ fn mcp_preview_shares_one_limit_across_blocks_and_preserves_transcript() { let mut cell = new_active_mcp_tool_call( "call-preview".into(), McpInvocation { + environment_id: None, server: "search".into(), tool: "lookup".into(), arguments: Some(json!({"title": "Search query"})), @@ -196,6 +204,7 @@ fn code_mode_output_shares_a_row_budget_across_blocks() { let mut cell = new_active_mcp_tool_call( "browser-call".to_string(), McpInvocation { + environment_id: None, server: "node_repl".to_string(), tool: "js".to_string(), arguments: Some(json!({"title": "Inspect page", "code": "await tab.snapshot()"})), @@ -239,6 +248,7 @@ fn code_mode_output_preserves_trailing_failure_diagnostics_in_transcript() { let mut cell = new_active_mcp_tool_call( "browser-error".to_string(), McpInvocation { + environment_id: None, server: "node_repl".to_string(), tool: "js".to_string(), arguments: Some(json!({"title": "Inspect page"})), @@ -297,6 +307,7 @@ fn code_mode_output_row_budget_applies_after_wrapping_and_to_errors() { let mut cell = new_active_mcp_tool_call( "browser-call".to_string(), McpInvocation { + environment_id: None, server: server.to_string(), tool: "js".to_string(), arguments: Some(json!({"title": "Inspect"})), @@ -406,6 +417,7 @@ fn code_mode_preserves_text_fields_on_nontext_and_unknown_blocks() { let mut cell = new_active_mcp_tool_call( "call-code-mode".to_string(), McpInvocation { + environment_id: None, server: "node_repl".to_string(), tool: "js".to_string(), arguments: Some(json!({"title": "Inspect results"})), @@ -492,6 +504,7 @@ fn code_mode_preserves_text_fields_on_nontext_and_unknown_blocks() { let mut cua_cell = new_active_mcp_tool_call( "call-cua-repl".to_string(), McpInvocation { + environment_id: None, server: "cua_repl".to_string(), tool: "js".to_string(), arguments: None, @@ -536,6 +549,7 @@ fn titled_image_call_keeps_error_and_full_title_when_narrow() { let mut cell = new_active_mcp_tool_call( "call".into(), McpInvocation { + environment_id: None, server: "node_repl".into(), tool: "js".into(), arguments: Some(json!({"title": title})), @@ -606,6 +620,7 @@ fn code_mode_transcript_preserves_long_code_and_indentation_across_wrapping() { let mut cell = new_active_mcp_tool_call( "call-code".to_owned(), McpInvocation { + environment_id: None, server: "node_repl".to_owned(), tool: "js".to_owned(), arguments: None, @@ -634,6 +649,7 @@ fn mcp_result_preview_preserves_source_text_and_excludes_tree_gutters() { let mut cell = new_active_mcp_tool_call( "call-mcp".to_owned(), McpInvocation { + environment_id: None, server: "docs".to_owned(), tool: "read".to_owned(), arguments: None, diff --git a/codex-rs/tui/src/history_cell/snapshots/codex_tui__history_cell__mcp__tests__mcp_inventory_connection_states.snap b/codex-rs/tui/src/history_cell/snapshots/codex_tui__history_cell__mcp__tests__mcp_inventory_connection_states.snap index 345ecd348b..b838219f58 100644 --- a/codex-rs/tui/src/history_cell/snapshots/codex_tui__history_cell__mcp__tests__mcp_inventory_connection_states.snap +++ b/codex-rs/tui/src/history_cell/snapshots/codex_tui__history_cell__mcp__tests__mcp_inventory_connection_states.snap @@ -12,6 +12,8 @@ expression: rendered • deferred: not started (0 tools) • disabled: disabled (0 tools) • failed: failed (0 tools) + • notes (environment env-a): unknown (0 tools) + • notes (environment env-b): unknown (0 tools) • starting: starting (0 tools) • unknown: unknown (0 tools) diff --git a/codex-rs/tui/src/history_cell/snapshots/codex_tui__history_cell__tests__active_mcp_tool_call_snapshot.snap b/codex-rs/tui/src/history_cell/snapshots/codex_tui__history_cell__tests__active_mcp_tool_call_snapshot.snap index 2077da659f..c8ff140910 100644 --- a/codex-rs/tui/src/history_cell/snapshots/codex_tui__history_cell__tests__active_mcp_tool_call_snapshot.snap +++ b/codex-rs/tui/src/history_cell/snapshots/codex_tui__history_cell__tests__active_mcp_tool_call_snapshot.snap @@ -1,5 +1,6 @@ --- -source: tui/src/history_cell.rs +source: tui/src/history_cell/tests.rs expression: rendered --- -• Calling search.find_docs({"query":"ratatui styling","limit":3}) +• Calling + └ search.find_docs({"query":"ratatui styling","limit":3}) (environment a) diff --git a/codex-rs/tui/src/history_cell/tests.rs b/codex-rs/tui/src/history_cell/tests.rs index dc317ebbad..cd06cf6d53 100644 --- a/codex-rs/tui/src/history_cell/tests.rs +++ b/codex-rs/tui/src/history_cell/tests.rs @@ -494,6 +494,7 @@ fn proposed_plan_cell_unwraps_markdown_fenced_table() { #[test] fn structured_tool_cell_renders_raw_plain_text_without_prefix_or_style() { let invocation = McpInvocation { + environment_id: None, server: "search".into(), tool: "find_docs".into(), arguments: Some(json!({"query": "raw mode"})), @@ -544,6 +545,7 @@ fn raw_mode_toggle_transcript_snapshot() { let mut tool_cell = new_active_mcp_tool_call( "call-snapshot".to_string(), McpInvocation { + environment_id: None, server: "workspace".to_string(), tool: "inspect".to_string(), arguments: Some(json!({"path": "README.md"})), @@ -1162,6 +1164,7 @@ async fn mcp_tools_output_lists_tools_for_hyphenated_server_names() { #[test] fn mcp_tools_output_from_statuses_renders_status_only_servers() { let statuses = vec![McpServerStatus { + environment_id: None, server_capabilities: None, tool_list_meta: None, tools_error: None, @@ -1198,6 +1201,7 @@ fn mcp_tools_output_from_statuses_renders_status_only_servers() { #[test] fn mcp_tools_output_from_statuses_renders_verbose_inventory() { let statuses = vec![McpServerStatus { + environment_id: None, server_capabilities: None, tool_list_meta: None, tools_error: None, @@ -1491,6 +1495,7 @@ fn web_search_history_cell_transcript_snapshot() { #[test] fn active_mcp_tool_call_snapshot() { let invocation = McpInvocation { + environment_id: Some("a".to_string()), server: "search".into(), tool: "find_docs".into(), arguments: Some(json!({ @@ -1515,6 +1520,7 @@ fn code_mode_tool_call_uses_title_and_preserves_full_transcript() { let mut cell = new_active_mcp_tool_call( "call-code-mode".into(), McpInvocation { + environment_id: None, server: "node_repl".into(), tool: "js".into(), arguments: Some(json!({ @@ -1565,6 +1571,7 @@ fn code_mode_tool_call_preserves_failure_details() { let mut cell = new_active_mcp_tool_call( "call-code-mode-failed".into(), McpInvocation { + environment_id: None, server: "node_repl".into(), tool: "js".into(), arguments: Some(json!({"title": "Inspect workspace", "code": "throw Error('denied')"})), @@ -1627,6 +1634,7 @@ fn thread_recap_loading_without_animations_snapshot() { #[test] fn completed_mcp_tool_call_success_snapshot() { let invocation = McpInvocation { + environment_id: None, server: "search".into(), tool: "find_docs".into(), arguments: Some(json!({ @@ -1657,6 +1665,7 @@ fn completed_mcp_tool_call_success_snapshot() { #[test] fn completed_mcp_tool_call_image_after_text_snapshot() { let invocation = McpInvocation { + environment_id: None, server: "image".into(), tool: "generate".into(), arguments: Some(json!({ @@ -1688,6 +1697,7 @@ fn completed_mcp_tool_call_image_after_text_snapshot() { #[test] fn completed_mcp_tool_call_accepts_data_url_image_blocks() { let invocation = McpInvocation { + environment_id: None, server: "image".into(), tool: "generate".into(), arguments: Some(json!({ @@ -1717,6 +1727,7 @@ fn completed_mcp_tool_call_accepts_data_url_image_blocks() { #[test] fn completed_mcp_tool_call_multiple_image_blocks_snapshot() { let invocation = McpInvocation { + environment_id: None, server: "image".into(), tool: "generate".into(), arguments: Some(json!({ @@ -1745,6 +1756,7 @@ fn completed_mcp_tool_call_multiple_image_blocks_snapshot() { #[test] fn completed_mcp_tool_call_error_snapshot() { let invocation = McpInvocation { + environment_id: None, server: "search".into(), tool: "find_docs".into(), arguments: Some(json!({ @@ -1768,6 +1780,7 @@ fn completed_mcp_tool_call_error_snapshot() { #[test] fn completed_mcp_tool_call_multiple_outputs_snapshot() { let invocation = McpInvocation { + environment_id: None, server: "search".into(), tool: "find_docs".into(), arguments: Some(json!({ @@ -1808,6 +1821,7 @@ fn completed_mcp_tool_call_multiple_outputs_snapshot() { #[test] fn completed_mcp_tool_call_wrapped_outputs_snapshot() { let invocation = McpInvocation { + environment_id: None, server: "metrics".into(), tool: "get_nearby_metric".into(), arguments: Some(json!({ @@ -1840,6 +1854,7 @@ fn completed_mcp_tool_call_wrapped_outputs_snapshot() { #[test] fn completed_mcp_tool_call_multiple_outputs_inline_snapshot() { let invocation = McpInvocation { + environment_id: None, server: "metrics".into(), tool: "summary".into(), arguments: Some(json!({ diff --git a/codex-rs/tui/src/slash_command.rs b/codex-rs/tui/src/slash_command.rs index 42f90a6b4c..368d61a92f 100644 --- a/codex-rs/tui/src/slash_command.rs +++ b/codex-rs/tui/src/slash_command.rs @@ -151,7 +151,9 @@ impl SlashCommand { SlashCommand::Experimental => "toggle experimental features", SlashCommand::AutoReview => "approve one retry of a recent auto-review denial", SlashCommand::Memories => "configure memory use and generation", - SlashCommand::Mcp => "list MCP tools; use /mcp verbose or /mcp login ", + SlashCommand::Mcp => { + "list MCP tools; /mcp verbose or /mcp login [--environment ]" + } SlashCommand::Apps => "manage apps", SlashCommand::Plugins => "browse plugins", SlashCommand::Logout => "log out of Codex", diff --git a/codex-rs/tui/src/thread_transcript/tools.rs b/codex-rs/tui/src/thread_transcript/tools.rs index 44c012063e..74e6eec9bf 100644 --- a/codex-rs/tui/src/thread_transcript/tools.rs +++ b/codex-rs/tui/src/thread_transcript/tools.rs @@ -77,6 +77,7 @@ pub(crate) fn historical_tool_fallback( } ThreadItemPayload::McpToolCall { server, + environment_id, tool, status, result, @@ -88,6 +89,10 @@ pub(crate) fn historical_tool_fallback( McpToolCallStatus::Completed => "Completed · result unavailable", McpToolCallStatus::Failed => "Failed · result unavailable", }; + let server = crate::app_server_approval_conversions::mcp_server_label( + server, + environment_id.as_deref(), + ); vec![format!("mcp tool: {server}/{tool} · {status}").dim().into()] } ThreadItemPayload::CollabAgentToolCall { @@ -207,6 +212,7 @@ impl McpHistory { let ThreadItemPayload::McpToolCall { id, server, + environment_id, tool, status, arguments, @@ -238,6 +244,7 @@ impl McpHistory { id, invocation: McpInvocation { server, + environment_id, tool, arguments: Some(arguments), }, diff --git a/codex-rs/tui/src/thread_transcript/tools_tests.rs b/codex-rs/tui/src/thread_transcript/tools_tests.rs index 8e9038067d..d6b924b164 100644 --- a/codex-rs/tui/src/thread_transcript/tools_tests.rs +++ b/codex-rs/tui/src/thread_transcript/tools_tests.rs @@ -37,6 +37,7 @@ fn command_item(status: CommandExecutionStatus) -> ThreadItemPayload { fn mcp_item(server: &str, id: &str) -> ThreadItemPayload { ThreadItemPayload::McpToolCall { + environment_id: None, id: id.to_string(), server: server.to_string(), tool: "js".to_string(), diff --git a/sdk/python/src/openai_codex/generated/v2_all.py b/sdk/python/src/openai_codex/generated/v2_all.py index cc2a104d2f..55e776a26b 100644 --- a/sdk/python/src/openai_codex/generated/v2_all.py +++ b/sdk/python/src/openai_codex/generated/v2_all.py @@ -2749,6 +2749,13 @@ class McpServerOauthLoginParams(BaseModel): description="Registration strategy for this login only; omission selects automatic discovery.", ), ] = None + environment_id: Annotated[ + str | None, + Field( + alias="environmentId", + description="Exact registration scope; omission preserves legacy name-only selection.", + ), + ] = None name: str scopes: list[str] | None = None thread_id: Annotated[str | None, Field(alias="threadId")] = None @@ -2795,6 +2802,13 @@ class McpServerStatusUpdatedNotification(BaseModel): model_config = ConfigDict( populate_by_name=True, ) + environment_id: Annotated[ + str | None, + Field( + alias="environmentId", + description="Registration scope, not necessarily the server's execution environment.", + ), + ] = None error: str | None = None failure_reason: Annotated[ McpServerStartupFailureReason | None, Field(alias="failureReason") @@ -2810,6 +2824,13 @@ class McpServerToolCallParams(BaseModel): ) field_meta: Annotated[Any | None, Field(alias="_meta")] = None arguments: Any | None = None + environment_id: Annotated[ + str | None, + Field( + alias="environmentId", + description="Exact registration scope; omission preserves legacy name-only selection.", + ), + ] = None server: str thread_id: Annotated[str, Field(alias="threadId")] tool: str @@ -5775,6 +5796,13 @@ class McpToolCallThreadItem(BaseModel): int | None, Field(alias="durationMs", description="The duration of the MCP tool call in milliseconds."), ] = None + environment_id: Annotated[ + str | None, + Field( + alias="environmentId", + description="Registration scope, not necessarily the server's execution environment.", + ), + ] = None error: McpToolCallError | None = None id: str mcp_app_resource_uri: Annotated[ @@ -9358,6 +9386,13 @@ class ListMcpServerStatusParams(BaseModel): description="Controls how much MCP inventory data to fetch for each server. Defaults to `Full` when omitted." ), ] = None + environment_id: Annotated[ + str | None, + Field( + alias="environmentId", + description="Select this environment's registration. Requires `serverName` and `threadId`. When omitted, a named request uses the same server as older clients.", + ), + ] = None limit: Annotated[ int | None, Field(description="Optional page size; defaults to a server-defined value.", ge=0), @@ -9417,6 +9452,13 @@ class McpResourceReadParams(BaseModel): ), ] = None connector_id: Annotated[str | None, Field(alias="connectorId")] = None + environment_id: Annotated[ + str | None, + Field( + alias="environmentId", + description="Exact registration scope; omission preserves legacy name-only selection.", + ), + ] = None origin_call_id: Annotated[ str | None, Field( @@ -9452,6 +9494,13 @@ class McpServerStatus(BaseModel): populate_by_name=True, ) auth_status: Annotated[McpAuthStatus, Field(alias="authStatus")] + environment_id: Annotated[ + str | None, + Field( + alias="environmentId", + description="Environment that contributed this registration; null for a thread-wide server. Older servers omit this field.", + ), + ] = None http_origin: Annotated[ str | None, Field(