From 62687262a30cce0928435c153b6016d56e85b8ee Mon Sep 17 00:00:00 2001 From: Ali Hashemi <14126952+hashemix@users.noreply.github.com> Date: Sun, 12 Oct 2025 16:00:48 -0300 Subject: [PATCH 1/9] feat: add server_supports_completion method (#104) --- crates/rust-mcp-sdk/src/mcp_traits/mcp_client.rs | 16 ++++++++++++++++ crates/rust-mcp-sdk/src/schema.rs | 3 +++ .../hello-world-mcp-server-stdio/src/main.rs | 4 +--- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/crates/rust-mcp-sdk/src/mcp_traits/mcp_client.rs b/crates/rust-mcp-sdk/src/mcp_traits/mcp_client.rs index 5fe3fba..c295082 100644 --- a/crates/rust-mcp-sdk/src/mcp_traits/mcp_client.rs +++ b/crates/rust-mcp-sdk/src/mcp_traits/mcp_client.rs @@ -131,6 +131,22 @@ pub trait McpClient: Sync + Send { .map(|server_details| server_details.capabilities.logging.is_some()) } + /// Checks if the server supports argument autocompletion suggestions. + /// + /// This function retrieves the server information and checks if the + /// server has completions capabilities listed. If the server info has + /// not been retrieved yet, it returns `None`. Otherwise, it returns + /// `Some(true)` if completions is supported, or `Some(false)` if not. + /// + /// # Returns + /// - `None` if server information is not yet available. + /// - `Some(true)` if completions is supported by the server. + /// - `Some(false)` if completions is not supported by the server. + fn server_supports_completion(&self) -> Option { + self.server_info() + .map(|server_details| server_details.capabilities.completions.is_some()) + } + fn instructions(&self) -> Option { self.server_info()?.instructions } diff --git a/crates/rust-mcp-sdk/src/schema.rs b/crates/rust-mcp-sdk/src/schema.rs index 2c7e7b4..bc008c2 100644 --- a/crates/rust-mcp-sdk/src/schema.rs +++ b/crates/rust-mcp-sdk/src/schema.rs @@ -1,6 +1,9 @@ #[cfg(feature = "2025_06_18")] pub use rust_mcp_schema::*; +#[cfg(not(feature = "2025_06_18"))] +pub use rust_mcp_schema::{ParseProtocolVersionError, ProtocolVersion}; + #[cfg(all( feature = "2025_03_26", not(any(feature = "2024_11_05", feature = "2025_06_18")) diff --git a/examples/hello-world-mcp-server-stdio/src/main.rs b/examples/hello-world-mcp-server-stdio/src/main.rs index 98ff6f0..9e5d2b3 100644 --- a/examples/hello-world-mcp-server-stdio/src/main.rs +++ b/examples/hello-world-mcp-server-stdio/src/main.rs @@ -1,19 +1,17 @@ mod handler; mod tools; -use std::sync::Arc; - use handler::MyServerHandler; use rust_mcp_sdk::schema::{ Implementation, InitializeResult, ServerCapabilities, ServerCapabilitiesTools, LATEST_PROTOCOL_VERSION, }; - use rust_mcp_sdk::{ error::SdkResult, mcp_server::{server_runtime, ServerRuntime}, McpServer, StdioTransport, TransportOptions, }; +use std::sync::Arc; #[tokio::main] async fn main() -> SdkResult<()> { From d10488bac739bf28b45d636129eb598d4dd87fd2 Mon Sep 17 00:00:00 2001 From: Ali Hashemi <14126952+hashemix@users.noreply.github.com> Date: Sun, 12 Oct 2025 16:51:01 -0300 Subject: [PATCH 2/9] feat(server): decouple core logic from HTTP server for improved architecture (#106) * chore: refactor hyperserver * chore: refactor utils * chore: use proper consts for header names * chore: clean up app state * chore: adjust cagro features * chore: rename AppState to McpAppState * feat: initial implementation of mcp_http_handler * feat: de-couple stramable http logic from the server framework * chore: move sse event out to own module * chore: move dns protection out of middlewares * chore: remove session id generator middleware * chore: add new methdo to McpHttpHandler for creatig http::Request * chore: update sse handlers to use mcp_http_handler * chore: update feature flags --- Cargo.lock | 4 + crates/rust-mcp-sdk/Cargo.toml | 10 +- crates/rust-mcp-sdk/src/hyper_servers.rs | 4 - .../rust-mcp-sdk/src/hyper_servers/error.rs | 2 + .../src/hyper_servers/hyper_runtime.rs | 4 +- .../src/hyper_servers/middlewares.rs | 2 - .../middlewares/protect_dns_rebinding.rs | 66 -- .../middlewares/session_id_gen.rs | 23 - .../rust-mcp-sdk/src/hyper_servers/routes.rs | 16 +- .../src/hyper_servers/routes/hyper_utils.rs | 502 ------------ .../hyper_servers/routes/messages_routes.rs | 56 +- .../src/hyper_servers/routes/sse_routes.rs | 162 +--- .../routes/streamable_http_routes.rs | 156 +--- .../rust-mcp-sdk/src/hyper_servers/server.rs | 26 +- crates/rust-mcp-sdk/src/lib.rs | 2 + crates/rust-mcp-sdk/src/mcp_http.rs | 12 + .../{hyper_servers => mcp_http}/app_state.rs | 8 +- .../src/mcp_http/mcp_http_handler.rs | 306 +++++++ .../src/mcp_http/mcp_http_utils.rs | 759 ++++++++++++++++++ .../session_store.rs | 0 .../session_store/in_memory.rs | 0 crates/rust-mcp-sdk/src/utils.rs | 3 +- crates/rust-mcp-transport/src/lib.rs | 3 + crates/rust-mcp-transport/src/utils.rs | 35 +- .../rust-mcp-transport/src/utils/sse_event.rs | 122 +++ .../src/utils/sse_parser.rs | 81 +- 26 files changed, 1355 insertions(+), 1009 deletions(-) delete mode 100644 crates/rust-mcp-sdk/src/hyper_servers/middlewares.rs delete mode 100644 crates/rust-mcp-sdk/src/hyper_servers/middlewares/protect_dns_rebinding.rs delete mode 100644 crates/rust-mcp-sdk/src/hyper_servers/middlewares/session_id_gen.rs delete mode 100644 crates/rust-mcp-sdk/src/hyper_servers/routes/hyper_utils.rs create mode 100644 crates/rust-mcp-sdk/src/mcp_http.rs rename crates/rust-mcp-sdk/src/{hyper_servers => mcp_http}/app_state.rs (91%) create mode 100644 crates/rust-mcp-sdk/src/mcp_http/mcp_http_handler.rs create mode 100644 crates/rust-mcp-sdk/src/mcp_http/mcp_http_utils.rs rename crates/rust-mcp-sdk/src/{hyper_servers => mcp_http}/session_store.rs (100%) rename crates/rust-mcp-sdk/src/{hyper_servers => mcp_http}/session_store/in_memory.rs (100%) create mode 100644 crates/rust-mcp-transport/src/utils/sse_event.rs diff --git a/Cargo.lock b/Cargo.lock index 0acb30d..51d9cb0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1658,7 +1658,11 @@ dependencies = [ "axum", "axum-server", "base64 0.22.1", + "bytes", "futures", + "http 1.3.1", + "http-body 1.0.1", + "http-body-util", "hyper 1.7.0", "reqwest", "rust-mcp-macros", diff --git a/crates/rust-mcp-sdk/Cargo.toml b/crates/rust-mcp-sdk/Cargo.toml index 8bba7c7..be70e07 100644 --- a/crates/rust-mcp-sdk/Cargo.toml +++ b/crates/rust-mcp-sdk/Cargo.toml @@ -29,9 +29,13 @@ tokio-stream = { workspace = true, optional = true } axum-server = { version = "0.7", features = [], optional = true } tracing.workspace = true base64.workspace = true +bytes.workspace = true # rustls = { workspace = true, optional = true } hyper = { version = "1.6.0", optional = true } +http = { version ="1.3", optional = true } +http-body-util = { version ="0.1", optional = true } +http-body = { version ="1.0", optional = true } [dev-dependencies] wiremock = "0.5" @@ -61,13 +65,13 @@ default = [ "2025_06_18", ] # All features enabled by default -sse = ["rust-mcp-transport/sse"] -streamable-http = ["rust-mcp-transport/streamable-http"] +sse = ["rust-mcp-transport/sse","http","http-body","http-body-util"] +streamable-http = ["rust-mcp-transport/streamable-http","http","http-body","http-body-util"] stdio = ["rust-mcp-transport/stdio"] server = [] # Server feature client = [] # Client feature -hyper-server = ["axum", "axum-server", "hyper", "server", "tokio-stream"] +hyper-server = ["axum", "axum-server", "hyper", "server", "tokio-stream","http","http-body","http-body-util"] ssl = ["axum-server/tls-rustls"] tls-no-provider = ["axum-server/tls-rustls-no-provider"] macros = ["rust-mcp-macros/sdk"] diff --git a/crates/rust-mcp-sdk/src/hyper_servers.rs b/crates/rust-mcp-sdk/src/hyper_servers.rs index f18c428..87307c0 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers.rs @@ -1,12 +1,8 @@ -mod app_state; pub mod error; pub mod hyper_runtime; pub mod hyper_server; pub mod hyper_server_core; -mod middlewares; mod routes; mod server; -mod session_store; pub use server::*; -pub use session_store::*; diff --git a/crates/rust-mcp-sdk/src/hyper_servers/error.rs b/crates/rust-mcp-sdk/src/hyper_servers/error.rs index 74cbcd1..dd55d8f 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/error.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/error.rs @@ -15,6 +15,8 @@ pub enum TransportServerError { StreamIoError(String), #[error("{0}")] AddrParseError(#[from] AddrParseError), + #[error("{0}")] + HttpError(String), #[error("Server start error: {0}")] ServerStartError(String), #[error("Invalid options: {0}")] diff --git a/crates/rust-mcp-sdk/src/hyper_servers/hyper_runtime.rs b/crates/rust-mcp-sdk/src/hyper_servers/hyper_runtime.rs index 85cf791..92eed79 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/hyper_runtime.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/hyper_runtime.rs @@ -1,6 +1,7 @@ use std::{sync::Arc, time::Duration}; use crate::{ + mcp_http::McpAppState, mcp_server::HyperServer, schema::{ schema_utils::{NotificationFromServer, RequestFromServer, ResultFromClient}, @@ -18,7 +19,6 @@ use tokio::{sync::Mutex, task::JoinHandle}; use crate::{ error::SdkResult, - hyper_servers::app_state::AppState, mcp_server::{ error::{TransportServerError, TransportServerResult}, ServerRuntime, @@ -26,7 +26,7 @@ use crate::{ }; pub struct HyperRuntime { - pub(crate) state: Arc, + pub(crate) state: Arc, pub(crate) server_task: JoinHandle>, pub(crate) server_handle: Handle, } diff --git a/crates/rust-mcp-sdk/src/hyper_servers/middlewares.rs b/crates/rust-mcp-sdk/src/hyper_servers/middlewares.rs deleted file mode 100644 index 0222952..0000000 --- a/crates/rust-mcp-sdk/src/hyper_servers/middlewares.rs +++ /dev/null @@ -1,2 +0,0 @@ -pub(crate) mod protect_dns_rebinding; -pub(crate) mod session_id_gen; diff --git a/crates/rust-mcp-sdk/src/hyper_servers/middlewares/protect_dns_rebinding.rs b/crates/rust-mcp-sdk/src/hyper_servers/middlewares/protect_dns_rebinding.rs deleted file mode 100644 index 5674e87..0000000 --- a/crates/rust-mcp-sdk/src/hyper_servers/middlewares/protect_dns_rebinding.rs +++ /dev/null @@ -1,66 +0,0 @@ -use crate::hyper_servers::app_state::AppState; -use crate::schema::schema_utils::SdkError; -use axum::{ - extract::{Request, State}, - middleware::Next, - response::IntoResponse, - Json, -}; -use hyper::{ - header::{HOST, ORIGIN}, - HeaderMap, StatusCode, -}; -use std::sync::Arc; - -// Middleware to protect against DNS rebinding attacks by validating Host and Origin headers. -pub async fn protect_dns_rebinding( - headers: HeaderMap, - State(state): State>, - request: Request, - next: Next, -) -> impl IntoResponse { - if !state.needs_dns_protection() { - // If protection is not needed, pass the request to the next handler - return next.run(request).await.into_response(); - } - - if let Some(allowed_hosts) = state.allowed_hosts.as_ref() { - if !allowed_hosts.is_empty() { - let Some(host) = headers.get(HOST).and_then(|h| h.to_str().ok()) else { - let error = SdkError::bad_request().with_message("Invalid Host header: [unknown] "); - return (StatusCode::FORBIDDEN, Json(error)).into_response(); - }; - - if !allowed_hosts - .iter() - .any(|allowed| allowed.eq_ignore_ascii_case(host)) - { - let error = SdkError::bad_request() - .with_message(format!("Invalid Host header: \"{host}\" ").as_str()); - return (StatusCode::FORBIDDEN, Json(error)).into_response(); - } - } - } - - if let Some(allowed_origins) = state.allowed_origins.as_ref() { - if !allowed_origins.is_empty() { - let Some(origin) = headers.get(ORIGIN).and_then(|h| h.to_str().ok()) else { - let error = - SdkError::bad_request().with_message("Invalid Origin header: [unknown] "); - return (StatusCode::FORBIDDEN, Json(error)).into_response(); - }; - - if !allowed_origins - .iter() - .any(|allowed| allowed.eq_ignore_ascii_case(origin)) - { - let error = SdkError::bad_request() - .with_message(format!("Invalid Origin header: \"{origin}\" ").as_str()); - return (StatusCode::FORBIDDEN, Json(error)).into_response(); - } - } - } - - // If all checks pass, proceed to the next handler in the chain - next.run(request).await -} diff --git a/crates/rust-mcp-sdk/src/hyper_servers/middlewares/session_id_gen.rs b/crates/rust-mcp-sdk/src/hyper_servers/middlewares/session_id_gen.rs deleted file mode 100644 index b68b325..0000000 --- a/crates/rust-mcp-sdk/src/hyper_servers/middlewares/session_id_gen.rs +++ /dev/null @@ -1,23 +0,0 @@ -use std::sync::Arc; - -use axum::{ - extract::{Request, State}, - middleware::Next, - response::Response, -}; -use hyper::StatusCode; -use rust_mcp_transport::SessionId; - -use crate::hyper_servers::app_state::AppState; - -// Middleware to generate and attach a session ID -pub async fn generate_session_id( - State(state): State>, - mut request: Request, - next: Next, -) -> Result { - let session_id: SessionId = state.id_generator.generate(); - request.extensions_mut().insert(session_id); - // Proceed to the next middleware or handler - Ok(next.run(request).await) -} diff --git a/crates/rust-mcp-sdk/src/hyper_servers/routes.rs b/crates/rust-mcp-sdk/src/hyper_servers/routes.rs index b1b15fc..4ae274b 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/routes.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/routes.rs @@ -1,10 +1,12 @@ pub mod fallback_routes; -mod hyper_utils; pub mod messages_routes; +#[cfg(feature = "sse")] pub mod sse_routes; pub mod streamable_http_routes; -use super::{app_state::AppState, HyperServerOptions}; +use crate::mcp_http::McpAppState; + +use super::HyperServerOptions; use axum::Router; use std::sync::Arc; @@ -19,21 +21,23 @@ use std::sync::Arc; /// /// # Returns /// * `Router` - An Axum router configured with all application routes and state -pub fn app_routes(state: Arc, server_options: &HyperServerOptions) -> Router { +pub fn app_routes(state: Arc, server_options: &HyperServerOptions) -> Router { let router: Router = Router::new() .merge(streamable_http_routes::routes( - state.clone(), server_options.streamable_http_endpoint(), )) .merge({ let mut r = Router::new(); + #[cfg(feature = "sse")] if server_options.sse_support { r = r .merge(sse_routes::routes( - state.clone(), server_options.sse_endpoint(), + server_options.sse_messages_endpoint(), + )) + .merge(messages_routes::routes( + server_options.sse_messages_endpoint(), )) - .merge(messages_routes::routes(state.clone())) } r }) diff --git a/crates/rust-mcp-sdk/src/hyper_servers/routes/hyper_utils.rs b/crates/rust-mcp-sdk/src/hyper_servers/routes/hyper_utils.rs deleted file mode 100644 index 7101a73..0000000 --- a/crates/rust-mcp-sdk/src/hyper_servers/routes/hyper_utils.rs +++ /dev/null @@ -1,502 +0,0 @@ -use crate::{ - error::SdkResult, - hyper_servers::{ - app_state::AppState, - error::{TransportServerError, TransportServerResult}, - }, - mcp_runtimes::server_runtime::DEFAULT_STREAM_ID, - mcp_server::{server_runtime, ServerRuntime}, - mcp_traits::{mcp_handler::McpServerHandler, IdGenerator}, - utils::validate_mcp_protocol_version, -}; - -use crate::schema::schema_utils::{ClientMessage, SdkError}; - -use axum::{http::HeaderValue, response::IntoResponse}; -use axum::{ - response::{ - sse::{Event, KeepAlive}, - Sse, - }, - Json, -}; -use futures::stream; -use hyper::{header, HeaderMap, StatusCode}; -use rust_mcp_transport::{ - EventId, McpDispatch, SessionId, SseTransport, StreamId, ID_SEPARATOR, - MCP_PROTOCOL_VERSION_HEADER, MCP_SESSION_ID_HEADER, -}; -use std::{sync::Arc, time::Duration}; -use tokio::io::{duplex, AsyncBufReadExt, BufReader}; - -const DUPLEX_BUFFER_SIZE: usize = 8192; - -async fn create_sse_stream( - runtime: Arc, - session_id: SessionId, - state: Arc, - payload: Option<&str>, - standalone: bool, - last_event_id: Option, -) -> TransportServerResult> { - let payload_string = payload.map(|p| p.to_string()); - - // TODO: this logic should be moved out after refactoing the mcp_stream.rs - let payload_contains_request = payload_string - .as_ref() - .map(|json_str| contains_request(json_str)) - .unwrap_or(Ok(false)); - let Ok(payload_contains_request) = payload_contains_request else { - return Ok((StatusCode::BAD_REQUEST, Json(SdkError::parse_error())).into_response()); - }; - - // readable stream of string to be used in transport - let (read_tx, read_rx) = duplex(DUPLEX_BUFFER_SIZE); - // writable stream to deliver message to the client - let (write_tx, write_rx) = duplex(DUPLEX_BUFFER_SIZE); - - let session_id = Arc::new(session_id); - let stream_id: Arc = if standalone { - Arc::new(DEFAULT_STREAM_ID.to_string()) - } else { - Arc::new(state.stream_id_gen.generate()) - }; - - let event_store = state.event_store.as_ref().map(Arc::clone); - let resumability_enabled = event_store.is_some(); - - let mut transport = SseTransport::::new( - read_rx, - write_tx, - read_tx, - Arc::clone(&state.transport_options), - ) - .map_err(|err| TransportServerError::TransportError(err.to_string()))?; - if let Some(event_store) = event_store.clone() { - transport.make_resumable((*session_id).clone(), (*stream_id).clone(), event_store); - } - let transport = Arc::new(transport); - - let ping_interval = state.ping_interval; - let runtime_clone = Arc::clone(&runtime); - let stream_id_clone = stream_id.clone(); - let transport_clone = transport.clone(); - - //Start the server runtime - tokio::spawn(async move { - match runtime_clone - .start_stream( - transport_clone, - &stream_id_clone, - ping_interval, - payload_string, - ) - .await - { - Ok(_) => tracing::trace!("stream {} exited gracefully.", &stream_id_clone), - Err(err) => tracing::info!("stream {} exited with error : {}", &stream_id_clone, err), - } - let _ = runtime.remove_transport(&stream_id_clone).await; - }); - - // Construct SSE stream - let reader = BufReader::new(write_rx); - - // send outgoing messages from server to the client over the sse stream - let message_stream = stream::unfold(reader, move |mut reader| { - async move { - let mut line = String::new(); - - match reader.read_line(&mut line).await { - Ok(0) => None, // EOF - Ok(_) => { - let trimmed_line = line.trim_end_matches('\n').to_owned(); - - // empty sse comment to keep-alive - if is_empty_sse_message(&trimmed_line) { - return Some((Ok(Event::default()), reader)); - } - - let (event_id, message) = match ( - resumability_enabled, - trimmed_line.split_once(char::from(ID_SEPARATOR)), - ) { - (true, Some((id, msg))) => (Some(id.to_string()), msg.to_string()), - _ => (None, trimmed_line), - }; - - let event = match event_id { - Some(id) => Event::default().data(message).id(id), - None => Event::default().data(message), - }; - - Some((Ok(event), reader)) - } - Err(e) => Some((Err(e), reader)), - } - } - }); - - let sse_stream = - Sse::new(message_stream).keep_alive(KeepAlive::new().interval(Duration::from_secs(10))); - - // Return SSE response with keep-alive - // Create a Response and set headers - let mut response = sse_stream.into_response(); - response.headers_mut().insert( - MCP_SESSION_ID_HEADER, - HeaderValue::from_str(&session_id).unwrap(), - ); - - // if last_event_id exists we replay messages from the event-store - tokio::spawn(async move { - if let Some(last_event_id) = last_event_id { - if let Some(event_store) = state.event_store.as_ref() { - if let Some(events) = event_store.events_after(last_event_id).await { - for message_payload in events.messages { - // skip storing replay messages - let error = transport.write_str(&message_payload, true).await; - if let Err(error) = error { - tracing::trace!("Error replaying message: {error}") - } - } - } - } - } - }); - - if !payload_contains_request { - *response.status_mut() = StatusCode::ACCEPTED; - } - Ok(response) -} - -// TODO: this function will be removed after refactoring the readable stream of the transports -// so we would deserialize the string syncronousely and have more control over the flow -// this function may incur a slight runtime cost which could be avoided after refactoring -fn contains_request(json_str: &str) -> Result { - let value: serde_json::Value = serde_json::from_str(json_str)?; - match value { - serde_json::Value::Object(obj) => Ok(obj.contains_key("id") && obj.contains_key("method")), - serde_json::Value::Array(arr) => Ok(arr.iter().any(|item| { - item.as_object() - .map(|obj| obj.contains_key("id") && obj.contains_key("method")) - .unwrap_or(false) - })), - _ => Ok(false), - } -} - -fn is_result(json_str: &str) -> Result { - let value: serde_json::Value = serde_json::from_str(json_str)?; - match value { - serde_json::Value::Object(obj) => Ok(obj.contains_key("result")), - serde_json::Value::Array(arr) => Ok(arr.iter().all(|item| { - item.as_object() - .map(|obj| obj.contains_key("result")) - .unwrap_or(false) - })), - _ => Ok(false), - } -} - -pub async fn create_standalone_stream( - session_id: SessionId, - last_event_id: Option, - state: Arc, -) -> TransportServerResult> { - let runtime = state.session_store.get(&session_id).await.ok_or( - TransportServerError::SessionIdInvalid(session_id.to_string()), - )?; - let runtime = runtime.lock().await.to_owned(); - - if runtime.stream_id_exists(DEFAULT_STREAM_ID).await { - let error = - SdkError::bad_request().with_message("Only one SSE stream is allowed per session"); - return Ok((StatusCode::CONFLICT, Json(error)).into_response()); - } - - if let Some(last_event_id) = last_event_id.as_ref() { - tracing::trace!( - "SSE stream re-connected with last-event-id: {}", - last_event_id - ); - } - - let mut response = create_sse_stream( - runtime.clone(), - session_id.clone(), - state.clone(), - None, - true, - last_event_id, - ) - .await?; - *response.status_mut() = StatusCode::OK; - Ok(response) -} - -pub async fn start_new_session( - state: Arc, - payload: &str, -) -> TransportServerResult> { - let session_id: SessionId = state.id_generator.generate(); - - let h: Arc = state.handler.clone(); - // create a new server instance with unique session_id and - let runtime: Arc = server_runtime::create_server_instance( - Arc::clone(&state.server_details), - h, - session_id.to_owned(), - ); - - tracing::info!("a new client joined : {}", &session_id); - - let response = create_sse_stream( - runtime.clone(), - session_id.clone(), - state.clone(), - Some(payload), - false, - None, - ) - .await; - - if response.is_ok() { - state - .session_store - .set(session_id.to_owned(), runtime.clone()) - .await; - } - response -} - -async fn single_shot_stream( - runtime: Arc, - session_id: SessionId, - state: Arc, - payload: Option<&str>, - standalone: bool, -) -> TransportServerResult> { - // readable stream of string to be used in transport - let (read_tx, read_rx) = duplex(DUPLEX_BUFFER_SIZE); - // writable stream to deliver message to the client - let (write_tx, write_rx) = duplex(DUPLEX_BUFFER_SIZE); - - let transport = SseTransport::::new( - read_rx, - write_tx, - read_tx, - Arc::clone(&state.transport_options), - ) - .map_err(|err| TransportServerError::TransportError(err.to_string()))?; - - let stream_id = if standalone { - DEFAULT_STREAM_ID.to_string() - } else { - state.id_generator.generate() - }; - let ping_interval = state.ping_interval; - let runtime_clone = Arc::clone(&runtime); - - let payload_string = payload.map(|p| p.to_string()); - - tokio::spawn(async move { - match runtime_clone - .start_stream( - Arc::new(transport), - &stream_id, - ping_interval, - payload_string, - ) - .await - { - Ok(_) => tracing::info!("stream {} exited gracefully.", &stream_id), - Err(err) => tracing::info!("stream {} exited with error : {}", &stream_id, err), - } - let _ = runtime.remove_transport(&stream_id).await; - }); - - let mut reader = BufReader::new(write_rx); - let mut line = String::new(); - let response = match reader.read_line(&mut line).await { - Ok(0) => None, // EOF - Ok(_) => { - let trimmed_line = line.trim_end_matches('\n').to_owned(); - Some(Ok(trimmed_line)) - } - Err(e) => Some(Err(e)), - }; - - let mut headers = HeaderMap::new(); - headers.insert( - header::CONTENT_TYPE, - HeaderValue::from_static("application/json"), - ); - headers.insert( - MCP_SESSION_ID_HEADER, - HeaderValue::from_str(&session_id).unwrap(), - ); - - match response { - Some(response_result) => match response_result { - Ok(response_str) => { - Ok((StatusCode::OK, headers, response_str.to_string()).into_response()) - } - Err(err) => Ok(( - StatusCode::INTERNAL_SERVER_ERROR, - headers, - Json(err.to_string()), - ) - .into_response()), - }, - None => Ok(( - StatusCode::UNPROCESSABLE_ENTITY, - headers, - Json("End of the transport stream reached."), - ) - .into_response()), - } -} - -pub async fn process_incoming_message_return( - session_id: SessionId, - state: Arc, - payload: &str, -) -> TransportServerResult { - match state.session_store.get(&session_id).await { - Some(runtime) => { - let runtime = runtime.lock().await.to_owned(); - - single_shot_stream( - runtime.clone(), - session_id.clone(), - state.clone(), - Some(payload), - false, - ) - .await - // Ok(StatusCode::OK.into_response()) - } - None => { - let error = SdkError::session_not_found(); - Ok((StatusCode::NOT_FOUND, Json(error)).into_response()) - } - } -} - -pub async fn process_incoming_message( - session_id: SessionId, - state: Arc, - payload: &str, -) -> TransportServerResult { - match state.session_store.get(&session_id).await { - Some(runtime) => { - let runtime = runtime.lock().await.to_owned(); - // when receiving a result in a streamable_http server, that means it was sent by the standalone sse transport - // it should be processed by the same transport , therefore no need to call create_sse_stream - let Ok(is_result) = is_result(payload) else { - return Ok((StatusCode::BAD_REQUEST, Json(SdkError::parse_error())).into_response()); - }; - - if is_result { - match runtime - .consume_payload_string(DEFAULT_STREAM_ID, payload) - .await - { - Ok(()) => Ok((StatusCode::ACCEPTED, Json(())).into_response()), - Err(err) => Ok(( - StatusCode::BAD_REQUEST, - Json(SdkError::internal_error().with_message(err.to_string().as_ref())), - ) - .into_response()), - } - } else { - create_sse_stream( - runtime.clone(), - session_id.clone(), - state.clone(), - Some(payload), - false, - None, - ) - .await - } - } - None => { - let error = SdkError::session_not_found(); - Ok((StatusCode::NOT_FOUND, Json(error)).into_response()) - } - } -} - -pub fn is_empty_sse_message(sse_payload: &str) -> bool { - sse_payload.is_empty() || sse_payload.trim() == ":" -} - -pub async fn delete_session( - session_id: SessionId, - state: Arc, -) -> TransportServerResult { - match state.session_store.get(&session_id).await { - Some(runtime) => { - let runtime = runtime.lock().await.to_owned(); - runtime.shutdown().await; - state.session_store.delete(&session_id).await; - tracing::info!("client disconnected : {}", &session_id); - Ok((StatusCode::OK, Json("ok")).into_response()) - } - None => { - let error = SdkError::session_not_found(); - Ok((StatusCode::NOT_FOUND, Json(error)).into_response()) - } - } -} - -pub fn acceptable_content_type(headers: &HeaderMap) -> bool { - let accept_header = headers - .get("content-type") - .and_then(|val| val.to_str().ok()) - .unwrap_or(""); - accept_header - .split(',') - .any(|val| val.trim().starts_with("application/json")) -} - -pub fn validate_mcp_protocol_version_header(headers: &HeaderMap) -> SdkResult<()> { - let protocol_version_header = headers - .get(MCP_PROTOCOL_VERSION_HEADER) - .and_then(|val| val.to_str().ok()) - .unwrap_or(""); - - // requests without protocol version header are acceptable - if protocol_version_header.is_empty() { - return Ok(()); - } - - validate_mcp_protocol_version(protocol_version_header) -} - -pub fn accepts_event_stream(headers: &HeaderMap) -> bool { - let accept_header = headers - .get("accept") - .and_then(|val| val.to_str().ok()) - .unwrap_or(""); - - accept_header - .split(',') - .any(|val| val.trim().starts_with("text/event-stream")) -} - -pub fn valid_streaming_http_accept_header(headers: &HeaderMap) -> bool { - let accept_header = headers - .get("accept") - .and_then(|val| val.to_str().ok()) - .unwrap_or(""); - - let types: Vec<_> = accept_header.split(',').map(|v| v.trim()).collect(); - - let has_event_stream = types.iter().any(|v| v.starts_with("text/event-stream")); - let has_json = types.iter().any(|v| v.starts_with("application/json")); - has_event_stream && has_json -} diff --git a/crates/rust-mcp-sdk/src/hyper_servers/routes/messages_routes.rs b/crates/rust-mcp-sdk/src/hyper_servers/routes/messages_routes.rs index 44b671f..65490a3 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/routes/messages_routes.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/routes/messages_routes.rs @@ -1,54 +1,28 @@ use crate::{ - hyper_servers::{ - app_state::AppState, - error::{TransportServerError, TransportServerResult}, - }, - mcp_runtimes::server_runtime::DEFAULT_STREAM_ID, + hyper_servers::error::TransportServerResult, + mcp_http::{McpAppState, McpHttpHandler}, utils::remove_query_and_hash, }; -use axum::{ - extract::{Query, State}, - response::IntoResponse, - routing::post, - Router, -}; -use std::{collections::HashMap, sync::Arc}; +use axum::{extract::State, response::IntoResponse, routing::post, Router}; +use http::{HeaderMap, Method, Uri}; +use std::sync::Arc; -pub fn routes(state: Arc) -> Router> { +pub fn routes(sse_message_endpoint: &str) -> Router> { Router::new().route( - remove_query_and_hash(&state.sse_message_endpoint).as_str(), + remove_query_and_hash(sse_message_endpoint).as_str(), post(handle_messages), ) } pub async fn handle_messages( - State(state): State>, - Query(params): Query>, + uri: Uri, + headers: HeaderMap, + State(state): State>, message: String, ) -> TransportServerResult { - let session_id = params - .get("sessionId") - .ok_or(TransportServerError::SessionIdMissing)?; - - // transmit to the readable stream, that transport is reading from - let transmit = - state - .session_store - .get(session_id) - .await - .ok_or(TransportServerError::SessionIdInvalid( - session_id.to_string(), - ))?; - - let transmit = transmit.lock().await; - - transmit - .consume_payload_string(DEFAULT_STREAM_ID, &message) - .await - .map_err(|err| { - tracing::trace!("{}", err); - TransportServerError::StreamIoError(err.to_string()) - })?; - - Ok(axum::http::StatusCode::ACCEPTED) + let request = McpHttpHandler::create_request(Method::POST, uri, headers, Some(&message)); + let generic_response = McpHttpHandler::handle_sse_message(request, state.clone()).await?; + let (parts, body) = generic_response.into_parts(); + let resp = axum::response::Response::from_parts(parts, axum::body::Body::new(body)); + Ok(resp) } diff --git a/crates/rust-mcp-sdk/src/hyper_servers/routes/sse_routes.rs b/crates/rust-mcp-sdk/src/hyper_servers/routes/sse_routes.rs index 27a16b2..e13c724 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/routes/sse_routes.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/routes/sse_routes.rs @@ -1,47 +1,10 @@ -use crate::mcp_server::error::TransportServerError; -use crate::schema::schema_utils::ClientMessage; -use crate::{ - hyper_servers::{ - app_state::AppState, - error::TransportServerResult, - middlewares::{ - protect_dns_rebinding::protect_dns_rebinding, session_id_gen::generate_session_id, - }, - }, - mcp_runtimes::server_runtime::DEFAULT_STREAM_ID, - mcp_server::{server_runtime, ServerRuntime}, - mcp_traits::mcp_handler::McpServerHandler, -}; -use axum::{ - extract::State, - middleware, - response::{ - sse::{Event, KeepAlive}, - IntoResponse, Sse, - }, - routing::get, - Extension, Router, -}; -use futures::stream::{self}; -use rust_mcp_transport::{SessionId, SseTransport}; -use std::{convert::Infallible, sync::Arc, time::Duration}; -use tokio::io::{duplex, AsyncBufReadExt, BufReader}; -use tokio_stream::StreamExt; +use crate::hyper_servers::error::TransportServerResult; +use crate::mcp_http::{McpAppState, McpHttpHandler}; +use axum::{extract::State, response::IntoResponse, routing::get, Extension, Router}; +use std::sync::Arc; -const DUPLEX_BUFFER_SIZE: usize = 8192; - -/// Creates an initial SSE event that returns the messages endpoint -/// -/// Constructs an SSE event containing the messages endpoint URL with the session ID. -/// -/// # Arguments -/// * `session_id` - The session identifier for the client -/// -/// # Returns -/// * `Result` - The constructed SSE event, infallible -fn initial_event(endpoint: &str) -> Result { - Ok(Event::default().event("endpoint").data(endpoint)) -} +#[derive(Clone)] +pub struct SseMessageEndpoint(pub String); /// Configures the SSE routes for the application /// @@ -52,18 +15,13 @@ fn initial_event(endpoint: &str) -> Result { /// * `sse_endpoint` - The path for the SSE endpoint /// /// # Returns -/// * `Router>` - An Axum router configured with the SSE route -pub fn routes(state: Arc, sse_endpoint: &str) -> Router> { - Router::new() - .route(sse_endpoint, get(handle_sse)) - .route_layer(middleware::from_fn_with_state( - state.clone(), - generate_session_id, - )) - .route_layer(middleware::from_fn_with_state( - state.clone(), - protect_dns_rebinding, - )) +/// * `Router>` - An Axum router configured with the SSE route +pub fn routes(sse_endpoint: &str, sse_message_endpoint: &str) -> Router> { + let sse_message_endpoint = SseMessageEndpoint(sse_message_endpoint.to_string()); + Router::new().route( + sse_endpoint, + get(handle_sse).layer(Extension(sse_message_endpoint)), + ) } /// Handles Server-Sent Events (SSE) connections @@ -77,91 +35,13 @@ pub fn routes(state: Arc, sse_endpoint: &str) -> Router> /// # Returns /// * `TransportServerResult` - The SSE response stream or an error pub async fn handle_sse( - Extension(session_id): Extension, - State(state): State>, + Extension(sse_message_endpoint): Extension, + State(state): State>, ) -> TransportServerResult { - let messages_endpoint = - SseTransport::::message_endpoint(&state.sse_message_endpoint, &session_id); - - // readable stream of string to be used in transport - // writing string to read_tx will be received as messages inside the transport and messages will be processed - let (read_tx, read_rx) = duplex(DUPLEX_BUFFER_SIZE); - - // writable stream to deliver message to the client - let (write_tx, write_rx) = duplex(DUPLEX_BUFFER_SIZE); - - // create a transport for sending/receiving messages - let Ok(transport) = SseTransport::new( - read_rx, - write_tx, - read_tx, - Arc::clone(&state.transport_options), - ) else { - return Err(TransportServerError::TransportError( - "Failed to create SSE transport".to_string(), - )); - }; - - let h: Arc = state.handler.clone(); - // create a new server instance with unique session_id and - let server: Arc = server_runtime::create_server_instance( - Arc::clone(&state.server_details), - h, - session_id.to_owned(), - ); - - state - .session_store - .set(session_id.to_owned(), server.clone()) - .await; - - tracing::info!("A new client joined : {}", session_id.to_owned()); - - // Start the server - tokio::spawn(async move { - match server - .start_stream( - Arc::new(transport), - DEFAULT_STREAM_ID, - state.ping_interval, - None, - ) - .await - { - Ok(_) => tracing::info!("server {} exited gracefully.", session_id.to_owned()), - Err(err) => tracing::info!( - "server {} exited with error : {}", - session_id.to_owned(), - err - ), - }; - - state.session_store.delete(&session_id).await; - }); - - // Initial SSE message to inform the client about the server's endpoint - let initial_event = stream::once(async move { initial_event(&messages_endpoint) }); - - // Construct SSE stream - let reader = BufReader::new(write_rx); - - let message_stream = stream::unfold(reader, |mut reader| async move { - let mut line = String::new(); - - match reader.read_line(&mut line).await { - Ok(0) => None, // EOF - Ok(_) => { - let trimmed_line = line.trim_end_matches('\n').to_owned(); - Some((Ok(Event::default().data(trimmed_line)), reader)) - } - Err(_) => None, // Err(e) => Some((Err(e), reader)), - } - }); - - let stream = initial_event.chain(message_stream); - let sse_stream = - Sse::new(stream).keep_alive(KeepAlive::new().interval(Duration::from_secs(10))); - - // Return SSE response with keep-alive - Ok(sse_stream) + let SseMessageEndpoint(sse_message_endpoint) = sse_message_endpoint; + let generic_response = + McpHttpHandler::handle_sse_connection(state.clone(), Some(&sse_message_endpoint)).await?; + let (parts, body) = generic_response.into_parts(); + let resp = axum::response::Response::from_parts(parts, axum::body::Body::new(body)); + Ok(resp) } diff --git a/crates/rust-mcp-sdk/src/hyper_servers/routes/streamable_http_routes.rs b/crates/rust-mcp-sdk/src/hyper_servers/routes/streamable_http_routes.rs index 67f8679..6f2e470 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/routes/streamable_http_routes.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/routes/streamable_http_routes.rs @@ -1,32 +1,16 @@ -use super::hyper_utils::start_new_session; -use crate::schema::schema_utils::SdkError; -use crate::{ - error::McpSdkError, - hyper_servers::{ - app_state::AppState, - error::TransportServerResult, - middlewares::protect_dns_rebinding::protect_dns_rebinding, - routes::hyper_utils::{ - acceptable_content_type, accepts_event_stream, create_standalone_stream, - delete_session, process_incoming_message, process_incoming_message_return, - valid_streaming_http_accept_header, validate_mcp_protocol_version_header, - }, - }, - utils::valid_initialize_method, -}; +use crate::hyper_servers::error::TransportServerResult; +use crate::mcp_http::{McpAppState, McpHttpHandler}; use axum::routing::get; use axum::{ extract::{Query, State}, - middleware, response::IntoResponse, routing::{delete, post}, - Json, Router, + Router, }; -use hyper::{HeaderMap, StatusCode}; -use rust_mcp_transport::{SessionId, MCP_LAST_EVENT_ID_HEADER, MCP_SESSION_ID_HEADER}; +use http::{HeaderMap, Method, Uri}; use std::{collections::HashMap, sync::Arc}; -pub fn routes(state: Arc, streamable_http_endpoint: &str) -> Router> { +pub fn routes(streamable_http_endpoint: &str) -> Router> { Router::new() .route(streamable_http_endpoint, get(handle_streamable_http_get)) .route(streamable_http_endpoint, post(handle_streamable_http_post)) @@ -34,129 +18,43 @@ pub fn routes(state: Arc, streamable_http_endpoint: &str) -> Router>, + uri: Uri, + State(state): State>, ) -> TransportServerResult { - if !accepts_event_stream(&headers) { - let error = SdkError::bad_request().with_message(r#"Client must accept text/event-stream"#); - return Ok((StatusCode::NOT_ACCEPTABLE, Json(error)).into_response()); - } - - if let Err(parse_error) = validate_mcp_protocol_version_header(&headers) { - let error = - SdkError::bad_request().with_message(format!(r#"Bad Request: {parse_error}"#).as_str()); - return Ok((StatusCode::BAD_REQUEST, Json(error)).into_response()); - } - - let session_id: Option = headers - .get(MCP_SESSION_ID_HEADER) - .and_then(|value| value.to_str().ok()) - .map(|s| s.to_string()); - - let last_event_id: Option = headers - .get(MCP_LAST_EVENT_ID_HEADER) - .and_then(|value| value.to_str().ok()) - .map(|s| s.to_string()); - - match session_id { - Some(session_id) => { - let res = create_standalone_stream(session_id, last_event_id, state).await?; - Ok(res.into_response()) - } - None => { - let error = SdkError::bad_request().with_message("Bad request: session not found"); - Ok((StatusCode::BAD_REQUEST, Json(error)).into_response()) - } - } + let request = McpHttpHandler::create_request(Method::GET, uri, headers, None); + let generic_res = McpHttpHandler::handle_streamable_http(request, state).await?; + let (parts, body) = generic_res.into_parts(); + let resp = axum::response::Response::from_parts(parts, axum::body::Body::new(body)); + Ok(resp) } pub async fn handle_streamable_http_post( headers: HeaderMap, - State(state): State>, + uri: Uri, + State(state): State>, Query(_params): Query>, payload: String, ) -> TransportServerResult { - if !valid_streaming_http_accept_header(&headers) { - let error = SdkError::bad_request() - .with_message(r#"Client must accept both application/json and text/event-stream"#); - return Ok((StatusCode::NOT_ACCEPTABLE, Json(error)).into_response()); - } - - if !acceptable_content_type(&headers) { - let error = SdkError::bad_request() - .with_message(r#"Unsupported Media Type: Content-Type must be application/json"#); - return Ok((StatusCode::UNSUPPORTED_MEDIA_TYPE, Json(error)).into_response()); - } - - if let Err(parse_error) = validate_mcp_protocol_version_header(&headers) { - let error = - SdkError::bad_request().with_message(format!(r#"Bad Request: {parse_error}"#).as_str()); - return Ok((StatusCode::BAD_REQUEST, Json(error)).into_response()); - } - - let session_id: Option = headers - .get(MCP_SESSION_ID_HEADER) - .and_then(|value| value.to_str().ok()) - .map(|s| s.to_string()); - - //TODO: validate reconnect after disconnect - - match session_id { - // has session-id => write to the existing stream - Some(id) => { - if state.enable_json_response { - let res = process_incoming_message_return(id, state, &payload).await?; - Ok(res.into_response()) - } else { - let res = process_incoming_message(id, state, &payload).await?; - Ok(res.into_response()) - } - } - None => match valid_initialize_method(&payload) { - Ok(_) => { - return start_new_session(state, &payload).await; - } - Err(McpSdkError::SdkError(error)) => { - Ok((StatusCode::BAD_REQUEST, Json(error)).into_response()) - } - Err(error) => { - let error = SdkError::bad_request().with_message(&error.to_string()); - Ok((StatusCode::BAD_REQUEST, Json(error)).into_response()) - } - }, - } + let request = + McpHttpHandler::create_request(Method::POST, uri, headers, Some(payload.as_str())); + let generic_res = McpHttpHandler::handle_streamable_http(request, state).await?; + let (parts, body) = generic_res.into_parts(); + let resp = axum::response::Response::from_parts(parts, axum::body::Body::new(body)); + Ok(resp) } pub async fn handle_streamable_http_delete( headers: HeaderMap, - State(state): State>, + uri: Uri, + State(state): State>, ) -> TransportServerResult { - if let Err(parse_error) = validate_mcp_protocol_version_header(&headers) { - let error = - SdkError::bad_request().with_message(format!(r#"Bad Request: {parse_error}"#).as_str()); - return Ok((StatusCode::BAD_REQUEST, Json(error)).into_response()); - } - - let session_id: Option = headers - .get(MCP_SESSION_ID_HEADER) - .and_then(|value| value.to_str().ok()) - .map(|s| s.to_string()); - - match session_id { - Some(id) => { - let res = delete_session(id, state).await; - Ok(res.into_response()) - } - None => { - let error = SdkError::bad_request().with_message("Bad Request: Session not found"); - Ok((StatusCode::BAD_REQUEST, Json(error)).into_response()) - } - } + let request = McpHttpHandler::create_request(Method::DELETE, uri, headers, None); + let generic_res = McpHttpHandler::handle_streamable_http(request, state).await?; + let (parts, body) = generic_res.into_parts(); + let resp = axum::response::Response::from_parts(parts, axum::body::Body::new(body)); + Ok(resp) } diff --git a/crates/rust-mcp-sdk/src/hyper_servers/server.rs b/crates/rust-mcp-sdk/src/hyper_servers/server.rs index 71bccee..881d4b3 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/server.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/server.rs @@ -1,6 +1,12 @@ use crate::{ error::SdkResult, id_generator::{FastIdGenerator, UuidGenerator}, + mcp_http::{ + utils::{ + DEFAULT_MESSAGES_ENDPOINT, DEFAULT_SSE_ENDPOINT, DEFAULT_STREAMABLE_HTTP_ENDPOINT, + }, + InMemorySessionStore, McpAppState, + }, mcp_server::hyper_runtime::HyperRuntime, mcp_traits::{mcp_handler::McpServerHandler, IdGenerator}, }; @@ -16,10 +22,8 @@ use std::{ use tokio::signal; use super::{ - app_state::AppState, error::{TransportServerError, TransportServerResult}, routes::app_routes, - InMemorySessionStore, }; use crate::schema::InitializeResult; use axum::Router; @@ -28,12 +32,6 @@ use rust_mcp_transport::{event_store::EventStore, SessionId, TransportOptions}; // Default client ping interval (12 seconds) const DEFAULT_CLIENT_PING_INTERVAL: Duration = Duration::from_secs(12); const GRACEFUL_SHUTDOWN_TMEOUT_SECS: u64 = 5; -// Default Server-Sent Events (SSE) endpoint path -const DEFAULT_SSE_ENDPOINT: &str = "/sse"; -// Default MCP Messages endpoint path -const DEFAULT_MESSAGES_ENDPOINT: &str = "/messages"; -// Default Streamable HTTP endpoint path -const DEFAULT_STREAMABLE_HTTP_ENDPOINT: &str = "/mcp"; /// Configuration struct for the Hyper server /// Used to configure the HyperServer instance. @@ -237,7 +235,7 @@ impl Default for HyperServerOptions { /// Hyper server struct for managing the Axum-based web server pub struct HyperServer { app: Router, - state: Arc, + state: Arc, pub(crate) options: HyperServerOptions, handle: Handle, } @@ -259,7 +257,7 @@ impl HyperServer { handler: Arc, mut server_options: HyperServerOptions, ) -> Self { - let state: Arc = Arc::new(AppState { + let state: Arc = Arc::new(McpAppState { session_store: Arc::new(InMemorySessionStore::new()), id_generator: server_options .session_id_generator @@ -269,8 +267,6 @@ impl HyperServer { server_details: Arc::new(server_details), handler, ping_interval: server_options.ping_interval, - sse_message_endpoint: server_options.sse_messages_endpoint().to_owned(), - http_streamable_endpoint: server_options.streamable_http_endpoint().to_owned(), transport_options: Arc::clone(&server_options.transport_options), enable_json_response: server_options.enable_json_response.unwrap_or(false), allowed_hosts: server_options.allowed_hosts.take(), @@ -290,8 +286,8 @@ impl HyperServer { /// Returns a shared reference to the application state /// /// # Returns - /// * `Arc` - Shared application state - pub fn state(&self) -> Arc { + /// * `Arc` - Shared application state + pub fn state(&self) -> Arc { Arc::clone(&self.state) } @@ -451,7 +447,7 @@ impl HyperServer { } // Shutdown signal handler -async fn shutdown_signal(handle: Handle, state: Arc) { +async fn shutdown_signal(handle: Handle, state: Arc) { // Wait for a Ctrl+C or SIGTERM signal let ctrl_c = async { signal::ctrl_c() diff --git a/crates/rust-mcp-sdk/src/lib.rs b/crates/rust-mcp-sdk/src/lib.rs index a33f889..2f88673 100644 --- a/crates/rust-mcp-sdk/src/lib.rs +++ b/crates/rust-mcp-sdk/src/lib.rs @@ -2,6 +2,8 @@ pub mod error; #[cfg(feature = "hyper-server")] mod hyper_servers; mod mcp_handlers; +#[cfg(feature = "hyper-server")] +pub(crate) mod mcp_http; mod mcp_macros; mod mcp_runtimes; mod mcp_traits; diff --git a/crates/rust-mcp-sdk/src/mcp_http.rs b/crates/rust-mcp-sdk/src/mcp_http.rs new file mode 100644 index 0000000..59cfedc --- /dev/null +++ b/crates/rust-mcp-sdk/src/mcp_http.rs @@ -0,0 +1,12 @@ +mod app_state; +mod mcp_http_handler; +pub(crate) mod mcp_http_utils; +mod session_store; + +pub(crate) use app_state::*; +pub use mcp_http_handler::*; +pub use session_store::*; + +pub(crate) mod utils { + pub use super::mcp_http_utils::*; +} diff --git a/crates/rust-mcp-sdk/src/hyper_servers/app_state.rs b/crates/rust-mcp-sdk/src/mcp_http/app_state.rs similarity index 91% rename from crates/rust-mcp-sdk/src/hyper_servers/app_state.rs rename to crates/rust-mcp-sdk/src/mcp_http/app_state.rs index f96b261..95ae297 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/app_state.rs +++ b/crates/rust-mcp-sdk/src/mcp_http/app_state.rs @@ -8,20 +8,18 @@ use rust_mcp_transport::event_store::EventStore; use rust_mcp_transport::{SessionId, TransportOptions}; -/// Application state struct for the Hyper server +/// Application state struct for the Hyper ser /// /// Holds shared, thread-safe references to session storage, ID generator, /// server details, handler, ping interval, and transport options. #[derive(Clone)] -pub struct AppState { +pub struct McpAppState { pub session_store: Arc, pub id_generator: Arc>, pub stream_id_gen: Arc, pub server_details: Arc, pub handler: Arc, pub ping_interval: Duration, - pub sse_message_endpoint: String, - pub http_streamable_endpoint: String, pub transport_options: Arc, pub enable_json_response: bool, /// List of allowed host header values for DNS rebinding protection. @@ -38,7 +36,7 @@ pub struct AppState { pub event_store: Option>, } -impl AppState { +impl McpAppState { pub fn needs_dns_protection(&self) -> bool { self.dns_rebinding_protection && (self.allowed_hosts.is_some() || self.allowed_origins.is_some()) diff --git a/crates/rust-mcp-sdk/src/mcp_http/mcp_http_handler.rs b/crates/rust-mcp-sdk/src/mcp_http/mcp_http_handler.rs new file mode 100644 index 0000000..fb830ae --- /dev/null +++ b/crates/rust-mcp-sdk/src/mcp_http/mcp_http_handler.rs @@ -0,0 +1,306 @@ +#[cfg(feature = "sse")] +use super::utils::handle_sse_connection; +use crate::mcp_http::utils::{ + accepts_event_stream, error_response, query_param, validate_mcp_protocol_version_header, +}; +use crate::mcp_runtimes::server_runtime::DEFAULT_STREAM_ID; +use crate::mcp_server::error::TransportServerError; +use crate::schema::schema_utils::SdkError; +use crate::{ + error::McpSdkError, + mcp_http::{ + utils::{ + acceptable_content_type, create_standalone_stream, delete_session, + process_incoming_message, process_incoming_message_return, protect_dns_rebinding, + start_new_session, valid_streaming_http_accept_header, GenericBody, + }, + McpAppState, + }, + mcp_server::error::TransportServerResult, + utils::valid_initialize_method, +}; +use bytes::Bytes; +use http::{self, HeaderMap, Method, StatusCode, Uri}; +use http_body_util::{BodyExt, Full}; +use rust_mcp_transport::{SessionId, MCP_LAST_EVENT_ID_HEADER, MCP_SESSION_ID_HEADER}; +use std::sync::Arc; + +pub struct McpHttpHandler {} + +impl McpHttpHandler { + /// Creates a new HTTP request with the given method, URI, headers, and optional body. + /// + /// # Arguments + /// + /// * `method` - The HTTP method to use (e.g., GET, POST). + /// * `uri` - The target URI for the request. + /// * `headers` - A map of optional header keys and their corresponding values. + /// * `body` - An optional string slice representing the request body. + /// + /// # Returns + /// + /// An `http::Request<&str>` initialized with the specified method, URI, headers, and body. + /// If the `body` is `None`, an empty string is used as the default. + /// + pub fn create_request( + method: Method, + uri: Uri, + headers: HeaderMap, + body: Option<&str>, + ) -> http::Request<&str> { + let mut request = http::Request::default(); + *request.method_mut() = method; + *request.uri_mut() = uri; + *request.body_mut() = body.unwrap_or_default(); + let req_headers = request.headers_mut(); + for (key, value) in headers { + if let Some(k) = key { + req_headers.insert(k, value); + } + } + request + } +} + +impl McpHttpHandler { + /// Handles an MCP connection using the SSE (Server-Sent Events) transport. + /// + /// This function serves as the entry point for initializing and managing a client connection + /// over SSE when the `sse` feature is enabled. + /// + /// # Arguments + /// * `state` - Shared application state required to manage the MCP session. + /// * `sse_message_endpoint` - Optional message endpoint to override the default SSE route (default: `/messages` ). + /// + /// + /// # Features + /// This function is only available when the `sse` feature is enabled. + #[cfg(feature = "sse")] + pub async fn handle_sse_connection( + state: Arc, + sse_message_endpoint: Option<&str>, + ) -> TransportServerResult> { + handle_sse_connection(state, sse_message_endpoint).await + } + + /// Handles incoming MCP messages from the client after an SSE connection is established. + /// + /// This function processes a message sent by the client as part of an active SSE session. It: + /// - Extracts the `sessionId` from the request query parameters. + /// - Locates the corresponding session's transmit channel. + /// - Forwards the incoming message payload to the MCP transport stream for consumption. + /// # Arguments + /// * `request` - The HTTP request containing the message body and query parameters (including `sessionId`). + /// * `state` - Shared application state, including access to the session store. + /// + /// # Returns + /// * `TransportServerResult>`: + /// - Returns a `202 Accepted` HTTP response if the message is successfully forwarded. + /// - Returns an error if the session ID is missing, invalid, or if any I/O issues occur while processing the message. + /// + /// # Errors + /// - `SessionIdMissing`: if the `sessionId` query parameter is not present. + /// - `SessionIdInvalid`: if the session ID does not map to a valid session in the session store. + /// - `StreamIoError`: if an error occurs while writing to the stream. + /// - `HttpError`: if constructing the HTTP response fails. + pub async fn handle_sse_message( + request: http::Request<&str>, + state: Arc, + ) -> TransportServerResult> { + let session_id = + query_param(&request, "sessionId").ok_or(TransportServerError::SessionIdMissing)?; + + // transmit to the readable stream, that transport is reading from + let transmit = state.session_store.get(&session_id).await.ok_or( + TransportServerError::SessionIdInvalid(session_id.to_string()), + )?; + + let transmit = transmit.lock().await; + let message = *request.body(); + transmit + .consume_payload_string(DEFAULT_STREAM_ID, message) + .await + .map_err(|err| { + tracing::trace!("{}", err); + TransportServerError::StreamIoError(err.to_string()) + })?; + + let body = Full::new(Bytes::new()) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + + http::Response::builder() + .status(StatusCode::ACCEPTED) + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } + + /// Handles incoming MCP messages over the StreamableHTTP transport. + /// + /// It supports `GET`, `POST`, and `DELETE` methods for handling streaming operations, and performs optional + /// DNS rebinding protection if it is configured. + /// + /// # Arguments + /// * `request` - The HTTP request from the client, including method, headers, and optional body. + /// * `state` - Shared application state, including configuration and session management. + /// + /// # Behavior + /// - If DNS rebinding protection is enabled via the app state, the function checks the request headers. + /// If dns protection fails, a `403 Forbidden` response is returned. + /// - Dispatches the request to method-specific handlers based on the HTTP method: + /// - `GET` → `handle_http_get` + /// - `POST` → `handle_http_post` + /// - `DELETE` → `handle_http_delete` + /// - Returns `405 Method Not Allowed` for unsupported methods. + /// + /// # Returns + /// * A `TransportServerResult` wrapping an HTTP response indicating success or failure of the operation. + /// + pub async fn handle_streamable_http( + request: http::Request<&str>, + state: Arc, + ) -> TransportServerResult> { + // Enforces DNS rebinding protection if required by state. + // If protection fails, respond with HTTP 403 Forbidden. + if state.needs_dns_protection() { + if let Err(error) = protect_dns_rebinding(request.headers(), state.clone()).await { + return error_response(StatusCode::FORBIDDEN, error); + } + } + + let method = request.method(); + match method { + &http::Method::GET => return Self::handle_http_get(request, state).await, + &http::Method::POST => return Self::handle_http_post(request, state).await, + &http::Method::DELETE => return Self::handle_http_delete(request, state).await, + other => { + let error = SdkError::bad_request().with_message(&format!( + "'{other}' is not a valid HTTP method for StreamableHTTP transport." + )); + error_response(StatusCode::METHOD_NOT_ALLOWED, error) + } + } + } + + /// Processes POST requests for the Streamable HTTP Protocol + async fn handle_http_post( + request: http::Request<&str>, + state: Arc, + ) -> TransportServerResult> { + let headers = request.headers(); + + if !valid_streaming_http_accept_header(headers) { + let error = SdkError::bad_request() + .with_message(r#"Client must accept both application/json and text/event-stream"#); + return error_response(StatusCode::NOT_ACCEPTABLE, error); + } + + if !acceptable_content_type(headers) { + let error = SdkError::bad_request() + .with_message(r#"Unsupported Media Type: Content-Type must be application/json"#); + return error_response(StatusCode::UNSUPPORTED_MEDIA_TYPE, error); + } + + if let Err(parse_error) = validate_mcp_protocol_version_header(headers) { + let error = SdkError::bad_request() + .with_message(format!(r#"Bad Request: {parse_error}"#).as_str()); + return error_response(StatusCode::BAD_REQUEST, error); + } + + let session_id: Option = headers + .get(MCP_SESSION_ID_HEADER) + .and_then(|value| value.to_str().ok()) + .map(|s| s.to_string()); + + let payload = *request.body(); + + match session_id { + // has session-id => write to the existing stream + Some(id) => { + if state.enable_json_response { + process_incoming_message_return(id, state, payload).await + } else { + process_incoming_message(id, state, payload).await + } + } + None => match valid_initialize_method(payload) { + Ok(_) => { + return start_new_session(state, payload).await; + } + Err(McpSdkError::SdkError(error)) => error_response(StatusCode::BAD_REQUEST, error), + Err(error) => { + let error = SdkError::bad_request().with_message(&error.to_string()); + error_response(StatusCode::BAD_REQUEST, error) + } + }, + } + } + + /// Processes GET requests for the Streamable HTTP Protocol + async fn handle_http_get( + request: http::Request<&str>, + state: Arc, + ) -> TransportServerResult> { + let headers = request.headers(); + + if !accepts_event_stream(headers) { + let error = + SdkError::bad_request().with_message(r#"Client must accept text/event-stream"#); + return error_response(StatusCode::NOT_ACCEPTABLE, error); + } + + if let Err(parse_error) = validate_mcp_protocol_version_header(headers) { + let error = SdkError::bad_request() + .with_message(format!(r#"Bad Request: {parse_error}"#).as_str()); + return error_response(StatusCode::BAD_REQUEST, error); + } + + let session_id: Option = headers + .get(MCP_SESSION_ID_HEADER) + .and_then(|value| value.to_str().ok()) + .map(|s| s.to_string()); + + let last_event_id: Option = headers + .get(MCP_LAST_EVENT_ID_HEADER) + .and_then(|value| value.to_str().ok()) + .map(|s| s.to_string()); + + match session_id { + Some(session_id) => { + let res = create_standalone_stream(session_id, last_event_id, state).await; + res + } + None => { + let error = SdkError::bad_request().with_message("Bad request: session not found"); + error_response(StatusCode::BAD_REQUEST, error) + } + } + } + + /// Processes DELETE requests for the Streamable HTTP Protocol + async fn handle_http_delete( + request: http::Request<&str>, + state: Arc, + ) -> TransportServerResult> { + let headers = request.headers(); + + if let Err(parse_error) = validate_mcp_protocol_version_header(headers) { + let error = SdkError::bad_request() + .with_message(format!(r#"Bad Request: {parse_error}"#).as_str()); + return error_response(StatusCode::BAD_REQUEST, error); + } + + let session_id: Option = headers + .get(MCP_SESSION_ID_HEADER) + .and_then(|value| value.to_str().ok()) + .map(|s| s.to_string()); + + match session_id { + Some(id) => delete_session(id, state).await, + None => { + let error = SdkError::bad_request().with_message("Bad Request: Session not found"); + error_response(StatusCode::BAD_REQUEST, error) + } + } + } +} diff --git a/crates/rust-mcp-sdk/src/mcp_http/mcp_http_utils.rs b/crates/rust-mcp-sdk/src/mcp_http/mcp_http_utils.rs new file mode 100644 index 0000000..06443e9 --- /dev/null +++ b/crates/rust-mcp-sdk/src/mcp_http/mcp_http_utils.rs @@ -0,0 +1,759 @@ +use crate::schema::schema_utils::{ClientMessage, SdkError}; +use crate::{ + error::SdkResult, + hyper_servers::error::{TransportServerError, TransportServerResult}, + mcp_http::McpAppState, + mcp_runtimes::server_runtime::DEFAULT_STREAM_ID, + mcp_server::{server_runtime, ServerRuntime}, + mcp_traits::{mcp_handler::McpServerHandler, IdGenerator}, + utils::validate_mcp_protocol_version, +}; +use axum::http::HeaderValue; +use bytes::Bytes; +use futures::stream; +use http::header::{ACCEPT, CONNECTION, CONTENT_TYPE, HOST, ORIGIN}; +use http_body::Frame; +use http_body_util::StreamBody; +use http_body_util::{combinators::BoxBody, BodyExt, Full}; +use hyper::{HeaderMap, StatusCode}; +use rust_mcp_transport::{ + EventId, McpDispatch, SessionId, SseEvent, SseTransport, StreamId, ID_SEPARATOR, + MCP_PROTOCOL_VERSION_HEADER, MCP_SESSION_ID_HEADER, +}; +use std::sync::Arc; +use tokio::io::{duplex, AsyncBufReadExt, BufReader}; +use tokio_stream::StreamExt; + +// Default Server-Sent Events (SSE) endpoint path +pub(crate) const DEFAULT_SSE_ENDPOINT: &str = "/sse"; +// Default MCP Messages endpoint path +pub(crate) const DEFAULT_MESSAGES_ENDPOINT: &str = "/messages"; +// Default Streamable HTTP endpoint path +pub(crate) const DEFAULT_STREAMABLE_HTTP_ENDPOINT: &str = "/mcp"; +const DUPLEX_BUFFER_SIZE: usize = 8192; + +pub type GenericBody = BoxBody; + +/// Creates an initial SSE event that returns the messages endpoint +/// +/// Constructs an SSE event containing the messages endpoint URL with the session ID. +/// +/// # Arguments +/// * `session_id` - The session identifier for the client +/// +/// # Returns +/// * `Result` - The constructed SSE event, infallible +fn initial_sse_event(endpoint: &str) -> Result { + Ok(SseEvent::default() + .with_event("endpoint") + .with_data(endpoint.to_string()) + .as_bytes()) +} + +async fn create_sse_stream( + runtime: Arc, + session_id: SessionId, + state: Arc, + payload: Option<&str>, + standalone: bool, + last_event_id: Option, +) -> TransportServerResult> { + let payload_string = payload.map(|p| p.to_string()); + + // TODO: this logic should be moved out after refactoing the mcp_stream.rs + let payload_contains_request = payload_string + .as_ref() + .map(|json_str| contains_request(json_str)) + .unwrap_or(Ok(false)); + let Ok(payload_contains_request) = payload_contains_request else { + return error_response(StatusCode::BAD_REQUEST, SdkError::parse_error()); + }; + + // readable stream of string to be used in transport + let (read_tx, read_rx) = duplex(DUPLEX_BUFFER_SIZE); + // writable stream to deliver message to the client + let (write_tx, write_rx) = duplex(DUPLEX_BUFFER_SIZE); + + let session_id = Arc::new(session_id); + let stream_id: Arc = if standalone { + Arc::new(DEFAULT_STREAM_ID.to_string()) + } else { + Arc::new(state.stream_id_gen.generate()) + }; + + let event_store = state.event_store.as_ref().map(Arc::clone); + let resumability_enabled = event_store.is_some(); + + let mut transport = SseTransport::::new( + read_rx, + write_tx, + read_tx, + Arc::clone(&state.transport_options), + ) + .map_err(|err| TransportServerError::TransportError(err.to_string()))?; + if let Some(event_store) = event_store.clone() { + transport.make_resumable((*session_id).clone(), (*stream_id).clone(), event_store); + } + let transport = Arc::new(transport); + + let ping_interval = state.ping_interval; + let runtime_clone = Arc::clone(&runtime); + let stream_id_clone = stream_id.clone(); + let transport_clone = transport.clone(); + + //Start the server runtime + tokio::spawn(async move { + match runtime_clone + .start_stream( + transport_clone, + &stream_id_clone, + ping_interval, + payload_string, + ) + .await + { + Ok(_) => tracing::trace!("stream {} exited gracefully.", &stream_id_clone), + Err(err) => tracing::info!("stream {} exited with error : {}", &stream_id_clone, err), + } + let _ = runtime.remove_transport(&stream_id_clone).await; + }); + + // Construct SSE stream + let reader = BufReader::new(write_rx); + + // send outgoing messages from server to the client over the sse stream + let message_stream = stream::unfold(reader, move |mut reader| { + async move { + let mut line = String::new(); + + match reader.read_line(&mut line).await { + Ok(0) => None, // EOF + Ok(_) => { + let trimmed_line = line.trim_end_matches('\n').to_owned(); + + // empty sse comment to keep-alive + if is_empty_sse_message(&trimmed_line) { + return Some((Ok(SseEvent::default().as_bytes()), reader)); + } + + let (event_id, message) = match ( + resumability_enabled, + trimmed_line.split_once(char::from(ID_SEPARATOR)), + ) { + (true, Some((id, msg))) => (Some(id.to_string()), msg.to_string()), + _ => (None, trimmed_line), + }; + + let event = match event_id { + Some(id) => SseEvent::default() + .with_data(message) + .with_id(id) + .as_bytes(), + None => SseEvent::default().with_data(message).as_bytes(), + }; + + Some((Ok(event), reader)) + } + Err(e) => Some((Err(e), reader)), + } + } + }); + + // create a stream body + let streaming_body: GenericBody = + http_body_util::BodyExt::boxed(StreamBody::new(message_stream.map(|res| { + res.map(Frame::data) + .map_err(|err: std::io::Error| TransportServerError::HttpError(err.to_string())) + }))); + + let session_id_value = HeaderValue::from_str(&session_id) + .map_err(|err| TransportServerError::HttpError(err.to_string()))?; + + let status_code = if !payload_contains_request { + StatusCode::ACCEPTED + } else { + StatusCode::OK + }; + + let response = http::Response::builder() + .status(status_code) + .header(CONTENT_TYPE, "text/event-stream") + .header(MCP_SESSION_ID_HEADER, session_id_value) + .header(CONNECTION, "keep-alive") + .body(streaming_body) + .map_err(|err| TransportServerError::HttpError(err.to_string()))?; + + // if last_event_id exists we replay messages from the event-store + tokio::spawn(async move { + if let Some(last_event_id) = last_event_id { + if let Some(event_store) = state.event_store.as_ref() { + if let Some(events) = event_store.events_after(last_event_id).await { + for message_payload in events.messages { + // skip storing replay messages + let error = transport.write_str(&message_payload, true).await; + if let Err(error) = error { + tracing::trace!("Error replaying message: {error}") + } + } + } + } + } + }); + + Ok(response) +} + +// TODO: this function will be removed after refactoring the readable stream of the transports +// so we would deserialize the string syncronousely and have more control over the flow +// this function may incur a slight runtime cost which could be avoided after refactoring +fn contains_request(json_str: &str) -> Result { + let value: serde_json::Value = serde_json::from_str(json_str)?; + match value { + serde_json::Value::Object(obj) => Ok(obj.contains_key("id") && obj.contains_key("method")), + serde_json::Value::Array(arr) => Ok(arr.iter().any(|item| { + item.as_object() + .map(|obj| obj.contains_key("id") && obj.contains_key("method")) + .unwrap_or(false) + })), + _ => Ok(false), + } +} + +fn is_result(json_str: &str) -> Result { + let value: serde_json::Value = serde_json::from_str(json_str)?; + match value { + serde_json::Value::Object(obj) => Ok(obj.contains_key("result")), + serde_json::Value::Array(arr) => Ok(arr.iter().all(|item| { + item.as_object() + .map(|obj| obj.contains_key("result")) + .unwrap_or(false) + })), + _ => Ok(false), + } +} + +pub async fn create_standalone_stream( + session_id: SessionId, + last_event_id: Option, + state: Arc, +) -> TransportServerResult> { + let runtime = state.session_store.get(&session_id).await.ok_or( + TransportServerError::SessionIdInvalid(session_id.to_string()), + )?; + let runtime = runtime.lock().await.to_owned(); + + if runtime.stream_id_exists(DEFAULT_STREAM_ID).await { + let error = + SdkError::bad_request().with_message("Only one SSE stream is allowed per session"); + return error_response(StatusCode::CONFLICT, error) + .map_err(|err| TransportServerError::HttpError(err.to_string())); + } + + if let Some(last_event_id) = last_event_id.as_ref() { + tracing::trace!( + "SSE stream re-connected with last-event-id: {}", + last_event_id + ); + } + + let mut response = create_sse_stream( + runtime.clone(), + session_id.clone(), + state.clone(), + None, + true, + last_event_id, + ) + .await?; + *response.status_mut() = StatusCode::OK; + Ok(response) +} + +pub async fn start_new_session( + state: Arc, + payload: &str, +) -> TransportServerResult> { + let session_id: SessionId = state.id_generator.generate(); + + let h: Arc = state.handler.clone(); + // create a new server instance with unique session_id and + let runtime: Arc = server_runtime::create_server_instance( + Arc::clone(&state.server_details), + h, + session_id.to_owned(), + ); + + tracing::info!("a new client joined : {}", &session_id); + + let response = create_sse_stream( + runtime.clone(), + session_id.clone(), + state.clone(), + Some(payload), + false, + None, + ) + .await; + + if response.is_ok() { + state + .session_store + .set(session_id.to_owned(), runtime.clone()) + .await; + } + response +} +async fn single_shot_stream( + runtime: Arc, + session_id: SessionId, + state: Arc, + payload: Option<&str>, + standalone: bool, +) -> TransportServerResult> { + // readable stream of string to be used in transport + let (read_tx, read_rx) = duplex(DUPLEX_BUFFER_SIZE); + // writable stream to deliver message to the client + let (write_tx, write_rx) = duplex(DUPLEX_BUFFER_SIZE); + + let transport = SseTransport::::new( + read_rx, + write_tx, + read_tx, + Arc::clone(&state.transport_options), + ) + .map_err(|err| TransportServerError::TransportError(err.to_string()))?; + + let stream_id = if standalone { + DEFAULT_STREAM_ID.to_string() + } else { + state.id_generator.generate() + }; + let ping_interval = state.ping_interval; + let runtime_clone = Arc::clone(&runtime); + + let payload_string = payload.map(|p| p.to_string()); + + tokio::spawn(async move { + match runtime_clone + .start_stream( + Arc::new(transport), + &stream_id, + ping_interval, + payload_string, + ) + .await + { + Ok(_) => tracing::info!("stream {} exited gracefully.", &stream_id), + Err(err) => tracing::info!("stream {} exited with error : {}", &stream_id, err), + } + let _ = runtime.remove_transport(&stream_id).await; + }); + + let mut reader = BufReader::new(write_rx); + let mut line = String::new(); + let response = match reader.read_line(&mut line).await { + Ok(0) => None, // EOF + Ok(_) => { + let trimmed_line = line.trim_end_matches('\n').to_owned(); + Some(Ok(trimmed_line)) + } + Err(e) => Some(Err(e)), + }; + + let session_id_value = HeaderValue::from_str(&session_id) + .map_err(|err| TransportServerError::HttpError(err.to_string()))?; + + match response { + Some(response_result) => match response_result { + Ok(response_str) => { + let body = Full::new(Bytes::from(response_str)) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + + http::Response::builder() + .status(StatusCode::OK) + .header(CONTENT_TYPE, "application/json") + .header(MCP_SESSION_ID_HEADER, session_id_value) + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } + Err(err) => { + let body = Full::new(Bytes::from(err.to_string())) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + http::Response::builder() + .status(StatusCode::INTERNAL_SERVER_ERROR) + .header(CONTENT_TYPE, "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } + }, + None => { + let body = Full::new(Bytes::from( + "End of the transport stream reached.".to_string(), + )) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + http::Response::builder() + .status(StatusCode::UNPROCESSABLE_ENTITY) + .header(CONTENT_TYPE, "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } + } +} + +pub async fn process_incoming_message_return( + session_id: SessionId, + state: Arc, + payload: &str, +) -> TransportServerResult> { + match state.session_store.get(&session_id).await { + Some(runtime) => { + let runtime = runtime.lock().await.to_owned(); + + single_shot_stream( + runtime.clone(), + session_id, + state.clone(), + Some(payload), + false, + ) + .await + // Ok(StatusCode::OK.into_response()) + } + None => { + let error = SdkError::session_not_found(); + error_response(StatusCode::NOT_FOUND, error) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } + } +} + +pub async fn process_incoming_message( + session_id: SessionId, + state: Arc, + payload: &str, +) -> TransportServerResult> { + match state.session_store.get(&session_id).await { + Some(runtime) => { + let runtime = runtime.lock().await.to_owned(); + // when receiving a result in a streamable_http server, that means it was sent by the standalone sse transport + // it should be processed by the same transport , therefore no need to call create_sse_stream + let Ok(is_result) = is_result(payload) else { + return error_response(StatusCode::BAD_REQUEST, SdkError::parse_error()); + }; + + if is_result { + match runtime + .consume_payload_string(DEFAULT_STREAM_ID, payload) + .await + { + Ok(()) => { + let body = Full::new(Bytes::new()) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + http::Response::builder() + .status(200) + .header("Content-Type", "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } + Err(err) => { + let error = + SdkError::internal_error().with_message(err.to_string().as_ref()); + error_response(StatusCode::BAD_REQUEST, error) + } + } + } else { + create_sse_stream( + runtime.clone(), + session_id.clone(), + state.clone(), + Some(payload), + false, + None, + ) + .await + } + } + None => { + let error = SdkError::session_not_found(); + error_response(StatusCode::NOT_FOUND, error) + } + } +} + +pub fn is_empty_sse_message(sse_payload: &str) -> bool { + sse_payload.is_empty() || sse_payload.trim() == ":" +} + +pub async fn delete_session( + session_id: SessionId, + state: Arc, +) -> TransportServerResult> { + match state.session_store.get(&session_id).await { + Some(runtime) => { + let runtime = runtime.lock().await.to_owned(); + runtime.shutdown().await; + state.session_store.delete(&session_id).await; + tracing::info!("client disconnected : {}", &session_id); + + let body = Full::new(Bytes::from("ok")) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + http::Response::builder() + .status(200) + .header("Content-Type", "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + } + None => { + let error = SdkError::session_not_found(); + error_response(StatusCode::NOT_FOUND, error) + } + } +} + +pub fn acceptable_content_type(headers: &HeaderMap) -> bool { + let accept_header = headers + .get("content-type") + .and_then(|val| val.to_str().ok()) + .unwrap_or(""); + accept_header + .split(',') + .any(|val| val.trim().starts_with("application/json")) +} + +pub fn validate_mcp_protocol_version_header(headers: &HeaderMap) -> SdkResult<()> { + let protocol_version_header = headers + .get(MCP_PROTOCOL_VERSION_HEADER) + .and_then(|val| val.to_str().ok()) + .unwrap_or(""); + + // requests without protocol version header are acceptable + if protocol_version_header.is_empty() { + return Ok(()); + } + + validate_mcp_protocol_version(protocol_version_header) +} + +pub fn accepts_event_stream(headers: &HeaderMap) -> bool { + let accept_header = headers + .get(ACCEPT) + .and_then(|val| val.to_str().ok()) + .unwrap_or(""); + + accept_header + .split(',') + .any(|val| val.trim().starts_with("text/event-stream")) +} + +pub fn valid_streaming_http_accept_header(headers: &HeaderMap) -> bool { + let accept_header = headers + .get(ACCEPT) + .and_then(|val| val.to_str().ok()) + .unwrap_or(""); + + let types: Vec<_> = accept_header.split(',').map(|v| v.trim()).collect(); + + let has_event_stream = types.iter().any(|v| v.starts_with("text/event-stream")); + let has_json = types.iter().any(|v| v.starts_with("application/json")); + has_event_stream && has_json +} + +pub fn error_response( + status_code: StatusCode, + error: SdkError, +) -> TransportServerResult> { + let error_string = serde_json::to_string(&error).unwrap_or_default(); + let body = Full::new(Bytes::from(error_string)) + .map_err(|err| TransportServerError::HttpError(err.to_string())) + .boxed(); + + http::Response::builder() + .status(status_code) + .header(CONTENT_TYPE, "application/json") + .body(body) + .map_err(|err| TransportServerError::HttpError(err.to_string())) +} + +// Protect against DNS rebinding attacks by validating Host and Origin headers. +pub(crate) async fn protect_dns_rebinding( + headers: &http::HeaderMap, + state: Arc, +) -> Result<(), SdkError> { + if !state.needs_dns_protection() { + // If protection is not needed, pass the request to the next handler + return Ok(()); + } + + if let Some(allowed_hosts) = state.allowed_hosts.as_ref() { + if !allowed_hosts.is_empty() { + let Some(host) = headers.get(HOST).and_then(|h| h.to_str().ok()) else { + return Err(SdkError::bad_request().with_message("Invalid Host header: [unknown] ")); + }; + + if !allowed_hosts + .iter() + .any(|allowed| allowed.eq_ignore_ascii_case(host)) + { + return Err(SdkError::bad_request() + .with_message(format!("Invalid Host header: \"{host}\" ").as_str())); + } + } + } + + if let Some(allowed_origins) = state.allowed_origins.as_ref() { + if !allowed_origins.is_empty() { + let Some(origin) = headers.get(ORIGIN).and_then(|h| h.to_str().ok()) else { + return Err( + SdkError::bad_request().with_message("Invalid Origin header: [unknown] ") + ); + }; + + if !allowed_origins + .iter() + .any(|allowed| allowed.eq_ignore_ascii_case(origin)) + { + return Err(SdkError::bad_request() + .with_message(format!("Invalid Origin header: \"{origin}\" ").as_str())); + } + } + } + + Ok(()) +} + +/// Extracts the value of a query parameter from an HTTP request by key. +/// +/// This function parses the query string from the request URI and searches +/// for the specified key. If found, it returns the corresponding value as a `String`. +/// +/// # Arguments +/// * `request` - The HTTP request containing the URI with the query string. +/// * `key` - The name of the query parameter to retrieve. +/// +/// # Returns +/// * `Some(String)` containing the value of the query parameter if found. +/// * `None` if the query string is missing or the key is not present. +/// +pub fn query_param(request: &http::Request<&str>, key: &str) -> Option { + request.uri().query().and_then(|query| { + for pair in query.split('&') { + let mut split = pair.splitn(2, '='); + let k = split.next()?; + let v = split.next().unwrap_or(""); + if k == key { + return Some(v.to_string()); + } + } + None + }) +} + +#[cfg(feature = "sse")] +pub(crate) async fn handle_sse_connection( + state: Arc, + sse_message_endpoint: Option<&str>, +) -> TransportServerResult> { + let session_id: SessionId = state.id_generator.generate(); + + let sse_message_endpoint = sse_message_endpoint.unwrap_or(DEFAULT_MESSAGES_ENDPOINT); + let messages_endpoint = + SseTransport::::message_endpoint(sse_message_endpoint, &session_id); + + // readable stream of string to be used in transport + // writing string to read_tx will be received as messages inside the transport and messages will be processed + let (read_tx, read_rx) = duplex(DUPLEX_BUFFER_SIZE); + + // writable stream to deliver message to the client + let (write_tx, write_rx) = duplex(DUPLEX_BUFFER_SIZE); + + // / create a transport for sending/receiving messages + let Ok(transport) = SseTransport::new( + read_rx, + write_tx, + read_tx, + Arc::clone(&state.transport_options), + ) else { + return Err(TransportServerError::TransportError( + "Failed to create SSE transport".to_string(), + )); + }; + + let h: Arc = state.handler.clone(); + // create a new server instance with unique session_id and + let server: Arc = server_runtime::create_server_instance( + Arc::clone(&state.server_details), + h, + session_id.to_owned(), + ); + + state + .session_store + .set(session_id.to_owned(), server.clone()) + .await; + + tracing::info!("A new client joined : {}", session_id.to_owned()); + + // Start the server + tokio::spawn(async move { + match server + .start_stream( + Arc::new(transport), + DEFAULT_STREAM_ID, + state.ping_interval, + None, + ) + .await + { + Ok(_) => tracing::info!("server {} exited gracefully.", session_id.to_owned()), + Err(err) => tracing::info!( + "server {} exited with error : {}", + session_id.to_owned(), + err + ), + }; + + state.session_store.delete(&session_id).await; + }); + + // Initial SSE message to inform the client about the server's endpoint + let initial_sse_event = stream::once(async move { initial_sse_event(&messages_endpoint) }); + + // Construct SSE stream + let reader = BufReader::new(write_rx); + + let message_stream = stream::unfold(reader, |mut reader| async move { + let mut line = String::new(); + + match reader.read_line(&mut line).await { + Ok(0) => None, // EOF + Ok(_) => { + let trimmed_line = line.trim_end_matches('\n').to_owned(); + Some(( + Ok(SseEvent::default().with_data(trimmed_line).as_bytes()), + reader, + )) + } + Err(_) => None, // Err(e) => Some((Err(e), reader)), + } + }); + + let stream = initial_sse_event.chain(message_stream); + + // create a stream body + let streaming_body: GenericBody = + http_body_util::BodyExt::boxed(StreamBody::new(stream.map(|res| res.map(Frame::data)))); + + let response = http::Response::builder() + .status(StatusCode::OK) + .header(CONTENT_TYPE, "text/event-stream") + .header(CONNECTION, "keep-alive") + .body(streaming_body) + .map_err(|err| TransportServerError::HttpError(err.to_string()))?; + + Ok(response) +} diff --git a/crates/rust-mcp-sdk/src/hyper_servers/session_store.rs b/crates/rust-mcp-sdk/src/mcp_http/session_store.rs similarity index 100% rename from crates/rust-mcp-sdk/src/hyper_servers/session_store.rs rename to crates/rust-mcp-sdk/src/mcp_http/session_store.rs diff --git a/crates/rust-mcp-sdk/src/hyper_servers/session_store/in_memory.rs b/crates/rust-mcp-sdk/src/mcp_http/session_store/in_memory.rs similarity index 100% rename from crates/rust-mcp-sdk/src/hyper_servers/session_store/in_memory.rs rename to crates/rust-mcp-sdk/src/mcp_http/session_store/in_memory.rs diff --git a/crates/rust-mcp-sdk/src/utils.rs b/crates/rust-mcp-sdk/src/utils.rs index 16fe7c7..2d80f1e 100644 --- a/crates/rust-mcp-sdk/src/utils.rs +++ b/crates/rust-mcp-sdk/src/utils.rs @@ -1,6 +1,5 @@ -use crate::schema::schema_utils::{ClientMessages, SdkError}; - use crate::error::{McpSdkError, ProtocolErrorKind, SdkResult}; +use crate::schema::schema_utils::{ClientMessages, SdkError}; use crate::schema::ProtocolVersion; use std::cmp::Ordering; diff --git a/crates/rust-mcp-transport/src/lib.rs b/crates/rust-mcp-transport/src/lib.rs index d21e5dd..7566290 100644 --- a/crates/rust-mcp-transport/src/lib.rs +++ b/crates/rust-mcp-transport/src/lib.rs @@ -31,6 +31,9 @@ pub use sse::*; pub use stdio::*; pub use transport::*; +#[cfg(any(feature = "sse", feature = "streamable-http"))] +pub use utils::SseEvent; + // Type alias for session identifier, represented as a String pub type SessionId = String; // Type alias for stream identifier (that will be used at the transport scope), represented as a String diff --git a/crates/rust-mcp-transport/src/utils.rs b/crates/rust-mcp-transport/src/utils.rs index 034f062..36977a2 100644 --- a/crates/rust-mcp-transport/src/utils.rs +++ b/crates/rust-mcp-transport/src/utils.rs @@ -1,40 +1,57 @@ mod cancellation_token; + #[cfg(any(feature = "sse", feature = "streamable-http"))] mod http_utils; + #[cfg(any(feature = "sse", feature = "streamable-http"))] mod readable_channel; + +#[cfg(any(feature = "sse", feature = "streamable-http"))] +mod sse_event; + #[cfg(any(feature = "sse", feature = "streamable-http"))] mod sse_parser; + #[cfg(feature = "sse")] mod sse_stream; + #[cfg(feature = "streamable-http")] mod streamable_http_stream; + +mod time_utils; + #[cfg(any(feature = "sse", feature = "streamable-http"))] mod writable_channel; +use crate::error::{TransportError, TransportResult}; +use crate::schema::schema_utils::SdkError; pub(crate) use cancellation_token::*; + +#[cfg(any(feature = "sse", feature = "streamable-http"))] +use crate::SessionId; + #[cfg(any(feature = "sse", feature = "streamable-http"))] pub(crate) use http_utils::*; + #[cfg(any(feature = "sse", feature = "streamable-http"))] pub(crate) use readable_channel::*; + +#[cfg(any(feature = "sse", feature = "streamable-http"))] +pub use sse_event::*; + #[cfg(any(feature = "sse", feature = "streamable-http"))] pub(crate) use sse_parser::*; + #[cfg(feature = "sse")] pub(crate) use sse_stream::*; + #[cfg(feature = "streamable-http")] pub(crate) use streamable_http_stream::*; -#[cfg(any(feature = "sse", feature = "streamable-http"))] -pub(crate) use writable_channel::*; -mod time_utils; -pub use time_utils::*; -use crate::schema::schema_utils::SdkError; +pub use time_utils::*; use tokio::time::{timeout, Duration}; - -use crate::error::{TransportError, TransportResult}; - #[cfg(any(feature = "sse", feature = "streamable-http"))] -use crate::SessionId; +pub(crate) use writable_channel::*; pub async fn await_timeout(operation: F, timeout_duration: Duration) -> TransportResult where diff --git a/crates/rust-mcp-transport/src/utils/sse_event.rs b/crates/rust-mcp-transport/src/utils/sse_event.rs new file mode 100644 index 0000000..5837807 --- /dev/null +++ b/crates/rust-mcp-transport/src/utils/sse_event.rs @@ -0,0 +1,122 @@ +use bytes::Bytes; +use core::fmt; + +/// Represents a single Server-Sent Event (SSE) as defined in the SSE protocol. +/// +/// Contains the event type, data payload, and optional event ID. +#[derive(Clone, Default)] +pub struct SseEvent { + /// The optional event type (e.g., "message"). + pub event: Option, + /// The optional data payload of the event, stored as bytes. + pub data: Option, + /// The optional event ID for reconnection or tracking purposes. + pub id: Option, + /// Optional reconnection retry interval (in milliseconds). + pub retry: Option, +} + +impl SseEvent { + /// Creates a new `SseEvent` with the given string data. + pub fn new>(data: T) -> Self { + Self { + event: None, + data: Some(Bytes::from(data.into())), + id: None, + retry: None, + } + } + + /// Sets the event name (e.g., "message"). + pub fn with_event>(mut self, event: T) -> Self { + self.event = Some(event.into()); + self + } + + /// Sets the ID of the event. + pub fn with_id>(mut self, id: T) -> Self { + self.id = Some(id.into()); + self + } + + /// Sets the retry interval (in milliseconds). + pub fn with_retry(mut self, retry: u64) -> Self { + self.retry = Some(retry); + self + } + + /// Sets the data as bytes. + pub fn with_data_bytes(mut self, data: Bytes) -> Self { + self.data = Some(data); + self + } + + /// Sets the data. + pub fn with_data(mut self, data: String) -> Self { + self.data = Some(Bytes::from(data)); + self + } + + /// Converts the event into a string in SSE format (ready for HTTP body). + pub fn to_sse_string(&self) -> String { + self.to_string() + } + + pub fn as_bytes(&self) -> Bytes { + Bytes::from(self.to_string()) + } +} + +impl std::fmt::Display for SseEvent { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + // Emit retry interval + if let Some(retry) = self.retry { + writeln!(f, "retry: {retry}")?; + } + + // Emit ID + if let Some(id) = &self.id { + writeln!(f, "id: {id}")?; + } + + // Emit event type + if let Some(event) = &self.event { + writeln!(f, "event: {event}")?; + } + + // Emit data lines + if let Some(data) = &self.data { + match std::str::from_utf8(data) { + Ok(text) => { + for line in text.lines() { + writeln!(f, "data: {line}")?; + } + } + Err(_) => { + writeln!(f, "data: [binary data]")?; + } + } + } + + writeln!(f)?; // Trailing newline for SSE message end, separates events + Ok(()) + } +} + +impl fmt::Debug for SseEvent { + /// Formats the `SseEvent` for debugging, converting the `data` field to a UTF-8 string + /// (with lossy conversion if invalid UTF-8 is encountered). + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + let data_str = self + .data + .as_ref() + .map(|b| String::from_utf8_lossy(b).to_string()); + + f.debug_struct("SseEvent") + .field("event", &self.event) + .field("data", &data_str) + .field("id", &self.id) + .field("retry", &self.retry) + .finish() + } +} diff --git a/crates/rust-mcp-transport/src/utils/sse_parser.rs b/crates/rust-mcp-transport/src/utils/sse_parser.rs index 5933726..3074e9f 100644 --- a/crates/rust-mcp-transport/src/utils/sse_parser.rs +++ b/crates/rust-mcp-transport/src/utils/sse_parser.rs @@ -1,66 +1,9 @@ -use core::fmt; +use bytes::{Bytes, BytesMut}; use std::collections::HashMap; -use bytes::{Bytes, BytesMut}; +use super::SseEvent; const BUFFER_CAPACITY: usize = 1024; -/// Represents a single Server-Sent Event (SSE) as defined in the SSE protocol. -/// -/// Contains the event type, data payload, and optional event ID. -pub struct SseEvent { - /// The optional event type (e.g., "message"). - pub event: Option, - /// The optional data payload of the event, stored as bytes. - pub data: Option, - /// The optional event ID for reconnection or tracking purposes. - pub id: Option, -} - -impl std::fmt::Display for SseEvent { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - if let Some(id) = &self.id { - writeln!(f, "id: {id}")?; - } - - if let Some(event) = &self.event { - writeln!(f, "event: {event}")?; - } - - if let Some(data) = &self.data { - match std::str::from_utf8(data) { - Ok(text) => { - for line in text.lines() { - writeln!(f, "data: {line}")?; - } - } - Err(_) => { - writeln!(f, "data: [binary data]")?; - } - } - } - - writeln!(f)?; // Trailing newline for SSE message end - Ok(()) - } -} - -impl fmt::Debug for SseEvent { - /// Formats the `SseEvent` for debugging, converting the `data` field to a UTF-8 string - /// (with lossy conversion if invalid UTF-8 is encountered). - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - let data_str = self - .data - .as_ref() - .map(|b| String::from_utf8_lossy(b).to_string()); - - f.debug_struct("SseEvent") - .field("event", &self.event) - .field("data", &data_str) - .field("id", &self.id) - .finish() - } -} - /// A parser for Server-Sent Events (SSE) that processes incoming byte chunks into `SseEvent`s. /// This Parser is specifically designed for MCP messages and with no multi-line data support /// @@ -193,11 +136,15 @@ impl SseParser { // Get event (default to None) let event = fields.get("event").cloned(); let id = fields.get("id").cloned(); + let retry = fields + .get("retry") + .and_then(|r| r.trim().parse::().ok()); Some(SseEvent { event, data: Some(data), id, + retry, }) } } @@ -317,4 +264,20 @@ mod tests { Some(Bytes::from("second\n").as_ref()) ); } + + #[test] + fn test_basic_sse_event() { + let mut parser = SseParser::new(); + let input = Bytes::from("event: message\ndata: Hello\nid: 1\nretry: 5000\n\n"); + + let events = parser.process_new_chunk(input); + + assert_eq!(events.len(), 1); + + let event = &events[0]; + assert_eq!(event.event.as_deref(), Some("message")); + assert_eq!(event.data.as_deref(), Some(Bytes::from("Hello\n").as_ref())); + assert_eq!(event.id.as_deref(), Some("1")); + assert_eq!(event.retry, Some(5000)); + } } From 5bf54d6d442d6cb854242697fa50c29bca0b8483 Mon Sep 17 00:00:00 2001 From: Ali Hashemi <14126952+hashemix@users.noreply.github.com> Date: Mon, 13 Oct 2025 08:39:41 -0300 Subject: [PATCH 3/9] refactor: expose Store Traits and add ToMcpServerHandler for Improved Framework Flexibility (#107) * refactor: expose session store and event store traits and implementations * chore: update cargo feature --- crates/rust-mcp-sdk/src/hyper_servers/server.rs | 3 ++- crates/rust-mcp-sdk/src/lib.rs | 7 ++++++- .../src/mcp_handlers/mcp_server_handler.rs | 17 ++++++++++++++++- crates/rust-mcp-sdk/src/mcp_http.rs | 4 +--- crates/rust-mcp-sdk/src/mcp_http/app_state.rs | 7 ++----- .../src/{mcp_http => }/session_store.rs | 6 +++--- .../in_memory_session_store.rs} | 0 7 files changed, 30 insertions(+), 14 deletions(-) rename crates/rust-mcp-sdk/src/{mcp_http => }/session_store.rs (93%) rename crates/rust-mcp-sdk/src/{mcp_http/session_store/in_memory.rs => session_store/in_memory_session_store.rs} (100%) diff --git a/crates/rust-mcp-sdk/src/hyper_servers/server.rs b/crates/rust-mcp-sdk/src/hyper_servers/server.rs index 881d4b3..4cd8eb6 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/server.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/server.rs @@ -5,10 +5,11 @@ use crate::{ utils::{ DEFAULT_MESSAGES_ENDPOINT, DEFAULT_SSE_ENDPOINT, DEFAULT_STREAMABLE_HTTP_ENDPOINT, }, - InMemorySessionStore, McpAppState, + McpAppState, }, mcp_server::hyper_runtime::HyperRuntime, mcp_traits::{mcp_handler::McpServerHandler, IdGenerator}, + session_store::InMemorySessionStore, }; #[cfg(feature = "ssl")] use axum_server::tls_rustls::RustlsConfig; diff --git a/crates/rust-mcp-sdk/src/lib.rs b/crates/rust-mcp-sdk/src/lib.rs index 2f88673..9a9e0a9 100644 --- a/crates/rust-mcp-sdk/src/lib.rs +++ b/crates/rust-mcp-sdk/src/lib.rs @@ -7,6 +7,8 @@ pub(crate) mod mcp_http; mod mcp_macros; mod mcp_runtimes; mod mcp_traits; +#[cfg(any(feature = "server", feature = "hyper-server"))] +pub mod session_store; mod utils; #[cfg(feature = "client")] @@ -65,7 +67,7 @@ pub mod mcp_server { //! handle each message based on its type and parameters. //! //! Refer to [examples/hello-world-mcp-server-stdio-core](https://github.com/rust-mcp-stack/rust-mcp-sdk/tree/main/examples/hello-world-mcp-server-stdio-core) for an example. - pub use super::mcp_handlers::mcp_server_handler::ServerHandler; + pub use super::mcp_handlers::mcp_server_handler::{ServerHandler, ToMcpServerHandler}; pub use super::mcp_handlers::mcp_server_handler_core::ServerHandlerCore; pub use super::mcp_runtimes::server_runtime::mcp_server_runtime as server_runtime; @@ -79,6 +81,9 @@ pub mod mcp_server { #[cfg(feature = "hyper-server")] pub use super::hyper_servers::*; pub use super::utils::enforce_compatible_protocol_version; + + #[cfg(feature = "hyper-server")] + pub use super::mcp_http::{McpAppState, McpHttpHandler}; } #[cfg(feature = "client")] diff --git a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs index 9b9577e..9f8c9e3 100644 --- a/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs +++ b/crates/rust-mcp-sdk/src/mcp_handlers/mcp_server_handler.rs @@ -1,4 +1,8 @@ -use crate::schema::{schema_utils::CallToolError, *}; +use crate::{ + mcp_server::server_runtime::ServerRuntimeInternalHandler, + mcp_traits::mcp_handler::McpServerHandler, + schema::{schema_utils::CallToolError, *}, +}; use async_trait::async_trait; use serde_json::Value; use std::sync::Arc; @@ -326,3 +330,14 @@ pub trait ServerHandler: Send + Sync + 'static { Ok(()) } } + +// Custom trait for conversion +pub trait ToMcpServerHandler { + fn to_mcp_server_handler(self) -> Arc; +} + +impl ToMcpServerHandler for T { + fn to_mcp_server_handler(self) -> Arc { + Arc::new(ServerRuntimeInternalHandler::new(Box::new(self))) + } +} diff --git a/crates/rust-mcp-sdk/src/mcp_http.rs b/crates/rust-mcp-sdk/src/mcp_http.rs index 59cfedc..3f443d5 100644 --- a/crates/rust-mcp-sdk/src/mcp_http.rs +++ b/crates/rust-mcp-sdk/src/mcp_http.rs @@ -1,11 +1,9 @@ mod app_state; mod mcp_http_handler; pub(crate) mod mcp_http_utils; -mod session_store; -pub(crate) use app_state::*; +pub use app_state::*; pub use mcp_http_handler::*; -pub use session_store::*; pub(crate) mod utils { pub use super::mcp_http_utils::*; diff --git a/crates/rust-mcp-sdk/src/mcp_http/app_state.rs b/crates/rust-mcp-sdk/src/mcp_http/app_state.rs index 95ae297..cada97d 100644 --- a/crates/rust-mcp-sdk/src/mcp_http/app_state.rs +++ b/crates/rust-mcp-sdk/src/mcp_http/app_state.rs @@ -1,12 +1,9 @@ -use std::{sync::Arc, time::Duration}; - -use super::session_store::SessionStore; use crate::mcp_traits::mcp_handler::McpServerHandler; +use crate::session_store::SessionStore; use crate::{id_generator::FastIdGenerator, mcp_traits::IdGenerator, schema::InitializeResult}; - use rust_mcp_transport::event_store::EventStore; - use rust_mcp_transport::{SessionId, TransportOptions}; +use std::{sync::Arc, time::Duration}; /// Application state struct for the Hyper ser /// diff --git a/crates/rust-mcp-sdk/src/mcp_http/session_store.rs b/crates/rust-mcp-sdk/src/session_store.rs similarity index 93% rename from crates/rust-mcp-sdk/src/mcp_http/session_store.rs rename to crates/rust-mcp-sdk/src/session_store.rs index 4384b1a..b3dea76 100644 --- a/crates/rust-mcp-sdk/src/mcp_http/session_store.rs +++ b/crates/rust-mcp-sdk/src/session_store.rs @@ -1,15 +1,15 @@ -mod in_memory; +mod in_memory_session_store; use std::sync::Arc; use async_trait::async_trait; -pub use in_memory::*; +pub use in_memory_session_store::*; use rust_mcp_transport::SessionId; use tokio::sync::Mutex; use crate::mcp_server::ServerRuntime; // Type alias for the server-side duplex stream used in sessions -pub type TxServer = Arc; +type TxServer = Arc; /// Trait defining the interface for session storage operations /// diff --git a/crates/rust-mcp-sdk/src/mcp_http/session_store/in_memory.rs b/crates/rust-mcp-sdk/src/session_store/in_memory_session_store.rs similarity index 100% rename from crates/rust-mcp-sdk/src/mcp_http/session_store/in_memory.rs rename to crates/rust-mcp-sdk/src/session_store/in_memory_session_store.rs From ea5d58013ac051f2bbe7e9f5b3a20a3220e66c9b Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Mon, 13 Oct 2025 11:29:45 -0300 Subject: [PATCH 4/9] perf: remove unnecesarry mutex in the session store --- .release-config.json | 210 +++++++++--------- .../src/hyper_servers/hyper_runtime.rs | 15 +- .../src/mcp_http/mcp_http_handler.rs | 1 - .../src/mcp_http/mcp_http_utils.rs | 5 - crates/rust-mcp-sdk/src/session_store.rs | 25 +-- .../session_store/in_memory_session_store.rs | 17 +- 6 files changed, 124 insertions(+), 149 deletions(-) diff --git a/.release-config.json b/.release-config.json index fecd10a..65824d2 100644 --- a/.release-config.json +++ b/.release-config.json @@ -1,112 +1,110 @@ { - "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", - "release-type": "rust", - "release-as": "", - "include-component-in-tag": true, - "changelog-sections": [ - { - "type": "feature", - "section": "🚀 Features" - }, - { - "type": "feat", - "section": "🚀 Features" - }, - { - "type": "fix", - "section": "🐛 Bug Fixes" - }, - { - "type": "perf", - "section": "⚡ Performance Improvements" - }, - { - "type": "revert", - "section": "◀️ Reverts" - }, - { - "type": "docs", - "section": "📚 Documentation", - "hidden": false - }, - { - "type": "style", - "section": "🎨 Styles", - "hidden": true - }, - { - "type": "chore", - "section": "⚙️ Miscellaneous Chores", - "hidden": true - }, - { - "type": "refactor", - "section": "🚜 Code Refactoring", - "hidden": true - }, - { - "type": "test", - "section": "🧪 Tests", - "hidden": true - }, + "$schema": "https://raw.githubusercontent.com/googleapis/release-please/main/schemas/config.json", + "release-type": "rust", + "release-as": "", + "include-component-in-tag": true, + "changelog-sections": [ + { + "type": "feature", + "section": "🚀 Features" + }, + { + "type": "feat", + "section": "🚀 Features" + }, + { + "type": "fix", + "section": "🐛 Bug Fixes" + }, + { + "type": "perf", + "section": "⚡ Performance Improvements", + "hidden": false + }, + { + "type": "revert", + "section": "◀️ Reverts" + }, + { + "type": "docs", + "section": "📚 Documentation", + "hidden": false + }, + { + "type": "style", + "section": "🎨 Styles", + "hidden": true + }, + { + "type": "chore", + "section": "⚙️ Miscellaneous Chores", + "hidden": true + }, + { + "type": "refactor", + "section": "🚜 Code Refactoring", + "hidden": false + }, + { + "type": "test", + "section": "🧪 Tests", + "hidden": true + }, + { + "type": "build", + "section": "🛠️ Build System", + "hidden": true + }, + { + "type": "ci", + "section": "🥏 Continuous Integration", + "hidden": true + } + ], + "plugins": ["cargo-workspace", "sentence-case"], + "pull-request-header": ":robot: Auto-generated release PR", + "packages": { + "crates/rust-mcp-macros": { + "release-type": "rust", + "draft": false, + "prerelease": false, + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": true, + "changelogPath": "CHANGELOG.md", + "extra-files": [ { - "type": "build", - "section": "🛠️ Build System", - "hidden": true - }, + "type": "generic", + "path": "CHANGELOG.md" + } + ] + }, + "crates/rust-mcp-transport": { + "release-type": "rust", + "draft": false, + "prerelease": false, + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": true, + "changelogPath": "CHANGELOG.md", + "extra-files": [ { - "type": "ci", - "section": "🥏 Continuous Integration", - "hidden": true + "type": "generic", + "path": "CHANGELOG.md" } - ], - "plugins": [ - "cargo-workspace", - "sentence-case" - ], - "pull-request-header": ":robot: Auto-generated release PR", - "packages": { - "crates/rust-mcp-macros": { - "release-type": "rust", - "draft": false, - "prerelease": false, - "bump-minor-pre-major": true, - "bump-patch-for-minor-pre-major": true, - "changelogPath": "CHANGELOG.md", - "extra-files": [ - { - "type": "generic", - "path": "CHANGELOG.md" - } - ] - }, - "crates/rust-mcp-transport": { - "release-type": "rust", - "draft": false, - "prerelease": false, - "bump-minor-pre-major": true, - "bump-patch-for-minor-pre-major": true, - "changelogPath": "CHANGELOG.md", - "extra-files": [ - { - "type": "generic", - "path": "CHANGELOG.md" - } - ] - }, - "crates/rust-mcp-sdk": { - "release-type": "rust", - "draft": false, - "prerelease": false, - "bump-minor-pre-major": true, - "bump-patch-for-minor-pre-major": true, - "changelogPath": "CHANGELOG.md", - "extra-files": [ - { - "type": "generic", - "path": "CHANGELOG.md" - } - ] + ] + }, + "crates/rust-mcp-sdk": { + "release-type": "rust", + "draft": false, + "prerelease": false, + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": true, + "changelogPath": "CHANGELOG.md", + "extra-files": [ + { + "type": "generic", + "path": "CHANGELOG.md" } + ] } -} \ No newline at end of file + } +} diff --git a/crates/rust-mcp-sdk/src/hyper_servers/hyper_runtime.rs b/crates/rust-mcp-sdk/src/hyper_servers/hyper_runtime.rs index 92eed79..5cedb59 100644 --- a/crates/rust-mcp-sdk/src/hyper_servers/hyper_runtime.rs +++ b/crates/rust-mcp-sdk/src/hyper_servers/hyper_runtime.rs @@ -15,7 +15,7 @@ use crate::{ use axum_server::Handle; use rust_mcp_transport::SessionId; -use tokio::{sync::Mutex, task::JoinHandle}; +use tokio::task::JoinHandle; use crate::{ error::SdkResult, @@ -79,7 +79,7 @@ impl HyperRuntime { pub async fn runtime_by_session( &self, session_id: &SessionId, - ) -> TransportServerResult>>> { + ) -> TransportServerResult> { self.state.session_store.get(session_id).await.ok_or( TransportServerError::SessionIdInvalid(session_id.to_string()), ) @@ -92,7 +92,6 @@ impl HyperRuntime { timeout: Option, ) -> SdkResult { let runtime = self.runtime_by_session(session_id).await?; - let runtime = runtime.lock().await.to_owned(); runtime.request(request, timeout).await } @@ -102,7 +101,6 @@ impl HyperRuntime { notification: NotificationFromServer, ) -> SdkResult<()> { let runtime = self.runtime_by_session(session_id).await?; - let runtime = runtime.lock().await.to_owned(); runtime.send_notification(notification).await } @@ -117,7 +115,6 @@ impl HyperRuntime { params: Option, ) -> SdkResult { let runtime = self.runtime_by_session(session_id).await?; - let runtime = runtime.lock().await.to_owned(); runtime.list_roots(params).await } @@ -127,7 +124,6 @@ impl HyperRuntime { params: LoggingMessageNotificationParams, ) -> SdkResult<()> { let runtime = self.runtime_by_session(session_id).await?; - let runtime = runtime.lock().await.to_owned(); runtime.send_logging_message(params).await } @@ -140,7 +136,6 @@ impl HyperRuntime { params: Option, ) -> SdkResult<()> { let runtime = self.runtime_by_session(session_id).await?; - let runtime = runtime.lock().await.to_owned(); runtime.send_prompt_list_changed(params).await } @@ -153,7 +148,6 @@ impl HyperRuntime { params: Option, ) -> SdkResult<()> { let runtime = self.runtime_by_session(session_id).await?; - let runtime = runtime.lock().await.to_owned(); runtime.send_resource_list_changed(params).await } @@ -166,7 +160,6 @@ impl HyperRuntime { params: ResourceUpdatedNotificationParams, ) -> SdkResult<()> { let runtime = self.runtime_by_session(session_id).await?; - let runtime = runtime.lock().await.to_owned(); runtime.send_resource_updated(params).await } @@ -179,7 +172,6 @@ impl HyperRuntime { params: Option, ) -> SdkResult<()> { let runtime = self.runtime_by_session(session_id).await?; - let runtime = runtime.lock().await.to_owned(); runtime.send_tool_list_changed(params).await } @@ -199,7 +191,6 @@ impl HyperRuntime { timeout: Option, ) -> SdkResult { let runtime = self.runtime_by_session(session_id).await?; - let runtime = runtime.lock().await.to_owned(); runtime.ping(timeout).await } @@ -214,7 +205,6 @@ impl HyperRuntime { params: CreateMessageRequestParams, ) -> SdkResult { let runtime = self.runtime_by_session(session_id).await?; - let runtime = runtime.lock().await.to_owned(); runtime.create_message(params).await } @@ -223,7 +213,6 @@ impl HyperRuntime { session_id: &SessionId, ) -> SdkResult> { let runtime = self.runtime_by_session(session_id).await?; - let runtime = runtime.lock().await.to_owned(); Ok(runtime.client_info()) } } diff --git a/crates/rust-mcp-sdk/src/mcp_http/mcp_http_handler.rs b/crates/rust-mcp-sdk/src/mcp_http/mcp_http_handler.rs index fb830ae..8b7efcf 100644 --- a/crates/rust-mcp-sdk/src/mcp_http/mcp_http_handler.rs +++ b/crates/rust-mcp-sdk/src/mcp_http/mcp_http_handler.rs @@ -115,7 +115,6 @@ impl McpHttpHandler { TransportServerError::SessionIdInvalid(session_id.to_string()), )?; - let transmit = transmit.lock().await; let message = *request.body(); transmit .consume_payload_string(DEFAULT_STREAM_ID, message) diff --git a/crates/rust-mcp-sdk/src/mcp_http/mcp_http_utils.rs b/crates/rust-mcp-sdk/src/mcp_http/mcp_http_utils.rs index 06443e9..608207a 100644 --- a/crates/rust-mcp-sdk/src/mcp_http/mcp_http_utils.rs +++ b/crates/rust-mcp-sdk/src/mcp_http/mcp_http_utils.rs @@ -240,7 +240,6 @@ pub async fn create_standalone_stream( let runtime = state.session_store.get(&session_id).await.ok_or( TransportServerError::SessionIdInvalid(session_id.to_string()), )?; - let runtime = runtime.lock().await.to_owned(); if runtime.stream_id_exists(DEFAULT_STREAM_ID).await { let error = @@ -410,8 +409,6 @@ pub async fn process_incoming_message_return( ) -> TransportServerResult> { match state.session_store.get(&session_id).await { Some(runtime) => { - let runtime = runtime.lock().await.to_owned(); - single_shot_stream( runtime.clone(), session_id, @@ -437,7 +434,6 @@ pub async fn process_incoming_message( ) -> TransportServerResult> { match state.session_store.get(&session_id).await { Some(runtime) => { - let runtime = runtime.lock().await.to_owned(); // when receiving a result in a streamable_http server, that means it was sent by the standalone sse transport // it should be processed by the same transport , therefore no need to call create_sse_stream let Ok(is_result) = is_result(payload) else { @@ -494,7 +490,6 @@ pub async fn delete_session( ) -> TransportServerResult> { match state.session_store.get(&session_id).await { Some(runtime) => { - let runtime = runtime.lock().await.to_owned(); runtime.shutdown().await; state.session_store.delete(&session_id).await; tracing::info!("client disconnected : {}", &session_id); diff --git a/crates/rust-mcp-sdk/src/session_store.rs b/crates/rust-mcp-sdk/src/session_store.rs index b3dea76..80c4087 100644 --- a/crates/rust-mcp-sdk/src/session_store.rs +++ b/crates/rust-mcp-sdk/src/session_store.rs @@ -1,15 +1,9 @@ mod in_memory_session_store; -use std::sync::Arc; - +use crate::mcp_server::ServerRuntime; use async_trait::async_trait; pub use in_memory_session_store::*; use rust_mcp_transport::SessionId; -use tokio::sync::Mutex; - -use crate::mcp_server::ServerRuntime; - -// Type alias for the server-side duplex stream used in sessions -type TxServer = Arc; +use std::sync::Arc; /// Trait defining the interface for session storage operations /// @@ -23,25 +17,26 @@ pub trait SessionStore: Send + Sync { /// * `key` - The session identifier to look up /// /// # Returns - /// * `Option>>` - The session stream wrapped in `Arc` if found, None otherwise - async fn get(&self, key: &SessionId) -> Option>>; + /// * `Option>` - The session stream if found, None otherwise + async fn get(&self, key: &SessionId) -> Option>; /// Stores a new session with the given identifier /// /// # Arguments /// * `key` - The session identifier /// * `value` - The duplex stream to store - async fn set(&self, key: SessionId, value: TxServer); + async fn set(&self, key: SessionId, value: Arc); /// Deletes a session by its identifier /// /// # Arguments /// * `key` - The session identifier to delete async fn delete(&self, key: &SessionId); - /// Clears all sessions from the store - async fn clear(&self); + + async fn has(&self, session: &SessionId) -> bool; async fn keys(&self) -> Vec; - async fn values(&self) -> Vec>>; + async fn values(&self) -> Vec>; - async fn has(&self, session: &SessionId) -> bool; + /// Clears all sessions from the store + async fn clear(&self); } diff --git a/crates/rust-mcp-sdk/src/session_store/in_memory_session_store.rs b/crates/rust-mcp-sdk/src/session_store/in_memory_session_store.rs index 80cba3f..169f9a9 100644 --- a/crates/rust-mcp-sdk/src/session_store/in_memory_session_store.rs +++ b/crates/rust-mcp-sdk/src/session_store/in_memory_session_store.rs @@ -1,18 +1,18 @@ +use crate::mcp_server::ServerRuntime; + use super::SessionId; -use super::{SessionStore, TxServer}; +use super::SessionStore; use async_trait::async_trait; use std::collections::HashMap; use std::sync::Arc; -use tokio::sync::Mutex; use tokio::sync::RwLock; /// In-memory session store implementation /// /// Stores session data in a thread-safe HashMap, using a read-write lock for -/// concurrent access and mutexes for individual session streams. #[derive(Clone, Default)] pub struct InMemorySessionStore { - store: Arc>>>>, + store: Arc>>>, } impl InMemorySessionStore { @@ -32,17 +32,16 @@ impl InMemorySessionStore { /// Implementation of the SessionStore trait for InMemorySessionStore /// /// Provides asynchronous methods for managing sessions in memory, ensuring -/// thread-safety through read-write locks and mutexes. #[async_trait] impl SessionStore for InMemorySessionStore { - async fn get(&self, key: &SessionId) -> Option>> { + async fn get(&self, key: &SessionId) -> Option> { let store = self.store.read().await; store.get(key).cloned() } - async fn set(&self, key: SessionId, value: TxServer) { + async fn set(&self, key: SessionId, value: Arc) { let mut store = self.store.write().await; - store.insert(key, Arc::new(Mutex::new(value))); + store.insert(key, value); } async fn delete(&self, key: &SessionId) { @@ -58,7 +57,7 @@ impl SessionStore for InMemorySessionStore { let store = self.store.read().await; store.keys().cloned().collect::>() } - async fn values(&self) -> Vec>> { + async fn values(&self) -> Vec> { let store = self.store.read().await; store.values().cloned().collect::>() } From 5fddd3cee12d622c19c23a67d4f381475d914031 Mon Sep 17 00:00:00 2001 From: Ali Hashemi <14126952+hashemix@users.noreply.github.com> Date: Mon, 13 Oct 2025 16:24:28 -0300 Subject: [PATCH 5/9] feat: introduce `rust-mcp-extra` crate for extended id, session, and event store support (#108) * feat: add new rust-mcp-extra crate * feat: add rust-mcp-extra crate * initial * feat: snow-flake generator * feat: implement id_generators * chore: add readme * chore: cargo features * chore: update comments * chore: update cargo features * chore: update readme and add to release please --- .release-config.json | 14 + .release-manifest.json | 1 + Cargo.lock | 387 +++++++++++------- Cargo.toml | 2 + crates/rust-mcp-extra/Cargo.toml | 32 ++ crates/rust-mcp-extra/README.md | 54 +++ crates/rust-mcp-extra/src/http_adaptors.rs | 1 + crates/rust-mcp-extra/src/id_generator.rs | 19 + .../src/id_generator/nano_id_generator.rs | 70 ++++ .../random_base_62_id_generator.rs | 87 ++++ .../id_generator/snow_flake_id_generator.rs | 166 ++++++++ .../id_generator/time_base_64_id_generator.rs | 111 +++++ crates/rust-mcp-extra/src/lib.rs | 5 + crates/rust-mcp-extra/src/sqlite.rs | 7 + .../src/sqlite/sqlite_event_store.rs | 1 + .../src/sqlite/sqlite_session_store.rs | 1 + .../src/main.rs | 9 +- 17 files changed, 810 insertions(+), 157 deletions(-) create mode 100644 crates/rust-mcp-extra/Cargo.toml create mode 100644 crates/rust-mcp-extra/README.md create mode 100644 crates/rust-mcp-extra/src/http_adaptors.rs create mode 100644 crates/rust-mcp-extra/src/id_generator.rs create mode 100644 crates/rust-mcp-extra/src/id_generator/nano_id_generator.rs create mode 100644 crates/rust-mcp-extra/src/id_generator/random_base_62_id_generator.rs create mode 100644 crates/rust-mcp-extra/src/id_generator/snow_flake_id_generator.rs create mode 100644 crates/rust-mcp-extra/src/id_generator/time_base_64_id_generator.rs create mode 100644 crates/rust-mcp-extra/src/lib.rs create mode 100644 crates/rust-mcp-extra/src/sqlite.rs create mode 100644 crates/rust-mcp-extra/src/sqlite/sqlite_event_store.rs create mode 100644 crates/rust-mcp-extra/src/sqlite/sqlite_session_store.rs diff --git a/.release-config.json b/.release-config.json index 65824d2..304ccc9 100644 --- a/.release-config.json +++ b/.release-config.json @@ -92,6 +92,20 @@ } ] }, + "crates/rust-mcp-extra": { + "release-type": "rust", + "draft": false, + "prerelease": false, + "bump-minor-pre-major": true, + "bump-patch-for-minor-pre-major": true, + "changelogPath": "CHANGELOG.md", + "extra-files": [ + { + "type": "generic", + "path": "CHANGELOG.md" + } + ] + }, "crates/rust-mcp-sdk": { "release-type": "rust", "draft": false, diff --git a/.release-manifest.json b/.release-manifest.json index db381e1..e96fb0f 100644 --- a/.release-manifest.json +++ b/.release-manifest.json @@ -2,6 +2,7 @@ "crates/rust-mcp-sdk": "0.7.0", "crates/rust-mcp-macros": "0.5.2", "crates/rust-mcp-transport": "0.6.0", + "crates/rust-mcp-extra": "0.1.0", "examples/hello-world-mcp-server-stdio": "0.1.29", "examples/hello-world-mcp-server-stdio-core": "0.1.20", "examples/simple-mcp-client-stdio": "0.1.29", diff --git a/Cargo.lock b/Cargo.lock index 51d9cb0..34196f8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4,9 +4,9 @@ version = 4 [[package]] name = "addr2line" -version = "0.24.2" +version = "0.25.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +checksum = "1b5d307320b3181d6d7954e663bd7c774a838b8220fe0593c86d9fb09f498b4b" dependencies = [ "gimli", ] @@ -28,9 +28,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.99" +version = "1.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b0674a1ddeecb70197781e945de4b3b8ffb61fa939a5597bcf48503737663100" +checksum = "a23eb6b1614318a8071c9b2521f36b424b2c83db5eb3a0fead4a6c0809af6e61" [[package]] name = "arc-swap" @@ -84,9 +84,9 @@ checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" [[package]] name = "aws-lc-rs" -version = "1.14.0" +version = "1.14.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "94b8ff6c09cd57b16da53641caa860168b88c172a5ee163b0288d3d6eea12786" +checksum = "879b6c89592deb404ba4dc0ae6b58ffd1795c78991cbb5b8bc441c48a070440d" dependencies = [ "aws-lc-sys", "zeroize", @@ -94,22 +94,23 @@ dependencies = [ [[package]] name = "aws-lc-sys" -version = "0.31.0" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e44d16778acaf6a9ec9899b92cebd65580b83f685446bf2e1f5d3d732f99dcd" +checksum = "a2b715a6010afb9e457ca2b7c9d2b9c344baa8baed7b38dc476034c171b32575" dependencies = [ "bindgen", "cc", "cmake", "dunce", "fs_extra", + "libloading", ] [[package]] name = "axum" -version = "0.8.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "021e862c184ae977658b36c4500f7feac3221ca5da43e3f25bd04ab6c79a29b5" +checksum = "8a18ed336352031311f4e0b4dd2ff392d4fbb370777c9d18d7fc9d7359f73871" dependencies = [ "axum-core", "bytes", @@ -126,8 +127,7 @@ dependencies = [ "mime", "percent-encoding", "pin-project-lite", - "rustversion", - "serde", + "serde_core", "serde_json", "serde_path_to_error", "serde_urlencoded", @@ -141,9 +141,9 @@ dependencies = [ [[package]] name = "axum-core" -version = "0.5.2" +version = "0.5.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68464cd0412f486726fb3373129ef5d2993f90c34bc2bc1c1e9943b2f4fc7ca6" +checksum = "59446ce19cd142f8833f856eb31f3eb097812d1479ab224f54d72428ca21ea22" dependencies = [ "bytes", "futures-core", @@ -152,7 +152,6 @@ dependencies = [ "http-body-util", "mime", "pin-project-lite", - "rustversion", "sync_wrapper", "tower-layer", "tower-service", @@ -183,9 +182,9 @@ dependencies = [ [[package]] name = "backtrace" -version = "0.3.75" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6806a6321ec58106fea15becdad98371e28d92ccbc7c8f1b3b6dd724fe8f1002" +checksum = "bb531853791a215d7c62a30daf0dde835f381ab5de4589cfe7c649d2cbe92bd6" dependencies = [ "addr2line", "cfg-if", @@ -193,7 +192,7 @@ dependencies = [ "miniz_oxide", "object", "rustc-demangle", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -254,9 +253,9 @@ checksum = "d71b6127be86fdcfddb610f7182ac57211d4b18a3e9c82eb2d17662f2227ad6a" [[package]] name = "cc" -version = "1.2.37" +version = "1.2.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "65193589c6404eb80b450d618eaf9a2cafaaafd57ecce47370519ef674a7bd44" +checksum = "ac9fe6cdbb24b6ade63616c0a0688e45bb56732262c158df3c0c4bea4ca47cb7" dependencies = [ "find-msvc-tools", "jobserver", @@ -379,9 +378,9 @@ checksum = "092966b41edc516079bdf31ec78a2e0588d1d0c08f78b91d8307215928642b2b" [[package]] name = "deranged" -version = "0.5.3" +version = "0.5.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d630bccd429a5bb5a64b5e94f693bfc48c9f8566418fda4c494cc94f911f87cc" +checksum = "a41953f86f8a05768a6cda24def994fd2f424b04ec5c719cf89989779f199071" dependencies = [ "powerfmt", ] @@ -441,9 +440,9 @@ dependencies = [ [[package]] name = "find-msvc-tools" -version = "0.1.1" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7fd99930f64d146689264c637b5af2f0233a933bef0d8570e2526bf9e083192d" +checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127" [[package]] name = "fnv" @@ -462,9 +461,9 @@ dependencies = [ [[package]] name = "fs-err" -version = "3.1.2" +version = "3.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44f150ffc8782f35521cec2b23727707cb4045706ba3c854e86bef66b3a8cdbd" +checksum = "6ad492b2cf1d89d568a43508ab24f98501fe03f2f31c01e1d0fe7366a71745d2" dependencies = [ "autocfg", "tokio", @@ -626,9 +625,9 @@ dependencies = [ [[package]] name = "gimli" -version = "0.31.1" +version = "0.32.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" +checksum = "e629b9b98ef3dd8afe6ca2bd0f89306cec16d43d907889945bc5d6687f2f13c7" [[package]] name = "glob" @@ -676,9 +675,9 @@ dependencies = [ [[package]] name = "hashbrown" -version = "0.15.5" +version = "0.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" +checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] name = "hello-world-mcp-server-stdio" @@ -911,7 +910,7 @@ dependencies = [ "libc", "percent-encoding", "pin-project-lite", - "socket2 0.6.0", + "socket2 0.6.1", "tokio", "tower-service", "tracing", @@ -1026,9 +1025,9 @@ dependencies = [ [[package]] name = "indexmap" -version = "2.11.3" +version = "2.11.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "92119844f513ffa41556430369ab02c295a3578af21cf945caa3e9e0c2481ac3" +checksum = "4b0f83760fb341a774ed326568e19f5a863af4a952def8c39f9ab92fd95b88e5" dependencies = [ "equivalent", "hashbrown", @@ -1103,9 +1102,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.80" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "852f13bec5eba4ba9afbeb93fd7c13fe56147f055939ae21c43a29a0ecb2702e" +checksum = "ec48937a97411dcb524a265206ccd4c90bb711fca92b2792c407f268825b9305" dependencies = [ "once_cell", "wasm-bindgen", @@ -1119,9 +1118,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.175" +version = "0.2.177" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6a82ae493e598baaea5209805c49bbf2ea7de956d50d7da0da1164f9c6d28543" +checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976" [[package]] name = "libloading" @@ -1130,9 +1129,15 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "07033963ba89ebaf1584d767badaa2e8fcec21aedea6b8c0346d487d49c28667" dependencies = [ "cfg-if", - "windows-targets 0.53.3", + "windows-targets 0.53.5", ] +[[package]] +name = "libm" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9fbbcab51052fe104eb5e5d351cf728d30a5be1fe14d9be8a3b097481fb97de" + [[package]] name = "litemap" version = "0.8.0" @@ -1147,11 +1152,10 @@ checksum = "f5e54036fe321fd421e10d732f155734c4e4afd610dd556d9a82833ab3ee0bed" [[package]] name = "lock_api" -version = "0.4.13" +version = "0.4.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96936507f153605bddfcda068dd804796c84324ed2510809e5b2a624c81da765" +checksum = "224399e74b87b5f3557511d98dff8b14089b3dadafcab6bb93eab67d3aace965" dependencies = [ - "autocfg", "scopeguard", ] @@ -1184,9 +1188,9 @@ checksum = "47e1ffaa40ddd1f3ed91f717a33c8c0ee23fff369e3aa8772b9605cc1d22f4c3" [[package]] name = "memchr" -version = "2.7.5" +version = "2.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32a282da65faaf38286cf3be983213fcf1d2e2a58700e808f83f4ea9a4804bc0" +checksum = "f52b00d39961fc5b2736ea853c9cc86238e165017a493d1d5c8eac6bdc4cc273" [[package]] name = "mime" @@ -1230,6 +1234,15 @@ dependencies = [ "windows-sys 0.59.0", ] +[[package]] +name = "nanoid" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ffa00dec017b5b1a8b7cf5e2c008bfda1aa7e0697ac1508b491fdf2622fb4d8" +dependencies = [ + "rand 0.8.5", +] + [[package]] name = "nom" version = "7.1.3" @@ -1242,11 +1255,11 @@ dependencies = [ [[package]] name = "nu-ansi-term" -version = "0.50.1" +version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d4a28e057d01f97e61255210fcff094d74ed0466038633e95017f5beb68e4399" +checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1255,6 +1268,16 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + [[package]] name = "num_cpus" version = "1.17.0" @@ -1267,9 +1290,9 @@ dependencies = [ [[package]] name = "object" -version = "0.36.7" +version = "0.37.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "62948e14d923ea95ea2c7c86c71013138b66525b86bdc08d2dcc262bdb497b87" +checksum = "ff76201f031d8863c38aa7f905eca4f53abbfa15f609db4277d44cd8938f33fe" dependencies = [ "memchr", ] @@ -1288,9 +1311,9 @@ checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" [[package]] name = "parking_lot" -version = "0.12.4" +version = "0.12.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "70d58bf43669b5795d1576d0641cfb6fbb2057bf629506267a92807158584a13" +checksum = "93857453250e3077bd71ff98b6a65ea6621a19bb0f559a85248955ac12c45a1a" dependencies = [ "lock_api", "parking_lot_core", @@ -1298,15 +1321,15 @@ dependencies = [ [[package]] name = "parking_lot_core" -version = "0.9.11" +version = "0.9.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc838d2a56b5b1a6c25f55575dfc605fabb63bb2365f6c2353ef9159aa69e4a5" +checksum = "2621685985a2ebf1c516881c026032ac7deafcda1a2c9b7850dc81e3dfcb64c1" dependencies = [ "cfg-if", "libc", "redox_syscall", "smallvec", - "windows-targets 0.52.6", + "windows-link", ] [[package]] @@ -1399,8 +1422,8 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls", - "socket2 0.6.0", - "thiserror 2.0.16", + "socket2 0.6.1", + "thiserror 2.0.17", "tokio", "tracing", "web-time", @@ -1421,7 +1444,7 @@ dependencies = [ "rustls", "rustls-pki-types", "slab", - "thiserror 2.0.16", + "thiserror 2.0.17", "tinyvec", "tracing", "web-time", @@ -1436,16 +1459,16 @@ dependencies = [ "cfg_aliases", "libc", "once_cell", - "socket2 0.6.0", + "socket2 0.6.1", "tracing", "windows-sys 0.60.2", ] [[package]] name = "quote" -version = "1.0.40" +version = "1.0.41" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" +checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1" dependencies = [ "proc-macro2", ] @@ -1469,6 +1492,17 @@ dependencies = [ "rand_hc", ] +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha 0.3.1", + "rand_core 0.6.4", +] + [[package]] name = "rand" version = "0.9.2" @@ -1489,6 +1523,16 @@ dependencies = [ "rand_core 0.5.1", ] +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core 0.6.4", +] + [[package]] name = "rand_chacha" version = "0.9.0" @@ -1508,6 +1552,15 @@ dependencies = [ "getrandom 0.1.16", ] +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom 0.2.16", +] + [[package]] name = "rand_core" version = "0.9.3" @@ -1517,6 +1570,16 @@ dependencies = [ "getrandom 0.3.3", ] +[[package]] +name = "rand_distr" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8615d50dcf34fa31f7ab52692afec947c4dd0ab803cc87cb3b0b4570ff7463" +dependencies = [ + "num-traits", + "rand 0.9.2", +] + [[package]] name = "rand_hc" version = "0.2.0" @@ -1528,18 +1591,18 @@ dependencies = [ [[package]] name = "redox_syscall" -version = "0.5.17" +version = "0.5.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5407465600fb0548f1442edf71dd20683c6ed326200ace4b1ef0763521bb3b77" +checksum = "ed2bf2547551a7053d6fdfafda3f938979645c44812fbfcda098faae3f1a362d" dependencies = [ "bitflags", ] [[package]] name = "regex" -version = "1.11.2" +version = "1.12.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23d7fd106d8c02486a8d64e778353d1cffe08ce79ac2e82f540c86d0facf6912" +checksum = "843bc0191f75f3e22651ae5f1e72939ab2f72a4bc30fa80a066bd66edefc24d4" dependencies = [ "aho-corasick", "memchr", @@ -1549,9 +1612,9 @@ dependencies = [ [[package]] name = "regex-automata" -version = "0.4.10" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b9458fa0bfeeac22b5ca447c63aaf45f28439a709ccd244698632f9aa6394d6" +checksum = "5276caf25ac86c8d810222b3dbb938e512c55c6831a10f3e6ed1c93b84041f1c" dependencies = [ "aho-corasick", "memchr", @@ -1560,15 +1623,15 @@ dependencies = [ [[package]] name = "regex-syntax" -version = "0.8.6" +version = "0.8.8" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "caf4aa5b0f434c91fe5c7f1ecb6a5ece2130b02ad2a590589dda5146df959001" +checksum = "7a2d987857b319362043e95f5353c0535c1f58eec5336fdfcf626430af7def58" [[package]] name = "reqwest" -version = "0.12.23" +version = "0.12.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d429f34c8092b2d42c7c93cec323bb4adeb7c67698f70839adec842ec10c7ceb" +checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f" dependencies = [ "base64 0.22.1", "bytes", @@ -1628,6 +1691,18 @@ dependencies = [ "windows-sys 0.52.0", ] +[[package]] +name = "rust-mcp-extra" +version = "0.1.0" +dependencies = [ + "base64 0.22.1", + "nanoid", + "once_cell", + "rand 0.9.2", + "rand_distr", + "rust-mcp-sdk", +] + [[package]] name = "rust-mcp-macros" version = "0.5.2" @@ -1642,9 +1717,9 @@ dependencies = [ [[package]] name = "rust-mcp-schema" -version = "0.7.4" +version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb65fd293dbbfabaacba1512b3948cdd9bf31ad1f2c0fed4962052b590c5c44" +checksum = "ba217e6fcb043bba9e194209bff92c35294093187504d1443832ca2051816753" dependencies = [ "serde", "serde_json", @@ -1670,7 +1745,7 @@ dependencies = [ "rust-mcp-transport", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -1690,7 +1765,7 @@ dependencies = [ "rust-mcp-schema", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tokio-stream", "tracing", @@ -1711,9 +1786,9 @@ checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" [[package]] name = "rustls" -version = "0.23.31" +version = "0.23.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0ebcbd2f03de0fc1122ad9bb24b127a5a6cd51d72604a3f3c50ac459762b6cc" +checksum = "cd3c25631629d034ce7cd9940adc9d45762d46de2b0f57193c4443b92c6d4d40" dependencies = [ "aws-lc-rs", "once_cell", @@ -1745,9 +1820,9 @@ dependencies = [ [[package]] name = "rustls-webpki" -version = "0.103.6" +version = "0.103.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8572f3c2cb9934231157b45499fc41e1f58c589fdfb81a844ba873265e80f8eb" +checksum = "e10b3f4191e8a80e6b43eebabfac91e5dcecebb27a71f04e820c47ec41d314bf" dependencies = [ "aws-lc-rs", "ring", @@ -1775,9 +1850,9 @@ checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" [[package]] name = "serde" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd6c24dee235d0da097043389623fb913daddf92c76e9f5a1db88607a0bcbd1d" +checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e" dependencies = [ "serde_core", "serde_derive", @@ -1785,18 +1860,18 @@ dependencies = [ [[package]] name = "serde_core" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "659356f9a0cb1e529b24c01e43ad2bdf520ec4ceaf83047b83ddcc2251f96383" +checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.225" +version = "1.0.228" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ea936adf78b1f766949a4977b91d2f5595825bd6ec079aa9543ad2685fc4516" +checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79" dependencies = [ "proc-macro2", "quote", @@ -1884,7 +1959,7 @@ dependencies = [ "rust-mcp-sdk", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "tracing-subscriber", @@ -1900,7 +1975,7 @@ dependencies = [ "rust-mcp-sdk", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "tracing-subscriber", @@ -1916,7 +1991,7 @@ dependencies = [ "rust-mcp-sdk", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", ] @@ -1930,7 +2005,7 @@ dependencies = [ "rust-mcp-sdk", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", ] @@ -1944,7 +2019,7 @@ dependencies = [ "rust-mcp-sdk", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "tracing-subscriber", @@ -1960,7 +2035,7 @@ dependencies = [ "rust-mcp-sdk", "serde", "serde_json", - "thiserror 2.0.16", + "thiserror 2.0.17", "tokio", "tracing", "tracing-subscriber", @@ -1990,19 +2065,19 @@ dependencies = [ [[package]] name = "socket2" -version = "0.6.0" +version = "0.6.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "233504af464074f9d066d7b5416c5f9b894a5862a6506e306f7b816cdd6f1807" +checksum = "17129e116933cf371d018bb80ae557e889637989d8638274fb25622827b03881" dependencies = [ "libc", - "windows-sys 0.59.0", + "windows-sys 0.60.2", ] [[package]] name = "stable_deref_trait" -version = "1.2.0" +version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" +checksum = "6ce2be8dc25455e1f91df71bfa12ad37d7af1092ae736f3a6cd0e37bc7810596" [[package]] name = "subtle" @@ -2052,11 +2127,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3467d614147380f2e4e374161426ff399c91084acd2363eaf549172b3d5e60c0" +checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8" dependencies = [ - "thiserror-impl 2.0.16", + "thiserror-impl 2.0.17", ] [[package]] @@ -2072,9 +2147,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.16" +version = "2.0.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c5e1be1c48b9172ee610da68fd9cd2770e7a4056cb3fc98710ee6906f0c7960" +checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913" dependencies = [ "proc-macro2", "quote", @@ -2092,11 +2167,12 @@ dependencies = [ [[package]] name = "time" -version = "0.3.43" +version = "0.3.44" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "83bde6f1ec10e72d583d91623c939f623002284ef622b87de38cfd546cbf2031" +checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d" dependencies = [ "deranged", + "itoa", "num-conv", "powerfmt", "serde", @@ -2160,7 +2236,7 @@ dependencies = [ "pin-project-lite", "signal-hook-registry", "slab", - "socket2 0.6.0", + "socket2 0.6.1", "tokio-macros", "windows-sys 0.59.0", ] @@ -2178,9 +2254,9 @@ dependencies = [ [[package]] name = "tokio-rustls" -version = "0.26.3" +version = "0.26.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05f63835928ca123f1bef57abbcd23bb2ba0ac9ae1235f1e65bda0d06e7786bd" +checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61" dependencies = [ "rustls", "tokio", @@ -2430,9 +2506,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab10a69fbd0a177f5f649ad4d8d3305499c42bab9aef2f7ff592d0ec8f833819" +checksum = "c1da10c01ae9f1ae40cbfac0bac3b1e724b320abfcf52229f80b547c0d250e2d" dependencies = [ "cfg-if", "once_cell", @@ -2443,9 +2519,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0bb702423545a6007bbc368fde243ba47ca275e549c8a28617f56f6ba53b1d1c" +checksum = "671c9a5a66f49d8a47345ab942e2cb93c7d1d0339065d4f8139c486121b43b19" dependencies = [ "bumpalo", "log", @@ -2457,9 +2533,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-futures" -version = "0.4.53" +version = "0.4.54" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0b221ff421256839509adbb55998214a70d829d3a28c69b4a6672e9d2a42f67" +checksum = "7e038d41e478cc73bae0ff9b36c60cff1c98b8f38f8d7e8061e79ee63608ac5c" dependencies = [ "cfg-if", "js-sys", @@ -2470,9 +2546,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fc65f4f411d91494355917b605e1480033152658d71f722a90647f56a70c88a0" +checksum = "7ca60477e4c59f5f2986c50191cd972e3a50d8a95603bc9434501cf156a9a119" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2480,9 +2556,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffc003a991398a8ee604a401e194b6b3a39677b3173d6e74495eb51b82e99a32" +checksum = "9f07d2f20d4da7b26400c9f4a0511e6e0345b040694e8a75bd41d578fa4421d7" dependencies = [ "proc-macro2", "quote", @@ -2493,9 +2569,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.103" +version = "0.2.104" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "293c37f4efa430ca14db3721dfbe48d8c33308096bd44d80ebaa775ab71ba1cf" +checksum = "bad67dc8b2a1a6e5448428adec4c3e84c43e561d8c9ee8a9e5aabeb193ec41d1" dependencies = [ "unicode-ident", ] @@ -2515,9 +2591,9 @@ dependencies = [ [[package]] name = "web-sys" -version = "0.3.80" +version = "0.3.81" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbe734895e869dc429d78c4b433f8d17d95f8d05317440b4fad5ab2d33e596dc" +checksum = "9367c417a924a74cae129e6a2ae3b47fabb1f8995595ab474029da749a8be120" dependencies = [ "js-sys", "wasm-bindgen", @@ -2535,18 +2611,18 @@ dependencies = [ [[package]] name = "webpki-roots" -version = "1.0.2" +version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e8983c3ab33d6fb807cfcdad2491c4ea8cbc8ed839181c7dfd9c67c83e261b2" +checksum = "32b130c0d2d49f8b6889abc456e795e82525204f27c42cf767cf0d7734e089b8" dependencies = [ "rustls-pki-types", ] [[package]] name = "windows-link" -version = "0.1.3" +version = "0.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e6ad25900d524eaabdbbb96d20b4311e1e7ae1699af4fb28c17ae66c80d798a" +checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5" [[package]] name = "windows-sys" @@ -2572,7 +2648,16 @@ version = "0.60.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f2f500e4d28234f72040990ec9d39e3a6b950f9f22d3dba18416c35882612bcb" dependencies = [ - "windows-targets 0.53.3", + "windows-targets 0.53.5", +] + +[[package]] +name = "windows-sys" +version = "0.61.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc" +dependencies = [ + "windows-link", ] [[package]] @@ -2593,19 +2678,19 @@ dependencies = [ [[package]] name = "windows-targets" -version = "0.53.3" +version = "0.53.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe6031c4041849d7c496a8ded650796e7b6ecc19df1a431c1a363342e5dc91" +checksum = "4945f9f551b88e0d65f3db0bc25c33b8acea4d9e41163edf90dcd0b19f9069f3" dependencies = [ "windows-link", - "windows_aarch64_gnullvm 0.53.0", - "windows_aarch64_msvc 0.53.0", - "windows_i686_gnu 0.53.0", - "windows_i686_gnullvm 0.53.0", - "windows_i686_msvc 0.53.0", - "windows_x86_64_gnu 0.53.0", - "windows_x86_64_gnullvm 0.53.0", - "windows_x86_64_msvc 0.53.0", + "windows_aarch64_gnullvm 0.53.1", + "windows_aarch64_msvc 0.53.1", + "windows_i686_gnu 0.53.1", + "windows_i686_gnullvm 0.53.1", + "windows_i686_msvc 0.53.1", + "windows_x86_64_gnu 0.53.1", + "windows_x86_64_gnullvm 0.53.1", + "windows_x86_64_msvc 0.53.1", ] [[package]] @@ -2616,9 +2701,9 @@ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" [[package]] name = "windows_aarch64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "86b8d5f90ddd19cb4a147a5fa63ca848db3df085e25fee3cc10b39b6eebae764" +checksum = "a9d8416fa8b42f5c947f8482c43e7d89e73a173cead56d044f6a56104a6d1b53" [[package]] name = "windows_aarch64_msvc" @@ -2628,9 +2713,9 @@ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" [[package]] name = "windows_aarch64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c7651a1f62a11b8cbd5e0d42526e55f2c99886c77e007179efff86c2b137e66c" +checksum = "b9d782e804c2f632e395708e99a94275910eb9100b2114651e04744e9b125006" [[package]] name = "windows_i686_gnu" @@ -2640,9 +2725,9 @@ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" [[package]] name = "windows_i686_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c1dc67659d35f387f5f6c479dc4e28f1d4bb90ddd1a5d3da2e5d97b42d6272c3" +checksum = "960e6da069d81e09becb0ca57a65220ddff016ff2d6af6a223cf372a506593a3" [[package]] name = "windows_i686_gnullvm" @@ -2652,9 +2737,9 @@ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" [[package]] name = "windows_i686_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9ce6ccbdedbf6d6354471319e781c0dfef054c81fbc7cf83f338a4296c0cae11" +checksum = "fa7359d10048f68ab8b09fa71c3daccfb0e9b559aed648a8f95469c27057180c" [[package]] name = "windows_i686_msvc" @@ -2664,9 +2749,9 @@ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" [[package]] name = "windows_i686_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "581fee95406bb13382d2f65cd4a908ca7b1e4c2f1917f143ba16efe98a589b5d" +checksum = "1e7ac75179f18232fe9c285163565a57ef8d3c89254a30685b57d83a38d326c2" [[package]] name = "windows_x86_64_gnu" @@ -2676,9 +2761,9 @@ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" [[package]] name = "windows_x86_64_gnu" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e55b5ac9ea33f2fc1716d1742db15574fd6fc8dadc51caab1c16a3d3b4190ba" +checksum = "9c3842cdd74a865a8066ab39c8a7a473c0778a3f29370b5fd6b4b9aa7df4a499" [[package]] name = "windows_x86_64_gnullvm" @@ -2688,9 +2773,9 @@ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" [[package]] name = "windows_x86_64_gnullvm" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a6e035dd0599267ce1ee132e51c27dd29437f63325753051e71dd9e42406c57" +checksum = "0ffa179e2d07eee8ad8f57493436566c7cc30ac536a3379fdf008f47f6bb7ae1" [[package]] name = "windows_x86_64_msvc" @@ -2700,9 +2785,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" [[package]] name = "windows_x86_64_msvc" -version = "0.53.0" +version = "0.53.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "271414315aff87387382ec3d271b52d7ae78726f5d44ac98b4f4030c91880486" +checksum = "d6bbff5f0aada427a1e5a6da5f1f98158182f26556f345ac9e04d36d0ebed650" [[package]] name = "wiremock" @@ -2805,9 +2890,9 @@ dependencies = [ [[package]] name = "zeroize" -version = "1.8.1" +version = "1.8.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" +checksum = "b97154e67e32c85465826e8bcc1c59429aaaf107c1e4a9e53c8d8ccd5eff88d0" [[package]] name = "zerotrie" diff --git a/Cargo.toml b/Cargo.toml index edb7e28..528bb95 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,6 +4,7 @@ members = [ "crates/rust-mcp-macros", "crates/rust-mcp-sdk", "crates/rust-mcp-transport", + "crates/rust-mcp-extra", "examples/simple-mcp-client-stdio", "examples/simple-mcp-client-stdio-core", "examples/hello-world-mcp-server-stdio", @@ -22,6 +23,7 @@ members = [ rust-mcp-transport = { version = "0.6.0", path = "crates/rust-mcp-transport", default-features = false } rust-mcp-sdk = { path = "crates/rust-mcp-sdk", default-features = false } rust-mcp-macros = { version = "0.5.2", path = "crates/rust-mcp-macros", default-features = false } +rust-mcp-extra = { version="0.1", path = "crates/rust-mcp-extra", default-features = false } # External crates rust-mcp-schema = { version = "0.7", default-features = false } diff --git a/crates/rust-mcp-extra/Cargo.toml b/crates/rust-mcp-extra/Cargo.toml new file mode 100644 index 0000000..b346da3 --- /dev/null +++ b/crates/rust-mcp-extra/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "rust-mcp-extra" +version = "0.1.0" +authors = ["Ali Hashemi"] +categories = ["api-bindings", "development-tools", "asynchronous", "parsing"] +description = "A companion crate to rust-mcp-sdk offering extra implementations of core traits like SessionStore and EventStore, enabling integration with various database backends and third-party platforms such as AWS Lambda for serverless and cloud-native MCP applications." +repository = "https://github.com/rust-mcp-stack/rust-mcp-sdk" +documentation = "https://docs.rs/rust-mcp-extra" +keywords = ["serverless", "mcp-server", "rust-mcp", "cloud", "lambda"] +license = "MIT" +edition = "2024" +exclude = ["assets/", "tests/"] + +[dependencies] +rust-mcp-sdk = { version = "0.7" , path = "../rust-mcp-sdk", default-features = false, features=["server","2025_06_18"] } + +base64 = {workspace = true, optional=true} +nanoid = {version="0.4", optional=true} +once_cell = {version="1.2", optional=true} +rand = {version="0.9.2", features = ["std", "alloc"] , optional=true} +rand_distr = {version="0.5.1", optional=true} + + +[features] +default = ["nano_id","snowflake_id","random_62_id","time_64_id"] +nano_id = ["nanoid"] +snowflake_id = ["once_cell"] +random_62_id = ["rand","rand_distr"] +time_64_id = ["base64"] + +[lints] +workspace = true diff --git a/crates/rust-mcp-extra/README.md b/crates/rust-mcp-extra/README.md new file mode 100644 index 0000000..2adf1d4 --- /dev/null +++ b/crates/rust-mcp-extra/README.md @@ -0,0 +1,54 @@ +# rust-mcp-extra + +**A companion crate to [`rust-mcp-sdk`](https://github.com/rust-mcp-stack/rust-mcp-sdk) providing additional implementations for core traits like `IdGenerator`, `SessionStore` and `EventStore`.** + +----- +## 🔢 ID Generators +Various implementations of the IdGenerator trait (from [rust-mcp-sdk]) for generating unique identifiers. + +| **🧩 All ID generators in this crate can be used as `SessionId` generators in [rust-mcp-sdk](https://github.com/rust-mcp-stack/rust-mcp-sdk)).** + + +| Generator | Description| +| -------------- | ----- | +| **NanoIdGenerator** | Generates short, URL-safe, random string IDs using the [`nanoid`](https://crates.io/crates/nanoid) crate. Ideal for user-friendly, compact identifiers. | +| **TimeBase64Generator** | Encodes the current timestamp (in milliseconds) into a URL-safe Base64 string. Useful when IDs should be time-sortable and compact. | +| **RandomBase62Generator** | Generates alphanumeric [A–Z, a–z, 0–9] strings using random bytes. A simple, reliable option for random unique IDs. | +| **SnowflakeIdGenerator** | Inspired by Twitter’s Snowflake algorithm. Generates 64-bit time-ordered IDs containing timestamp, machine ID, and sequence. Best for distributed or high-throughput systems. | + + +### How to use +Provide an instance of your chosen ID generator in the **HyperServerOptions** when initializing the server. + +For example to use **SnowflakeIdGenerator** : + +```rs +use rust_mcp_extra::id_generator::SnowflakeIdGenerator; + + +let server = hyper_server::create_server( + server_details, + handler, + HyperServerOptions { + host: "127.0.0.1".to_string(), + session_id_generator: Some(Arc::new(SnowflakeIdGenerator::new(1015))), // use SnowflakeIdGenerator + ..Default::default() + }, +); + +``` + +----- + +## 💾 Session Stores + +`SessionStore` implementations are available for managing MCP sessions effectively. + +🔜 Coming Soon + +----- + +## 💽 Event Stores +`EventStore` implementations to enable resumability on MCP servers by reliably storing and replaying event histories. + +🔜 Coming Soon diff --git a/crates/rust-mcp-extra/src/http_adaptors.rs b/crates/rust-mcp-extra/src/http_adaptors.rs new file mode 100644 index 0000000..4481404 --- /dev/null +++ b/crates/rust-mcp-extra/src/http_adaptors.rs @@ -0,0 +1 @@ +//! This module provides utility functions for converting between http::Request / http::Response types and framework-specific request/response types. diff --git a/crates/rust-mcp-extra/src/id_generator.rs b/crates/rust-mcp-extra/src/id_generator.rs new file mode 100644 index 0000000..451ddc0 --- /dev/null +++ b/crates/rust-mcp-extra/src/id_generator.rs @@ -0,0 +1,19 @@ +//! This module provides implementations of various ID generators, +//! which can be used for generating `session_id`s in MCP servers. +#[cfg(feature = "nano_id")] +mod nano_id_generator; +#[cfg(feature = "random_62_id")] +mod random_base_62_id_generator; +#[cfg(feature = "snowflake_id")] +mod snow_flake_id_generator; +#[cfg(feature = "time_64_id")] +mod time_base_64_id_generator; + +#[cfg(feature = "nano_id")] +pub use nano_id_generator::*; +#[cfg(feature = "random_62_id")] +pub use random_base_62_id_generator::*; +#[cfg(feature = "snowflake_id")] +pub use snow_flake_id_generator::*; +#[cfg(feature = "time_64_id")] +pub use time_base_64_id_generator::*; diff --git a/crates/rust-mcp-extra/src/id_generator/nano_id_generator.rs b/crates/rust-mcp-extra/src/id_generator/nano_id_generator.rs new file mode 100644 index 0000000..a50ec2b --- /dev/null +++ b/crates/rust-mcp-extra/src/id_generator/nano_id_generator.rs @@ -0,0 +1,70 @@ +//! Short (Smaller than UUID), URL-safe, Customizable alphabet, Cryptographically secure + +use nanoid::nanoid; +use rust_mcp_sdk::id_generator::IdGenerator; + +/// A NanoID-based ID generator that produces short, URL-safe, unique strings. +/// +/// This generator is well-suited for cases where: +/// - You want compact, human-friendly IDs +/// - UUIDs are too long or verbose +/// - You don't need time-based or ordered IDs +/// +/// Internally uses the `nanoid` crate to generate secure, random IDs. +/// +/// # Example +/// ``` +/// use rust_mcp_extra::{id_generator::NanoIdGenerator,IdGenerator}; +/// +/// let generator = NanoIdGenerator::new(10); +/// let id: String = generator.generate(); +/// println!("Generated ID: {}", id); +/// assert_eq!(id.len(), 10); +/// ``` +pub struct NanoIdGenerator { + size: usize, // number of characters in the ID +} + +impl NanoIdGenerator { + /// Creates a new Nano ID generator. + /// + /// # Arguments + /// * `size` - Length of the generated ID (default: 21 if unsure) + pub fn new(size: usize) -> Self { + Self { size } + } +} + +impl IdGenerator for NanoIdGenerator +where + T: From, +{ + fn generate(&self) -> T { + let size = self.size; + let id = nanoid!(size); + T::from(id) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn generates_correct_length_id() { + let generator = NanoIdGenerator::new(12); + let id: String = generator.generate(); + assert_eq!(id.len(), 12); + } + + #[test] + fn generates_unique_ids() { + let generator = NanoIdGenerator::new(8); + let mut seen = std::collections::HashSet::new(); + + for _ in 0..1000 { + let id: String = generator.generate(); + assert!(seen.insert(id.clone()), "Duplicate ID: {}", id); + } + } +} diff --git a/crates/rust-mcp-extra/src/id_generator/random_base_62_id_generator.rs b/crates/rust-mcp-extra/src/id_generator/random_base_62_id_generator.rs new file mode 100644 index 0000000..1fcbe00 --- /dev/null +++ b/crates/rust-mcp-extra/src/id_generator/random_base_62_id_generator.rs @@ -0,0 +1,87 @@ +//! Short, URL-safe, No collisions if length is sufficient +//! Needs collision handling if critical + +use rand::Rng; +use rand_distr::Alphanumeric; +use rust_mcp_sdk::id_generator::IdGenerator; + +/// A random Base62 ID generator. +/// +/// Generates short, random alphanumeric strings composed of [A-Z, a-z, 0-9]. +/// Useful when you want compact, URL-safe random IDs without needing +/// time-based ordering. +/// +/// # Example +/// ``` +/// use rust_mcp_extra::{id_generator::RandomBase62Generator,IdGenerator}; +/// +/// let generator = RandomBase62Generator::new(12); +/// let id: String = generator.generate(); +/// println!("Generated Base62 ID: {}", id); +/// ``` +pub struct RandomBase62Generator { + size: usize, +} + +impl RandomBase62Generator { + /// Creates a new random Base62 ID generator. + /// + /// # Arguments + /// * `size` - Length of the generated ID. + pub fn new(size: usize) -> Self { + Self { size } + } +} + +impl IdGenerator for RandomBase62Generator +where + T: From, +{ + /// Generates a new random Base62 ID string. + /// + /// The ID consists of randomly selected alphanumeric characters (A-Z, a-z, 0-9). + fn generate(&self) -> T { + let id: String = rand::rng() + .sample_iter(&Alphanumeric) + .take(self.size) + .map(char::from) + .collect(); + + T::from(id) + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn generates_non_empty_id() { + let generator = RandomBase62Generator::new(16); + let id: String = generator.generate(); + assert_eq!(id.len(), 16); + assert!(!id.is_empty()); + } + + #[test] + fn generates_unique_ids() { + let generator = RandomBase62Generator::new(8); + let mut seen = std::collections::HashSet::new(); + + for _ in 0..1000 { + let id: String = generator.generate(); + assert!(seen.insert(id), "Duplicate ID generated"); + } + } + + #[test] + fn only_alphanumeric_characters() { + let generator = RandomBase62Generator::new(50); + let id: String = generator.generate(); + + assert!( + id.chars().all(|c| c.is_ascii_alphanumeric()), + "ID contains non-alphanumeric chars" + ); + } +} diff --git a/crates/rust-mcp-extra/src/id_generator/snow_flake_id_generator.rs b/crates/rust-mcp-extra/src/id_generator/snow_flake_id_generator.rs new file mode 100644 index 0000000..39942ec --- /dev/null +++ b/crates/rust-mcp-extra/src/id_generator/snow_flake_id_generator.rs @@ -0,0 +1,166 @@ +//! Medium size ,Globally unique , Time-sortable , Compact (64 bits), +//! Use case: Distributed systems needing high-throughput, unique IDs without collisions. +//! [ timestamp (41 bits) | machine id (10 bits) | sequence (12 bits) ] + +use once_cell::sync::Lazy; +use rust_mcp_sdk::id_generator::IdGenerator; +use std::sync::atomic::{AtomicU64, Ordering}; +use std::time::{SystemTime, UNIX_EPOCH}; + +/// Epoch (customizable to reduce total bits needed) +static SHORTER_EPOCH: Lazy = Lazy::new(|| { + SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("invalid system time!") + .as_millis() as u64 +}); + +/// A Snowflake ID generator implementation producing 64-bit unique IDs. +/// +/// Snowflake IDs are composed of: +/// - A timestamp in milliseconds since a custom epoch (usually a fixed past time), +/// - A machine ID (or worker ID) to differentiate between nodes, +/// - A sequence number that increments within the same millisecond to avoid collisions. +/// +/// Format (64 bits total): +/// - 41 bits: timestamp (ms since SHORTER_EPOCH) +/// - 10 bits: machine ID (0-1023) +/// - 12 bits: sequence number (per ms) +/// +/// This generator ensures: +/// - Uniqueness across multiple machines (given unique machine IDs), +/// - Monotonic increasing IDs when generated in the same process, +/// - Thread safety with internal locking. +pub struct SnowflakeIdGenerator { + machine_id: u16, // 10 bits max + last_timestamp: AtomicU64, + sequence: AtomicU64, +} + +impl SnowflakeIdGenerator { + pub fn new(machine_id: u16) -> Self { + assert!( + machine_id < 1024, + "Machine ID must be less than 1024 (10 bits)" + ); + SnowflakeIdGenerator { + machine_id, + last_timestamp: AtomicU64::new(0), + sequence: AtomicU64::new(0), + } + } + + fn current_timestamp(&self) -> u64 { + let now = SystemTime::now() + .duration_since(UNIX_EPOCH) + .expect("invalid system time!") + .as_millis() as u64; + + now - *SHORTER_EPOCH + } + + fn next_id(&self) -> u64 { + let mut timestamp = self.current_timestamp(); + + let last_ts = self.last_timestamp.load(Ordering::Relaxed); + + let sequence = if timestamp == last_ts { + // same millisecond — increment sequence + let seq = self.sequence.fetch_add(1, Ordering::Relaxed) & 0xFFF; // 12 bits + if seq == 0 { + // Sequence overflow — wait for next ms + while timestamp <= last_ts { + timestamp = self.current_timestamp(); + } + self.sequence.store(0, Ordering::Relaxed); + self.last_timestamp.store(timestamp, Ordering::Relaxed); + 0 + } else { + seq + } + } else { + // new timestamp + self.sequence.store(0, Ordering::Relaxed); + self.last_timestamp.store(timestamp, Ordering::Relaxed); + 0 + }; + + // Compose ID: [timestamp][machine_id][sequence] + ((timestamp & 0x1FFFFFFFFFF) << 22) // 41 bits + | ((self.machine_id as u64 & 0x3FF) << 12) // 10 bits + | (sequence & 0xFFF) // 12 bits + } +} + +impl IdGenerator for SnowflakeIdGenerator +where + T: From, +{ + fn generate(&self) -> T { + let id = self.next_id(); + T::from(id.to_string()) // We could optionally encode it to base64 or base62 + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn generates_id() { + let generator = SnowflakeIdGenerator::new(1); + let id: String = generator.generate(); + assert!(!id.is_empty(), "Generated ID should not be empty"); + } + + #[test] + fn generates_unique_ids() { + let generator = SnowflakeIdGenerator::new(1); + let mut ids = std::collections::HashSet::new(); + for _ in 0..1000 { + let id: String = generator.generate(); + assert!(ids.insert(id), "Duplicate ID generated"); + } + } + + #[test] + fn ids_are_monotonic_increasing() { + let generator = SnowflakeIdGenerator::new(1); + let mut prev_id = 0u64; + + for _ in 0..1000 { + let id: String = generator.generate(); + let current_id: u64 = id.parse().expect("ID should be a valid u64"); + assert!( + current_id > prev_id, + "ID not strictly increasing: {} <= {}", + current_id, + prev_id + ); + prev_id = current_id; + } + } + + #[test] + fn handles_sequence_rollover() { + // Try to simulate a sequence rollover by generating many IDs quickly + // just ensuring it doesn't panic + let generator = SnowflakeIdGenerator::new(1); + for _ in 0..2000 { + let _id: String = generator.generate(); + } + } + + #[test] + fn respects_machine_id_limit() { + // Valid machine ID + let _ = SnowflakeIdGenerator::new(1023); + } + + #[test] + #[should_panic(expected = "Machine ID must be less than 1024")] + fn rejects_invalid_machine_id() { + // Invalid machine ID (greater than 1023) + let _ = SnowflakeIdGenerator::new(1024); + } +} diff --git a/crates/rust-mcp-extra/src/id_generator/time_base_64_id_generator.rs b/crates/rust-mcp-extra/src/id_generator/time_base_64_id_generator.rs new file mode 100644 index 0000000..a04fede --- /dev/null +++ b/crates/rust-mcp-extra/src/id_generator/time_base_64_id_generator.rs @@ -0,0 +1,111 @@ +//! Short, Fast, Sortable, Shorter than UUID +//! Not globally unique + +use base64::Engine; +use base64::engine::general_purpose; +use rust_mcp_sdk::id_generator::IdGenerator; +use std::time::{SystemTime, UNIX_EPOCH}; + +/// A time-based ID generator that produces Base64-encoded timestamps. +/// +/// This generator encodes the current timestamp in milliseconds since UNIX epoch +/// as a URL-safe Base64 string without padding. Optionally, it can prefix the ID +/// with a static string for better readability or namespacing. +/// +/// # Example +/// ``` +/// use rust_mcp_extra::{id_generator::TimeBase64Generator, IdGenerator}; +/// +/// let generator = TimeBase64Generator::new(Some("ts_")); +/// let id: String = generator.generate(); +/// println!("Generated time-based ID: {}", id); +/// ``` +pub struct TimeBase64Generator { + prefix: &'static str, +} + +impl TimeBase64Generator { + /// Creates a new time-based Base64 ID generator with an optional prefix. + /// + /// # Arguments + /// * `prefix` - Optional static string to prepend to generated IDs. + pub fn new(prefix: Option<&'static str>) -> Self { + Self { + prefix: prefix.unwrap_or(""), + } + } + + /// Returns current timestamp in milliseconds since UNIX epoch. + fn current_millis() -> u64 { + let now = SystemTime::now(); + let duration = now + .duration_since(UNIX_EPOCH) + .expect("invalid system time!"); + duration.as_millis() as u64 + } +} + +impl IdGenerator for TimeBase64Generator +where + T: From, +{ + /// Generates a new time-based Base64 ID. + /// + /// The ID is the current timestamp encoded as a URL-safe Base64 string (no padding), + /// optionally prefixed by the configured prefix. + fn generate(&self) -> T { + let timestamp = Self::current_millis(); + let bytes = timestamp.to_le_bytes(); + let encoded = general_purpose::URL_SAFE_NO_PAD.encode(bytes); + + if self.prefix.is_empty() { + T::from(encoded) + } else { + T::from(format!("{}{}", self.prefix, encoded)) + } + } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn generates_non_empty_id() { + let generator = TimeBase64Generator::new(None); + let id: String = generator.generate(); + assert!(!id.is_empty(), "ID should not be empty"); + } + + #[test] + fn generates_id_with_prefix() { + let prefix = "ts_"; + let generator = TimeBase64Generator::new(Some(prefix)); + let id: String = generator.generate(); + assert!(id.starts_with(prefix), "ID should start with prefix"); + } + + #[test] + fn ids_change_over_time() { + let generator = TimeBase64Generator::new(None); + let id1: String = generator.generate(); + std::thread::sleep(std::time::Duration::from_millis(2)); + let id2: String = generator.generate(); + assert_ne!(id1, id2, "IDs generated at different times should differ"); + } + + #[test] + fn base64_decodes_to_timestamp() { + let generator = TimeBase64Generator::new(None); + let id: String = generator.generate(); + + // Decode the base64 (without prefix) + let decoded = base64::engine::general_purpose::URL_SAFE_NO_PAD + .decode(&id) + .expect("Should decode base64"); + + // Convert bytes back to u64 timestamp + let timestamp = u64::from_le_bytes(decoded.try_into().unwrap()); + assert!(timestamp > 0, "Timestamp should be positive"); + } +} diff --git a/crates/rust-mcp-extra/src/lib.rs b/crates/rust-mcp-extra/src/lib.rs new file mode 100644 index 0000000..f4a3d0e --- /dev/null +++ b/crates/rust-mcp-extra/src/lib.rs @@ -0,0 +1,5 @@ +pub mod http_adaptors; +pub mod id_generator; +pub mod sqlite; + +pub use rust_mcp_sdk::id_generator::IdGenerator; diff --git a/crates/rust-mcp-extra/src/sqlite.rs b/crates/rust-mcp-extra/src/sqlite.rs new file mode 100644 index 0000000..12e737c --- /dev/null +++ b/crates/rust-mcp-extra/src/sqlite.rs @@ -0,0 +1,7 @@ +mod sqlite_event_store; +mod sqlite_session_store; + +#[allow(unused)] +pub use sqlite_event_store::*; +#[allow(unused)] +pub use sqlite_session_store::*; diff --git a/crates/rust-mcp-extra/src/sqlite/sqlite_event_store.rs b/crates/rust-mcp-extra/src/sqlite/sqlite_event_store.rs new file mode 100644 index 0000000..1bda222 --- /dev/null +++ b/crates/rust-mcp-extra/src/sqlite/sqlite_event_store.rs @@ -0,0 +1 @@ +//! This module serves as a placeholder for implementing a SQLite-backed event store. diff --git a/crates/rust-mcp-extra/src/sqlite/sqlite_session_store.rs b/crates/rust-mcp-extra/src/sqlite/sqlite_session_store.rs new file mode 100644 index 0000000..a6f97a3 --- /dev/null +++ b/crates/rust-mcp-extra/src/sqlite/sqlite_session_store.rs @@ -0,0 +1 @@ +//! This module serves as a placeholder for implementing a SQLite-backed session store. diff --git a/examples/hello-world-server-streamable-http/src/main.rs b/examples/hello-world-server-streamable-http/src/main.rs index 3923a6d..c4fd373 100644 --- a/examples/hello-world-server-streamable-http/src/main.rs +++ b/examples/hello-world-server-streamable-http/src/main.rs @@ -1,19 +1,16 @@ mod handler; mod tools; -use std::sync::Arc; -use std::time::Duration; - +use handler::MyServerHandler; use rust_mcp_sdk::event_store::InMemoryEventStore; use rust_mcp_sdk::mcp_server::{hyper_server, HyperServerOptions}; - -use handler::MyServerHandler; use rust_mcp_sdk::schema::{ Implementation, InitializeResult, ServerCapabilities, ServerCapabilitiesTools, LATEST_PROTOCOL_VERSION, }; - use rust_mcp_sdk::{error::SdkResult, mcp_server::ServerHandler}; +use std::sync::Arc; +use std::time::Duration; use tracing_subscriber::{layer::SubscriberExt, util::SubscriberInitExt}; pub struct AppStateX { From d67f1125ef706984bff07479ffc256a5fe840f76 Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Mon, 13 Oct 2025 16:43:26 -0300 Subject: [PATCH 6/9] fix: update release-pr workflow --- .github/workflows/release-pr.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml index 9963d87..3e0a4c9 100644 --- a/.github/workflows/release-pr.yml +++ b/.github/workflows/release-pr.yml @@ -49,6 +49,7 @@ jobs: echo "Updating root Cargo.toml" sed -i -e "s/rust-mcp-macros = { version = \"[^\"]*\",/rust-mcp-macros = { version = \"$(grep '^version = ' crates/rust-mcp-macros/Cargo.toml | cut -d' ' -f3 | tr -d '\"')\",/" \ -e "s/rust-mcp-transport = { version = \"[^\"]*\",/rust-mcp-transport = { version = \"$(grep '^version = ' crates/rust-mcp-transport/Cargo.toml | cut -d' ' -f3 | tr -d '\"')\",/" \ + -e "s/rust-mcp-extra = { version = \"[^\"]*\",/rust-mcp-extra = { version = \"$(grep '^version = ' crates/rust-mcp-extra/Cargo.toml | cut -d' ' -f3 | tr -d '\"')\",/" \ Cargo.toml git add ./Cargo.toml From 5aca7a1a8525849776ae98a091f444bd7f0f1681 Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Mon, 13 Oct 2025 16:48:17 -0300 Subject: [PATCH 7/9] chore: update rust-mcp-extra version in workspace --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index 528bb95..791d4f9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,7 +23,7 @@ members = [ rust-mcp-transport = { version = "0.6.0", path = "crates/rust-mcp-transport", default-features = false } rust-mcp-sdk = { path = "crates/rust-mcp-sdk", default-features = false } rust-mcp-macros = { version = "0.5.2", path = "crates/rust-mcp-macros", default-features = false } -rust-mcp-extra = { version="0.1", path = "crates/rust-mcp-extra", default-features = false } +rust-mcp-extra = { version="0.1.0", path = "crates/rust-mcp-extra", default-features = false } # External crates rust-mcp-schema = { version = "0.7", default-features = false } From ba4fe722e8c449621cdbcd93e8c2a44ff43a407a Mon Sep 17 00:00:00 2001 From: Ali Hashemi Date: Mon, 13 Oct 2025 19:03:09 -0300 Subject: [PATCH 8/9] fix: update incorrect readme for streamable http examples --- .../simple-mcp-client-streamable-http.png | Bin 0 -> 289553 bytes .../Cargo.toml | 1 + .../Cargo.toml | 1 + .../README.md | 16 ++++++++-------- .../simple-mcp-client-sse.png | Bin 0 -> 289553 bytes .../README.md | 16 ++++++++-------- 6 files changed, 18 insertions(+), 16 deletions(-) create mode 100644 assets/examples/simple-mcp-client-streamable-http.png create mode 100644 examples/simple-mcp-client-streamable-http-core/simple-mcp-client-sse.png diff --git a/assets/examples/simple-mcp-client-streamable-http.png b/assets/examples/simple-mcp-client-streamable-http.png new file mode 100644 index 0000000000000000000000000000000000000000..37a80fb18f3d4feba333c369cb921e2d286c717c GIT binary patch literal 289553 zcmeFZcT`i~w=araK*U0?Dgx4bFHuoYdhbPgC-h!yfJhVRH6kTI=p}Se1VZl+AQU0e z384f6goGFT{_Z{RopZ+dYIG7=IJ zir24RXp@j!+a)0(eRT6O@eJ8*Zg=88QukLzUL+*^Y!`o*{0jiSBqR?=UcY#z>p#0a zeqcsd4$mx{Byj*F{3zy4VC zO3&LbmEgh3*u5V?XujUBXXU(Jd^T5741)L2xKYm5CTVHuHPa~1^Q@q9UU`oQMxqhK zPrky?oqvvAk-xkB_vmfso%Mg6y7k|CDyACy@(RZM5@BJDHzh%j_i!JRlryFi$UUEP z;VL>()0^IN^OFnaO$nMg7Z;Q@3J^LMwz0h<( zHL`v_x%d_d$*Y^ukFNZ46hoeB8W7ZkJI)GXj_g==Do*`(_x*nUjV(*-b_ zsXUvTZ-3rlWnA7uIy#AfdU%DQ={H(J%M_VuzQdjLgpJ@sXWvT-3-zzFUU+3F=&E$( zC@$dIX^^uhcdW4^)X>B@W{@wUkVC;tLFB{ujgD7j3Y&J(X1WXVEXjI@R|t2btUD&T z*A^?3e`d*Cv_W_Grnlmm#M9zeOw8q8@J~Uy%Hi?#>i#zo)X6?4FOyNIm_+B<*#Vkp zz0tcBbQFb`Di-?{Ao^Sg1fs@MnF%W)D0kzcA;q2zSp~t4*w3U@U@5i1h|hh}A9_pm zxmsoG+7?(CV!5A;802Z$uO`*r-)!h`a@81ovOD5vY^)aX?54M@+>3*ZfN2ay4jqfww-!9if zV9C|`cuI?kT|IfXQ5*6c@}|K~?KR2D#qOKBN4?q}%+9SK`xl09_4BF$b;bzBOym81 zp6kdIlM8>meb_DMp(rYZ-h~HY31+zuLrL@4wl|_iC+vjNZH3e0>-imBl7O&lrr?lY ze}vZ}Gfkcc8@{SsFoWp#TX^^~WcHKId~Jt*N`(*7ZJNK{FTj!$3Oq z@tRpDP#xiP)cx>ymiw$6XK<^kS$k@(`nmD!U7gOUrso6~ijpMMWdcpX(TU6Xc zY(S|q%Ji4?Sb>z5s=+ODC#x6Z`t5{}g8d6;S1~Aq>W*<;e7&2ls>4fLSL>RkZQ$sJ zXoBS>H>j;&M%M;Qjp%NCxVrRoLaC1PJici}>i8wkw^}l)?AZ>Q7P@hLm&V}}qo`D3WOpd=UpR&Y>fq{ub zG&~Y_1M`Su+(DNJ;g;>?6q-EM)zvj5JtK3eW>4Ou%T8Mvo#e2L3}c?q4*B zE^~qAGYhzvs?j}NYHwR;`u)@bVK^yDO=U2>CVk?+VfFp}$N1EPwJHEnf@3U>$9cMR%B^s%Cx&YyRt5lAPMQ^B-21CjK>sfAXE98Yt@pj91QQwN@}&67ujYf7`TF5hjx9w)D& zmYSAKlX$qs%a4eA<=ur-SuNTg_950PtG!?MqO^#kS?~uKSMvIzFC?T(Um*$Qxy53r z7nWurH6aYq#QyAiQ{Kif-)EJ#eO|f%AFrz1E%Ae0lVP_NQ#aC3fmBuX($x6}FTbc*3Ka+mg|2P$(KF1iJx!mLrWKd&Kb5i1o%HQ~S|&Ho*FRFFlc#l1_jfXU z%{KCkGkVh4WO3V<8+j9hjf)~n>79G@>q_TS7=9uvAt6BX+Of8j`K!sijEqx~ zR&b;`WVC1-yL+^imSZhiCzjRr$P<9@8cI2Pa@yDsYdr2#U%FEP_1T^%I$8QVYHB^q zBXjihCD!pR!7V-=z3uvCqTV*F%T}=D$yl1`0-zYk%Q5}5I|V8ptz2-2;f)1><0+8b zyTq9x8?tE;RJw+I=Uks7bI0nL&4v5ENMB~o(o!=^)PT9RCp#sZD1Eb*tWyLAymVE8 zczltsZ=Ek|f(kwEfiDi%)RuP7o4K~Tl$4l!6A?uv(BxHlsZMa)VqZ%$B!ACSWxR6j zqRp?}-+S0_yZyF83GeKU#SH_TC}@Rf1+&P=W##JT`?qSH4oS@Vtu1(z*2?d0)>g#L z%~^@kWudv`ZBPk!JT{oJgDA;Yrr|0yFp7)z9!!b^M!b2f!o+-+YCTg>+BEExui&b3 z!6V5Y_#jlV!bnxSbn0l60pXh4p@0v+9Jf;Eq}Q?jiPSo;SwMa6h8lR8v2~$;0a`Mi zs=%^*^y<@$OEIvL?;{n>ra)>xlg0iabe?jd3>*!=cpS-C2fG2Av7^yo(X{4LEkIs8 zUmra=F)=$)wOQG$&PcNj)}Lu(S)ulc19I^eV-5~Axv1}VE7B(GiitBOd8VhP@;~{Z zRG^(UNCWN<=wt+KNxSK=?;ee9Fzv`rPFSsbcr5p2boU6Je|Z4N4M3sXmOBR20~d4T z>+@4ZxeFqd;4dD!!rl)mhj;8vp$7-ATbr-~I)-5i99y>>yp0hzdToVaeTdnC=U7*3 zZBrBy^-%Ny*F$Bx#8v$~;!r%?yG1!lULh`CH#H%)xAG4_6T3Kv-cTtD3s9ogwJg=g zOlWsDH1j?PqXzdLzNM+ww=iSwYZBrrqpyB>riF1`u~|GO&7 z>rk}1Xn;({RNh^ZuhM#EFM#x?Jf1H4{euKuXs2)*)iEBLC_EFxwKq@1@ezDdf*1fy z*I&Ub2x-0ZY&@W9S*1}J>J|PFCFXtM>!-76xgujkziEq*UB-uCLUWwzv>&F{*Vi+u zxt5g`R_`0*VkkN54hPj>++m9=1< zp1znv9W;QS7|hrg=cb}Iyi@{<2Pb@o;ss??haKI-oES_fuCLv_-`$>D)itQLI>CY) zs?ptP;Puv1Q_zWiDBEcP)^Qf&hSZt)>lNkZmqN3HOfSNOw-_OX8{n{qHo~du$1>%Y zzEXf<-Za!HeTH2`&m@9p7neN_2io)eaqdp%yH4>`@mv>I-W((O4K5By{{Iow{+EG! z-vTWKW%3jVHhIXiB%g%{r@Jf#6i=3zOhJx?01 zJgAv@^q=KCf1OMs$W-}6`0wG{&W6e-p5NO2G`|f?MHkpoDYwcJn3=3jxBl(uzc=msZ_XUI}|JBGv2&NqNkhrtedIoC#=yN7f7A4$boHG>FTI+4(diHrXeJllY4aS%;8% z7iy>(yN_P``RvlOcY#ZemRd&7EFD8Fd*hgI7~fLtrdp5P-OI~5s;#dV;aw~6ptX2n z&;#*Q=@Z^pJl0e-4ba*i*n6oYOc~Nr0J|J|_vcU2QT^yT%4FQfYma%eI9!e+ZoC|3 z0-dg?w*?WODH-2Lv+f@daJHNv1M7rI?!>TCv&(*rT}kElKPbbB2z$}%|IU&R*r)K2 z@l_m~aHbLBScByE+mWBE&DTcf-uy%n-R$0C`cOva+c>M*Bt;?32V*cbbc?Ky&Xw4H z)*>+Q{UCcDiDX;8Bm2 zIO}3HXp~NuCU2uP$efIYSufc{`|r?tdyq~3ZfN~@J>O$*dAx8nWumq;qPuW<{ZqsA z&G6?Bw`JX*h{>@HpYo|zwgivdR=Es%}no92VJ90@kZA{tiNLqNGV7K(`TzSXl{3(3UHT6Kj80h z5!PEvHomb#=h!M2{QQdOPR42VX2j=NU&vvWy_=h-k(zlizE}}V!NhE&qq(4sa8L2$ zO6vRl@ri=9imT%xwi*veA*y^t$(OT)H5<et~QO zU8_a;q_5DUJOOn3T6d>V)sfucVJxr}Z@Is83+zW~X5JWV>8+cF94g&D^8tnWh>GdV ziTEAW2JINzE)qZh0;&zPKzHZ2vuHZu1g)X5N+Wv`-HbnM>rg4Mr4~3F&dA6JOpQy( zQ%N0aMXmCn&KJz}%}X9MFR4HR<4t(Q?x52qmudD~V{|_8O0;>PkUU!sQ^xAXERX>UyjAtAhW$sd z)D&6IJcCc|f>S2uM$Q`AiWZ_P8RtQgR{L~IB$=_U-EmhnksG0-^9DYEhe?p6=XK*@ z)e{ojFC_JRw+sgkGXV0UgzA};sUh@9mW%;6Q`;4?0u&zuYdj?M{3!1ojyqk6vfrD2WZm)Egi_Kr$P zIUBMQJpnmER1-TvD3{wW))lO5D-i67)k=S!J5dDlR(0_hQlc5YLq^No%kn-2<7$%? zgKk*h#&5~lXB13k9yLpIe2^2~FgYUEIIOa~o7n9Q9PXq(_-J6Vnb~O)80FI>WeQxu zct{ImTeC}B3_~mk>0#bQyIVEqadRPZsQ@qgjt=@E5PV^wb#G^Z#a{XmSwY9tanF~9 zDfFuNIl(zq-ZO7#xH-3$+fT!3ugWD^-#WTn@g-Hkstw`GK%g8EXvbO&cV1IbB}*yZ zYsaB}aUOiuz73|OO0lt7orFvHhV@fGQeZHjYxilQUveapqU$0#cno-z)rLK@%*OH< z%S{U5K{6;8N1?~y{NXI2J>B<-wayyVbTHNItj8&HjkuAgbzoQuX8hxxT-IIE*hb6A z&ud}lg=rdQUMpS85WAX!`7*PDZE0V>1>eJjiTgf2L+9SCcUc}~Db8BchP77g-T}?Z zOFMdpb$7zCwYfJbDH*<8A`Ve0TzPVb(i%zwe-w|F&_k@=xyJcIAn5e=;_kO-*7g%n zJ-*vYG-}1K^hDGuIQUI)=UGq%mwblayoaUk7&~oT4xq~ybKdq$7LpaVDAv)K<-U1{ zVqN5sNf5}o5uw2p@-sH|g_@dblZ)@>>O3*-%4V=G0-g?U(jtsw`#~nmB5bc6x+#I> z8iYSGOD%yXHIVQc(3%x%tDO7*ycvteJ@2UQ7U_0z*nZ;@?EX8_*1wZ|a7d zx)vX0dh*>>aWV-)b903}-X^6W+ohyhZM#HzMhcc&P%d=-#&~;xG>RO|Oh9AfKwH%L zwB0(>l5IYVcWUz~*^r$8e$^t=jJe=2+UTpFMxj8qU0sBeFeEgO%H8!Z^Ww zWW6>j+BLnWDz>>Zn!c;=8ZE#>1%vT;87U&sjuC)KkcI6_${&)F^QsNwcMd6es>#9^ zM~i0e^AoztpvQ*`kZRw@GU_qP=e}WtpXD{}SjFq5cnhw}I4XYr+xi zElz)#7|ooR*?-*|UG8C0RmZ#IIV|&_P^~AvFu8W)kVTO&JR;JJQ;XqnU2AmSnSg|x z2c9+>bb&dmJ%P9l9i_PJJNM}g;uG>RW>3fW+d9TB(Z@#bG%FrA^lf(xhqiWy(r`Zk zB%GfB2^?9h#K32$;iwi7WHLLzXmPA$0?{hg;tM-f4_Dr}zuf-Y9vVHQz9XN~LXfHY za|*NQpYvT$gjw*smf^~(G~$~gPNR$#{wC9v+0etonSgHNcMft1>~ zWKH3Ea9S)>Pj@b)C2PUTNyx>2U*P$NdFk>&F7-hpVn%QzB|l!??*Bxo5c@pQCF-fI zdX=E*(Ll#kg1+@;sth3X_*_2pSVKKG8N%mS?0V-jX?)5l4K62&XVo=$2}E4@eAW;k zR)S0Ou6s6=Xod-)fgIWE{+toY zGQJSsdnZOUCd&aOmvxAfz(`{S*fW%U8YO>H7}FQ1{lGi z%vl=c=PG`VH3%#2;jTT8tM+4=!GU5sp!RPofQH|!UoYvw0%KxZjRTsnhmoMB=LaKA ze9NMc%|!ObAnowjA};G==ZiS<@tyUw!4wI?sd>DJ$48M!p*-uHfX%ipa(*g5^=x7F zTbIA;jQQ=z+X&Z9PKpIrx+RWIoCy4~%zZ{6WYbO0&q@pjg&w&o z=p2kr3{Zf8cd-!NzPCE5N~8qb$rPZKP_bqnZ1!Yo%1)d?4X`b%scrm_=2Ohg4fB)H zJbL2%ZEQku1m1voedGrh*w27UCb=(=M~pJ(12-QvZ)P-=A&!p1L`9`tZD22%a0};s zIW?a?iWGJHf;N&^CMwFbLZC&<&2ZPflrYlgO2QN*aJY$%#oWf#t(*hIsh8!r=paSwQvX~ZjL*k>8 zr)^Qvvr|q~1Vj3oH?xkG&tT&N=)~}vy0#aQa!4geb7yojwOR1zNOQD7B3n z8u6S-AsgBSyTtikAyK(<2PYaT=}Mhey4?cK30e7C;AOAMD3G=07w_ZN=wZ8` zfSHZ6l~GV=B6~u$57Fnp3z~vU+_+YPLfp0dsi#+Ge=;&?;%l=)g`pEf&4l^)b_|V2 zIVL7*kGp7f)fSt*i$fmj2^$gS(z`UpBaCa_hZa81Rv2iBnH>p z*}c9lwMry^)<=hOB-+td}L|kQlruol00i1*s$np*%yThLkI#7sdw6P5}Bq_ z+)7Gis!+dw9-5di*_mM0=zOweQ$ffaQ+kuzF(%R?k`HGkcq_|0eO;|Po+IYIcUNyN z>!>hOJX0}cpyzyjwDP5XyFTmTmUkV#l|C_7R#6GCm{aM{1oVG1kw1Ekxh9mOyi#qr zn5TR|V~B2-bu|6a#LsdI({J{(KGF3p`|m<5zrAhPoi>63_zn^^cHuXPZhyrwa(7Zf ze9~UD!2Zt}w!h5T{5;lpKHy5yhz|X`u353kMW?!)4Gw{$L%-qg(4!czDt&rmvYyzx zOQ&%o4+TXf9|%2E5B7=tg~__)IBaArT;y#$D8SOHv;O-nTvik2@MG4?iEpg7;)srU zM`4kXP_?uJE{~4N5%)zmXJ)x^$!$%oh`6=9m=+WjH?X0GPDvov<~xT}#{wyKUfvfr zTKkc6zz@G7DGW5=#erzua7xiCny-%x-z!40r{5^uVF75506~@0V#K*9q--Jv|ys$)0ubN%) zQ4JE|P>>RS39EMYR3T>W$kbsz$*f{u_%y;gGsi0e@H)S!>bu=ybEe%wwF@!XP0+c& z^|>#JL2bQ3vhlfF5pecsRhqzX!Iu+vJVz69pFO*D<2JL`+)ULgcb^yjYga>ssGjga zsDL2M6hNL}x%Tc7uyxm{*%xfu=vjr|$d8J$*5Dg(3G1!ey;E!d#nf-m)+$5CQ1@sk zh>=JQF~k-&qg&jT&eHM4jR5OMiMjHT;{OF5p6T{ zb)t9AUYVu^+@<>#wn^&;I2u9u&4j53Uy0)^2fV(hg?s__HUd zgF`Ss5%xoABj>lbXUD}T>}QkmNndAUnWPeu4UBwdvuz^^E)9s58mGcEd-8JL(mPYgYcZ#xLeF`pMonp2tZsea=EF!B%Vxa z+~<)BYwL`RA<#)E__*erTD|t8+_(W>RQjk7_H=h|&odl_2z`TstB>1Iaj%fD@Mg!` zW3zvfLc?EXI5Y5um^l^=vyJlzr|(bPY98AD*4hfK3?>G0Ys{5=`S;{4C+^gBz6&u+ zduwRok|4MU#Q6-TpW;XNfLMf^AXq!j zEb!+?Tc}B(Ef6qay!gkLC82i(-nzd|bTc#F3f81#fyYEi5Dvy^&s(;aVg=gfHO+r5 zJ|y~kmu(YOTpFLcHm)&;+;YxzsPrD)P8Z>@vt6O3O74CU&KVm`8*Rj!LZs_-v{d%> z40yG;Tv-!D#RmUjeJLz~}b;aLV1#nk15Tm6U;vPxsVK z689tY`n!w(kzdD!g*8kV3o09A1==M!W@!Rc=@xx%%w#uzZGH)8b=6oj7WQXK70M9} z9VnlV{Aj0|@kP)h_5J1$hpQ%6Bz)-;re+k0!{)BPt^kk__#V~ zml}K_jBx^S!}IMm=l7d(bG_dE8S$txLg+AQxE+o@yy9PZSxITr`nmIdliMtVJ8#xP zfa_>Vh=K@52qV4LAIyuTEqn2d>NXk4N*E@~TDTL|Gi^o8B-?kdwCql;7z<=)x>{yu z+lQ$%PjZ)?$1{12CVh(9qgWAJY(28X1$cAO6MsBK&2M?5C1ohHu)El!{VZ{@*Zz{! zxZT8x&H$km>PZW?Q}Y%N?N_hf`n&3`+4E2X+OdT=*3h40RY_3`!)yDt^VUhs&9`T+Fel8o%+xQQ3<In21#7R6*9F!A=M9x7SPLGPKijeyQ$i0rrYD+C{LY(pl9eu4nDfoJ!}xZN ztcYa$)fw8X93pZ0JpFr~k#e$d;Og;AJ%4@LfO4!dE4}Q_GI_tq0ff0atu3EKxvTCR zH$uR+bIWEF>vFSk#HRZoJkw42gHPX4w)^nX1A^Woio2q=vDd$n%B-p1BNx@1Ott-U z7+@2~<*%wcw;jb@7B~rsFF3>EzUCPbL+s}t6ky$P=>R_BLSEL2-;F@yykZmw(;Yx( z)S^uXr)@=!QKv<}%h5|w?^z7KOI6vPm&zEZThzVC)t}*)+)RnTbs<_2_Px(v*Y%S# z^p!Z2?)nj8AybHc+1eWu&3xZrpav`@*2vyfEM<@O{FyND@#VPOSqpRf=4GAes&5)9 zTtTO}k1??uryrioK_Aq1D{L8tokX2=>qu02Cd+m1-JV*kUG2?yzc2ow${L(mmHWC# zfj7YywSp4E2DK08Kne?hCZ^O?v)_{);e^^z8Hv7O+8SABX=5|kLG$`l4zN`ss z@zU{leF6ctSZ`okReVuujVBTP%z)+HQDp3(++1~_!>q_}ako>#qezpe#%5>Ns_Nfumplvm;~YB+h?!!VUK7Ua7*)BIYzc2TfvkmCkhm8<< z#rMg>i(9&D9iVJ+d5cyI8fk*{10wdyZrIIxG=4{Z=fr*efj@yZ%zl-Ri9xMxAf=pk zULXXlkmc|2P^_nF#4#Olr6#>Xonq4r-RhxTYco0N%~mRwM4XvWI z_&rSy69~X?fV0h?1;S1xT8}I4BTgF}j0x{B)iEt!I_Yu;kA6>XfJ6QqFeA**zx+dE zA77VtW5yN{*%>S`X-<;l;Fp%>6_=ia!60>$hQ|6_S%|PI4->7|jpHV&g;3&Znd?^+1a`C)!*g-TZJTudHEFQ#0RaCNVIrzS*DFRr(6ZdJI zjJ9oN_F#SQZ?V?bA&0JF-VZm~3c+d)oDl0t28`0QvBRB9|PM1{2Sv=HQQxWqJ1y&<1I1htr=VY3pr?s6V#J~O&XR1XbZ zW)_N7f%S~GFXFaW8B>&$B23DrYLPPtzgyFf#shHLizgdsyZLHf;z$IDtLEy~PKnVx z21(YssSwvo>)wWRB$4AajhPVWqs7XJf#$Ph>y*d@4oPC-h`1lSl|cr$j#= z(z5jKlkGci9*H>sQ$z6kVNTI~d4;jmvq15TK8-)D1Wa?5+z{M^lsX3~lcF=dmf-Q4 zxM3Fwz%6!0+edJ`xDg++EJ;B(`|SFfYms*<(3?_2#PIuhuk zjWjQhKL;rM85EPt9zvI1rNXcIB)NleSjwOP2&IDkV&5kpE$XLZ#s(w7WwMjQ?Eb`kv7lm4V#-b>r zk~!l#qOZlAl(3;Q_yPWPNra=d6ky{LBQLJ{#H&T)KrCWd2-VtPgp|ADT91&KjovDI z%(?phae*?|*=OhIzUFo(7onv5S#6d^(~XN*_Lh{C0tv|#t20~Z$`>zeK6FAnYfHP!7FBa^2Z!gme(Z*0iAzslZ`$Xrz zS>Ho{CJ_`AhO#_)C9jpB=e~gTKAfeU>!fy{Mfl-y(FfI;U5-+EjqI1IEOpAwCG7|k z8Q(uc_48Dx$`AJ^l&(6q$jwQoj7vAT@mPdjm?w9c`OTX&HI5~lin{WIT)L{yLv_;V zfL}KKVm357CT5O$`%PunZp497=WFQ@Q-Gt*@OnOtG{E4mMJ0d9HsfTIuP5_Af1Tq) z9r%|n2)-TrGzPU@|dXOXrL@B>mt&x{$vCye0^E<%DA@|EMeL`4zF+Zsn8 z5Pj1lgYKd%;uh=wOO)~-2--Z!WZ~~Uh(-~;-b0j!U}laz_9O^4FKu2FRpR#|D%y|t zWxDgxHp2BszEP8ZrT)hW81|8Lc`?VIFKMsdxOVm0W;i(frR}xwf|GD|8DAy`Av*f; z1nZU0FFmRfj!@3}{3oZG%p5w16Zjxe@?mEh_PTihYL=2x14O~E7&gjt+sv`kM#M#v zzy2gFTAP%g&HK7vYX8I+G9&Ebd;uk2=}>V%0v$=v<|+FKz&@pAvIwm1XEF8E>DFd60~Q zg_i}cXvIcC%O=xW+*I~qi>sWVFO9utk3NL_`tTgq&2;X&=nlDva7hGJ8{B)7-8XYY z`OSl8C+5Cpq)d)XQ!z5%rDe3VpuzsgoxsE}5j$&mzF{ya=3{C3EFggWhE80zeQRcA z@X)f7TT-tLMSZ4TpEW2nQVh7^H|D1fCtX9*OX_ zZ?5Dmg+|2F^JKE!|}vl zh|Ig*?@!Vhu z{aJ9-Fmca7DOl5Fq5kN`dPu4T^v&q|bcR@C-Z>}1oB_UIEPgor!MZyiwPm0A0&RU-o! zb55gks{($6`3sH1oMh+1V|QrXjb;ao0FN~cg(NHqwep?(9}Gk;;PCY8J9V>=4-L$; z_l3B{g*odr=d1+}D+fy4FQ0ej`E|iwO6}-A`6D#C)E>IuCLr!+g4*FGF! z(a?xrJU`NEU1+Z9Vz$+e%Wv+T)9oADPvnf7uj4cd?#C1(yGq8!YRp{YRrow6zd>6l z+32b7?hjP#VD~ZZ+}q`ok7Hxc=Yg!J4*1n!3Ae4&?k7}o2Ib?2Spq~@9_^yuT?&L{ zdp62GlKrz6iN146NUfKzG%i~Xt@5PI#*MePa7sRT8l3u%5COk^P+`A9<$eB*N5H~G z!|Uq9pYK#?1_|!?Liuw+?e;lG7l$DPXv&T*>F`7A2Rw>#GN54IqO6aniutmIMuD-d z?_Rg%zkKuN_zSkp;h9!ClJo=}irZBg26)a-rVeBYJ(C>Y+2fNaHQq^kX2?skH(@4; zHE*;U?cB2-I%$+Jtydj*@Pdyo;!l!yB-7(wp`kSC#;uK^`N-=fa&pj4J%Dom@E8FB zY@HPvnaQLcxjAUS&B~LtT#b^r!89~&Dcr$mrgba zzFYjy^b_152>bIp*P1%H?%BK0<(!7Jn@bN}Zi3f|+m=KK{%Lqry*u_kARGGvD3ZB& z3WMP&Stf}xC)29+vFJ6QLehHE!|BAZO3>2UzqU&mFI_q{0k%9ZwLc2i*_L{x11orK zYnu$-kNY5EuUZS#$oNvE`Gl7y8t>H={dIGbL0eDr^i&N2MaxmcRPW1-p+ zJBNiztn_%qDuy5i4ftEuFXIS$a8sx~dg-*AWyg=O$7$g@(yTi0=I*76<0ZGT9?QuHbnEL|nUaP;ZAC?eG zpOrVPcU*d(o)H(o`giBAjkwhVO}*IrbLA6--<5JOgxRyaL#|LFQMcI9*;|jA(L2 zyAzfiTU~VQN|$?vGv45sdsmhc?^pY=-bZqmrNaJ&wFkXVmA)irV<&1VOslR+6mJ2_}};JbRZ-yZ_?jHH7sik(m}-rFiTTNBEfq}k3 zLCtASj&*XT*Py7#kf0-Gn(Mh`Wo5Os)mXpLQ!Tm-brXk1Nimtg*=b)$-D5ErL8lrm zAzptA^siMlvcLayYGNvEcTaI?3AsYg!Xg`BwcH{l(n%g(Ydkpd8o8b5-SPZNm*0h; z${%BB`O5vr48UV}AxWgQ*4eL`E?PA`>v#y~78*)a;or>$SF^7W_h>sih*uS z-A>YH7Z(=VR+{IDx*E^94J49XwmX*Dr|a{}-pFx_0A%)#guoU%j6JANnTN@On+tO1 zO7_muH?LQg!cy0z?Ro74?LfR=Iw>pa*f6z=amu@kV8XpSwB{DZw(XCVQKR%#VsO!a z>ru-vx)kW5Jltc1+v|qqoU$hVLU}&dD4?W)_|HV5#3xfkDlPoHXzJcOu=+v4^zl7n3N@<*lNpQoD*vK|7p>M0R5lcFM*Q__k?yeE) z-Zl=Jnm^ttfX$f4$E=EqO5<*#TN)Hi^Ydy;wOfS7P0o*xBeQQ@Z#nF+N6lt?uJm;s zffG46;^gW&EAZ^F4uugGF6f+7U1)9S0c|FfJuWILI`%dtIkAGxtEI>JG>P;)cx}8* zj|idr_r|1vPeOHTk+pfpT4oX`ZvNu+FeRc`m>5YB$2CV{z~WCfBDQ{=M8b9T>=$>V z$;zdTwlO7@I>!~cRWnvDjPha^Stm&ZC9U21)$8k^)2{h=Id7a3Y}=U(`m%fUv9b*vI^#WsN{0 zMJImjjw0x#J4ny};n_{@*=~HFA=)_5*C+6VJ2r|;gMn6nrpAyr-6#NjIrZG(C+K?aGmm@UE4BlP+Q;(sA^0&$<&YwuYZ$Gh<@1&N{RK0MP5(C@x-UK360E(QB5L*#~~hR%~7PyyZv0rqGx6g_@d9 z7857UtVe2@vjKUKJ*49KpV|J~>|iI+43Mc``f>N?zFBL>8T>i7K-OZi#ZBuv|E1C} z!rD0NmY*1U2eNFZ=1>m>o+Bb!LW<|f(~M&|+W;4WLS*WoRGUwjtuK78fT#-`Kb_vu zO>PSCW8FmC|C5j$aF2{SOimq@A8NL=%7)+f*)ui6EOA;y)u{CGl(f%bTK!cDzkDIt zBO?m*^tnSr(P~)0+50Z5yE&WqV15f|B~GcL!R1|pnVHF=oZ?K?))zUNyXk`|Avj7I z>aCEV)46*F6#o5Y%)KVSrm=b?2gbN;b#+SsU6p{l&Eyjt_!ASQ!x4`%A3z{<&PL>L zw-Hye6}TKbtc_uV7a{-1HJFL_3?4Us7-H@{lYoy{c@%U!&6-$Y`prEpYLzA~T z@0%*a_W7o*{#XQ)pWAV8G&s_&_q&nY0;s4V|7=oXq00UazRDTcHz;Acb9^^4o&~tQ zQ9htB&O%yuRwuC-vYm^#uL#R2{?T?t34q^55HNdX^?)|NLybb>z7L)~uebIHsn#1Q za@|HS`g1>%0A8iPXTv_c2Hj%XVvy8Bq<=?S4WczDLw9|!PnF6wF%77*%s%cjv`(1O z$(fw7!2EV|xqEQ&?yD)5HLIo7 z!W0a0O_H>tq;#XLro4O!QP#}%s7Zaboyc}lv;So~mrE`I8zF2nBO{nO@~|A~fVt_; zhN4d+J)Z;t0D7^}$w?Pu+qAKk7V5Zr|Fd${N@D<+Z#{@tOs7D5rrv~En&%W71ey>2 zwZGou4w=mGl?}qh5%`(S(z1&8d;vk}oA38`WctPOBl;(pa&1au6^sS>}!WLiJzB8~js)mq#R{AW(he|}MQGz`?|rnajguX%36 z%mlQ>v-yRl)!9qdno1TD%j8X+?0;}kc|yugf0kI3>60$L=3>zafb}#`boAUZ|7R?+ zMppxXzFdPITMZBWaPHC&CN~uQZ9c!lw5C2Q`njU6$1@w8Q_mRbAzhn)SqsVb9%8}G z-;d+Nk-zyh$rrlI%>SH<`roJiws5bWJQe({QvjbiVh3zGEBWA~-6JdM$*_OI*z zL%AQ#%aobIGf>cM7%?)R`1dzzu3zb(|69dOEOWQy2K+VZf8Bds{>uuy|2r?2ISxD8 zk&%ttG(Bs8R_Heyqe@Ek%~DFORCZpbFm|{8CNIp;%qCfSe((6&tGACIn_iCU4Sz~T zd+X=JtBmd>F!O=Cv{Fu%&c`L%coFZ~oDG$#O)C3P?~<7MYZ7{O&p zUBsXQ3eW#m89?J%DA$`4byY;I@f4ceXO_=)k0PtbiUg8+wyc(%40??u_z zD931z?m^^pj3y?=Rs+1Zdm3^AzPIAM_}f;ZC8kk-V`6@h$KL!~Km-2hxLZ?>AziBP zek{4C7&-AJ`|zi3;b!c6UuHqH`{vmukBgfNUY^Qrt(lnYaBx48lq6>(#m`G$N;WHOXLNYC;qWoe9?a-1F%{Ydh!} z+Wxj!l8L%mXr6rF_g4j9u%|XNFV&T$HTplyd;Pt+$x`c2f1){f4>hn#l{!h4I#p|k zFyl|%m5`}uDK56Y{3@;2zcDUk*YgqWboC2vT-zbj#f|RiL@oOYm!zS6HP^+o*WVhK>2k05M)uFna+vz&hV1-(l~Tj4FC&ez z*N$MRAJ4esE@CX zbZ;rgUQ86an!{U&42JFf2#b^v-@C)3OqhTe4mTKBJb*33?bA*VPGv#B+0mpj)8X7v+<+< z60cD2a>ap~`lof@zBl#2`k69Uajf`TAbL}$pXg%0d_%Td;|JcB&cJ#Lo8kM*9UX(r zGfYd!k`l%eXU17q-$qpiK&Oj1{oMb--FJpHwYA&2b=y!t1V#E*1f)yvprG{LdsLbb zdgv`GARVL&p@;~f2ZYce0@8a8HIWiJK{|v0cZqv{r`&U&bN}7KuRJ6xS!=fU9q$-( z%$LeJey{ziKlTEPVq$MJasUSq7hHNKbk`QVv6U5+T8}x zWOxbt=9lL^?20)<&gD(^{B|cJ&CpZ$D$F+{N1q+|l5k~?*7ZnLRsd*S7hLum?RpYe zSzEakhvZGePsr*%bAGM(?Tu-hG}3RuE31y4iOyQ^P)HbQjY}faJ-%r1M)(QVg)gGp z4(N(kInGvduVjM>&X5Kjjs z_kC81F05JeZhpsKV&;unFSjP*?N!>1)NPcEia#n1zSeEXuqqcL3FnyZhltVl5#N!x zY*7zS7=<-Co^?^sFfI&l-7_nffI$ddRQlJTIoe^qanYGh?UPc)WBZOb?idwsq)f1| zeN_qS?*6BVg8HoTrtE~4mRxH%3Rml-HksFrrzZWy(b$c>q9jHg$sip&b$8V?3T%mc z=Ojw@5f$7(6DU`$d2~2>3c5+F<2$POkt)2#0!ZYkqdsMD@qUG4K0$ULewDcS)1WB9c0+aZUl zAUj)w;UTFeMXfBObCHbaH-7K{_)0s8a@laxtqrV`s-^QAOh0bbE5^&B9LcOTBqqT+ zO`oT`zp->*O5lEnt*7}{;79O(j&*)kKE7P!J~J@lbLf?&pS?etC)lWrRLLxXm@u`l0BGpwmRq37A(vbWSd`}9sIr@eh z5yrNHucg560(a+LHH;!j@m;_$KJJ{QKV)kTaw@N%OVE4_yLmcUe)l>4qbDV$xFC;e z^)qRP!i|pj+sq+s&r@Y@&d|noewp)~o0{@=5c}12ULuS&wUQI|WGb!fkUXvVLfQ-} zJ?sFm(K>&$;IC}`2eG2*C7J9Qwl3N)6aMqGF=^tn|1T)Yu4zlX<^KR#fVZ3hrj(9H~)_jqIYDaKMs@`SON` zZw*ctHN}g_BPH9Wz8H7=K>-*>3o~Be&qt}xBX;gI>SXO8(-H2}UCpDEr}7GaUZ!zx z7ILyJBdH4rX!L=C61DG}w#04Q;VFJKz)w3M;+wQu33-GF01-O>gJ&b{$}T-k*0$x_ z=c<(B8`1I4?*PvO%t9*qzwBSBTIrctxwriMqKGtRw=W*6biAHSc%KAV=m1Y*@dPbN zn}wVvy24skj0EyFZukk==_o!q$V8eh8cmd$tE!m1j(Pmn#?Zkm-bQw**#v)A2R$(D zSYDX0?Fg@`tn_7dBTP09uZU;paha;7kBM~T-4XUQG^yj}tm+x`wwj!@mo?OVrl|M< z;66t;RyeX^n?Ea?o1ce4jQZ_N!Hhy@nqj+<0Ao;krgHv=s;RVMeeiQV|0>Ub!o+Z( zegi^kv&IVxnb6Sz!WLswo@C|wBDC(>`4x?gol+W>%eTt!KQS@DrllL?qK{Sq1C=o} z-kF3gqrjn}@*s|VS?9RzLNNmI75U2vX$6RthXptPz;3JWrcSbgO?;~-yiOl)$sG^6 z_5-7z_SUBj)4d5P&W?8LDg*sdkl(RXFY3JQ)c>=xUyA*-z_As%(QjF^Lz57{|j$}7Q4qm=g z-;A>Pbuawdn+)fcEu2r87;ED8x3;+ci+2DV=B9ddwr_jJliWQu|DW$g;7Ty$4)6=W zU;QW0dA0fLc!`}CJ}{&Iw8ECc$Ieb8$8m@F+=LUD9>l+?GsYV->Bt@hI#$_zJ0UfAT_QSMJ2zvGT(;JQ~MrM`{*&A!_gV# zDDjQ`%dj&7#t0jt9otxBajFhc^KUC~Cq6mv{U;hHDOr?vt>>D}B8z%yaP2$6va3Qm zmzo2m$fIgb?aWG_K3ey)DDIu?L;kLuN$mlEM<}A??&+#vBV}8Zvw^()$5tOLaJhTS zqS=i4O)|kq+C+L93R*^MJKM6m$qCeV6Rp=J7Tv^sPd+ua9V9+Qz{IUg^VmfnJ$jO( zZOk>=%92!1{7h+d)X)Z3qZjhneGG3onxHlbSLV7j6v7QPDc?oJbS->km#N<$h8u(? zHu`K-=RksFt<<;5_I!OZSYj3DSYxiKMU#fbl$vbZsd?UdEYKZ|%UshDymB@R8II($ zHVbXS44Ef_v=c%4et(rC8^bcC&-)EiNPaz?X}Y4+#_Emvk`Z=n44*O(tN5_oCKu~7 zEQ>V8mC(xwKR<+lG`Cm7M*&(Rqj*oK5fQYXjHz%woz5rmMt`FWX$udQq6q2K2+ZTNYyy3t=uBXu`{4-`FLV5J=tS zZmMk)^MHqTs&U;blEjsLKtu_sPph^)neLE9ne$uhGgrAsh_F1np2%NQKd8<8{YF!! z%+4YP3T0m}*qa0g_&RO(TqhFF$J|eC|BqSm(65G=6p}$(&c^W# zA!$4Y_Nrc!L9tKYzHe(=yyMh}-6$$byQuP9FOPlP(bIk+iSJEvV_5;ud;@8`Bj}cx zIG@jSX@YmWrEAKJHTHD!s#IV*=J7C=exYNdFw2~4Es7cCDA&H5r`UNp5!oGoOZWU#%V(pue2jV zqhKa6BaoF%PP)6&Lu1q*@UG`&xs#vE9n>!uCm>Qx{w3`S*a|K3Y<7ySn-7T!99x>1 z1u7VNoy{E=)YOdP${zQ|qljDNoAm+vqwygutpJQfpKh50n{yCsBnsW!dY3YKS6QvXDf%D9) zGc}r&pXNi(^Nw%0XVPA3uwJvZ8G7-!4W2sFk`{$>xEc)`{(Z>h170BeHz^Ko1wa_Z zoTKKam-{_#W$VtO8kUO<$CXN4c+tXsTnwd{I0UK6DRJ48<5jJ-csevXpGb=oe)MGgfjrB# z5NqOk(hR3euVF(5=yws-+z$A4z_lnKot)&lo48EBoVWwpaWq9J@t77%4lGqNzPl5_ z5O|EDT4*#$e5YlGf))SD5bW;Bswc16+~zkNgz)rn$nYrmiCpW-eUy8@fZ826Pw7Nb zDj|xuWO8???tSQoZ}-Zz4(aF^VM(7y^5D}D2Y+w({jrnj^Wky9EBmSHazc{c!<$hQ z-4+VuGJd2yAIL!@$@W22y`&jH(FBW{uX^7@K4nHZ;TP>akI2 z-&MtX?-pEjOba+8b$dkjj3#iH{qd^guUggyO6`c~S(*neX$1+rEU&%P%Za-=R*XyGe*;9EQ5?gx4Z- z2lLJdOCU~(VHT4roBFS>_B?-b*O*Fx&R*l^Jy}eJatRB>NWHbR=xBpCN>)SHtNQ2~ zEZ=LE@D_?!dlcStWW4KpvLmCDmsm!rGsX?=hFo9xaTpppC>JcNr_P7^rPc;k0bS^A zaj}}qN0(WExZ=a8?bAbP``RvGZ3B6L^^MS-Y9G-exsmH2tkg7!U$*1}~ zjC;SmI&(%$_-AS;Ti+zvY_|=GwtOxhlqy>*Q#tP}Doyap_N~gRCJxLN1!eK!m*CHM zlEL#yGraY?){r$Lrxm=8pS_z`RiuVSa~M<6i89v`j@oL8Dkvo6%Cb8EluRtG_d5;D zO%g$xL&c4wc4m(~Q$JdWyFG+xw9Wo;M%L5v%A$>&lEnA)B&T~;)WC2o_huH|%X}BR zbk;}0J+~+x=yU{ASUXLi9FI(R;N{>EGMiJhg8ChU_oPgphX@3k6S?>D@4qV?t|Fyx zD?RrZOoke+n7=+(1YYoBQ1Tl(49G0n8UCpHltT~Abq@|~4&_9dd{kwP2)`B;`WPmA zamv1O=(dWMmXW)|OigOTH?IbDIz~rvD7jgQIU!rW@Ii~3?D74kwtWv1cQrHH{2UvO zc5Y#DKSNhPJ@?+(Y%zWC)Ens4)C=i+lU$~Cam+PX+9J}CtK?Dqt-;5S7J7yD0uIEg z{?P)kT>Yw^nC6uD+ClTlYgtQ8zXV-YhoYilX(RIh$xN)&`2aHC`1}t(tls@%`Zo=` zDf{1W8|T;l_Y}zg$&WEF-A)SuT0dGa0#{3Do7CCEo=IN~x>`u|3zpsMjpzL=h_nxMqg+FVD~X(`*T>@s3|z{l&ICJcX_bA6rUM_; zmzUVQdG^3)d-_t73&pi-bb=rYl*cJ5fksump(j`~plKIe0meHkOL! z4r@{jQ+Frtqp&D4CJAdV*H@;`_0&Ano5nV1)ZxPnPJ+v98jMrr=^8Rq>#jBL0wY~q zwC+EB57fmZJT`W2Ui)7GhzT#L5oNu z>Q|*z6$ZFuU0m`VrVjgJr@7qodGMkXK>PwO%^ftutf9CVnHfPx`!4qgo3Of;xcMNt z729m{(=`+=%;bC5r@var9gWA!)B925Utga_!b&pP;yZ(8de-CdLDA11q(}*zjKS^# z<}jYb!!q_}Eb(2Ofk6=u7Y{XOw#9>)D7xL+%MkeW;E{x&#}Gv=mzsfUuh+YI3m$bR zYcp2~BWLDy44=^6V^v5bP-Y9t;BBy-CD!QN*)CB@6&2LyTJIDk61s!{@thP)DELq5 z-ESMOCSH%6oyH)@Iu7hQxjLpRL~IwoXALXBZf67jQ4%HJ9Cli%UpSl`A4~HjON{p~ z%WQ7deQtYL1D?x`{8U02v)8M3lSo#qiQ^+VBHUEvVl&fzCqyexuC1QMYSOSUuSHMt6uCfO z##9M#c%7sR@tS9fYlwppE|m z5HZ*y(u%JtlP%S@03LDNyfU|iSUYiUjHhnLHX5kLfFqNmx)_oWdEOMhmz#1DCki(?jSu5xNm zwPLM3PXIAK+OGmXl7A&@dSG04L@Y~wevOW5B(cD78&vM=ATUk;^>vdTerB5ZInpWm zH8Rymfc1z_5KJ3v+PEIgf&yXu$+`zECe(V1=)(}*>m`=dy2L!HxE*^Do_m|4mA$Db9~ znFBA90^QGv@k61t0QJ5hM}e$blSiFJcV*-sL_4~|ResFW%~6!u#)2P8a_QnK^A@=1ry-OJ5eNbo3;cMX+KT|MFfulml0Vac+mcV$D^w z(gynvPsyAH?)9W)7xhZlo$Vdzkz*d|J>nOEw)mfO9p65!+Q`CzP0?BH8I+m#X+>CZ zu_1WrnKV;jN4Hf2mFnwm(PCvx}3#V2#KV`&Z-OsY+I(DDyq$~@zJ>g zeDGFp(?3_UqjjmY!WavzIAQQpE_`2#kT-z9zq_iN&(>sw@ZTdM185KMQ-#tzh~;}D zK*k9z-7lPSG^+QWVw|_kddAM=$y;s=!gF zvb{~@!e|q_=|66VJu}s_IrF8PnV=uUSD_R$;uoFxqia2CZDbXgXqSgmxW8tc{F%~X zjXj*>!2dpYhUaYntD6U2{D(QkBJ4x~aFd;mA@f#mTN%xWY~ek{WlF7OGq*@uOso85 zW1U%42)=ghrwrv?40qP>z<_0y1aMHpcXqK?fMJ^kocp16Cop;7i;Mcn-7K+br=QrM zNAs7iYEa!VQSRpQW{UtFxBD*1%m9)AlY%SrQ|=YWO+Sl`Y0z{&>Bx<`V)rOt>}j*W zH!S_5l7e{Dv0@b@-9zE1%nusR_gH+S9OL@=#bLct(-uWM-qh>$MrBg1JpRG?MBym| zo+CB2FE!oeP;o4Bg|cgrP)7r2JIdeVR0 zulyQijMo{0Zi+%U8AVd3|mGCD3wLlU9B7l@~X?0PV0^GF^BX?-|o?Q^ks%B zuhdLwqpJy7)T}dQf32);DMuO8QT=64k$pQzP9VUe8=shIU1Z+>&s?GX7!<7zcTZkh zrR`%{cNX(4c5-yw+u4yC{$XTvCtV>fr^~`>?(Go#^q`=$nrIUvUFVG7rO3ZNsP%FN zGs_aM1eCm%4N$%-5=YTy(r~OM-nq7x!7fkKpATERl#&~+Lp}aNMeU@G+Q7kQ#Z2y* z;)}?MN5m-77&R3wyAd6HO=V-fxbIqkBlme5UD1%C6whKrkSBLqX3MkIcor6D>>+xG zzJ>$I`77`B<=K#!jDS^T_GAFT?p`abKYU3pe|Cw8EJXY9*vkfH-G9r+M`55wmnkm! zRFal~VPA?!(70pr{oU9nL?`dsa1D@QS9UzGpDRI_`>t`Kc136`hP3~tEFR~5IgxN6 zj#Kd+%`GkYo*>Il1kIe{R*j&<}^Hj*Y%et1r>BW{sp{FLCDj zm?qt3P%NJQ%((_IsNeyH*bwyX(pP@|6xEGENDi^cbe!DLXqO0yIa$WjB`62C%s%2q zOdsu??$LSFT$0ROU2OxcB@4TZeBa8SnXLblwr~wruo@)W^{!JY#(eKv)bJ+iX^G_8 zngGkQC__OcfSd-j)s@W z{o1eM*6_}>2Ge<~n!FlbFlx ztK7x$`$;m(Z7z|jgqs`@Ao!WK+(lo&vgDQbM7qji&$?o0Pb#17Ts1|_(eu_;+?Bw9 zFYVtyPuF91G-;y<2JGR+}tE@ zu_Y?8O^ZA2#?i>uG#0J?m@Ix(?QOWe*MFv(rQfEmYE(t!?q~S`6o4McliwlH6Knmq z$7Xfgx1?u`OhZI*>32Xnbf1qx%0$zr$7HMLc=c2wXE>Y6$GZMXE64m^OhhQCfpzGv@bT-X)LMGpBccnc@ z)}>9Nw}=!xQhZ2?8?8G#Vn6uJy#y9y#+d5q>Y~cFWgKi!5q2AJm^9I=rFGZ(xWpgj zP2gq8Npjo+aB0gTg30%lw*{p8&CTPB$Gm>{8@vcfSFU4Xaq+QTdwDmgm-i9HoG)W< zkMz;>4&qLtp^sEmY2JvVXDDvE{@vyewjZwkhutXr$w9L0(q7ivFoPJnp_=+K&CCXG zEMe&kH_!J-0k%Owihu^aE*~M+^Ba^OTfx9Gqa+9g-Un-BR;<99E|G3rAC2 z?1isizh2d6kMI2aK$iJIPwt0r!m#3s@7lV$`er6eG}-92=HC0VO?YSPr8FuMAmlEj zZzdHKNbBjDfd!X=lqmg(1RYjH4A{lS_i0%0U(VMxD|b!n8}9YdF4T*iWzAapcYu}! z^=W}fegA)gwC%qk?QZpgBHp{X;w|AvmR4@HGgEMVO>X1Dld=4`ono0{Qj%+Gp*O>0 z;<~;>B_c=Jy1QeRAPVR8KIiMEy0Yzc?^icYez(RgrJ7%x&w)P-z?+`Gc=PYbQNqv3 zZNvdR7kBZkZUA4Hi|9IS{;hw^Bmd`wgCECl6iUu7J(u(Se)WG38RyFL2ao1|MSwME z=5_J9PcoPap5OA7OV=4p^S-ZG3`468AFcaXY-D(j?cMyK_)sOo_b*YNW{kCo_mWPO zp8LNph%ud&-7qOHEBmVd2ym)H8z44lK1lk?I-5RISU9HZSUmsY$6kudKV&DS9Hu}f zoKy+4?voogY8eta@2qr-FK!B=M}SqO9rqg_{QNNRl*!Ve?~zOfFO@bTh4vQXy7%jz zJ%hD(q_Qu8`m@8BN6Fvw5Dq}rd!&TU`1bvxv)%Guo@7qZj(gP9cWzteNsX3Tpr!jS zr1v=izCay{5KFJuDuu}EFOp}LTaB06gUfwR{`y~|NZ%;({{UlGUZYC$1TC<9@ZlAj zB!0iw_V!;4dAJ@)`3b6U6()8~KypK^LV8b+Y8_4(^PfGSk>ckQW>sERePa%6p#c0; z%B`+lW}$VU!yd1culVhnx#jpN$7uWC9#JxQoyBLZ5%%5@@v$^3X_nDe_b zsKH};NK7`1AAUGakdo@ZU7|X@K#|p1c7Kb)qp;yYRh}2rdZG;CVPf%;#ly(1RABdgY{{3dI#YTNU14=~(pk2-z^!tMf1MU3E%SnRJ}A$SAvZX8&9R#F!4 zN%$N#bUTi$x#Lr}EOdfU?a@o8*tJc4J+#Mh6?8@I#!`QJ!3R%wE|=FuhU4)rhkJ=& zS~{52yiLCZ0qx^lZ5^QhB z#EOwQDt*Mos%TFQ)NrVd-w&Jy%3nYYhjaRZq^nSX{VGsY4;PDeWQ|nu-kr6|5W7(| z+cKBwy$Yv|nk?V0Z7sjcn>L$L{!`F}7#hM@-%<{2>RI~52?30pgQDtp0hDhCJ+0&$ z>NQE`J8g&4!{i4&i*BZ`@^{-0rqdE``LZJ-O+N8`Gb1CpdGEtosYR=?uSvU{p3Y{C z{vqA1yOOWA1hYPr?>*_9opx;E4<;rhGlkK{FSv@6Lu*gU;UEx-SPalC!E)KjJs(dx z9A@U!u4~EWsPZ^fj9lB2{Ryo9H3wJ_Nu6E8ekv9NlZ0G6IM334kf1|o#7U#no~Kiq z3pO@BeQK8fmgP*S4($~z8*p5FhQlBY3#vAVtbaWb@gBMd2-57y8q7V1KghGf zQ6S6cL{~A>eg4p$JX5xC(0we)mV;ovGhMk$>!SG?IH04s`D@nJpmL7vdS^dl^-j~- zfecy5{B2Vj4I{D3N#O;WI;AuC@vqz#PXYviHHT)?;iKE}yNrlB0)1A z-E+ND``7%PuW~gm+SL$uEmQs>6JP%qWMU?dGDyLWRR*g zcG$iB1zxD%j~`*5U#ZxpJiq3(!L;cPmJ#RgDJRFXd=Mzt7#kJ(^UuS~>o+#RvhYo2 zQupKykM`uX%InZz*9hc>25-Ykp>{eKS3`n9E?r2Akz+pXI5sN#oS0lXol|%CWIpat z44yvTr5?wL4V_4+d!K{qEB+APzOKK$1F(2KQnt_4^azw~A z`8@m#^j>)AR%t&q1@`|a_T8*;wpJ{opHnF(uB7yF{Kv}I4#>NAliQv>58VT3>Is2i z4LCV{A7zU7=IK&I+O+IJm^B1V5CtfUx^6&8|8sEtSGry|`|?s{WM7RuE#p{XTt^@G zYdc%_&3$nf>rzBdjtjA{A-klZE8!k@f@l4al1T*8CURD_0KDH)HR;0@P;`TAIg-y? ze-SS#ieEG$l>VrYxJzQ9<8EfAWaXZf!vTNf*?u4FbVKHxvv$s*dGkCrhM{`}iFq+l z*A3JgSmSF&4lF6(VnA!aVJoYvNto@6&Ft(gA*cJDS3}s^YdH0kbL#BDP6v^I__}s- z(_wb@Eracwc7^dt2kd0u3s8#6cYyD7^AUrsM>Qb&n5Cmw9=E+ux&67;fmW_vt44Xn zTUo_yel^5g6c88e_ifn)UIZA=NCLvPoT+9b;~defjzay=_jr!fRx}-?!WbaHFI+GI$~S&HM0SgT-Rs4BG-x_qV;3BO?Gk zKAM}15qcK%XWPf9X6*RS@d~OOc_~~5c&)pzyb8ZGc3z$`?OX^%yLo$$=20lYyORoH zq%q6hZi=eUyq~*+!3Rccf1FN^f~Bd2Q&jJA5G9x>T}CUm@>?jsXAcgVtu6j%R@LAi zRuz}>C9uUzOi+5#Y=1`&w4kWc#ZlXKhmL~&bzXs3di~>&EBzTMjr;Radr@l1>s@}( zwEta>)pVBdvm^1@zX0%BVtV2nYrMPAM;K^B0);^ZwD5R7F)=}B>xp@r6}G9~6B#<|xuhIF z+h`oT*uNQPmyq zhk6{ms~J8e!rQ62tGiCrOPU(_XAZ$9L#)xMqS8ncSn?AKcYhtdbWKI0$2CiXg^blM zgcFgDL>n_p9odo4=Q_Susz|tT32ryrsXF}sUa*zs;@dzkUN;YXghNl_ciM}H2MVB) zseoGBu!RY%6cruith8PE1fXPixp>Rdj@be`NNsMu;_5D0TE5=L0Tv&sp&CN&yhJ{sp=Z*c_+peOqCh5ms546LCmv zt2Vbm$GeN98HrWXTRV->y3X@)HE59U*fvjbu|6oKMkY$FSA$4+?y?9>DjE#{aG#l< z7XKUICjWu3=^-`HK%HI5`nmlsgnp^x5h+aQCBOq;4>ofOh%2*8A0FHqPt|2jcV4Sk z^5nkV1p@^f{DR-5|AOC(o8n&qZZbpVudD3}(}&G195UDwu&{%_6=~HuJM=?YI8;a2 zlm{(?A^b2v9hR;36jYG}Pwzy{yh}>b2UI4x+|&K?M{Xs6MU>^&QtvBO##0!hlQ7?^ zto)4yP%Ap%{7;-FD1ay7I`|tAX{i=Y0M>uL1RXR^65Vw>I=%wbVRu!^ zdD+R=rWhadY)I1_5R7EHV$T=#5@&u3&BM#@uUxs(^HF+>$agiya&ggJN<-Jg1O*g< zJFY<#6%X1iQ&UYaertgTGNx>cTz>*+Z$j+y>}=K_KIu!{8P8HC*g)P6dI3+vY^=0g zj4+#&osx>qI`mpB`$BVaLW9*=EzYSX%}hnD4%h>N zh)Lrpxk)GeEN5>|fDm#s>SkEX&rz`d!?^JE&%9@)Lk$DJ&jK_kl9qJM(Pp22#oW)N zqpd$UFfdXs%|C4^d^IE_m?JU#U2|Og<(x#lC1RB+u#I<%f@1N*3kzT?RBdia#fWQ3 zP_Rb3M24jnMV4$m`@_;+YfkPmsym5#=&?Oo;H+SU7}fCbo5_lP;o;r<`wWyE@wZ>i z{LwD3!(;vBN&^o+Ki7k1%bNqhk(kCD1>}s?YH&xkF4vlPq(zRQ!2{7 zRuU||kGA~qhUbCDkC5>9_PcKfZxd9`|99bs+5aE=$N`j%!8y7Cm_dOFwjbz}$o8`Z!qLSn&RYE&U%YKfe(Ar_+QWS+@UR~pQhJPS@;6&*V6gxkuP5Ao$K4pXXein7p-IQtC_%(7>?t^Y+U>BdL>ZK%US<1ak zc72WJF@AA^HV~ybenc>aA=7^g-Yy`90lcFSgS!SZWQ>hF{BChz{?+_+7v-d)LC2kh zb{ap5sgkZfJUsKOHqX&cmAwd%$FM5Ai)b1)B!fJ(7Yc%`VHx8Ub9A7)ASS7;@TL1| zp90p^%7bK|>(6c>_MQLM&PO$(V@x|OwL@BHZvBw4oy+?phL;=RciIZ|)9{fl6^|35 z+b4rb@p-(mTUh=+cgbu`N}~}RYnnqvVsh5l){dL|E$;tDXBHmRcUYDWFvUQ(EDrny zY%y>N%gM`IpVtuiHJ5Jcci{}ogj}}24CelL(qL|btP~OyR(cq>?*YsCY<%qzQWwzc zw6Q?uL!Rvs2LKjQ=G4C2*K_W0q!11d!>vy@Ye-}LHiQHKnG(~zJOsk22dFuYNr1uN zHQujFj@@`uen+>07TYtl1o$8T;`XHEs1J>1Ri)!LV25LTXC%%}6!<(XBKgQOMe;2) zP4<&Lq?2&D*9X)NnUwuQLDnHxNn5t4R4tt!zX2SO zK3#uYr zkLzZ(eg=9*GbVE3ul#ukSG$)YE;&2MmU+;#vWsMM1bh@B*6Me=(cBqQn%C2FS8F3j zL29*-EcW{xFA3x8+}LZ005Dg7kT?nOo}ALVH=}9e1p(HZ7|C#BO_V{sMwvoPTx)zT zH~MrPYL4J7#E%{Jge2wiq|RaV>_!$7L|@W*_l^WIIm}ef$tl31OwKcvH%-h8fNN33 zx_rNVG#d!Hno;LO9~-x9bToYIw9^x&tDo-5>o5=BIvM4~-?;V@_3u1)hhL%~cIT2m}G_4T@WuVLWFW>LW=4j_D(g?e?m-xR@1T_WgDum1C(B_b0Z%&t849xw zC1)X6hTt`S!5pe!a@>cONj*L^`(yS#`wjRPH);D(*MgUu5^ItzL&@CwhXsH?G`4Yb zVyu?6%oTe~x7uA;ax~))gw_`8Xqm>B2nlId%XUS;J6HN>qY!Ve3vrMeJnbPO$N}B- zdhv11KQw>f$AJ|0y@#GhUe*|Z52onG-O+=ZpH>@^k&@C1bDjQ}Rn4NOW0;MW@e`~o z-RWJ9>g5I&mOH}_-YtB;kFQV!9(T$UaQe6QY^t}Vj{D`RZGPIkMiv5y&thFwMo$hf z55|sd{Z3Ahq@-#mYhiE${UXLMh+jlTEZXc&Divf;!zsy4y<*}hMq|>r2!A0(R@%?8 z-R>#ilb#|0WA2)9$>WEMTE4a{j4 zFX$t)u8iG~?$Iq_PQJ6bd7VT9*YyaqjP^?p zrAD?^eV~wmy>4in^Jw*(pD)VJ@8g1V=gqmB4Ds!${9-l186jUGHy$v{wtkh!iU;I* zL$B^oKDfTcHw=%&)@>>R@L@V-1y8x7ez&e0xGARO_AX(dnbhGrlgv;TTc05rtM=`3 zkxiA4eEN@^{BbfR@rD%6p|-$uoc>L4EWxytM&EEyLz%E_bjo%UwVkIL^C1s!IktiN`jIyG@RNF`Ad7 z%oe-?O)HcsoPTSJq2;`a?y+$a5VsztWU{mL~z=M~A+Wc*@!|k0;Fdl7(BP zXR?a1_X+fvG2W(}MGO<%q~lqLqlX1_w5gnhcIuXkn}9+a(TCv91yMn zn=tYd)L|#Y7)>L(RDgoHF%{eI!F4iak^6nQBR1@B2ZVdN{))@@q6o_!kIU%khWE_b zpy?jF9Sg%}7?UY=OI!r*Qi%E&GL2i^7V@MjG#SpjhLzepsFn9eczBty)SSCGijA>O z!!&HM6-C?`$$!6d07q=Ss~%T`LW>PO5HrlzuJhG~XaYF|I$}H~!;4mc!*(}smIuDJ zvp2<+w5oEnXF><#W+Rb}w_rVeVUCZM%c!ACQFfWn3}8)ELJ?bJz!9}~%hVgJ?G{3_ zVCLoy4)$C2T{u@GItffX%YmNrKT9OAU4SMf&g+*7*a&d+gKq6Gg;|BP90k@f-RWLy zoOIdS4WpQ4h+rxlEdZU&H3Gp~l{K-`5)VQ9m6kL%YH`tBBF-Q}eO8Xx3c%_U8*uDR zoSS&?3}D|y3PX9w)QzCMnn=;T3{o65OShU^RPp!y8kSz1cE(AYeGl0E&Mn$;xZEOh z8!Kx?a@`NF!O645`=T2Q9IKJ60MLR6U;JqlZv$Wu%N?t%7N%tjm?n}(xYwAz|M{1v zESsy_Tv138NpNYxeHh5x%=ICn7>M+=fzY|gGA#@7l8w$8g@2nKhaHJ6vwk?_D6p;lgN`?`1va#2ZcI8@fPozn#$)vXK^BHeX8Rti3sDp_+uwZN;zP8x%X~u z3jMWgis54ajH7~Y#!yT~HEw}wWK1|TYW>jX?1f*uI!w+UG`D&}H{Gy3Odha>jKWldM=6=%Iivl!W*bT(f9IdOQ*ONP~)R3fbWsZIny{kff zrjxT@kS;4YFAvc9x{t3ht%79-V-A}ju~KCd>wvg&vjve=+-mG2h#=qUEoKREt&TYVuIld#*vyikKhw=a zSorSmpOt$u{m@DXV`?wwuA8Xn%{|Dt@OHqLg6ip$bp~Iwj)q1}OlyCyao!`<0DHlSnY5I_qrzxawK}Te9=Q)=9 z$QntvcdXI<8yWe?W|4=lv#CwQ$I?*UyG296k?h%^3wfzE@tH+tk~-f7IG@(`d{6m> zCmOri5^m2h81wwjt*3AQu;WFx=~z9!2OK+1M@JVC!5OaHQtN1P6{U&w7^AG&& z?EJsW#!8F-PdL@>+oJQ+*DqatSXoJ%!~-g~aauHzpi;U%XwiOiqrM?O->UQLXd1_P zOQtdYDGv7-wW3x{eJslr5^@!LFtDRvsCSzi{d!~=9!1>^9OGTLPrp7(mYvJ^q}V|SAnF=y^W1*LXnt7m&n3-jbN!#ANi%Vk;R!J@{0l#(|8C)Ua8&B*e2CIPN2*gFe zY_05}d!nLAD7&xnL%#31*?=BfE&tGUnV%$`64a8^_3Fxv2xR~$P9!Gxsw#)Bn0jO1%3--c zYxP#n#$D4!OQE>SOabmV9Caj})ULDoDI0K}x3+0OyMqBKlQ`g?;5gH0(*&ia>9rOy zmiE~F0O_Y;ODZSBaUVNwut54@{4Q=UK0(dQTAGTOnfz-jYHRzn&bAcrw@!EW$5_8B zhzXM^s@hbpe<9dkoOgig79 zXD2|c8Zu~C=;l~|UK0F!0Y3jL`HX#7-u-q_;su}}7v3vJ3RnX;o-HpcSE%33P zkAs81l2U6?N_=aT-0)RPYrr-h#~|V{9$XF&pHgGpfrI=wlYqVpwtFRp_++^qM8O;a z4|9@}eHVoO@U)Y+al7PaEZqjh>xKsUW0^*s?GPxmyEL20R?u#?Kd5?{hts6ElI*Se zlQ$^fxHB~9L8Z~_Z)!U{?A(R)65?jW<+RRhz(+JWpsp<{36PhH1vJ}NO1fdyT0%(e zW7ymR=G$&E#3gMn$0J1f(|Jrvv^mnN=x)lFeUKL2%ev~gZMTN(XgA@kzdiTaS~c?! zos5xAh{tlmjbHigM((hN<5YOXQJ$C53+jhHH-tP0c}SWrvGVY(`szsRFjK}-{%8f$ zWf`mWjspy zHyn(;OO+&!!FaEY8b?j`_b*k#cp&z~<>8#ZKcZT8ZRZ(mqXX5KJZFR;GmiaXJ?T;o zh6dL|>C&ds67J1=jn}-M{+K1@bo8N#JzB86X=-Y1l5?qg@JEv^JJjdUV@a?*rS#;j z?~<+h&-_AQJeRpLrFHoxJ5ZfQ(k9)$#V~1g*n4phMdc3m*J6t+{l)vuqOlM^eADQ_Ky0y0+O}bAB6YE<5alt#9_^V&OPaWjw zPP?{P{pwG{c1!-V9W0Z~8I-&rVIMTOc2d&lT8ThZA!4cwUmo-N8kAs0a89VYf1Xkk+D&MQDaEUjhi39?8F)GJ9)Ku19&xkC_$g~5No;6{6>gX5VR(o+y z`UiykG~_AT_P{KEe@8u2!h6OfLfqh^+Y}41bGW2p73$geLd+*n+sNA7NFVbYS|j1} zT6ucBsm8?n+j-o4auGO5fK}t(O0^NQz*qoIQ;%ltnJ3J0&6b z?nUmDq|UG8-^Ms%W6OZBSNTPhZ(vJYe7HR-*6k4|f;dGyGvpd8o;pZM(4U4Z32ihC z_#7P_UGt~vVuCiRPKyGar|?O~RGY^Gn=&wIU=DI_K~isYiXN_&1kSbjAD1iKWLORj z|D4_I%Q8SgJZ|Ve#_Lvo?4gmdXY|JHJ{4#?A!g=SXLlayL}hx;Jv`p6DrVyL{37jjb zANXTM!9e1!QSq1vmhdG%ANLG}v|4lA8ML{Rm~4Psq;6}iKy0oN<$$4Bo>(Z%Em2#c zMotsO8qqpAX?N=qLw08dyP%t~K{XpUFBca?QpA5L<5C~f(eeLa?=8ck{MvV6{i&cJ zAW}+=MGHuG3n<+kBHb+vH7X^Iq*6oI(A@|~cXu;%$1pH3vv2Wvp8v7;e%~+eu|Mqn z9-9v^bI;ttTGv`vo!5DJgnS8?^=tG#JbGNZ3(q=2Afmus`0zD>?1(LwCKbNKa~2GE zEq0WvX(lG`)KS+buFQSv| ztNDs_-gbTIqwLg8>_<%0Lz^#GGK3d&Iy-=Q>hBSDidtj`VK{RO3L1>RC@6_4&WuhE zCPIYzeHWtRW|JnM!0cD(6gt&5(1i_KjH%LwC2*UD9y(hoD!zyIbKNubuP;jv$jTf{ zo_jttELj!ErC;PV_ou(`7U*f;e>S$~Lq{VPb1*a8)dm`2Zh%LIuQu7%an6Zc}N+ZpWsRCvNmJ7eeuziQ zMKn9Yl#Ddq6*=Kwp3VQ_PIPyHN+o8c0mdp=f>DYed`R0unALTP8xV?RXoy2q5HQ^n;$K}6gTom#!k71Ly z>XIH6JzyQ&^IrpUm%sj;vcY5@{1I$5Yh1`Z^)Y?U_8Mwb zx*4zd*wz!6%!5qJr;m3}Fb$Xmuu&Q!Rz^(*etm9$L5>zD%B>GH$HqKz?v~uJT_|G` zeCtEvpV7UE!YPu`yceFFG? zdw`4?ZIUPMF=_3bp-YDeR}jb=W9I~*X9}f&y)9Rg#c(=d8`eWmoLTuy6Ux!s($W-^ zJn9*5Pw6`DqF6}lI`gixBOo{-zai?^)FENKqClBxv9q_goYpSA=jzEP$|b`apz7yW z0B7iZ%`M%kJ!&4aTU51L*L zkg&?({#RD0#})Na_nh)~BOX1^VHC)F{-XLd=?<4>AE^OV6Yb0T4=n&@q=?EkPS1PL1Mu7W9QPjV?l%7dLYLs-+V9mG^1)$Q6-X)MJjXS-lgy z?BD9`>UC-Y$a-tRk|E97G{gvy;8j~bG`a07Fh8yf2H3=K9L^!}Vt21-GTh_7UNyGRXGke!~*eS-bO@RU=5l z_p=zPiiFu6E!&(T8*UI;&3*Yjv~#_lRjqT`=(4mx!`^P8n+WRT@Hv3$l*-6E$pLio z$s#g!ZtMMm_#MAH6|Sg-YD~GqYCBw)cv-nK47MXQ^R+gt@jBOi=V*Cy zS>7|jdRqWeaXcQO*>GxPELkW=dqRM#h63v{PqgZ5L+38U7g+nMZ%p%d0k188S)4a* z?G)lg+&?>21H2EQ{nS|l1JKR)tfK0k>D@)I`t?!&UZEM%ruXkcZyLJ5_`!N3J9~V# zJ|}TZ#K$F(sY@Tc-&;y*gF(Vu@3T|_0g$0 zSXrMbI|bax+AUF?`~RYJeH9@37h5j+an6vqcJki6d&mp-5co`8z;*&Z{tem7Em89x z^k_^^5BYNY^S_}7UcPL-zpvi?FK4_39`XNRzTW@)^guiI|CKTkT82{hJ#7Md66F+p zdQ<;y`|Llo)PgeNr~k$R{7KO`a0ABX(ed%=$#@Fhe|_ygALZrS*;uhB{ZAi7(%?Pm z|69Fy>)ri-S4zAK#Z@i3@@lxcR%{HH5L1pF+xhQEs+Vk*#8Y4DDfQL~FwUp^*&BE%0M*CIS>ZmFKN#>oepEvL7t!+h_kX?m|3VJ^f2^>DMm@h($N7dv zh9#cQzI0j;VNQC}G4a;tManPum$=@a?IRbe1-NXvbw4S*H>~cQ>X3b_g#hz z-7N)O(F@l(LfV1Bl%^sg2PKcFI&XaaA;m|Vsm(yi0}Ep*pZ(F<@a4sfeKZ3DtV+i= zr&g%)tUtW0N45R-&BabZclkG20nSCg_>;JyN3bWG#IaXcU;dWXT$6smAD{%FX0x)k zWm-DAVcfb0V=lgcIyhC!SC@f}&&*l93jTW?{(q>F9-Q75Rwfi9cSZfChmB7RO(i92 z+P(QXU$iw~NSF2Eg&c@-GY2T(W#&$lhP7zvj{-napH-L^@&h)4oNF$m?(vWjO!?CyS*u264fx0 zAOhcvX{y_!P0`jd#;gfhW@4FMD}JxBk&gw|p8M{fn!vVTbPdF)1>Vfe{J1 zKt>uXob1mdq*lLy<2=qDt|+#h`}oEcT~TS9p|iK8B40f|S?w1%Gbu?eNMBW#od)zr zx8UNgChs@Hy&*-sHB^7!<(W~6^vfSC5=5%AQk6L)z>Q$m7A*Anp~3f67)hSnhMav1 zrFB+!^|k~j=kZWy{@E~Yea8NR|Ek|i=#0Dr=#;x z)mzU4wDtDc?I!FpoG>Z&8*W2U)@MUs{GI}#t))DbPfcf1g(?-}Y_)0tcNF_i*`&Cw zVGBWELnAcusLWyH9V*VvOvt!_)@<^TN(T7xk^Ua`a4o$GtHE)y){OxsN$7ItRlMue z2+;lGbx}Ud{&7!}umR=G4kB9o=UzYiN!gf!?i1`j%HF(c@Sgc6CVv|%-l|TTHkzg* z5br7R&Q9UhRbJU%t)>PnOycj&NaSk2R*(>@U!cI&WBC zD^if_0+iMIg$y`{=W*RL8K8rV^RrD?;cy(R=-RwI_17qiadGcjJ>h3G`331kX=$~! z)6cwgclJo0EUgw+<_N+`Dk)k245euC-yJp;f`d2QE_DyrALzfHyoQK-)@Z0FSE9FY z^r<|1eWHyot57PMg6p2K)GKHMc)T(!&`E~Uo{M}i6Zyswp<$i{ue|Ulp}e6$6fIuD zr#dy1^37{XYeysVq6gIT3ySP*?7|-6j#&wDS;dZ9S=+IV@o&aH7~d@cdp zB;J6%u5K8L1NWaZA7P!aYX(h&6!xEe7VOm(PkNcGthW<*Q~x~l=Y>`(e%^8gi=TZH zjhzv0&Dr(LrI_IyksG^**V-`y^JIr-MD|J&fh^c*G? zu=BF*j-s~hZ1J>8v7+LQ<{sI*;TA3bg6p=~1!tf9#60~!>c_4qtk8Y5q`#ie_N^|P zs&|dTLRmS0dX=fp`7^cySSy2=H=??QAO=49HT}z<%Z1ZQG3;{ewvw%P`TwNp zf2DW*x$&)AkK6w9N+R_yvhEq%zaQrD|L+cEnA`_a7yjSNJMWp3a*7-&kY+5~tf`Nx z=7bmYF*Mx+{LC z9X$z>1enIObfA3j&sYw8u*2fNqq4Fw@DpHb^K;Vpv>#;(8!T}QBACpkyVNOAvBiun z>TiJvy`pevo(5KXBYY`5@xS5V$%j?SxLMT6gNRs8EAq0_pcS1w^r99K(;s&0q3@b4 zWUi)K{Oikov}BuWTeh77g4LjwQ zOq-M@moOQBh;x2E#8#>Q9K@f5Iffko)%oX8;ZTY-%vyg?xAH=8 z6{gGfjdnFvuBS&!TI=xy%MSLAAhiA^*egK+W(TqIbgWzslLQ+UGwUKf0jh;&=o|#dcSQVR3bDNxqOXJ78UsEFftgu^M^@grzGt9-9Ro@MROSfhj=lwd~ zOJ9*3f^P^?4;7_h9W6^G*jn`Howz1mFBK2bjmxc|CRsyrpN0F48qD@w+B*q*@zaDJ zXR>aYav+kaw6X=oGqkZ~_xG6&(vTLDX3G~tif0|Zch*A>R&J{(E+!qWA7FR*Pmd-Y z>j14@+j~`g21-8L8&C_|MPh4e#I9MWbQg=c;2}o*T&W?u$Wra zt$|Xay!K~$B%NVTy{NtdSp6nt|2tdH!H| z5I}UJO@lL<6X3K#}%$2dIi-jVVG(3wG0TN*BH!BYk zBJr`<#Va=#ag+^A=vECdM9=sF$pAmQ1Uy=aXzwTE!Un4Q4HeFtONcJF)R2d@m;KUT zi85ZB^_Jxd7*(t;i_GN z6MOmKmHC2WauiWAHXX7L@*V&gy#2XS7I&vSjzxLet* zfvaiJsz9AgCh}bVyr(fQUbvK_x}sfKgj=ngqkeh%oCC4J&A3+PEPc1ZT`|8|<6`RU zfruTwf=SCeS2|V{ngbYKbLRku@03xLLhzzqAZ?>}IMolGyH>GP1_#<- zNZ*a$6)9WqAM7p1HE{y3_&w*KZXBjInDe$o1Q;gU2M19kb6-W}i7)@k2kOqzb+y?B z$nGD@d842@jj8TX>2+_1Uc;mvToIw=st`X7xLvQ-#Wo#KX-sYF_O;LFm{i}SD^$7& zg2^^#R*2YFNMV0r^C4+y-PIlvTWcn*TIo%jniJ0tZy1iYZ~iUv;+=)MVh5dvh0|8c zoZ^9Z?Q0IjP0Qb@$Ss1w(N4dt6alM2o*mqCYNs*5jg(#z8A(^4tsYGgmi|7X1md45 zg6nlZ*PgStW44eMNhEV>ke!|ambd!TppLvMkaz7M&I z2Z$`me$OS^AHzRcs#RChn}^!?4C|~wA&TeXs#ia+?)lBKzE5OB#4K+6^y&*?D-7N! zy3c{KZkwkP5%ZC$k>K54+lHNS??3HOyDS?HDt*mh%;LpOrk^sMuWO0Ku{x0V{jnE$ zORS`0+pWrH1lhwmg-_R8z6MVePsUGhQ}eKPSX9j)l?nBi8ft6XGP$W?oRyoD@JBs6 z{J?zrKRpHcSq|5!o68t?cA0_T1h?tf0&3=VNINM-e(mMeAxpiIfx+3pSAP-v zg<6y8?Q@aKI=4=`j}EQvgY%>CUSa0k{?E?R*mN@>2lSpH+8Mba#0?uaD~~mWLr`-N zav2x`Q<7DgmUoiEY<3bwho(`WCTw!DShaIJGlf1&W_dBiSMkHie6~)uzFe~b`9-MT zk|N>CkbuQ|oeI{@sHc--$U6-l1SpR5YL1I})k;nW?L#!t|167NCYmpj_;k@}@mvNw zC+`I2OiMSdI1CquOnkEpzy4MEguQ9L=CEZFu*{lIMeP(jhNkA~kfo3y?VzF0>7i{Q z)ad#WWp{z&gr@^sWJ1SM6ElWQ9&2I19BY(IZtAxT^uY(2ACdijuv76a*z@JVBaYYb zo(lr-mKVS&Bn+`=^0W*W<)v@s4PlkYXf!m7?k<(|svP64gW%Wr$ki(%>zoDf=&0Cu zboRIT96Y3M+SO!IZ6e*fJFDeQJv=SN0%^j^amcIps||U=pSsWK<#e~Xv_d_d$*XsZ zofi!B?fK8Y>r!qIZ~EQK#eO?$4)!W($d!2MA6Kww z+{3=i$R`uLLnFWK)C$?|GQf%q}A`aev_B)%tl6g7!|#NKH2_&6S~NO z<^l>;MUxp|9hLEVanx(vgv*tK+vN6&)b$C2tq7biRf+hQ( zAlY#XuSRupMb#XfR;dF~2#|I|ePvjwt33`M%=%=%cJIz0g%D6*)J=lmM9gjg=WAZk zLT=Z4{*fxw`(96{8wXs}Fxnw?^_y}^BiGhj*B5728`Y(02(_%V_G@e%-9G&SUm~iR zg{bXI7Q}12P<%ArKgszoX%dBzh&9(;YZ6cQ9|<}hNZl%ycvVvjdhCFI2k$KQxU@-qFUsAh%zy-ncV;yuWji zeUvFQY>zWdv0NU*U<(qw8SCG&x9>GaTE=4w2vhFQ@3rOa+RC!Ab@Z=ZC_edzvoU>rQ;rGxOn-w< zY33O!O6p93BOo8Q_jl_+yEPL&$tO%8Ig>R+yJmYcwn~nSB#PU3chlPZGVoq@f5I~s z@N5Wxv_oJ@r^$O}Gtz(gefzEnWhMT^tY5ufC^xvx*|I-`CdoRbG{W5>#D-9&%9^SbUzxlZ z{r%3?J+-c_qY7>#h}Dkj;-6=IOq3sl z^G>EhI!A0+@-9mH?wQF(W&57uJbrM*?v>@cS-W@fvm=LA`KLVLeJwp)DMEe}& zPr0o;r-cvY(^fb=+$>01Hy%4Ok60{Px>6?;+poDZ(b+R`gW<-|QG zdT2Qgul)hb!8`@Hd^qN4PpUML$pD#}2k?FLi7bq@y&QL&y4$8|1J z;VBUKANRrSSUEGzu{F_ia)4`ietqvyX zAPVqslI6#Xo?f&4Iqy_W9n7|Q?M4JX&ao=9C;0acuCtrT#6@l_QNU)AFzf57#qz4* z7{gC<-fW5I<91W39DG7c7Xnd4t&L5yD#KP4VNW;R;1wlPO7h<2wY{BcuAPg*{mGo1 z&sh3)U}OP}Xz;?91}PBhI5^{<{n}SjNEd0dwtOmeeV@_@DJf!r>i@WB3y53jYI(Sq zU+YwSFgIHWzXohLd5F6K;8IM~8TMltn|K^YP7__f{E8>f%ykbgWZ8Ck9``$3VN?=p z&~ryoq`A3bSLu6B1TEO>auZzcrx?PH@AiYK;;4}ZK)?bD z+wCnfg%K=dB{%0dpZqY6e9-$Jkwqi!250AiZY&ph?uwtl8clL61fVBSr-81aF)e~b z+sPHE$B2)=ieo!d^CF@<_^Xh%OcuM9MGrD@{l17%`E(VeX+*j3HIwGli|B6JId)BV z-5NUGJe7`cD#7IrKGF>BJdLdk3GDtSnsKq3uBU{njqJxj{D>QJI`5ar`tW^t%4I#1 zCg!?4#f2Nr@un9d5{F(nn}seMojQlH^1g6 zUfz@_xICqNWMV%jw4Ly@RXV;2S&w({nngr!6TZPrdH$SC;Zpvu74$`+9>xmI8vm3O zpLufLh@Pnpua<4rALScTrVkfd1A;?m8auN256_!@mh8`I12+W?8#n;Onnv_lk>)vw zWgF>tOt;vLM)}^6dWD*2R-+fu8UAQQ8 z?n3}wQjJx;T3r<8KR=(`UVXVP>=tn%-5QG^VD%YF^O2D3FT;4+PeAQXCs6(FYaSaB zucbzLAU?CTLhUFg;aXHXpW-}e(i5)j;1fZ=$s?a@4_iRGge)=N3q8Z+11!%C;SI_) zQDiKW?VUv-+rdn3UWnDr9kXrYRu->y{7wV_0rt6A=>*_4JZ8UdEmxxVimARR*oR$J zMKqIsK3?^+B zJW}_6VoWeej=LhOoqis9YR7$F*Ifl*0=q^g!4RWZqdnGG$ylt7J?xW2pE(WqPN5Pb z9Iazo-cpBhSWSn@fFJ^}>}9`lpGyl9AoTRGzwpddoz5e6zn5Xo^Id_BjomzE6^Meo zitim4*2$8Yo|#gqp|c*p8suN3N)5TM;m*k96zm)UwOKJb`Sv79%g`XX9IWU)?dYrF zShG3Qp>G9Z^;dbmyEta`sL1o&yLqcqQ`j!=;3Jpy@(VB~-!_H3(m{^PXQ7qNHqVx~ z!E&%?Qkb-9D$NOCT}Fed#x%z&#>RS0*ei=0eNP5I*ASO9fRt$h%6CV=*2Sc6aB z`w6QqMxCdZN%(VJz;P7Sjn(z{t3ngL8b=@Kk%R3Ui@ArIn=)5^<%b`=T|nGv3Hpvl zQhAv>0^)CT)Zjl-h#m$p4}GWPOB+9L9F-$*&w?ny@>{_-wdD{ zeXdGRJh0P%V5t>n2@RF54wRye#|`YZDn%%JPvXO5EFt&L87Nqz8PsLUhsTPgnn1}P zy}_X#lXK<=G6{m5=CU0lbc;@VlokTxrtBBf4x)eb{T1y%Zs(3pK@kmotE9GJCLbbB z%SMIjZDOG!tC)UcXtlP!KyJ~5+g?dR-#n#6{Af}W=)%V(_zcdreF8C&Gt*RXjpP55 zUmVh0dw63i-TGYd-ys`Z`fWH9bRIHS;ywJ6X8nv_57qfs24~3z$TI`SfS>=}GAY11 z&zv=k>ozg(pudaE7Y6fRZ#%b@;Uvhw!Wvb|A;-t(wcBTb0ewH!z?n6r=~bFm>CHdg zcO;_^YTkl~QmTzbGH!;${8bjk;!{3B+slfh?}RO4VwW>B9qB70%(HIA7nXnKcAK8w z1c+UVw@k`T>vEw6E+7rcI|na`%O>}ynynIL7h@Sn((+2h#o&cog$drTuG1NgjIjZ? z_0n{i5uIKK+>V8^K05&`;0Bs7pjMRi7{~vr1!YGmJ`243!}LYwc=8Lb6ld>Mfdo5^xR5+tgo$;Fk_4) zT-7UuMR|6T1O{kYXNx)X1O#9dAfX+MIO z9AV|~br8v^ul7yqxrpnd)Ny*L%*%E^@YzRsbAZaZMeNexAUl45?gg_LJtfjeR@*E^ z>0JWv?waAzsfskd!k8o$)M;bBm_da;7ELIoEDg#Xql-U2t1m)9wm|Ak%armVQiIrkVTF8d& z1=fz45ZLYg7IRAhNg~ddfVDzvw)$6tp&Mv|HEbX3;%66 z&c!nH90=~TSn`_x5#!II8)F3;)*GDCOU2gB0;%cg+b&f;>r+dU2a4*IG%UFrVtZJxX%a-8P_Rkrc(W-qyH1G54`sOA>Ri$+UY!dzX%3-4n zghku745NR<>2MmtBAYqwkq(UpzI+(T9V$$TsFAF-L^(3{Pl5voZGWuI%O6mMDTDKX zLa-)uBVD}EiNW%IK?)_6zsm4LN=dIllj7=*t&LqQEJh}FM0SH?BTv_qU3-0IuX9|J z!T++X$j*<@bJActXpj!WxHAQ#82qQslAJ1EmfYnfg z8&nG&e~*e9vT*UHoA_AP5SfhBs>o(`p(s3 z+J}3To1yiNRX>LBYa$ax^jOB!a%1k8hYK8hv7RepkV#>0^)a<8FZ4vg`nUuV^7mfu zZe=O(*`Kb>vK~d;S3$Yg&Ud;Mxy$*ubj*c{EIbmhQd%x5I50#OJ5z;ZUEAS%-u+O{ zAgC_v(cF>GZ`9{Yl<_-4JUXNOE2PF7OWRdf>k$vXyqq(B!AuokbMJ+`?=@j-Q_T@^ zDTKT|{8ysF!w2@Q1QvBIJ<)Ih27me@$D)|@#-t;I2gjHlzAszOb2Za;T|L3&!ybdBN> z+VLX$vHHe8`>o;WRin5OGE3F}@?L$p%sHI1Dj5MZ*2&pOx=~jDQ1Rd?$Uf!hL2trb zDXMw6Dw75#7EdP|AvOF6{|KiZ>zQJ1o&%Ur`x`eDDo497 z&YOuF*S>t>Aj$F#!#E=lbTP)xs&zdw7MD%<9Y<_RX>fYDXpcVBHj0rl;ArC;`sp+X zZ)H$(%>A$hU96(kr-r@eH~?}Qjmyb&USC}^ih137>6rLIw2O73rOzJDA8#xi2o~;g zCjC{QpSHJxOB~t06JXG0%T^_6rItrgu{pJ87g@{%O^!p~*S}d&$X~z_ub(l#-D~iE zmkv$0b(-*8BzBt`?9k`hAKx8O+^N1^T?9eUa5tJP5eexNpI6xA@s8UNHRIY^u#aZz!t((q%s;FHgnZAF^e&eQsJ?W{3OQ6EL z5_GAw-T6pvp~eotvshDBhp65TkSe_Y;PBz0axg6Xn;Wdlw6k5E@C#yAw@+jC`${&x zp}kdQjpoTI-=*L2oGpryX=Z(o_nF?8UXo+K2U~!jPwDC{u`8=OOP1V!P{R^bI=*yO zh2o;}15p7wF|2to3^%1m2V)KXBxY-*t?pw9AR)Fuv4Dy2gYeGPtX$;fP=N%03GTuhA2M2Q$wXZz+{Em3YbLqcd@@k^c7(k}n0MnVX**&%Wh88VWgSK2_dRo~$4$ zNH8g;^a{?I9FJFj55L*vK6Cgcei=x;9TXwx4%2`Eb)^8dqD|iuA5B}>d~iHf&stUN zt2=8k1If(G9yYN`^Ayye^SsEz;T2CrOR3yvowCpbzP5+xQPf* z`Xux6kLGkU&i^0s4XB>qEp^{DaNOni~;N7LbV#dFETxoMW1|dQ1f5HF!CrZNP2xwU3eehG=ew|zMx@9!)0`=xttOneMZ~u!%ijMqDs3QW0XasUm=I#0;pv)?w zD(605_IT1eKx+>HCTnl2x-`c>KUo-G*>+3~PY#?C;K~6+sJ+s?ii0KJ&VL{SvA0@% z#}*9QpCbHyfV_o!#eB(2h4y@wipe}a{?Q(~caz}k2<~?qMuutGE2kjsSQ#)sM1f)m z;pLH7nARX9n#W=TwXJqOnhBQhM!MBP|FzwjIb3{n>Hrhj*B+@XdlZ!9?gF*Ou!5_8 zbp2)S?WUEHc6-+TgEu@qqvav(DYA^Zvqi6jusTt@yzXq9)}zKo890lnSIqSKj7`<}}D$(R1>3To_3qcEAwOMl~S5S0R9bX2Z$HJ!Mms z@U<)qx9NdGa4-c25;HA;dzf8>_`;JyE1!^^SC4Bu{G#2J*Z7TzP2UHWP=;vxz6<-s zsp?Yu4j!Y9jt>;<+;ds)aI^OJA6w3JU^dnRIOS!#8~gDdG&Iu@48jp>>s_d(4WR>} z$1#-fk_2VWN=tQeg3>o{7#?3&m);MNc6mp#$IO1v^{n`jjbhS-j16f-#RRAK`^SW1 z0yfLmbF8(4d#*0FxLww z64-Q8G&?G_mT&oAb&MYSm^@=;jGPp>_V=nyCrY$CnJc?5_}Ij3`L3Z81C^?Zmj`}& z=EfQDXQT~z%0~|4$#cY#$*E|( zqSR2%IQZFba{jHyKZ24t((fLz6G4(==Kg!@lF*CJKyVl` zfM(lKly040w}6%lyRGkuP)`nb&Mq5K;pa^tLQ+o1fXUV6fPh_ZLlVznfq5*03lNGHLWhlk@2oeVeg(UF^?OQVM94kv-|A(5>PUZSX#!@5x=M z&W(I~FEC8*_bM;4e?4luYxq5~KMscNPPKStuC@J4IdU*~&_M94e;{Cmyb7DgOipGy zSbMXWYnp~8r;IYsQ<9D~LW}#(_(JPBwa5`16h~sPJ+78r&+&#DPIUD1tw@<�ZSB{-**Jk?X7$hDC%zrDK|>pj zpx(pJ_$x5|@wQdJHe>(p@6=F{#BYmZn-5uiw2|nSrEvt+LNwzva2%xA`(dr6^}g7q zJ0P-?N^<7t_E7TZuh=dnGE;RTZx|RIlwOg)8HAh=US%u5W-%=U9Ix@aU&K6CPE@@d zeRSEn!Z05@beW?~8#9_v-=(BbT+i+-OovFmY$>s9=M!;FuO<06Q<`FOB?5l+Rw;r{b)#1t6$ z8rKisXvDZ_&kmPR7cvP6vzHi30dUi~+id1>i992GVN2Wyh~)(#E8!5v=C#Z&v_m#Y4pGb+uMKQ zD)gOCRc5h8;-O71)Pju5Jx7|~y zbt*MxvseV$p@u0Z=UdmHt0@Le{5Ngl5PRCdaWx%XyVBI|CvP2b<$|Mls^U_*%dEs=${Mv9 zPl=rU1=W6*&16R}?)IQ}G8J9k;yh$w=gMc=DT0~*Ff{s8E=4PMOKsdNo)WWLo#buqX-=)K zw%_7x!_pZhwTe^9y%)o%Bm_bpN~=j~1o;O3PTf5_DP_!SGr5T|{8@TS6JJQFpdK8= zzUv)kBkJUhdxpy;n^uJjaeR-ea$FRiyr%ucS&4VAM99>we{?JN_>8}?R~0 zUYhz%c17*>J!7-efoFH{EmS9C|JGLgId9_&zWSfP|NdFh5&c)`@ZTf9+CP8(TR8Xk z{pXO|w{Pm9{(S=3oqzrn-T!-p1?%p=ije=l*L!&X1`hx4@7Fwe^e+ywzegO{p8c!h z;_v&VkN?|0K+7Z9uc@R(xFKS)!Nfyb6$k~Yv5x-R$=!z`cp1YM+u=pJ4U9i*NW;3{ zl6<^i+jK$55U}6*ocy$=Z|JEDf1-cgb6*2Re}j4!PX6Q;Gqxu#jS7nGCscaT4^MRq z_My%kPf7-v<4!2(CGA`fX?ztdFB9*`n66K>z$@CoCIM2|LY0dBO196tTRyPm2-Sb>U)7nP z%&(~aFd#;r*8K8q>#4FT)F6N*rttV+-?PohBgW8XGnoP^MwX8l=_7QI~6riXqSW`z?nlw~2jc>~**oS!a;Yhb$P__WH< zP-o{c?vOUKTIT}$I_JB>25D_8%FssJ{y_cU@Z0F%f~vf%iVgwx`)AkcPcJ@I&D+rS zyir_RW^_e&_vQ3W261%C>6XtmZQ0|~$NtpqDtF}CbI|`;%XK#9YR&HA{?9Q|-3cBq zJE6TWY58XyZf_pk7c*yfm{cZSBjWNhSbpbO zqv&p7Ek_Mo&+krfWR9kpp9{Np`XEnxLphHZLXXDlb3r_On{@=4RaeObY zGu=w|UL>5LpK_Wv@TImbJFe!0ZYHlI&Z#>y_{e;OBI_|Wx~>`YQ*JA5xNXw3lG!vl zEQyYGJHptgtY7^&%DC@!P`fbcCHY#?yZ`W8Rj&V99+lnyQES^N0@)Wf!C})IkN~j+ zaxikyyyjHeY>BUCvTw2)p_n6|r4Ra1qRlx=#8Z(su-;>Luhz!?yQU!vJEoek{MmJ9 zGidIz>Q^U|C1NTAYDa-wkMH8Is8&(|d_bbtz5V>cIq%Hu(pWY~NAV*8RX{0<>=GND zSn&6H<&xZZKK6wGLjJ)caGE8ZubG7~11l|uAz^07wJ(OSk#5rOVb}>it|(bf^Fl28 zL{Dv8$^n?)d2aI)0;#LFnu%|{vxd%}bxk*j0j{Ge)Gz;dP(N@WrC!f) z(dH~?H)%x~AmeEj`K4)~wq7z9c&{b|DW@Hn-B1m6^mx9Bymj!RzgYfnNugXe|A~g zL1U%z$J1ESpV@VJOiHa!d8T>|`|@lxOi8NAG%5|5D1=`irig9iQ=55a8SSsH;+Us? zfJE3R=B3YEvfd7(o~L-3xqq&gvhHF&@SJ@Xq!p7y8F*Q8imR=!&zN7Rix4sInBz!n zF>%LwHtJu6X468oYe)BP(@M$rAn~Ag3qv}ZN((AF*0EDbcuiVQxL*w8&6*ANGTKjGGRO1@ z2tLv_l9$$0wUl?Zln+#6J0v%*cNUj^m0I`ls3!O_E<4I9Ue{%t<@hk+D@syQ-eIDkh``VfH#G=x5k!XD`~hNLPnvKc8^)&D^!8O+dx&#UFNBjtB8~p$=_rXKqD&8{x0&f2fAZJsyl8mv(B-HVE4^y#aI;(C7Z{OWsx zhyPu)IJ3@G!v={xqRZe(#E|}n){rHv`a7+!u})x{l{Yq&gw1dH9tmGlVs6>K-4ybQYf>qW>-aW?|k_MH4l7^dHqd*h01J(S*--}u30dlVmH*xx++iP;SoJ48U2PU|vw5PkpD8(`laFjNFeqb99Pyn%QjgVafcreyyJq0I7uZ$e4} z3Fk%GJedO81W{asbkbLqq3|+RCvistQO?i9i+0h)c3%Q_keLdU{@B8(8J87!R5MG zlJhJug3sx4;Ac#s(lc||Hg^@&Bc&UyILzWC8}dS zeE!a(3n|$KwSVNYWCbwlv&Jc^Kv|kDYZ<@E(SsTXSn~<^z+(AV9t03CyztOac}KwYm41aq$|hy01i*)L0Ym|$C(HcB0008yLC$h zs_ix&{p@7MeNK1xBCuLM7@P!8Yp+nLm{TsS-Uru{ZsT=J{*}+#w_TC^)M*7{b}8m8 zO9QQDks6#}NB=>(Z~cHzqv3N1)y8>`7?yEWt+K!Q1iNNQSzZ6wYY<)>)#9aE+yDvx zwo)moY-*j{XNx*w8tG>|8S@_1^H%-jwXL)F@*Y}q-A&_;DnfwnCa>7Jt5pLXA;A9gyFS& zH={thZgf2cg&u(`PUa<^pAO#9>8~t^)t0a^UM>rq+=5Nc8s)p2UYoZe&Q6)&X0JNn zwX8$o9FCVSs?xwuz|CwwJN|L!MNv&5{?qShPmG=Ai>ji|IEkZeYbCLbR47VX8pBx4(~ZAaNJ z(6`h5r{Ld#ico7Bf5mc{ki?v{!iA2eB{jQ?4dxA@O`#3yy!1KN=0-Xu( zL~KeU|JuXAO>sbjzhyfj9yYkW}gbXH3*#%^eq>5PE1#Lwrq4Ktps4K5`=i z$Kymcvu@w!3C(5X- z_I>NW&}`IUvMk-GiuDFxu4$vus+iNEQ7>y;cQL-@ORhC+@vE1!ej*Rpzz7Rcy&9bx@_hb^1d|>JTg-`ndNo(QtH%p^GcB{l&G@ZeT6213 z<>PbPr24#lyJ(^ajGWJI6M-7Irwiu+t>WMN53H_+oGl~e-1UFwh;Mr=*FPk#*x8b~SsyOI?nY}f zqUwC*he@T%6h-A?!Jn18A1L5_)%^P`9OGwne*s5}V(ZW;*RrZf?$ekq)Nmk$ny)?v zNBKQG_1eHnG$;%%QXfXq&Fu8ZVEaC{^3Dm)4ywe{Xi>@1Y$xivW>0_AO2%IGp?zG#l=9Z__XFBT|JppsAo{4ZjSjI?L4+u z{qkaoK&_KmV3v#odPal6QJl!%dL9vF%9fiAq!29qL-f1pq`*z6Cc$7_MU_}~`N0fF zx(`{bQywU)WHlD^e&ynH>;Cf>h^m$ev0RT>k>gy;6HEz4!VzU88;}Oczf1~WB4%1q zmI|_>^0Uq|Pmo(a$3(0l&F>_|O39T*i;(RV3~<}qE*}Qs^W_aFgd*qH7DB%d9xqQ= zdEt3fAcF}# zb3|k#I*@&&yNWZae5`4Zt2w2P~-Mca=XEO%3n^vV0 zC>y;Nu&;3r+MQx%%lRHL_A^obAzmi%a%#LX7G4uBt)q$*4bRrqlUJ8?p=Rc&5S$kK zWw7^LO55+Nb?SF@2(B40Nzdwz7%l@V1Us7!>$z|ip3tVG%7Y9Y`Yx}J?WS9)JvNQP zgK5(oeJu9sXxA=2diRE}`b|;y(7Qa?V1bcJxm8pb1xA3)X~zWyvl`$0+OF4pvv7HR zKOA;8QjJ#2y@DMr^EhVwc3YlOq(z+^5Pr3MlG%~WMz=Y<1=koWTS&>3 z#c95qvM@+ok%88^Ag>UE)H1;DUe%8S^YfqW6pUa6-|)h8|A^!_JL5I+yxTl*0Egd+ zL`ced+55i4e$sIyos8Sei8==&mJmjKwkDf#*E_^DpMI(I7^M(V>^mEcXi=uPkl%+D zhK~OS>nVAtI_C7)u3wX1ykHaR5MNF}UNwMnh!_2OH)h}|mieAI_+&{?b_wpiv$aJ& z@SHz8)v7-8c zMkv(b`&mzHUNX4Ior&I1dcW}n2h7gY4wu(%@T%}uRVdQh#qcyi+&`-!+S`_Qao!=| z%I0xfp5QJ9o=weI#RqVZRt#HragqDLS%#@7U&;+OQgbPrWCu@p8+d%?1O8W)$|HY-Nem0r%HsMHuMe8THp{Jxie!mEKj1RacKNkDF0?WYqU z=EQ)rQmS|NP0)lGJz9^Gy5{w)NaW*gXTrrn)R20mE2@A$brvs(%R$A?8Dc=y~_vY~ zx?SbUt{vBh!Reilla;&9rRN*ACs3(b4vEK@`n1`q`%EG4GZ-c+=FF5Q?)StQ;vUq6 z0YBgM>EhXIS#!#~qHZu>J6g(jr<`M+I*W9V)y%xwn}mxLXtH3^kGFW@SfrCF<&%mE zW{ndKjdi|HOVPeQkKKrMS1Z0ghik!nFTK`U7r!4$tKBRk!^KG_b7gH4`>H$eAX@G$ z#E?C|5u3<1mTiynCGJ$*+jEoY!A9iED|I`E|Zg2>-!F=-0kxfrDSPh+DOvkdTI2!9NasOa^_F97~f|j4-u`o=;ll0 zw+}NcPipY;Y`E-CYLWv9lTo+D@gB!jy%R#3COhsrlX2Fb5Oi1;WB=aP{3X@+cvo<4 zRiyS86j0Pu)(SZn2giFYB|qOIJ|`AfjFtS?6*htP98DPStv|K3O{(c$Uss44D#w^L zg|buRhZE_644~Led9P<=XQh9#lhEI2f}(-1b9qSMqPHj%MkLr0`au%g$2%jGj14?SUARp;8%9Ig=4{tbD@Bd^!m;)fuGy8C*dkIgX- zIasRc0O8YqiLzy>bgn!FtESRJe<6Zan>|eWXbYjqK)Jl8jbFvo{wr6cOU7hZ+e>Gw zg;=k^Ej}o(0W@t%zFT3a#6mI?&3(SdjLGtYJAWK0T!J_`yPi|=dEkoEVug?pd(lyxh7b?NuY&E^R141_Sqv;ufDx-1&F?@WK^Se&Ja`U7A>fp(U4P%VDi{S$fvf zkiIJvj(UmB@W8CTu+f*NhS}^GohrsLii>DOAg57DeSa^->3vzFvAjiw#NNWRcdVP? zTcEH{-&L%Rf!_%DZ?55?PY?Tl=ox=Du#|1%nVx+-GUQei5Zqql1Q8#fZ{D)A9(Lf$d(1(WN6PH`>9}AE+N%=B0nQq^$AW(%wn7lj=BAC zc*U-rU*AaK=FQDdORROwy9#AWE*gvxBICx$`>z3`Tks^jE_^7noCj6Uo0eDmyjFK` z<(+lQi&1w{C;JG96Mv66;8Ce{;qNi)3l-qFHh7oL&UKbZ@t(ijskT1EfW*hvuQ;Tm zt*wd4u^gJ6)0f^eNmUs$^%Bcfu^)1bf`^@!W*R)|$>p-+$Zjv6*YoXg^l2s;HSg*_w92uqe*Pr_%K6pc6;@i-p5IuOdugb9F*rOAvGtKH)dA16 zpo~^a(lo7-puTW>nOqNX4&1N)a*(ky@i9{Prlk^pkvBxQl0G4KjEDRiBYZi~+xwM# z7z;}_TrI?6ezjSm`;Tak7DQz|TqX&`!}nbtCpY1JFg?5;6RqpiIjSDS;1U{z_+5vg zbFABW+e-L!G)tP%s}CD{$J`S2fZO`ig4ef}t{ejWOr=V^02Uz6KosFVwlWCW6mCV3Fx^(%)#`_(eop~ddMufTNp*KmHlcB`i=@wKdvUyLs9em!+ zNY+6+S){CT_25&X>op9ldDr7Su@IzG$GWurS`+u!NR{!BCXV@@Cu)Wm4Biil=Fo1D zu~Qf5uR~AMD(rj)sa4L=Xs|flPY6o*8`e36W#sCY(M^Z+&WBIS2^7l+o}kZpws%Fz zS;dx*Z;PK~WoMGtewVEYU}h0b(Fhp4$Y6ncymJiAYwNfQV$mBM9QImWmOgFG{PHve zovIGbXB|FzQNKHwVIA(xeYx*{E(QuRTY4|H7Nu}qSGO4*uHSk}1n1ZK!4K!~3F{dC zriD7x2x`B{S42I6#|X{d-|#|(#=86}+|{k&>jVZ3zMh-#Pf=WAY+)RB>@t~0)OYdH zxaQ`|VxK7P-OeHkeYTwbVHMm?6M=W5T+ZZT>>Wz}>jx1WR?a_LI-xj0v?azs++XOP zTdXy6V}D7~&39?dYOkwqSoj7*#SFBccryj%TK!f#5VVYMXw7G0dB{ik`IalIo2Esk zmG+1^naBghn92A+9BzIs9<%9KCgCH-KfVbCKm0oYiun0iV(^nvt9fwy^-?zyGZR;1 zp8@)T=mSsG{Qe7gKtdFkZl#EwFUM$iKh#MI-M~w`Uo@CoLLgXz9WF__)D`-Xv{Oh! zzB1y|?zqI&AWd9;TDrw@tl3_uXbG;QVCHqw)7o|Tr>jVW8$_hfuuqai{tt$PEl&MG zt;$d$%$D)MB(>RAwMIrNT`47tul<%Bo?_ri z_L{Qxil!=c)Q5<49$Zf964q3UbK&O%eX0Ti8m@>q`l5cc-dAKxl zdb!b;cf5w?Zx4i_l1BWr#+nbjX|9`EVNxWe7G*w* zI@Vmxxw;pZ-Qjc|N?fR2bWWqzBq^RH#=!pTk+>8DirZIaI6XYzG7I#f_!hzlBgZCY zV4yOO>Yt32mYH5ECga>X>9GUu`i#6H;AAnlK`dvOd*viZ z8F4@2p%btoa+h7Li)qz+c{2NBNISoLm$gcyj95_ARZABhJg@+6WVBA>SJ%xNqih=_ ze3Wo+vUXWL_w77?sU_DNljP!TxBgkTAk%k!N}R@s8ZDdOxr(uIz%w2V-5s3BoAl(3 zTqg8_j^E)I=6|kKO!1wwIks~3Ck;Ef(cU=YYneG}M8cvla$38|Mayb zd!U&Sga(f&g@QgIuYS<*-``Q(3R@xlBcx4dl1QOUEa4V=Y)k2vXF3;4PWO)EsopOJ z$Z}zX)Pt(uN2E`E^i<`Cj~+jhiv`RW26j$dlgMBBZgKGA0|HmA(p5bDaqJ=A$4dLm zl7pVY7Kl-KF0LwNbz?yT)%mS{{2^6F(DrX^K;U0+?pYr;Vl0@FeyH{}Z zAazp6H1S<6==^qiv5cK%wNkO%wgmW=!xN$&S?pZ3@-R6)tdjc6b?=TQGkHnrjEm!- zq3~Z(ew`%c7D8FP{(~Q+qyCVyrRPo_2=0m@D3XUlwt_uzd8t4in0 zT*XCAbNn=+2jl;8`&i7s*6=bcbF?=Kx~k2b{L!Y7?{%FiRrIa^;m=#HP69joOBnOB z87^Tq%XF242Xzsr7xzxEsKJksqpGI71{ob}m%W>4H{|=UWZ%o>u<>~WJ)Xv<+S~9h zE;|$ER7jjLLJ{5zDh(2)y;FE9!xtn4Zcfk4muHawzTrZgMHjDLPGF>X#?7VA)v70p z$?5%%=YYK0#v%6?q0Q^qTGXJtaPN;GVUVD#vW8a;G>7OKuhfiFIVjd`WfyHTn8tE9 zs+(Ob6Lkvla0##$e`ndA+?U!uxO3CEy$A&SpP7+y_53RaOae_UK4&I*LKm#bXa2n{1L}&@+Y(#+I_?2!}m#N zF$ywKZC*wHJWx?a??V<_~{@pAF!Qc?x06m406^k$5s)bR|Wu($C*E3#Che#~0+R2T{ z*j&-tT$wBm$GcTxR~mm&v-|zf`$Z$osVie^7$4=ly#xbwq{`zdNJF*Q@2AAX*ygNY zoy?i5{XhB|UQJBT9(jbVU(&7PzHB%=z2m=v%)GNECe=fJn)S+Wq26{EmR%GuE5aQ$ z*I-)YrwTE9FcyhdhU|<{mG^WT2I}$gmyGWje;M*BChs|om&r%vIm_4%R$KWIK004Z zsSGMTk@kF+eHQv+{P8eSn{nE)wX4m4@0_xtq+B+IZ^)aU<9)c)$2Q(kIeTV&!zFcP z*55RVneA~b)H1l(`oPD4Lf`V7Pmw)l{EtWc>$3ncj9wX;%3q2Rz8JH{0)`^$mPB>_ zX|l7aXSXr;H;-)}6YJu;-3UDHXbf@+$jSo-3xcC1fnZh9ScmVCnk&3j)LB!vKJYMf z<#De@#@CYK>atPm#^IVrHJWG0XhBmt_OKW6&?z#Fy7N2-8DyU3@fHbZ=krgirfW^u z8H2;a$KWABbPtK!){qm3iv_ww;B)4T*~|l%IU&IHvyBptNsx%F{RD^c95qsp zEUs>*N{>F{VW zed+0mNdVbH;8setde~07T%z`K88;e#cyd0h!=j<{Iz2)%IpYniJEYt0myx>Z=#yBO zS+vaKB)2>YImDaHSq-#-1xnn?`{cS0H|2|d*|z1@0>Xj?zuMQR;_D+p!*3?p5@!u^ zDcoY$C;3;^KtrrL_f>C$WK-+fB{Y2r+3oyVWXnlovn&Zh&BsciA)dQ-uwpcwqvTZX zy~#&ZV>>y5^w^iZayX&ZX{v>sbq8v}sl+HCpqfciDaQ6F4z$X++LHiI^@NktxGSLR ziu_(Q_)F%%jB|-lP)|@ac0j_Xn=%hr&toW&#=CDbLQ7RXBL5mlGol5&SXym@dFX>4 zJeFoi`^F|19qk+8#rRqWJEYo74&;fO)(_P>K$ET!?o*fWS zx6o~6x7-~#_28=fc(a9bWio{C)9q9Lv!cW6iGzRmRhLqA9V)ZuLsvU9bR~+HM-7dg zDf$pB{sd<%X{C+Idnpc8el_{ZW4xRTwAu@G6+7j$A9VaLd)CvPr{UW*H4?xs2cvz#@pLrX!&BmG*=EuPrj1#IlFQj*#4N%Nbr1K44zx*M>_|Ay%4^lc?|Ao zy+tR(UW}u2<}dQ5BfBmOo0M~Mxsx=^dd@V{QwQW}SrlA}kICfxDG!&BF3QQ!X)#hw zOy_St!)NrbYO{dI!N z{BYan(BCMpf9Glf6w_8pC`*D3GB(Lrd7NFP%`s{oj7Xd;jHtnBcCLdv&2~H!NA)B*I_`LzgX<=Csc7%Z z;RLf&A;&BxyEaZ&`{#0gGM|s0|6N_m zot{@$R|+n&ijI|T@bqO2*$fx#>e}W2ue11qBG@FZ0e^9y7^^5${Dtka@ZnK(%r zV5&bb(A6?VMsE*gR(snfqL#JO=b=xzo)DLbiO|C5vJq`4EuJEvG>VUHDR6rUzgad7$&&?6@@?>A7-e}Fib-dyPor11RVR{v9*LApS6bWu_Xdq|r1f=%6- z*I(*La!GtPQS}Pq_>Gg^>b&lK<#Lpf$2Pj;^OGE%Epg$HF=O#k?G+9?Od8M0N3hog zl^xxM-E$)p-Wc{`wm50u<&k;q*wKh#MDBF9+rn2J;<}yk#kklUUF(z@>{%f&SH>F5 zx0F^3sqv$6t@=U2^f}V?OQcQZPNRmGoQvdO|3?M6h>DY#!1!JRU)&Ba8Cwk(Q-j_> z?RM3>(J(b5@<{!wzwz6qTDW}oYg*R3up-cj6@OSJ#|S;&2su^Cm@$=>u}bR0FW7M{ zF7yJh`0T33{gz%p#{$acrc!b><@P(1K39w5)0UwlUr%e{KMBet(3=bZ9p6$~QpZ&P z`*6Tah!mJwQTM2*@U6(Az8+L2n!u>ybw{!JhyLkT*4yC>up#>nwT}LC>*u@g-P;+L^ z5~^+Tuc%H6$ZCchQUc|rCQHHNf(;uL1OU*I z(dM3IJ|sZ65Yf@a8fx3cb_h8QNR1GX6KqFd)1`o zD77lhMDqn#+Sgu&se7u=2YNeKU(!T8_XatEN&I5pPbPBztu20&gPm<|4UOj^Y;~aF z4h#Jz01gW~xN<9Jk^|o-*OHgGfu{s z{8p&-q{5xU+E##nJH*4+*PR9+I-flM;z}Llzi11$am#n@|NG+%|NVHH-zxZzK69bV zs65&mfuDVUhMt8FE|kOq;Ul#kZmeM1b<5|b%x$H&bTK(FKm^zv+qlIzQ@D zLeL~t$)8T#u3YdP^lxWXaiP@YB&7}e{x!Q5RQp>W7E2iwQ(qlhEEaZw_oU?YX~UKl zEG;;o^Pgk8PAk_zQL2FrpwfN!-P-Y{y<=Y9nCr24Ct&7%^cx(96PeimAl>Up*P9l$ z0q6`UGG{!Tz|`XF56v(&!T$wjo3Tau9mkk&{S_$Qe8-1!ef$4=RQ505UX|{J7(Qk= znKFV;P&xMI=P zwY+)81$A;*Bi_{|rwHAPt9%l!J2*mV)mi%hpw$k!-WIJzbx_aN6c+roE9A^c zqqqtHh8=I{&o#~P=6PO^w)40TkvD=o?*{=&n-Wy>X|4JK;Nqq+*?H^OF4D{SzEOO~ zf%3o8t^OaOzW;!6&hofi?HY907s{XHdl&)hST+(n*`bX(5c+x;*?Uv09TqhRYbi{7 zP_>?bJ1tqN7{)0Ef^jHz^$`S}aByjxe{}uiH1a-8$4kIG?J_kank1Unritl%&~Xqh zf814Ca=8QSaM@TIN!U~fW8=|a zzTrc8!|@*a<9-1m0SnbEOWLL*r!(2gXl?giK_b9~x=CMqU3HnOmAbhh`j4BauZXz) z?8#^_p8N^t>(=h8Q8dHlK}m(fbyc2lLHI0M`lt-L7B$(*0>9O3We+n&UcN%FGcE8W z7j<8L9ZS4?97~tB;G~gum&ej6i7ctpvt}F4H1g=Dr-S!V+>Jt#k>O~&Fw0aua<%H# zXI4PF5W$ZjFx!exl}oKgHH%6GnR3pAUJ;kuSW;GAM8PY9hRT^PbA@c*hPxd#ltz-i zr$+eR`{oS>&ga+{vgF}kXIb16fyzanJwDospQ@yt2DZv_7Y52Y8P(U^VFCy?Reb8V zu*lAYjd>Pq8~3(zkOB(JZ4|;LZ#|14g#DW=9j~W9_$LN436X2O^2zsa6+Uy@0ff4* zE%YCC5?Gx(Ze%1(W2H&-$FWI0Ts=f;06o zYW?r9=G&~f6<>$ccnw()Y|83?F z2SII2z17@NTAT4o^E1U8cR}pq;T!ZiP2;q~qACG6vt@mHKgME^Mxx5HuKMg69m!B^&HT+T^QdOwp(>sS;YOcgsYg4XCvXZd?Dqqs6L{ED$U}}ThNlLB~8*QP0EU^AZ*p* z{L}xyTvG_>uVgalQWZ79Gf&i}X;PLAmI$h9S@=TyjFEz3CKlzk4bt7NdjV16=kPH# z?%Lmcq?9CFveTJj2BITvL>f%Rjf^Dlpk1a+m@YS< zJ03R@=OkGap}HC~IzDZKo7`u;L1C7P^#bd@1xUt(p z?{{nV=~qx)?wtLG(}83@JR1XV)S7k8!&q=&it+{P+a;bDj$SAK$2H4&1g~Ekw^v<{ zcfJ(0+9xLXx1FAL*KI7Jvyjd)w)O`bxEA>(S92Cc*Jq;N;Wqfsoe%oXmTmS=wLva= zUo^=OZ+2|_tUk1;-#eOuzJ2|D`;1C^FoPWDrmA(OlAu?ZaVI32-J9D$)=w6C9$EX! z2{uerFJ?dHo^QAW<-qy(-e+PYiH(Tg@MQp-yRsA4s-$l1&sMwlrK^qyqc4q5u*-ud zENr7`;C&nwDB@RnDMia>IxbB%0P%8X2zvl&6R+1~{J8hYOUd?!>BD7c3{CtehWQNr zo3{0S^dQaMcMivjV5{`-LroP3KM!4solAX=Cg~Qv7)Tp3n7}3k{j6 zYh1h`KjdfGyha$A#bBsZZG3Ql1c4#igy62#_DX$UMTX63}?=-JK2sg6Tw zCIBSxKd8@uuAU|HKStqx+K{m}c6^lJG%Bk9fqnWQ#Si^YXw(ztFEm4oAVtRf6Xn;Pulc!UNdFMAX9&Kw*Q9+`kn0JuhSM(PuDEmNL$hubT+i!7{ zkuegX)yUxaygpUGxaa%$6!q#grMMf*cH-gVlq@9iCkc=`5zZ7LPH^MEVSiyfs}!4L zxbdUb?LLe6WoJ88!E%f+ca^P-eb*z{XTMmqmsojOed--5FCj6Li>17ZPwL{-+IDm= zASo$?9Xf=W``2bj3Nl-Cqo@Aa%u>+;139a~sZ}|Lx7!sS$sz1h8vM7?UVEYOcW+>@ zCsO%HX}Oq`^Cx{RW zt5iMzUx4TkFlZTcF?e4qL6kXmzE|4!bI27cn$@quE``8Nv~0Vzoi#bkI&vUSuZzAc z9hS?l>-HI(RhO%xGB?57Pon?|^Ra#96XSDF%uW4>B z8N#5DH+R*#m<4l(QMz%pSl2xtItKh%$tInS9uqw1P1P$Mo}PaRDg}i)So}(%H)B39 ziW7M;y!D$Wv%N39KH_Cf3Y9wK+V5*dO8?eRjtch>AvaHUAGWZ|;u-ECFir#KXKnDI zWncb)4vlJt3$iarL>JEI5HjCyg_6|iu*k$r0lmw-^2cXIf!3wu8es|_MG;&;HZLl2 z^V2*%4cPf@s&n&TXhcMza+~z=7*fz$4138$+a#LxdYd1cUyJDs00*OqC|u!KY&2uS zL}^Vgxj=*4*8wbe^m}o8gLcOS&*m~F*8$KwFBXsIm(lR~QX0GCUNWE*NAkQZy3XXM z6MdKNi+ioO3IEjnw;wyY>EIui*PMml)CpOLl>yV8@XT?S#|^BPjxW!WD$VUBGINZ4 z5BQM8ZFc?)hgW%7&wtF?`{zG&><4BTp2t^bbsj2()m$f9 zQdV)8&Eg_Ym`9OFg1C#Pjh1C5M^17oo$askia!s~Mwu*R?pmFHWV18953)*EHY>UM zF%Y3vbN0s#f7+_STmv~m+=*%kMy4=z$pPMSrz^>*m}09JbAX~&Q2neBp=QXbSdnC1fg!%8*BV~hKn z(K@h4*l9ZD4N^rgISS=n>$jJ?c_(7h+*a;z>Sz4u+!i73CsQ?@vg{JHMHc@7NI5?I zzW~z1EC*(jl)D8I>&>H}?4gb)Fw5AhrP}P^xTwcv3VmgWCg>%OmUFxApeg#US6U(% zWcwQm4}4|kHDr{m8C`k6=0sl|(dMTb12p1G$VjuSjRZvO9s*A9TSmUDpWkdJxVff5 zb9LgD`RzT$(Xl3>BDp=Lmv8PCN*MlhcM^L#=9xXYTV@-Ajo$UXw|Y?HEsmVNXJA3h zD|h?DqRhiR{cR_V9g^1b&+k;u}x$1WWCtyyM3DD#F~OvBZSNsa9dtJ(~l)`LPp z$O`R1KXrw%`Y#bX%v7aLM?q7lyoe@a(@fBp?4Gt3&?Ai*cGnN+u3P{OnZJXYIAS#S zRU+&Jq~U279sig4NQeCqk}x|6o}bGR_Xtg1D7(3k~dUcCdJMQ{9nXKl-d zpA*0L{Ns3+^HrMaJ(dBrP1!J|ja?Tmo=N#~1|JPtdZD&6jni4{+IskyJf&!L2D9P8 zHK3UYi47$+s~g-2Hpf9O!$SE?MOi3Mu2YnT8z0bS=IpRJyvFQ`+hi8cs@s> zOqR^j_pzJ_o5Sym)4t_mOG*&IQ&dv~Dw@iDAs|WxUQ())ng3YT0RYV&Fi^Y#s+ErQ z{cldY0P1S^m6sLH!i^0GRuyZ!pCNyEsnO5fmzP@lbo}sKEAyBz8_3ZOd{#lkH@gbu z=?-?Wd#_p{edR**KH7Evej_;_zM*00beBt@(Yf*+$*hj| z6;xcn^*2Bf{W&Z>;I_hzf?76}~aJ?6>J>SZ#LmW~kDO4@W32K1`Jp*uLC0xvjlgUd@9kXpxP6m3vSMef`@5b-2ZgKg1=$s_s__1cnLgnyK+IrCl&|tPe zryGu>a^1##U)6eh+mbH1u4|p`{rI~ z_saUTD_Jdn7eK+2d~^e>e3n&MM(DTzTg}_s4 z{36RA4?IKu7oi37u0PND?3yEHJpc&p?t0eJ;$MF+FF;O8NoR8{?|ji|*JP!0;@$C? zph_eJ;rK4Ac6Ik-q^6vS5uwwSBYDQul5Ba2q-w22yIhH0v`QKgADfCu(F`zz1v2!A z=p8b=$K+{7N%?0hb9VB6ZxlA)j$khsW;{%G1y*ag12T+QtM%8ZOP2lh;wy{rTE3b6 z2eL_OxeXr^N?9H|WsUG8oEfTHiIHo&Be0%MLT<1mY(9=Y@Epg4^w=A`{-tQY@jrde zUxPddWX?+5a%JWYHG7Zr$DcHKGJZ}iEw$ot-nLeC{h?XzA`PW+S~POrD>N=Z;2aCN zvnXd7h%aXxs{^3cT3a%Y;9q;L%vmKSt{CU6SMW)tg#j-p-kvtOfqMoYX9p7#F=`&p zeM5a{Sgiiiv_3l7dIpNHMnSb8hOAjqIHV8wxK=kVF2x_m(|tJGcdC6s_#&rXb5&ca zI6_A*o}~_E0M__@IXcdqxXdajFAgP8@!-$K2L|X8Mdy^{&zl35I2RjO>HQ87&auGz z9bo6b$x>80O)*U?E1K+k6tPbI{7H;45y(OFy@A#R=F?VyrjrMy(1ssAcTbi4P z9a@vd{Z!noIl}vw{>s@XZg4CYZ=J&5w{$2#+GgDnpCsIRM&02aFBHWwOiRrzL(D3( zCe)Qr#KSiNvf$pR3+fM|h4*@&cW_Vi*2eEST}f$Il^DDfX+Zl#)s|z|c;q6#@S37y zddkFF#HQxKTZ=}kFDz;=t}wry`08!k#=u+6eauCUzzj7zYOcJ{e+~$!hAI19nW7L} zF+SB8Z0xSgzJirjsOA?62S9skw+YI70rD~+s+!=5>e^%|$YBw)JCjpSf!mPd7Cat) zFyW>CM!b36TbVcpuZVGuty0CLckV`+ZpssYpfWXZ9_cr%Bu6cwcW4MLI>UvJt%!G0 z{86BhvFZ1T>JCOFP+FAv%}2%)V_bF%^@R}k^6R&H6^ZSCo~tRl+i&j~Fg=$UJ0p*$ z?Yh@0Jl{Xus>IK!Sopdat(w+dA14ADkgxq0W06*x)JHhsR7+)P5g0121eoa=ml;RZ zp{S3c?Zj{I4P#qlqNS=mI#4*p8)A(t`%XzoKNd~}D*2S!5Bv<}p*OIXbiUakx`H$h zF7V}C2C1re6%!YRyVDz4NemVi6Okv(aayEK-pxvZX7!N_92UhdVa=uNasnNM+KEN1 zRD24wm^u^?JATL-DUiBeD_WPxNq;~gjI{`o&F?M?`FF%msmt@l5wYgeKaMQ;r(`Xv z_uR+3qHL(HyKhPVA+~Hs=aI5|z&SSn=NtpKPm{qvIdTf)z|_3=)TCGA~H8Tx$#2d;W0bt|GtHliE3mhIJO26iyE- zCq@2o?|0-l#N*ut%zvmj6~)gH&cwf=jD);%eoSCQ0n`t?Ct^#KCpWlfoC~!wE0L8s z^X4noF%*)tL8zW&Zv>cfwvLW?{SZOXOSM~jf%x9njIV=I$ANn99-o|D%VsQPl% z(Pw#N{Ckgu!Kr-;jTQdeOrJf1U1y&-3Hb4{vFUj(9m?vY`VFQp>Z_Q;zYx5tPQK0~ z>6&w963gI_cwXPeWcK4!MpbkaepQaI?6ZjmS{HEYwC!&V?vn;fh|PcLMvQn<{gN*2 zcr>0?(_PeFrczTTAe~HB)&83-%qYH5W8QmGM&u~YYXyc=WiTp zs!5nq=+X1I-K^aW!AsGHS3`KJ?bBJB_?%pWIrGUyb;~Zh|78L8Shka>b|n2B%C7bk z>)&@6PDPW>izdv$ea;(qmhsONn3WT4=D{E@vX1dT%$9C(JHkgVnUsFmy; zyR|K^xp$k0^*F1mNP3pDl(eeoDMprqN|DQqwHhlpwPdOyre?$ldhTIoQ(q?+&DXGy znf^T<;p9kDI0G|a>SXqCr~1D@!r-MZ0fCK$(S+04E3fC3Xj09XmVsUlNZkC zQTpokk#&FV`A^-Ao!?==H`;1utbKg~+cQcWLB55Eh#}8QJSV}z%LUSdHWoPS#H(NM zKp(3B9u#su7_`CznK^kAt z?9P74jE5aSMZxdOS7NZkVAFcfd>w(X;_KRe)X~WdTm=YVsjjeSP`OyQ=c9+4b|(4^ zo<5VU5hc#KGC1hxN8nnrTf6^R2G}Yd+vf!3U`|+I5J`Stq5jyYm=-O2q6oY$gTvRc zX@RAXu(aH&f-y=R857o>15O7eQA~K4B<^CVTNNLT^tvU?3Al67En#4qt-5;X3s_szKL8MoOJj!Y z6j#<=6wPBxSvX6lD;5_=9o$e{;vSoqdo@|KUaZ@b1)rQA82B=qg}rdh8FHipHP>xu zu1vhlp(xojErPRi51#4Ggt0L?|1OzXm(fL1-K@8nU0;)%)?)HhS)6l`xx)o!QYY=S1ExE)siSV8Ff^y&DUmeI@-W9S>Ti9ab)k+it#eS9=J+59q+q7|d zSS#A5Xu+8#=iF6tqKPH*$8ZhyR1uW2K_||-N7cs8ly>vHY!!iiv7Rgz%=G+=y-<8S zrxHH`oV5r>`~+Qa1yg@`8BQygvL}8ppG8Tto4{YWS)!`nKGB25Xe?9_LQ1rWW`8aZ zZwh;)?lJ}U=ftFAn`O?oYke9$U`c0hz}1T24OFQe<$aXP~B?4AJ>*%itro zC522&mrk?6A;_WV2qWQ1TAJ4pASC^lT;9(#qH*$U*7Lerh zx$$(~hoCQw`BHbog3^unI+)n2PVw`>=m8=yEl2RSYbT^0pqY_LKEABuTiKOTYQ@Y| z0hToXtI6t}k6V0X)vE+HE+ZZqc%V6UK#M!dQMqMVIdz)qaZ_NkBtsM%V2MJy;0u4` zW>z4XBy+;&oY8M$?M;P0i}ZLK1uU^j-xpY|nB?{RNviaA3dR5`b1m8}`?_=*>!k@c zz3+K_c|8`6S5+xm>SF2Mco}1yRP%*M!7@!cylF4$BsLW+`VerhZC1Sl6p70Bdl71( zOPn$xL(sMh-a010AhX@4|BJe}{%W&r`hH7kkrrujhvF1>hvM$R-K}_VYtiB^0RqLX zKykO??(QBWxa&@@>%O1$ynF9|;LR`L3~QZmoNIC%GvE2l%>TleZ?#h`{zy`edfl~o zItZq*xeM&CNf@}!W@182E?26>1?vGso^y8nOOp1oFkqQ7li?Jb8OEPsXH^ikdDxu5 zWgDXG;?Sn&&-Eugp{vDma%|xu_cDGO`Kx2JuO8JW-w&Zra1lt4DC?^}h=PHx^rPLz z|BFAKTWbhpSSqQU%Z8P!s+g)Zfw2*M`~M(oJ~XH2b>;qziXwTYNzI4P6=8jxI>mlh z>o{K*@^>VwS{i34pCH+WI?bpLiyw7pUxf8T0wi;LB1tzxMyRdu9E-saq|8IvT=>OA zRl)r7x!fjyO1o0KuTuv@!QoyPUVKeb(^stSUgmjFIatbmrLBj9o7NC~TucZU%m_0Vbe;e213_t?X4B>)O;^ADx%V zF;Q)xt~mmX&LeyNfHp@>aUUfAyU1^(FZ7x;B_uo$oGK`ttOLG75Ch~5} z$27nLEjcw0DQ1ZVc!HT>gW?8Lf0JjP`_4i#s@(dfw`bw6-uK=G-#V`8V7o5SI=K~3 z2KHsJ%(GA9MkqYCv=`Jh_9e1Ljh;?mo>lkN1c`KxY42;=lg-6wn3boRjopxht#~)> zizi=21Ekn>lI5>s-fe2nHl{nB>@mA*#92`sT>fEo>!9!U@8pkZG^R;(@yQKP@ed2$ zo=yuS^q(#E`kDpwJAB>-S;Ok{dkC`z_&v&*nz4MTfF63Mu{_)49N3z;L_)%`8F??i z-Nz#*zLMNzj#QXIg;cT(H;xBl zMp%Mg$-aK`d+))M)T8laXQ$0&tobJM;#lxzx6`F5rYRT2vMiL<>q+3rC_!4U$+#=( zt$KX4B6$)~t8rUWf}Oq_K1s|~D&8g`cUx`K$E%rT@<+?|OJx;N9ao+2m3OQqkq8u^ z?<}eOtu#(b<=xBH?OG%yaOQZe0m_0C=Cz)d4k-0*t~X&b-vI+C_X$$MM^<(z;hdN( zN#IAcPobKg^zG|DC3+U&+zYf&)vNt6N~toi7@0Pc*J0)IlnkV;Ujy)>t@6veOjSVs z_tWxgOQmUFAo7K}>w@;|eQ=V$kc6dv3<3yU(sG;a?s1Omp+});gsJo6Y5(|nIC7I78cj^dlJD4kip91&+7VAEAQ>8Kl4tn}P7y%)*djd+p&oR*_7g zFS0G84S|R-Yi`4eS!i@+{8#%!oqGDiLQOGWFrAvH9fuGS>KeG{3GyYl^QywKmTIS_ zwQ|7Q0C+Q=sv$Brm4$Q8?{%5pgVD3dT`lCdD9ktR)dTRZ+4lr@$Fyb9A04Trp^tG- zO9FB4NnK>$@`a*(UYKiVzJt*DBVe~1M^h|v?6>P%2>>gf=e<9!Mq||^P5|%0wo5UJ$YmWB|o*&F%z}S3wxAP#xdfysIlvJFrke_+WbM|nqX1T9-cg@iG0WV_K zJ=yVol5s>q&MNPs*D@gG^4t>fK^Li-oRL%p{wkDQ;}Q>JMn|P$O`DY`94Q04?4`2! zw>OCgjiJX`!rI=kPpWufq%J`y7gUg>Ioaj>{=Su;)0XdN79{rqSn-IbE*Tg%{Ouj^ zgS(d!3WxaAxBZCxZJUrbG0W7N(q^3@2FWLYdZQ@|pjE;E@8EMMH`D8t=T0aoK93Ay zfXZUNm!GZ&vLR8p|Fehy9BG|L$tXg@^~!{G45MbfyM?~;*y>#E4daKhqWdt^yCiBJ zV2ILg-~^~d_wCI7+y0gb6!;0QA3hsl^=(r@be!2t#DbiWmF9fQW8ewJ4t{vYHyK>| zMsdB92gh}_1x~Sx{9o|XLcd$(R`OYV1ra=C5a@29s+DptLvsgQuR4Y}4sSW>rDlWF zs~PC>&d{yoN^)zT<_W#$e9kswYo_6+uT^H);l8aJ`Ml0S@It%5B2z;e%3B3OhbNv=KXC zdYLOQl~b+j>mT3!s4{&7I9pb{2%6-^&EKh0+&Y7Y&4=I@0mxnd>%BDUvl|*)bG9;Y zOs7dKwjgIl_8FUxPm!vr1I6qpu*!U0&W3+1pFn7G>#2;obWAv9kg&yF6No z6F%ujU(zh>psf4emGDdR;kBRe+Ruw;yd;0q6OImWi7>QONs-c}%0r!e_s>1!vNSKL!+sgf|lqajmY-KiA9Ng?9nzb9~RNTac zvCu(|Btm86_4|v0w@nkL9w?!6Nf|@JnbScWeOh)L4QfFVg4SDlG!B;UzyU)HIC-Ns)5Wd%M>=1l0wbmf}@=ErMJO#@U%N*x*_210{&ak(>z*X{S90Xg5?$KO>Y%qYVtk|Ic&pD-1Ouuxa0{kD)uk(ZBxxIN+6d(o5A=hRE$ui z<^rKQfz9u?*CENe{(8#&J52#(+7rvUuQ^Z36K;s*1Rd@BPipGjiZgl8`+f(jeH8@9 z7LTjWq@F1S{8%C>KQ6W;ZZ09En40J3y!PQI#XXrnZC(o~Ai)!4<5sZ5Iq_PywDIti zJ+7QT$!gO|%P_*@aa)T$; z9p9`+fX#_(fbx^$?v^w&&3Q4_s7n@ZK!c=g{5=}+2ToYOU$iFhNG{@<1pivu>cYh0 zYBO&0ej&HYS`BQV({%I07rmR(;j0lwS~4Rue5yqxSBhztS1k9P0Z0gA-5(GTatSiO zoY-nR1yAObOK{$caj(94B?B8R7fGT=@yIxx#2hy(1&gg!7gqDU+)I@Ezi5!Ty!y6> zl?mexCDGT%@n6f@)?|;aE*?R*L}z-esWE=T9Z$R0-z%c3DPYMC?gak&5)T8_b5W1M z=3ZO%6~>-CCchWk;G)0PUpRqkOY> zdTPlTaB=~`UY+B#9X=u8C$k@gy-}> zf#2fHFRdu1qm;W|b{l|z@YNY>{((glS(A46OVF`O5gO-&C#RfZMkkCwkk*!?j9wTkb%VVWNWc= z=RJ=dS(J$2g!mAvK1EcIj_)s9=9+&7C9=F;LI2SCBlb#-0c|dKiAGcBjerL+r70V% z<^5n)oe6u-YZYCE1l3}q9elt0ZF`3DP)+omyJ~Hv7~X*gr7RZLLpHv2>uk$`$BV@| zY&y@M$=`TIu1}NKRvFMOC&JYXz(&7Jdwe&5^!Kx^jSxW}^6PX^toKVNz>04GXAq@Vy%3Pt$KMNYcb<*kZM}^YzrVQhDd3 zT#;E`*hl75!i_G!HpWI6yGxl+NR2y3{cBjXfuhgTNXdG!{O}<1307F~%^$v(7gz*% z7Y3~N%cOz}c|`dU8yXLMpx>N#a5%$1&-xkf2pg<`%^hTkaf&xG06;vyMB2>$J>nJnsf5&Ggu3hFHk9hHymCnUqVmg zww`r4?9HKWRzMPe@{sZFt1opwC>+X%ZE_|YvWj_XA&))`US`uY>>1D&(*U^y7htF; zuEGq_q^Fz|`=b|HeM|JtP9(`)+EQ@t;yJg>uEy8h^P4Q=CSC{)hV?eg@pDH$<9*&W zc!~>qlapU=GClXM2^_U_`>kUE^Tp>Fv+~OurCHkInZDTT=v|FhmSIw|ipJw#2>*E) z$h~)l5I~j1UMqTg!q9_N$)T~wXh*Dc^ID(m&S0g-ds_>>10p^wHaC@DD?iLkpG#wk zB60HBpzC+Pwlv=okp!DViH>&o?OI+Uk-z%i)Ec(dyllJ-Hs$3ie7gth=llFZAozU& z6!ph`_twMl7(D=2afTQ72bSs=pKZLs7S-a%tIC@qd3s~p=AKifrfwq^ExDH6yVfDA zluwCwRWE{NXS>VyTcXc*iFJz>ArZdITSJ05Vl5_OxwE5vu* zU*%$sg>?e?2^Hiu)^7V(#RMdI`#$jILWky2*ZMQYA|5Myvew zTL+*w(`k1y7g8AOs3wYE{uLuQsA4NT;xqsG=b(EU4}LW(Gd+0C9DvSnw23iG>IJth zPYcs)G)&B4q?`PdIX8obnH=G&-j%rFpPP5&*5VN+#^=N;w}QdphPbgTEHmE} z=0!IA?Cj@$Kk3#aMjSbWEKEX6?-4}_S^JY*y7sIQ0lyI=#qU%g2oAm#)JpDW?3*Y( zMQyvR?02d5Xvu*1-;JmXd_oCbm3Z<4SCP@PZVV)Q7#n+7kQtp7Kw4_{i^)`PPo{LC zbP(8%Q-Mcdm36#}ce+rG*5>oCuS{jce|m)aQ3#giz|ceTBF07W@x-H)CHr|h~M5W^B$$M~i2jAb2;O89K%~6yL zA@2GqPu@%`%s<7C_Ua9ykLhXhjkKviF8hWIo$D9^+%y9UlDy4go1nj0`y;;t5Dh3m z%YOK-g@3&SBkEAJBvA?fx1t-6#_vW-i{3F0ZyVK6Cmpsg3|DmZhCUMJIp`mqPdjrH zH1;{hmxAmZd<-YYOI%r7Y8Nb3W3P${Gk7QJ-nd?F&XJt!TuwqO43RFKCK2*(A9SYZ zy~ABKJ*>fd8ML!IOJ&~A#n0B3MbB3%igi$?_4kPU(r+RvJxm&x>JXPt=a0V)wxBK8 zuHj@UZKbL0_LJ~DG?WF@iBuMria0SiOCCdD!Cgu@ivogm}Ii7TWhl!CWQ2n@<(b0@6RC6^HK}2cc#he|EUSL@xb2Hr;S&qme`QYerA9glYCV`-?BHA=I z?bLrHLI=wm-Yw0(=svFX0pS?VM+-Av)^S%f3j~_}6B&%Gjs3bcN`I~(yExj`U5j{2 z9N1!rf`Hj-{G1nxWAt0=$-Curz#)H*{c5b{#ua?ADG7@+0_lHdWW1benxUj-Ao3gj zJvS|5rE}C~eXrvE!k_P{5kfyakb0&|=MK-;r9t-!Wa#9Eg`Q_ukHZJzS+2qmdl|vA z)ly6X4;y|f<_feFn0O7NWH}@mxJ{1EVt$^h3xw=-6`dPrO_tP$-B+b+L?k0>7>OnF z2I-Z)cKwe7bnTgyH%=n?fef($7sY|@kYOKt;;Qd1WBGcwzond5GVC}Hoc{VM;iU@W z1}6i?)o#DIc@lIDZiZ%G4%um_6F;&ITL`o+w$I5I!RFfy89se?YvSv+h;6i#N4nRI zja~KbH#Qa7*&uF4d~UW=S6Ji%n+xKFj-Jl2_ZoOc&O%KA-U?Q4BW>DY^4zKd$^ix* zC5)PSxra1UPfJtR81}Bx{WU?9K{=!81uRz-;_Tl`(gl|~a~&BxRX>DVFmldz6X)EY zearUO^FuDlzpGla()HhWBW@LjEI_he9&KV$NG|i@oXEojcthQ(s?~o*n`3g1?q2M@ zMukmu;~6N=sbuF>nsFdoXYp^vJT?*&aIenS&pTjY1e-W0Z~{X;`QqEX=^Esyr8Fhy z_KLwgv^0qB!Ki-PrGm@|!tH~^F+GX15zh_F9+x^Urnb0&;V)iN9%YDOca$lf2ih5_5z!1g}E#rz=1f> zLL$LSBBR!+((u_|i7t-~=zB?@7A;gos^Q;edOD=T=y@|RABvkTWMb=TI$E69a#8#T zhh(s8Q$I#QOR#jw-NLeZ^U0E(16TFR z({)jSLM&f2TW;d(@Nv zla&bqQ`#<8xn~j7bJ)k4b2!S6<0mn0?66(jAvOnXh7&eIbSD*&57tAOK{&N;qqGj_ z@0gaw8}k=fTc{C&OG3l3^cAP1C%@vAwg%v|wQUZ}z|$wDdQaC&CVoVyUauYLC(-D~ zre&YIegxkiTDRS+x8F=Vq0lrdW;(L?HNg!M39@;(V)s?plC;DUzh0@Gw6%d=1SOyE z@~YVXmjzg~T_aX_+?fB6Jbk*~F<-XSS9F~={tl((i7i{+RRLv@Vq8W9G?o`>Tv~639iEKiu3_ z0&=AKYbhyT*lutr?EH-V`Heuq&yqgx>f$ZHGnl=Yk=aMP2*e^mzF8-{UgugV7sM>c zw7h!`J*IBYDR$Y2*vBb><8LFh;MY<)O@B%87Hl3_iSs#|k`}<(I+1ME?%;NW5H(HT z`nM;BH3Q1{qauADR9<>2>)J*WC0O11;^j|%jDf9ig)_t4gzj?Bn@u^>==31>Spt|p zChIFMd3`2?!^sk+5#GrGUOM;)zme_yYnp+b=~h;(oVmFU?K zi$^seEa8 zM2lo*PKcOuJA3Q5-=#2~`~<^v^=MtbC~2yfr@@pN>$gRgFQ?D?Ma>q6`+#(PoALcI zUQp`kh@tZpYt&nNwWH>e-Z7^Zmo%v()OWmr-ELtlwQuN%b>?ZCb6p@&zDf&=^~K4mzk1$EkCCx3orl zHN@=WMRrr;CdgC8X?HwCC`c31Yp<=E>iGUCXW(CJAK}&RtJq&no`QnVeHuo3lZb2W zkD*;DO?*_jb%HP$F*s!s79)gdai&8L!&S$lw0M6HgAh$?>)AMO3a5`%e|X#M+#+tC z+|k1`Q)J0}vfqLqAH8yjS$=+~qGr8Xzw3K>B&|B!Br$Y?EGP|=xuh|Q>E6_xBG4HV z#eER)&gq3f#|9-rXct53@xK8l!N;5Mu?SqMgruI3IkCUVO1j=2rsU+zUYw|jzn;_vBgJ@ zzlgtCeg=^1qB@=HT0+407F=>HapKyR?y2tprJwL{;V_5+dqsznEJl}9v1t3N-2jfd%~94O%8WpB-Qq4&oJ}gA}4I z{n5|IQ9Ty3GVsG`$~D3a!_yB$3zS{OLVNv?XB@*uFia4%cQOG!U64MLe{|anOU9fX zouyp7FB%rLR}U0vfHTV`UafqHu@wGT8+FQe91VBeE_iJ)$Xr-5`Mx0u)oO~@>Nn5V zVX^n)ilh5xU~a^T0o+XA7u?F9@E`*fFJ@i^+T8D^0i#9l@^jfYhJ;-WBt%?nx`colR$|*@E0CR4-6XRll?!br_iPVvGruD zmB$1pvea39*b3QdtF@zCk#zVMLYOjst>7qu>n}F?Uc9o3{Alf;oJ4qk%p`_X)FCz-$)ro~jai{it=UEw67D|fk{HgHT z*z7Q+r>1j*0t9{y|KfvKu*=q*(V^?v;Pq=B5Tr3v<(ci_xDJFc#7ldt9d_E0>Mvcm z>)V40F7iAZ39iYQAs&!{4RCq#a-SNX$O(*>wdHYI?0-L(le#<$Dt0|=pfcYpY<(#;TS zvGY{*uS#8Y(WO!hjCo=?iyBkns61bapL6_lc<1Bsfv%xEE9)N)I5gK(C1gzyJ<$px z5u%a#a=kv6rlUx%bK}@ZF|$nv^Q3Jg&T?&QT3uHw>2dob4Cl7OHjW&xgD7z_Hl+TZ z3WwR$@nozVd^1I|^rBvv`T=wB=IqDH-e+Jd0NPXOlm-;|J^X;liItipQ?3tMbE}^m z+7Z-lqCFnW|A7B$WgTR!_JcE5dAf|tT*0EAN840);95nwA=^QE8v`GEcC=9a7MABB z!FCYiO^QRk;Keuo1&oJ7LgW0aoEB#h^V|k`K_gfrnYGot1jdQ6B%7h%W|L=lS7xpV zSN0p4Ud$>pYdJX1o}>=^^fMGdT5+O4$#oDG!NOA5uLW(E0ee}zuJs}cxtUKFZY1B0 zBoUdWrEc#p_{<6ucqodxox?buPN`}>(oq(K=9bk*Eb;hP3>bU77BcBUnT~^v{|3~z ze;YCL$>F$P|@sW2NzYh9Zc=%loF=Pl`Puu9DviFo3bqmSS!|e-J7_FeJzqI z{7B1nSB7iY*ljVwEP= z7hL8#`zvkqcn+oD<8XzbrK*mBcmE;e%3_6~I!=NdgL_-^C*xkXDHYVOj_D)d)m4aLNv4CSsdhR|mRLS}AZXsi zFT7$o+S|tb`3|shgyF)by0~PBufE0v=*QL~;<}FO*;`#3bJ!+N=LH)768jb^VYt;F zBC|`ZXV=2@uB)Ll)jUj_X6@PUYtny=-}h&$*pgqA2MDd;iETsiuk6(E3k}??tUtBB zvwr|FI!1n5{1$rQmKW+VA=(OQV=_aR3U4Qz$u!14ka#e*goM;rSIfR_N_c7Rq45(? zD^NBVwHjiu+e0=>(*`J2IJ#64mw)eTQt!PZ)-TY{PO5-zwqN^N+j`GICP-i#->vKv zDKcuVa`lo;dPIfgo3XG@v0)m~zv|Kow3p^QdxB`O!_TK%3Lej+uhH_oc-&!!1LS(x zcm(A-8V%BWM;MV>=&E4wchizI=@b0;%M;Vi@lU zSNK(*jxdg93#I$}!;s`oOysnF3e-F70bwvp%rJigv}DJd1y3KiJ<)NRl&JF0mh$(h zuKGo-G|dJ5>qk#)j(>^+pnVkbH(OQSNq#?3@W8`6y<55mZ*8`mqs0#vvs9%ub<4Ba zkLC8G6t1Os+er+iXDsIwlM&G@zN&A!1i|URz5nk5Rrbj*3YQdd6O8~{NULFj&Z~0#S zaTWjw=30@uLH-`$W>=dR`+751vP`THI$AP3`!%^Jr2%p<<9}-b;@RaAGJ4}`Vb*vJ zjmvKRDJtlaB>oBgkv><-n-|+Pso3-REDn~b{X!l7mbh$2;VrJiZiYPIGuCcgqaO7Z zcdZWp?~E=VFVdcm$aTljFnEX}hp|gj6~6JjU#Kv!V(A1OO1yYIgko+Z8pYwm2utX_ zdX+ksy|uC1Vlnerar4N8b>$&uAJ+HaQHn!cRNTB|gi2`Jq*wga0T)gExUATND*>Qq z>d~2(QMawPnn9cV{72m&dJ$P$lN|-urnUez%5-QXJLU^lf+&C)aHvc9PR&vuHXBd^ z<8AN{FiGbTbX=QdLXliePj)XFIhas~*obF|*>mp<^)AHk?6*eIm0T(PCWQUBS}1PK9_3v)aUHjroH_ zfqzoVzg|Fw+u^dkKn8@|UF%Z7A|LqN#U%A>92SAZSiaegBIS3p~dzu+*TDT&=k)> z;5z5z@BhdVBov$URZ#7dmRdn_fz#kUZrfSrIfK^``pp*EWlh*EuKe|5C!3D*?(Txk zdqetbevP(g0omH?Qv=B!5a_A@Gxu>^aEP3(w#w;uk`nE~k+K!~mRYBoPrNt^#}ka{ z{1c-y_EzNY9(YuC`z{-94?OzjjgrLn`fI5ZnCVmK{dtOYK;A>-DUc4539*8p1)ru7 z|C0z2Sg;o5tWJnVtaX2k$>82cr<>9v+&pV^r`|_4_G4#?ahiEBNKdG}SR#R>2o0gQ z%UvhPV!SWb6Km$ zHFz9NfT1)c_qo@@u!K#6-`FTJz2)`sa<#8|h_cjshv@?u%|gnDJe%ySRMZQ6!9Y?e zVV=3(q$rfa$ad!RE+p2J(MLk7QgvRk@u>qr-e1ko4&y$?tb(VX(TS|@YHFrLytd98Lyp(9@Y#2+ST{`v+d5 zwLB5{fZSZeLw`#W9RItcbeeYeCl**7U*%oi?qk9~wYJ@E*KQNy(*`RRhJ@aEHWc4$ z^-v|@GOt0JH8-|4wss2a$ywPqbCfa^@dAEru{a0Ef9q;#>hwM{yDk&;GYI|=*du;B zUKqrx2bCr^x!d!1jhP+&j9n99rh)aSHng&GL}z{HBLK%P7*K0OURqiF zQdn)mJTDEF!f5jSvX)h(%^L{qrhGn^oUiQOjUkMy#@EC@)9 z)c|u9rAy$<{crZJsQCmN(zImhMuf3z_j={BV)@B2-ufz`J-`i*=gOy$ z>e&_iR=-TYS1LgMdrW#&e?ejan%;QP#oH&_1)6eh9F4fLVuQ-;W6am;F}=Y6V6{aN z(MSQi9Bo8+m#(1KcB1o=$rP0v4gp=J$52G47yrs2rnZ!ri_E$IiMtNQ zRT{DV?&Zjiv|5b#l3*RctEEt0YA%<3A6||frkx1ey>pZa9jtOX0Ni1u9-J4o3I>N3 zd@w|CjK!K~O!#TRSSw zf>5rO%$elGsq0?q6VHj2EuhX@eI1eR z7NX5K{s%7fW^0LHbo#dO9l@`_8YL9%^iUVg?!{xFSqYZhiG={BTW2qSa{|wU=GysH zLCJ-Sd+(Y3&L5V+=n0TSC%LWh0$!Sn`Pz(xxw(^-Vr{wn+8n=F@bkauT+w?7A?}2} z&p+rK=6kQA+1sQuoYq7#6A9QbE0}O~ukYWOcQ{@bv)g+ALoQWm{3uMs%i`P5IPdM5 z3aSJ1Y>%sqKqcP~H&NJ8;o-Xojm`k^@?M;|eV^5~nZmGZFL4AE0(puwbnk1Q0}YDqkgQ zniiEhUZzs?@H9M8T>L_EdkQrr|8BK7YtE5e`^?5yWZ!tY;pfsjj^F0hJ5L`|(zG(K z<9lRNQCZgU>TmR5EuqsE+Xc&op}vVwoOOqw{FY?PequZL*Z*BcBhFX#JRMU@!LT3x zkq+4$wpe8Gc)U(q?1dF69cAP+`&3p|?i3ovgaqF@=`3QD=b@+{Q>pf(!^)66nz)vy zKKDo9tjkh;_>HRPk=9SB_?M$Z}c`Qu8v~yy-m?(kRI5hvZ$5W8N^?j z+EuE`jd$X{@Ej?_xV(`pcT;xv^xfMFEq#-7TsbIAR8d(;zO8Zn5otH2`l@G!`2Wr3 z_5FU5#BF&f!`8qLNwHs-@6Ht`TRv1#G(ub6lvEKr;IH@6w00>i2OIoes^#K*JkY&39A6SCT83CsaM$~+ zhGASUwL6=AL22vdB14)p#1r2^SNgw^GnJI4)(MvWk4@_<4pC|r^I^D-i)bhF(EnfJ z53`tGVV0`3=3yNsGZH@nY`f>ZcsGzdL|k-X9apaR^AuN&;PI$ld?t+o(z9hWmdvKX zTuFEYIb}(x?ZQ`nMm|`B!c!|Eiwiw;#pR>4lZNFUEan_vA}8@@?&cgQ_(d?mBBa53 zPFsCjI6QhM{KPyrSh)jx+*p903HkADxpgk|2NM&Wp-2P#DU-?oY*_BItPqneN2i2< z{aNON(-N|{9I&Rfc!mRN$57I=2R=CbR%y<$Gm-B%MN>1wv2wo^Aj;HknrAAl!Esac z1?Ggi2{FZ?cNdcISSE7FCwtzL;@YrB=!^Q!!;xsXp}>XCsm{duJ`z-YM;#p&asvOU zIna+n!TxvCoKX8`(^P?SW@F>QGz^`U(mkcP=cX(D3K?UKuLbrsSUI^0MmkYuq7UZN z{}DJkZ{LW2$3hsJ;}6&suVh-Y_kGM2i0y4p=xHXo0TCEv#(N*tI(#8`iX#74u)m{gnm6d-A{U-&PwWZ%cQR zj9A2VNNo>klLoJ;XCNrSq6k&5zj*&cH?Rn=kN^GQo6x!jrzc+n#5s3Kl@B0^rw20F8%=rkz84!Yvm+?04#CO5JIF|W*=uY(B^}l-s{hP&j)$zEVS~p4-+_}|D9oCFR=h-rh0Vln+78aENu94G8 zP??W4gqwWz?IEzL`zSfw3kAV8JFO+4HZPt5OID@yo8}l@W3rR$*hb6L02x)$lE}Xc z!23u>%l7yFD8EO#wNSh|VUOV7KWHTV4euWUjfJIy1mQpH#pC=Y21DEa=VcTLherHA zSFq>6iogT>U)QgC@&0{4|NRWl^#6hzkchJoAf5kIKr`oXZdP2e(x4R~dBwso-%wQs zK57cexo>ffMfmTEOw&Yofh>5Dh0W}XDxZ^*X09M7Pc&pSy5tFpR=cj8^{!W*0mNPL zcBZ_saX##9CH` zrD~HJF!|J`#{}xDcP|iBq92j~HvJZwlu-6FJ6KJ7jINBckV{o-7MOhXWi)YU8`i@q z&DYydbJ}2e$4n*tONX@>|5ssdg?H`W>2WTLSjy(*t2j|t-nO^B^)=&J`dDmMGo`A+ zoHBTvsjKJ-7NzFi@I%aWnHmCAw7eOyBhOqv))uuSr>lHgp767^Gc`3=LE}Z;zj#Z*JLm@`HgwuEN_ogok_wF|-ow?3RI4yMxigv&8$r1)( z8xKa?Z32wVh$ju#;imB!s2NOelydijHz93iJIf>z+Ur5Jf=MBFepiZN(!cn(Ia#d+ znw6}5$PI^A3gj#wnqkp1vW}AfyQag4W_08<-I3g=jfjG7ff~neG$)xbI4bjTQzBz$ z<#T-`1+r$_^Lwa3!ydMREDXPUPx?~eKiZ9YA%-K*)R^XU4n3KWdTBte)J-lT`03lH zik@-ktAK(~z3H#C~+5Z@Gp|V*N+ZmA7Fhrut~gvI`xq&}04@ zX_rxfy*`)mj66zR^JH>(vpq3S1f|h>$)OS=5b_Uq3bV*a75T{Qt^T^FcKxxC(6{|N z;f82L51Z+0$8rwQ2HakF75Z!BcTgWO88BoTb#$jjgMCd~BCx2XO|81NMvgN~UBN`( z#8r((fF=-5sl!|Rt;6GnYe9Nf>;WZ$nYVv`&=>0aKB@h}AcnL87a0hKU{0W>?|n;e z`qTg>*LHH);^NHyCs+aORLgPeR)S^n$sb5~Xl>+M6ccLxY4eD3fUs zoa0`e0eq?fI_J)kCmGCMyuROf+nI-eERgm~$qX*1MpzL3lE%wZ7W2)6^0NXz^p|Iwa=N9niJ@+ijv^%4p6D?pYnRBBS7eFoCpN9TB`2S;iV;V5!7^P8J-z>B0VE$_f*nOpRM(sKxQOQv z#!Ro9sc?)*f^+q=GBI2wbDpJrQi7K+0xP2kP)aC2HMV=yAGR6JVwk99MRS-{YEm21 zOV9OdY$${=E%NytL1XC4MR0F=?tQ;C|JiQ6$#*0u;z;@%^?xm?qy1g36l568PDL*8 z0s8p3G@)DXBGo1M0eK#=pgK^{+8)hJF`c9Em+uo1O`CM@Mls)65^4y0$Zxy|5N7H| z+pGu)z$t~iUNkj+s9ArxoPVQ|YOw*n4rK^`3uHyp5mh2LtvnQ$(Pr!=o%qWApvI9f zuzQhuV1K%;B1}=zu($|UU)BLkYRb(%Is4sOdu|e>PW`wg8VFdW0REXAxc-`KE+#h@ zw!OQWk`wDlxLZU-PLsfU#n>ysZ@@7yIuMXIbIT~YZ%$k}YGqN|;;8$MLlK_Pk z_3XHU4M~e9r46zmUk)2Fwac%uJ|pY)#bE*7KQ~NMVhoLF6d-iV6LEhcM_SM<9Mvl> zw_=XJ6vF21~ya}{HG>U>ushC`9r55 zq27Ol4yveHim1p#96rjd#%vScS+pv(W0D(SZ}=1SR2ZwC<@$KPUh8xj>#}*DST>|Z z5#*$}9W5rk${b`*`)(l(r%^E<877B#?x~Gr+`%OmBjjm9Ccf~S z4=iY)alx_Ec=d(ozZ@5JTBBHcr#KoWnJH2cprB!#z0qvHlly!;DVY5q_kss_-+>Wh z*knY#NXJm#;BnV$)$siT^WxqZLc@Z4sE!tqZRx>|Wu5&KS;fsAEFBb+bsmFi4pFs` zs$$S+JQ3D?nfU%L3~+^TC44A=+SXH7$sx^90>z6IqZwW*xv3~BUx*R2RIGufd4xt{ zbPm%lAr@5DB9sNsRM8#Hu+Qs0rxc!uIk}PvHct|-$eAeWrhl=4B!a$%`soxXXG*j2 zy_8z=D!!{4E&CASVMC!YoMqMgbP)hcOX;Wpnu4Mcyj3+@C+swTUMkhyDUtRawaNbM zaen{Mm)s!upxrt0y3KR2M#_4zI@8-L*CK16=D8icjo6-XrbSp&P=qqak1xrZ(_ya* zhExFQR@MG6kQgL7QNn2h@892$ZOyKy!Qy2R6I+SaUeAwB9wjbCO2>^@@S$kI*7vR6p+iyl+NNwfI3mg$ZxbUgPwQm(&9vBtLs*+kcDx zBc`S8#-WhKFpXHOe2;GSp~@cEdixAiM# ze%NUtr$S%(5k*gEhd^)4i{N1;DxO4XarNBjQ_WxYuho33+#3gRaW3|TlmkBBJYC}6 z57ks&p9Afzt;@|fW zdvZ8$NV_q_2PAr@DY_MF$3!g*4sU} zSPDfwE^Vg%Xf-4IX>9pG6zjxS=CjbVX1!c6To&zdPV?E!A3bJ0{OKuYl~((_QA{^@1Q5ZsUq|4U5!ofZlNjC4OIwn76Q4g;a|Syw zKGIvn{(>P-H`Q&vKYFZ_CM})uKq9!#9@yO84fR2c)FHkjLQeYCR%ktG<>wk&S}giU zo0;0dH0u+lOuMDY(KwDvC~Z4<+xs6NDw!E->FV-i7%hd8^AAmnp3U;!CU>Bl>zmV` zca0-{PVhLP*c{IE_B-6Wn*B}Nb(zuM*>fRizhD6^|HJCo+Z6jWBldLa1elvx#Ks0X zCv2qM>)*YJin$C^86bU17F~sY7OfA-3w664u@ftXO(RxWV*AuHBn0Ato?#13QOCAF zKOA>8V6+SGvQxcQs>x__UD&`Cw&Ym|W>k?NgL$he>4Iz<1IOA0D?QnnM(T0Nq4tez zWv{FWyzp90x+Y&5e)kB7C+C&T2al7Y}r+*l{w3#8fWE#>8jk)9sf3H2%=3I>usE^p`<4!fYF)Hklx+>97#b(l_J~enz(j;A8d$R21~Ts5 zp8NvTIn=q|5QoB;XqfIW&y@@V{%O3?fCL3>GcU3#GUle3QkXLjgS9mqGb$*(tm9MO zvOJ4BGfv{m#~)=dHAZWkYm$b{qzoQ&xTI{|cENICz8(|ZQSV<{N}3Zl7lfe)G(6sA z+mqrX9dY~m$eFM7DEX7d3mDuVtrIJSru1gBZ!Nekhu_`D0Ak6LL~C<5Uv6kEJ3!b6=uSQVuwrnw?J7+r-{FT^Y?2HZH^G(jlp>z4Qxp zs_U$_%n1Ql`)!;5nPENNXH&$ebOZ#-3Y6w7BYk)&QpR;{PZUgHR))fZ+x9fc6LqTaMVvy@{aS3InM#crQ%tI{KP8CYGWDGuw2&YZ4QH@A zbj${|IIf6;%!+SskbGGEl;F^SRbhjg-|ZDg+bm@K;W|iBFeFisRDHVb)?zV+ygR#` zru-Y(!+*{pO7YaMsNQ?|l8;#YCtdB+hkpukM&m#13>$~{G zA;tU^V#I2zFRz)NMm0eee#q^zlXM2BJu~WST(;3oUkmD_+L6=W&tOs=9g`K#4hzEY zu*{%Ul2fCM`p>erjRo~J!Evcx91ZqPGs9TPx}!HSF^F0mjM=&~9^qMarkMGY;m_v%9BL5?V94HVTT%IP(&+a?lJ92wCc-*F>cOEuM zzZoRdIXyqd!9PIb_ueWDM6ch~ohh8VvHU#aS^PEg%AH8inQyUNTAKlzbj=;s*$#fRk=wfmQ~ zSiL-{S_dO@1Fyv59qi1C*kQb@5dbeqZtweHt_kXObiLmzAz%sS>s_$0oGM(aQ5LrNF?IQI%ci7fwHV(^8rJ#)6kT7HqtKiUP|gN6S@55mO^ zAro0}s#s_?_SU$ z94e}#N1|o7ZIroT`~{om+)P%NcAo2`A8#{%MUnrLt@1LF2C)&RA>x~a9WEKW&LCq32pyOpWP0rS2IJ*m+(={C`!ob9A2tQz-U zM7bVZ=W!(ZZUI{^t(2Pj%A!`{YUQ5IsIaF>w(^3;wz$K+FHL4gKnxf9g1|mVmrc~@3n6VlPC~3Oc3jq4OaeM53l@;$AIDz{*eSVYm4`rHaL%T3xP$iRm)NK zC|{7FGr3gjWfWrfM_|N%fJL!^yuKFZlXnM(6q)v#Z4-})u|r1s2@_Vq*@y=jYaJ`R z(G)f}REec4O_XKSW|N|Th)Ro=k(gpn>_Qhd(5=Ud&eJKHQs~liky(tkwTDj>>@sS* zS2`QZ)sb70zsH*iLbHxVlU1PmY_~6Gs6_KiN}{==M5W1aUi@(yUY93EKyQomCxBQo zJq9oMoj2>rnbj$%91djdRD1GjoEd)h9uTIdVk= zT>S7kUzt-BoW)S8t2m#P70+8m30#F3;-Vrqb#ke^Er;U2{HUgQJp^QilpBze#gd#tk%$? z1FrMSlns{ilO8rY7cWab1;3&HQ&X+yH5>&gYk~WcgENy)b$N;`eyknICPljS=yuFj z7ZLul!22RKhhC>h{>`iH?1xZ{vEDH!2&)M}Z^UdP{QUX%uIrHO+D1jBVRiOq%ej$G zYzQ0vRi0p=FdHTm()Bu8mvkF>2>7-ytZi(@C0l?Zp*(o$NHVZYdn-l%kYwDu0vcQW*ykQl${`Zvjs6axdr>?c zAD-Z#8AuSzEVo61rxd+z@60@Zjme9_B)bASMQX+Cr&!$#f%=Cy=gC&9cbKcmLfPdy zbW@2>I^Q4HNjjJ*WvZ|V=p)}o=Y)2r;M%oTq#K+fK9#gEuOT1$nS_iq%$OC8$mMGV z{Z!^X{m-Ir{r)F!){Sy6G%6}7x9>Z3_-El;wsxJbEZ3hO+7#r$IQ7#L3;{)k{Jg=d<+}&T! zcnWcb5tG#F_8Ug{!jV{mIbVFGIlu+)4l(1^{4A$!-=l z1XjPz@rxA15h*6=UCQ^{+Wgp!geS27p>sM#RSMa$9*H@;b*&dia(3Z z4Pw~2Fms8F{g~i6xS0BOLtQA8)^NV0lZ@Dn@B*U}YNlnYMoU;6>s%f2*P$J)cd_IA zdfCUuivRv3Az0OnGG0)k5+lRB-z4hKpsD)kkb0f0cFy+s#Fd>>&KI-Tw6Np-7%eWk zy}XZl4D0rKO^Te9Rj?D`MJvm0{ei3O?7O&|a$n0~8j>kY!dE;4AZr!i_zdPB|bN5L3ltZ=b#B(Kl!;6v z{Cr`;aKT_xg~>|!`j_nX*tvbzZ|E~>Ih~iQvv@gRK*%qy3J~fjVKlV17|~Jbr?R%r zewZ-RO`F&nN}SL*Q5`|}I@F+^(uUT0JG9~<6*rnsPcS35Sf}qdxcgs^-~?MPurx^y zI6)G%dn?C-7Zt%?|8vEGbx`q$->0c}DFSP~(0EL106}taR(<`##o%M-HPcNo5|9W4T~pAPCCS zZOK!H%WZE_7&Pi@aFfh;u@CZQ2Yy|DONX_%LpXLWf19?#LD2PvmLn6e{r3^Hq4#OM zq&_A`G8LD5eSIBM;}2_NRFn)|GIU2uF^!IOF?q4kYFpOIK2|5s8ZBKT??ewoPTq*O zY$-(Ajgiy|I|DQxz6FMp&ZNcjo|(0~_x(u?n#4FD`%e(Y=2mU5&a}zVp)QEEoAzHw z@2`KCu;Q}owF{gMVmaIUI1%@zO38;`oufNH^*DA0mEcIopZ)lviM%H687#?hW>xoA z?RDeX-&oNrcE*vm`Z59|XL$=+FSfCJAPCM^Ksv=Wm6!s-NC!7XB6VR@c|v+IrCo2A zYR>xbmP@Paf)95^eB8Pmtx{!7YAqJ#ckJ*mv+V9nMmx+_jFnEeNvyg!HS@LH08Zz> zM%W?k1k@~!`F?ND6oC1BVes0D@t86LwLj1jg&gW_WDlG?126DUL4j7zQt)sDbS-Yo z*KS}bf)sL-Xg!>B{H^P$`|88u=6MI%mwWCc#7Qzh*f$zJ9_eA1eV=HbIinfRI#0eT zw?3&J{~6pFuCfwRzzuU9@0u-tkmcnK<_EkgiX?JdE1C`*Gy#n|K#GbX@BzxQ<+T=Q zhV^rO^!To`jEODnDJ(VemJpD5&1-CcOOY}?MH4ULaXAa#?|k|cC#l=$35%*}X^l1; zRGDT;YPO?Gu+|&1=<^1ZoNH}E<@#GDU!+io+oOt#nD@0h;#Kvw7`2$c(}H%d!}dEi zL!)ppeS5*=d<(VBj&Q9tH)$*%n(Lf$A0^V%Y}p?eoyCER`zjlsI0gmepwfnb zYFyVYhbxXO50yFzWl=MpZ<01Y=F0>;(oO0x;x(IBUeX8h1ogV3uI8} zP$v=ad7SN}(Y$)smbC$?o9#<#y!M6)hY|-pZPF(|nmp3Nm%LywLzg0}KNw|5zm}!| z{!L(gPnU^_lqall zL;?`X#>}Bq`Qv1Jk#$83!nTYQN1v9<;*Xf|9cr+W<}5EFD7@+b`Rc6US!g@@3LnkO z3#Ts;Wq1y=DB4GjBKfXM;luezRXw%vX3`+B0gc18Qk)T|)P`DqNwj*4x^SJo*FPz; zqkLIQ1W}@;JWnHP32b!X9(GlY9}ukDZnkKeCw*_qMfojf=XR5mig!Hv18X`mJ&(x5 zOkZ+VZ`Xb;vI9mHX*NjGx6b% zRtu$?yv72+#4wvBu%@o+dN@1}(9?g)W@1E98a4C7Vn4cxx5UY^{?&iZBl}wkK)jsw zm5v-FftScAsq|)PW&t?o98!G>WPs+R?e(eSs@;qC-D@OKJSA#~1AW_puZGF^xpjIj z!bPRv<`o_YgKInUK4R3WS*dSz8K(c0?Yfx6;`iL>J3a6h<;qR-qevO1_x2g;ovh>! zLBb5_kAK#!fROXE=lyr!VTczgCy)rI=jhVl>g;%B=X``7VQFzZN`3U;)w|Zcb$Eu4 ze$Z#WX|kUj+Aqu;b2wFHkM?p%8L!3nTrWhicvn!1jTjJ|!xi0X*l6(zI+vUCam)Qv z!);@Tb0UFYSG;AvgbDD52&>CBZ7xN!titGB$SSg}snACqN1vnrjMkAnw8gXZ5K;C=RdN8@qiVeT$7 zJf!jdn?%@b#{ zyqsS;U-aRrbdl00oc@=FKQ6sl`NRiaOjQk4^+90c2_^z0YY{PAe`)kaI4410XL);V{#&gQ2x3(IZI9D;(e zou*67a5(Rd315T+hB|k|O1jS}tIs`JIUlpY=b2#6eb>p7;ctfu+!2R(cqEtCc2gEw z7Pwav1^F3OPZ;gR?p=4z(mY4v6K^-YtC-(oHx;Gh-GQB65HYv9L<=gI%|u_4^_7g94-h6ra^vns7(N4HXT`aDWEKH38j zzf$b>?M`Jr0f8<9v&LjmfMcxE9k!dO!Gs#l=>iF zbiUHJY9ED~V|DVSe~Iw^-NqaAlz7#FpzhKW0en9(*V3g>@NRMmElg4|ShSzzcKgg| zSs5ow()@VtgjekY+ee681|K+-VA2NIy^(ugfb8(~Uj`9CW8bB*dm*zLRxz`X@Lp_v zNFE|OjXz=#Si^q~5<JOjx_2toB%bW6( zfrL1S@D*~~=?DwpOLo6l{ekSb%FFpLS`q}r8H|{nKyicEB`D=FLlxFdQoWjgW>Q16 zGAli5#euJ?&*Mk0^ceN|V?)5yt zj{TIzJSYXV>TUq3LzY|4+7^tdB3%DuA$wg4)S*qeJ8L*T;ygo#r5^Fou-GMCvCTn~doD|ojtZ!tjV7zhv?$MC6$+-dg|=SZ zZGm=S@NDLE zImDf2YJ)v!MZ(voG$Mp$E$M7u_&cS&SW(E^?ez_=hFQoJE@P7QRjGWQO>IaeOL8g_ z5cj0gY~=^Hp2{|l_lcuwN9wQ%f$#+X%LSk_kX2Msovyll58S$;q+xEEF}>uV;ae6k zWU4_D)-t{9m;OF=L43LC?vFNzUS#riccnTt@RfWyuG#Eb)9G?F;$6*y^SSEwv~P|p z@FjBG+GFufKi36OSkL3$Ep;3JxCG?)3?w>y6fM_3=RJozdQ1JVZah3mgw=dfq? zyh-a1OP*<@jIaJ_n3O*IVLzRwtER}RWKIuG(pnSncW-jK^&xZVqv%h1>*Z0;z9wX= z|H37_=H|+(s;ww`5nE52bQLy&MR5h+FkVw)=#8vii`^`vkcvHj}VjB~?$wJj2 zLHOA=b8eWv85JT}z#iD`?9K6AZLAB!M%@6FBET`5)#&gaj}TF)NO@j+H)_qV(R9Yo zS2MQ6YCb`^P{p8!FRidToc;BDKevspn#lc(k3t&TjmKnN*&G1;i_;B(NQ-&a7Dry-!Cme}(>Y&91r9DMjlZXLv{ zgKfCgVy$FfV+OOOV&d#tf~%fdbTbW}j`E`GZgS&iIpW<%WAN)Pfm82JjW$%L*rWt} zJEiW{e%A$&Ww-kc9aRqm#8Mzy&I^Pju=-vQ0VbhL?h08_puJ({jU%ovzZb4kI0A7D z+wa+Cm?)%-V6?MAup#Rr}4F zJa>P+L9sxog+Xt`d*p(V zeahCGXN-=kAAw{2!}O5ZJnW{Jia%r}xSzC#EG(=}NnXg-XN;*oNKuT6JzsX}a9#~m zMgB^LEox_XE!mY>Dw^w8$r2tb^$&a~sh!r>jJoT|ODNo(C!4Q`;6@T1%jm(pFu;^M z#hc2Lr-GD-tIG4C_s_NnYNP0GI003TWCUTx1W89>w1fhlq1WVpHY6C)sc#p;MjuUQ zvR>Evfa+&|UT`JLl)Aa+rcKMg;|4@$yTaWi!?;mta_u}Clbbh})kloyTt?wVy@Awq zmF&*ME_RmufNGk`bBeQmgzdHOk*aImX)UtR`KDx{-fPhGvPVcs9W~mz>Ke%|<@K$L zJEbicvr&@~1h0eQKZ6Frvre-DQqJBJ!{y%H1|-`XoT5_PYGfCoh)#)|O6GF|;hKrw z*QPwA9|9=)Ioc#rwOt&Yy}bq92mI^zw6IWOp;MwREKI1r##PiNvMz`_z>tYJu{5o| zkj|G3hYB=Lza5ZVPq_z-mE4GpNhmhBnw)Smqu0VVqWCjORNQFhr{yK$&^U(Ec$?=I z+gha>x67}^dR~n{a5Xa(8$ClB42eBH{0;o^p)=M8v=fEFeq~E2F;CTgqS_W5t(BT{ zza$?M3SlfI?kp=Y5k_O}EF*mLeE}^Ubufi%ID(q4seU)~VUrncT6AG^4lrOP2F-aq zb{YzK83^nA>fpl77@fHar#CsW$}{?NJNE?A=k-S$;BX&Fr`~lho~@|mtG%0$9A5kL zqR=^Yi&nbT?now0PrZ_d?Sh9uDW;eE^g< z7}P+hbMm79zW#yo1ZTv4X9ldtZ{d)*wB@5CwKz*;tT)o+h7`A;3XdO554W4QiZG+ zYtv7&nT(;J#?6Wk--!I{9_G z_AAAjLml$dnp*QdQJ1#dh6Ge00?OIs`@`WETde5**M!5*G2O29Ib1=^#bU*WTQ8U0 zkyS?;&QyF^_nD90*-Q3&QsweAHkV$Y zGc?nt(`lzt8P{Z=i^#>)4NwQu+){=Oq1$zY`6PeO77j*G$L9TUQ))5km0eoHIb*MU$s}~lg#8$?oOlB0d3KyZ0|Cjr{41__S?3jiM94F z7LopCGK1lH*^11Kt5xG>I~a8dBn#%8%CPs8Y25 zESS|SYHHTE&1E>`iMl1ln!E;&MJ2670{G{|s=S7eL8WP;SWL0k?C)rjI4U&PNbI`E z0TH`Iy!$99sgL4EadhBRuz3DzNOSiuXO0}NW{PGfDz-*dA9!-}+YWo=F&5tDCcL_87nJ|1WJSI4c%7@Nz_qha-^gj7OCQF7K8j#aMdI6pxDrI0hpf5;>Uo z)QOnxgDhpNUjt$C1EAylf90zk1MzolTEn4zydA$!3H$pw@`KF-OUhD$5Z`ujbG`^q zn`Gtlp@@vCM7f`^6b?-og1whPc5$q@ud(N(PzHf`+2I;Oo}xikTtm|55$3~AC#|(y zvP|H_t;e3zu@&)Xx0}->bH5E5qhO0*bIdfdh;-YPb|ucaYhLH|wIy z;~Z{PCz?nBW7D-}T z`(WIO7=t< zHfc~lBL?jdelMYY`%56LHwl;(`6Jo(8`_h{tF^>`Ae%J@k0F2DesD{Bc=%I0T8!hM z+k@Ay5#M!@BeBv?E(2i)?V1^ruh++gl3&u^gk2bM|$ zxz^iLe|SpLY1Us&NJZelIo^%QWbXa0d#YGc7o#m=6GFNZB8|uXUdbwql_9`OuF7p? z>1}XIKtDYFskO05aD#-9)wx1c09J$3O_Al!<95mT`g!3Qr-Q9g*nDtayiSp@P74w$ zovb>Ecu#8h3{G7y<44&d^a#ZAe^=vh@}Li7mQP%$=(YhPzt7!E^|Hajopj zo-M+=Yt0|K{Rr>f+3n2f4ehizZQQ7FXQ zmt8^WaLie=MBudh9d$UqhLZdNYe(xov8!VyN3b}Z#qc%ZucVq}#ozDjrlahlunf5G ziRts`7-RzXYU3`=pAI(0OT#idwvKRH%caXyEoHO2q%ANk6Yx9@c}(-lR@G7DLq50* z>_oWQJ{0iuJ?L)j5tW9O?+x&?;5p}3zq_1a)~!@K62t0Cf!xVKY~n+LmhYj}QJU2`9#QnuukgL5^M#IbGuDN{Of;lYFkxng z4Ng*Ti}P<&o4d;x*IN;=Tjs_vqjNvThvw2jzNfC0?Pol$7NzX2>aLQjoBeKOQ>=28 z&Wm&NM0J)W;62{Zq{{|rzOMp6!0JWR7Md1rNHS68F zd2sf<+@#Nv^72}pucO^2w`E*8&hI7Yqi>raec@v?%kv9~s@Yxqc6?88KMMqP&xIiACFmuzSjgwyafV5B6@@fBGw8#uesBpo0O^55k_SLNe z_uJG;P(XwImZq>ufWyJnSDwPB*?io#bkE5Y1s8L6@3{Aw{Z`ycr1ONoPJAHb_Su;{ zK9@?A{wyRc% zacQjNcBRqmrXqqidrR>~9?>^5Vs9pdZNWC6`>wMW4lbQTOG z-m*AzfF^v-t#jJ|Q-uR(tNtIuS)gj$OZ{Pq({Nky(WlRlSxj4y1O{w%UDBG5Wd0ud zIhi2*Kb!DXH`+8TnT0^>?vfT+KAAmnhp?_0)PY%O( zQo?0$X4?T%u*J%v^F=q#U&!@a8%Oi2+N>Lflxk(y!>Qo2tH zDptf`W|PE6@4hw=uwRTPIYTprE*9N=J6*Vs`;i2jB2FUDJ!EM-WYZm5Xlra;C)`Pa ztX)Z1%Ij74JbY*FdoC>yGHxWB^{bL(bcCMjTX`EP4pqs4siwR!0VeH+;}iczX_2mT zyU6NaS}3`vwmJ<&>4cQ$lk%CuX`OjnJG`CYMqgRjew`7Q9fSG?S?%(38h1_lrYuK4 z@t7S#`T^~nPW{%0s+Km#4RD#YGC`-sOH!72nH350mKY!A=g-%hm3l|pCqvi*5XU)W zMUI7%rWYvQoxw5=Anv04%CclvszjG^v$ivBjy6ub1!t@x6Lp?^70a?4yfDt^7EK== zW9_iA6Xk=P6OB|*q291)A&x0RIFF9}iXZ(*)&8wa_m&A{a#wZx>D9gOs*PNWjl#3W=Q+iQPK4i%%YS_m{i06t(*)^)7N3HD zMCIcx6th6vTR2KtB8<2hh*#B5p--6;3JHXyMpZB*sPakV>Ml_hvxV3J5DJmqUH|V3 z3=L6l*Uv*-nV|C*3q>icUSe-iex(d4219Y(Pev0ZqNEG(vGDX6nhf3g;}pLS!gs@n zWH20_@7?~dfxZn&y87kd#AqQoshh(B!~5MFkxiRN(oTU)Hv?4Mpam8u(IPzNMXd!1 z>e2|iJd1wyrm;-$2D!%f%pb*p`Y79Tta9#Bz6)zQuo8bup6naQ3_;3iRl?~(N|uZb zbh|Df3I5T;GKXY~1FJ?tcPh3hk+1lP=WvBrtGGgS`kn^Ep^*3hNC;X8`n59}UF>c9 zm(h<}AL{fkp;GfVXV?77U`~!eDqJwoPY(zPm1`mXOvY`%;!j%HbZm&B2GU_ zl(D}_YWVIP#{Q(tUIJgv1y6&)9-$edUB#Xg`OlH+^dO$J(B)+=X2mkN{0M^_WkAO_9rW7s@U+G$uBXA5jPB8HAsTa z-u&6hzDhga2sltgwZxm>Jo_uICyNHxxn&OMW!&75o^q3mN;{gW3N*9T(tYpR`pb1P zesHuL)m%D74#oG|19wr zZk3pmskiulp;GlG(mgzGIESyRiCn>g= zgY{(#We1?e-LGu!5f`oUV$p~)l7G*m@>Dak)|ZwPT@M=0H%Gi}B*7|xXPm*ui;E1m z*%=2U8&lf-(l-+LQKF){dIT54ljJLR$=lxXsT0+EEC5VkBs+#hcw<;w8njD*PjR}A zt|kY^R(UwOF4g>L=O(%*0e5@+bWOp<=f2IX7HqADl`7lv^(sPkAf+7i79BO^qTdd# z|Hxwy=E~A|=CK!Wi9CsvhC8@Z_lSz}5%$8e z)*Z#XvVP8owleY^U;6tL>>Ve%#_Ysm;q0xD#6zToO@nY%){;Gna;ZWP4k`9EKqx*c zSf#UN#X(Znd>?x+SiRH0GWB2;SNfDsYKRmVyOpAa(Mimo)hc6)C@+VWgSiVtJy}Ro z>nI64`wvNBa2x!YnrCFocv^T+{Xv4+gQP1dpzr?~ zunfQQc|1N&g5b&}0)zvRNTfTvK?5~keBSc;b^nEE!F(%Sw7`LtE0cMwXX=@2t#r+K zi%!$W6Wbpg&*L^F73@`Bn{}n$&7?bZHD5pB9wGN-s*Xe{h3|F5s;X3D-#mgStZ)$m zqQ}wZHe-%*tF2xOZiCR=h%s!FP^uF-Zyp*w@!{J#NKbOFQh(+ z8~VY;Fj!TUjq*B=^R*Sum@~8Sgg(I%MA51FaA;=f%q`E@a8%pBX;~uHtA`1WiS-FG zyH$cacSdk{8Lpg4X{Z)U<{KY(pB|!P1iG7L4c$+_H%!}=W4X%7O36V|*9Pi#1R><~1_qZ8FLZN0h9XWoEJ*>{)0o-T^?x-NRPh z>3lJnXgUtpfL;?AGJ}0FQv!0I9TMG)__h67xo6p6@jvAfS3HEvU2{!`_mwix7O?c- zAJi?Ho!q;ec36NRK%#@rzpMy)Hb0j-Sf6Eb3GLG4}-EE&lEO#P(P%J&c{YhQM zHqmqyXODz(erGgEyQ+>UUJ6CQO|VRE6_ zEkRU)(#F{i?V&)Gn9gHmgM_NPR_FqEg^DvtTa6pchHG=XbvFF1w6L@FH|`WN6>jtEkP zEJHwyCAX)v?swBtz+k^9I79B!EtT+)-^yzq-!V(vvqvl#k z#as?sqn8CgH-Bdx(?(&)%jaiaJgSp*GPgHqtcVa{Z>#U(NYy-{z_JQY^w}F_ZE`Wj zGW179{)YEYRDHHR@Obh#ovnCRv0u%1vloR?t)q9Ze+SEtevem89IK>gsnq?KK4W0I z8E4TY=g9oear(;6(pCAzvV?ax(_^XeupE6Ma~Q*SU~w^L;(lTI2HKLdf?O2$1&PYY zGS>bz?p=>_q`d0{hg~Ix$Q*wk`%#B1-BsJ6aT8d>D<0BRj|++S8Et%{v8zmJS#>e6 z?ZM}AX-lG&FBgcyaKpt=5rY>MQa03^-)>_F^nK^3w{+zFt z<9?K9x>)VubgP&Vs;jP#XkC@L%q&?vP37y`1DdO)(7w>%wD{FgQhmyagyqB?)t?Z`D`N)%u> zqo1 z{>A*{3{jLJeJ0-v*ZEI+|A&g%CP~yxHr#L%D+I`6Jl%dgj~}dSLJLRD({P!AYb^NI zHgf-(P}I!A!==`iuNR~z>YIWm43qacWpo7|0X#~Z=n{|tDGZpMZNE-@GJPC1SRAuaRoANQfX(s4Lt$rC*7WERVNX^_nmRZIVN~*^-YOR zd|A*!sr~j?NMI|T=Eq~y0OiIi0ff~}4CI+zNsVx7r#-uP!)JqA*0(1cy+4j96X+*n ziLX3zCU?o?dYZ`F(~|TwZB%*y57&%kf&=)^a1CJxiwGcK+kIW*EH`l{6XPm8{_t7C zFf;RGB$#1-9G_ByW15^3WPY4omm{Z~P&t?-PMsnh7vy&N)@U<#)JpicdrC_|M=xT= zLHN9#BYC9tVzK-^r z_RXq8PGN$M%}%rZa)W)IP+#q8cXp+q2J`z?ad)DPFJtEDZ|^%VbyW#Z4H?QDDY;J= zCYa5SLsoY5U+LX#k{ZtW8T9!2ok8mR2sshgBiuHajl}Pm1hf~fyT2o5Koc>(^aHnK z`dOws%|}j1_!Q2^*ZFiz^HXJ9j-B?$*$%T@3{dHmjckY9UAllF;z6z+ip(+63%knP z+uevMW_f;nv<^~M+y((!e2d5WfkqgB03*_`Ff+xL^0zQP9~9nn7KbP|`f?NSId;@{ z4~|8Z575h%GL#lfr)3-dLYxhn@NKNl4;%7o2K~Cq+)n8;rF^6mwN*YvaI+l=kdH+v~=J=eZF#QpbnRk0mp(fmZ`ihVoD}wNxmvJ$Ca9nij(Uk`@!$w zVveBOl#nMx4ORPJs{l#&m_2d+w-x+aAy;KnQx7)#AdGE2KBA)^-e}mfuK^n_MS8D_ zNpL(cUdY%)**8N_v)B1J!kZWbW6po>^v3udd0(5A`s$t1W`UgW)0W^cBkMA`GK?tZiD4`eD{OPLUXvV6 zto_02((ddO75Uj)8YJ59oyT1(;z>v88nJm}G~goo9%PG5>tjj~FrN9ohf5~rXiShW zDHflbQ*#Pwr~2fgXc>~UKsmMkS@fS?{#6`#8$PhU-aOBqQn-8boOcaR!oQjxwCipa?!3HS?Mpefz3;c=93QM^m5xFQal7@XG~zR~q2eT9 z@n%u>y;&RUroVg~6=DFaXrEHgh&rgi5ANChvZkgsEPS^<3(v=5mrD)biF8wa3g?qD z7rK32j+eyklh2JpJ3M=ck!Qw$l<0&hi?!DhSoAN;u;Gn|sCBi?ML_#)x?2eTaM=yXw%mx!t#2kYtmxwh~W4wts3ma09vqdWgb)8;B6LP1Rq_aKaK?>s%)r>3vrzWyUd+CQnlH@M9blp~!O4;kwu z7&lF?=?m%s=!`+;6jN}<%6`{V>e9;m^5S?+b+&9d?^Ex@?})SsADaU{3pI5fBuELn zWizVuT23JTR@R**ST3EWib5dUU5g_~9M8+tkOhKs5$2YWF?k0rvnTD^sV%vsc1eo9 z7m5hrO88-^xB3|L?qf(NV#_MXIBE z9-N-L6rqRfsDNW+4;k62#2lyv-7VAXXgpR zA%^um6R@X=&@M12w5pWUb2a<$5$fmpU$s5qrMbfg&8Xt!PE#f1|Ai#PhfIk}Uh#TV zm9h-64=J+xD1&vc=(E zRogfpK2!!6)ga~wkn|OzUwdGXPn?CxGFuQueNB{|EL_3))?fV7LFCKLY4f=@iuuP3 z8FH28H3A6|BQe;^zE^@>y0VD0@kfkPWq5LzL;)gv^K*IZ*TmS#Pq%wzENzyYblzwv zR|k1~Je3ohiZ1+G>D%$J#AwWYuh4m2JhS@f5?A z!XoF87UsrgPj2%fdrI-{4X?tdMlbxl+`Nt=;ck0g@gZ^7HuSReOjN_WfDU=#P_d1n z3@tCU9eQWDI~32+HuMotM;&NY(fFL89bYGlz<8o8dIH2JMaJ{z0~L#=j=noTGj&&OO0!kaX1} zH__MCH;y;d6GRERB3uuGjH6&!3x&}MQ~m)51Es2y(uw6wLX!prXZORQ4Tu)~`$_j8 z&q9f6U?@U@crv77*(WuYR2P-K%Uh_+hq4PTsjLM7IfJ3b=cxW0L}YBPPQx$-U~!v7&4PluArffs>UUSs6kegHTRGemS8=K z@D%w;Gpmm&pP1na9V|y`1%*%^f9Kd+S_ZU0O{~dwF^F zofFmV6%jHcUI7#`BmRfxKO6hp2qL3##y#|>2Sx4106*Km$NEE-w?k)}33GBy89a9g z0Auv0U@F6Vv+HkXu8^Vmee@9@6N*zWYiaG!?KqlSOYkI=^S?ZXzI%N~KJa4$xNl-# zl;t5I5VO8ASP@qHC=m{J`5H5p@VriNG-n9?562avB{u*b;^#rZZqtDi5YJzu_3E9_ z(UcsRDVb5Bhlh&a-*3>*+oo139^d681XKYn|NHUF`v6G*Q3F}X8ot;y25#W$QTpTY z8s{UMZE-qhwVJ$gZUay&|NHo1EdhRiR>2}enVh<)8xv><2PBX>mD8*ZCAjJHYL4l0 zh3wSr4Y~jFON0o<^AAH2Le|jH7ag9rngV1*J)fZd-#pqSbe#XT4t)L$galsae;z*+ z80i0HASj0Yyyrt90{ih=U zF`cu^m0jMHc@cLbCpm#kWo{aGP(q6I0liA2v+_DEwDl62sjsWQ^6K)OW`YtFs0Ic% z;0y!p7rli;IClm}V4w8UdFmJH{CfeFVwx@|$0>$3Xm{d#*E!ZTE+5h2S$_(DeqIqM zE_8TuswuU-E!rfGZ;6tv9km4wzg5>Sij`yA1IaPJTVyCVMwLMlB3x`Zq$ba1rGw^^ z9D*=;;L?_4t{HfD-iNG^BQj!aTiux|AuH^Pzj(GYElEdYgf~SemwBwPZ9-u&s{OUC zwzVm@g=zfY$1CCEU_LfeiplQl{W$x3E+ZE|9(!&(N{8)#7`q+y@vGKkd^`+xTd9BM z#=yGk@W9VYCbga3YdqLW!FsR0ak%@j$hi_n>EtYi1rRw6HDs!%agvTu50=k!riNsI z-4Nl@*(s$#b$&R4X7_Q|wMNdETdwpBdzh0(z z*PFMU)h9DWCam3$-7hn^9~0S_YGU?+yaq;a&JIZEsu#I8k6_4CH;|Z~cf|{y<b@ z(L1|)OoYk#Sd}HN?1XHcW$>B26>LeRdFuY+V}V$*zaiNW1q{gO%j&|%&YR~2_ftiJ zV+KEf5g_)U$)eJ_HU*ug=Sx?+UdWBb<**j{`K;bn)DI-{7rdAZI}f|85+`4p7cR1b z_6~EooNxMcfDPWY0QmWPHaYubc1{WE*K`1XICKxY>mwmz3tkV_6b=^N+sTs(I(*ZP zNd7b?MoL6rG-}wVH3?jz)7`_i!zej)>iHabIrLv(L&lO}!^}Hdoc4>thCd@nRCX?X zP3bvIs?zxiN1AQPwvw=G(GcAOxz7VpJ_iwME*0*@c?}>JA3vzJj}V?){CvM8^Ig~) z<9X4bu@?xDy%->Ff_wF&(s5l4-*INME?N`*4|{JN7vq^ADlqYyyFq29?&U{a7egJYh zSNsScjy1Et$a1Wzl8u(GVaE;O?+%}4z2CkEkh}P?&sIX92@m*MMw#}|-uTl1fn`nH z52@+w9~YN~EY&48;KI~_!o40^Jga3E4)R)SaT>Em8Ke&n3M;pm;V_;;oWS{4>m?`< z->DUDseSWeWEHDXA7m~ejt|%@p9i|)TNF+2)|RdI`&_=Dph%Mt*1k&`)ss>K-zR`Q zk?D|qUWfE(7y^df{;7KzEzc+7)BYA0)9?lokbFJpiNoNmmdsj2?BE6Th~dxyWn3V^ zk)zIM(bBg=8(oOofOvlC{pxNF90(d4RI?Hmm*@w*zROnGwV`dk2}f)jy7nc!8_%&YHL|nc~(4*i}m4DCj_5Q6Ks>1Kor6 z(L62@o5LRaWfGCU2RiU6(`NO*t_2gf|v}bKuwPY6T!B6da>2{IQj9jc89B- zm$fZu8u!YYGp48f{|)slg~`vd*6>s5y`D_)Yf$Jb>vTxo54*;*-%pC;qv38%RGpEs zS=`r+c2$y#w&Hp}zVvIR9%B6-u(vmIq+#cwJleA-D=w_8J#b1+;*r7H83O{v+L~f( z+*+-Ei>CB7bG$^?U?wXpBN@}a!gFnU)1HX1+!(_>y)lToFBM~~{zl&>2T*xoG$O2l zIjfm1MW)Na>)NihM}HlDpYsf;{?+!SzrYIU9b@%yA;mH12#(&I3A;$HXEk(2Gq=i~ zJ|An4J7i=@5UK5lL-7t6F83<6?evmss2+f1$gdutTX2MyWn$br>EO7Akfb+`X+YY< zi(6qPxAADy$*DqK$YXkbk9m5R+h)(elqVS5xjIra_K7>69F5)wywDK@4UWVog&gyO z49U!V^{ldi4~)%D#ZWayTlzdgrUpGR#OdpAPtLE{SJ=lDv@-0^iXa(Tw6-3FF)am? zde|Q$f=EBIz1A`yma()pf!twJvA#@Ktf{dVL5}SIB$mV$Cu&(zFd`UpOvt59@O$Dv zC~UbjEf2u5OVy{!vHn{Qdx0|sSKuF}`aNc+A(!gh9A2z35qI%E(PXc}?17(;G@5xp zZ{}0k5L>iMQ5Crwhkn?Q#H1D3_Lb-4E$b(S{Fk>cUVG>X<^0etFsK_Kq_^5yeYc)g&MA4f-~=k9@o&v z&VImhj4JAN{6+3_)mEy*j{f6nq*vn|1*PUn#T*X2BO-Li8k9M=DS-Zl&-l@c&w^gO z-An%ZxLNI-BfLqgC)e%|L_f&>C-&^HoBqu>(D0)ULi=VcO=OVC;_$Zq?w&y_5_@XH zNXE4}4k>NNskSn^%G8CD#aOrMkTmiM3q;_6S@FCh4B){*to4`P{TW@@P`jt)XUXGg@)tC?|6byoOP^eL*pTN107@h=ez-hvv>%B{|#N!M^}2P)Cej^c+)` zGZ=-Q+x_tihR4*RZ%1QKWeM2a+=yU{Z?*>WSh#i8>_YP=+*4cD zu5F~)Ml8iXE-!FN`Fsc)-5p+R82s?D)1!U!_bXCB6a>)IAHY$v+=d5^LhX6o?El8N zFW6VmBqC&{N1D$zC+u~OYxf4!bWj0c>|$|~G(GL)Hv^0jOYTa*Z6H=l){JFr=n3s5-!(42>tM5-Ui^L_bs`cY+&Rc!x)BvPkwRm^lY;PiT}i-=ZKt} zdrkAWJ1CWp1;Egy5E$vKPKRfv?p&U$T;oy-NgYe8uTNU9De~o_RmKRf+NIdcd+P^M zE?e71R36aH9hlC4MdiMbMXxvm&=po-ENIHi`U3B`qvxVE-&3zkD6ba~_v2ml zzhekdTGO=o*o8Cx`H2SSARf%fc#`NgRepxfy5;2JN7hy0*CJ;ZTjK4hIcq>H`Vue! z5qhukkUxl2}Xja@SsV_-1>`t_PgcEN;Aotz1cTYUxa?hr54Y*(db07R`0=r zznilnUmod`8{5i0`ntjJeun3|Cy+pPRN< zkc{8$6sL|Hdga{43T2cx6%~7xh%@jSO>VAYPobRo^hi5U9cYtdEVqk#fb{&yH(BI2 zsIsPKO@OvpW>v)gZ(Bc;aK-ohr zSAlZLQZ#(hbrKSv8uo)YF|g;MrHEv+r^C;oJQVgW+>_(G^Cxva#qz~$nCaz=G{&|I zNWoDi6xi-i0fvuPdr$ceV-&l)`|z?)AMd=ilYBmwR~$=MzV`}RNv3B#r$$J6b1^eE z?0)3JA)J2SKw(-`Ff#8wTjQVO-T|<8M{s0 zIKy{3X`MAsPb}|JMt%1C_0BFAQwcLi^}Q&GuM8{*U361{{gYPJcDYW8i`v4fDVN}P z0T)kTy&~V0V*X+eq>&EE@d$^^xP`p>Yiwa_>iXC>rPHoEKdMhLM}wWCGVZ<g4R7D0}dtg=1W# zH05f6aZf;`d`9|K)#@##z>0m*PWh0>?1xM3UldEO4ZMuy+ZP|)e-a}zc{=^1C@=B- zgo1MM6@*Nj59!Bf?Z|2Ywe7lWR!S<$-Gz(pG;?_gHu;Cc*^PU`-J^N zz1pG-NS}8LthP`dTyt>JIU;-89r02;Sg`RTVKgs2;YZu)dVz7KiPfFeNOOpazVsN+ z`mfug4nTw;|29m6x(q|)43~#93p#BqsB?GIus%9N8i67cCbaUht$Lh`^L+M{{&E71 zDFtg>YT1`<0oh75-)^^w5jef-9frHG+g|Wbn`35he6+key*<9m*--+(evn{0A8h_yBiUPUv4H8%m4j>g( zv@DUvhBCIU7<|{-2OP5Vb83Ze^(u&5fxA_noj68XjaUQWN~c#@@x%;8s53)0MgkO{?#20C~7SjAv&U zc@}ZHDvIfc67Lgho52Q$wZ8ld|32Ygchi+_rTYD^U=ZRjlzV%YvQku5)>uu|7k-rF zQ>0YH*?J=`t`?V;OL`PoN^J&_BW<3oW_ZFgCXjEQp}mj&d(^NR=tOM$T`CvfnepcA zlfNmB+3)I=+)%0ke#(-k#tknB81Q|9K6L;mL2p4|C5dSoG0aL^vyFIS0k0oE6zK{N z!CEi0@=PM+VOopQI^RaG4XaHsrTXfA!Vl-FT2|##O2M%s#L$g{L05x_zFx%EVmEr4 z#K=Rr4tPa|9&^mWn57`xQVZ&#k;$^ux?OKyi^IDuBnrBr!0F^9P=Xm~tWiNQGsTf1 zs+=?<)Rtu1h~2p=@hF*>w}qc}kcjW*zkcxDxxuS%_?niIqRxvWp>cyW$GoOSsG8#D zc)SirE{s{v0AzBU2QhMb(5_i#ox9V-!UxXFn>IciUV#pIstEN&i;S|PqdkQJFPEK% zrBVtpPgl~kgjVK;-+YV26wAAdE4s(MvXR*K)&G5%Q()~%<0RDR6A zJjb8?-ntVkZq;fOH1Q2^%4*}jei$+lr$Ns!Qg~KzH1SmoQ4^p&^o^H{ccvb1DIsW=t4kBT+~2qSB@xs5L4nj* ztoNOfogwIyhx6Hh)o}`3`Jt}%v-x}m;lEjcbj~H`2biZ}edx|RWPwW0swvpw?Qz%H zK_NkCkD8w)d%?~?U7PeI>8BW!$@0SbWt#lV&IXi4>ESAHc#}TwVv$+n3lPuC+bLdQ zg$;}hdBt7=HAj2}WPinF_9g|952D zvjln=>JOo>3b{RI{pH9#lTGR&CgBb~i(w3wo~*ZgTiura(mUm4*ac5*eqRNuW-|3V z9;T63XiVqzhq+3mRImC|r9FS^DjV6{XtzW^U#18M&8Cm9jLt(}vN$%)9j#0;CmYftj!$M`WK3XCMA16+CO5AyEocP98fZL)EsO z;X8Y$`Jumf&S|e2$=k|iczoTShfv3*b0SJdUJW*Z@KjXMwOB7u+K=6`jVx8a?H}wR zIc7rKIYqAI2xd$)82!li5l+E9@W^x@d2Lq|8dDkm{W%?<)RcY2=e%ayUpId-Yssq} zy52gWb9+LCL{N_C>5|%Tux#*au{~opPp=S}H zlD{&se_Tk4NU0dpoQBlWsUw@!Yb}+fv17fzFtmSSQ&ju`$bE3DQF3Lfu6UUAsq=U4dYtLCnrSbpC5Aa&K8@Z&0Muj;R^@2 z9n-G{adeFr`weGvW37**joQN zqj&I9w2?fwRp(|PzMBfNR2QbEBO3^oKD7gI>nZ(jxl;Ve^}$<@O?r)_bvfdR3DSD8 z`RX8Z1enFFzC%|VahmV234gxyOsF;;7*^6rJ9tdfM0h7dE!fEZT@OdBn=1$>6|3(% z8;6;6ZwHJMr=6Mb*~L$ZG9!)q!q!!8`Q*`d)vd*Ylw-mIAfzm|+NmE*IaGsw zErHh+BBb*GhNrGf#S_vJu`|wr9WMteJ^K9o*r;<>!BH2N-wqI)e6F2 zptM9>*`qaadlVkmJL{X^1a^OwU-JPD=Jz$4j@=(_Z*y1ev9(Z$2naYqvhO*E#x5>q zkTUKyt1PX@jzvb1H*wOL90hf6m^fyeg0C?&)Ut$m05y04J=j?1cTB-O65Fq|{O!U-{@Id&K@;?CfJLQVh$xA?NSpL;ki&gxx ztFq|4Wj0Il{eKHze>XNwn4x=_OCSp?Ea8%={SDCFst$H)^RovW;jOpj52fnnj8is%t4>K~S(A7- zm*z$Bv-B5BU*A5x80q_X55Mjc!!k{`oAN+5zRRf}(D_zYqVTTtKwrMmYFUV^ zBh+wIXY`kNv#1xB@gT6;Zy6V$k@3REM+Q1t?8xz}N@W_rQ5{oHY$vlA{u6+J4HGifWISr`%dlP8_MNguEfXOALEEsNxAg-{p{w-`!X9Ob(r!>rosNzAM{%L;2-q5F)R<9 z#IVJJlLA!M$V1;`5X@?>fil>NaTN+@yddbOe?0QWv4Ec8>{oPY(z-rK(DRmjI*)u# z|M$#2bL=v{>Ap2?$yac?NU2g%_E=6lpi>+rSPNA>Q|XEq#c2BUzG{BY&j>UkP&(Zh z9M+l-JQQx%0e*61-~3+QJuZDZaJo6H^OxiGhNX}|6HtNyi1HELEXIiDxs7s7W8J;! zhGF5|Sj)7o($(;D71M@`1)pXlBCE0-9QyMJ=6(!o$X8Bi$vC(&Zb5$pncr{GZF_V^T(S?FF zWnEkIc<~NXe_hVgRE?dpp4B{t-S8+{b zPnmwVp?Z$!h|%95O$9`Yttd@jT}+(LH)vTT^8>CTkdi9SPM&nl7I_%!ZVd9|rIYSA zgy{&3rCY5q4qGn-j^*;Zul=k~ubE#LA=rbw4S%w>?P};ZWqo+eD+ch`Q?JGguxAMt$()x~8r@g_!eOsYoQ6kN^OR6I#q$60%1%O-q^PeJUVpSu$nRetc|j5%hG zDc2EcNwgm#REdZAz{&G8R4pgdCE-9H?*(@f({ zgXssSGbK4Y_Rv0g`sS*a`HPLI%e-D{6CooD8L&nD^r#E%e&f=Uq4m1QssSVv)|@wn^oM~`BmBh*vX$H3mn0H|khS6Yr9 zEN)kvgCnB)=X7hwXH6AQJX%|f$Xiy)I?Kybbr082lSEC(P0(A-RQZS zYmx_AcW))sS0~mqyvowOTZ;6iE3{@I3A+I56o~D*xJi7IWjb#%PKA|jI7Ru8kWwkE z?%W@?LPZE=jB%W;TkmfIm~)$Ub=emMlV+@{uqpP)dFYD8 zmuS+8Pau^HU^C=ueeX}cL0y*Yys;*j43Bj@wA%|qfhPXyo`H#uNtBGz>Deq4By>%a z3Z!_RE8MP5J>;p`a1wKz0JS7Bt-TxPKIQ%euLVdTj4TpM0DOH+^<@Ayv>=qe zoA^Dv2!S0%x?C4k^x^U0u_E0rxK`Bs@+1iXSC4hWE=M(cK4>4I^D-lCD+B+udko5n zqdKz_w_l)iC8txFfZ>>~UbL?OUX}gU1;BGa%%0j}P_X73s}>i2q`ZYqIQZraCX<^r zYCbP;igdbO$mcc2@AA@m!^QD$=G*?EerlbqkMGWXc)7vs@GSN=T7n=A!b24V(lN1t z7klFJX{zg>p6n|;P^dpdU;;pey(;u~dS@6&i~)y2M#&XB7bIX9 zajUqhQG6g9Ree)g%D?K1a1CB;oes~9bjY--ZltGaOZL2lt?a%3?%^^?{#@$H_0}XR zCUE+GeQL>zvCYFC|5o9jyf?#*?G^OwHefr{7~TJ8X1g{Ux0S)p;kB2Jh_WSEhk>?K z4mi7gs2RThsiz^Hp)q?p1WC>vct~ZW#%0En`b8-gjMoxtv?wN;Z}0M7gWB3_Y13uf z?4;mXW)4xJjTw3qv+a@_a#aE*1CB^c>{ai`JIp>aY4Z*n@oYI$oz-~fk08^{E;!SB zqeM(hPq)SC>^h)8m7{|h<9mW3ZRxcdI-3Om&(QgJi+>Chf8+8>4-MGc2`)#xJMhgH zzBfqyyKPI0a7BTlzr;MW#wyeugr`+ z*usI~oPBFAN~9Vyq_?A5z&yvX2{=1-zaMP0y&8Mf#0!dqcpW3Eok>qDW1S!Om9{cy z#9ysCVe#2wVX?kLdxfR4&|*PTEJu?f^p+Th1{B7Mo-0RV7*|D$LX+}{3~j-7gTkrh zs*X}EzVvieJVI|sMsMgb>5Zr0mH24>6hw`84R&Qe=2^QQ^HgVX&LD)tzgbch&uDlI zkN5KN*yAdn(0t5ekDco^Z9R!Fmi+FdR`N0b;`Z`%53PpoLwXS0+kHR^{rcTn#@&5Q z!1we_3X09CK%K(n3iE-ue6$3P2{rM~4ewfA)m$6@-92OW-Mf@a^4;FZ3A%67z?_Pe~V0|l|hAPj>ln;w5Ce?HsN$TX#aZstM zIM+&4Kg!@gR~X<*LB$(oUi$Q^7QF3i%`j5h_ptL`I`Okfxcg%wLT4`zgrG30r@XKE zk-m;1xsVF9vc>F>8ev*{BX83BS$+!HtqaXA`+Vrpc&#!5uA`C>vq7Ei5P0m zNrYjbrnnPvEYL^5cSLd1Ogp^UU-rL1$Z)tP5IKaim2EbpZ;0_n5oE_nnr-9aL-ynrLHf|HVy<9xvNvsM+d z*vXn2IkKUP(g?<8MkGuGdYQpbnj2k`n_tV!+g{e<7S&CGsimfgeV9!Ym@Xb!rBov3 zyv>?RLyu#)__(A>f4xzjr>ctRh4R01xc8H+FXIgLMs93%4aVT24$fMQ4^h9%3~cpB z2eVcy>ak%9D@kZbie2=kSF=aR_(G`Z(&`%cjUx=Sn{kTV7y>zM=DrC7Q?pL zzj#T{Iz!OPEcwKG<+2K{XiD|Qfb=(dRZZ^|S8GK>f5m)%I+Ocmrfz-kO%khrc4LiO zKN#*WnzUgT4XRS`W2(%ptZghQvvP+drh555HX0rZ{ThtN%jUS`tZKb*RIzY36RJ`W z`;G}WP=^XsG8GjcMoY#^MLm;>MX%H(_dL9r?%{^mg4^=lUTTpe0hCQq!H-_h+}`~m z;>_o1Q@FS}X=E~ikwlBMn>V#ia}Vd1RD2gd{JOR>6PzEDBNOP|i{17zYa%bb?09|G zf!#PvH{IQrIW?M8e$dzIahHKi@RS(7WoeqF@{3MaDq2Csuiznw#k{Le@q->ojYq1H2C$rK@;#ufo{sAaZxxMwyM^&Z^r}TLJH3P=4nmyt_vb=<7cZD z_e&}7n)0eRov%rsG0OzF_VWF1T+C2v9Wap*Xs>xJ-CX>1?2*9mEXN@9;$-amrt=6Y zAV-QFKk|UKsgcO`hlPRYw!fT{!wH#=lATV6x1As#CvX`8VuN5%912(>~q*=G}kc{~Mjh68^s*_J7Ch z(f`NPi0xYA7_SJv1)%ofpQpww z^K9??dv2}cGNwRlEvn}%dmMI+nuSURIXygS$ComMB7dD%`^oF^jxT#P4so%wH{P*B zhI!1wMs6)qxY5x>Gi~Aj@>AsPIsMnK8&=Y1oy-HBzelKmROsFa<}RDE(-qQ5 zmM^KaM)M4g)hiVTg18>YndR_^1jc-6NmW*U-`m$#&z?`2Ptzqy8PzVB@2lTIK@$a7 zdLyWr?fn2*2PhE^V%B<6xS_v6_A^*tBewQrcWuDDd5j$h%6J&fj|U zoqhq+yAMw8&W6&GpN@y~#`g+r(o{+nXjiQ2SC03p`23bOA0~qVzF8BiWTO_-$%xbk3@WL zl0EDxkJSw716SshXdj2eOxTOMulrwFmr&46?%6dStq2GRYZ44qkBG|El; zGxm>A$$_!|Aqrv@!w=8m)myrm?5}Fi!87_v2#Vgo9l6~?@1*foCYC5Es!CV#ehmff{JoD$f1j6BKWT@V?cJKJ zwQ%1n7G942)Kr_PL0mbhA8y~xixnz;aWP&8zQv0MzQWQjqgqE`0}&Oa3-^hr=&7Gv zqK`PY<<(kQC9L8niJaP2p?zZ~^80*PODn>Mg%4N5Su%x^wbKNBE;3IF=d3LSY*2;7 zmF9mQYWBzDK4PXwxAR9cHMUDq&pl^^o5&=r$k$X4F3z+ft~fcI4-Y6;(s#udPA@3@>^cV!sT(sJ{lE6R@gM`y;V}KZH2TA+^wq7h4Ph$8$>~aBNFUle&`UQ zo{qnF`4mqSa52EN;HY)qeeBe@yaG%*;T{Rp1HmqtM~KIro@}H~ZO((RmrXeKS;l0n zt=IYrXCx5pyyP>pR+a}9!Lm@+eSgYsKDmOWiKUsDsl{1H4^GVia7bODe)V5;`xE~Ie^E%oO89ekiI?=MaI4o|OK_)9Hu*TQ&&Z~?ESk{`?( zIwg|Q`C>wT{YCiE^gmyOd1w5G-wm{P@&$){g!N_W@ptRs{kwqvKzv`&Tu8kwkCs)! zl7NaU@Wg;eqi8QSQD&CntWCD&`R(sOVN7V{K6|GnARyyjk3SV0&hn%sXQrsDtJ~+R zd%h(*sqVP>!=|lAtb~Y?L1Kko^@5oF)?UHM@Huy!UJx{Mincd+ODY=ZlK}Kh0Q`TV zrV@Ii^=Y8|y@rQmyKiohd9rYeuiB)d-a|*!xSW=ZXiG&tU>B8z`s|R`(NQr;nNt@d zB}7GYQUfyQxutDcmi_hfha1-fjheW>&fvbDojoXhUqta?d3mCKgqKDtxk2G9H@!Py ztT=x~sMl!vFNvj?s?k{=*GY{?A0zZlT|MoKdl32>fu)5#Sj47b5$M>sVzT8zOsa0i zW44XUZ{ot!Cj=M<^=j#H&LE14{-6N^vNM4x=K5LfCGC}MC`^aZ{2X+=q z@(>MZg#+4Kap_?B;<$w*v`*YpQ?;sB;Z4xhN*PH!?0*`v{9{1Dzu(Ruh%yjW{=N80*=#HkNQ85(zsC3g1(LKn3N->(W$&OxR-b&oF7S;Ay* zXmIR&Wj33|h9@?OV4HuJa4$VzsmzEV$uI6RBhB}1UICUX_tclic8z>}jN5-MG$$he=U*OC5hC-pj}t{`Kh6F7dtz+EKNj%l|DSu3 z?Gxv4RzlGGu9po<5gP=BP}x5bCuRQR2+(lok&kc3Gh|-gG~VF?LHtYVKY?+yB4p=J z%cb^??A)~9$5L#BTQ@X zGTMG75OVzucEa~&a^=4WxEXNWgYqx_GvNMT5Bh(-`afhRxZRO@1B>q=<>9Mpo3VvT z=4!2!1>f%-j7m+=ym_d15fUQts13tKyEho-ceTB}_mEWV8w9s5=sSn)$R#~L!_G6- zAXwsTy?gWIIq+cLQSAB1xHO!eJgGKhO{&mVT&l3OkJ_>$u~a~;Z!lQD6!My1JzaGU z$G(B6W+W3-^lX!5vVF$gNy*CzI4-L4Y|gcerl5s3_%F(}UR%;J6n>z~j}WCZyo}u& z&e^G23~^kd7LPuUS{Ku{R|$erG&VNu!D>O`-nT!0La2#U>RTtjDYD)Stk8zQy zYVO6*#R$+_4-;JH%sl#5toQXePom*)#&PJ*GXc{3$b`@BQA)$^V+>{xWUnV4gGBs{D0VXwviN z1)wPONH$UnNW#E&?ET(NsO@?WHDfcRg~yl?JHDoI>e>nT=fciH%4_aUQ^suGj-A3mo)?-dw z)ddn4!*+{qu8frQ6uoO`eK=dSP-GGwW5UqK`?gbA1f2lnB+)*BQfdr?vAiB}nY3}i z$M;~}xL*^yz@wWY$spUR=(;c#jVr^2Ca8W?#z+~T09WNxv9J9SP*}##k^63lhN8R= zvZ`XFRa^UTgIVOR)iH*|J{gPHoW1v91iRNYl=awdS->`s?S*1Rvwm65&)iHe#XVe! z2hV8R+SzHlnK(sv%pM&|-UM=#{h%cUM_*C%E#{;r>%CIhk$#TZFDYJo1WyP|Pq>ZF z$lx@dbx2scnJk8uYN>Juyx=yR#mNPV1H!nXpYdG8#%D+Y96TBlc zGE*PjSP)7(zPEc&m2G2jT*zXR(In!ctSxOitp-k5XqN>h&+lR^gPui>;(+G{p70>K zn$nhQ+?+3cj@4E8Ji2Tj?>JlU1>XaEYMe!CB(@sFSDbBcme#3hi_&YjC(+_??rS~Mr1&fM~JO?5qsKBTPnxAs#2 zRROwpXqnc-S>OfV;FV$+xml~w4+d_;_53mpnXi^*d_Y>9I9s(pyQ(DtCNkJHP{O-VGncy8gFrdq9TA7;7tjuYxf7kO@;XFOQZP3xr}Ue2TbEGAzc zj;XY{4a3G0$)ofW4Y+c;s)?OtkDrb8Xw9;lVq!`JOo4)E-1T(k%8zL$Kf_a1agN)S z^`uX-dQ6*O7co(wNEB_36K@|G;SPyOeyYO=JziLH3=W-UqJ5THO2wo={AxTY-BgpA zvE|*63F~>>n15doUiU7e?D?n-L3CWE_hD0Es8?<88e~-R`J0GCr@&=c=pkEt_obtx z(izAo1#c{@VOJ-&+(UtHFqLVTOW?YA89!$J#<`K7x7JQKUHn@_5}xA`NMt5_rGwZh zhn7^+hc|qqO$RuIqu+xNk8AOJeXg;w$ujd0ED}}@l#P59pKJf#+QmamD^wp@!po-0 z-xHY=osrC-z(>Z&?d&W!@WL@hMxC<`DXpZ-=otcirR6d?Z?e{3C_~zqm1@iI9C{Y6 zBxPi`xXfQaRDGTYgGDB-sY;tE_uk*13+H=Y%yDtHUO6Hj{L>ysWKNpKuh?ZFTJ>V= zG4`}~NNoEjxYF`x%{>L_I%5k1rQXDsbfJH2x#P*=J6dCNk|-LF2}_AC@iT?A`9$z=XwSbt54lSB)|2v8d_(Z&HLKDm>Y#Iar9n257A9W$LTLX)9x&-9 zceYz?yU1TO(>;#hyywLtL`>IoL)2zfB)?0Jn|p{);;)iQ4~o628~w_Cv8wYHM1C7r zr1otRZ_E4U+8a69%BIwL@yvC|%kzgOS;PngvOg<^&xR|5H@hM;H<-Wbz?1elVfd?t z``{sM->Oqo2N9K5(@^PjLA3EUy5vr_8vQX`>{A#OE92+uFRio;`tb9|bw7UZn?Nph zr4S42a8mzX?2HUrh9}fai|5C4^ckLg+k4wpz&h|L8i_bz=%G^*DpfR1%CmGBy5rGQ zX4q4dH$sUkR?bJShVT~a&S+rX@6^YdJKDQ9xmY#d_%K_)Jl}dX2v0RUwa@oEI{2+# zd!O7FlDz143>R^7%GTyy)SxF!M`T`xk?S*kWMbhIN=w6ODjr-!Fp3R_nN(jcBP1Y; z*)nkooYv~sarrrW(`RdN{>=mF($9UGLM@vT=}o4|pNk8uj~Wq%>(|5taUM5W@?5EL zyaEE}QN{VG7lG0s{7IIdu{u}RFa7I{qY27ek1x@^4na4}2hj<*;+H?jYPB+I5s?KlpWUDN~@hOTHl$MuPK$AsmxTE;e zpZcivwY8n|Ew|U!%2qW?lxSm~SM8=dr;h9MZ|o!J?{qZ~ZQ0|%{I=@C*2lfSN2#>i zm3njAC8Sf|STegvF>AD)mj-|Emx0(iYcj+PEfo=}KEQnQq9tlSCp6mhrdB6VZW$8U zFO99WoKCc_mWy6=kY*g29cj94Hbxbm3Vm>1qAs2TpQ^ztpBra*DVZ3!0FG1A^eAW& zym7qy;K+NmtWQ4WM?QUjvPk`asaL<~OWztl=w_{>mCr%Y#K>7$o*uJ!WjHK@b|dA1 z+DQ9R0;5-%^Lnk;eMZIjO7IGmMpiSH+cTp&>`4?n@zB7%`QiZFN*fz20UFh2b)PL1 zd-h_dz@dPv2P47%I*iLV;X z9Yju(TB^WFxVin^VE$U+VwI%H?n0;$vC}|sB@b=iiqon2+(#VNy_%21oUgtRqwT)e zVK=_2*KqQxZ7VC7o|z&{ivQ)k+_?L4l4=eeqOe`tp-!#Ecs6>5)od6_x*+I`S)D{ zQ(wmhU&5X^Sn+T@#K|5Y?x8DMPFKIl*BqRZZGH`k-ig;+?m3+w$$c|hQ8Bw)lAgkq zdalDdb$^jJd&+c!Id_=$aJ$zS1x)pTS)_1XL5ZPaFnlNQC!{faq!bFjg0Wb%+bSw} zdZ&KSsg@2)y5ue9I+oD+^}(S9>}pigp_nDL+OmC`7u}YrEWLhw_JVKJYr`ljMi2;F z;6JF5vtTJYW%(|MSAwY@7k*S=>4q2u-+|`qW=98K@B#X_Y&qKCKbcS|PCM~@?fln| z6@cIoF>MUSY_oRTJqVZ}@-R1D!@uk0tmK=XT+mozSS8xpb9A2X&LR>O{?1)evAiEi zdu_o~>9G~=!yrJxx)*DrbT-w(g)MMu_cu=6CXJ_RouJoOyY>U)Jhq-}SAnU3AZnK1ttB zLp01C7hH}mlc7ecgpSome2useury{T2&I2${g?qnx>`DAS57BJhlo~X0H!&eHy6GP ztkn$|?lN}aTct-PDQ~-LW^`PV^pCsO$3>wsQgziqREU&l0`_^}+T@ldFw1n>Y%w0G zd)xO#GR_4V?doM$@Q64ry!4x@fu&XCfCTz!x{XxjhGePo3v8!e?2q)BQs{!(+Zw@N zLx>HDrLp+H>WJZ_`Wq0Br=z^OxhZbnVxr;(ril_uI=CzQC~A zd!OgI*0KKUST_E70-D;;Mw|DEs?H`KYV9;iTpKK*9~!(vRnvB$+|F}d23Pr#a_k6K z*XNY1^Tttj1hD&GeqQvq{1zw{!CZ2mp{ z*CXrw3a8V`U5$S2`6)J`*~9$Kl5n#^i9hY=8UOzdz1DZ-T~c4!6ERHI=>GorZDwj^ zW{bLf^SHP%Bi=fYbkPxRUODe@H@Qg2y&+vvRBTu5aR@EQNb`EQ?qx6>qdEl;Soo)q_Lu-nPp8;r`I<*9jH%FRw6a5fbZJf zR`pw~I$1a!*X)_Y$PW6r#zCQPPjeo>Gb4z9XX+H*EYD3GBY23MQnvb@=b!URO4rKr z*|YZs=1k>2)NfnF;ew1|X*j_t`JZGvSucxoTX=+InXQ9^)tjzbSP*J1WD*MYHSo{> zx^cW_h_L|Bv2K;9e4(c#Ki1k_d>xQ}|E5&$;rSuP0m^K3+rY)PsTZmvc)06_BQPxW zN?&E&@hxwe-tg9X$v76EIFpIGszx_z`6_r$x;%Tpj&R{OZxpp&^F;g}?V(JWnX{N# zG%{-hfm^ah!B;@TwGTVd=;=LjZCj z2+3bO@}agBTB%L-LGPhJQGL!l-8#chz19y(K-e5rB_S##TneqTDAm?57SpnxY&Abh z(&`cwT+(w8?M!MayT7yP>zP=-aE;4?OjraCCg$(-Zx!vb_JrJxQ;(raE>&VOX=`)q z1Hvu34}d`PY3LO<>S2pnHU&bw@?<>Oib%h30O_Htpk+ZW%(>vZS@EqtxgUDvei)ab zkl$Gip2J_Svg#NwELh+6eO=)}9zIp|^LmYFq1H{!gV8RMeS1I=X9+tg@f-PYOh++@EHdb!Tn(Kei8+n%U6e@|XIaAU>N zV+pu#FZ{S5s%Z|*m%u)mJigFX5_FzzJR_{Ivy;Xl^fQ0%q5D)$5*u7+))nlH3b4BQ zb^r%!&CJeDcHd!GdmRuUo8QsuoT+2c$=SH)esi|`DR?Kj8FY57={e5V{v!FLQM)uE)RfWN}!(>i&3Fs!X<5VE5T8Ad9v z=yz(j58bsZn?tz+ebAE_-5Vu0xl)&>H_f?%+gIG{)|G+hv);3f63&;Y2Z<-Xr{1Ye zDm0UXd9nU&zpHZvhsm$#tgHymZ1|r~hD4ke;bkv8UJesX1Tr;TQ_<(Nx+$tTXq+}@ zkgJAPj!m0rTbdiK(>fN6N+hWxvx{L$_8cUSc7aZHpX&1gXkTgj44`%D88ua1U1oBE zBE~c{_y^hlLQXGA)mIVL_7j;NdvA*^J=PrD-L|i+PE3bl`eyLSi*!Q(D z^r-HymZ~=L?8ZHodQaQ?={mx*=pDjF7WKC971R9m?7WUPXY$aV(tSlDopqfZb&^v# z632_TBAR-AW$-ks^f2XCc z897gazdcT@oWqCSn*eWk%)h#B)hk|982l50Qi3c(iP^_X4k*ac#~6LGBNDx zGKB&eWrk@vcF0sMTCqBhxu5O>ue}2%iGe+S4XN$EcTw#EXwNfkAfQDwC=0h8nB{}j1d<72kJopghuV}%fby|#dVMa%7O zFTWgqR#4^Ui_DC9iXGPZ!$muKLe8;C(pd{4$72?>R!c~H-X~uY+?wn4vic=EsW=xl zYFV1~tCXAd36?Tn^K_K&T5>3eRBK3!G-xgM)(zB?jd}m;s~rZC7pyhw@JsRV(-O;3 zkoH0Mc44U8c}7P8^=TDZsF}fc+rag(()zj>KbroA7Hy44`ZvQQZJp$_sK_9Sp95rP zljXKO!##UN^5)rxq|mW(lD}Di9+9!WF1kEtKBiOfp*;2rLz30bn_|Xy$31y4r7Mt( z326K7>9xV53}~Ah`j4U7!Z&S3KuDI6=G={Yhip_dN&w=RXaA_Yd8NmR2++4tRIm(W zwj+=eMw~-?yU) zM{NqZdPe)EVqMK1z)Nv^5&kW%k9K4deTBs)-PR6sz)`On^ zfLQq0Ddzd8yDEMVS<;Vr2+AFeYsa#Dl~lil{rs*a={O$GJF$pY zig6jvK+7aMb%zdMaujSeBc%7V47oeHHIg)W<&4d$N$OBU_B9fxOE&$~=Xt!EV}Np^ zo5HwnzFjn$<)|5zLfQtrEV2LZ%PzCRg%rrUN(ey$;RN&r<{< zILU&ET0&X<8x&ndcPrnC?xw;A2fh6zCpcw?|8%{WTHC6O1p@GDeA{_kiY@zF2V5{X zyQZ*iia$`*!_$(;(8UF^2l@A?S;|lQASd_-gfd-H`sGIo*~;ng6PD zeWG5fJySJQy~|!`Lo4{>6CLUI6Tvx)3lxbYi&s2|hQZqW?+tKQuUa-|Uzx zqHzT_&g@FSYpKh1zt^U2G*o!R07QJG>qz9|^stRM2Md54DZJ!7E|xo$n;BzC8Qv(w z`LGWYk?*l21X_rXV?tmQrgogL@<+JNnv;C}>jAz|d0b7$2Bo)HgCoiWktNh)A9OQV zUS+YftLAXEM|E&xH}geJQ#Jhu#rKpj^Q3AEKgguR$MQ1Lv>XA?Aahx$3q?>ICmI&8 z6%~JPl~Tmzx+5PXBk<=LaA@F4Z%(oyH``n^3m0(>v5|(Z6-y@Z60*E5uJA3;D#+=O zoXE0NTQo^e$)5fC%bVB1lZ!=WzJ`1IJ<-?eB5PfN=bz`x?uY6;VPvv(Il4MxI%e=* z8uA<2Ashiz4GVm~eRm@qNcr0M%oR{$Qip@xgf+9xftb|*=}sf@8{mCxJ1j(WU95dM zk5kJ^@EKC`AylG#gk(y(oFl6yPLkm0;tkhT0MaMY?QBflU@yd#@0 zj@#mGjyVqO6D0#`P6a}BPo(%4KJT!&ONH-_P*9~bH+lOD1j!M*nH=W*2^g>u;=KHw)owoKDc?(}6PBsQN*%mz z*RJCY|dBlx8(nJ_=Q@$p7{(X=KZ|u@bwvA{N}-=<X}YZF=+kzt0g0@H)2J!vw!ste@k?FfYoEoCsw|MyV#DjAdsyyA<=8BQjCNzI zQK>d2kGU!vj;e-S0(u(FUar|!Mw`pM*8-40d{>3Wp+bs)48IPUom>0rT!uH);~GkV zBv>8UxV-=9t|oDnh2gKZl`VRW8&h7SAr9-}?!WgrsZ1wk>@UASP<+@H)xoLEezX5YpsyR(Sb<~af(3*9&u?eqe+tx|)(m6+nVj`fKHxyX;v zYB&hGtH!I($12!X2&`&m6qtBo?u(C`sDNOi_?QA`kXh10Tb}n}{vQLPY^=>TYn#mzMPzwf;%OY5EU`TVApCZ<0u50iC;bxDSglB75N^>a1CEh; z!HOA1b*}vSwqF8NT?H)N5#s{$5#SqN8HFKCo}{cf3<sCL=S{$%I_>Jrw&2$OD;5bo&IuL5Ij$`d7g-9_rM70c%n$Ckhq|`x`_7Mi-1QfX^e2B8 zKsrp17o|?edFv=C607(Fk7J7!I+|U9>Pw4x)poFUL~Wip%~+{B6eio#Jz(>G{9ZBs z{fj)QX<8JZjJh@tOfNdRxZ-Q4pR@HQlIIKV0%0tDlVCtYju|t)4{|i86cU8mr2D#q z))<|T!LA|6RkxDSUDvl$5G|Xbj~B}&(QiU^KDZn@m%HA&7r&;Qv7UTu&pt#EIUZ)f z++~fL19*~Oi|H+#sTY@0yyeJ&R zU}l_1ra(Lj)*tlUB9#V;2y|iTgsx_4{Zn(YG?76df9K2nvA#ebAb8=BWPf`y13o1r zw5O+m{DM{a6_hkIMXld;`#!nbAzU$JqZ^lQdNoz{$*`9!FAp65`ZwpixQ+qvtEsmS zc5m+$_U(b6lHQVoV^kH5?@0LSf%uR1_6?AYfEp|AHQq2k+{W0>`i5hM4)tW{)FE6` zzeIn2`?C9d0r-f25+2{lsufYOiw-8~uD|M$pXVOn@ehaVN6qi4f7P5SWtaZRV! z`NjyS^O+Ez+|IY9&&5xg+kwV#Lr745eP?JLQ04!0PfCMKjQdQ>R401g=ABprN~96} z-D4WRL8SFS|uPU+X;0*aoQ1?In z-*$ojA9odOeS|+x7?NQm4W$l&AS88VYYt%9-|-k2hw6Qaj|}(~HDRjp8nI@m-%NgT z(d88V{&(THaoP3n+tcYFo=Uwi|m87w$n0Swb-kiMqPx0&ow+i?7jeOntt;+~tChh;7#XlnFZRGeCYI!9&Z z<|I(Iq##;iBiwz%*0;$djA*VRo*|ngRM7KR=)VnYRS@%Qo19M`&#rQ9wBW61Hk?=E z+Pd0nR0RH}a?jvhDXPqXI)QXu3+?)K2%@2>A)QryfT3N2m5-Z~_b{^_a=A(j(k|*f z9ZMF&`#Tqe-R(ZHeV(~y8JCe>754z?h%7KF7~k6cE6iHg>!y!5nxYy0pMeQE0Mu`l zH#U;OPi|1=M0?b7uDy`meT%4s`yMk@YpH3-+zkF#-E|7g5qw*_Ui^k5!>qa2meJtZ zttlWvoK={msV57{cL6bp-pm7}o*1F-oc7A|=Q`@w_g)nL9+SpX>snRRSlqypMXQ6= zoq$~V*DKe1TCI^$QAY<2M7#nW7ft1e*@v#pn0&3yQ}d*vg5P)}N$o*fW0kP~{E8YR zvJ~9^Ag%K)B<)pwH9bmB`mtWwWT+*T`}nwAsq2o?587+{SSGW|#IbQgGB__&II&ly zq9Cudvt!w-!mHEvI~(aUALg~)L`6pv!|4+LGwy%(l!=avhQXHcTxcpyf$R*ZY~AvirTZO4lWoSxj8i)=tycY}0Mu)5iYOM_rv) zvEO}}m%!u3a<+RNE!+-0PbrxsZ@$JgcoFKEc-=Nc?^dw2>IfRJGrh?oI+T%NR#kQZ z6b_xrbtzyc{_|7x%M&TnrlXGioAw!rVMdVuShh)h%Fom=*ojt|usFu;SV~#n<`-HoO z$P7A{R=wwXR|rBl74(l+rFFS#r%f>2%`OjE^jXLD=BY@DC3+&7tBxDm_~p4Brqsb! z1pu%T)Y-XpGvE!JBwtEOpA@dw`$#WKccn zU%>|;VOsq)jrOA>Xj${BgYd%-r`ifTVt(FL3i;lW{$J#_PrINZ$Ql~k^5!7imD2#+ z|JC{heWBt3`=zHBC=eN?k2iTDRHIXk-L3t^+TnQ(g;B1o)~6JYjS)wQj!>Mz5H7~< z6JRWQ$XEyiFdt&>L*Zuv?UGxsa*dc=l1gAx>lwDq0?0f5V0EKt}O1WG&1`2@M zPWrtgDG20B-Bsj_U3T3Yqw5J&+?4_dXcgX(aj$P|#a$lQ|CQebl~dk2{I%wOgR}1VjiT!@wP?M97fP;!4CPX=F)qL2#663y@l0=fZxW}ELF_-!`Y zYstI5+UjRO;E}!9#6UN%GEv%XOW%%3=RhzYp^U4Ksn^E1z(REp%DQ=`Pn6{ECSq#? zdFRy*`dZ zqzaa{R;_z=H4DV;`*z{qKfM)ZfwzO^*M#r?p6W!*5& zmZGsdUYgnOgfv0nX1gMP*{lsvmxLRnk>~vn?#*I2ru;STco%3dPts&{)gz&naQiK4 zpM8QEQIA-c_z!5~t%fnPNgqz$p65Vc@A8mJu$TV+Ju2yx#?4+;tQM`OSjd@)oAd(m zRL><$k6*aCM|{r;no)ZgTY4yO!19dMKVPmz=%B=j67H%Qi(--iI(?4;HJ~(TXQ)Ma zZNOEnD?>*%yF0X$Soom)mr}Y1l>4HApehzntyQNDg#d+@u&bR7J=mJ>9KIA~pM^U? zsR)BZ*d!UCk21`ogTwYIEra*}Jf2ft8I3O=H}dXn1$2t>w(YuOVyC9$l7{s+)`Dp& zbD`}%LC{=0{c9r7*B>OJHbuu@Zzz_(nWP|ccj&?Wy$f&c*oX+~W}A&@O_O+R_cI-K zWWntx$3H;{Ju6SwFD=hr&6cW`Q!Zau%*0;21xwMHtd!B3@i$AdyLL}#N$gZNzhN8j z&;V3Uw|CmHL)w(|Jl;aUYz_Ufknt_w^VsZ%)lZYxeXka8gyBZ3`o-KO z6oVCaSr;@_;^we>kq6eUW($Xl0Zgm^RwptE^@;G!xgoD$nYjKe_Bh{SYO85B1M!} z1XN)lb^oF9LiSV9-}G0OLBSsO_zAD04efIczC#7+3oq7;jFo{iWSK$XIK{tOwobo` z3q%jf4jhr>H&7a4VpRhdhOKUZT0#0GcKOf!OCrq+=vzGv7x^G5tzF)2Mp63_h@k<9 z@AUW@E$o^U0Md&ZQ<2-tE)PjEE@pfJxWzX58Dg7s%Ed><3Ihh-6^xB#cnv@4QJu1P zGL*wMNrcv`CkyeScj?9nwZ2&Zea99pS5=?7|AR5iQwg*eFC0m%k){v=vlDSBU689U zGAfh3Uh4{LtALjWh^x+$z&G4zPScv(Wa5x2UsRDfAXZJ_a*!VXN%p_mHNoTw=Wf4n zQVV~FnMzaXOtGp@z}%HOow5Q~E=zm3VTzr2=P9lsX1+_@fW$%~=R3(w71`_>utXKt zHE(3bo~XXvvj?Oj?;f__p3Sa<#G>t94#e|n8FEonCZTfVEs7GDcrN(2l4TI~ zkW?%qh(#B&-jiC&o!c{vilYc>s_NUiY>{OSwVkJ9L}<^=VlRhpypix9cm@2;_W5*Z z(%f4HarxHr*4G{PsHBL?iB_upTL!nz3i=%<_QkWe>b)v84goEo3b0Km=05cDgWs4O zLlEo-mfUN8pVgd zb!&)2Fa~RedQd)n{@f+GvrWR@;npkesO98{FYdPZ7NB54`j`}H92ox7*6meqm0#+y z+Iwnw=;i;nmB-2c_mI#a%eK>0=*k zqRVe1A0dZEXdG9PCqwT%OLIQmDt>?mKvUdRC)Ew(;MS?0>*6V#33ue(8d_C-a{1|Z zV#PAcg&|;0unrQB65aB2!CVD=uw59A(F`{_Xmi_8);-c{s*$KzFCT|n;3*MSpyvCA z{(#Iu3DRScv4~DfkGGojcj;?81UetZIQyElQqhG#fu4c65i1Y-P)p)>@>BQ7Lka=K zsvt;|dhC+|+x<{cydkJbt^|ql5w4DFbGhpLo%eJiT0Z+$WYJ#A|EQ_F{^8vSvXZs>@S~B8dhgC}_+f=|0EnXeQ_KMpeunPIzaZ=7xO$9(D*P|(7ZI6+!4q0_*N z%kN_rVy9Z?E6_{Kd$*USy{v+_`CC>kE79e+m1(2BRk~&db;NFsBp)2p8p0n2in1V+ z7=);m7WPX0OhC-S&yQ5yXQvP7ttXcr&J9udf<*mqpgaq|w3!u#7ktlycV|yN`RLCs z9S2$*JR@xFMBPRcRHr{J)72A~cEzq#O{Ls^^tf5aJIa~Oh-|8{R^~r*bj;l6`en$w zAa~lFVi~Z}+jdhV=zNk!+;<)4!p9K99^@lu;L9p4l^_^wa>GRmZz-<}c>nU%u81qf zrm-geyU(Yu0K`)sq%mR@O%yl!I6o!>e*63ndv1ya?kn|o)f_5cgz8RqxU8g99~;W3 zJy0C=AZgi!g7vOrmbbc&Tv*_b^pksnjvI7Iy7gW@0bco%d=|On0}AO+S^m8%wNY7E z;rffg0{8B{@;6Bby*pU|q)UO8*&%hi^7L7j+W#F%92X_^=gH-q9ZSdQBQ;%9AgugU zeXZ!umB2CjlfhGMS(&8E%i&_#=9urZlg0HS>{$Ds&Uw>D6`2$cavLr6A?XS$mY69H zDEEo_oDSgbU_$m+%lSH5;@TP+A%?g?j(D2HtQ-cfm!@Qxu5e1A98TBC|7D*u?_FsH zN%$MX9`}A5MuvWUQ_$}~(6#A#A8tI;9v9$pgSgl=e?PC={AWXb4(>BI7|+2e{- zTzxNqOakyS4!l(`n!QcjeJdY;zJsuH7k67-?v3X=mfiTRlKJ+&afk->heQpv&pLK~ z#8LTeQM{a`0phpr<#esavL*3<-7O3ojwOHi(}-C^!JR$_X` zC@%$rf&DL5EzzsS(c8IYIlWC)EeCqX3A++O@QR4f0zSTF;=y>iA60&9y>c6M*ZW4W zBmwz%bsp9m+54C2Vaa7THQ`ABI{9apWOvi15EigNa{nuQ&r=S4i!^Occ?dZI>&OIQ z#$5wmNZS`)SSXVE7DxM78^rq$3OlSay;RY9mo(=U`s0hh=;@>Y@uMa!#SX_`hosnm z<5iU~o3FsQixf&j7x)ZKYwr^q6{n0!`A%z*hdRXIkZf?`&Un=AOfa|*vY^eQ8=Ee? zw-U-ka-FfP4$aTG7&^s4k-vzXC3c;6YiXbxPui9VJ_aObcYaiN>`~qdeBc)j-_?b( zddl3%>W9v$`0a&qYH2ZMv3qu*xB=a`9eVsL;lsA~BaIH7qVHPQLlFrRSyXgKm8Jwv z!ksFiMdpFSh7%o!-hM1K5!W<+^|Di=!!dom#^$GK(6zw?SLnfe%x=PZSn+nbI7RjC zPWXA1EC8Tr$f11^-nzO0r*$YKRS;}$`pI8WJzpjDPS&Zl63h!D&}h;)=NPaJ!Y_4r zp}%dyw;z1S<;Z}d{Y|7MgY4jzDK47m@AlJZ-NxQMB7y%9o9)MZpch`@Vx2`Vc%@z; zq`!{3lWpWcx|SI~3x(-TzpkiahXc2bXj^mt(8jL#l8OA8v!D%I071t?+c9N-C+P!1 z&!E>7Z2!hApD@lSKW~<~$_y{7Y_o6Bo@hHz$*&)+?61O#53t7#%~!&h4F{!>ru1R~ ziC1Ht9^KJ7S^P4!p6PUGJs+P`XukQG9c3x%Ya4r6eXZ9RGH1MFy@JqwY%E=>30h=P zrBfI)kuqG6{Ai|b2SGP(C50BxW>ACFJUV{p{_pY$LLjQk!qE5ZB2iFMrPZO9MkU*? zCE?)=zhvW|D{FW=c5l2$jNb`3F=83l?s?jcr}~~(2UmR`S&^2?xf(cwbK+if-$Hn#J= zZh<{h=2Bww}bW$$DGzCd+zL6i+T zj&pC%?ftw{g&leWEJ+SC95<};{L6~!1xI78R&dglo)KXy|w);8f z@B9Yt^cAtwPCwP3N^d*Nrm0B3^e^hupvgLfQj|9q$*JBxJ)0>u_fJ2uIUnFPkO3x@ z+jw6`burkyR64Xv5dZ#>Jsc~EjC!h<-dpF4Hq3+~=9Jg|@ zR#yZSRZ`f>NM8}}SiuOUD6@r)ZsuJJ+uvSz=H^9?XKrNq|8)XViuf+@WhX}nz0W&A zRmJM$NC(U+2^||_y$*Q)HfZ5O0edBr_2#L>5v%muLl337gB<>a8YQ-n|6u{ho`2jW zxfeYY3!f8sE+n=xLs+_MPoo}uQyoCDWo)*Z;GrANS8)0UH;il#ohG!+l;S9YytLN~ zYZ_T!6@SOJK7|BGm@;+PxEkZC$AT7^YE-rD@?dmMdKs8ebD$mdPNgp(nuSkHR!~mB z+_%np$j1q8vb+O&s&dreK1EoYzx{~kXMW5a3X!U_o3^^J>gXxelj&ayt@4?CXJw&? z=Xdv*2psxXvs!pvl2qSbH>1~ap>Lo-Ymf@J)H0yESaqqXtEQw7tZ0^OpZ#;bte@+2 zB=z01B)|Jpl>x}}Pj}wcy&^DR)7g6qX_W=*bkA!UPzbC%OBhjiVPFu|AfQ{Cg^8V* z2RI%+R)0Ec0;8S-pJ~wLAi7Zf_QlKXmA&FziYz~PH*u&x-t7S1-x=iRuJg+7sFqBK zBX<3-57eKMr^`HsDQ3R?0@Z*|@{fbXMs%(cj#5Wt$37(+d$EC*K`p`t)EUL~S}i+< zXQYSKrp$b;a-`o`c|{rqOS=z|>1t&K|KaJH`)FCal(3c|FlfMiLw!iwp~F z@pyNhM7g!6Xs<}%Z2V$Cn7H>$qw)i%Q*E2vHC%Vvlz*7;o01Jjxh3TNdOT+_D(Cri zo$mBR<{l0C$-sh|6D=Pp|ElSXbCPmic1!7tp`Y|NV@f3jO51`&8)6mAphNhYiDkI-rMW1#{Y0Rcp3z{=CH3NDA`kFi?9xZK4-u1Y|h}B_qUKkM%Hf*%TT2grS?zF#}hb{1m*1pzAN8hreT!W}5GLfSc&3s^Pu8VXmUUemvOh{vVJFo7$V@nl-5OAw}%5!Bue zF9tL*G9=;CtpeYnvUIyC;%g6ML(3n0v}|m2ffuwWRnukV6kU6ICG>5}d7F*)aTabD zl*9lg6n*j8zUAvJL+-7m>1e#jR+r#_379r975dr>o#;R~jRgmiZ~0aA6>4i2Ysf!Nbof{g z;*)(5ai9w_%oJl46jVGN+R)AMYqkn<57%VR5uS3}<1SUH9rjLumgP>gBncX~Aw1o(1LG>`heE9fd7L0q%=R?k!RFB_13pV#GUR(a?b!}grLXI>JROeMj^h=F zWOeaGb;U6;6LK{=`mf!S@HL@H#PY*w+BSpAZMW9}odH`LVbDg^EdPrG6=8mP-7BZV z%jxOkrbk5{UnW|$=91%k5{i`u`pD_UmjHMB5tBy2Tbl0WGTL}W+iiMjINiXht22M) zP>yJKdu?Hv)=Q<7$4G>{_(jEoqDTYGPFZeCU45zSv?Qs@Yn9M<%?fm>V3cH!yi?N= zuHNi=(_C-FfFG&pmdt(=PI9K zn|-|%W`1WR?fBYz;tlz4_<|o0pAY z*HEDWx{9vN`A@-e8hP>JMU-=jq0r;64+dpmTeQHdw;_~ZLtUAZJY|1d(YokvX zi{y=Yhc;q!%BlrTM$W@^kr@U)E{QmwZ6< zVe?hhtPRTA3Vy{m36!VAINh5s>3u4D8hPhc>v^br;8rnzV2=C!+yX(Xnx9kcA0MrnvKEAG%B8N_6&%WRaKj zFudcm_CHdy1Q8za&D-KPgmIl>!8H{gSk3<{PCeLtIJ)QnZ!H(;Xy)dtwy1YSUb*Kl zFGn*4%OsvR9XU1P4oFR_Wu?L6Z(eI>^DD9*?|L{dtz1|4&6WE+dJ(j(R8HHRoF42I zyd4r4WD!}kvc0SiP;db&^72)eV>xw|_8-;faIGfGQit*f2OmY310yP6bJ|%y%RnTV zP5oPuZRk+g7N%}TQ$(G%@VH5;IVsHoQ*oIQ^BH}1TXX&bIdW9?FjLOEZ+pHTQopxN zT+bOh9XB*PyrsjeChrV_*s2`Hp2upX-q9tN$G_6ojO1Z|6?D+D zxX^euUiBh;m-K@Q(v$}4kQJkALaiMYqU z3p%Le_}+`p7+7@cd6X!soi`488=WY)6c%m6d|EV}UPjWs0L8xjMK4a$&MO;USG9!E zQVTcsZ9kgV?D9e6YsCtSHirEG=Tu#e`+)ExA@w^nI_of?(TW;q-P=~4JK)kl)D?4v z=_9G!ODc|*c0DB2$AZE%@L-88Pnghemv+H;BUATCsx8`DOu`?+R$ipMPK zJZ3%<`WHOah#m*)=2}Q^b!^airx5cEqnB+bpfe54{=-_D-zHR&hHV(UG>`~Po5$g! z+$`Vp?^80V^Xw%?^;r1@totQ}Jz*s;vw%5AidVCbfy;BsVI*Dn){L12o#PmRpE?k9 z!CS9~YR~P9D7GKu^D>3U#Fw!jrL?8$JoGcnDuJos*gIP7cZ5-o!c@yUabGz@ z?jc&YN`s_FZt$r61*Umw&-N~h^Q9b|@cWr~<$@)*Uz zv8IC``Ytn+ebm&OkXiBw?eOv6!!a%Ls{t0W+5;N#s#^pglONc3?dDaiY(~DDn*fgR z59?b^3i`2Nupds}zJSTQ`8>GY!9Fx%|L$XL7Ok9cBzWf!kJTRUa))q;%d&{Lv)MFV!2HP25h`qxnC>V*QqKW;Ye?J(I_^hHO1 zX`)A}suaLC;OiUl|8PY={?~?7=znZT-~6u)>EQp^kUpmQAM+WO|Ft2t`5!;VZ~yCQ z`v3XESeZtn*q=tM92Pyj^DM8(+{1A#Vg}$>x_tLzm|nS$x8c*Z!5nGnE0nNnXM0_Y zTPKPg0@bbBJ@4D`ZbfunM<{nya~SyGtnr*O#+PUx^x^YjmAId+T{7bKH!VPggV(}H zMCO=!e=5$?DOc2Lu+Nr53%^7IJS(Br(PsC)^C-vW6dlQb9&0lbc-jcK|R)M9m^tevyXQnk%pLTg0Vn*=g45y=+ml?c`wNh(C*|tcZ z;Kt;9vTT(d#vF05!dP-V$#JkK%ie%(Q33gOOD2D9ir(XlY$M-kk+leBR!RHqkV9Y+ zngpqBe~9)S)36bdG8xSKKWzG*?VoM zjbtS!_(=cw1qwyijQ5$cCzbbg3U=KVOc>xzB084)rLD#ysl$;>E9z5MOwjJ`GcOqW zG=dE>A99!zG;xOrnX39G3-=>AA-2tK?N$5TPfT}mzrJMu=a(`e^H1ygCH(Dd583wE zRWOPJuR=ioXr~zg8k`tQ94e4Bb_h@{f1~Zus4B)Uy=(ot!odl`H;xnYpi;$bl z@72dIq=%7hVI8htDz3F@OiJI>755)ti#1vKhUb#zjnk!_zfSl$Hw1comWv)OX5(xz zJ1W|q&n+W~d6i?;RYw*o_y>5O%{Cs2(w0gQMLD9a^K$PD9jm~#TLu8}Fh6k%JKapTi#2c$Y zNzW4DFvTPho|#oU=V}+JgK?rpAwl_>5A}_D2Vlv}aP05Bc#@j}3DcCq#yYs* ztbAU`tX+?^PB(F>9g9EX18#X{2JDMV(nh-;WqA)4*z(ugdFohUqi^;F-yOFHB^C2D z<);xsO5=k6y?j}m;#OH7xb4CBI!5j-a1s()-QHx3mo6Mi+o{RnC8swS zI?bMwgGy_ywCoxyUF7TPM7iLZR2pk*QB^HFsrIbuU;|9^+oU^)?6ste8d3Z(h;x*h z3Uf2vwhI~q;dM81$J;OBN8WEd@V++vf|lTfIH)4f@qZaeWf8fjAHM{Tc#47uO2 zU21DSKMQYubi$lCg1a5eN~7WKIY-M~-D2Z9spGYjaHE89uifE=!)O&Xb%u-#(Z+X0 zI#QKQuZjZau?ys*S$duR0}B&Sa6i=0MxCD3kUQkC=Rb52Kp^Af)$Z~~xMB~g?{Ien zV{@KoZPTQTO=M}4Cp;BMQc>$#Y1^Di!30ujrb?mH&mZnZXvOf5e9nby)UDx*K@2z1~k#Buu$ZAdtOa(H0w-3rR+96jH z#jld}9y2h3ml@nYTC#@|pT^xlL&=rb+iMD5i~Nrz^2F2-**URlU3pC4ZL?N1hVTV5W^GPs^WE z(?=na{))RFAKrXwHoe6_3@TtxEL2z*`onfiIXni)|G7^wN%LKuBSSi%?4+QwvOf2N z(S)vJsK^US{v^KJu|<{qM-P9z8^#=fd;N^NIzj>xVWC|MQS?W6CPOpQMyw#|mvjf|*l@d)i0@OcvxFN(6A7uE}Jm>wu*RH{?^^1qc z=l$NM4JI5iz~S3`b!zSEXScAQ#ekD0Zha~wkf8F&fNSWd8qe)sU;6-OpMR(CbMKV7 zqsY18nGJnNr)zZW%<0@s@;fA(Ok{R^|2_rrF?ag+Vq~3EXl4ny4ph;5p)Z7QP#6xvp{BG0_@{A(lx-Xu>5q6;@!bP1zk(I- z-zUJeP{fX-6v6if#w6_kqPJf5NB5061&pEStWnwyzwVqn6E9xrc8p%RkNJ@@Vyha; zBX$F5A_9J%$uKLjD!q`{1h*yG^T_&#G($PK(-*LTVy9=!G*f)yVZS>rh;!OB zl;<5q0;D~_5Wgcp`Mti$W8Uh3G+{uq`;BXc*1LO7BvQE;o(piu8BrgVN0s0%rOb)i zny_hya~3{3KTck8x6dynj>2D5GyFA0rS_i4fF&eY!9exb^3D(bQuM+n+;Lt+1Y?QU zP>AeCz0TL?4vF@1kJ~PVZvD970 z^@l?=m%{w)fT5=l0($v-l_Be~@XkIs@n8Kvweqq-3Ye=@*^O1`+3WVW(kldlGoZmC4$6f&6~ajK%C9UqyRzLndkw5jn%17_*AS)ysBB zvPhF(7?1kkf@~0Sv4eb!2}B)q!+_*7(1PHijU#l4E)*OX1M&|b2ywtw_j0z()_y{x z4O8s5#Jz7+dBW!bZUf^-CXzG}P7l#Boc(Xg-lNH}YAu?OK%1>b4~c8UvzI0x;kHT#LMFsH`~=Xk8IT zk+-%U{8}torFjcS0%jhS=GW^4*??zr{DC!*78a#tJ(IAF@VYMlKkU7AP@Cbl=v^;R zq(zHcf#O!&iWGM(UZ7}@qQTP^cXxMp4O&WpqQPB?yGwuoxi8)4>^=9)zIW!%-1*MT zHsyM)uy?5;cR`(F7~!k|8428 zoXDO33yy+NzSTv;7Pr-mIS_HczOLnDoVgnUrYoX--U*3EDbw2G4;S#7q;GhJsf^9B z-MUiovH7;YVDVj@t0Jw~W8vMl5?gHq5P1z6{itN(H}n@&R0TMzOfm9BD@RBXj+m{xo+7M4Mo!@ zs266%uO|a7WW#s?Duud2-&nFQ(*MFJmnUGOW0g{UWlE&0yj|ql9;( zHcSpn98tpg57>aNt!rz(o9WkS$oT4$9iFADrEvYuR>3U0(U|&Qi-wEd?y|Esu!B3N z!5`qDC65nn^4N7bKb<<&1U%JxQAp2IkkyD)5ha-jEqyP|?ib|l&t?=!_X)A8OZsjO zm9R<$7fkKj5YD&VD~d_)iW~d(z~vE5h!er(-W`2XFfs?OMbRLzgV^8axiy_y>B(Qq zEo2p9-p6R4bEDE9b=-Ip(Laf*WQ*MW)*(9Auh8yo3(uA+V49mAwRP~-q4P1?aWOdE zBqgPVEgUK)c$icj_es@z-JLlB$I=2{(%r+fNLeDQK}cQO1aS(&SpO6?W_3>yj$jlN zIcC-$o40Yaj2*pv{lS$Fo&hPS>31ak1a52{sp#qOaSr zOc;b8VqVc!4ujvgX2|nV%OZ!H(jV)hpfyIWJTlkg``|*jfG<5S$Q7j{$q?Jw#*{w$OA!#1xP{6rgldE)B zvsbem#0Vh+GV@|ez3q-<+tKchyBV2vW1d^Ume`(-F@F=*hns$LxD2`S_O*LkbiG84 zY`P(b$KF*AIyAzG#IDyaf5zl{c*GfsAYAOU_rd|!T$3ds!>OOz^GaOYetjk2&aF$XeT;_COwS1ryM*ftCB~D~-DFu156kt&dy|8Dw4lQ|0|qB) zAfE9&<|=Yl{}>4kerBzBqI}Sh_M#PxD{$4 zW5hVemR1d3wWFtAe9oc5d(r+nrxS>RCmhK_BiWcWIW_&uVGrFJEHtVq2i%V0EA$Wz z1dFbltxE6-tijN@9AFmI4x!6pV?%dyUNv1cP~14yy@}DQ`z~JnsopOX(qdA>QvCE> z0@4j;Zb;+Jr>W1^zovaXVUZ<+A#G@vYI558UHq{3>n%yEUc_Mt0=epo8*B?sXYIj- z#S*uWUdOEb@xlPMP3n?7&kXp^SOL!`0zABoq_y_e)_Tj{9MA8)lrc%$SH+!alA?jrvZjOfZ#;_b zDdiEeB}2)AlCISogLx0ftkCvb+-nM$wqv9ab`8mb7`hpshlw7+1ex&=&j<%mn+Kmj za=+tB4oaK}zV!6|E^?h!AAe*;JAU?j`{iFTPzJ<6>s}0&>n^0%L`L}tqt62B!#-^3 znn{Gyf6dY3rFKeAnLB9Nv@cRG9w}A>a<>9*7l|X#2ILZ6$Y>0K*Jao5c=N7&AH~b) zj70%M@$UxqqvJn-+Ky#ZbD*K+;>Wv%$$H|U!O$tj1VKKV?d16V^)!w11rJcOPT1qp z%E**SfwKlrLol*kbNq$jYkR(;9V13drTAK*s)Eh|6;jnS^zN@bHv2`#>ItF+$|axi zOE^QL{q;{5v#$iEG3c&T2yTx0#q^25_jd7`6)3*{N6$Dtxt z+uDYbWf7W%aW4I$&)>#X%-C0obeX<^KO+YvKihG1m*gV8P~uyIO&q3Ez(o(RiR6c* zG?77;VF)^ey2Z1$1KoHPjoKD^hF2B(}r>z$_16 z4x>u#w=Jf8kh@SXy|%rzL4v#XlGIpu4{Pgo>oq4r*ZiDqYR)UukOAJ>Un;#gRx}pr zfK)r=rtCz3wO=7nMbA6=%f`OY)nuKH$Zgwp98KM#0Jx=E)m@E@ZGLqjF)o*^J{rwI zRnTr~#w+ouuy}C{nmhI3{kang(uS%JMZ9~yTiSLcB6<6}9N@Nr}E_UB}3`?Je6r@|2+=q6l+yx%fvO8`9Qp$D&R%z(Wz2B@Ge==?dj(Z;Qk<&kQ zq&qkG__^Q$Nhv)Igv!E)-&JAD*x3Xu_#NF^&=Oime1#`UWe$VmnY=chVD<6aW$zzM1T&b)KC!%V&WzH>&WxP zVrD(M&jm%Si3#qjZrU@w$uE@TuMh~0MG*}EO3P2UhtkyVp)|4FV*9US*Iz;USV6_l zK-Hp2!!>4C!;`%)W#7GRJx;!kXA6J?=$}%jp9T_f&EX7h7uwP5E|`ll=4tA`gT$K$ z@WpVqz%|}1&Ndeon5PYOvkAo8AbJLNu`zC?ra(ACG2#Gw7XBlZobSJKW$kp109SS! z_0(y0H#vLNlymfV{l)S?P~jNCHv7{rXDG~>Uw*a_KK8d(jdt&;=H@1cdS#tl+a7+5C^9jA zw)NQDVhkH|UiVFuMA5aRuHHdmFn|9Tvg{+YORbyG?|D92x%CzXVQ4SepJK2zth>)E zUfA3-XLE-kXKCR*|NgMAt9yP#5K%@!%o(DULEuALQYmJR;ZRO2FwYJ8KToFvi2IjpR$V?juuD1W#9(S5vEOab|u zKR>JXf~}29>{?IiAoQJenb$87aJHghE)a}*nD%h~%OFjA(?PX>UGwZGl)W26*E`R{ znCj6!pVpiIf}K%)sQaj&;dyv9*}k5g`qjYQtor)=IW3EuLo(R-Q=Hg!LQ0RiOFqRT*) zdgs_&WL&nnUQ^D?_~*OuKM=H#%QV9~wgEnHGnI$k!f?JF`$c%mi;p7%jxP)pcfM?V ze!X|+5Vl#&Pwn=Tum<5Ya5h39=zR)A!^l5hR<}+%K9V6#i5YGf#2paW_|fpwn`=(i zMnByVVLz3=85VIFnjumH)Bb5ScN=C7jpx&19)5j&R&Jt(!{U8?!D#6A10tr7B<4MN zSbo>lPA*THFxS4js~)a|{-zHHg*;=)V>DG@gpJ|$M`gnP`i7S`PnY1iOP3`lHjW8yhM@3y5}0w4 z0KBDs!iR&AkRF|kTVl;KQ$obFNQR&vTd8H3nZr`>_Oe`PS|AnZlgG9kj~!t*ACyf^ ztZ;13F+jEqiO>OF|*D(g00wTjVT5X+3av<)=)YBXb` z!KmAyPH@ba5SSZEib;H3!fWH6@iFl)yXKKALV6`cfDfDfPsjYc^zaM{l%o zz!yxz#N0`GE+a7wWnPY!=abk_y>vdefxQxZ6#C|c1Ls4}8M^Lw;Ak*3b?sIJ*IbF1 zIK%7HV3hv~0}?8t$#V17Tr!H1di!Ma@aiBgg7{*R!Fgw-hHkL&Mt-@XZcYve|MLs- z!HZ^9RRLOht1uSuCQ^bKrw#{_gzv@$SR?vn>9wmyjOt9~iG+?zp;g;5 znvQ@f%Gl0E+mJsSgvP1=Aq=N{r+~ChOcvMyYhB(!H|LngSW{TvMVyi&+BI0cra$WB z1O?$+*{#g|syTh>{4S$2JwW;sNQ+>$r%0%Ff8K;8x?Kz@kTX}zH5F9l z%Kp}vZEOMJOLFuBK@QD4kVe71$L|ukIoHIBlZ<$=o+M>NhI_xhKkI=YW{WaxC(3p| z%Nz6r3B|0tw@B~vWiUt~UvG-Wn;5tYRZEphk=Ox*g{#5kU``v~MTUB|o9ddGQxGto zQ0OviTzff|=iO(z%)7dG{E*LFaQjP;$3IgJeB?hd#`Jo^@~SCy+2MWyJ?p?FrdFbqw6Q|E=>+D{|IhX_;w=CIs9@N{f zRy()rMN$erT3nyVt6Q?&cXZU2soP#82u6NU5H&J83jv?^PSkUZEx?|;_}0g}v|VZ3 z!j$9&<<)P`C#%}_$xE$TJ{iE!uMR}x)W0mrd8D^`?TwGHPo>4s3wq9xvcM}c=JuH_ zkDNKA|Ap)c3M{Aq%?k`vmV^@T9o49QC~Rt1hpeqB^Q{*AChf!BTnK2ue5sW^I|H*$ znBU~Pc}I0Mc|8UR?{wvy5g0|kPNjwpgCkR|%`9cmT4+07?uG}={K4`H@2Bo{NAfoI zKXr5q^P3uS$g`dDimB_n8C6Yq7fwZ*=bX~&=_t%?P0On(tt&1=+!V-Y1zIY>C zLUt$neeaNbkj4&(2gq#!Qtst+L>`%?(4JH7b~|S{a5=MmJX2(jyyIWGn6>fXxq*i` zlDEnZTUWDVay^=@J-!lK za(0JFu(kG#uV0@3N-5hm{C7cR9*7ViR|T9&ezpY_>jI=htm&R!ZA;OPi-o&%kdLk#LRykNJ@*lQ zuOT*W#0tXj4Cb~FUd?0YY2ER73W&d?dXLbn{LHBcBWJ>CA~7P*?5ItmBv2hh@BA;; z)*nB2O@P+GI@hJXggF<|V4R2IZcmbV-iZ(PDv`C)e7BFe8l+Qg9LS|4EE_ zhZ91T22i{YSE5fah#UIX9K4)rb@r18>dVR;?X=gM4_R+v#N^sG&(oYM$^hpniHNua zWMOgjXO$JS>u=_lM!1T>r7$Tj7;j^N`SGl&x(%_ap+Hn8e@Vu%wT4}k+hu`p7w`8% z&eu2}etXI~CqPPGYEf!aRqr&N^G2m=BwZ+F)+XiRHS$tthS)1$({;a`15#E0ft*=A z;+-brVRch|Y%)G`1#&-x#wP7?sIOsFk+We5GqnsJaoI}_wVCPL0SF@!ao$!1<)_?~ z^R_rC3nMj_O~2LXC{sjko~LjL*6I~Ai4Fzj4rHiIDW!; z>8e3r5ge<>BE#`^5P$R9cs0X-@iuemR@o@_U1Bop@A28xgTwmT!);(H<2D{)Z*nWw zMjj}+RUi~LR+mC*SYdaJfkfrn6kgDrYM7hNRSk;F9QL(J_8{1#yZdT*N|3xaz$Yv+yqUgL;U1T}p0+dTx%ePmaR zofEN#`Jv)(8Gyq9x>#Da0j zY$c;CZB0@WKaoxtf?RB~{tQv(BN9i-?IrFWEl+R9P*Q@@NIyVI<1`%_R`$^OV;wX% zC!d|0S*7u3{O?@AK?CY}8dm&1V0eH4m>S6173Jj^?_bpK_%G8JO}@;L;~>c=JR>Pe z9Df3pedQ^WBbXDwB+&kGzjiiHwP;vp4Gr2gu3uBPR#LEZAX27I$`Sl0fIguD~i#6@giAFo~nG*=p?9E89DECk0xxdlLjw$)qn-5{Lkmy1$ zfj+IaBhkpsZxp9Eqa#=*$oto9Kc^3^anIHDVEacJ`K_h2d9E_(K8>84`dOaorSL|8 zG_)$W+DgrSnkGz-IOMEBJ~x8?!IMbb(6m=(Z>4EdCv#nz1L)y_l7uR)Fle0;-m!|FrS{{XT_gY-r4tDUU6c#%}l#@#t5|Ns-qPRE;~r& zH&RaAyoz&t#kZM7jJBb`qT71Aig1T`;_#!V=kZgkaj7P$^X7|3U$Sl9{O0YE^OaM| zG6au%7RY?&(DpT}$4}0dpu!M7j?_tzV0c5ej^>V5t_&xzO9}cUL+zF;Ce+|-&w^HD z7GCJ64}4?kC88|va%y);BL7Km-!+L}+aVW;k1ngwAm?ZWW9ztA+r8TkSXb!?#vanq zp&^t6^~PdUj!#Zo(G2U+7K6)kp;i6%fkc(F)YI1fY`9zld<1YQ`si;9fd>q_#uKL681(DCWOe<2FqwgPj z5co!Ni{c5ytKwvxrY>Nitiw**K4j3co>wiuXa4_Z%_PZ=?7V9EX(c_T0WJiDhq#N4 zjaF5aWmt^92V;5ro<4Iz_us0Gz5FA9x3Z9N|D3E$m#*r)R7*jD0+Qa(mXY<(k?zL_ zN;35HGUvp9c=odrm-y$j^3RX#psMt1I%PYRfL*~B;spUN2>c_S zoyhQl@RqxaL9xKP>f%rd$tc$mQ-!N9ah31|q{t|1V z`Wg5Q{6rc3^RNF_jQ77oP#lUM+*(e^7O7)bjvP2?m$@+fop1j2mDKy^kAK7DCalzN z8-OXQCg$J|&eTz)e-}*hWrH5&6MzBbmK3np3)d;j<^KElYx>aP4$->$l#BTN(_2o- zf}oJGyf=iosxr2kqX$BD>aYI3jQaam%oCbO_1}6d z36aT1Y%VSWBtsA3K$R=1J%5>I*~D8?#RO=-)egG62)jXr@^5B*UEKhvl6XRYG`4Ze zRl^)sZbm#d!4ZoBvn1tXSttN26{@2dg-lr4+3-Bw%O5K~XHT{W1DdMMS}W!hmE=vh z2BK(5fPiXEK!$38Y39Sc@E+W?YGE8U;Nz%3i-39Hc5-?^6MP*paT5;>o0>V&*W1#v zfxUx@@zR*3d8UD3_;tM@cWQcs9qKgrcS*y=fF&ie`yx8L-!L2}K}9G+E0?DV44i+((ydq{&k)AB z<(sA!jo|=osWr}kQ1O@b5!Y1C?vZxe)bBZ1)9+<=3l^ zO={LTistrhtq$10bH1BmEADBu%rpipF$r2+zFMi>W;r}xsI-2sxCiH}&^y#bw;bah z2EI;NSVl$Z;gv>U8)Rcp)=VgszQ+#)>RvP9f1tHDfV( zag!7~4{3%Asqcaxc2R+L26SNOIbZ;^yng&$gED>G$@p4h`lvHn#d&yzrG>Rp=+q`0 zz4O)RF{@?ne~5$=Ri=;6sO3bC!&nQ92D^bpCrAB)J283I3@J3`Az8WyvN-KxYO&hY z#lbdKmvwVc)hoFAp^Te1TC)QkJU~gr?cR6MIwJ;A$H}Ti8~f2YpMO(Hne{3=ws)_S zjf%!LG|(1#ljj1}YnCm>;wDzKQZ42AqpC5s1!+)s1Qk>+SnO3_kPhLDB;RYu2PAcX zoq{P@6ifGOw-EdQp#Ky# zoqH7k=#fJwX8-A}t@N3|=czwFlxVtVteF)6srKU%b=TQMccicZ={_w;HdQw7w{!>r z89=ugSLrfoIwsVWb&|00ekj|)aQkQ-{*c462EdD57jEMZb}|T42Fc`Aqss3K)*t*( z3HgeN**9-fwlIY~Q8O^+Yd`Zd=Czj-ut_|T@3F%q-70fE8719jNQTmAxCkv#0iBQ} zU#$MyPb$=a`i6dLzq|-EGd1i&;q}4p`j)^K+x0QcNfz$nquKp? zJ&!V_s**&#}zkNS^?9vYL?3?PX}-OIo;^rl9mU&R_yc~ z-;Eu4cXxFC=tgv$RgFslX38Z1{8irgdlvGABS%a%XUrp8rcq0che57N+_K$~^d>`el5MH$F)w|UD|)!5p=rTR$Xw^2b6ptrlWY8R*K z>ryVx%BudUQQw3p4P@fKq~N31%!&l-T0b1CL(x6sFO$s+oGhN>m%l5qXsAtk6aBVT zkvgHbmPqNrPY+HNPztoPdQs$6gFta>=e$kTuCrB=JZ+0gt!CatamxrHuy0$c7iaCt zQ#Uko#3)-TWTy>FRICKI< z8<@)(ZMTj!F@8_{0_+B&HvNQjTOu%Xpe2WAJo@^Y%dd!6-Coq0cN@pS>$-=^Ti4HT z6IO!%Q{{*OD(8WdPMkVJ9bamjjGLF>F>akXnXzNTph)Iw9`;?aMiCc7k%V!L0KY&p z^Q5@Kv%LjFSLrv{C4)xW_0O2H@EY6c;&Vp}<5&`!O8{%38l6|~14GgAcix1eTuHBW{j>iwZvxn5#wJ)I5#r7^A=B`J+`k^oas1!m^(riEnbc=*M^#sR z4%Gv}|HjuyOIuJmnEZd<1Q6@^SGi)8+SALCF}fbZle2wx%b>2MQsh}gMc~^_APO#Q zH|aZ+A0EfbRPC(G7uzY5ue#W{1(Pki_F1|qbLcFmTrza>&*Hk<+C3_~b-D?(j~7PM zJp}SqQS^^0GJp}N;h&6?J>q{mEM_gy^_=FW>y=R^!|C)Df$3pwgg ztLPRSEMwu18%<$Az9C$iySgA;fhcZ9&p-?6z4=@7H``|Jk*|p_qqk#8mAj+;n+x)e zX#c3YquOrDQt{C70&!vj&VyLO#r#oK4Z|ukL_{N5cx27l$SE`1n=8T_H?s{G41IdV zrI{Lcm`@h?E)>?!F}B{&b}v9+7)A6li;#oqI&khIejuO2Crs!5L!|EYKI8^+0aTy_ zuXy}{E;=Oi>$@Kc`TD*Wqwp=RRethR;^C_ff037QP#jQ3>&TBWBCL!7?lgWbs>-k0agec}CfBAe1 zi>Q-9%X|urtpWB)gQ4^FY|f><1Kkl42|4}M-t%_8Cmx#X_?y4--jj0DdP)%&JT%yP zb1soeISS_sRVGHXVj{eDUp7t;UY;;Jf`p0a8n_zRpsC&!XqBV4i}m3Cb(;Wjw(RZi)0V$^ma zcszAyAG*v^+x;*LKXubt7~@_uDMAg^)Qtkql!-IsNiS9>jaK&sS0Qpq_#4&Sy-{3q z&jv~MNp=u#EFPCSA?x>*d+rr7j+9pdBg8NQORKee-9bmEYq$NHk9|AcvTtFQR>Z9p zEhBN&7RC{EMWIA1e#7kI&HMgG9#8#m{4yoJjJF)GI=<6Ns1VlvTpIuyD=W+Em>AKy zj=rH(`~7g0YPfe{)!tuvX_t>Hje{!{^Px$6?AU_}a~>9RokU;-$!-qe&?zIbhi8xS z-(pSQoA8;)EMajv2Wga$E^7-59pnUz&+P*(%Po*-&FQT4URX$X7AP4j=@KK`uiIv! zG|)37P)t!zPo8_7pxS(E5hXFX-Ac^SYkfwsyjOK$Fl4PO-1>nD#$=($YQgWEbE0Eq z(;%{A+^@$m!8g1xKNmDM&Y-b)OD?kc{IY0kZ8 zTUcrzf$l<#{i6minm#vre4bb!Vin>{O!AuFBzIP;*inx4*6D~{HOw7UuQmR_Pu|6- z{~ID9#tD`$YaO2FS64vIZ;yGb(l6(1u${-eqgr(}PwCh*hiKMy-W;9$y!nl@|Yv>CW3AmgM6=lrdmu(9K_rvwY#50h*`Db zpBAX78>Xf@JHm>JQ;o}*|J<@R1L?1JAiWLKwTCwav$nd%$^=O`hUTk}!KZ|;Bxz$fhUoMz zjWUppl#h+2rmvurxEiT5M^eWN*4g{thtr%{sf8|{`X4+^6>CvB6{Wj6whThRoQq+f zPo}{J?=clXUZ+9l?JE^>yVC@Mi$fAEyd#vutxU{^-Q_sTurNo$wau4X-=gF4H|a>5 zG85u_-Zf0Rkwmj3H6uA5*|;R%jw0B97*3l6i7Zj898?HozPv% z$J3}SRxNj%@wj*`Fad!w^-&nI@TZf58cvs1DqJ?}>Ya5s?N*d`ohw{(K3_t%H)@wV z;s6U#&-$K3{$@S)9ViPY+q0gNz!Dh&>F2*o^>=L&5aBXQ z9Q8`&P>gs;x)yf4SEge{TvI{2Th%vn)y((IgDaS5ynJjLeeIi(bF`zxAhViMuW_h{ zox$)}R52sRu{cixsPpg|&yi8CMhYv-#!LUXB5Br{?55(d-1~wObX1an?h2i+H_}ew-L=2XoiWcp1eiN*RVg(%pVRj+rQis^&SWza%ZHG%t(j(#8-2|Y`s;x@Iu)k_oi+`E}i(pwMy z_PD^Lb34+K{ZcaH5kYehIrA+4t{11@cjaaZCv(z%>2|MgSsve31mM)0N@9KX7+8hB zncg;?exb7YHGk~thlKYpX;_Wqv2KkFO}p~v==Pchvojhf*Ky&eZM-5}6MpmOCmb<8 zK(B%_W5sM;F+BJ%&-~PlEUIJDK(X&^((^D;xgqd}S3l217aQZfem1@DMF32lQ#One zc1gtZjyAmhk{-g9(dPEyL4XWBPMud3U0)%>D{dfz0cbVF$Wb%p_CH&Rtz_${SwqZ&XLB^#0P5?f9Dw{i8|3VO7TluXmc~hh_y9$-9 zBiR=5^#I@p7n6A`URKXdl)8^oj<|fzoGp}%c(#nA*)Bm90}5tXaUm&dF?_#SDVX!j z7e)r?yW_LsE5y>>Brm>C;ZTs3WM{OP*~JYUa_$TX?9LV} z^vXl|;mg8G!kj@rd@=C2m29mA0nwuN6vrsY@Y9yT0~yzo8d6qU{lQu`a^#(y06`f} z!_wf;67xz|(AJZpx98)|`fHR{=7Lm@bazu&Zk;OM^1YBbAXyP|J$S<4!+kPn?r4{{ z!vXV)ESns~u`ui@&Z|FOi9kf%ynD7FK+EKGElm_7d|fu<5$`>*dEp0$_k&vWtus75 z>m(eivVcq7#5%hO{Ux&cAKDkGi~%x5#R>BIac_&Ygw+ERVtpNB%$s zsSR1TF%rgz+sPx`R%cc-Y}JJ3B{@Fp$)>_jt*qa13^%V*h=w3=%EB&kkh|;(F8%p4H&i=iF|J-_pzLblnbSXI)%dc1O!~8fzV`W0S4IihIrVZs=V?Ky z*970M9%d@(=KZFijo80p+A}%Q@VhxF-g(;v@fB$`0OB0!JvWS)Ob98rz7_avh3+T2 zjKW;(C|g@O3P@)U$Ecm*Ctriis-}argmwj8IRDhF!`=zBM|eTfWR$Md9d&|TMRev0 zIaiV+C;_U_E1w1iCC0(yN-%H%>6MeuXx-KypYF^c24Bnx=`h9s!a0QV!{_sJO_%5l z0Gmh^9vxZ=GdBs^Ar5r|B$6U?EF}~jPj80gTSiQ;*(AQxO-r#swfAP{HYGaIRni4P zEcZT4>jTRd#h#FZ4en>ql!%DRpFRXk&*HtXWxfr19^CA$Z23$FqqXs2M5KE{DwXjD zJNR%6(-JkvHwIJq`ZN>1Dr%MIO?p=g?W#c1*s=R9ML+Z}a^{g%6l`!S>Lh(sp8UQU z6sZ^ri_nD=t<>v*m@?H2RV}T!phqsU?{2 zsDA?Y;*i0J5vjf#L(JmhwX~VOj^Q=*(qJ6D?Kv6|c$=|x*&+BDa$5Ff+F_8tABIMq z#n(4qs(2i@P)I~@K~8xZ^inL~mT-n2w|`IICvJ2^eD z;;2nhpLJMjLU?X$n3=W)ol;xHN_~;R*KPj!qqk>lS_bjbhz>(M$*ogLZk<9q_QgjJ z#%eV6k(a5}wJigusBJl&LfOx@u!q^h%kc5yOL`&j&m?!j8F?|xf8$=)jB9OFZ(}6u z>vC70lMPzN{ca#(A*$IkbHD4Hfavc}t8;ME6X<{Dq_>jNq^$oPQs6V{*p%e2Ut4)$K~_Zti|?cpA2=EhP5xI+%77AtW8KlM5Q-%EF|I4JK}}4G&Y?H zogRfkmb!?Vm)JAI;K{1cYfaX#j?TMFm$6Cg{TV$=o`UV$N)w(mCbJhCv$ihIKTJ6Z zj^3&ldlx5kSl2c76PussO~^(B!u%d$0U-fM9&BJ3nl@2sZ^y##=2E*5Yn1q+`AW3SXR`3V%Ki+H7@0Gpmab`X&GCdec5x3T_DcWb97gOUs)|w?u7>50dK2qwMA`w; zK_zJ%AJu5F!L8=nh(|mu-0qlLYw>~yeqZ1&Q4FB2h;~%Uv@_yd>?BJxS_Xzgh>OIZ zT&FQ}FZd9(R66D)DbfRJ<)Ek+ETzuY_L;VcDyGjWgpr{djdN(JuQ@3{68>{V>LE@g zO;b(9n}$gqK;%Uot#((jIZS=y0;r`dI#%p)_d~v@6vY}8J#)>?kx@5SPJ>V1OZZiI z-={FE_0{lqniKUs+NEJ8>?qrMF9x>^RKI4~SQ;kivBZ(;!uwx{v_`P9r`xmK9iZNd zTnsl|Fc1?2eYWkKTBkWMsG7jGC$7E6Dp0l((blaXjSE}9($%^=xr zL62jy_DCINb#!Qi&|`jKU!^SNhLIa{am{l7_A#*$El`nO47YZYC${yta~T}9I|w45 z_Z8I=e!uH-M9mB~(cDWhNn ztvxk+A0b8?MRv7DclgTZrW>>V)Y(Y)rKgG5 zh)l6rCo0Am;7i`EQgtK2Z6{i}9QNWdEv+t9OwicHz-{I2cjCKxG56vqZS=OLC=$%G zS$Ip8B+C`vMUm^s{4U2s=AnOm-tBt_!joDuR{_V$)XjslTcd-Ct{6?adzWT)AXTnbBNk6yi<9^W3Q_rdr^9OZI%;8eTozzR?aQ1>2tmUhJ5O1B$!B^zDAgKXR<7gDgSf#$ z@E^zufcqJU?aWuTe40iXXs7(TjffOC^OcEr$p!PwwG+W!vq}wrGGYEFR;wS;#rUTb zIsF;w-?y8NOVQ9pN#iU+Wa`R1{;0k3JGQhmKflt+V5v(u&a~%p;i0aGn6&~HEmLHK zt|zZOFH!@xQm z-IKSS`cU-kuZ8lIb+aR&IW~WQT(V9TX}&cR;SO1Q`cDg2r|$kLVz<}tIQBc9Wi)N& zRy22c(g`Uk*nzrZd-pkx17!1rdtD^dGd&r9&5jlA8q%Y?N0fADezV_hO%;%0J=Cp# zWmxlr@7L6C=#PW}c_BB2PEtrv{*;}fP>$GZK_-_kJG=U%QYe=XiV}!Oxr1?fL2}NsyfSAl~#|5S2tZT$w<#Tlya_>l$D(!fSr0fFn47 z8!TSpT{zG^c}Ci5?a~m|KU|;Iy=B&x@&gZ~SB5cY!)(0oz3{|_>t4_vrb%IQ4;rwm8v`2@*km$-&)&AQ^fjm z(qCCP_5h1zsU;@iT!+-x^@81Y@2gQ4*eR?Ds z?4MsUG60I$Op@_0hT2{)`HM@;B&mvy=oxczP(5>O|%CX1ic^ z2J~lNhCgi5suB}3fQnD6!k%`Tg{qPxpwm!)gh_Fr66b&Hdz0bl(PYt@?!l$wSNt2d zCzL*&9J^8$`jV}S1Qv9B#SP+{3KDcd&taPj@8Kh<^-V4LbY6V=UQYzvzpc%Oq&x&tSUhwS9o7)mWV?=iSCvneBj+KLn%}_* ztVBHgJ4IEU2JS{pqU*w>tWA?`xkKNB!pqa(@z*!t(j^QhPNbV@W()?mR=gOkpQ}9& zGaT!D%IZuQ@!?B6Um<0ojJG>~W>UOb ziFM=n7!r{)#&#O7-wq_eSA!oA`Kf=LX+k&^?04GbnSi)cYTg>QZ-WMVTsE?mrDFng zD!fN>=H#s;Lui}X7WCUZa16Wu|Ix#+4y5D>UNuPk)1N$ zduT&((n*Yegb1Rg7}*TnVKX;Anfo{@U{H%U9HwoqvqSX4HjlD_;|;e?L<6%TG(tG4 znQ!^_Dak{8DQdOf-Z`Bn1}QT(?(ZaiO$4F){3i>5i|5661!GL+S3k}!BoN_zJbcIbhLp$dgs%NcBO=IH&b zq_jUcZ=RLOPBZ&X`zhkf3+#jC64vuT|9gL=__;1q*78dt=fX#5YQi3AqiyAAVO?u8 zXs@mFCrxE*xfcbT_0^UA6=}U{e=}2|U};c9b(bgZa`O()c1GDT4l8a-%taZ2a>VSN zcPY;*e1lkg%4OO@j67)CDRzlZ0jQsa%DvfVIEEDSh*_ zH_%pnbBkuoIX0j$O*GDBXS1TjIJ2;O2*_H@Q@pux%b#-z#w3baJf}+Q8t&30ZVJE8 zLf@iBCoFxclbdVs>^6h5wTO70&8N4A7wMy)!LPqefG*v%wI{0Kle-^&bsG9UZFEpv zEY-PINY;6|JbcZD*1KoyFqqBC9~Kxt!F=Iui+d3$157F@w_dI;y4>MA9~=d8 zAMMH6cfsce5#rAf^aU^q8D)3;G*8xc)O8g7q`SNQW++xe@4)Ps_||gTAt$Ecey!Q? zOGpU$;zf`71Frht$z2@8ZKDm-N9K$1?Jt6MBm}U%35%QNa;6;`EyNMRrjmu6yu#F- zbY6{>dG+>lsT1yc25_j|k_-C9Pgsh?IXY%YU#7+)tJo@G=`TY>_G;?Rx;c-?oh_XR zvToJ*VMmOAn3u=FYP*By0;Xpk7D>W4VNPzQP8cYJ(PaQ3(a!zoD(w{PIeyOHN84xJ z!x;5~7R$@%k#Md=vZ$4c(7qsYAwwpB)y1ma#6MJ9IN;*PZW(KtSXl&!PMy2^*V*Gk z8`Zf@4M&+kt7p*u5O|rn17FXiZGTH*VQ-+~>3y_k9A*FyME@y{p8eASEza1;ZsMax zg6HK*oezZ1H&%`=AKFGPP(Dj9mX$5q4>!oEx86rbMc56(-nAX z)4Z_l)c@e_Eu-Sv+ig!Ggy12#2M7>6xVyW%1$PMU?!kh)yKCW+KyY^`q;Q7{?$9fH zzx$lG`<#1w+`eP<7~S=a8q}g#>-o!?&u`8ZtB&dwjv5)`dner&{CdTX!*P>o_Z@L! zD^DnLO5N3L5;%m8S#1Lz>sYfNgti9C{7b#893GhP_V@Sjr?S$!B;XUENIdpFAO2P$ z1UlT?%8qF?*6+xV;K7?)U64<56AcCKp2eoLTDWu6WQr72V$*;QMvT`PI!Q!=^Xb(j zNE_5RD`LYS71^oe!Qcv=s^%&pQKow41eI#H{VDPb{MOW5viQsPUOyG;chHh2`!&#f5e6O!IXEyx&E11_cq|{=c&84#lq2nS552Fry9bw5)Y?W z_k?8Fq19?K+Rpb9I;wh_h*JB8J>B`7QFL|3{oj&pq@Z_=mj~JPtBV}4W;CO5TljK15Fvj5_BL#z3MFi!0kYw2-vS>gXvF3W4V~`QFe>U$`y# z@-4^tT)pv$ej}&C#k%R$y&vWKiH7zH+o~ z@6LI=gn3ZlNn{_h_}oLr*Wb&T`N`zRG<*ZC^|N@Z`Vn9ar`@M2b-wW!dC@LuGv?C) zAuD0WbC676z)|H@LBTMz6>mY50IU@AtE2x{^~7iSg0}x`gbo?&DW1LaJhc*K?9KzEAQ4l<^HOnV0Q@_TzZ0{tIJSbFrJa?k^8Cca zgfYS*vstXS&IqoGgS)J@k7mTtr1!^US>&%K%AdC4sO>F48q3pHt3pJh!?Cj;lgu#L zu2U8QgfATo^Q+nmT0uH9rePUVpFUoovn53`#o}x?fMl!M9vByBZ^Q&cq;YTUC{Gd$%G z^?Wy&|3R5bh}|>#I|OL#DeI6N)f^AV8 zQju6KTb_hSiY&_ijAkGq+fNexcH>trB1O{-+XHArTTzed(`$u5GfFS_c`fGm``7Ao zs=En$yu2`6L2*-LXbf_ZTAwvZlAq5W;E)qR3SxdIAa%N&SHRI=yx%gF!0bVEAi(t- zr^3qSK3r-7wh{s)et0i7LrG)0XnEy(PN^p^VD{cgNyYr>q>LYxQ@tB~@nh`I=V55$ zP%nJx?YJX#e1Z0)tJ9~>YHFAgb1QSXr`@T?X5&|dZ~~zUN*)D`?bPQ&hQQfW;DY(9 z;SJ-bUiH@@VEiaC9umu!tz4go#~<>UkO+5T z{oK7Lzng&2+NR=l9=H`S!v+P-bZ;tz`%YNHK=% zwMU_Ij>iVSY0X4$v>By!MOFDA!|*q0tnI`rb>5V)L?59rH-i8$X0TAMfj}|zs<=qA z-(y7$zbcu9FuR{+`vuI8*ZX`q%uoA!i_8?Cfu{;!XJ_&~ErcU_UJ;7(mN1Iya12uY zNSr>-E;}U8eoS)wSoIR2Za$U&r~R#C6#+%zX0HjeZWAHRY7P5*v+53sF#@N{s9{y+ z=W}2=s&+}cOd`2eO@W42uAreaZ}94B%3xfSGXR%Ok-+%#ebshg62d+I4y zI#$U;xDxW37yhx-Vy;%NX*T4LT(*CgQ5F!>KMS_P??noPYabRsLsOQunSOkXQ{W6yO{U&bosX;TWd-W55i>daz{4$_I!-(3E8eyo zlS=b$4v%&yKeJR@dO7W>6hdGa_i)I#f;f+Ez)8|v&^R&YCvLBW3wy%C6 zMR_^No-a37$k^6qA01uHj2Uj+r>wS&ZGQsR9NUjxXVpc+nTW+6C)ZC7LPv$3Kwu5% z3x1NhL=y(}sptAX@;IYpN6YyZG&C!b5(qdhpk`J{ni^ksdD!=td+}{-`h29m{>>xl zPn%2)lJ&fX&|U(~D&moIFKQ~Hp}MBEx>DlKy>K~8d~#*=75Y-8&b7x!|A1H7$PJA- zUCjM9klVUBHY5JN^+kld9eFXz;<;yPTg&~3)=>^$L_&rBNco9hpDr{r9J-21y5H^R zvhk&I9aUEb{xn#h%$N%)(v6sBR|)%lIPc4S^$U&-oa zFBa6i!Xkr17|~ovSHr);D#_yvo3cEeBMaUO8qIOzcJ%nUoAOT7WC9_cIYQ|~n9(9C zICD)hK1hZHE;2%Z(lw?Zm(;s@cgAUG<}26hNKGZ8SV1Q?^h}+Vs~GCEK=YD{aEK>f z=0u7U4LjTf5#XHaYJho^j4x6Xd&~jWhA-wbW_vmvNh#U-JfD9(9|c=k`VKLubg~-R znK|+oPhb@AyVqMf;h63(A8R(%bMfAxpP5(7y277s+_ioM7o5#3_cbSgkHsTC*2zIv zzDt_s!@--yfUX@(m(KR-4Bbry9X$l6OYsxum8{wx6|uE<;!4N-Pj*)2GK$nn&&K*A zOqed&J=DgWuU&R@WYLZ}=JtchD6MuV8I0;x=O5ED)vvzp3^YEMjT1k8wNkSHxv8Xl z5efV8^P6Dq_xH?)?8LMR!`%S&4DELAqN(uE>2Bh09i%_&fdaK2Z! zXXs)y%~`8EH$g}xcyn#ycLg+z9h_aChDyS%-VdAiRd zf^r%TG7Guh2i#l)J(_Xr?JmLtltz@?m>pPM`{8%$>;=QBLR(KNa@*vGeqN>p8wr?k zHHo6{Qc8|?M?BHbvo>G9>_x^}>X(kubzDsU?3Z9Ys9e-je1*ZZ7)%FuqAxean@(NJ znS?c$6}|V1^Oras!>oH@a$|{f?~Y^W2%#MmYP-GuDP96->>!{|+dVpq(I1N7HJ~GnpWDVw4wxi7{CCR{T7*%{f zE(dELH^oTz>bIdBR<$`5lVlx;b33qixMrHIV#^x|8O1r~S{UyePBi&xfia6sX|}TL zSVmo}VMX}fM*K}#l;v;23b=9ip*dhPYRX`Pm285!MOgq@^=;hDdk^ex!TTBCOJe7R0+galyJB^31>WS=+qjE$T6hReMic|smT^Xl$tHA%nKV*{!X!h!`F9WB zv%T<}U(q$^j+Inp9QErl8*PgsOR%}zhk9ZjP(+rd&tYNMlw7Y{lMA<37Mw{RTI}fq z9|&IZDyUM)j>~g75Qf$ae;8!tof;(yiU8dfWMo9!46+jK>Pis!r0G>;DvYipKjF z?quSuC4|$pfQA)V_oSMg%Gg*&V-qKLrlC2(PJ1b;sjOQIDv*z^i-yM>dH6t8T%d`V zX)fqu&&<`j|7vfD>Pz0;i5b}QZ|14)Rr=q|6ZYAE!#vFdDzmV?a{r={xkaGp_-R(T z4rg;U9s9zm;NY9gL(Tmb_;;I6@AA;p(WGrgW%c2YQnG}n(`9%M`;E3Cf!ygC`m+jJ zhE(UcA@UKshceg!Zjs#qJK>H_#}WoEo_ygL@7BulVh+>AjJ3fY)#t+c)GNWPy|>{} za(DL|g_WVkhT$%8dnKtq;8RrgcWnoM*?36WX}G1*xl2JraV}@tHB-tlgPruYSAsnaU)uk-=qqS*F}*Vn80bR*P?#bz#M8Gu@}2 zPp*4(pycxlqESvleQ(+-rdyvt4N_nV=jWc{V;izuosK@;zoe|y;QyMH- zo=UQN9+9Ur->Um$)D0V9r2FRf_tSMNv|S#$7nk|$l`Ln`M8mIeQbyvR(7-EEOnCjn=^d^=$diwjlJlP5!86Rw89{# zJbh9kk+fFi>l6@_^X|7!HNOpU7~PakqW)Cd()NezU|`s3VMVhE@5*;0urCu|*4d0! zsz@GPi4?lUbEvlaw>qvZ(9gYP_ey_%5Awh6=7YLIg7>An6Kj6OWURoGeR#CAnI`NwOI?oMXG&HQfDNU=bfTy9HNa;*kLWN3vI?tUA?2V(;j zH<8zkbL_fz`(G3tu;P|Ee|i31hByDk@i)}u5+#NvE5D|Q9veprOva;E??Dm(W@bA$gowref8BiD~Vz0h}w@Iuej0b6X zQmm;G0okc9D=pPn4ervR67}XkwN*7Rxs1NQhq?A+41{L3luE_4UtPT{<2f6YFRK*? zZr(mH^6r8O5u(0%vi-&Iz3dnL0D0RYh}TIpW#rMbebEQ)H(GVOx+z}zcJfI*T@rGw*2(M-pBAcv8`%P6kW3WO8L!U#14w_*ed5e&mp)9U%p$r;n3#qik^ z0!ZiG&)Qz>+zgD~S4FOh@$kO3%Zql`dntO3fJ~QnJTPO;U=UHDK%lWGx%=@wd{iqS zytuI?m6%%Eya@)$o2wV{ohRgk7*z8rh?WQjMhs!^E9cQQM0e!N z#J0n2XJE01=tOL808KjCZ%3xZ5wOthle%h$@#7eQD$|>&2bp_Bsr0Me@{S!xEqV_K!d05I=j0K(_WAY!P`NAqo*3zec?+sqVA*xOiWH6u3hHG9L08W{F zYiIa9r)@3EW6Gs^qRV+)vf2zRm4+kU>HR@7OWVzY#Bf*>I=8I1`y%=pDbtNz#J@}x z3LJV}?}>Nso|~PkNvM(L@eucBl2y{Q;%VA5?N6RBGPbAnpH|yag*qj^+;6QmL!v=W zKD8T9iN;$Qi*DSWqM^=CXeBZpo`+E_e7(4toNSEGIBwo< z0Yx^W$2HLDQGB6?a#j|YMO3CM5L)stWPtxe=X{kc+CO~N)kX}!S4A(&^c3N>EYtv(hJ~>k+#4-Q5>G_# zm)>#ay%zaUROQ=i^0nS==$4ysl~_>{7~z z6s2~*Qe*DaIbdeWfSN}^a$W85)_PqVVx{I*YD8yWwhT%08p_Zut@^)QSsbOVQ){dD+aP!FS_UCir|$n>=STN+?i0t_Ml z#(6a`aFWwi#t}v4YmoY$r#GAmR}_gYy>b6qLAS?(Ft`*O6>ZUDGY+ZJyc^{`4NU(` zWW6v`IoO*`_qpUFuQ)kTTTZo9LBFsBC70o7vE99$f*%cBrmyd(=jSKty-I{>1%Fv6 zOVdWWR=l#r_TzZ;L<-VFK~aqkb&~lRW~zwCR(y85IMNwDecoWfKP&+E!q|MU&0xL) zm5{op(@hLvoa5t3Evt5-yh9{xV9yz#dQz5BZe0A?j2>(CVhC6m*R8XB%LFU>|wt#R9a|3UvGVf{e* z7K>-$xKk(*}{JRzIeu zR>w2vi&0uCv3*T9TFX~jQkFi*6vFKK9~_xaT8Ugk-)QvZaG3x$ev(R+Mm?_?ba7SZ zcSY?>PXS{CGn04E;VoZ*Pods~*J+t;CW%o^^{3^6 zx)zx6heDg5k&7LbOQJ4OcMxl6N80#Gi?qM2AN?C!79{lzYJNVFEKPS5gwXP^{0z|C zdnTV_#7a6s1iG+7PIJDoSvInwd{*&HBdgKSmP_i5Fzb-ANW7>@ zP6ov4cz;IrAwm#(s%yXXkhnT5*wf`b%(hWZ$q{;k$BBL85K~H7ZPC2RFnMt|T56{9 zHZb(IzqoUCcCw$TCt3F>Q!LaywEN0Lc?SP&rq~I6V`V0aXA_$t4L8qQJ*P){zTA!- z|7mOUKlE*@xmbK$-KBHp;|e#Hi;!f*4HUIefTdX7vbu8u+&zJ_GSc#{*-*6sl-p7% zT48jj*Q5)aZFtR(fmboWWG`Ah*#wR)z2y;MH44ZA`b~JSPH#|t-+!GwPZWKi)$isxG7mfMQrX8|A*G$>nQ@+fkt8)sg(^L;owDdmwqfR6){|zv3;& z?^^+4Gsirx$!Ii^q&7YztTS^=kd5Q~DoMj^vj2h1*kv12>B!KE|5B%K%hNL7(TjvX zTw6!zUtHV4MkFM1h3pleMKT{$YOZ)F_I;JbOB&*LRfOaeyUUZ(mI7&H%>l{yqzeAY^B+FpcVxRs^ zI@QaC$s=eP?6gxTB)-HI!bT#nx#?*(kK* zqT4BO$Q#&OS9(ik!lD!Eazp7ZZ=or0@Agce&W8jj@vZSFgJlp-H*B>|hz~}QFVsIaPbO%3m$O2{z((rsxY;eIcE%v8?J_l3A$ z@8keR9c1r!%DkydI+640jelo=ey(FmS;U@#_6I+qe3v^KVBDL-+R+qG#QP}cRhQ2r@yg&~Wgr*#I?>uVwdvMC@Kc@x1!b%q&YC3m~cyx>P z_T$Ez(Bk4lTHp-5i`Hf9cXhf!wm&- zrM)A~=6}O(`yC9xWR+9KeR)2wy7^V*g1OTR(M}ECH*5b+IIS33V$fb!s#{Qx15U)q zbuo5mOb!#Bni`#+P(x1+DuJEWiPvf(%gYL(FyDnY{}dy5FRp6|cx=T2x3<}vH=lcY zUP3e*Yx=84vzqb_dj))}0ULZsc5ZS?$&5oA;jt1;eDF}N+oLk z_Yr!EdD^?YctRbnY3F@rdN;rPyv8U=%JL1??4yCFP5td90p-xe3eBxv1L}NA!1XnN z?A)lPRS0x)U=NjNc9MJ=7w%gWHTJarTi~tk`o98i`fP4@_f60pzU3NbD|yu1P}k0J z4lmHO^(@H~7JvJ3%s7mtbu4Ry37c18IOIQgH^e@q_qOhoIsL|~j`aAIV{12&NZA+b z-AUj+8%MQ6d-s*yPVXhg1w?+k_p{6#wA6uW?p<$*tB!n*Bckh-lCxJHZrU;*9_AbB zQC(q>vskQ;mK=$n6E_cC)}UWDn~^S3YYlLH^t5$qjaDh|KxieqSzVj?Rr88$il*Fp z;X0q)_Yl#)h9X(KDHXk3zI<@?r6BBFD1D5^Wiq`b0Ka-}>uf*(@l|CiEaIR~qqa9m z+7!!-l9QC-ZqYNWHf0TN6KJ>5og3y+ka3OvF#ss@d#;c%y>-nO4c;EmZLDdstSFP_ z^Ri#aD|Jhg)<&T?;?CDiwN%8L9J2uujdpUMV?ABP9U`EE-$AH$2Fwa&)6?cPquYR9xVKurfUstZR1 z*+$sv{flc`jgl#R*qte|r9+y0QgmD@$^292V9=jB4>6w{2I@TbUR(&I%N+p+;}^Ym zPCivp!4q3T#J-_kMSh^Jpqb2iK7E#sqVr?p4nTW_UvXC|)L8gFNgqN@liA3Y%zKJA zVZ#Ivwxy9&F^ea;u53XXH%i8O(5~g}Xg2f&2w2hZyFd3E-R%aUkeC;rE6qlTo zF*vBOiKTeZ_*?S~xU}5XHEQRB-aXglZ_I7Pa*6j8QC@&;;vk#(l;%BdtqIvjrOONU z>4Tz&>#IU;RvV>Y&WHeUN6YjA$k8wqXLM4BQmik>nc~n;NYjJp>^`)MNj9eGakqzV z-^^}pci=c@suXt@UC!=7SW~g^SEF>Y^Xh;MJ+wt?z+@`=nNDuhqN1YLImJiqnXsTF z=V(eE4u7a@RtFhR_7Uv@u=o+_-11&E$mR;9{d^1z8A_{vZfYvu4O))Sm7X)pi0IeL zRsZC6rPgc~_|S6mXckkwv^rZqsq;QB?Gz6ypnY(zweP6hm1Pn>_YZ_w%HSi*>4KS# zCQC|^jk<#C?)LALo0a@Pfl}qL%71~}?7P}Qxtst3W$DAIn2ByFE>;p%+_ma_76DO! z6_#rW&U_c8vBl)BsI)^2h<5n3I5YpEFg+#rqgybEV|H@vCFT-8b}TE?|17I*a5RdQ zG`8Gzv!R@!f4ic2$i$=onA?KU*c%D7T1r220yyjDB(7%q$MtGv@%e}4ImfdTq|P*$d}_%}OG#B&AtkUA%WRfrKUwArT#my^igQV{E|~7(#QUFO z6>R3mHeSHwkR32PIlW%Q_S7yUoZO!0OUW&#wg^rAc0h}b2rlbfkQmiswaF9=TUz{Sv z`}~Z?#zE)#aQn~ZnSfg$qs;^}Rfem<(s8v?1u(e|njq>P$Ij0xkN{J`u`Z#~J_{n{ z;m*NbQmdGGWzcH6-ofs9QkIyY4Ngi~Tw>U0rom zT*V^L{TCA?2?<2uZuW*V0fXjir^DyOEGlzCxTz?XFYr2w;ePyK&0us%0ulV4MlUn_ zH?K1cPh0ANbzuyGjPbGr?X%CPGqvHVbCwIW@S?v#wqJeIxZbAvvi{~MFn*PPaI}(~ zmpKqe_a%d^JH+Lqj(p+MN4ysTqT0faXZ*=0{p9$c{zc+}wpCNH-=m{u1Wvtx`3vg+ zOjmxC0sXXoa6Iep2ywe5rf#_4atc&*o=#yBBB+FwaM*ZZ{x)6A#CPLy{rS3p?m@2s zNd2RW$g|F)v(6zBfG-em2C9Gf8|nM=1Mr&Y_Y?hB)Y{)~{QrV>`wuMeum9=40(*k6 zm@tn-RZ(j#QNzF#hP%5FWqNYg|zY|NPBlf+cH)OKpdDNn^^0m+!ufl4fBKwQqW*n$UF zO~uW{0hfiI=J{lKA}9H12Tfvd=I=%1;bxa^z<-{7>!D6OMX7DhXt__z{2o3NASDVj zI~HjSn}cpOJ-Jl3lm2ujbc1m;-$POqwoU=j4QP5G#dcylmi0bHDdS(32OFrFWwEUlsbgpL z)q%LzayTJ;&__>Q`gnX&Z-yO}hgwM0qf4i*TwqNEF=otfh&-_5Z~)058% zXkL*Lk6gQ*T8KMMQK)`2o-5vEM>$)E_52zO$7I!zS)x~WI^M2_M(ebLW5uw0=P;RS z=aPO2TK_MJTde=1#4XpuF!%Gt2@A5xa2aYk$Tyh0BkRoB9?r?+uxl2-0t=#qzqF z)W*VEK9xs)K3tP*Szd^duP&OQecV|uACuv7H%?gtjCCqZ`+@FR^5nh3077Ps<-YvI z$|+74%(J`6&5ArkDIv!;(lr;Np*^u1<$BZQeanx^jX*Ux7J?u70pboRk)Owdc`=r%3x^6tm0SK+6 z1S6Bn5i|31Dw3J_(tnGzezrT?`M zujUqKAp8Lc@i@IMBUS-Y)O0nSr`DzSg8B^Kt{e$^P9R=X@q94@s?G07oV{9SmX*c! z$z6W_@bYr#1|{5>Iz2PHU6Yjy>2QAKFYK*Di*{>LFa6~GM(?HbdV}P4X-kwn6=*32 zOVT)VC;a~*_J;e3X1CRo+p(%B%!Pnv-)&_u?RIc@Arj);WxAWlo55Lk+;vdz!oQrR zszpbHNr8h#`nAST;Zwn{k-Jei#F@I!zIi>rUjzuSJHAL(Q(SVPsk9wl?~V+h0JT|^ zpwqpZm0rECP49&jbyiCJ9%H!vVAd@hXyULxwi0UB2bndx{7uaL+MD9pTQTOEpmqy4 zx6ND7%cJ|Lp0N7-D99*jRE%<${kWXY=VsaN4%@C|Wql-M1@Kz{c)YFfOSeWLreKx0 zG*6@AGgh&tpZ>YbVrAZiTum3iUY3|_wxr3_QxsWYz!s2g~HWg{YdKf#F?c*VsVe3ay?TX)I4(0ARC2 zTp<_<#sYBtgN%)D85{T5=!kJl&IuyeqX3NH5QGI_AGp})mvMk_U~%l# z+f-S?a9>}y_m#CydA1}s5th-E22296r$6E`C)_c93a;)clg1_`B%}j;8#OF{tcy=3 zTL--O#I+$a53P8+uxa<0B0#AM%OJ*^cB?!k8q zt6%u_Ol;Cy+juK@&*5$PNCJeAGYZ?}HNGB1<~N zzS04t$oyxXm+_SUbnUv+Km(4_{fW^3UZ7X)75INE&@0Id>xUoU^H>W<+53!hVNq*D z`UX{CH}r{fnj#TEFl&1%e#bvdg`U0y3=HSrU{Kq8o#8_>>6e{Q zN#s!_pkXwsBm>Mu@UjMZL zm&^CPTJ!Vxs{0RdMW+`$^PUb=$*Z2Pg!Xc;DF`uNi@*xrVkoM-rVV?mR)ZK2_U(fN z_V-mQKYncrA^YA{Qj)A{ zj4e4_J2x`T&B=N`MVNTh1gAJ-|2Sz~6V;W=Aj}Nf$dzZCHkXZ=_T*t7T7={?mH!4q z`Y)zgB+_B`zr*qSYq2|m+|K;u&YSD*>Wc`xi8gdT z-?8?u+{YupGc##fwuSX9F7`NButgoSy1B2X#wosk3J;H4=i>f=x-hoKdTUeEq$Atk z$qzUB?mN9M#HV7-B}A$e;b5A|!Pt&Pe((7pA>)whPMTk0OI`>+l+FVsg4P_wew{VQ zk)D%4<7L?0Dn}IbEojE*{<+iKnZ2CNM52LMQv%<4fAXW(#Tho0ilwvQVj%=22{LSS z#vy2**(Q&Ff{V%Fuz#d$=WRp?P;@&Y7oU;RJ|!U1`hvB& z){lQ!{!tj>F}67V3gmfKOT+%eiN;G!?=tkRvp&!f=73f7<6UqpXF6ESln{}Y7a`|8 z(d|W(CeSJ&yva}MxY=D+J?mRuCVTK4#S5hW9u^m)$5_ZC0%EUGPmob^we86Y_=Tk6 zkWEj*YZ_Tpj}xfp$#t()M|G$J*c`$G!X!@7Hduq2t3oq805K z=9k(q4pf@7rM_!a^d5aN{Y9!03Ft`_Dw1hgrM7%3-}SYgr#DKfNCND=by0PG^vOLO zwiMRQ&#lhVol;@b&_mF&Tj>oym)=bh{MxX1a-t@$t}u9*dY#%%CG$OjTz0JN-re3f zTO!n-QO?XxH8%S}pT3`=HDqD)MW$;u;?1GkAoddTA--0))UOaQD)c0hUhTofZt2wU zVP}P4f3|Idkk~c0e8yIemM6!kT}DRmqj8lkPV^3G^c9jFT6#~xP-0s4)pj-HdO}=S zlM~i#T>o&2s-hy#65=0kI`hs`{YbanMc*QlB2@N8(SU%L$DHp|!LL`l^tQ{C)pjPT zD&8O;e+rv_Sb&e)TY(*@x;+nIr%kEp^SEd|_&p*Ls>=4edBu7R?#Gcp-M&|wtsmxF z8kH*aYm$C-un^szB5!~z&(+DY-*<(Z(z5n$Z}Me9(Qw~!HuSHcpSE5MsM}iSocXF- zPmJ;&lznuEFV#%8o5peSdXmZeNFhaG>Bhj4FBZQ$)u2;f0E~j_CwsTG=PbU5L5h_g z8$Y$<>juLcS zh!z;Bx|0`oJudw^dpD~WCDwMh0v&>4u61EinCyHkkh^~(oLOw+XMWgXUy?)w;>sv? z;nxJ~R;1Gsi7$VpNCpC<2oT+3JAY>USxp8J_5j=1!0!)_+^6%l`kfBSOLB})g1VXX z4>O2eMM}paC^8SNLU}spW=Zt85rUb^Hvv=EZ4S<{h#8yn<#Ba|lP?|=J9K`p!G;E_ zW(!Rk(qyO4AFe$v3o6WT_n&2lVO-~u2ZawC< zP^|pMfOV9{>gHag_UUoUdVhf&-kluTE%WW*FANPCOK2ZXYIOc7CLBW|zm|#5>P-_l zhS-Phmt1jq4%&wfx9rn$-c~!*#LpWsSCtrPr(&%1%3T-tB$>o9j!+@eG`-f4o7dMd zv##6w)}}_#`~}dScWH4|Q@-(UW`&9NVV!+Cb!C>@ewP6AEXp*jIkm9K*Mo!eV9yD$ zsDnV~){Sr6&sp=;wRzkvh6%)-na7$431B6n`l|##0OqHY_-a#5F5;X2VE0rju zHI9bB!BbV}$W|K#wx|7|eg@D>^RC$ke9q>3ISb2&_9yF4LJYA|RXjI?6ooPdtM402 zJ4|rhTg~6fNlMAx?c*B=x5D)~vytZ*5o+ru>RT#26_6$WR(~MqSouq0``vstaU4}% z_AA|IspB?=*B8p=b*JMc99UtOy}+8?K3i#}(uR>Rn$yb3bV>|3rj;${pbR*zpZHj> zf1Y&toalILjz#QIB+D}23=Z^PCBUCqpJi+)*K8klR%MJ1=k;H_zio9iM}>eUA^8^7 zK@H2TN!c4FzpvL)n&zG}d}drkOMXPHr?)1-1?*z6@A1G1F)XH_Zusm8hhJiN@Yq!e8uExt97h4Hd&G5MI}gS ziG{ms+m@kp=mU1R*Zp#DeFhS;N=BBB{#;UVJN1XWb`V|YFmr9X9ADL3El!ZJoDh?U zwv-kHUyJSiKGa3$?o!~)HyPuy?sqP)sjUXq3?=yLI7Lp28n%;g_0@hUM%1{_K-OCW zuQ7^7#eO{4ufVh!%8-hCx8rz|9#h-}$cfByHwwKz(>P@Qe%5_@RqL!pgcRf;XlFW8 z^~jB{%ftK2+e?2W*n54Nn|rgE73juabODk>B16W zZqJ3!7HhKP9ebaq$iH2-N~IOPn=h3Uw^8>+UbPAsN4$oEM-Y7tO@=Di>ft<_88qoC z#ZuJDJLjDclN+o}i{dKEN3*AXqOGHmz%kL>-@3s??Y~y&8?~s^1+oG0-Ob?@*PEHS zIh$J}$hT|#>kn!+iOy7Q^j;B(>q{<=&9l$bh?_wPP<)jx+cDr`2$XHh!40Mn!9i zA~TubPk(GtItRBVDDvu3T)0M{Y=sk~AmNe!iiq%`xN_w7uD`o1-wC#RJ9-*(_)%v1{etQxuydo3Wv7cucu>P9+7*WbMod5jD5c zl`Eg(@o@?IY0Ap#;ZrJQtFk3msq)xnC_Lb2yWZo`9D3_Ocx>U6R-X-b7mhQ>d?+=Q z8^g}V+t!FhOGH^=|7zZNvj|=6&*qXWIicT%%b z-h+kRYTWM2)?oO)Yv$!4cIcD6I)iU&hWgY*BYy52QLBzmiG4o-NjBQrPx$j~`8_C@ zSLSnb`DVTF$}`7Q!&X5~gN3kEF0U*ttCJeREfDgiFgaw1JB&PcYr3pe1XYAk0YEbwzRQazT!`pz5JyKd&pV#ui(BD?I50;hUxi<7~Rdz zkI}2Pc>>kH*Lgeg0$+NHyLyyCMtO@XH6v<%uI$qm6*N#Ykj%F4(-!^W?9X9=zX|Mv- znVM7Ea#qj=&>$EdxrPlB56@P6D8I#I=(ru8tqJnk72O5#Gv*FkhD`!vwDUCe@2KdNgq@vHg9cJ4TE_gS+63sV21 zSUM%q%HJ+E)oZIRR=W#b)^0WJO|P@TqET&NzP`}^|LHyanJrBum#97`AH)yoR@>3&RnZJb9kyT^QWarM|wQ*T#GU25}~fD8u_ni zy)}E3JtU$D$5BeV4lZAhVaji>?k|5ZoS5)lus{}4eseO&xbNQ%o+N4FPHvHwH)Pw5 z{xT#N+Odj%xZp2~rM6q?S)KBA&TA6P2pBDRs%<|XOVoV{wS(dDPU&x*?;&&xi3W*T zsjoD@3GMOt5VRrXE=JPm`x`MIiI_PL>E6{|1RL9q-P12#JK(lD^A)U+4>LoqRmtPy z&*hJtI?aKPE%br`wgy+Dc!`GBn;Qcw5jv9JwMcXfrm7q88zIEWPex!^|cRycB8XC_3a;TXK; z+T}j`e-O3Nm6Sqh-D5RM@Sm46V$6Cvh}!3G-<6~Qk6ym$Xfqixgv(0JklA=~!U5y9RVaP-Qc(BR)N@lbpHsHw__4@i73R6l$ zq&6qCB|C`&&LfS~5r47|e0DITa|AoJKozL{hV`LU{QsctEu-Svwsze>5(u84!9#El z9$XUKwQzzv1b0Y+yB6;5?(Xgmg#|6#-OkKfYoGm{eZSk%hn#w0+icxx3^nZ$;t$=q z)#3kk`q?r3T{a|txewNsT+|h^bISz%s5`cse6!hA#9p*1K@rD$<;}^;@|riaj)f}W zCzp-SL%+yt2JwN9S}*Xc|JdH!HweZ9!w?NWL3tY;)UQS#BEES&?EY-wecl})&6B|k z3^mKy5_dYTNsR07*-hctK_y1#&{JK-F_x(`X$aRTYh0?&8AZ}>en?ECuen3BSPDJc zd9EZIgkZUS6U$O)e1+8N#gb_r@PS5d?Ko`t0E1kUlk%qE^F-^Io_{yjf?bj(JP!Q! zc^1z`W(9m<9!B8>k6Tk&t?rYFCgtzEb0K@(^!ZQsX*iL5B;& zJL9dc^ipKqGTWIGRI-=v=+m&~&2r>YZ_vW0E>xAus z5!-5r+O$5IuC{WNbz1DaH0MKIr@PE(JvVBCnU@8tz0!T z7bZag&!3L@n~cup8G)?=Xivd@NG}k3-{`V z*jN2Aqk6k>Ftl*N1!)JvvQ6c1C|3#9+sg2=bnN~<$3(yRkFpwwB4JE~_Mw*_zU@r0 zS4g~UGBWV#h2fl{)68#3|P6i*hPE-7~N75b< zSNP<9F`3Okq6&Gohbghq!GiO*Jl>w(%S0e07gxeRCTdXtgMKmedVZd31F;en3JBxX zI{SHrQ^}{tjgJH-4+mb64w+@CxY=xIU$j|U+?@2V*aHD{Y=mvLe4#Q$^aWB&UZY%p zT22J<-kaF7U=&exoTav*%`qJyPpq34zEp1f-Z#&6#Ium8TshT=Wm!{XfRP<}=G`N! z*xsgtibr^SGMM631A8S@^;@9)i@B?b<2Ij3rEP4TrRr5wjcrBSS|*ISw`ou3lnJUt znT~J{jR-|JP`z|OqEc*C4Z!!o=a#8nl$}8H9?Kx=$=Ys#R|Wjnk!sm=YK3-9yJD=yX3SDoFUalu7d4wHG%2 zZXY+g&goqv=HvZ4&*m0$JyXo4s=ygLesgwGSC7Kg{b-NV7orKO9YzWcr-@i?hEEQ~ z1rHc^jh;Ll@qJc7sheQ74;<5?)2zALjijEsBZS_U4QZoDE=He#kh+o@S~}~u-*;~` zgri(%I;|BLSD4&;Tp^-bu09;}X@cZ}yPQ&c%S&8Jr1r*>l}X|YXro9&^D83I--pDL zS2`B8#&TnC{E1hC+CeYG@ux3sYl_MXDq2?}t2}l1fyc{w@UXKz!dJiK4fgyE`;e-*UvV+PpPGU0>j+jE)`t#h3}` z-~)bDIBY|-AEmscFOw*}TC&g>Tf0^gPoZT5+L!pPQ}AKdQqY((oZoZn zot3MpI=b5UKOaUH+C1jZ_zEcsi=PNtUG`b*Sow0kMhWUo0FiZ%%V8S#W9<8FU))eV z?6@{s=V+-*1zKd+j+UlzF%+EI?pr!I%X$F<(;%XW=Qxec0_J#pP7LxJ%dLM~ZZF2)*IStHIDFVl+R5VyTlpwljbpf^KZzSX5 zZ%l6nl6?$9ET~x{iQ4o^y~c8@24-k#L~>@O?ZGH#gu$&M%ItCSu7=k*H{CZUlx?{w z4Z5y=igOHSyXb`&Ai34i4N&Xkhf*zmLxj|CM_0r=B*hgOrbY%jIOi`b- zoCiLa&I|N^G)!)B`MxDGS(})DC>%He0^q>s$Gf;Y(|r3ye9<=R87ts|coB}`M{93@ z*t4T!eRnw4LY_09bjyl|621-SiP6TTbgtJ`{=#v0$;xtRJ>#mzWn-CM6H#5s6o+h^4?jnO9afT=uT5gYX zf|8@)VkYOn-lBHdD0?IRh&Uc;i)WVmTWto-kBaK@;AD}GN$xXTvzjY~O6ShWB>F7Q z08pF6idV*NkF63qySFRU_V!F?(xC!PNJy>_d8#jOI>hUEy8$wT2#y`g_&q^jlVY~a z-vDTq8-_x#37Ra&!P((nW8HOc^~QnNJJHhVgU`y$4p5uP-JCPTjH!i!#NG%7aO1~)gg z*~k%J9t^StwB5xh32y{?Z`~W`lfhVTx7ddtB{<_|kp|!STWg!|HtW3Vl7D{KvE6@Q z16nuzq#q_VS40dq54a;@Wyf4D&ND_$*vn%#QE$Og-&Yy>H{xc*G*WotmS=V^7_D%lN z5%tF^3}M~JKDyuCr`)9SnY0GU`YB6bDNKx1f#R7GyPV#wPb4?ei1+$x7!4?9bx*6# zG*{(=&AiS3msK45{`E({>&`58kQaYG@rWS7{hh4oYn8}%$HQiqV6Kg!Fa5xAF^XH9 zdsZp~^a|(Llx9VNiz_OJJVgAR;b@9Q#9bR~f0Eh=y0Ey= z_|oMxlL@tiWz1?C)#<3q@@GvJiO|MP_I__GXenxFXc!~SY}n;zw7O%bsH>Os)0@ii zyN6(Y-;MOt#0yndB4I3z8G>-FKo(Np9rP4Ln=_y7L!=Jcv*6wAA|HZi40DtbC8uKq zv(ov0@AcCZL}euoV&Y913aKVgIchUl5QA!kasZtiacHa8z)C*F2H_&H!jl>-vCwpp zmux;@G@L-c#&z%Vp{%I37}1Fr@{TL|_Zod+SqxB1SZ1tN)LW3buogtCh!-LaR$C^Z zZdL~WYAIk%%&tZpP%KeWQ)5)9=DHX2<&%rG8R*0nbujsrVee3`r7Y^TI9J+hnsR$_MDZy<8gVb<8 zU%<^bagQxDqDy~$c6L!VREb=edimjt2{p^4`D}bWPU@r?Ya8FSr)9(Y#W$a{+)!Zu z0`bOwrvG~Lqc4fpi>S5rkxCR`W|QgwO<3^5517cTyAR=QWNdx?w|~O(`roP#hSbB| zrh5Um#y{ks;~yaD#kXkpwbPx4+{gY)r?cxfyQ^6IAgmYmRA&1CB-rFcJt4FU6G2iP zgZnN{B|A-AY~BM=9sULPU&(zZgIIr_;>C*-pI>dZU=L2y)%(968}In>&&*NaXX|Ub zo!fTiwB~!X<^q6k?1exd?B5xC!1t+gW(jekHP{Q83D>c%0Q0H`KYdOlyDA2s_-qbi*-9giUd?bDUyuhiTm zE!r}%=CJ+dT#&ufBLRynKeaL9bt_cm9e-C9#3y#c<*R7fV1g^Io^jrW^w^8AlqnZY zSa}@=_qFC&ly83fa|5w}&w}OB7eNUKLl(r5$l1G3t1DD8GsixCToB|dweU__=Terj zdE6p9EeTOK5ys!_VbX5N@_`DKPB%Y(DHO`FEQ|U!k*r)cZZfT}^8~c{w(wCI-g%Pq zYgSMp=+@pGE!XavuOqd{&gn~7S798o+|_xPOpn)kTTx%bprOq(K?j*p(*%;))_sXl z{i|GyCL*}7hb!EAd8ntmcwr3Fwp(6BUW!FZ;b{aG-4gsH&cg7xOA}@_ghe?PvsaFv zH7pzCCmr31Aanqt$}R?hA>=0x#~lm%a<2O@htkGeOfbIt?)Tf>KJ!b`!zo8@8F2Bu zyKKpXkj5fv2Hyku*z0i<%!j$HwsFkE&B3bI%@dNwQ@9tBZA4Jj2?C#Lh0OdorUq43 zML@aI?)i>zf_y+Iog=@voKS8no+;9o;T4UlQ!RJrSWF%GP?8mD6hkuJ+S0{2UiI8O zFnyoeby`-(7Yjp(UjanuHLc!jI}whP(l`!AQ0ns3NE4bn{l^=?hap7tW!~{EV8v4| znT6_c9ST_$SghVEJS0lw*dtXPg??JQ zblSa*`}olG=};B@`pt8`yhp^Cjr|C=W#4o-kdk^a)oPe7N5%dT#XOeG7WwLi>D)b2 zO2Ihr;!s1;_Etk3e}wi+I-v%QtA);3z5rMO>$xwZo)d$}+I0RG7>?-pbb8i)7~7&| zOGF%U>S9p^Nb>U^!V#hKkn=RRZEE|9=T$}Fo}5~h3)_nI@vSps|9bB4yGJs`fG{(} zYJpAP8Aqv@e~dLvJA;-o$+C+HqKu7WQKXqlkFm|k9cg1&o9uFTiQ;lF(oLanJ`v7R zfaPiU2oD$a#j`=`@njH>8pHN8gk>dx=m!Hk0aZUkA;+19Rp}^RXl--mV6$%^k?$=5 zuCeuWEQtS#R}D%%X~G&6C2?*vg#DfO<3pflaEDRjE7u~-puuE4X$@NWoo&)CDmy%I0i%Rdv+5 z#4!>MXAT<(ucK@$va^MPNpr)BvCDB3)ga6OE{U2_2rCS@fO zbx7w8;_3Ep#>ake;!R8ST6H77ZWKLgl$K5o^l zS>N6|t}gZR+HPY_@Ep#U;>l_R9-k$s2$@tuBi3mT+oLT<>J`??!?J!@wJxJ zJrxt@eaG$#rzfa+L|6T_m00$k%SOw6-)9%jDihYh0eo<9tEHn%v{?Vc=2irsybwc? zsiB)Z_yMBT;3k9bIw>;Pjk%J9^~zYY3vipPvN%FIb59! z%*E9aG@tG0P8Ail zk2aRaVTY=a@ZK07pG|SG$$n3Rpgh43pUf_(zU1?$yeAHwbDYEmHmu-R_L*5icYV6| zd)9Xzah)pH%omsyCrB0533a?)zs8cr?xv{XSt4{8zRV6nd}rFKHlEnDR&UrZI}dX& z@hq?{r=s%Xzrj423;Jqij5`OacBC$G3%RCJj3!-;N`+lMwI$Y;6C`Pp&p{mL}%b*`S@^<^mT~ZmX8Y@$&)iH z`~+iZ5$;Pa7+%uxY#{|rfEFDJq49?U;YAB(OsU@n1iECx1?!(C-N~6uix)lbU~lKe z4Ca4`6*qLBB}mW40P~mV#Bcq(4K*$NX6o zt#jQEta9$^vpK+vo3zWG#A!P6ymZX(DzuWJo`G4<&3)T=oxsaZReJtgmIJt1MbQF8 zR-l!ptmie<5TIH3xmvc&@R-y0p<9d-cs1`_hRwi1JsagW$uQ>>ocHyF_hv-}mJ*uy z%UzGa1Ulb+lkie`Hf2OC8Z;d;g3~LhO`VTvQOU>%*Q7%xSx+FimM5vXK<|_N#zDNz zbinoboI1h6!SH;Y6$&Ihs8qi1Hk1(q4yXq?*m?9+W$kUwlG-$6ZY;6Q^jRFd9P33& zIyllD5KfZMX7I%hY{d!r5O(h;Zy?X9eKf+^I&X&-s@a+ERR#Jx*WQsUsl~oTyQG+V zOPnM1(n5tFQ2m6OK&Hu!Zu>*7)ry!G|hyYtijo&}AWAy09}B9(8Xav!`7J5OG4 zjOLwx5ovYMqUh^H$#QM#euXq1QEg;C+abBNrAJ2|C+${P22I(8X|=L|XQ=#v2Fvxb z@iWj@d*Dd$uO=$WX9@I{%f@`)T6)XRaaHJ&k%gnfu|=NCSEiZ6?q{C)@&nRzzODM{duxD8T#}-*$MQ0Ef_zo1s z)hvaI#RlKI5S^MATJ|ZdZ%{0519!;>)FyjrKn7U5ldHT$X>N}lie>c;7+E40t`}+f z^ktoy_Myx%F)E35^8xRUM}@lFJ4!B|Ri1OxL`tl%g@unk9}#bMQxZP!F`ANNFMVYr zta=dMj3XVhI6uHLYY-X}4(Q>*FS$CnTLyHKIb~hR?+FAd&~c*29U1!*d%+{vhNyTd z+#LZ~C5!A>@nrWPMtD$3I;k-lD}`w`CV9*HbqIDOY4fE1rJMaUyex{_M4)dR*;=o3UQp#}sOFmgt0CKL1vUL00- zYI9;-#NzJ<61C8a@P?uol(P!r5n<^NGuNv;ErcdnU(^u7``?q81-ns9ie;C^AIw9xm=Di&JD)a}@l^$E%-qubqw(;#ZtQtf_(h zW7dLE9`^uFBj34Srh>l7f98kP0Al9U>w<=Aaj--20)k=YLnTZxH zSe|n3rm+}6Id!pC`4FlXmrR=StXyeDn~+VnYp#=b^i0N9=LL-(LDQHoo-sM;z!KGlT!nc9CV;-y#l1OtAq9m5_lruG z;83t&P!FrJM2=^NI`i5Lbw58XcP!cxFCC3D64g*t4Y{{AAnNvjct@*Z>#R}+)nEzVLbCA_551WUD zG^gFDtyL-7F}nD+eLI@aAa_v@j^M9PUu&4$#n9y6VvF(C+eRNTS(v)6bjY%g+}Mb3 zZ*f=pZ;t081LrnKrdd{>-hV=akW%n7ZS*J7U;E~aNQx~#PxvM5$7Q%6(X5ns{E@c< z29xs*-qa|C?~)R>Xc^XA8hb5Hy?e}Xi?iCODh@#kG(pc)DLCcen;csvpaxBDU-{i zsyT-yOZETW>2NXph1Pgu>sI@d46-@g;C!L)=v(2`<)f&fU}&y&G`qsm+ng)&hE;(g z$&FS`sJz}HjUfZN4iL%6?99c(G=pv6BYga$1@dm0G2sZwiW+^`$Ou}@>0t9DkF6(c z*V#DaP{D8ucU`jGHrj0opy&)j8bVnK6745*VC%s$(LP)|(lcZ`ImY^V?+X{ahu=LZ z&BFI7?jL^aXRx>3hgzlc*-{KR;*1Bo(q)tbLc(#{sDC4YOszQ)gO|=$WR0KOOw)cM zb0bFGqrKP+HNK|GzC3G$a~GkBo;_DXl|qF~awg4-Y!f2&tHoDd@OYoVCoYl`H%&UM ze;DiKED7AT>~LI&IV9JOq^Sx%H3hO)T}Y4f=&F7w>t+k&1wD|D zSM3t&8^h>-FOKd2Dbdg+zgwHRSlR7?%$)bRaU;b0w;nidni(oMT55}TwRGMU0^@?8 zh@|(uD}(XXJrliK&bOdDRz^q;SKC>&wWrr>?7gXrpQVB#r20=!B|GTg*hs#djTNBd z%cEhV71i`slUK%mxHmi7Fcu~7SUyEc&H9k;MCmQd7Mk>(b6M6q+Ko2{=u|A=pU&Gn zBRm;0=ty-m<`wd`xNa|U?)KI{sk`G#NwUxvT}KAyK~U)0>c@s#??^? z)LBr-E&uEtYHx(FMM%uI96q@Z4q~6ksSIu-01`4G#E`T$&PUj+!6R_<$*~6+)xWxg zLLPlGsxH5TCDlq6&D?Ta)(UXq=8oyFoK9d`*8NH1Ta$-Ld9qmss`hEKk+QZ!vp#)N z4O`aM^%{qH{2sg1GgoVo4~;jEVjZ{G8n=6$3^$$(CF@($)!?%&gVP;IC64U5Q?2pv z`>+F0Gy-j56mhFk>#ZC~YY}Q#xQ60riJ#j^65mIF{ghRKgpXZA@;cZK$A5ZcbXN??B4qr3)39KA5h0NHX2= zT!45Ty#nUP7(TpM_AqVue0XuW-y}1eUOCV-mYhky+C2EAC;FRfy#+;^Oqrj*z7dzE;roxIyK+@*^KJ2F z=A93No$T{6Xk(UgF;A8}-r;rY=EZ4+rS9=TO){xCte z<7MMhm5HULOAVX(&+6CG5)(Zs&kTtiExu-pJGT`#k_?rLjg=t}eu-QUrm6yERKQF+ zRI_v?4fQ`HS))HBW;Ru7T_2`_Fp{3$&Nj-lDrX+{=m#h-J=jN!lC~MQ_@N7_>DU2SClmo{l#}-5~)o?m|CMqCA(TjoG?^Mwz^Tpk&zONgm z^p2S681yjTcqC>F@Jy|DGg?Kvf!R#y8*953fy21ST=S?Ng@}oxi_Hz!_O~st8*Nl2 zZvjnty|qsCookawD0D{uP7K~@Cx5~Q^z_+aMExrOh7Za`CF*Zx$H=)>%}oQ^ETpPy zqNn81c=UTr?1Kz z-EIw`n;YL9cxa>zGGcYO4$ePnIj&-d_UGK}Gh9^^h@c!?IwdIe9 zuemKW_Wids2UT*6gUWy-|qtMNyLB zGg>iE&uF}y8M0v55w9gxzBRnDWe)Fek4@vcZLF)TO%Tdp!M)=ccQ4~=yXY)~w=LBz z^Kx@QtTe)kF!v=;;XXLsAZN*|ladDT%L3NnC{2jt^jZRCNeXP(jBkA25#FBuTqhX< zuP|yV1I6HyNVUA?w7p-c{z+; z(L!EhpNJ`IV%rm+GYeCX?Uwer@oXzwg$10$LUH?R9e&kol4$d%7A5x9vi*I<$1u&3 zaUF?`!@;L>Zy5^;%Tu%hfb>#D-b(~^>IvOgd&VU?m(@1R)YzG6I((esMjQ{+eHS>Q>sI^)7d2Xl( z-}t)TCKuUu)#0u~avRmXcRMHLt5EMc@uZAq8LKu0*#%ZB8sb=>wvporB{HuTO&CpG(oI`}Qu< zIH=2IDN97$j^bK4LD9oW4JuitETQV9V!RH#?k3^&3;Hahcco^V(XWj--Muax&2ak0e+~IFl@!d}E4Nb8Rm>ik4Xh*8wge^3S%E zkZrn^B5EMe+mLjJnh>4Vv}-BxYkC8eC3=PJ+8`3X7oELx4IJGJq_y=r*xp!QZVw07 zi4QG_(UpW!btT`B0TK*wB>Trhr@&Kg@x+_OlgX6#aCAEKH+ZhZEK;i^E^#$`Tckms zYCZS;0W&_u+Px%V0Kag=?rsL?g7qkntIc^lT)H;N51-5wxXsG8dSNHAMKISlHjm|V z@(uwgSl8Qao{cES!1d0tP7Ao$fw)K8_kUG&(0tu&GU;8>SQAp))F0%7z>{0ix0l zF~%bYHaT5J-njTk3B;jsbAjZjtBL!1 z|G-($+G(?_b_ekUtsF&$9_HP6f54{5BGE7=8r59c%9HI=t zwI0H8{Nb2dk|pA!Q40BvOe9zOu1)rco8~o+UPP9)l^4O5oR5v4?|^*dvM{x4Co754 zm@!@C!=szMuR2Y=ighxY*0pF0r{-8dEjd*X6Dpb6x)kfdQ8ybnmdx62xi~%>x>kNP z8q+)S>*LELBGt=7GUPM&@^(t_q$;q`QGTuearWGD}$9@_PN9q zFfh9Lv>kzTHxk~_5pmb+;Ix!&&aUuBz+QVaaWDi3r@vb~fJtfYz9=VIb_u(>GZdiO z+XB37jXI1LOE^o6ex#Vgi#Ja_Bk(~{%n1as))vk?d3QF1hlVu{Y_3Qp%R(M6H@H~l zhmBj+-0fBqG9kEzyDnmdMDJiSUN$xO-Y%Hd)Lo^LfY5EDc3BGG)Eel@S;w|+AK zz%aD)~@4zvyuM$>GV1rC8BSJZkaG#dt3k z`s+Kbwxh@{?6L0`Hj<*KEtlx$OLq%Gh1pIxf|eK{^At@?uE6VxYmBPBWrh8SlBTVw~L{) zgYTxN#jdWHc!UJV4-_m79p=N1sQtvsWw{q;-Tmx9_Uy=&B6EF&zG!@v~1UIQAnTw6ITxJCU`nUpkB!-7}yL>+d%reXcIf^vhdm$(V*jIDZS7!a)*Be&v@m z)E|?$khUT&7R}1bbYkFjE%MdJdf&X(>%Q#!C9xVD2j!L1qqEGXI74U0$rQTXPHRQP zL1gmt2}u$be|$gdt7OKcC1U(kO8TaRn8y!XsTD2HS;D7RXr}j!?D!C#WYtwV#BdZQ z_c)21iP7hexL!6P5mLkb0YszxtyqB!dOMn)K)SRLm-hxP*3E&Fbx};=s*xv9&Lq)7 zfGWO6>ixIx=SQbSkzExdq_r(~YNoEKM^FEgHWcT?eQvkJgE-A=un;|hyNWy|xjm$> zi`?p;FNjxr$|kD!bi)V5yRZI-DW}%c8bMBJS)j+hN@9Uo zEtE?GJkCHJ%~OpKEHUv(A2Km?Rf)V}CfUKCOiros1WM3Uj*KGiA7z?`M_uO>1K+9J|>^#o3! zxU-Zo)5ia0SM`jFfzulqfs zp<1xzS`*iC8mDJ8Rn~Z-fbFudh?D+`bW45y`rd4pa)S}y zZ)Ix5&1JEQtO?A?yTnPFfycDL|65u%zvq@knK0OLwEvA+2$o@{*+Oi|M?ua=sv zkJJg-M@JL1QD=L8W(eq{l0S0FilTrC$Xw?er5g96i3;eMQM(UHZ9lXpW^QwKycWzu zq~7EJ-YQ`1>l|hbz|#V;^oXJAv5{$xXN!Ou30|SiAEnJ=!WDz%JQdGR-aMns2n}*w zSk?zk+meGN3{M;E;j}0$sp?Za^$s1qjgx!~{@C^f@rPKDjA%y zj4>82075Lfh`@^v7OJbi&%|zbhKP;+!etbXI}nbT7-bg%6%~Rf;C7aYsM^88W_jmHvV~_HhZ4Q1XKU%)kLDB=4YX& z;5Lu$%AJ&Z!{boGzL6wOtbs_On$g%$!m&!Z$nOWNW}&{5NpTBFD^7?ftlHv07wjxe zjk)=1-&*w>zJx%=gbCXIhur@0+3I%*u&mhgHEi!yyYzSzwl~epMq-)$$~$;_o5M?R z_)bTz0NXIUhFMChMTl<)XvsiJe6g+Bbl^p(U|*QHr`X(w#1#>XxI>6GDSec0uV}P{ z(D*Nha!-TkEfP6&$ORBo?>tWp3db-Do$c@UJ*7^X1oSa91*!_+EKbLHbVL1@B45oH zZA^jF70**{+qd^432&LI^ITX&H;BL55fz5wp^(S|5CzLR(eLnP<%>CBs&ma(SMzD5 zq8edh$s!L`cqaKjJfo@}DcnnQ)e!%oWKHRkC57HKyk9L<>G^Rv3D(P78wQf}*`Q6j z5cPtOm?|Fvxch2MNpo&AAnIrDEUk<&Onuk=gPJOz!f(834nw{z-1(&1l_oXNmO z8#VJ^oZ#P|+V$ZMGXCNg|9SAgK#G4oA^`vLZ>sWNe?*83j5_`=ANHUABj51fl;i)o zPmmZLj3Wl)d|-omaS?+2Hh{o9h*kjaN90YfPva|>0keH2W?%BjzgSbC;rKIZ_r>J6 z;41(~1dh&6X?Ld7LhSgDMrV>TnUg6Z_( z^L?fu9h=)7sy|lsX+_*`3y&gsaYuMXz>s#rL^XB|Yd7Uokj zJ~-f8ijh}Y<{RrMHyJGinXv9vFg{E1**3fspXrz)xA@LsPjX>0LXvdio!UPg7Ew zo~n!l@>r>!q^k#{eFPm z;Dg5mB`yQX%Gu9}+J1!n*BAOcAT%%dx@MKo^b`=0NX})h12Rr3`1KjsD5`Q*#^j$&xGyz<`l@{-jopqeK zT0;3E^;3d98nbkr7lfm=brLHzn9DUS{RsBR!2i@lR2>0&Qm-l?nl*7S|CqLg9f?j( z4!Y|);(6r$NOC^Ec;t?HSX0p2Moc~3iI;NK^)r|{N+L_Ej-}5Luamcv-%N>kvyM=! zN*Ka)nU$Ll`&ey_3y}PwVqJ;kfdt;Xog+MHRMFFFA3g48V>F+Dq=56mx8=5y6?iYX z)I+yBx4jNivrp%-i!Y*C5aYE|!%U1*U;UL%DRw@N#WmUJil6o}E*Q(7A&#HBd-3Bh8VShnLQc;yi7I65=Tqcz% zs_UuIyMSM_H52Y3i|rc3iWi!lJ=wfa`C2pljaTNXUU>q;&lMWqOy)e*sl}>0qe98N zb1h%k$gE6l6|hF80@a8r&{pc&Ea<+}pAe3+Dci+O0DKdMkaGeaO;rLFY4M!wVm#@> zk(FE@V@;*P=rVj+s)(3ia&j!Zn%-t+YaL4q6+`GQ45aBIDwn~g2 zAD2GgkY@hx(0&L={~NSlaL_7sVU$-Bt<%`9g7;EL3&W^50N?lFzMn={q6Bap}QrIG)O}k!4M7CvDa!wl{VwW@?sN z;if=_($|G1PI=R5K+yt153rtD&6LtItfg3PB;+MVOY3HNGjmxy)%Ff{ewH#?b2@L0 zb>)H-K^A!4R&)8#{AxG{YMGJ8osk+ior@!MuFaaf6j+{9%6yuf!cR<(n~jHTB_j;; zu-eBved#nCO)ux!_*TjosDMtA)D!Z~9aW%_ELV)eLJW;7n3}p|uqje6_9C{3da}13 zr_aR+p`z)zU!B3SzVWcXgg0+S0vu>5A%uU3CmVtLG%J-hFGq&)5LT_}ZaUN!zS6xn z!A!OoPL~}D=Ytw@$Zh;X7F zG77J!M5mpIB)73wS0O@rf=)D*!Hx_MX6?TUfN+HM9o&@L(=;Fe5#tcY#}>$B8Ro`T zb;Uf{#bYvNV8qbx`a!y*}l83m$_1Q$}7gj)`_j}+rP`3+oEy8(W+^9oh_bIBBx&xJ#g@!8XPGit|%u>CGe z)phSaW!Jd0%i>Q!50l^G;wAy)r>X)320P0&NcF~7b#WMy%HLr;bf41Y;hgV!yH)uM zkuzBEaCO1vIkEJSi<|E|o@%wUWTy7}Lm>TKuCh22u0|dIV8BDaaCKBx?|~OZcJA)P zxBYk};KZpflhaU7I7MniR{_5FGto`6`LP(hcefN5cqDz&q@)-{{6(w`b9jLCZfals>8dCfYQ6l25*gQ?lrF5@-UcDwHmw#IdrQ^fmy2yPHl z%n*L(eb@ar#OFYoZv0B49gGPAdL(B3+J1006D}rK2{=3+`5UF?Jm#?q)nmJg%e3E55em3Q9*?S)oM7xIPUbJ%& zso3TT;POZwd9~Syd|1 zc*;{(Qy8BW0G?(VWa7_luJXDr^cz=&%K-9(A2O6{YhQSUDFaGN)1aU|_ie78(K$;1wxdLsBN$)SKGvUs6)?>(fkc8@gP(D6yZ7-t(e>-38 zk7Q#2%xCCLF!JKjO=N7To5Qiq`gg+`haJCc#@_mBbLGH>f(Edo>AFWvL)=?nea-Awp?|c;0mVA1)HvjD{<5q%kQ- z{;bVOC~HjnK%d9iP8kWIK%!q<+Fx*A4$$Fzs|9M}llN1LL|i<>Szw8MXC9en&*iQ! zuuID+l9EN0c1U3<^{P6IRVkCQxB;9CG@roKm_b`U5}C3V(+-Yp&nHUhNLScoeA!#m+s5+sG6G` z{Q1W}7{aPVTr-0I4fS~nr&0YLY#{NpI#50r5@l?)8kCgs&~A{hM4tN!f5Op>;mcqY zdIlvRt9P&4R^dw2`!=fc-$Q*QjIaJXsIOl)9Nyjx3zg@t8^)?4#Tx3hVAT9$ELcxpSNRZn{Ts!xNb)`F3wW(mNPgiD7C_nd3uPBlH|&+8MF57X(YH z*KfR(&Z_pE@=_YLLB1{a?VII7{#Q_br%dlWBwNP;aQD{%07%T#Bdw9TJFZll1PlN# zby9vk+!QuP0lr3h@gZTa<Upu^o}SUO&;$Fv+`P1$o<8YD)A5O7hVfHQwn}2t8vd*>xhqL?SwvQ~r;S;6_uOqEsKL{#}=wi^ywE*CqhS z89LrtUG&0E>sb6;iMLB^2cpK`)aOqOPJBOeaUk1-?wE#1_@4W!s{t8R67xVSD(Xw8 z1b#wQprye|MLS|v`|YJ$bC$O}kSxHQbK)psxG`iRPwM86+?{%)IbRQYR<%*=g(W=< zk&SzMfm26+)67aACzRtV0*9=@(={;1Yaw3)0ZfYrzM80fzP)4RJv_a>JetWm z&)0qQoG+)R=IpxrhX!O|!<*LcIuN~fL^x?bI^a_*Y}+4ktAYj0@tXv@4`opf8Utj8 z;yU+S4$sC+sWQblea?@~I2!9j_#fMO&YBxnQTacU6=~EL^Mcjt|BvcV4}d$H0XyE@!n}K zM}dD?Y+a(KX0o{tBe53U9sAbca_-BoKmZ(Y(Aa3MJiO~8QK2NPM3MW-9?H5m8(uCf zARWoZzXH`}0It*4bA7xhg(4j~+M=bC{ZSeD3?P3VNF8L!>U^VF;Z0cxaU&L7-hT5d zG559N|KtN_Dy`Rnr_jmJh|F$tRJaBX($iV9}2iuhcK0{4r^u9w=t za&=~PfjmFCE^ia|)ANvMM-;&#khjW0e!g0ff78|Iqrr_4CugSd;z0nRPBe77njoa)L!1 z!cXSX$RhgF^4a~+c1aLBVGH0vRy1N3%uzYJF7W&dtQ&pg3312$L{VRo{wYuzJHE9y z2gX-pu!I#a*y^Y*0`|K{V$1jjPuxV6jP>P3r`~_!1c7V^J$9=gsSL$5wfkJVbR18N zk(r6j=ArJNqI~y+1AV=J^MV!4051r5Hl}IVo<`O08j?u2B)Eb*Y~Dsx{e!qV(Uo^n zrK=R8k_cq$O7E#LfD>L#Z`b4odwCqY_x# zsp&sZ%WM=kOPSuG2VQI@&@L?a5}+1o%=Mp?3uKHxg}$y@@jMPrR5x#<)v0v(DjcN14!r<8FozRbihvO|_pC1v| z42o;r8g&yQEFeGv1ef6M?!nz1 z0)*h&xJw8DLU3u^-5LmP4Z+>r8h3YxJIPvmpZ%S)>)iYI&L63Q3bR_?`N|m2c*fft zf9i11o8_RF)o^;y%IXP)10q}tx1QmIkl{`UVoz5|0!`DkG!1<$c5;qzi+m2yNEl*! z&6D(ztnzwUR*fh)XxiuQ>3l>r@WD5IC)Beq`935L>BOd|)@|AQ{gKXy(zu zSTZ;4D|xSxa&^KvW-^4$?}rQVeNkB=9czE0orXiYfaleuUQ$HsAY%uTX9cS8B^o*4 zUwuzq8U~JhuF3d3Zr2?J<}*Ag2Z3pi#f3H}7C<;QU8f>*wxabAQ_y%nL4m3&~TmwoY~s7{6{lSq{m-0IQ3$2 zk^M9V1ybnF#2v=dG`*7UHJVH3W}SnTY=6YObNwqZ2ZW2smKvxQsc)j5;4&NDzko}? zmwfzDEixOLkW{OMfjRuIZ#U*j&%oeIu3i!EuLGCs`}+#cM}haZ^W(lql%z8#+DzB; zE)5>vg)Mn)x8&Gj924!acJoa`;p8sbdUjL2gj+jNLsA94eWPa`A-uLK@-=K_sn^Xh zGbP147&SiKi%3+XRh=v@nj zhX&mm!K0JzBoyT}ZX_v2`)vkY$W&_`H!wMe=ZI_?m{rw#aQhDq%Igs>969H^fP>rrGxZo5)X~~T>vaycDQFEspb2os(3~M?_ zry07^CrX>8lx5#xOdl|vm3AE&!=?{khU&Qua6?P9Q&j8GTa$%`Sc=mH6d3g zyjR2gOn)0zhcW!whwesJpJ<6?8%ElUu$kF=D-Uzc$ z(kC!XV%V@&E}+82S3iwOtxtn%YK+5Ml{Xd%5I?9TXpxvvw&ART`tsZ*=RA|n;BjpC zxJHz$Oj!4ikx;sF)pE&pT0xd@qO!RL2o+7^RkyC#2x#p)3a?LKSQ#G4D7d=w)Xc8O z=uCbswb-63O5qoHPFQUdhI)aSK~k>mq2uT-trzsAZP5)2{Z}L}Mf~EOnzvhYMQ)r6 zZx%>$we4{(E7r_&RTAD#hkA;5N)T+T1NxMuxHZqHVT2e7Jqhyl5cL| zHQ`Dy(V5{kXXtzGcp>UDmSccb0B|M$$oKVo-z(c ze=O>myO)!}^*SW*#O8Bg0MLR%v-~f~RpP9)Z_rk##mdzNb%BKIheWuH-=VscZ}bSp z8hVyBbwk{klRey&X7kB>8-5%fjEg1cNLj|jvMsVfN{R1kx$0d4X@TW zK!W!SsS|C+=T{@xrC_8P{oQZmGpqF%iA+mPkqcFRM<}|j(m+-^fxjF)_if17#zSzW zJI<@?!sSUYSNoUsg%`}FgVmcB>jn?|R0TfxD0l*W)RJ!A^C;ej0-gkSG;hyjTNqlxt`6+XJh%(q4v*8D&^9V** zI#{mX#mUpYEosQ+Hh-Ntq5EgbUCZgv{f!-OmxW@%6><|UI6zchQl_)W=dU5He5Jzj zL0l*Jgvh69-@h1u40ZC;TH2+yR%g$7$b|qTA)ctEjl0qA=IpmyOGQ$Z&2}q&5nO<% zv)G3CmxIaa58%xX%B<_eFV>s&*GWUhZZg`4g6Kes0kwu2Ij`%MV}tqiwX19r3nHo@ zw`J>oJKO0xFMqSmP+fUlmTuR%3qJ0)ZC%H9xBh(sCqrjXPwMqyeG{I`Cb`kLtyakN zUoG>@B_vIuswE6mU3YW_-t)}&_*PnHf`Wh;yKzn2T~0bISvpG;enx?C4P$v|VwW0F z(rKsMu9q}sD4_r>?3IS+Bxg`;rM7_GuWz9!2+v{06f z*1KwN4I2w@NQ5P;Lv3Fp^FHdb;VrK+9x4*zIfx}7K=d!Tc_O+asX>UPz*yj@YyN3Y z_Kra$ilrXniOVWJltL;0?1lTBAb0OXmp^^c6q|mxaki}F4VMKwOI^TV{73fZ0T1ad1r=Wrw&tky31`X`xXC1LZ{;XDX0> zxVt--5!}Zz#j@Mm7w$s+8P8L>aAn5f&nuqdml%e2d4NT7=56~z-c4Mn?^LBW>@K!K zT4>dahmO~IX*eHKu%{I2@9sZ+^P+OUPr2XhS^u7FL_&cg^f*v!E29Nc)n~e}r`-4# z3%~-LO0-iG@}_o`c7J+3Ae;?lX4AcnUS?(DyO^QY1_!i!L4Ny7D_VUIg%zWYAYq*;q|Db8U|{7 zauU&)gF%~uR3!Ds5$1KGxXruY3u2;x<2PZg%W>E`Y9evQ6QdZ`&x09nh>^~AAlAw_ zG1!zGGg|8@P7UI^SkzCOzrvLGopRE0>H%BG1|3of2^;zzy9W%W4{0^?J%q0U^?Gk! zx3LyZEs3cpZi>0p9#0jhqs&bI*f_-y3x&LMnvG3})EH;OBP4UIs++?GrspFnA>=nf z%&zU5c8l88RAjX&VijPuQMtv#{(cJ|fBE$0%S45^)#b)-ncyOhM6zJ`<}JJ(Ll?fL zmC#U#$*sI+QZ(M}Dc4zYR6xOFU4f0=hvOe+%W4k2#U7y^v?2kIV^b;j z`zNp~w5aMk_hQ%m!vId}A?%GiAI8_Syt?JtEnN9R%Q&ICjhKs7jTf|71v%7 zV9<8jk7`4?DZurOcz4KvAb4frkOf80+&HBHL2I!QXOy$smJuwTr+;FM*z`m!b`w{c zdS9xW$x8C-)c-7s0r@07l${NXo7m2`-EDf`mWV^Hom#pErna0@l=?Qr6o_n&n9j$~ zhwWY{eV!`Pk1@q$6ZF~bMBL z5fF_Yq9%g=Xs!qKL7=9LcV&T&@;{^l+BTaiJ?K+frlEJ1exA)5^$N`ko0 zFL(e4CT{BiOSzK3fm@pghr~}eWZI+(Wbr4*E7cwhXFLnOsNU^0jDJT$eJ8PbyqC7t z6m3L%h^eqN_~;-O1^s+MQ+<^Fr0r4E z_qJTpF@@j8iss|e2|N7*y{JBe!rN>T(UTSzx^J;GXlO0RF=+fjfgLfDYBd!`kN5nh zn?cSfLo$r{yg2$j6(SqYLqUD{8arqe>mGw~&}Qz6`s$SX2`n28uzCTXC|wf)x-o_R zeA)5gUGq>(z?FS4F#p)0X)XBacYH@2ZbK2+v{A?YWW)d(K4_-uEV;>4-m80q>8Gwz zT9>MR+QX=&5v5bd1Y~r%abxO5;yT=nk;5+NbWl>PMT)G4bJu!M^(t=-}KeEP>t z5>4O1p+?F?#8Lew-LLGCO=#ThIYBId21i(ff^#w1$)oz_P{@hu=n&6hz#1m0a*Dk~ zjm#GzD8i_`S8MI$J-tQR(*+m6$tgPRla!SkPgY}jXHQoOZDm}n>Ze7wN}9!XiBARZ z3%@0qWANybmzGkOMlC$5Zh(RAuogHf+H~^#1fVvP435s~8WHO^T02yO1*I<4x@0*K z6FI516w#`js(lgIT6}cgy5M3q_RYIXj|2SLVQ@0wS6my<@P5%&gwz+x7Zk1Nc?zyv zk~fiyj6d9HFJD#MX0uZ_=uE)F@}5`mF3qq1C|hGdg0KeccRZtH(nKv)Cuo%w^u}l= z08F8y%9sfU(M?1N(4-^#;5Kqol0A6>;2=s-x}Jw81ekFmro&276Nu!}9P85)(Yr1j z-8*!-|M){osY8YR$LVNNQoeSrmEq7)^u}`)eOPt88yTvWCMwVW{t`ux;eI1T$oJ=b zR9`bbn^Yo@`O}7Q2oghCQ1LFUuRnRXe&oW=+x3-f4>;7WfZ5j`rh&;tQr6*P90G#k)v%?=dw+qF39%?c z%j)fO9$Y^I+DZ*hDw(JX#)l(?-XKd+c4aMTd8J_f08uA)r3K5wogePWWO?njTCu4s zgoGc^HL50_atFUjMR;i)-+Z2%rcx~=+$+yiqE_8|utM*&`l*n&Z>E%&xeA@L|2ob*{U>&otCN=w3aVbc~TzAP)6V5XzN&t7CsAo6*Kty zg^XDUim`l2_L{}d!SWHBfiK)I!+$0;?zmxa-4CR>JVIaAW7xyaCxc6ed+K66kJ@r` zI2|coH2lyl<#a=>6901sJTu~HwkeSCaCobo0+Sr_KW0u^u{`e#Kc_0MD?JcTU_McJ zOHZv-+@2(2&ewF-9@k7knhvRnzVF%ZvWaq#%Ico&%CRu=RZTn z!aFddY{o!Q>l&|I)zJGm{NZPAiBTakw{-!VJknv|KGulfy z?6(34yexo`rLIZaBGSMlky61pa_?(%`oEqI)?0Rt-c#B|AZaeo&^H!5dVFBM16t(|GOIiYY-pcN+b=>YHskz zCsJ5bRMGz9O60ANQ~4U0SuLNXm_YjHvjjSO0MISqn#6tmV7KEg zD6m=fP#mNzb!Yy-p{%C_-An;lkSpg)%Y31%OuJrZ0f@5AU40J8b&BxC)v}M4o@>Te z(-&b9*u$fks|9k0O!1Inb*TK~<|rf4bz*sIvftByC?n)?**ZhHNaJxM152yXs0rF! z%j78Qa0M4(zH;TRKqi#lWpm3px9b_@)v8hqp6vVzyTi(LSEi16o#VW|A?q(a6`Ih} z$Ze^YF=kFVbtuVAIOW&g?c#z+IDz`=CE=jJi?(P~{exI5QF*)rPNqgG=2IX%v_Sh7 zX_L(H?t>9TeJwU7XETA+n=>{>^d{Cklmf5~LZNM}EM<=>tLLge>xJCD+#hP^+(gFs zfz7tNUWOk%^P_Z!K132JKq^9=8cH}8sm%E~!ksn%T!l6pJ#g^5ok*IO2~XmiVDbq( zj(ZC?5DG~yr{H*3$wKLwg7Sla&c$}Mhjt3#&Zx8|(}>puoDWZm_6HlydSZwNl-nwG zA^Q@GIX`_j@ zy+ii6;a4`~UNR`D=bYm~&pi5Rtq+a87RLe4Jt$}_`O82Hf=<+kJd zc?$oH9rk~H8>E4Q#oMc?iTv+WW~jB2nr@-hB~5s&iTWj6wgvd8V`k&tEf+7`PjT3G z8ktLGI?m_9-;3yKzbG9z@!pjp!l;d+(`}-Lio*t+?~XJ~>|QpuwijOsDx7f{Sbz(G z?I=LfYOKYowy3t0yNbW$apkdOPplj}-uQtEIcAPoHXP-B&5(?LJFkjCRSWhuI#(C7 zULd7I93G9$UJ}=KnARinl(pzZbU>*GpzGg-uK6OAx%%zV6%^?orFWoCc-~4y>m(9AViC^MpeO@+_Ip}jBXacDn;MMcRh&O=5j zSzgxX*?>kwO^gIx!kA>7A@pKqfFqP1%vu*-d4pT#s{dVY#+_+|e8UTzjY=xIYvG4Y*DT~HTu%@)y0vLHhcQ$QkS6CzQ5y=tv z+mI}?Wq+V888keczhyg^?~kF^N|WwRT3y-8AKNB>ua*mzx)SZ*=&rY|P*=Y1zBKY} zkjxwF>7|iNqDwN}ot%r?Dvh_oqx4Y-l~zm8C>%56HLrj3dP?gzI(Pogd!S$$HR*X& zAJ7`0%xb2E^d|FTx!v4ZNC>DYs(gR{3TVTJQj}Y)Oi?nq>qt?m(#k;3B)`HMq(X{{Mbsk(~_(;I<>=Q>7eJd(Q;P8c`W7-Wxdp*}tdXp8Yq<^9b(Ew?1p z^F2bRB)hw@Tz}M(1Oi}*x%sOOt^~YNU=uG6Bmq>TIxk6)#@}Tqbi4o|Ng7ZtRDHZXM$H*@KO}8TRc3Xmq(yw1qwsnBgs+JNu->kjOMo1$X(#Hh zDigzNV6va+$Xhv*wR%)H*ChAtcT3 zo%ivzzED=^NP`_o^lbt$^V4R1UpOE7TWKKaaOXMmOYSxGo~s)qvzoyK=DHZq1SB{@ z<@=hV9E}Fl@8-&a{JQAUOpl_YDjWGhpuP0$Qy=fekuGHa)oP-q>Q%F;;F)A=o@gO+ zt1YUU*T&RxLywyf;E_W$W;t*>2e!hz1p~MS7otV0iZc3R&vYPio zv5Z#65y+^9IB>24r$B3@QSR-ZM&Bg5m^3-cPo6gV6hXj1%$&r&y+cn`5{kKHJdQaD z0Qx^K&bY|W&AwA0@j`<{j=J9V)Yf3Rp6~k`eG`n7$=0ZOoI55~C+LeX6J$}bWJ{m= z(Ildm%wX%%x?Z4E7>vd$51O7h!Nqm3d}IH2OvPd=m^B_hR=j|x`a;7gyuQbEvOXs@ zQmE!K?ULwiK>N2;)wS3?y^D#Xsg3U;1YZ}69UpFeYz}!PD)rw=*9AKnh5h>NiY#K@ z7(#6;X>?E(!wRH{?be0E{~G_0u*IEN3xj!F?0_WRe0nXqiteBPnshw8Sn(1!D^i?3 z35(g>wq^gUb}>v|^Oz2%&7`7EBY4}qkg$m^%OZdqjSkr8h^0txl{Dy(;lh-%ByfbU zfBn7!9uGKeLcOkVO0>`(?1B!vl(W)h%4c27GyD=iDy=}G69%&aIv6cFPJ>G#yJq4#9};;ny>&obZB4%?r(hi zofi(GzM#vs_fmh=27dGNv;(1V;QZJ(6b=kq{0g&5g%nq2vaxr4mqS4=am1ql3xPIi z@%qu&HSvQ5tq{QSNp%-aai7yL&8vT8P1W2Zbiqpe=zuC?&N(BqMz)}LiyWxdM6)MW z$RuxE-G%pp$Cwbd&a1j9(v{o>h0`7~PJJGhx_2Pg2nCQ?jyaQ!&C&*#&-wRa5s37F zgA;~(1BxCS`3H`ZEuR`Stk~#2DJ*hySZylbxoC1ED2O)<7^$z34_UX{u(p7Jm{z}b zXn=8-fgN|7e(Ltty8TH}iY`QD1v0|k?sAi;VMVZ~g#BJ6Yc&1NR_xpHA;ZTD@^b2) zo(Nk(76nVI>*z=j--KzWB;O|uEx$L86oKo!A3R%PQ6KM(WR$+-`m?>ZOF)kbIc6t6 zb3(#K^M%u>A>z1J7IF}=EY5v!=-RI2xqGHfDR?=fPcQLBqj%>>syhNJm;BxXAqo0+ z8>?OUK${@JlkP*dfo(V%4P7uO&^_8AB2GI)xI$D_Ty+P?o+I%kD+%sMd$ztUcycEq zI+gyy4HA-|MuL7CX-^uc5V1yMS0Zx=`^vkXg{2tX$K{e0yqXosO-%f^-PWmNlnG5Z z>rKX8yoV>*_-v0kAR(4L98P#>#~$yow6I{*mBwac;$bO{Yfj6{&g5xMUjyJ9mV|kC zdqIzv8%V=jXTSo5Vufc5p3RQp>sdd;P?T_msv$ zRT2jU1-)1ge{Ho@@6^6j>X6LQ7=3I>qht(sfqmI~J`L99X@NvpFZTLqMcMMeh-5t+ z@~oH2Q&AZgT)wgX@!evsa;{z#`R+V~hOH@crI~Y)kwdoZp=v3CXnv5^@&l0Up-VXM z6(ufE+Ha;xgHdFG@0PtW=+*BodX~xI21k#b;>hbYfu~DQTI(spBDTljpmE&s!RG51QL+U#Y z@6TO6nd-{^ZrixVRJ5gR*46J;A1mG>pNhEvD(d?xV|++880&q)YOPlUR+{Hdk>DCQ z-T@u#coH~7+JLWRGKc9^X#H!R(acr9zkFnu(F&Gi$B|KjsPoOT&EOmtofVJ_HZ`EL zV0Eu&2S?eRxk${253pQoCQGd(m1dLbrG#1)7k(>O(ch=*>z43oC1o-D&5GW58vyKf ze zVJ~whr$a!p*nne^m%zvFQ~+=+f_D}uUH5bpP8Y;h7gL(=uO~V|Uv{LWf}S*WA*BVr zLm?7%LYb2MZjh<&2Z8%FiKLl1=@b9+_p_3C{1cHzW@zqww*Dl){fR?c>K?y7 z?4&&wjC8-PDlMJr*`q-{Akjm%*&XMd;(Zis=0d!C-9spN&=p&IiQKB*l>L7E-u0o2 z23!8<{r*ytW%Wy$b5sPw927VD#RFe|9B)bUYAb>b(Ot}hJw#EaeWf?8`XKDDUGjqb zdfV*)1iUvxI1O-F^$kPstY9?#MRx5kB2@wjuC3zNVfLQw@{=YYWkFz94g!YGx>`>_jV?bI5OZRLbA!7_*o>2 zw&+Q|aC(qSJfzTYw3@nM2An9!X2fJJinB({yPd7fO(G@J%q-vF5RfAN#xDrecpSaM zt>&v(Ix=nUfAkh}o?i&mbsaBwax=14b((-V@78eu_Oc?(r|G__>0qk5l=eH$Q3 zcSGuhrM%drPygG^7y_ZDVgD>iboRKCy_ffRNf`C)K@(%^Jrf(6+>yLzRhHkmmU=6+ zNa~7?cGsRH@w*wjwr7_FV9Z93v3MQavwYfZ{+}bA&@tJ);{m+5ij3M*$i?k3#Jk9M zIhV&#z2|+}S>rVPHWb7MkaYkWty>>gD-QJRfEW14Qrh)63GEBIV2}`R9Uj58nDRi$&&`^{xhA9M}TY$GL*x87U4xb|<~3H1TEA$#u1mJCmfY0t9ZrO!+K z!q?~HiNwp_ouPlUWhFdvTWF#@!~)v#ieAvRBk3I0-~U*C51?4VQlm;< z_~POS4J*UueTS4ki8cm=-UMT&Kf(qg@vP1ZqY5M#8-(O3jKrxWV(F1|esY_qt5kiu z--mr0m1etBG;AYC{o!Q4#L}#X%eM~IL7n^Q^zeo6Ccd#{y5Vzc0ewY1zn=?`AvH>+k8?7QoO&&kzY#*&wPB%kZD`1UgYgESJl5OvpN*s&;_&hw$A zeXsR<(la_n9Dv5+aelUOz~?;hht4wp)&5z7Pnfvqf9E9U{^%XEPxLo@jA;I$=iKBy zC48(3Hd6TWkeh_JHy0$&i7Lb zGh&PhKrLTf0^-M<wrVcO%p(wc&Fh^wjmxR?J$D0^PjmOc0)S5F@h#c|csxqT1vh()5gJMmI;iSrv?#FQ z_NOdwj#M6=Nh_a6nWqY;4n&^chv}Ef4npXuENeAB=}*8giS=u8&xPu8kgb~s+Ach~ zuWA!DMRaQyMn*WAY^p<>@@~S=pG<@=YdP<$Kh87Vwuu%rO1XOsf>Wg4dR5T1$BOxQ zq%O`q%2XJgex5PNnRK!aD(3Enrk-qVzk>&9@O|F=eTs)+a0HR}gJ7V;!u_JtA~0D& zd`UxI&btyoU+$m^#2m48a6Y_rgM*6cQUn#-wJ3$;#X4{9Pmpg^W?f|pX__@?%JBn| zcjfbeQI`}%+@ZF@ZbsIkf8baYLb)uXKg?w6e=w8clQDh@DsGm&G%nB^u~TCp&r)Kd z59M{6IL!}2@v?K*2p9c@VGWN04GM^o|Filb2;+)Rz}%*Cwc zm%6NTdN|mIwM(VquHxcR{6MU%u=P`#H1KA?O|h}o9aQa_*L?pX>s;?&EP(J31(exh zrZKQ%IS60-q2kE7vm@;iRfjKybV*ze4|ey7A<`sSMsnIA7nWU=5=!<)@Zi|7Q9X-U z4ah3R3>t|JVdJn{Yo4OS9f&RY8jI*oef}5VdQB)dYIFGsTP(}T=5WUhC-k2VpmN;q z?4hYZ;{vOTjU}VxhIh>5lSK+;mia`lm>dWaFwrfr!HwoY3`1JeEn$SC$MnSw#nP9F zqNF&i0|)CS=_l8{B=fO6SoQ=mZS})}C{~#1HPw7nD$? z5FJ?nvAUESTQ|$qQ-&j>y9RM#+Avjp>7Ow@B>66H^SttMh)b56Fpq7PrQ!OrAcU3k zo5ZEd_B!c_lSuW4g@B&-2sixf9Ja1$KCpR3+Jb5$YDLTA1H5l=F5$Y&)}E|j$D<0B zFR2M%aeAwqR*GAnJd@V(i@%vThDz`feYGuZ5_Ci?t-R~xtPcms0ErXtyP5f?u2_Z^ zh1X3<<(1ATYSc1)r#tBV@YYrvJS^N4<4md+DoD)bmcR;VuwblKKgELEgRLt^LP;i$ zT(l!0DC^U8)jj$7G$JCTN(+c_IvxyDQ(J0N7MLsCTH-=acv4F69EwM`nx_*^S9vpl z`j@yo53gGV+Ab9vsj-Kw#c-^=%_*Gd&u(Cg-Q`?EyJ76L{mxYO{&VoQ9&9jqhE%s{ zPUou+Sby@Ysk@^kcb|j+3*PFNtZyyB`t${hy^4}zi6iDT7Y9rW_MFT}_($Wd$ME<* zcYI7}765nG*z!iQ^Eh4|gl$MB_ZWRWFq2YK8q-YzVja=*v@8#SCy3hv3weh+9;&{1 z4%1h@%nAxi4LkvIKcN@5?_^?0tX4k91eTvQ_9ml6cX7H&5!^4_4iE&wxuEFP9<`;$ zs-HZen869;^pVpD`_`}cPJ8BYwGGej7hZm%6q=hjsSai2`wtRR-m;K;{enKQ(>ztZ zDC^lqG3nSBZDc=v>ClBpx)Kf`8FoQxIR?x#Q3;(AXxzli7H7rYM%EmtNeA%qZxXZN@IOh+X6n7UzNUTD7kpL=_(Xg3K+3Ur z5{8+Q8l{mredGe`5bY26fv~{|e7vx=>aF#Kum?nQ&v^aWo%ux?oNB|qtN{VK5{UUH zzEJo}MdAC}agIabM&0RwsHe36kO);`2scFaP(x~LNejALUejd61r6bv<=gn2v&_Yw za_vSI3Ntq)_tTFz@7D-}rkp1^R0`hUne@TCL!0W$?oK8}+&Ihj7XeFJEFByRB%(#S zMNd$V-OlqgW}K8SLcEKu=Ly7wxsCn}Vj?3CLK~^9Ril3Ew!66OWcEX{*`;L?4~Csi zPR){<999$32P7opbqoPvCr%Hxh6=m?rSZxk>_SH=E8POIPfo4FF%~)Tc_wP$&?{XF z3Q0@sxeJ;O^6B7F*IB!{1s>5=mxhCKjs+P>(gY_@vPksIEb;JNiAj^wx8RWX+JBGm zcQS?L2L_gUK;j{C(%nHx@hhiymYcTwMO&1I$-y}CuDa*>wTD-xdlLI%+F|#|&aVze zB08&_C=BU^W{qF()z`0z8irnfm-->xB%XPj4X1J%v7Mf4UQI0F>SP zzj2t<^m$*3f9i^O;(O`1@x2Hq@&7>Rds>Px*Zr=Tp*+0BxQ5TZD<+jmci`fxw))Q@;+ivnW1C*opsb*`AC z*R3^H`yJ6;(mgK;lt|!ZpEO<>VPIFH>e@N%jLI{AqE+b(cPF-n%>ON=U0P{6F(RWG2 zr>jh2QlVvFAjF!64I~bYS*}yPC}-vRhPn)AW0YL4dbH4OC=-v>v(E17`8Rtv!kh`F z7VXTk+txAjNPW&tVYS$llpY(+yEiuTDRB`>ZN|)BNMAa1)&9KVP_C;_$3Lz3er?xv z=1^ul@_5H)(RCb!x6Mw?ZBG-5Mqni97NPQ8P@^<&k88xjcss7)BtV?|s^0#hBoua~ z;jP`2+-DHBeR#C<1|+=-(aA&CP7!h55$^!Dif?e8`hJ$3H`uG3TKa!VN@&yF2sPJ7 z2-`oDwC1Cu8gG{BK?!>MvQ|)YDLPqa$}<-==U8!5MrxvsgkZ7}W9_h$+g&bGaU1@u z+Q&YoC>%*gz0|xZqE9j*Vk0<(+vibVRrMKYaaKTZkFlSjq{eXUbs&;n%CcCVGL6xW z+~eB+1;8X6&@}OWxB+OV;EG_b3+IegcrjUmSsPEI;H9bOT<~tI3XQk^e?f`nPZU#? zhV7@=rXm;Z8?o46I4$Ld@F<}c$I*AQw^+(c)u6}DSHG_QN-?!Ss{Oy?ms+1SstIVM z2CJ9LfGCfsJb}gT=hA#gk@>IT*_^l(g=0!+8PQCNgT7WUa5+JCk#zQ$M^J zS_Ckl4}%Y5nF#YIBM?3mLI-fO9ncQ2*HOdA?JJz~jpe4Y}SgOgKPR z*f1?6Q_UQkE_b-^RaO5<|6R4l9|I)h7f=oBEnKMZIQ;9d-{r_2aH%87J>w(sBcVWD zZU~NXLY}ysvU>~W29B%;ldg7s&(q?Wd;`rMP-#o7cs0FCrvv&>aPe_ieb8>Ixwv_6 zrK615UIRTlqTXaA*4Mfn&Vv@6kdIRyS9^goTM-SFp}nSnm++Sj1yOQ~h{;ZCK`WY^ zHT*4q_ygTW!)reiAaW!eQA8RY{wkaOO^Q%jg}2)sQ5RA)3(lJWQ`ORz;M{bEugVPo zN$I>%FW!Y35^5&Up*TMMT2aHC+SyG^u5TH3l}Pe;o}e_c+n}+8A`v|k_sP9?AR$VR zZ1}+x0Xu=H;?Kq!P(!}4_$(1}Li8k0eh@2evzFZw#8~51HeZO@G-56VU z<&ISyB)${`=v7v=bFc}i^xMR$;|!Nk9uz^jd5Tpj+_!r zRw~+&)3*7yYyRo4R^Kde-ZBK4BDV!>0&!9KL9em_uKy%1*{kdRJ8>y_x+i-1$hX>M z;qW;^vru>@OeRvhd|;_I@Hz`2;BVX#z|0Dw2&$~~&d!!!qpB$Aq7rbvedP=sZQM+R zPETtF?}qIxx~6Otc+nq!TP3m>?aiI?KJ<*RH=86kjNB=(`MLjh+|pt0zu=Z>|KOHd z_Vh#~W7fSAj6dP{=I*lql_~V7jc}Bkm<9(W?RNB_%JH?~$;|oH1_0_}<*iD* zug<faXxa(F+63lDA8oEUG3(o=G{{ce!~l{AoT$Od!QM{N6R+^ zg0^QTd6B+0T*!mng5@`HiRIFNWA(&1!t4{Klld8pLq?Taf%+Qcyg>en&4D#^LO7?% z+m)2Tjg;3auYcw!S3|WFz!G#9o$%8>$m!fm`&Bvv-E>^PcleYnb0Zy3%I5=#tOS6% zH>dkhXpnm4D793U5A=~zbCPCzWj%p=eglBroWo+kZeW(ToMB#|(H)5!Sv();VRyi; zOqyY&v;wRvKG0uH#%#ELO?T~&vlC3BT@tHKq}<3RjbuINq?xe+krCL&A^lH*A7MyJ zG7$Jl4<7cH-`{f_7-Xn*qU{(A6UiI1w&u17txr!UJ8)mgJ@jUzc_;XPkd{}=%n0w6 zhrsM+(FYTqc~$kJrFsRB*rI)|5S|>4n#zpzQSe=PfL|OLJ_kX9HyneXbe4LrDv)RO zzH-2n-t_e;RIfPvR$HsArInSdNbSi>mn&LWpF)0nc*xDGQ0Z`_<1Vz&b0wWhfIDmE zsUr?mj*F*XbZFYUA4r&}+Aof6v~4J?lwK$Pa=af;#d^IG5bCq}=#|UX9;ZX5L>Ls^ zy+e3ML!tVW(D{hlrJ{9-#KFza`B9A7c>)XkWyrV;yE4&z;Jh+X!MmqEYQEPWkVi^J zyOv(`572nK#86OUo77SORz>0yWf0QKd=?HM7rD|LhwkN# z!WM@lMsstS1!8hRYbVtrfR#TOj^B74oM4JxW=VIribL=nco988GErcSD(t%bIuapD z!MdpFlVnLZQl&I1b=5Vj7n1_jPy<8~+|tLPtEHAn(Xx(vUa97Tamek?I_xvQop+cB-&0Qcj4 zDla^PBRQogIZ(%uzxexTr}ace@Q_oS;`>v=;FSxD<y+W;5%c!Z5{{7&rH}wAY6~ z#OUwmCB_JAvB5L2V|^IMQB}E0I4DYv+xdL$CIuOCxX)4acdUz8RmIrcjawsn`jZaZ zL7wuwvMk)}*|V#{9)(W-7%<9sBDzKMJX_kuJHSi4DqZjSYjokXW&4niS}wVa5lRY;0r^M@FgZ61~}&5x>WFT?j3&+H%!QTRF)a-~xv*l%<) zp!GspQORD%fj-LepICuF@SVJe1VB)ZEO@N3VFR6P{OhMALyZo1x<50MbCU-k)t+Ho z9z9E_ErbLR^9bOU;`Nw6iGfRq-c_-Md~c^RH1h7}7eKSvUt=SD_Dt7nYT^JfMV*0& zM=lRoI&TQIh4)mkXv8er{Z~4>8X0jcvW!APW%F=7M!0(Fvz6l=3z>bsnMon^CCg9j zp7GF{vEVqn3>bPb9)488xuI}*vvDO&11RCe{Gs$;-aC5nVvy80LC&_thpHN zrVejW@<%79hg5;8(aZl6xXfk`i~66uCE|N^5Mdv&t7`w6+ECW-ZO}vG?IHPaPV9DH zrx~_qhumP*njaAdJx)3+&NO=usyUD^*9kf(_g=8f7H1i|n$AgnJN}u!m`Kam`>(Zj z9(o{%F-!P!9uuNIOG@bfN4NB7HxXVC9u4|F&EGFM(Hi0W_^D6VWp_xc4=V_wU`rJsGjQ$O` zIPjdbs2|lgSu+nf!hU5&A$YbmV$?-WbbUt2_F2x;N9imi^26KTUyr1w?ZWHqdd??U z9NOVO1}Lgfh+_QUc2t(vQ(>pd_yznq`FF311%*DXgZA#+z~9&loqdRVk?dST01v>2^mL_)2?~l(DU=+J&$6YpnMhokNu* zm;sZ{%#eG^!%&XCFy2!Q16_EAi0Q}2qsTUR=ewlY*?OXyJL6w;CE6HE>-`+ARFJVX z@MIUc%%RbQFugP5sv*8Dl3kpC_)Nmtr|O|$dTbuY zPsw6lSt7g-p~?m2*#IW^Us25Rh9l?okOSJi_81L|hK`K3jTt$2pLc#ewe{zULnj*_ z*1#-k(AG}OQxj>V-g;U*dG7x5J)_k_`f2L} zzcMDMD;J`QmP`9r{&MvX(mM7@-LfN@pi$$ED|SLSDe0y!fMXr}uiPc+BJUcSIpC1C zUPaYpN@)2~h=(!E_?0kkZZ78^?(#dw6T9n3y3gxan8ObLz;AdoJkVi&kSs-IyKMh$ zoi#C*@zDk()JF+WXg$dHb@(@<+^}W>#>qAy8lID>eLmJA>=y_tNd}mr%-;{eU;0dY zs%k*f?JeClyvNthUPD$y?Bwsa#-MKL$_45q$TAybjw~05oVUuE!s@1BR|`7I_S;Df z?1}0DU)L=QOA0q`7(}M(ev7bO`I}QkxS!mRQX^XqKYh}}=XYnK{HI)%Pv+6DY%fv7 zQklH5aYdbY7J69Ke-Y}Ds1XE3_Y>^*))?0!YUP0Ui}AixY(b&>7&QCPO!umb3>A00 z*ArUZC$^Q5w2oA{%8=c&(o-v(7MOE6kF~R13cJ-+=2*V>K{bg0dQXO8=CD9x8PKkn zj4p9YJWrX8=bngChUdq|zgf%s-Q`eI9wXgaE!qO_HIMS&y5Dbdi;G7qd&=FaZJ=I3 z4?laV?M^Po^HsraIXrTd!4+HogSEs3&wl47ro@S*=XDj;$B^W(NlN`wa9a%}SR4rI zFaUVp-u4Oil)*J8Y1dA%ECi_T-b=m&Q5xE!VRNTku-j#Ir#g4d>W@4Ar>4~>y*#mv zRXu=uO>#;#Eg>sn{VQ3t>ydEyaE>rY1JH7VHD*8QDMe_g3AuRzhh^&M{HNn6CiW}3 z2%^mTS@LNeB^`ZTO`F*oq3@3DQv4rt5cxzuMT%Ivfh#M&!GWH{l!Tmt@@h_UT3TXa zIm<8O+YG|7G5z2WYLsbcijCbp`EyJT%=WnS7)`5vMNAc`9@{qI0Gewnl+ixMLf2D! zpiAfQeUJ|1X5;@GQTgyQUnnP70dj37qizn)kTAaue0TqCA5{;nbT(?@#Ep^h0QM-J z@w-t0O~syQzRdRWlK3?>->;Kg*%B|e#LY6Zj6l+0`MlIRt?P|k^-H#(mmFzO3^p#= z&wZK83etr!Nf&E}yc#wUiIFVC(pvs3HH{hBp(3Gu83VXs6N3rgd!v3{)NC_jpD_w} zbd9yW@_(Fh`EuwRO>t_=j4c%EJeTq!PIh|Dq*Q<79btq!&BIxMptgX^nM>N^JtD@H z<&4HkF+43emSD~(qBSgTipFC1%SPyBC_;tHyV0%6Jz6P=Nvn=#NAI~#s7!8w+yQ5-PS#0KnNDxB}j0$;KAKJSa8>c1P|`+9^BnM!QI{6S=eIX&@=zN zPt`rQcb)EA)nA(Lu&NewzV8_0`HkoKWigYw)ic71|59dd>-=YL5y{P&g@(n8`xQ(p zm590y`Pdg1RGI3z?Z?tcW5BdMrI;OW!cqh< zN|3{D;@P~Mp_&y9!7b!Gv2aC-Xl94y`b(%Wv#U}TCt`&e8>?FHk7uL9W`Bk5l0(o- z>-|m2wSd@CNB0-km)H70I<=&z%^=uV56RnFZeZc{t*6+2=gU5{10?bQlO5lxAzna; zFv9oY$2ELrGn5@;AWWVIGHBvA*7W^KN-Nt_Rq$?1oxfiPO$Qf&dzLj$y&dNZIm^wr zp%mMf)Fy{)@png3G7xRm%BJ?4liBr1$5na*V4{-kF8+T5FkzYAs{R*%Nd+7~zqhw1 zn$cVkJeP3k#Sk~DG^y+!cPNer+gpPJ;PNij=Af~My0)X&`O4LwniO)rss$9HTWaKW z{~3RvTaWkRDjxjQ`~M|pY0dO+&Qf}!vhk6UoaN^{%V;9%gnHUK0_FuXnQrzR^(=P> zeYeiQ{Z_ti&9_m&<1B~e)1S>R@PJ{>^9~iKO>UZ1|3y%y9R|Tp7_h-4Z1|8ok-g3N zi!;rXmbRQqc9dB^PPl-4HBi!cV)+9 zdv_7NT?=xPh5_Ekxn3@$QEdL>`k|$6wNsV2zKTqQl;34HCVXFK>sLjsBu|Qve`2by z>iQA|aPRt*Jx#)`986W_78YuND4VmN=P+9Qk2i7jq9G|*Q~%1T7MoMKUwj8K$LF$g zpaYY%dTyk%YYEl$SsV$tq|23dqx^EZ1Z6$VI*>c(mm#~fBD(5-o9axeYUcdwbh%qG z8)FXa-$nghGKh`T70jUeZe|2jP?A9m9Nz5Ea#Mw~X^Xl-POt?u&(WCfKxKRaSA)I! z)>#4t7~K|Q(nNgovw)kO{~ZtqLo_Dw)=@MWIJ4nb!<57>0(2_?EdX#UQjiu#LfHjY z=H%`UU{nZk_icXr|21Q^w?C*uz(f2Ti68j}CLq7~aB(i~VUdhU@26PdIAf`;7tYae zFCR8GSjGDsRM7M-AY$uz1!-95QTxk_4jS9$>AL_ltvzo0Xk|wd6r|&rv9QP)-|7Bo*WPl@>ucZ=_!0jWJj!L)?6Er57K(?-@(nf!UX2m?67cGAZJy6_ zL2IcAF+ZoBH;(|P+6jQ=&jPZ4cZJvhuyE5%Do=`8s1Lov;D1IejdFkeC&V&tv0r7# z7e3iIMOVXx?=<^(kRm}T-t?c$YIc2Cf+xO7@6r#gckljW?Um(CR!ucSE>jy|-SHPq z_auylus@q5=I;#PhiS)LeHZw4RDApB4`+*Ph&}!uU!ZDRK#{h%OJ+?BcW8*Ve!v&l zYa@9jDI%yMn`Yf}`$8wO_hT|+#L&{)8dtp3dRJ6bjLD`SFvG~YKSFV(*jo{y$anIsYF2hux!U$E`nS-O0fSPF_P!p#qS5aR>>sZ44_5{>6^adt zwKDuzrm=qqh{5WnWIP=uzfNYYHqj-uLra;D&UEEd6t)czrAG-+V)ye+a$(g zV(l79p9Vf&GE&MFY`3j?$`h3HvRR00-yhb>bgOm97RZp29E@YUqshOcO4%W}o2r~f z@j^XiFya$f-0pu`K)dM>To_8K^KH?K;@1#Ts+<7xD?8KXCd%a+Va(K5$x@$<-U$0x znzNsIu0x=hi*o95`IVj-&Iea!#MsakdmEmpq-X|1QQ5d`<1Haj;9`g8fo$!kN}6O(8(u)_KfPKyHgGEH>hE>-b*b! zq-9BYIY(U-${m7RT!z^4DlRu%zN0~8=N1GPUw3Bo#rc<^RTL9$8OWTz_VM)@SxXwq zO7;Mq4tPfm578*g^`vktYY^=u%PZ%qHI8U#0XBE|ix;u(0dVTpHvDaGQ+oejGm_zx z|Hq6Zu*Ib%hbECHU&kI89*GL`J#wbI)Z1J)M=4X&?zR>n+B!*jz!h7cs2yqk?p4c_ zSGzLdJYOQpEQM(H3#@zTY25p29l{CRng7{CnW+0az&f&Bp01in=$?jMb$Ik0ru0`^r|?qje!V;At~+&gG5?0yG`?d@l(35{ z2(Lc!$91P(ZX$TMHAEf{5H~}pA*y4ut@J#G*!^$Fv?@zVu;2e0+fc){(1o;bPgU=hCM1`K|Mg(+H@zdFPNb zB+fjO*9oktKzBG(8lB?N1@>JesX(L7)TV>hfhJ)m|YiTocxj|B#kMpo1S z?&x_dMR}u@(TNkq|Jjxa%8+blFi`U|P4D}USE zI0T%GYV26g2^a9QI@#T^?C|~r*(lSwx(Hg@ppExhi%@wH1m+ULgItcm7Jt3IKBZL5 zsAMe~GA#}rO^rdq-4Bd!^j=Znp9v@p9s^cOO^tH@=T?u&bF^c0Om;u#R0n}c+%cmzTfv!HGXG5 zH$#TJRnuY25^ys#z&I%38z7mm_W?mkM0|W(8>gXgCj>vd{74ZyX3eV-47wid?Jm)$ zfVRc-s(IYziRx;L-d-)cuBZ*|`fG6;J_6c*@NZn;x?F@h%fi)c^b1eWc}`dTy5KDf zePpQ}YMcHmxgKn6hQpPFlAn&Q^o-_I{rvYJUPn3St2`r{d!YhQ6;0C2@=0gc6Mlhw z#*^Zf1s1DjYQy1Nw3nnigu%>HK9$6c*Zs;iAbayhJVb(R<{ z!KAUAo3%z!Ph1uFl`**auiEFr=|Cox2@yZssYThe!r4$vzDJ#IHTaau%f6(4=7 zeEA|r+B)*m+PT%^UTC8`_VObKVLm|;sZJy9O@?bnBy{9%J33?1$Rb{aI!ZUeibp9t ztHf`6cPieY6-@L9WP9}>XKV#&BL{46`#v=<1RCG8>l8}0l>VVQ zW&%Zv6>4cEvCcAcss&8cnuqfI3ngT?S+*+pA5g-~fp2cgsDZ>OuH3q%lYn97os^U* zOO9!Hcq&Ku8ADB=3Ca2In(PWorvCyzJ)%CFs&>df!12szE(#Zz&#~YS`Etmz^HoGDfu>l89#3Mng!Gz*Dns z^yz7T?b8={98XT0tNp5{4{cUt5>=e{t#|)-Sn$R4jCUiorR9|zM~XjF*L!z)RJ#q` zCe!+FruAwMi{_`gdga#T*T)ss)~8C#7Ud02<8wX;m@(})y88b9h(a9?X#O8R#)_l) zX1+ub^Xu6V-DLhXlg)JL4_Fq;fF~(;Ny2!t&n{`sKeKsw$juk8R2e7Q{kS&@bu#>M zemIAbgAfJ1wfZx&=}g;@=a?SIpk8+qCSrgxKG|j&L#ryr;8Zyt*LZZjkC-4SP`$0N z7v80v2)f}fUqK8mVRqU*cbym*{dozt2{SLO7=#dwQ$Bie9A~Ayj?1}wCPK~}GfS7r zQPMzODe6`B=tp`o+@{RIt6d_~14-`Su)U>#k!krk7j}>!%gAm9!*3Wl-Jd>YEJAt; z#7Oh&#fj|)$Yy_6YQN!(bO#mF(en&`yW!XK0`8maRlg(oM7mM6zk^>Cg|C#(Q&b;t zr46|X6Na@^m%RpG_5!~9@L50cHZnd_O+DBBYV%A5XDS<~h`L#msZ+$i*p+!|5$t5O z@@NUL%^eC{t*j6pB2b>Y5YWtdsHiMHCkEO|pYlrv*@np`QdfZggdBR|G*?qq#Bw&>#ydqA`ii`B#D!(j;od|5$)Z@)x1lLI|MZzRTStW z_|1=^z9(ocbD$}*njEnRf$TfJ>xSo9AuPUGro^HmmBnea{^%mh%(rXCuN{aITT z*lp&yW}43YN}^1?#Hm7~>M1$9OB{)@*295hk95UsiW=P-mF`7*f(ce7E98`w)DiZa z{PXu12tNMMGN)VPjl=1)hxoPE zAmQ?H@{$1#IfyrwxvfCL$f3z?@tdr!xw%6HHCu#8E=!XYM7UAkho10+D{8gQw|jq( zV(Ll$h4I1TO$&PakI?<9k5|jiV)92lD0a0?$N3)>?F;rJKGZi$r-uo%(f3HqC~uM*l;=bo z<$Qh#!z6{12jxi6F6{x@+f7Rzw1z5uMK2HflUwKj^`tZG zVBX6}u)W=m0c#-ifRC?Vgj@Lsna*dMYI}RT4-mF3L;RsC8s`s?sw>C2jx!!-vqETc zM)ff^@BOs5`qO#hey~EWfcEU%O~ag23h$NP2}!16)L0Iv^|psY&KbqK#(p-+*4#EO zq-`OkvQqPD+B?ISx7B?;72QK?xBQEPuNI5Vq>q)jZmCS>Ri&Xy;pz$b`$fyWY8=?X6@|f#QtFowMHwRKCCQ{wVM3Iei4CV zWUGAUv(oR}U~U$3z3-vAUxjZ^s=ca_W2)>v~tBsWW28x12ZBN>5`w9 zjyLxEj+f*JpH|*{My^#N#tzVOd#e8XuYWZ`+1^f&T)c*?Nsgx1Q7~`5t4mY?GL@at z7I>Vf>&Zi$-sP#4@HqF_jg^$Eo^&?svSzeAjeMN!=vvT+LJ5W@QOE@N6n@Z_#)y(d zeb{D5IobIxY;C57p{{SA_>pmLhe``JqR#dzy1j77)`X*AmlHi$4b>|>h3vGuO_L^J zc5PZG2W{D#mVmWqZaT!v%(AEOA&ez7Rnu{3$7~ttYPEc(&?cjG*7#HDKmU*GoSjOZFTtw=u4vY9mQ zev0`hq()EMjI2i1r=DxPVr_Qb;Hz^HN|X+#xV-x9uMB*~Q{HN&jlx)=JK~J|(D($(W$-^LFm-Ya%t8*$kUp zK|YYLJd6Icc<#C;w(T&vTRjZlbXrB8>S6#*!UyyDB6iS(w{#q60HdZqctWw%gnGB! z2rpp2PdrsKL1*S^!LwUD^Rml9i_;6*yKMGx7Y~fh0ji4#^OIRo z(o>3%-wSLYQ?}gB*YS2oMA&TMrhBQ;is1#9d3=a0`8Hb z5u{kejycrkkITrKOAG1OnuOd5aQo~lHT}C=55s_)FKi(b<m?`M}>V(D)i4y5)Ai%PBypGNgdK96cbIJZ@b1_T=m22o4-a24pUmzgAC9VP*BcF-HzMQi!{p z1p)0S322;EK4BK;oQ6bAT@6(=QZ&}4?X`P7gzfwKu4qP$I*1BzkH6fhEbdkmni(gt zb>7R)@mPAkeK(T92y5vbAG`iIHQ!<*;*fbT4@#gl$an{>8_z;IX?ii$z7{r|-4}Fp zQt5F0q_GeGqO)pD-xtPHgRFPBmC<=&J!Xpkmh9=v@!tCh`TnOlj@c_cBMYgLPMLd2 z$6vBV*jS<5=eG4SlN=k|egr)exVdjWi|IUV+JVaLABlEyR=LoynQaM{V>qwM>j`hB z$NS*=BNgV&lcX|QcLliRlW!pgr!SdH_n`v9#|OU%2~npM_%5UO)Fo{A0UW4d(sf(5b+9u0Bmi`bIS3YTzy_Y}!Dyvvwst z>$SXXODsp?{MwR>$wG}euS?;gZRN3qa$;=S`9n(c8DB`B;=%sZm_RF>BP5<2*_!uZ zlCk#rp$SyQiKpQlPG3G_I|IPGxeds`1uMK9Q(Rxo(D^t5<%`SI8oF{wxdOwUMomy1 zL*N9`M*m*I!W4eF1@H7bBE1%FId*Ro)S4ybXvN@_RZhZdAU{@8A|be|FTJI(sRb=!y^!AVJqkns!f-6 zE0cs(s8sy-gvl-oJI^_P!Qqsdh`WsHVtV?Cf4S{F#_gmBndlwhU@eyHc)91+> zg`aJ{vA1c1e+2ojuVuXn`Ay5{3iiVAddoF?TUzhtIEEUZQUy%euyEmTj46%Soje>b zBJH5VA@YolC|CLq2slP8iVNhOiA(3(7d3UhV|;W7!}%zkDQvds+aHOYgRzI_F{L$^ zNyZsa&-iq_K2-_u%8gmBRek+NGrTJZKX9$0!E{5O#;Kdn!C7IhX?Fh9@7i8Z3e!cO``5C@GB4ews5d>a-{rLk~Q!s;so>)!A?^xVBB za@J)aXMuM;>TRq=d;X%Hp_~)f)RAZLGW~*(&fUfJ+wbhm=6ExFDl9HHhkegqGuHiR6=fN?IEfo5Gq8i>@U8 zVvG|Ycf4>8(|=`emRnS?`MXa(2fN=*1TK3ME5e-K+NOAfuBrLV%6wiNms}WlbaCsL zpJY6YO(xHGrxo2QN)1b8bmP>&rANDh)^Ri1Ib9C}o; zu_}JY7(~#Y01KM)wSSX7+}oMng+f{HKY*#f;?+ zQ6Gfv#3Nd0N)N`eUiNgP*=I;+_YxreYWNoJmIy-%_bo!J5?NAgDOU_tw@le7Wzam_vS@32uKmj{PqB2^DgO9+(J( zweHu z=V%YE^`sWxE(5#3&T$|^(~pbWK^y{`JkAo&*E8L=9;@KbiUSLRCo~C@T16B~7QmbP zok_UuOuEQQ`4G2xLcrMFEnn)TgNTB|oULDq52QCPpl>D##|RXOg^g!oHjByiSH7Q7 zIKka9Ssy0T-7O5Y(geNQvJWGIm7^&yZzuJ}zo6TOLiVVNrHn(!-X$FABIRYV)UjFj zpdC-*CU+aGXzkrfS?r}w!HEl4wI^tkj&i%awW8ix5m_o#slyXUHLPv`7L8uvjC=(0 zdY@$1>SwmoIz=OQA@f8L$pWw6y*c>E{dSq9cH>(~UdJHD-^ApZcvSoI-Z$LlrWM0l zMhb$j7I1;Tu<<$wk@OYV{jwte`FZ4}sltO+6<^}*#HXvQG~it+0foxO6a6(a#EpR{ z&tF!OJFU;Xd-Zz^_|;b^Bp)YU6TL41Nx3abqy31cKD9g>^eXrV%IhP@e{n}Rf?=wF zHVo~CVrfeIz4!lnK_ha5Uu6FqEC*)&j`H7FI6>HV|BZ!%#RWd+?+5<-2gm5^*Z&o! z`yT!J_5bhwK=co21qsYX2c_fQ!LJ2WfWk7SZuX;E7GViFI};@NxPwNml5>Y!?ND%* z{Att)iT;{YIgeO7Ssee&7MFjZeA^4AtZotLV&Adg!fQW>=c}yUup6gv!65+O(s$}7 zLtCBqF$3EUC#TlNEUr%F3UoHFU0=5glcEt=7c)TXur#$aBkB}aEa02*njK6=juu($ zhd1XtiM07wmh{$)x$IPFW^M5sRQKb5`lg`s*d{5Knv!i&65Y>Z9Kx*zcOfqQ@E$&Y zZBF=(G{)Gpd-Do|#Z}ojLxsFKYWJ1eQaZ2Gi85*NaGL`;bi9Dq$$LKDc#pseU^9R2 zPJq7l12%Af(y6!m#FPgz;4LfyyosOoyYkbd+Sh|{0-nwg;T=tnR;;4yuoCLECCgt9 zf20T%`-T$OX`h(m@3k`G>`UZ2-fK~?Ph|v2Kes5b|8&BrC&vogV+(otad?%wG9^f^ zguIS?XSeVwOFTg2e+(4WuNB+Z?f|(hgMBcAQ$T1OhHUpb9z3p46bWyO z6mE`KN{OoY7WRm!(r*Y2EFiXa)diODV3B-ysKy6(&&6? zS}*zt?qg(uBR6!;9Lpt6^J9?nYBIG00;GYP)9KFGd9A`gUwQC!#AgULM5M*UD(rEr%lM2M6AZ!Q*hY=^ zEs5qtKn&U~_SM-C7KaQzzZqqBK+k={ zH7&LP*TVdygFDW6vGiz&JhS`i61?q|YBolUT{5;-)}ASoOwgfX$7ehti5U?Ltymx0u}=+P{XdL?E;$f5*lBw{Yet-SFt&sD$c(64S zu{7T~%I~d3l|U_RnfEZJTJ}VuTJXEAV)GNn-gxr*!uzC;wmTs0d+5XlAwAnXJ8~IH zVY{2bcV<&LA=7Y?>>h2_hjJ=BM9@80%NE@epT3XH3GUZu3%5;*j`jAizAS6m z@ri!w<(QDI-<@q){_)hrgOxj$-HvtxW_B=D?ID%$Xf9NJTeBnyRDgZ1{k+hij z_8OQKNKzJ>9D0zK+0s#$L!cO6xVSWg=9X2|g2vSOS|>7uNZ%8bhtYhqVj*PuFBYH$ z4o|3ELokyrrH#J+7w(gUF<<2-@zyXDWccO6%)s2zq?)`{LVG?BFiyX6ol#(P{s~tr zIhC5Zp04YkxzasMs`on1TvjBCrX1|RpIEI#E# zNirFG7#LktRxV#P>Fd9?9%{JN8dNGC3C2TXbA5N8;c!`^RKPUHddizY?f6aF5M=0D z4)sKfINCV%WjOjUG$~QA-Ju*^IEHRS($o9_LIImJYTqz@ z7YdxO3cAzM6${7>M3aINfz9?Imsn&2Rb*J$KiDVVUjM9VXSn5#mK%mb@H#c#Lgq_Bp`{Me2`tTA^sqK5_%tbNmZ4+%n#HX?UCX%KhiR7h3b=RAU~P5r zuxtMxU^$fnCy*20k&UM~$|tni(czerJbj3q-Wn=WJ_4U`R?b#bu-(l;?5bD}J zzmelp^0d%vDKT1|zPMT#^yF$ylS{@z9pe~+!?}BzNu4C`(a=qN}0`Jv5 zp)9bw{k%`PnM-TLVQ{a0PQKx;?+S!E%Qb?tUGk=x;OZ*=2svbVb6Ra$NzWpKKEkWL zXl^`@2)VFSgZAY7nyw>kYsXj0roDuMu`Q3$pZ^fGq%r78+j@AKIs3E^1|6Nv!Yae!~UFsMg-Vs`b#(O18bxih5x1=QyMoW|Z)TowGg# zD&&h4_c(`_#Z(EMtu?is<-4{#U$!_` z#>i4$Z|IfSs?A(`%zaK9yoKb>v$@*_1>B!4+?7^4cBhU)2yn}kien?SS#pMC*P1X~ z(~Ao$vsOC_rB#M!y$&OjCVT&0;l|i5EAuNeCO4_{Y*>a{tYMSy#X*#34wo^FE*2G@ zVnOnYb=v#1zy;zy*S;<-sea}ueuWG?pc^}CWL9bOe9OSu$ju4V`#1d0nNY$vK1?3H z;mNA3@I7P2-byh$C;go}eXEDh>VT7aK}XZnAN60LPIBsp5or6sYEMR-m(*uK#GsK@ zRg1|)w#hn_Ri7%Ns3ub%`Nh(beB6a!yw86pt1>+?&fS|Gk?a|Un0|3@5lG)JHB6qL z5g|@-x{CxlV_~Z!Op(BEg=DAMl?lKRs*iqkHs=MGt5I-NhiVujB4L#&bM*D-!qlbmW?q z7|dL!g9F*|nv0>nfAd6-XfU#k;L(pf*qQ0JJs*eSc^eLGRN&!;LK%uBR*Fern^MV00ZaV{_j_MGr^ zvNu92vBu0fSnnY|acYUdHmAdt*+_{TMQ0~b8jU5b$jCs3YCc5#$wK+OLGQ}@i`pC! zY)!7`i$xJ%kZ*6`kQN#!Z6}n&`!(%U79qM72+}=ZDlj~e=_K?C6>3d{wl_M(%ayCp zl@mw$c7d1Ux;05??T+hgo^|($T242>zbLXnfm%eJ2#aT%Ns@;HhRcD+kKNi@r!Dl( zkg(DEJqc=AkCL%cqy(utGD1zYel&LEcGB!X2d{=vk&GQl0yQHr&_!tUH1nOVG^MSh zq>X@YyxuUZcuc|PYrWLf^^J_1d3dqNoY>PCXZ-$k9;L9s&sLn3CqW_Qvcr}V(W;bF66m^4>V~z>7ELW@y$>g!&X6_n? zc1G)UT28^HS|gseem4UOqw~W`m%$h{;zqBAGkHv}?xokCQ|vahlQc5@PKB2<3qaMM zwe^%#GZlZu(-QFNqzkvja8^0YE8%QOk7=DZrsju!O_w)H9Q${wam(n-L~1 zOu15kWfSAnU34+oWOwC@2Vxc?lC}8fslKt>FDZ4mwX%<|P)4sT9i*udE$0=8E%E0b zZ!&pbc71q)7*qQVHlmvaV<&41qG7RCrLKaJ;Zv|c`{xv=>K8TT37UDVc`1a1l)*cOpr+loJ3ut9o$>Gu74Om6Y+ z(T78<2VDJdxPJNF+TUdFXSvQycVGM6WC}QeEu2*86QqzoKr-08-dRM?Z=J0)C0M{~ zHWr}mNA(uiaY}xpt$V{gE%wEX6r1=(_jYv?P4<<)D5ck<VDLKk~yXGYur55$NpTMf&{G><4@)9 z<%2h@zirt+TF45sKF{(^bJp9k^UXwoz7KzNyy#M5EMPyp@)HeN%qejj5v{O3aE!;D z%S%dfk9ofkIXUi`nN5umBJq`zIPLI$L>O!@*~P;}>SyE|1q|7q3=9>5DUS!>Vmi~Q z8B5})%0qxl1V!FajA-D(lKm$2UA($NjzXQ%48NJ0a|i0I-*G5CVi{vOt_J;TyNPtG zJK@RGKoX;Y&i3|IG2*dhYm|E4E@vraYe;}>hAr=wvUlj2mELxiHb%3Z(wTP-P3!w+ zm?DtqJkVzLjdB>wX+=HA2h+)p-5t+Xy4{7YH)Z3!Y#gD8+nn%}D|M>oGM5#0Uf{F{ zSX`f+T*2q0j-3~sExg}ZtQ*4U6u60j_UL4`PDAF^;s*1UR#-f^4hxM|a(%ye5IJPl zJhz+2Lkeh%`x|a8h%=ZEfW$}ts%y#lQu7zRCA9ldh;(4Yxdr2aHy01d- zXG=&Z#CKb(V_t>RM}pv{M>rz4iF2u;H()G#S0XxzGzd|f5a zujQ(O_L?b6k%gjq5bOAQEJw)bcV@(d=Iq$X&VuKs$KNN7#4hJfT6e3*l0l4fNwW%O z7=lfD2P2baY_U%Kf?0&NLqwT9R*1$WX8PvVHoq)jLIm>9l;dk58{Zkw?(#@q8@67M7tnMk&xq_g$$jBM9`{{{W0{h@YzK4XLCCMtu2; zy2A8mL)KF<(u7y`3z2OB%URV<06flp3jO2lrdc*$SkA#l2`jlqB8fK>dB1Ib5F*$f zE_lc6^b*{SjAQiI)L8OsVMz-(Vl=B#mrKBTs)(I-&t)ZPa3{;-V*0Bn=pFK07$uiw zg``O7z$<8;1W)9>QNAro5>@?Pd0X8K`V+r>yYv2f23Boz{^@MSqNzYwgMReNqoTP+8R?cPyq>Y{)yzd$oR9w2*U%kQI2#=PH44l7P;LM5zs;3SE@X zZK4}mTJ(*&!N#ec*<3r}swBryzi!htcP*>+LsDHUS*jzeB_r??seWpFgB<6yBYnhZVMF%5ZG#DG z5Pc@v&67T>2BNU>-+HBzI=*{7a|sA)>fHqO$^AImjC_!wjIwziyUgWUKnN@yObt6K z6QV7(H=FsEnq2P1tU#Y6G5KmRwVSOw&VD{-^5KmK7Az9s%biu$5m*X0{%U&p20-K; z(ocgJ(iix?8k)IDSLt9GyW4A!r!?(8Cc$x=SO=E`sC)6UJe)cKiXp9C+dPq^=aK~h z*Pm5OoK;F@c9U~gnHhnt3FqlWz&sv;bijl&hr*c5Z{t{(;AZ*MS73q{A=Oxry*^zK zUS3i{OH<6`EhgL!=x5UzLUb02;K$b6!tD%2YdD5kzbN|4$L%(-jm0%-?`U`*wW9N% z%+p~MH$rOWPip-tIdCpVwHxwJJ3pE-3}H;O{_!1NVD?~c8db``Z^F{M+X zKAC(49oM|ON^;y%+MyNu(G&71Uj~fuqf;MI-_kI8kWn;{c88TlkW{hmM(g=k6Oac6krY|J~93mpCcjmlA6PO$Xsd)*BhyTGN7{MhT5ANO5g(FF<83|tVvyZ zWT71vn$@j-5H%Y~Xl zUX=ak!p3*Y#)=KtL82v$6;qmi$|;K-LRrUKc9lQnvKsKj<<7713eF|Zt54F@Ti59% z2M&lPIHSf5L!VKD8q&rR-@N*z{xwK~yyN21+oNrj9PJRL6-6h!m0JBQ9z4>h2brjw zWR4+jYdw6(LV0%ov^Ii^Sx+_nq1u)0`3-ke1g@`+xOAt08qJ9tK|+-DgSix|Awi!% z$cbpnD#%)9dwZ#)e7>{sI7|0Hun=I$F*CIoB!{sv)ugUw(4AX?6nVj!(=&$t`FS5$ z`vGNV7@jy}QMTRVXw$0vdD`>cHBu}*vV=(2cx6!FLsc4ix$R5x!+tMKF#!l;CF5Y6 z-XV);>Ea9}u;bbj{O2mcWY+3~D0)m?-DmZbMDLeHRINs6JNV6K5kRjw>U$tyF0Z{l zs7d(od>tQCY7%1}A0)6yMORTaMqR>Ktf&`{!?%$yAgCM|H?VU*b)@u!MRyRlHbVi> za?ZMAGDJyZ`W9nU1Vt`-ygqIjhMEzQ#%rcLEcF}?FsFs=*BYJ?m z<$W>e9sl_GmL?_}l$pyJE2rhujB0sSvl8=1N&POQ`?llkW~cxu8M z+7b(wlgEfbBN2Z%25+OW1j`V>nLHi0Jyz*uq;SDTAHX>}TwiOAFOr*MI`e32|F%Vu z;pO%59v_Pmoz&h*44t=@b~Vk&iel}ahj}=Zhy%p(O-9!X+>8qhpSQB0$(5;YeRl)u z2ILf5%bjRYdr{*ytoCVD*ARv$!LwSw?U6{@%pCdt>(@1!5@Vx@oQ3% zu!yzxi{fczX#V{oANNda54fj(s#NH-G&VmKGgtZtv6B!RPyLX|EmVtilyd6s!02M* zwW6Q~0*}{MRU+sarb-8WBgR8b``&eny=uA#8X6BiIq~ZzZ_~^-3KC`^L(vq>Xx}w*d zh=WQrU^D^4@CXRZuLm!hwVc$a@x%h`I7eJ~Jc?U{7K{sWs;b-7e;BG)R2AFyGxO(~ z-xv5R*s3LSF3W$taWr|?#7fva!(=;mQyEac5St#qOk{=~x|AjJ>E`?70QreYZr*Hq z&d1OlI_?Y!5@^iG*AyJ7c(>gok%C7`!39~B4T~ZZjy(VDdnrQ(a-69N8G0s z2u##dfzXNlW_hm!wqVF3mV=&i<)Uw&50J(I47GWEa@!k!4sQSAL9uqf|6L$Y%lctd z^F!fRd3VMn4r8tRl;b{G+niWASLb4&n**+2FOP4kZXHdMWlG}~M9mhTmt#!5*uTn= zJC{+%eCJNl^5u}iTRO#wnd&aJ^1c71W)2F283LeEU{a9u(Q4ISh-SPscEvL<`OemN z|6BntZ0yQTOcI5SvUTM z7=s@Lc~B#@5U^fce@%#wZ>N73-@FUQr;e?Wj~%+&?5K;f3PU!DADc&>I8M$gOQJ)ldPYOM$hc)G#F*= z#r#~Q662!9=0yw)b;(u2LqNq@i`$F~d0tpln4Qd@Ysl0+pIOfk-TlpeY=o=G-q1>< z-mbC`Y!(^OXfpA~*^G?Nd>y8^qAF+QH@mUf&qBVwtKbi*?XHBE=Wi&HSV3PYRi3&^ z0L>8U`cX{Ab|tn&9QHmOzJI00hE_9h1Ydx}Mon0=J|d1V$kz0quXb*oPi`U5mh!Mc z8haU@)@yr}8dA^zAaQL1v4`yi$qfryF6PRhs7&GERehrFL_?V5vdHi-dwN81R@7Y8 z;{877zyeNFo*K4g%V<#+^Os;U$}esae`bNUavu=iu@1}u=8bT5kkEKnL%FfB*7$}E zdvbdE+NQ=G++u3ky=SNKdDPJ)Mx*xA@QETanQzON;QU#o5JaskE`2i;HIu#fL4%4J ztAR*yCueiQYL$62da}J^cLj%Ay_pFAHLDVRpDmec8#UMkpk9KiXPzk zeMdSO9A&MR)%E?jqE!%fdCd8{7E4^ez8xIh$dZQQa*3{AF&Ba|+zb3_5BVP z4P&Z3AvloCKNd@A7Yig|Klm4eI&2YtbQ8y*&(D1rQ*W zx_gT(N@Duid`GW|XSKbv(l(GTxnkjER`x*C7TFpZzJ|Tgz_gP2xvxcBztxFN9icVo z5m8oPqhWZ;s!|XOp4jbgrN~@2&!ok}!fkTp8cvIg00A=B4tRdWWhfUl|1dZ;U}=_4 z{;jjYW;;jjI5|O8Qh^Hnej(X&!y#}pnv~Z0 zi|?N`s9Q96w3v8{hNV`SHyg5e(W|a{H^e_1exB{kZ15hA2HqtNR_XaJ2b>)edAdy1 z^7>3^QdO{kdL#n}o!!kz%iYDjtIZmNWB$<5KDv(F1y#}SH{4zo;Q*BSO^LKD-Rp)C zY8!i)IlWud=1ed&Jls~lUkcmAD&WmLm=w~#EG%wn`Xe4rZTFkT*gyFVeivqkND&QLh%DgrnD!}B`bh0}kWXqhY3 zX@~x9t9N(34XfU)W-NE&Jp3%EnSE;s7AVl^Q+{5=s07wGRWJ+i>tqET|7}~W%Pa)Y z$;}L~ljdz#6h^})yymEp!H=G=&EI4Uj8ZRa&@%hRss41o^!T71vVz`{Dd zaUeFTH#;nb*2J#W=A6r8kxh$}AJ6wQAoKEKb&~*U0Pd4z2`{}o2({HbV633T3=zHE zu_WQ%@hC9#Tds;dB(}K7?7;N0kD@$Ot@Ppjijxtf<5gq8W;4%SRMbodI)`N)Nf$8! zTzbfv_xz|7bac^(!~!p*C9GBL!$6w}1kaIbz_9aO-! zIPtK5Vy3q+lW;UTz$R|Tb-7k^k|m4~yM{W3;iCEku2YS=2%MZF!}3^l5X?-X$sT5)z+sf2%PgT@MgnzEZp09G(r)Bn@P@ zSHW>HszM48kzhn4ZVhe!ND}vchyyb~3g{R!W39%;-B({USzpnJ@FBf4H;3+M$CM)(JCFnM9MFpEv!;@f9EOKz!WM2axxmlLuil>}vu9o+#D1}h#a8A09Y#c5&G|J+P3;t(9s!1HidMP|=V z!A>uON8J;~#nTs)x2AItapvIWF=`@|@rT2viOXsc5`2g5wlMda(VVgp+1-eyHSJNmVPD5I z;Y)k-nal!2kq!==BcCZAP$Dr}IAIP}eC-?jif!bp@6i2?i782xjF2wOJ)cc?*U!Q3 zAteXJ5QXOqzjoe07&1n|Nzzv66_8~AhcabCbHO=)9 zZi<+qib!NWn{H2LF-7$>9OC!hCwEylVsbad22TFCA`wBE_% zh^e?En+mL18s{xy5h{C4$<-4V8q3*fnEU-!|ErnVY2g@`I`rX30WT4a?ARy80pIuD zquQ@#B4eLBCZ13Zv%CPB!M~NU@`Sew^$Q`9<9eW;_3`I>@2?h+aqawk`K9` z6|XwpQrfH!o?K{NM`R#a9^2ZzVVHZf#yL$YlhAcy2PZiy zY!2$gN6y3A2%qPQ@P3mP=fRP~n$u3Kqn#=#s`W?ZwN^_{bBwJT>Qiv5Q1ShFqpy0R zYq1})&QxXQX33TRoncG5bV4lc)S~*2WAF-=`SErwjPTRKL80>VXeebvq4{5c*6!+v zbMZxIn}?@wEkOKXoYzP0;57Fs02?h}Z$2e{Tb&eJ);S8%5gA$`!8t~H1nlDgy9Qa1 zM;4X<0)A7gAOW|-*3Q0iy~488!r>8y>ND{3WjbC`USz#JBS=;_zc`CjC9=|#ls#Ns zR~mim*JX>JKXJe8zL2N?kj01PTEPwHO|u*7EwDWQL?RD>;KD2oHXic|R-r$DFxvY8 zkr!aTYA$Vf)g0xW0bR1N zt4b55%L{W?Jaz;R#WRxK0${h?^0&bL!aq;9mATp4&B%*M=k*snU?c2kN_y??xC`iu z*wT8LB=!QO`hKNy*L&XNnI^uI2^ZS-KggeU>~Xq#=tQU}#O)=`X7+w~%}k?u8S~|e zbvz#6kpATh&?@@{U=TNo$dn;4P4qI8<>6cYh-?E8e1W>@LJKSY|BJe}3TyLu*MDo2 z7Hy$G@#4kZ3GP}PiWPSauB8-O+#M3!-JKQ-?ry<@1&V86r{CYw{a@E!`(U5!oHJLL zcP8_^_w%{$xxMsIQ^jViyilo}nk}2IX0)${=_^iS?Y`Ggzis^655Co-CV6jG>b%wS z0llD;+PRTR0)XlF3-)?9l|2438ZqJiQm^e~DO?~K0TlCzLPt+(NZvNw1O}5ed`qBcWg`NJLiBu+6 ztK=!U-M3k&Fb8E?Ea?RHY=RYpmX zbqq5&tk=UIpg!^ThqzGtc)N#cMw3>$(Q1&$yS*_&ygtlJvy=Jh7FsVCkkw;zm~{1# zq$|SwTl6Q#*&bOz6*^l>LEGS*@+`G9J(h<%6Z7KMyKDSqGC_dcuyT(YIiC5rcVZFv>eKU=^G0={oA0y2@|8l_h<=0>t_Y~YORYm9#g zx$~|n%@987wNbf2$OA(tH;9V>QW^ z0D`UOS;fw6y(6HrxbQqL+hYn5udM?(5)StJ-Rm?NKF2z|3TNOP)#uH* zkqR(bn5)bR?@G50XunNV1rhSmr!lVOqT2A#^x{8N`WeTqfb(bv<|1Nu%&13NdEhVW z(StzCuMqVSW zLUBEFQ5Y9o7-3O_(?h%Q0$VI8+wT^rvVcT&xD)$5BtzsWU zvE{`nEAIRlyOV%6OGgp4C(owgPBuQG&82G53GSwO4bSNXO{hfq3d(mD)uxGwz{;FM?F zx&&v3*cy`ni6xdIG0vB)NSgBqxUW!(E%X>#^!YuH&+srW+4I0B0xwhut%H?}I`d&i zB_aRfNTnr#l#2V+d}kz9m`}bu{q@(?sl!pVh35I;!$c960H%Q~k>m$VQDUNa<(!yp z9P3hjpbA!#2 z`oDhtuUBsW`tTh2H2%vc2;KaXTZUNvHnXUvM3 zPQZmS^wN4T^JlIaVNbMf#j4;dUiN4wTwB`-8r4CJ?A69J&QzIuTaQ*&X% zX;zR;o1^}%(}>}Fa(`hBbw(~A{#7R@^>}76uvTpHv&O6oP5ndRra2moWE#`2N*Wzz z@P3VZ#jiw}spZ)IMF$HmhX?k?I*SibdMW16-W-0V4H3iJHrhtlH=zmLjS|8c1pomQ zFU$mDUjOc#D&1Tl3zWaz{^}Q6&oKY%bao;HOGoB{1`U_g?NcWDC|J4-apXsdU-#wD z_xfUPHgl7EYDn$4JwBVCB70#0!jJ96HAfu@LBTqEsD%V<^8UAumPkxB>mLKklSv8D zAL109H~Rt4?%TK?6Nm83I6|fKrN5&(1Uv?hbuRkQ@lR#w=1s{e+QyA4xk3_Ui1GR| zd80ZH;d#=|j7UIJJok-9=UXzoU$gg(QmfJwxbL|(u3s%tkxM(=Q*KUX-aZ{j$t*nE zh3sU7$CDos>Q9hJntCZ2_@`zzmg>xFxCjEXYQ%El=v|3|hKQU3Q#g@{UHqPdPOh=; z8zuCU*miQxLQsrFD}BOe77nCl49F`BKyFwU6Zegp1s_yp&4^}zp1Xqv9S|rY`;YV@ zf({M6dJXE$JY1v%;tM3VQi2&8eJeDO9&+0f9Sdq8}ttTnZwquw6}WTRA{R8}&C3 zlA@ufTYJG|NIo@NK~oS5KN%Sb_ip3QhxA6RJ5TQO>Ag~M*~sz&<(mS#&rxlS zNKyk&Uxms`tRi&I`Ge2%FquCal((99n3M=({khN8tGrKj(L*e|EY zNsV(nBfB# zSO)XL1l5xb*+AO68QGH>0Vs={;IXC7N}d-@?z5!#>rDN8>M&m+s!M|dXUewQ6{4t> zWm5m5(qOKx54Wbq$rf8)Y|oq3Fv&vY?1}HK&DMIo{aQED%RJ5p#ppaC^x*@))iWCr zGRCQ!qBbpejt=*AzK14?Hpd5sqmzS6AqO2D(exVT2dx?n2F{$27fNJ-{)HKBB?|uhNXUB$y@=?)~xWBZ!TQkdrimhwu;ZbFSgZa@h6eDV1{?Y-pWd* z%BmTCF270mZ4S(UyLM38zvE4qJC9>*2r8FxeG_Nwpr6y$`-(JI+O?7L=K{JOphpfzd3x!As>gw#_p4aZ{!oQ?=;=Sr;=UAh zD#SFtnSpQjG-%~#!@IKRt~#S4<_S_-2t=dJ&%9DXG+xJwx(e63ZBFU9=I7L#mb;4F zeOrY`l>dtDv*=IL+gB)&HLC%}6xyaZD%9pN)K&>JYRp(<@bmo@LmTG$2BI8>lBUDc z7!Ky6gre7fllVBOCst9GRWhOGQOJ4gzOzX6maOk8b?Y z1`RkHYV4N_Fv`&wlPevrpyd(QPd(^0&)x6{iymi)XLW<{I{9IC>)vVodEcCeg$Hyb zS(>7wWztfrEdEj{TlQg)m!AN~&0}td>Ulx^B zvZ1lL!j%g8%*DpKN|}{{qPE_)2YZ#s@mlR(<{xi?4a+Rl1h@SVMbq_~^*ux6}6M&O*N* zq8~7f*r_aL6rWWC_rV&}{C6j;&CVVzk9aa7jm4}Lu774S+co17{4DMaM-=@3VU@%S zAXzmU=6HL1Xjgv~)JSB!v`a4rLwAcpZfmUfQ9M+V8xv8cPO|uOp|SrLVP&Poyh~Y~ zqT1qur^ck=D%%yyzpYvYs9b&oVyx?@*JevpQ<{oB)W8WaVu%0y$1rAMgfMroYjL{@ zed*CdVjs?7L3wFVueW$SkMIUhkH~@VHzZSqL%3AyxEvquuY2{7;W2x*ywrME$2m9V z+XNZ^hoaV%>4T#yuAu7xQ?LWtVij}Ikl|)GW2lSA28V41NdXsVq4M-{!vfbEFvLJK z$lc=q09PBNr100~ms;~EokiRf1N0)hFR}jb#Hu8%$9!O3t}{WW@T(~@BIi=4OxZlYqu>urIP zA|rdW)l1t4Y!A9PzNLwd0Pbm!#BURcZRXHsB^Rmm&aZfTV^Oag_-~E3YQg3`G#*Dg z3jYg+itxsb)25&($z|3+Qw3_h`ysbjP2V58L|A5h;Ei*AUmdl?^CISzmPs)Oy$p3M z;}4XDdA5FZ$jOk6nGqQihXyU*_%KCH*X%*;zElg)*lr=k6V5+P)_Jf^leK&ybbox* zZU3&#v@1p>h$JfzV1UwGl14Ds&pVTGFK#*kvonO$)$WmaS+^r_XLxL)f6n^~a=rZY z)>}{YXNVW+*;uB8Z)Cc?-PYd5*Nk(m)VAh^@TmoaZ%p&C{U0*Ik{fSbd9qmX%byru z7J$gn0``_faIrEDaE5?YepX9Ut}L_P4-`rUInfeaf`baffj@bP9?O<5`X-oL!yGNv zhU5aMgO(9%*6h2Knw`v?cZx_4b(Fu|5z;rx-pZUvrEOUJsR1Zku&$Q~RGWJ@`(s9;`YZKn(d`F4*`s5CH4i{-1bMwl(DP z_WblrfF>VK5sLf;s|jPNT>L3%B3tEnmC_|@tVA2@VZtIh2`S7aB@hdyIUd(hJqw+9L&GB}$}fV_B3E7^1)r!XpRV}Y6&!G4H$!M% zA8-A{K=Lm&3XAz%JQ3PDt2BAR9JshPQ{kgqcnKfhmA|XUPD{*ml)P9gfxetep2a9j zIx?)yUunm>^xqmHV22!?+-QVc)UQAoCr{H4*eo@C8oZ2s_f<}cNgqicw{rS}qz2~lg-Kpr!A!1&v4Q9gs9v5 zmN+{5E>~-8R2clBWDg_yHY!qd6Q-5AaRn2e1i43L-0fAC)5goyH=AF(OsWht$)Gr2 z3vp@m-(D4{{spYax~tq!`3Z1U>=3H8W3#RQNBV)Vt_sGwJyl3~!*75Tg_}!oW_P_wP@;c)VH-MZVWFgQJkrOJ}nEjBn z$$$Rrzk{O_Dd!TE{(oBwk!RY+s}X1>$J=UY8R6aX2RDC>1i%{52w%s^Pb$2gR8u)eYJ7{C0Uo#8 zBh2=dN5jH*x^vv6w>d3Z+y@!8Ft0k=fX?`8Y-DqVYxnQ(Wq zW7JV?cS&GXOrY$^q&AX0johgDXlscsylV8NN9~7CEvzl>lRgdnWNN#56pKg0tJG#H zYBAipHmSdh=aCi3{=}b?rm0EYrIIFT4G|UNR3CDSEG*D67#k1)-p2b_#-( z+*c;fL&)@AlJ~m?>gwRsR7=T;YLeU-*(PB+kxLfZ{%1QdD*DiGW&F4$2Q5?S z#rNJsR9?TZmqoj+&nZ*K_vRUw%fcHkhDHDJwm`v%k7j)zxjydCf0dv}G`d-L>bXBb zzPPT=8Cb@AvFX~0GM#rxC@-fIxh^)HFR-x|Xwp!;%;Q;?|7UX0W$wXfTfa%!!KV zEh+muFT3?XQs1gzyU1;P%SgBW*0i$bqEUvr8loT45BZ@fD@Cm3NeX$$Rxkzul zirlBjzSGt{SS0|6b-Km3q~hbe4H~|(Tgl9si47<2%wXcVe7k~7{jRRs1CL!6A62MH z4k$Z9a|c$(gK_V0$JwLHlS1`I1H7_KUxJH1du~IhYN3WQ1*%QYAU^Q9zf#Y#<5SXN zjRsgFl?tFb;dhn)6&!{W&mlilvO8P1_JN$v|L)m!&8f|qCD(NL#e={KeNPVl_Go8# zfWYd_(R82!(lerv@W@x$N^aIJ>&%(!ET3RdWqBw49A$eR!&2m_sae&?#kn-R2dDT5 zE7$>RHmz5eu42zS|Nk{j`kcD7+y`CQo8xQuhsP6#o?b~~ht%)ZN@Q=lPBx~NRu)_a z+B*!jRLeODhCd>SQX7>2AWC`P`+QM1Qp-QnS{`QeA|WOi7S01rXAVY5H=7SMujY1T zOq=eEYUQq0BV&|w*?NpD4~=^WLPO+VVwU>$nZ$2SUg$aIt02KMjbbaMqXsFB^qTVQ zw%OI8U}M`OJQfzQ)m;xMn~u?!zdkAm2=<@L?D+kS?V*AU7}oMJ-id#6KwbPFfYPxv zakZ8|BiVbE!t$n*NG8EW%r~v7=$m+9v(z=vfOIL>RO-2P?l}=QubhDN>3mG9)GYgb zQh0S0dZ;+}Mf{zv%=3AIwIP0-{%Vf^ozvcME-c_>0J-Ifm(~k$Ikn4rfV3fHUUX*h z0Hdng3J`5!zU-_qggG6_QZ@MM85rs3*OJw8)B@@T-JJiCMt>nQ%*1*OntQ)YCIf`x zrE{gFU*wXzMTjjP4vab<8m)?07hj;r%kHO}W!0T>thyzlKU zMj$C|9r+TrLg;}5k!fto%Jfhn+34)P$O=Tz{%<$E+j)jZ@f1DUlfx=cE>>vdlqFd0 z;&&wqE9+TK-0S9i9H1=^N_a;x({ak!VBP)QSk!z={qYeY8^t7*z$ch`166@r1DQbs z&R8di!)1nvBl7eQ9dU4P;tapk1r7Ipcw9)JPdqu7IbWz^1#3CWjN|Wb!h1>vYFJ=P z*!J+2^BxJUSo^@UBd-^T?{uFkflQ_B#lv@YG6l2J6UtPK zW>FFxw{seO3!b(-rss=Z?`%u{x|}A7%}Y-wMBn1-?W7w{ zZ<_pvRF!G~eWB!%-`O*KQ=7Otv{q6UmbFGyS~AeD&N-x$AZ!PT!nHZ*4GJFI`(_Y! zu*|E-q$S+%UATlZA0ey3MG+?Y?)IDL_`ibd;G-;Ktoe(rqK zB*yW31f;%g={Vc_9r*l3zj}2`(&8KNDqlbuRiff2lR^j0G+pBu^`HF4T*%vAnv-Zx z5SB7_`im+Z=&9`chSp^Z210W!U16PuOYB~oYM|Em9hs%h&T}|8Uygr=^>1%v*JE*@ z6v@T4#Bm(jneZ}S5xo`PwXIb=`=v%MUiN=bp`V+wKaK4gTf>d*{*4MnHc;j7&wL%0 zNw11TeOR@(_}@WC859PwB1i*Y#`gnd1#z)il8X#q+nax`a;LfGNED@kcYs^bbV*z-t_A#z@*OfAGUWVhj z`M2~ifdw#3(9&^%ZD5S4OF57q&q!T|g}WBSr8Q^Wn(|dHmZ$EA@R;9eX`Wafta1E< z7t)Q2w71Cwcpw!m(65PAydkAX+HY zI_+atR8r0?B3#Y@Fj}V8DxPzW(C1d?Adstzz1;q z-4n;$w#O$9aOR=7tA~zZxe?IuB5(G1uj3a3yMpJBCff!zjVZ9>?uht9K9Qt9KlB>goqGEzT)B z=W2bqocT5f46FXXil4G(oGs0mtq&g=^<7qv*S0cYUINAp*q2nzl-kYY2BLyG0Pc>1 zgcgsz+nx?bOdpZ$v9*j>yG`?T#^o9e4WG;PI+po&1QGK~iF#y=Z%&K&K}Wt0<5gaG zN`5oDr`{v1RKk^8WkqUAhEb2BBj`R4qjuF_>n)VOQ)Q{IbZ%e2^4Dv$)uCqjwvVE| zBvgds*nr?MA#YwFx6wNfjr}(7wAx=fp@4fFTZ_xG9m9nT&S3X+(VLNv#AXPO`~$au zDUwWBeOB%B=6mr(*|fCwopoYaVs6`k^CzgTF7_f!+N2*{ zK%aYm9Nb;X;-c5k4i6QkseFJO+x|NXFxGY~#Kp?K*A;9!DZA@ng&C~?mxsEh~TN#c3aS3-`5vNIo1G-0L(*f_h0biRlg8}uNAwq$eq#z ziyY|bt1C2btoR{xd!HsmrEF;P<-YqS4T1aDeTeAZB|akWgw@%8Bkaxu4o%&q9cV zL!~vEV(7YR+LSDz{&YKg$2q&&NCnTcuivKjg3+(TfY#Tz6Z9Sq&efoL^>) zY?nPuUD%N|7FOF21+kKO0~x(ItrvTWlUdGYqME@z=G|_4N*VHzsCf?XJjC@RAJgAG zu#C3Ll);NwgjP_Y(Sht#IoOcLIFx6vhDegFx&`gZlZ(JH+sh8HObto`5#m z$nEK+WxIw4OIv_$lY`QI#GzR3`{5yMpWE5tkUQ%=7`&&`soBS zAGFqo6T^#?t<;bWc}?ICQChjo%!BR`_Zf8&afUb(+TjuMrZAo1fdl+=@RVq@g?I4IOo-7lj7ZU3f_+zZ1_i)69>JUWP4VR$!}emXZy zZZ#r3$a{Zxq{O-+;)YO5R*K!x)exBRoUQYin#WzFk8iH}%D81K;LU)Y>0-I*P;uNz z1-ITypZVx>k|phP`;GomnbHuXP88+1pycvRlor(Jm3j8*?Rv3uDS3_MVQII;NfX zNgTtAY9qC|k6X}9{ryV#qUG7HfR#e*0;a}+XM$d(us)U1tZ!n55l^<2bdkZtY$d9o zmz4I0k;Gc@HYR=&XF%3AdqU^cz=*o7x@k#0l*DS!^@z#__$k!i{9ZM>{Mk(Sn;MZ82P)GlX?FPC zcGWIA5vUa@RqhVcV}(9prPCO+rt)cKh8;{4-zq24!HA~58wK!V*-;M41kTfgAv&~G z=z@k$1seJ`6LZYiP_Do2N=@Uo>qu6`NAQtD$H_NOis*}b(gpG(8cAeF2 zo83o}E50QRi_;XiN&qtfDuqNDVV@xGKh>dRuAl%ecM}^|tr`I4nbs)(?Yc)t`)mmo zXxM;X2K0Wj4O`=9t-9AWf;8%p%^q*fBLk%eZ*PKU9{B=Udwj? zc6SaL{#oPpEXC|ru0pY2`tTU@tJg7u@$7gwy(}DVyS|MsT1;}tWyCe#gG%K+NQ(h# z;;b})k;oNH`(V8*r4FaxdFc3(1vD88KErw3)QY3BApTf=4zo)64nalM5kPy?eI_w> zd%OLHSFJ4L$>1Cr)4h%3*&dNt(MLCB!^vqo2Bi)`$qq_3nvg;y=Q=pvAyD9;Bm5W= z-XA=tx^jMD^awj649}Uov*=_&)(v)S!7uP5)fTDFNB?bCysn zvRTbr;RzS(kZijBZ42!R`qgabrQKs^BG|zZ{smtpT6zlWWo~kcL`~4d`tgS z*=_;ew$qh9%Xu3htxl~z$I-pFfthU~TIqp7E0tSz=|T4V$yXp{RyXYI;rJG_)Z{~__pH5WlWIm7wK$wj*n3bFCB_1QEZ%E6^VX{=Pa^$yU}e$49i4%)5}$-IV* zq;l3su!6|t45Ol_>-Q=H+GNXf9ro*)ZxzV+9@ZSyS&fL|lPPIgVUY()Ng{~GW%H0z z<$UXIu=4#uR9OVydVT4}OZae92pzQCeW5!^d9%Ax`~ISZi|j|Uv#!y_idlp3iQ!B; zvAqZYGs;cBonzD-onVBRi*;teB@rn4!}EN^C9~t|mit6~l4grL=D}tvQU!l0dK$rX z5*IV(eb^VFSzF}ZKblJ#;JJQYlzw3g;=j3g_;#UyELluk)ZmFy$Hhyn9*Daj8V?6E z;QWm(OwcCK#}MKBd&likH16zHoy8sQp3rXBm!;_9J)S}uyZ2f`q$@rw18OIr3D=KQ z_rSI9OEDyjhEC z$i}DidU|F4^5Gby<9T*_&wVC0lGyfgrX;d}{NdtZoIiVI8JCD2H|Y(YWjg!S7BA|u z9PZWJ6*P9=ds-0eeRY3VNy`i#AYh?py}N^S&I4TzR+U(xj^Of8U$d02Q9kr?RJ;$@ z8<2MI?mFc8v6aX7_{-swO^4?n8ko?UYMPHX>5U-oe#^`;^fsCs+dyT}1?3=_?{V)M z)_T=;s{8BTe$=y_3!0v-p0-vF>qxo*i|+TfE+K}zR({K*5p{KU1r)WP(L0xkuWfK6 z54xzhMq@kw`E8e_+#U)DK+*m1+HI{oa1~n8P?4$9*}5~vE1QEiblhTcKvg-hO0EKQ z92ujjmr=l9xlcb2R)1*|1lX^9xGyo}-VO9lE*0*Mm7ZQ0=fzM~f9m?iK+-0gi~e+mCBM2_ z_beX`$16*3_I^ z1YC2TM)S5NLTai>+;BTEp4q(qyg`MPH)P%$jT+xfs(=Q~oKh*dCBLr4>A)}~f=)Wt>9{BC9O<4&CJT&}`o4zkSRYdON#@l*CsQOwup z?!@oeY+W=gCi@7EY0zh6!bFg37Hr39JHVyu`)(o2Z`XEzB3()y(*|BWb}JBxtb(43 zXqb$_$qWd{>=)9P4~~5T$Bv(!+*rR>=NRbPJN`j0;i5f46Z~HHdVBNuN4rOBvxvja zYCSeIg(pC5`*#j2nQ!dY`j)kBwU_nF#ERy+7BiT!Iq*jzjhdcRro!Bp=s_Emq1B$f zh3bXk{e}w4WUmFn2wmbaY~yPG@?~U>Vl98xb0_>SHM-gzzMVoem*-bMI=s%6s9#~k z%jpag3;Sxkr(JotPN#vAp5EMkkB2%UGv*6k6u-?U5z3dyO*jhWSS2KPHOI{i6 z3s*l;q7B8H7{Ar(oN}LXe@_s4j1RIW_YIw_`5W+AIAr^^rj?xmiX1LmjWqk7Fm7yK=(+u?Cm$~je)zs@5=Ht8f zEy5o#oeO-ecFUZe81Agj))3MD(DXRu!a){_->|&@gTQ=27?J%~oc{ZHWA>k6qpvvr zlhS-a_@AMq-!T4@<`jGRAK9Z{KLq^;^(h)7_8%FgANv234*maZc;kWY%^0*NhJyy& zygoO>yXQS2@!Mk6-HJSn3{;`Nzr3&a&giJ-I2+WoKBFxbY;iMSFe)dEc$P{$c9bAA zSAj0NAWS>2j}fev`hdZ@*B#|(H%mUUESWWCRfl_TI{eY7jjHT0RT$-_tKbNl<$3WcX7dPl}@f-7Y z_&1em`7F$(-iY!s!B+2QzOv-^=4x6w{o5lB_KrvwZGh_Bfe~-YuvW&k^G4cCb)!Mt zaFuxtQuaOeygZjBbaC&QDcx|1>(%GE2*k?YvnoD~HjaDSz~i-& z)64rv+q2g|5feJKqY^eOdwq`mc;sLOxWjSMPlQ`m2UIqVRA|M28V2W)Q}Hg zIg)tx`;Q^AHdx=1|6|b%(XKK(WV8tMkTvKmsa~508^aire`DVB`gl3!^v~ny+Hy37 z+He2e#$s)dN+i^EO(PoF7*HVH!>az`G7qi*iQ*3u*9Z9Ip6Yl->vtIl8~7h@7oV)R zJpy7{4=<_k58jjX)wJ@&ruCe#UTTmE5lZf$iY;r~RdR^(z7C54POk~O(-8zs?jGVeSSJJQ zc+5WwfrM+cs0t_=G;oEK^fd1ABJ!Oc2UyBS)u1H-h=V>KBL=EtBrX9{LPNg~%o_uf z2(l+mQ(U&4TC>gG&5!~%vz7aHsvvS{FI-eyv_~nC*Bp4wHyf{Qr)|Py0W1DrTyjO! zaGn99QkZsbt_;nicQi;pF1kR`bE5{*I=zK&v}cx2kmuDL2{XIZ1t1bGBXaYwM7K(L ztdN5zHw7FWtzg)w-WoPA5xB^op?m@`0U=?B=lbwwuql*($^`SqReQ)jnHs4i zT+8|^P5qJ(aG|H;mCDFu;(5<3rD=0INi3aK{zWZ~8X)$b8D@RnUT9ly&YgypZ~gru zcWZh1ot#CSY%v_5SuCt6(IBGORnQwQ=}Wty;dhW#!T^R0D`rWfFqBUT9KT<{OlHog zn0T)^ozzX8(d0xH-n%<{E z*PTMzTj}y@K)3CZX5Vw!(3|5uWqXn_O?SRmPEmQ zHE*U-lc!Fb$EsCRcmbDHJtQNur+A@ZxE4xhdwU_<{LFBp?r=QCDJn)K4PuXX(T$b4 zHgRbUlg5w6<);v400ffL&eXYaXO!)h*rREjf?TSWf3ACIKojc8Wk>$Ai?x zq*L$O-@8ho>)Wv{;8T!c;Za5|O`{R0HiN-Y!JX{ka-fkZcSiBM@nph6vst#&fv~|< zR+`)Zw#<%xtuzrXsMSRIVtwO8i!Po{8Yt!KW=p`|Ro5J!g3*`S4&lm_r%lHbp`qdt ztdHLc_Jc6BKj$@xuAn7aD)dnH^Pl@uCz-<_eiADbI-WJ_Hd9|Uf0%N()zrq7`FY8u zrKP@Y)uwt}Cm!@G!85l2BeL}g9NfzePDLpFhK%EIznlxH>&>rX5UL?dsUr|E5(6<__1ON-m?R_E zxlqipdN-N60@0Uo@Y!mq+tZy?@waP!+~$B?;Zg;I@7*|bb*_F@=adAt6eE-@VUG`1 zML!Ya+_au+B5`pl%u`qP#J7euU zSZeD@{uyVv9i!;KF$54^KAaR}p}XkMAw})>Rn;Kv$=jQ6KwtV_vs!y`uSbF|6Pt{OaTZrxBBz+@@(AsmsMnrEE~ z71|H_{U_we*HgZ1C>^dD>1g!Gd&d#{CF`N_mc^+Ze9iQBqVkl<-Al$26NV4t;*sxYrmJ6^_X5&@j{(B5&` zd4$r$v+A=o^_8tYY^7_WhFd4UuS1G630LO=ZjU5*ezhXDd*?ZD5xD<@sfRZzHJ;hR zk8tyP zJF#zyd+)VqC`@^9ya|1L9vCfOwMVSIRSsHmEvfOm3+!#QufjHT5Shd^f+J3PRixpr zoZ`*v6Clroo%5r@BO|5NX~pIBxwIgo6Te+k>0d8Y=VW6vPUT;~WGd(Z2TuiuhELxx8S$+)1L5sagq%;6nv`N$xsA&|O}i z`6gL@gp6`Rsn)7rUG>V!{TniAnx+M!Nv>s?eZ6AdV4;Ffzoz$J`b#Uwg~HC~FgPaF zeL=};may0~)Z$qT`)CwtOZ(dPUL>bR{dOAHQmFb1yqovuyX@x|ZwjG!nsC5q&{z4K zcUxGN<`EBv6wOZsZx{L$70=+K>gKX`FPc-Yh$2|dM)}4xoqt0eKCbK&M$lJ5-9MJGtP=38sXB!9nRC-2){gFW&4-D0z9+ddAxCGjSFV-8F5mldZ!V~ zGXX8@xq={W)V9==4)EYOTV`_ zv*iyu-z5p2r+wLRZsf5b^MgXqfw2c+Vl_d0tc{Nb|IV9d|;KAilyu7hX7DVaeb zS!V7|oXsTlr}`GbfXGi2^>c~|<=q+<2}&B-BRkGs;vL3yGL3zbI~&Ewe(fTQc~^p> zi?#mcJ-O^{!ZAOHjXRzWXNxJl8rG{KYy0DJX6xZ{FH=2WnOlfCmZWQgY7T+$z*l#i z$&P2j`oU#>gY&lemc{RqWwHhM@bk{rdk{(kN~f3DWLZPzr!fBRQr}EoZB~WmQfLc= zL!t(h*I#+Yv*={OHOPE@h}&I)`an(Kopa<_@z36n-abwXdORxRl7ABYue~ABL_U(u z;z+MaS)@S}4&T5?{0RhdD$;IFn9^9(Hn+-H8!0iwTctzzklHi{YYkv8clvTs;yG+A zq6)$Ux~;mMVckE>#;*Q)GtIoPg;<)Ua}*q3oo26E8Y*P$$|uR3aJlKG3(NE#%g&+GG|gXf&;+CE;+nl_Zx$tekY` z4hx;ZHUL)_Wp(@+hF!I@9S-iH7t9}@iy*Fsx{r^mu1KhvtMRZ66;{E(i?kX88BP1= z`C5zj19=6LwrqZ$cOsdB8-uvH+RFjl=_59*j#-U#!g8s|3TpBre=$ztgHzAY-`#R4 zCOvxZX}6U7SnHv%^QXBMkEtB*-&uf)&j9=G)0B*a1VVm1)UaK9=+tsQ-k-mn{(WPm z!jcaEEs@KqkuMws%bw1^Z)s{Pb##GEDfgl7^4{Lu&0so!fDFZSKkHc${?D1)m8oMq z`vaeEqHh?4A6FUGEp|qlkG@T{`p+_QKV{@yR`F7)R96{`y_+BrH@gcofaW&v5+f@_ zH8HKq;>Ocoa&ht81^~a;#I&T~r=*kL{SR6?c6Xc{`IGTaxAb}p^K|F(NFy1D2YkCrYrAeTRK2Oe14fu=ig)?s-m!%|c79U_XR zN-8(4JwQ%#t7R0S6`(iG`-LT3qa){YNUY=_tJmpl)%T*kWboq<9W?q+|LUvlkV2o0 zzx{SOWJTv_Lz{c*G4ea$N}Y)2tBg7QFI~Lx6WJo>p3-A-iLKvv53KBgM4guxjUv#K z6=A!)U?#|=SnR!72* z6Vn1ieyquUSC!V;;+L4Vn`B<5AMj%`?G9|GvfQF}zJF?WtJ4-z>o?PxQ3gorF!eDf zfAT{YS)4iixikM9H^4Ldu+_3)uqWeSwnyYbED<|eKt!|Vay7S}xq^FIX~>jPyt&Wt zz+epQ{=!6-Qs~AoQKM(ot*)CtO@hk&oCTkUu_HWXF|BpBxV z`JClC$4_dGWM0q>J`2!4b8Px~uh(#wEOBh_(I%H>3>Cha<#t2_)8Q+&+ua<&go*mu ztf$L-Nx79+qBT8cc>-MKIP+R|N@+>j69x>#5E(kRo2oYBfrhncY zR>8S%Uu|oMLgqytx^4qj#cbeafw#K;Lk{ty^W;~t5n}^GjQ$LDtaV9RKfW`4fX^UB z^ak*o&yk-2)v)T2m~)F^EW;c}UxNG|DsY9 zkTcE%mQdZ?`^!^-?^>Bq_!OQA2(irFbiRG-Cy^@o@#Tm>&$jb(-!IMd8=cU##R=_v z&d#>{%Ztk5dEobm^mkH#?>8qba}%R28U<7|fT02gm$>}VV{LA=_S4DD;93`PY|y^* zL%i0pK#7+43+RK>Yy$;Vr)#OwU3iQ3SeTR0vmM4Uzt5apX%dRcg;-m#NwVbiBqX{x zS(PvJlgx6g)rRq)k|;}r*gkbDjXdMZy{YJyGMLiebxILQoAgoqf-00N*Misv{zqLB^|6=bgqvCA3wZRAyJb~aA+}%C6 zLvV-S?(PsExCNJn;O@}4ySqD$yF1O-d7k%q&zUvn{FpU!);F`()F0^XyZ3!})vjH; zu6^xYtkDo)%g;Dq;aK_7R!Jdmc%t3NRJ$+gf_!wfC6#w5jsQSn?$pqV>$P~AQ%+}; zmw&rAjU8Sfwv!80y<*3*W3FBBM+NL)=4Emf9Fm}U68&(Q>9ONA#Y=u#)b1lj!9*ws zvk9r=mABWQ?Qq@n{~72RRfRofV$wyqgYwJ*TWuowu&nxBH=2t+Ne$U%sH0+Qdv}hc!G(iv79i<6B=4G2v%!gTjW0(MZLOJ81AAb4>9=FQ z{Gz7VYtU<6-Iws!PqmudR6WI$yd#YIpDfP$;&KG@STNO;o)SMX#7Gwo-_%tczSh*O zG09E^s{4EELu`io19MVz|H2Pwv@IB<=9_K?9Y`RIbc1=_hqApzK})-+*k(>`f%_N{ zDTh?_&f0h3gR~BUidp`31&F49D89Qb^K*B-cafH$D-IP%4M2Su&-5fN<>@I7`kAK? zc_Q|NHCPJfHPNH9Q$r38o73o@-Uf{JCYb8Mp(jpoxajO=|Hw5j?=F!hE_%jJWHp<( z7z&^;)u~Gz1wHQ`@NiqEL11jB*}6rH!{^WE4tlrM*tG1;C2e&+wf!GgG*}qLrItFv z;;~}2$z#H>fWvg>?Ph}@Yk5xg+6T7(7*Gu_BfTKchUxif5jK{tEnJnS#@4<`F% z+>pY0qLJFY_iLOxquJhf^g?4R(*4gs;%X*Lx!lZ}!2XoH&0YCjMX|PG{Hzdn5pUSC z**Qrwt3HeOY%g#_{@3LEaOx)~kD{U;((6s+hr+)oru#lAJNFFd=uiRXzT-CYxakJl zLZ-ra`ZL2zhR2~|(TQ`$H8+1T1L;MYs6xAkBdTNitCns>^lKfB^JM3ZAA-VJB@y@-N7KQf|g(a%iej8TWlk=dseJgByslwnE8btPPc#m3^g+(S9dgPb-)K+lk?< z(B|yEN!|C@Jhf-u)&3w0-~IchgQ>`IaB z;Nr(NmcB_grDETxH2UivxP^v*idSI`6WP@XYqK(#%5?$g-r!l=>Mt26m!LrVkr7*_ zUNt{~*=OZ}z=9AG2Z$NRc{I~S4X> z^7W#f7Oj&C#)j%NX%m9OwB%GQ;&DpKDlQ?5o+R;(zYMn`er`UMG4pfME_gWZG?T>I zH~15|X|fheH~U4gZW(ScmHZj^4T!7yrDgonIfQvI5&YqCmlUYUx2h7~YB(HBhFT*a z&66>3?la0n`^T{151?9Y|Jiy>v<*kZl?=LLoPQ}MagS#P70A7_1429Dq&+q5<>iro z1~{BtC$sw>zFnAGvu2Mr?g#d-m9Jc?`^SinUOVkM7M$3svfiNY?A)a44e>sul>c{R z+n4(f;E6F3`%lUY$xFL}^=LIGm~c-6qirh7+42#edwyQ6Xe_41Ujz?i$2QuxW=0<@P=zNx^5vF6+$*!jx7;+q=?&IP(ZD6<`<+yP({a_O58 zFku=lXI3Y0aLQuDsQ&cwSR4d}EC;{!5YG9$LLpBHMYWgMq zul|Mt&9eF&N}LvqG!)0ZiQtf75b!O|ZJB0&zuyJTq75cRh0B-CBhOxL_RU>%?-n9c zELy05b#D?g%rvzaO%F*~^v-#ht3RxRDQ2#R@Ne@vic>yG7c^lUWf8lGbul(Ky&BES ziz@#nqH*7-V59Shqw8V(5BhE1U-Vlq2>rG^>ks|*%B-<|oI{268&j;LIV#b*^Y(X# z`|a<5^{iNCALoXKg2uS85SCMN{P&B^`@w%Dr1DDwAh19c; zVx?fBnF-v88JpunDeo%Mk5>z%C)v}wLj4E4xG2Vwkm-GfL-XzCzvK{4Po>RCXGRDe@kU<<2jLE zNG&pwuRD^_V+!)ZX^Xd>hE{7(NjH*QXr{PbHLdwnF@MHL9>jff#8u3rn{QKKGlXUx zx6z=@hPJy1qxfU+^+s`4e{Z;#IeSu?Irncp_2dQo;blj`ODHGb*VZ}G!>t36TJ5l_7+}n#!73CZ4xw z^)f!^QEj)HdXK#rkdX^WBD}pWOJP_CI4(~46Em=<-*uA20eRUUQfJF|ek%`*$>nF9 zTbcwz`~Hyb7VAMpMILN8hOtk;$5RQ$A1ex%{2?ESzqs%wQ9sy1+wh(^)wHx6Wp> zqmti?;3{Rg+6|9fa!}rt1D4a3?Xy~ODi0L1000*;VE_*i}lSIs}8Vz-0(}(1%ml_VGBLCVZ!10C7qn z(FriWxN3Nw+tb_Xm^!D&o-0$X`uA!t7nIJFyG_4L}) z&V268!7D|dHZNbBeY#f`m5PgTq2B5G*oZlOo;?FC1D=+bn}5EX{)_7y6!&kguf5Cv ziR%l1uWPwgS$*tPsB&1-LfP@Hs<=@vk{U1_8;lzrf-|ndDzISH^2PapR;htl(>tWk zM9^T+wbZB}ka%cL1q5S{h>PWLz|eb&n*aNkHH&U(-e*&A`Ml_kV)z0YpSH* zNKG4GQ~Q;lA^P#eX?QJhnk}FY?#apZDiX5?!M$|vYyfPh<|tXGO0KWN$iU2JbH8x) zhw6LA{hz76Lx>OXPdWN^qfK|dW{n2!*ZDh>T!Y#8!ON`NN2S^aKO`M4op&Oa7;ceL zb!T$ovo`hWjp5Qwu*c=HyY!VD;scUP_yN?{+wb$}z+BtZI1sgZZQJp8fp_o9~)- zt+lU~d+S%~A#HXYCZn+#QI6NXwlCpFPYU)Bd~{5hJ@J_LcqN6MnuN*oL8jjqbTwV1 z)l587g}(*y3xdZ`aCn&5mTm*zNe;FoI7a#018mW%4>tx^5*)WfnZ`U(4R9;2&!2b( zx?=CzN41#5@rbluuL0Y?Q^TmaAkn#*k^8}v+{LfI3a^9x`Tc0w!)H(i+7WD;NF5KZ zAyk;{kb#W;?OamXaUxgmxG}qpNXXfhJ!z1gye!hX`sGPymJ;2B*7UmglD4AZ#J(GG zX9SI^lwmh6Jk5fY$>qq(br3Y5ZZvl%j+4ysfln>rlv~j=w`cmqGZnWPcL~1!l;q|> z5|cJWMw+wcE?Lr2A~`*l*O9nUeE=Nq<+=cwdDj*WEb>#F;=yZc>=!K>xn&MJmM9oL zb@dNUkzbVKxhWXTEnGs%l;9RQTTuhn{sagi059v!*$OL!Yi1k zKh4yK*Q2<7Q|Eps145yYAkMrCreR5vvE)(e$AJG;U_884m^ygD;G+z5^3d}V&AS^d z&}w<{Tl_d-ztY06EG`NOfE<(yHj6OdrK<6}S@(4n-2|CJXgHAB>Z$j};Rdi!owk;W zV5>R4|7tH2E2CqHSP)JVnEJMLjX*KiHHw$|Vm~h;?T$zOZeTUdhpbhkC#U}XWk7r^KHxShb84U?a{NBbGLoNiJ}x@@HTpx*Ee7weS)NI zrS@$B+G`7!qnOKn?-j|Q<;I)k>v;j)+&QEbYDh{`60hBJ=X$BAWGsT^jy#c?~-{pteIZ5rj%ce?H5K2lAAEij6@)=d|K z274rV$o+BgS^D7I$}C~%*c@F&#`738jn$4Tvof8&VM6|k$M^0B_FWGT`rAAA(Kw_BFjqABg9sDkEnxO|{PZxyV9(toi@Mt zUhK*{S{BI1N^PoW*}%v==Q1RUDPBSnn*I zvrXSTuQ6*@L7a@#hhp>69|l_G^8aQ}-dlB~^UF zjaOn25OUS2!TO1NAty_}V9)a(hk-x3E{TQq8@l@Yj;7&k||%ppVRLPFRSBPpzx;*e|+ z1K%Ire-Ee%BqSG zMk0BdEDoG=zg*^$dyf?(SQEg&9gx~d#LJdg+pJus1DK5rTE0DMn$;2 zKL#@IjWn~rkxw}lX-SnJ)So(=TTV(y%2$xfU*#6;h4g}q7*gcsk|;#eoce$)b#?tx z;>l8T0Mza@5@&%Oz9uySb(d#GV*wwg{HlQWsg# z7MoEPpG$V4CqRxv?e!cKx{2KyKlALQSRT=2mc<|xWj7;?kN5asHmMw->3Lk!CYKM1 z)OVmHaO&X`=*Y4H&&(H(=9_as`w)pmT9p%b;hwBMwlc)2M|o50_Q(Zrfp zAg~ullh|F^#!WNPBYv0F0{Oa}T;7u0P|NZB=w;@`OD?DMJ!c7ocDq4Np60wWd^fCQ zAn)tDpC-O8@}q+>C9t<;vs*k!f9fQpx4UBuHCi z!bFx^jWe`qqQ(5;6gQ+Nj>P#YzBr}fUWrBV`OOZ@n~vnKUtv3FbZ*KBS08GN>sV|@ zTU1bV!=c_{at#+sx=8unyU#Ewt?KAig@Pd z1XO=z1VG5J@41;%D9NQxeR7E1=KEu}{#-G&!3Q}R5z;vO8)2MgEW8nFmS4tU&mJM) zrHcA2j?*Fz|JUbxoPRuk+;@Myc=P7#$Ijma|N8%pVBbwF4M8y7=S#5{b+u^nh5uSQ zF^TXhcJkFZgXs@%@4uvnksz&+K>rcr=a_E!wf{S737f~A0Ab62@%W6C%>Udw=0D&2 ze^chdKk70&(yRIp7Xb42en7$72toL__$aygA_&keS!Y^hs(DgsI`d%zV_0E`D3Rf@&5hNz!leAUbNl$i zc&$(+?;or5-Et_Y>RAef`?6B~=&I(nIVoF%Y*TRx5h^rVnx?X3)Q` z_~7zk|6a_qK#??;JK)@XCF}j^kg-8*2*u}fI@J=@5;f{N>VhmqZ9C3VyGG?N8;)GG z;k`mYF*uW|&5$e-j&8emP?3Yn=5d=nU`CUAOlpWf zD?WkKWZo}Fhr&BPBm$Ai7T?mRkzpVlzi-Au%pbF<8@4bY(j!I>fqI7=Y|fgRU|}s@ z;1KvBNgNV-Iz0~MmFWUi&syM1%D5-92I`+2E60j_{Lrwej~XlSdma}jwOK|k04Z+t z*LHP5f=Ex2RFFYzhZWGGmitoUESL=F`Vkb{(q(`XK^{4`u(oChRM%E@O#fEBSN-ji z#+RpKheV{lwK4jHq`iUZ707uQf7C#V^l3BK?PgybK6k^O+??Gt`Y3sRs+B(bJtbSd4_EU-mfkGLMS3IO5lQUBq>k9`9 zJ|b>~BD7{_-x{Hu8t`0%v^h1t71ctvDNku*1F+pjTei)i22;s3>!8U7yr2!B`3;ndDc8RwS-Tfl)KdA z7IVT$SX2Pf9oAcsvdQ_Gy2T`r!RPJu)Fq6%xrxO*>H&GO*PV+7`nUM(X*+mhW){ey z5iw*GB9-bg)e|!-l7{1vV$@(orFF5XMf<}YW_wKw#H4O=^V5~p{3hSvP*&AaUYXo! zZ1JeOhkq2vkK^OSMY8%pW(*#L)Wle75bHO5BHj1+^H%UJrdBli)QF2aI4`SFDJ$l( z;dmf~F(H4Dina@>>c-0++b)o`xFoo?HATimS%gx<%*rKlDTcfjVhHx^v$MBV*hcxe zEW&#g6;Tb%$FiwB;h^5%>yu^>!vU$bM$=;{i?@Xk5hVJl!^ z-Atk6_W5A=s7V!!fQ$J4jabqcRhji_7-N+PZOAu?18Aq>qb1E{4{bSb)B2@06jC)8 z7ib6}aOhv-yg^3(t3yefUW*8GS?`iDlrJ@BZeLpJC|w+G^MdpCr}y}VzU8s3cHK`4 zQiOZFy}J`zc<7b}ENIu-qL6#usF$~tby7Sdx3iB~%XeZ*j`JT3aS@=rJc$v#JqpW& z4^T({#JhxSBIj`Mi33hek8EiF*UZFNVJQ|94reK5thYz$$k#7@ zL>F6{vS)I*WKQ+C@rcv4h1e4vKAfZ|6fa#p$EBTvj5a_mUo=R)-?NEG$rWi8`$_m~ zPB!G>n1P-K)nu3fog4NG*ZIu`%-9Yo>R&b-xU|`u8GdwM^-A8kp8nmx_ajDKK?ef|d1m_vu;g*QI3=)&an)K($i;*n8GoU6N;u7DpGz4x zipb>tY#$qv$wicSlG(-x9{Xp|th7Je8D%BOPs-q zJiTpaOz|kO)Ur6#bmJ|L8Q-~R6nd*hjvkBQAf(;U3CXEG^ei5pX_sY>V{$s8)iPX` zC|QR^+75@JEjJ{{Q}`=Pzj(s5il*xOwa2~7je`j*Vy1_ZJx!E! z`6JDFlUi)MBg5Zj!wv2&eg!K#aQTUZlw9OLTg#1zcIElz z*@ab}6#cSD8Qv=evd?8)j#D+t$}S!>o-hdS7^{8`TO-_;c438!1R{Dh95(4O1OLBpZAgB3ZxV32MM{SI(v7R>UaBGJ7K}@?08mAKx=@P4qtJ19VH747^4;q%xw;U?L}2c<|8|mgK9i;+m4GDRStS&@67AtFnpvOSc6$6Y@)wO z400%X7RF4;VYkDNWW>bFheg|2Wl9zHQ1VBI<<|k7rx$)_2_Sw(XZmPIv@9PHjpeM2 zpEJ096@S6{uXWTf={&8mzEssxN7xf$HO>3``l&4rm+*Wo&Xj{_a&y_zK9+*e!T-ks1m`Tn!;b;_JwvX{L=PHuWJ-Wl)GGWya+y9*tmxE7NW-h}oPTsx}AG z@k;&G16UEQ+ge>+Jve3l`bXo&^4Q+55$5lyG86XqX?H>*IOSlolr1c9xo0$6b!|zp zNgzW*jb6;ATuQ1e1bBovdfMd3Nz%qy*?qg^z*~YOz`?0%oP21n*WTz7%R<2bI4P*u&FZ;Zf;}d2sbO4@!FJW813{9o?t8+6Ddjm<9@`#+D%Dxw zbz!aK#U>uI7Uc#UAY&Thin7(wnbh}jz!^ILV^;ZmYap4huvPlcP!af>I6Ak zEc5NpPmkNZ-x(46bX&(Zn1d3J9(kiA21v?0rpo6mkSxl47W!D?24f^ed9^_6My!h@ z{02mjYCXU+JdKzzXcCGbIa5ZYJ9Jv|xFs|qb8t-rd5vlgq47AM40g2LBCWrlH1e?V z!uKUl;%!GRyhK%7=Ec4w{TdA+t<;h_k3GEXNo>4>%nTefax~XFvmt66$;Y@r^bc+r zB`O7M4Y`dFUc{~Jy1*RUAOUmH1VQtp+4VLf{<`#SU`x>~uCFyb9e>j3jzfB|GIJU% zGHFaBnR&Fl|;7oGl|TjKA%)SGj3#IQd{0sU$Jea8NX1N4UY3BFXFSj9AU%;&!^ z-w=k>47gW-?BxSn{(k3;7ksq#-wP?E$in}IG6JvTYu+6k3Si$iwzmZMl6M)kK~vTB zw9ubE;T1M;_)=tNZ*)X1XKLAhIStD8Ls0(sF-BJUZp|}KcB=H%vGL|B`5z zSR=nbu#-Kp@uoijex2^W{Jc;()x#tWRB^X@`7bc%u=!tLjwzRz&=A(lKVXg@%6|e> z`1`<#e}g%4PY}yO|KHr5GJ#nfW_QK4a$_1PNg3rxIQ&}$hG(thP ziu0ZtssllcJ{gCHzqO{yyMKB8wy>`7Bi4{Lt&fn$!gp^rXl&|Ynq95<`Qnpo9^1}Sbmj#e!h7TCGwoyX_E3DPkyRi{8T86< zC;RUAqewsulh<1A5-3k%|2b)_P28A1bPK?fYfy*}qEklBZVeh_Hcnv3}k{bDF*Gnpc_Uzr?{FyEug&k`|gqOLZED}RzK zW~zPR(wXRs^W?qRXoxOt5^NOgNz5=46J>m&Ny*(Ood;aQwZjsSzRf?9XGxgqCWO5X~3 zS%CTe@^!WTp$KL8)&w*Hu?P2IKB(OGOrKCzeZxhFrw*sEXk#4;!(9O8P71ZL_)PLqM9NfZRZL*P&ia9o%@J%=hI%zSG>Z)Lt6~ztLAw0 zxE?yA#*H)L(9eeeR957mP0K9^r;qTZ6SG(TcblbkiA_u}%_6Vd$bS5mj<^Dy>Vq#> znxGK&D{jE+_TuZ&O-0$TM$*V{G;ZJLvtfUhr)~MZ`nxtM2A0KA{hI#Kh9`&e7=b>q2JSg{}QMtjq;yl{d|`bilHL8b7q;|o2>!C&sacex=|2EpU$qN!8~g52D2b z>w9XkCD2D?Cfl31N@AdHIBLN_l3{;z_87%)Xo$5E?d`3$mpv>*HwCNxVm4$wgo4a* zwFSK_79XphUpvl@k3DXK?xco_$L_(QP>BekJhLx|E6Wp0S6i5QK+82>Mu6_OfyVCa zLIuOVyrEJWb5Ru?Oa8hRDf(S)XWjku3&B`;{^;Ri>$zPur`EcxEi?Oq)iVc|;hq`9 zSIga>%hm;z)klrvQm~vxnNqt99`$#P$Xr_c+OleCWR;&&h(3pw4@mg8|$USq9Ge={x&|3YcFsYtY> z0=Wo+5wVK2_)Tn=x8C!TvLfGrMeVYd!I5;PD?6|+ijaVXT?Gekz=+AhLF&$@I><+r zGATlbnZilk>YH|hV1X@VX(4a&-PydBV><2g!y||FED}9oQH}Gd@+c=IF^TyI zdJWH^Cb0Dpx|Q7fw5P{BWoEMV)>#WFfiwXIc0}7HsHycR$#kA;wom&Ab8e04pbr5= z5%CdPLPhqZu3!4q=k@6phhwGuNTS{Gt@{;`X(NC8)`qJuXZ4<3T{%@fEn*nL@cLtg zgSyPr48#MEeckhKUwbxLIIbeul}C~cwJEb$c$_kwUF@Z=$L`lU`{o&JpY-DdmST-j zkDz=+osn*Dp6}iZvH)(x!2xbEZAtw%&a_-r=8;1c9F9`y;{3({A8TLihRuiNhtKO@ z&xiDv$`IkUA5*63C1bbl2xO2@INcj%MLtIJnwUVBf(!3!)-ANxE<*_)y!Awf5Mw6b ze%b3avA7$gt~8M^WO{ar^wy5}NfYpED^8!>;_Lz%?sRRB6W%2!)BA4T8s()+VL$>d zZRnooFr47YYzgi8gaph^`6Q7;=DR0k;9Roc(pQ}PSc8r;B8 zy-FMuQgWon4F+S|o8WCGN2iVI`Ads5Pg!tk>=*nvVr#3Kc0cU_(`mNn!_brKGP}3Y zH^jM~&%aj;5ABF$i(pPe&vZ2R6GFPo?%rWpD(+WSufv&W3|+R;WsF z+rKJn8`}IM5lq$`d(RQbwS2eXAF>WEwqu!mhc*d;XX;O_f+aP5^)400_FOJBd4gb` zXE_*Ne|vp|%toDTPWLv_p*NQyfEe(er5^rT!|D#5bo^yo1uE>r6M%aK^-+3{&r7&x zAUAI3z40K6SbvoK>(=d_7WE;FQlz)*Pm+yMpN-V(t3IuHtlGqLW@;MaG2!`GiDX(_ zBr#N5aTD@5@#pxFQTeuY4r-TYyvbkV*pQSIRK*d+6h)WoLjCPnMk>SMIKr6oy7{!( z%H;D+xMGZ_V|MX@9F#DM$H5&EXW$s13>!8D5vF>1iN204D~^#YfIp^kMx8qg?IXU_ z9Ba}n_i~@MS!<#J-Ypr!N|{7RrIiMee0m}_3;ju&F~dBjGGaa(_rjU>qJs<;7i*R_ z4u?+ziRY>E5xiVz)QAMUWay4GEy-h~wnUyXGkvO9^cRee=nmi3l9UYsxxhh{b~s`I<{-QbFXtRlcox{FO%sSRBz|= z*cosh8>Z#M)~VXneoAi0GKMI55W*F8^V(C^e4ZHoYGPWqUMmk5uU~;8?%E3k$+2mc zvrWxFue7tU6Zv?SRbt?ZZ=J{RXs171D}cue-jPij=}Y~5C7b@iGyC($Q28SUHCb)J9lEgGY-0_Z;giP0c6GBH zLBJ;-pN7nbOT0_ln@u4=esK3*pDZ3ETLO8J89+t3=Fa+B@xHE+>?Z+!=;G9#9I5?> z(EQ?PbaX2L3Cy+U?O=!n+a2QaXUZBSn|<|pNIQXzr{Q702-bcacE<#2w>%~5Ud7(@Z(bF|G}vzh0G!7YluM17@gKnz zT_>>4OBn;PgDK%-L_Ch0X!XBB!l9n&=eH9n1in`nHk%l24#CZj<>2h?>yt{6_OB^x z=2+xv8uo5_T{4974pxxp=N1=P_w%f)5zu{iTnJTSrdVYZ;H0uR6`uEXpAQFK6f5n8 zAbaeUH)V7h0ae+K!DdQ^3eak#A(@;8*E==cQ(I%6`%|nCYLb4~|0>e6)%*3U{(*(u^!cTWhRGg65=^$i<46m6zASz(Wb5;C|Wk z#DvCkys0|V73T*`*R~CgkfSraV^{jCl?)|p3kY%$Lx5=8P@pmUm^G&Yy6Rz{o zxoa-88u|<(WuWGAV=G9@Am<|YUQf5wcCf~i>~L22sd_HqWUsM?(5JznFNlFXRP zp33QzP(|*ntB!=K%op9eXUtx2t#AbAQ>#(+gm@L}*QfP}%|RqtI)UegQ94sbQnFO= zWuuiXazfytlLEmv2-xr`58I zV5c61_)Jtr4KtEMBtNl-r2|Fh=r6oU+tG$T`SNY466T` z-j z#)N@*9f&Z7+g*-AKYJw-!1y=XI}q({aC*< zmkxb$_d>UrSA4C0k!~*tG)H(FZ6Sg9GqmZk^-kC3kfjQfE7}QpClV=P&I;N32)r8* zgs%}gC7lo3oH%iCl$j2kCB$gT8`CMo*0Qa5nQBEM@8ktn$(5CH8*p{};_Ek{$bAxr zc@n48DuF>yu6oeE;xfL!;VN+VZO|8DMdjbI6)>weMvZW0uao=?eyfnBd*o{FNFL+M zW04m1a$SGofokvVF|AZK8|gzH=jm&>ll3eBHeJVp_)8;+5-DBYqJ6317nnE zBxw0Yi$8zM0Z7`EMZ^;z$5{i@!1-?TlS?2n(kNL0+aI2$w5N9xfHFr+i$1E+gd5WB z#2}biOl2qv(O(e6!V#Leikav~xw<=J!i0HI>78a8Y5Q<0T9)x^bz0ltfB>-@qxmQK zJD%|qu329AAzJrf6Y8_CIPY5p1LW3o4lxGE-o;KtTJI{Cx$d`jH;kB7dU+Bd$7m@* zYCykXjDP66#uhlS!SY>Rv&`hb1?Lyzi)-PI7#7(rMx0T0N>J)WVMD00m#+Pn_22bg@CcUeqv1Yf<1&0`H`1(>8SuGZ3LI7= zbg`~EsM?|#N0JUjrP|hR43woHYRMeR>P?M9h_udl{Nh|#d9}k(bdk&e_~fujdPuVC zEKkT2v#y^>{-K^!yUpV{UebU6d)rC$@-2rg-vqCv@)tf{MvWYnNW)q!h5# zCF;-YuWZDO;saqKwXB@&%ZRHP({z;|HFMeq!UEOE1 zZJ1hIG>Yd=-C~zJHrI&2267Oh=;8H~^VT>1Zl%6*?_^BO=8gKIT!L9KaUflAVn3e` z5xvr|7v(6O#-(zE|9Hko4}!l3+J1oOyI){b!Dkg`zH2!_iwI6OO;&0RRLULJyEf>) zPYC&xde7}f!@+U^MY4H01pw8720V=JC)i$)2YamYdhx1b`lF17`YazG%{SujtG=Sz z>)KeErVmDXiV)@j9{f@rHweFCdkh=5_PdmwM|wzkM~@wmyEZG={kU+MYny|%r-9O3 z_b~_2SKr`4!{##Z4NT78`i+O$H;uq#I6c^Xx>#Au=`T}iqt@8s9U%8Qedvl-5G9qu zMo!8lwa;K&rQtuBwasKTxA2Q^F^y2q@<8z(IQO)=W4+zPy zk=2ql6jsRNy8EPI&zMBBU9!wwS4_k-H24Jx;IpS-WBxC7?lVTsGk#=Iacm}p^zN4| zkh#EVseEJ<3Bo6-wi-CV8!FRTwi!#5ZCCyqdj*$+!HK&kQy6F5q+x1Y)=Tv&iH(am zp~J(nGa6NGY#wS2hfSj=K`$CP8CT~k1TJ*vs6IxR0P`z>$h1+C-GScpg>Qlm@ot@; zclM12uVr3)S%l|a4H}8si`STUW3`7Ylom7De3@<*>x+vrrA>H0*>I}tmCr`>qjD#{ zb>coswVr2bv~q9w)%m?AQhxlwdHlOi(B$`#*DJltbC&3iEy7QwAqes*eC)h@8CG8R z&~Ydbth9~}VSDS~RXoyMGfn4tFKvBc%(P`25F8&GyH+}QyF}hb8b-2}xrk1>b%{}VkY#ck$+q~&9KzbHDhVJM+QyoWm8%JrDU5S0N~RfCzRpb zpUG)A3I(2<$*ThYD5l9HVA?fn91C4y51GJ=VVpfpSOq@LUMwnp>=S9=9m@xV=x(Po zQQ;%sa(WI5RaM$hba)T8fGxB;N~G{pijv+vCXIrUO!kD+Z~Fa7%NB{eKKJTyD)pez zJN?O0$Kc+d*N(Z@`&`DY(_}h0huwKonWlt6)vcO)0TtM;o6;hmxMMbW9AGh7akZ0+UpZ-D@NP!Z(be!vAywipoi)wp9>k3Jp)b#mTLnOc zJVL&nih33*;vnr?X0y!+3XNGzx zH43}VWY%qW=!J{d-OHWbvqtZ?ct*@a-{rz7u@tpCHAioCGePi7jns)joD>I;Gv>P8 zXm(7@mwK!7sv|VrX3vFrd6S+SY|BKbafJMDf+14Y10{AIKC+c2F&GbdgX}L9;XW zo%5q`^)&MAJY)e)+n)22y4_y!^9qdxpX^Z^8|DXxWVjU+5N&7v7|*P=PdxkpWQn0y zE|a@>!2*W$OmU3teni}nJaG4(JeTh*l2_=Q8MuVCj2=3vn zLZ|Mj>kh2LOCi^WVb?V1L}=wfe#K!&i{>4utECb*b*#K;g}Iv1W)QF0EUp)%{kXNN z)?)Ab^(=X!$Z=+IVM$v~b|=yK!s*FMPFdo5U*BhU5#RxvJtN9DluOyhh439c6~nZQ zgyFA;U0HwEnw3)?I%v=*i(@XguRM{k@J(5C$#kaBXc@|19#`>Y%&}}3!MYD~T^~ja ztUl6k<-i{NNa8awE6o6zBi|)RoeZ+OKnBF6C~XhAPK`1K&CDHob9X^uzx|$)R#`p! zdK^t%c%IEDKUOmo^-P4A>v=}!k1_ps4JYDY$kaGHP|pe0+*I7=l%9+uM;E9Z2GKsyr?RL0y#;*TRNK!DL#SL+tZyo zxVO-1#tZCOA=&dfnj>a|fuPQ?7F!yll<+mR6B_MvNqJNa52a;q7*t{fADPfx5%o$C zw`;Kp?>x^I#kVUh^X3_q#a{1Bx51vOl z#YNO#S-f581#{7Z#l-@9hkcLp$EUwx!(c%#n?MnA`FenMx<^T~ykY&eo)lC{k=+2r z=OXei@U@-`3AjgMuJ4NBr_C&^g z3$uzbI!X}-mG>TBO{vZF1We8VH#Bm2DV_`Myz&Tn|34_d7!K73v#^z7tThj9_vSGm zF*lM{buJa6k&hwkzMY+S>7=JOC5R<(l%UsYXLmbTvQ@e^Q{)xq%ogxamDLQN48n2) zyzwz0z^A>x%2W24BWF}+*7o?x)Ozy;b}8q}*Zbv{CuS&N-u7I*weVxvb=#21e%BaC z8@92_V9_AgVk5CX#ZC9d+xez7K{AqGjF?~UdKcWif25>lE!Hrb6{jO~(tfGFz%Q)U ztPw;!XPPGw3R;+R-eUx}eJ96bhCM7W;dR@?qi0iRFGI$lt<#WRsB(hpgA}9(NqJqK36*I$F$*j ziJh9PzYPqtF~Sa^SFsD>GZ%h0wijs@CS9fbRqQ$_j?Q-7-2upc2~iRHWt z<{1y|jb{hWzrKGRV&am;Bg(b57Or-L=ceL~o4K~uY;Nqw3x2vES*nF zUN*AV{(Ogak=Yo}n!Tu^*dS4GkWD35d<8n)S{?Hx9Oj>|wzbF5T~D-_-LYGeWQ}Y; z`GKZ6k|)+yo`A^}DYnT1D-t$`~)Oxpe+nOCtrbOseFezx1vHmSP}KI;JdS% z16ed1z3W5pMmMv)v8nIx(I`D@reYOpCAaD*>jp5ezv%CDbupoZJlJ-kP}V}(UQ)1` zo8_B1M`Uh>=gIAbhOQX??S9IPE!Ry>(|8|=4cN5CbPEZvw6|WMEE&sj9i12$G?a+p zH;zL|w!1R;SDRTp?lOLdQ3JYvW^!zH(b=gsxU>P!UN?8h8wk)Sqt4GXsoM6P&GJvL z8lAxId`q9Q_6gK(j3L37KG@d%Oaral!DHZZ7bFM-Ix*=^PD=VyW1u@VwnK;Nw^7SF zbp$8;R8d)3nwRH?iR=0R9M@}UJlQ+c(f_@WxTNrsmO8AUhSydPhTrxP?7ou?s^JAq zt9@Mo2r(AfOwWs_>qgMpC7H+N-Pi=nn7e?XK9sC7wnEG9Q}CEWMdEMpfrZHjz(qU(=R$j~pl>ka(Z2Kq z)`5YCQ{Lf`M~-sOiof)8fbMT;(pTGZ|3=WX%>9h&4N;R0bi;f%k=}s)w$vE#HZXo7|pa7R)vD zw3lnS*<7$3lD$Rs>uENHn`ZiY-h-bLKkzgk*n1LCh(T`%UpClqWVC%IzyR0ly43DZ zrDoEvWr~5Qigfs9C!JlP`VCf5RS9CGQ|6TQf=67o-_B64eA))Sy81;3^AqbdAfQ7? z{{Vk<0?G=44W&e?hub0>UhuGg$A*NVn#^qc7_;-pM=t*MEZXh79#Tj9dO_FqA@e0j zIGToI|G$vKAx}wl6Y09M9tExhH7%@~oN}uu+u_bx09(dpMc}|!Xj12=!lFdoeYc2= zWmWLuwAYFI5nD?CejR+>Xq@mk0dlwuw(Vs~wNJvcAMuXP4 z-~TnW=ymk3(b1D^wwmWby;48lG9Wx$m>19a>hkx(Ff02rQ+i6;b)B}9P+RHpoUmH-yNq+R8G}5yxsy`Z5L?1D&d1fLi{@qF41ORaH z>wF$-%CEgA3R2SL2^~?XbFS6kOk*2$yCOl`iTP{)EfRt*%7xVi3|PGm!=!O!TBt5A zf(*|hv5)6st!o~&E*N!O?9Qu3$URwa?;QEB3bs=Y+G6C7e~*ra|I4c4{$DDc`X8$4 z`~PSE%}K;DQQh#UjQQ5`z>`+7=#exSrhk(3i@AW z2^^h@^P7q`8b-v7e1G&QV)xNH$0u?@S33>asPGNsHMnfx>QhR4*=xVCUv;xK$HAC= z5#>c?j!n5YH{Sa<{H#C|VNz?vGZJXQ-{)z)@jEtO*Xb)qmEw;=(G_oIxwr}$hluO# z*$Z1<-Z4_)>6$kL8gXE}{l=%WiYIwO?lr@` zpFZg|)iQ~j8iOzll2d*!@!l@%pl45UgHmAO#1eXTidI)cPM?nDi6;q=A#@gj5tt+& zF?A==y-wD7uhKd%sT6^gnV5B;&gcO@TKSyB8BX=w&NtJ~ngk9iIUGf+d4!bb7P1)z zp~J$fddfmcF>PIEAkRftQ3l<&WS!_L*R}OgeD;EsntJLBipr=|&L;uSZHhN4)-YC9 zKz}c{?KloCeO(J^Tn_GyTsX=o9Y<$n0l{ZPBywkjeJu3wBzp(hs+V z@{vDOqKPZZmXjL-a?xDe61RNN{><20`w=buG?XQ@@lvKbOV!17m*k+l1UE1cCE^bb ziv!hh&0&lX=a zff!ze%7H97St-VIx%WA(BfbfIF^W)2fbFy2k2_Q^D@V=g>2@SY(G+zL3=J$X#g0|n zJArFx#<)VP*mKI;qM4Fv7xM-Ak#tQ>Peq@hM{1 z375kbFIE;KL;H4+2*A}J2`j#Ep9y3gcqaMrYp?P|S1^2nk`>H$oxdc;`b~f*p!H4JqQhNUSJWYXOkAxImT+&h6o$3S!$o8R*`jar+K7@|y7YtnV#AWF z9Jya}%jt}Tyr&;|Y*7+lcT>z`8OT%nJUU0~*;B1T7z_u%6-42iVa@HMh#=g$KzTQT zl%U{3K)&-Kiz)Dr=&TEuB0Y=uQx>tl{7yA3B@k$d^{tPrrt(vdK|4WNCN$m~@5d?} zln_I_!~$E}Lk8B8yA5J>$L}{-(izdXPOB)cj4h0e3~k>m8rW`I(eK%-`G!Ic>+j!t zEU16a>2u0;lGj1!?F$*3vm!o%M>0@RcH`@_goV>>!4f3;P^B?)a_QC2!|rF$1H}V<8kEjo`0-Bq?G#{v}IuCT$9r@GCE= zZ4`uCLUy6@sD3w!u{E}VoyGyIx=h5;(ysbzGZWFkQlozIl*7T!xJ!=2F?s_+Y|o8e z*&Qy-(#$*KWykCpgOJIQpQ^j0-4$sQ z0d5qzF>uuKH(dO-J2(X^zS4_7b02m365y)6m#BD=jPk@HWDh2E?-9^D5s4-au!PCv z^(|qcjA4>oE+|PZLAl_Fn|@a<)d(#>`ldV%Q?_CHxyQ~n@L9h+ix#|jh(>P-$eK2l zbrx%42NO={a3UoMqKd{Kmll)=XY|+-Ukcqtek^4Pzwab*jV((l<7foz--YCqRoK$U z-}xhv&cou@7Vx41ctFjdFk;;F954?HZSKpaMiFNEp}#*o27#9{2(ubqzWB}-*LudM zKe=O*UV|82aFd$z%%o~ADfyiP^~8*{IOu{vz(g^3uSrel{;|XkTr|#&PQIS!>lx;f zlGakqM^De2(tA2Mg?;9tQ%xq1q}{WU_|kjOlr{C&kkvx@<$b9^)1D5Q8}i{-{Yaxi zJy7&K4!^JG#@RWFr;MFDwQ~n0BJ(|;7g_9BWYbB)@eHF4o#F=l50i?P_)hcaZYGZ# z-^D&uY+d@%WL&Rq6>P{?Jy)0ZL^Phl+bevzT`kbhQ$!3!niwW+jyDAcsnShA&-pN`uP zUc1#LSEA!hC{q^2E{3nU&S_N9uV(@u9KUjjtI72l^zip zRSi_4%c~z;03A+%Hl9ri49-=!vrC@ z9#NdeCl(h)^2u(~5Svfl%T+7!xkMz*_mc9u-s>-@HILDWDpQDS=UR&j-Tb5dEZJGR zg+i-BMeS>fg}V-E)q{>D{xoZLrthEJuXT&%ltr#%8OstyTujL)TwLc@>$lvcp$;2q z5-e?lkpt6Qv*bEW!}B?H8VYWXj+0=l=#=P45^=>yh`Y2Rdm*3n_V7E|7a?!si+>Wo z?T8+bmSPPHsWNwU4>4potmiGmyjG38Mz?S69xUXLS1ibz3dm^x!n-Blr>}WFJ7l`% zOg9VMaq5?CP8)ZGfEPPcEJ>?OOETN{6=;*#jWM!geifcbP~Ejd!_~qw)N?*O>zw<0eJ3-Zuf9sbYYY z_JWquB&HYP>FX*=plJFfl()lH= zB&g)bn!r#|jJ~x$=ZqS@l8P3wBTPMA6tkLLmWR!!3lxY;#B)oGuYU2&llxZY&_LdH=I!xZhV8B(Si<-=kVj&)m&}@j>A^Yl1Qe< z_AYMyQQr;e>T&aoc)9n4q)rdd?(hEg@C+;-(b@`T*qkwA``x@5H|JmM9P@VlCWvSk z)}j88{WSj8utvU3i(bO^QLC&z=OtA|V?w7nihPECiy0L-rg!h9e3B@hnpv-yX^3tM z0zXY^HdnBISB-UpUbM9}Hll&hE~|?~y%>XNq+`jsb$h&rKl;ak)q%weMm==gdGsG* z=?n*?)rC~h} zdDr&k^jv*%LAOcfw+ev0OKYwhEWL*Fpl-Dv`xOq2e;cq8dXQ02nkQjM3P_N=%Kn7!+oGl0FDnkW++5W8ah6|>_ih1PNfXa zZ`06|(fddp5^O&v)P?=ZlW!4D3chU*CkqQ>jQ*S?7duf{R8j=LlRT;+Y1(<9*Yir< zq5)4q({|EV`=jAlUhB%9gJs3x2AaNzyCRvCH}6~GQR8LQqqZ_R6)f9)@&2r`qe1L< zTc%sMpr9N}Vu|y93`T?+5mFJGX6H~eI3Zrv*UV%3!f1@-?tP2vti$Rb;I6s%cR z>8HvFS#4EK?qE0S;wWOk3eKy9@3QBazS>htz`mRQ1uiixgTZYFMSi22Et;VG6BwT? zu5>PHJR)pp_lW+UVzDN`SmX7{&4BvcM^(nXB+n_oW+RfF120uVH1WB9 z0SfxwnE>zpi57(-7Tnamu0NdHclZy0d;-#3^hF65;P>Zi4=-UehZK0 zo8V3CAi?^;f>&IHoOi5(K8rRHJVHflSC?4|hl?`*9^bjKz1zUD>6d2ZYIuBras#L$ z0_o|nj*+B0L1m7bV}TVvJ>^e(HqqU)Hy*17V=!gW4cwEnbzF|4;l*w6>hmMTBj1&2 zq-W%4x!mu}fEr&sWp@&N(_J@K=OKSy4%A z9L@WIN%s4~rRw7QQK9C9-TEB05MAC2fflXPd&$VXRATQf10AGFKq_>m$ZH`F35~;I zx+ayPwldC}qIlaNtT&gM;r)uOTdTEn8CXQZ11I##a%mjA@rz66Y;NhskHZt6xtH;P zE6n#o$xMl|%^LrB?OX_IXDOxZ@`AR<$YxkyWkBNDGr!+#tV+@Db3Q5;b-c4@f1zCk zAJ|ag>Di^jgZ<->ap*7y){n&1Mxi~kFSmN6GV2+&?)CAz`E@b|Hs*x@ z#;R2Om7W!sK&umGPeV<+EK1nm(GQC>Vh$@Jj~5DQ48+m&KYu!J2{c|(cgm5Cxn>S@ z^BES`$Ot1kBAZ3&Sau#H_j3$CC2#uY_OxjJ#E$9xjP~O#6eHx=CUt^~tM)jLHc(R` z`5o{o9I0ehA3Fy2dUSn&75+cFX~1LIKx;O2P*cV|tL)fM@PTW+$Dx^M8VA$C>Ptc! zJl>ALGGTtr$r;c#6Re!^@$(kKW|vnbG4Y$Gwdb1Cj;OGUSGz;_Cq4<1R70Q27t=d* z0?F+Vneq_=Qw(3FSnt>*0hbwMa@y2MDR+UfAT!my-v>0!bIEKQbc6IN(GjCs8Am?9 z8hdiRG(V3(YPNIS2;bz}s!w4#sVL+ZzIZ0ha8#+*j#yiGRcx2ai`yBWIZ(2D%N zlw>yWW=&+NRhBZ;$NCXH`OQ*1Gu##T0g7@IIhuf#A|QC3|5)RN794G3pmNzKJMwrB zu`#PNBcE_9l6pdj45|@*?C}P^ldW)QXJ&kYj~6A29;LK&4Zo|pmE&mlklwtZrV;2W zu!54MS&okqxLpE0T+)`7Qk2wHYqmfvCip#imW?!xn-{k~YR3r0P(`DTB`cEg#fS9n zd~QmEt@&bRtQ_&NAr)P+-(FnW&%XA0hSB7_G$DTXMJ9RRb5)95XxwLKw?xn>GFk)H z=K>JF54=U>Ie80m-J%-M`I^K?^|Y)id2PSq7D8Omlh6^<5JVSe5tgtCgrDw4K!6fb zgs)iNo!M3bJIC>Cy6RXRtPl=wJ!UYH(}f-G*%*j>8b1IdbtKaq|1qWl({OhuU(}@- z7Nl3aUK9e+Gj3v&k~}=@Er>nwO=64>VAYl*L#+!O*@{M06tv|?@VU;;&mNUWOE(-c zA8>N`sU!36=@Ug@rGMG1O6%8%QhY?^A-=HxFK zu}P_kQNB>ua-4X~D1q-3z--%N6ep(v7@qw%1G#Q2mQ{?<-^&}c7Y|97uqm6G8#{Kb z(uide2DhonQrpr7ffS+xlWqDqG}%Py;kgT}nCATI%?lS~#3ljd4LjbACR~?-pZLzW z8EgwZHa6#n*u*m56i`iO?B-WTt`XWk%(Uc~piWmFA7x7JW)Es_h(yze+fcoIaZ_x-&Kw+&` z-%bh-%b6P5#GMoIb+{GyLIH^B97GoiCOGxLGrnly*7g8yZ(Yn-=4Cf+xmXivS^$DwIHK_qrng3diQ51eR8I}KI_Wf(imUoC;?;iu`@-W1y;Xp}k0HudFY@~WB;DP711 zmRcll8dFH{TwPsZNy)t&Z9^PMHIGU%g+NypL|HRoLCNt&k{toRXILV}oMHpF+*hnJi)+5BPdu6#s`z?ukH9FoVNeLDSOUfmdlf zbb1_~1!!36_2(w+_AQ}I3>4^vB!5FuJQkb zhNALid+=xWA5+!OhyXLG!i-`886vu5!1LwGN`iN(K5U8&E@Ect!LQ@DtVBPxD3C~jL2kDmy$CY~GVyt42YBeKkR zu0>%p(=S~PO~qw&k4k{i?AhvjOt*OQLHB2~UBsKn3ls#y{S^0a8Qu4g2*f*9mB3JK zVvhLUVzBSD=6jdL1fx%c=;h&pGk9{e?Q3l%YHo+iPR^#jb|C6>JJf~8dYd&h9|?wq zqS<{ZQqOkUKjGt(C(C)7qIAHR&GRK3Qtv#@?B`-4Qn^v1yWTDJ^R7Nf8+rH6ENML$ zt3Oa8_<%eTVoOHhpMc^(?qzS|T|C?z*t5F5Hl{!H2uuIfnJDZv+|GAh+!A}+rSEeQ z!XFE|E!>XPJeQ*#B8pD(K_I$O=SMeI!guUs#0V~Fb0&I>m5bh|k2**c_adid_3^hto((`5_cWCAkAU#T)16I{WM?OaUnZ@C+b0BLZW+ZO190-s(P_^no_r8W4 zWZ|r>vEFsGRqw4at5)IIbgv~!v9a75a%h(hX*LUeuq#!cI%@ZNj#!tsnoLv za=rch5%*JPoGnUNB@Re&a`8BnBNiAafMiNPYZRhvXiQ$y@R*RTzv?YsD+8A7XD4Uf#K2tyNTBT`C#DkQknTG!klZ$fP=u5JXLLaw3moO%8H5{jx1 z*S7I1s(EyMqOT+0;hL+yq)bpwZ>W(!%5DfO9T2&w2(Ho5(w}cS30M}n=8vqGC^(GT zJ@}6}6HKC!V)jD^u=;!Rr4GoS``zJ;VvMBy()Ab-_UW#Cx8;{0D9lFjQ!)Vq6(@0w z;4@2<0PP5-$H}T+!QfL~yMvsAJv}@#MDz>)?&|vilhMunk<3KjdleR+Zt?S19*2d0 z%}T((C{P$%$ZIH}Z^nwbP-7$(L}JJheZbEoaNPPqGqJtqq4_nMXLd|rxF5l4vHHm; z)#@#M(EzZ^&exb{!3ZWOFz5uk!Bt<+tdn1V?Ki)>Z810l{fLkcO0H+|OR)ab9|hA$}S@<@5a(ll||RmLW<{ zJ;IX7?oU(~bc9%;IvLYROn>q3lH^g9X;N$m+`~RjVwchsj9_JQ&|TK4ORh{tN~PcE zKw5Dcrt2E6$I&U#W-$2|1vpznDb?m1zN0XB9O)C-v|m^PoQpBRs zw+ASexExQCNUL-0J?p1=LL#T&|8>_{t;s@XWt6$@4q5e8D}miGrvIMTOn)9l_E#ji z&A52a=VsU}k?t58>bA+!oe(8jI?1V20fIorlDl zAEGZzht|rNM;F#gk3NSdm!~-@`%|hpbU(KWa^uuyZE`BR()TtYNgtsfvVYuNi8*A8 zpU#v`nXTp|B!d(ZnlRDl78}bJi!$Z$RTP&6O{>eraBxluQ%k7nOo)%VpJdN=KK3E) zrCW(&M%D$sa}w7b`=hnxnMr<+j^-Zt)%d)ar>PU zwk-E_T5IigaZ8a^nACmi@n-vy4wFIr$$_be6BTZGrR4I9b z8}+lfp#SuS);>~~5o;5s>?W)A;}K=9cch6)X3oUjtoPj{8K1)Pz$Q5|l{xNM-m2Q> zU31zOU&OlXb$SaL0^0{H*dmoYV(mtiSGVu9N`!L|QFVv8~v1 z649xdt!Jjm8+xg*?_Rs+QTSitpRryq5?vyzKI@)Tf2AY4O@c>NTfXg(%s#TU0=klj zM&|05YU;{wd0f1PdU&(_7I4}+oJ>%1#-i%@x#s5Ow{}XqaJDLIxs;j$>+zULAxEBJ z>7>&eKYMiN>Y1W}{UfjPt#`{PThMy1ACxn_l3?H(`~a*@E^4fGRo-_wW|{b`@^3=l ziPK3Jj1*j7_gD*SQOwnyD=gf}j$lmHYuE7Bp8pu#^*rPd?+bo8>f)G^D zF!L%fA6JtkJU!^p!E*LLR+wrzVO-f|F)~8gZL=9QnfI>-|NaR|PrIzid)Kxo+nd6V zx#hOOKXI|l6{~NQJH4fHPtR`pvWQ z$Cv=b>~l=Cw_l`wy!z^&#AO^%TxMBtJp^Wx4%Y4&LLD&Tn711w;|^gQZnCQ~?mIRR#}xgca0n zPEfNFwBQ)7u;cRyAF!msG;DAIwW19*@4EU7eaPXlT%q8oXkqOCuSLD|@Xhcbv{2-( ztK)lVj1RFb&+`?C6QtS*OqRAv-u-O}mMJ4h!TTWKWG~Ct2*0mJ30ll$08O-FkHupG zODwwbE#n{Q=#lz418P}LgV~A7*esRnFejKjeX7;m0Y@pS#0G*3HQ`eSuGdn`oU;v? zJl;mnom%*|N2a_EcM5S?YL1v_3+)HNk{PuisZcV)-2Gxf;SUmxY!2V z)pa?XoGrjZ`4fbiJO|$%Fc;als+G1aRTOd#uKVI-sA(G8Uld~p2CL36$fSx^V)=mE zB~s*L5mWjaHKQ5tSnma@E1Jh3KHPVGJT>aAofbPdlC3qo#*&)XV(l@LiVX3;_S|y0 zFLmsk)$*_I!WSF|B)n?27Vd(|qk;)|M;DKd&`4wPhGbD|8gw_B(VwlE5Wu2eAgBG8 zJ_9k~mVid!iJFsOLpZ~;r z;()(@HQsDw^Bc>QakajRlGX9;@6j@f2a{Ee85Mmd^AqUkOb*>)AMblRkIW_b=nSV-pJg*O*!WX%>@yuJ9jC)@>2V>j zUWC=kYO|+|TKfy2@o1CHx2(?KU|U zqw^TG&A{#XNI$`~EOm{O$(~UB9lUk8CrY>SPx7JzD~a#6MYsL(wpxCHsxKw;9$p8) zBQIgF*C>8Z#Xfv9Oe|>LDo*e~^M)O?>>akizheF=gq(~pM|SAeZdL_cHZxlXx+pI*iv^LSCRux5kI)0~$@$fl>^X`G z?x{fv`V!wH?-+^z%b1)I2^uZRt1)VgNJJI-v&B$pT}&FB?=cUC zNq^cd8^qRsha(|lv_EtActMr97F|$~G@Rn#`I7pBh z>0>o_&j39r?@Xcu!5ye&x#S?Ov7vE<9#%RLdk6eSA#2*oA8nzJ+sjL=nXUGn>PVqW zv~A7>Y1z6Q{o*y?V=Z&ow)Y~(#h)f$_7P&_cAbnwPAeUB?VO{X6DEtz24-7f1#vzW*$Q!5RT*jn*;X6%#B=A%md=Y zwFxB=u;rw;%j}lK!Q{r*yhdGZHNzbWy6J783GXV9z?hKE;nYzdTC{jAw5&$7P7hfH zU3c=|oUAA-Yte$*K8?pn#52oB+^jKaJ)CN;7F3%)bP6tw$t-n6TRI<(xoVVppBG++ z+;lZSAa;sh1kxaO72krzThhw^I=n6Q+}s~RzW|Ib;L3<26}HXH>(B2chPnuMpe1LV z=X$VKf~f8wT;KG>K;xyO0u4cr+SbMi9DT1)Rf0a&R(pd3Zt(E8vj%Xa#y#g_j;&c2 zk1l}~y2(Q$wV1RBVp5p&e!Yynr9MI0rHE9&E`bE{aHXF;CB$|#^~=O%QZ-h5YI?rj z*7hu6Mttq!J3^i(FbE1e7KZvPtTG$PH}jgx90({rB(bc{1hIhWy?uCva%zwI;Kolqlw%+okN>4vjU>!lg>AdLb{~F z9LtuouRb%eTG`a_zXW65x~~MJ2z^y4QKii#0N9oxot0bQ9|K5{gv$Fbb+9iz+CNFf zzgqvL5RM}JxAL4#>_2qCU(EmQKluIT-@c3F5C3@w1^d4VX48LoUy!zH`2Qm>yC+X0 WnbY$hP5=8&B584jujQhKKmHe}ET=92 literal 0 HcmV?d00001 diff --git a/examples/hello-world-server-streamable-http-core/Cargo.toml b/examples/hello-world-server-streamable-http-core/Cargo.toml index 85e470a..44d1559 100644 --- a/examples/hello-world-server-streamable-http-core/Cargo.toml +++ b/examples/hello-world-server-streamable-http-core/Cargo.toml @@ -11,6 +11,7 @@ rust-mcp-sdk = { workspace = true, default-features = false, features = [ "server", "macros", "streamable-http", + "sse", "hyper-server", "2025_06_18", ] } diff --git a/examples/hello-world-server-streamable-http/Cargo.toml b/examples/hello-world-server-streamable-http/Cargo.toml index 61d080f..fa4e3c6 100644 --- a/examples/hello-world-server-streamable-http/Cargo.toml +++ b/examples/hello-world-server-streamable-http/Cargo.toml @@ -11,6 +11,7 @@ rust-mcp-sdk = { workspace = true, default-features = false, features = [ "server", "macros", "streamable-http", + "sse", "hyper-server", "2025_06_18", ] } diff --git a/examples/simple-mcp-client-streamable-http-core/README.md b/examples/simple-mcp-client-streamable-http-core/README.md index a0852fb..140d7e2 100644 --- a/examples/simple-mcp-client-streamable-http-core/README.md +++ b/examples/simple-mcp-client-streamable-http-core/README.md @@ -1,12 +1,12 @@ -# Simple MCP Client Core (SSE) +# Simple MCP Client Core (Streamable HTTP) -This is a simple MCP (Model Context Protocol) client implemented with the rust-mcp-sdk, dmeonstrating SSE transport, showcasing fundamental MCP client operations like fetching the MCP server's capabilities and executing a tool call. +This is a simple MCP (Model Context Protocol) client implemented with the rust-mcp-sdk, dmeonstrating Streamable HTTP transport, showcasing fundamental MCP client operations like fetching the MCP server's capabilities and executing a tool call. ## Overview This project demonstrates a basic MCP client implementation, showcasing the features of the [rust-mcp-sdk](https://github.com/rust-mcp-stack/rust-mcp-sdk). -This example connects to a running instance of the [@modelcontextprotocol/server-everything](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) server, which has already been started with the sse flag. +This example connects to a running instance of the [@modelcontextprotocol/server-everything](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) server, which has already been started with the `streamableHttp` argument. It displays the server name and version, outlines the server's capabilities, and provides a list of available tools, prompts, templates, resources, and more offered by the server. Additionally, it will execute a tool call by utilizing the add tool from the server-everything package to sum two numbers and output the result. @@ -21,20 +21,20 @@ git clone git@github.com:rust-mcp-stack/rust-mcp-sdk.git cd rust-mcp-sdk ``` -2- Start `@modelcontextprotocol/server-everything` with SSE argument: +2- Start `@modelcontextprotocol/server-everything` with `streamableHttp` argument: ```bash -npx @modelcontextprotocol/server-everything sse +npx @modelcontextprotocol/server-everything streamableHttp ``` -> It launches the server, making everything accessible via the SSE transport at http://localhost:3001/sse. +> It launches the server, making everything accessible via the streamableHttp transport at http://localhost:3001/mcp. 2. Open a new terminal and run the project with: ```bash -cargo run -p simple-mcp-client-sse-core +cargo run -p simple-mcp-client-streamable-http-core ``` You can observe a sample output of the project; however, your results may vary slightly depending on the version of the MCP Server in use when you run it. - + diff --git a/examples/simple-mcp-client-streamable-http-core/simple-mcp-client-sse.png b/examples/simple-mcp-client-streamable-http-core/simple-mcp-client-sse.png new file mode 100644 index 0000000000000000000000000000000000000000..37a80fb18f3d4feba333c369cb921e2d286c717c GIT binary patch literal 289553 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�ZSB{-**Jk?X7$hDC%zrDK|>pj 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 WnbY$hP5=8&B584jujQhKKmHe}ET=92 literal 0 HcmV?d00001 diff --git a/examples/simple-mcp-client-streamable-http/README.md b/examples/simple-mcp-client-streamable-http/README.md index 5b4488e..c876ebb 100644 --- a/examples/simple-mcp-client-streamable-http/README.md +++ b/examples/simple-mcp-client-streamable-http/README.md @@ -1,12 +1,12 @@ -# Simple MCP Client (SSE) +# Simple MCP Client (Streamable HTTP) -This is a simple MCP (Model Context Protocol) client implemented with the rust-mcp-sdk, dmeonstrating SSE transport, showcasing fundamental MCP client operations like fetching the MCP server's capabilities and executing a tool call. +This is a simple MCP (Model Context Protocol) client implemented with the rust-mcp-sdk, dmeonstrating StreamableHTTP transport, showcasing fundamental MCP client operations like fetching the MCP server's capabilities and executing a tool call. ## Overview This project demonstrates a basic MCP client implementation, showcasing the features of the [rust-mcp-sdk](https://github.com/rust-mcp-stack/rust-mcp-sdk). -This example connects to a running instance of the [@modelcontextprotocol/server-everything](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) server, which has already been started with the sse flag. +This example connects to a running instance of the [@modelcontextprotocol/server-everything](https://www.npmjs.com/package/@modelcontextprotocol/server-everything) server, which has already been started with the `streamableHttp` argument. It displays the server name and version, outlines the server's capabilities, and provides a list of available tools, prompts, templates, resources, and more offered by the server. Additionally, it will execute a tool call by utilizing the add tool from the server-everything package to sum two numbers and output the result. @@ -21,20 +21,20 @@ git clone git@github.com:rust-mcp-stack/rust-mcp-sdk.git cd rust-mcp-sdk ``` -2- Start `@modelcontextprotocol/server-everything` with SSE argument: +2- Start `@modelcontextprotocol/server-everything` with `streamableHttp` argument: ```bash -npx @modelcontextprotocol/server-everything sse +npx @modelcontextprotocol/server-everything streamableHttp ``` -> It launches the server, making everything accessible via the SSE transport at http://localhost:3001/sse. +> It launches the server, making everything accessible via the streamableHttp transport at http://localhost:3001/mcp. 2. Open a new terminal and run the project with: ```bash -cargo run -p simple-mcp-client-sse +cargo run -p simple-mcp-client-streamable-http ``` You can observe a sample output of the project; however, your results may vary slightly depending on the version of the MCP Server in use when you run it. - + From 200bb5968f014e0b0925f30b8fa466c243bd2f56 Mon Sep 17 00:00:00 2001 From: Ali Hashemi <14126952+hashemix@users.noreply.github.com> Date: Mon, 13 Oct 2025 19:32:02 -0300 Subject: [PATCH 9/9] chore: release main (#105) * chore: release main * chore: update Cargo.toml for release * Update CHANGELOG.md --------- Co-authored-by: github-actions[bot] --- .release-manifest.json | 26 +++++++++---------- Cargo.lock | 26 +++++++++---------- Cargo.toml | 2 +- crates/rust-mcp-extra/CHANGELOG.md | 9 +++++++ crates/rust-mcp-extra/Cargo.toml | 4 +-- crates/rust-mcp-sdk/CHANGELOG.md | 18 +++++++++++++ crates/rust-mcp-sdk/Cargo.toml | 2 +- crates/rust-mcp-transport/CHANGELOG.md | 7 +++++ crates/rust-mcp-transport/Cargo.toml | 2 +- .../Cargo.toml | 2 +- .../hello-world-mcp-server-stdio/Cargo.toml | 2 +- .../Cargo.toml | 2 +- .../Cargo.toml | 2 +- .../simple-mcp-client-sse-core/Cargo.toml | 2 +- examples/simple-mcp-client-sse/Cargo.toml | 2 +- .../simple-mcp-client-stdio-core/Cargo.toml | 2 +- examples/simple-mcp-client-stdio/Cargo.toml | 2 +- .../Cargo.toml | 2 +- .../Cargo.toml | 2 +- 19 files changed, 75 insertions(+), 41 deletions(-) create mode 100644 crates/rust-mcp-extra/CHANGELOG.md diff --git a/.release-manifest.json b/.release-manifest.json index e96fb0f..c030e49 100644 --- a/.release-manifest.json +++ b/.release-manifest.json @@ -1,16 +1,16 @@ { - "crates/rust-mcp-sdk": "0.7.0", + "crates/rust-mcp-sdk": "0.7.1", "crates/rust-mcp-macros": "0.5.2", - "crates/rust-mcp-transport": "0.6.0", - "crates/rust-mcp-extra": "0.1.0", - "examples/hello-world-mcp-server-stdio": "0.1.29", - "examples/hello-world-mcp-server-stdio-core": "0.1.20", - "examples/simple-mcp-client-stdio": "0.1.29", - "examples/simple-mcp-client-stdio-core": "0.1.29", - "examples/hello-world-server-streamable-http-core": "0.1.20", - "examples/hello-world-server-streamable-http": "0.1.32", - "examples/simple-mcp-client-sse-core": "0.1.20", - "examples/simple-mcp-client-sse": "0.1.23", - "examples/simple-mcp-client-streamable-http": "0.1.1", - "examples/simple-mcp-client-streamable-http-core": "0.1.1" + "crates/rust-mcp-transport": "0.6.1", + "crates/rust-mcp-extra": "0.1.1", + "examples/hello-world-mcp-server-stdio": "0.1.30", + "examples/hello-world-mcp-server-stdio-core": "0.1.21", + "examples/simple-mcp-client-stdio": "0.1.30", + "examples/simple-mcp-client-stdio-core": "0.1.30", + "examples/hello-world-server-streamable-http-core": "0.1.21", + "examples/hello-world-server-streamable-http": "0.1.33", + "examples/simple-mcp-client-sse-core": "0.1.21", + "examples/simple-mcp-client-sse": "0.1.24", + "examples/simple-mcp-client-streamable-http": "0.1.2", + "examples/simple-mcp-client-streamable-http-core": "0.1.2" } diff --git a/Cargo.lock b/Cargo.lock index 34196f8..6fc3e9d 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -681,7 +681,7 @@ checksum = "5419bdc4f6a9207fbeba6d11b604d481addf78ecd10c11ad51e76c2f6482748d" [[package]] name = "hello-world-mcp-server-stdio" -version = "0.1.29" +version = "0.1.30" dependencies = [ "async-trait", "futures", @@ -695,7 +695,7 @@ dependencies = [ [[package]] name = "hello-world-mcp-server-stdio-core" -version = "0.1.20" +version = "0.1.21" dependencies = [ "async-trait", "futures", @@ -707,7 +707,7 @@ dependencies = [ [[package]] name = "hello-world-server-streamable-http" -version = "0.1.32" +version = "0.1.33" dependencies = [ "async-trait", "futures", @@ -721,7 +721,7 @@ dependencies = [ [[package]] name = "hello-world-server-streamable-http-core" -version = "0.1.20" +version = "0.1.21" dependencies = [ "async-trait", "futures", @@ -1693,7 +1693,7 @@ dependencies = [ [[package]] name = "rust-mcp-extra" -version = "0.1.0" +version = "0.1.1" dependencies = [ "base64 0.22.1", "nanoid", @@ -1727,7 +1727,7 @@ dependencies = [ [[package]] name = "rust-mcp-sdk" -version = "0.7.0" +version = "0.7.1" dependencies = [ "async-trait", "axum", @@ -1756,7 +1756,7 @@ dependencies = [ [[package]] name = "rust-mcp-transport" -version = "0.6.0" +version = "0.6.1" dependencies = [ "async-trait", "bytes", @@ -1951,7 +1951,7 @@ dependencies = [ [[package]] name = "simple-mcp-client-sse" -version = "0.1.23" +version = "0.1.24" dependencies = [ "async-trait", "colored", @@ -1967,7 +1967,7 @@ dependencies = [ [[package]] name = "simple-mcp-client-sse-core" -version = "0.1.20" +version = "0.1.21" dependencies = [ "async-trait", "colored", @@ -1983,7 +1983,7 @@ dependencies = [ [[package]] name = "simple-mcp-client-stdio" -version = "0.1.29" +version = "0.1.30" dependencies = [ "async-trait", "colored", @@ -1997,7 +1997,7 @@ dependencies = [ [[package]] name = "simple-mcp-client-stdio-core" -version = "0.1.29" +version = "0.1.30" dependencies = [ "async-trait", "colored", @@ -2011,7 +2011,7 @@ dependencies = [ [[package]] name = "simple-mcp-client-streamable-http" -version = "0.1.1" +version = "0.1.2" dependencies = [ "async-trait", "colored", @@ -2027,7 +2027,7 @@ dependencies = [ [[package]] name = "simple-mcp-client-streamable-http-core" -version = "0.1.1" +version = "0.1.2" dependencies = [ "async-trait", "colored", diff --git a/Cargo.toml b/Cargo.toml index 791d4f9..26fb067 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ members = [ [workspace.dependencies] # Workspace member crates -rust-mcp-transport = { version = "0.6.0", path = "crates/rust-mcp-transport", default-features = false } +rust-mcp-transport = { version = "0.6.1", path = "crates/rust-mcp-transport", default-features = false } rust-mcp-sdk = { path = "crates/rust-mcp-sdk", default-features = false } rust-mcp-macros = { version = "0.5.2", path = "crates/rust-mcp-macros", default-features = false } rust-mcp-extra = { version="0.1.0", path = "crates/rust-mcp-extra", default-features = false } diff --git a/crates/rust-mcp-extra/CHANGELOG.md b/crates/rust-mcp-extra/CHANGELOG.md new file mode 100644 index 0000000..7fd2cb3 --- /dev/null +++ b/crates/rust-mcp-extra/CHANGELOG.md @@ -0,0 +1,9 @@ +# Changelog + +## [0.1.1](https://github.com/rust-mcp-stack/rust-mcp-sdk/compare/rust-mcp-extra-v0.1.0...rust-mcp-extra-v0.1.1) (2025-10-13) + + +### 🚀 Features + +* Initial release v0.1.0 ([4c08beb](https://github.com/rust-mcp-stack/rust-mcp-sdk/commit/4c08beb73b102c77e65b724b284008071b7f5ef4)) +* Introduce `rust-mcp-extra` crate for extended id, session, and event store support ([#108](https://github.com/rust-mcp-stack/rust-mcp-sdk/issues/108)) ([5fddd3c](https://github.com/rust-mcp-stack/rust-mcp-sdk/commit/5fddd3cee12d622c19c23a67d4f381475d914031)) diff --git a/crates/rust-mcp-extra/Cargo.toml b/crates/rust-mcp-extra/Cargo.toml index b346da3..982da64 100644 --- a/crates/rust-mcp-extra/Cargo.toml +++ b/crates/rust-mcp-extra/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rust-mcp-extra" -version = "0.1.0" +version = "0.1.1" authors = ["Ali Hashemi"] categories = ["api-bindings", "development-tools", "asynchronous", "parsing"] description = "A companion crate to rust-mcp-sdk offering extra implementations of core traits like SessionStore and EventStore, enabling integration with various database backends and third-party platforms such as AWS Lambda for serverless and cloud-native MCP applications." @@ -12,7 +12,7 @@ edition = "2024" exclude = ["assets/", "tests/"] [dependencies] -rust-mcp-sdk = { version = "0.7" , path = "../rust-mcp-sdk", default-features = false, features=["server","2025_06_18"] } +rust-mcp-sdk = { version = "0.7.1" , path = "../rust-mcp-sdk", default-features = false, features=["server","2025_06_18"] } base64 = {workspace = true, optional=true} nanoid = {version="0.4", optional=true} diff --git a/crates/rust-mcp-sdk/CHANGELOG.md b/crates/rust-mcp-sdk/CHANGELOG.md index 4fde908..7d56e22 100644 --- a/crates/rust-mcp-sdk/CHANGELOG.md +++ b/crates/rust-mcp-sdk/CHANGELOG.md @@ -1,5 +1,23 @@ # Changelog +## [0.7.1](https://github.com/rust-mcp-stack/rust-mcp-sdk/compare/rust-mcp-sdk-v0.7.0...rust-mcp-sdk-v0.7.1) (2025-10-13) + + +### 🚀 Features + +* Add server_supports_completion method ([#104](https://github.com/rust-mcp-stack/rust-mcp-sdk/issues/104)) ([6268726](https://github.com/rust-mcp-stack/rust-mcp-sdk/commit/62687262a30cce0928435c153b6016d56e85b8ee)) +* **server:** Decouple core logic from HTTP server for improved architecture ([#106](https://github.com/rust-mcp-stack/rust-mcp-sdk/issues/106)) ([d10488b](https://github.com/rust-mcp-stack/rust-mcp-sdk/commit/d10488bac739bf28b45d636129eb598d4dd87fd2)) + + +### ⚡ Performance Improvements + +* Remove unnecessary mutex in the session store ([ea5d580](https://github.com/rust-mcp-stack/rust-mcp-sdk/commit/ea5d58013ac051f2bbe7e9f5b3a20a3220e66c9b)) + + +### 🚜 Code Refactoring + +* Expose Store Traits and add ToMcpServerHandler for Improved Framework Flexibility ([#107](https://github.com/rust-mcp-stack/rust-mcp-sdk/issues/107)) ([5bf54d6](https://github.com/rust-mcp-stack/rust-mcp-sdk/commit/5bf54d6d442d6cb854242697fa50c29bca0b8483)) + ## [0.7.0](https://github.com/rust-mcp-stack/rust-mcp-sdk/compare/rust-mcp-sdk-v0.6.3...rust-mcp-sdk-v0.7.0) (2025-09-19) diff --git a/crates/rust-mcp-sdk/Cargo.toml b/crates/rust-mcp-sdk/Cargo.toml index be70e07..0ecc527 100644 --- a/crates/rust-mcp-sdk/Cargo.toml +++ b/crates/rust-mcp-sdk/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rust-mcp-sdk" -version = "0.7.0" +version = "0.7.1" authors = ["Ali Hashemi"] categories = ["data-structures", "parser-implementations", "parsing"] description = "An asynchronous SDK and framework for building MCP-Servers and MCP-Clients, leveraging the rust-mcp-schema for type safe MCP Schema Objects." diff --git a/crates/rust-mcp-transport/CHANGELOG.md b/crates/rust-mcp-transport/CHANGELOG.md index 2d692b4..d3170b9 100644 --- a/crates/rust-mcp-transport/CHANGELOG.md +++ b/crates/rust-mcp-transport/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +## [0.6.1](https://github.com/rust-mcp-stack/rust-mcp-sdk/compare/rust-mcp-transport-v0.6.0...rust-mcp-transport-v0.6.1) (2025-10-13) + + +### 🚀 Features + +* **server:** Decouple core logic from HTTP server for improved architecture ([#106](https://github.com/rust-mcp-stack/rust-mcp-sdk/issues/106)) ([d10488b](https://github.com/rust-mcp-stack/rust-mcp-sdk/commit/d10488bac739bf28b45d636129eb598d4dd87fd2)) + ## [0.6.0](https://github.com/rust-mcp-stack/rust-mcp-sdk/compare/rust-mcp-transport-v0.5.0...rust-mcp-transport-v0.6.0) (2025-09-19) diff --git a/crates/rust-mcp-transport/Cargo.toml b/crates/rust-mcp-transport/Cargo.toml index 8331eaf..e9605fc 100644 --- a/crates/rust-mcp-transport/Cargo.toml +++ b/crates/rust-mcp-transport/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "rust-mcp-transport" -version = "0.6.0" +version = "0.6.1" authors = ["Ali Hashemi"] categories = ["data-structures"] description = "Transport implementations for the MCP (Model Context Protocol) within the rust-mcp-sdk ecosystem, enabling asynchronous data exchange and efficient message handling between MCP clients and servers." diff --git a/examples/hello-world-mcp-server-stdio-core/Cargo.toml b/examples/hello-world-mcp-server-stdio-core/Cargo.toml index f37d4c4..5166763 100644 --- a/examples/hello-world-mcp-server-stdio-core/Cargo.toml +++ b/examples/hello-world-mcp-server-stdio-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hello-world-mcp-server-stdio-core" -version = "0.1.20" +version = "0.1.21" edition = "2021" publish = false license = "MIT" diff --git a/examples/hello-world-mcp-server-stdio/Cargo.toml b/examples/hello-world-mcp-server-stdio/Cargo.toml index 1947dce..397371f 100644 --- a/examples/hello-world-mcp-server-stdio/Cargo.toml +++ b/examples/hello-world-mcp-server-stdio/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hello-world-mcp-server-stdio" -version = "0.1.29" +version = "0.1.30" edition = "2021" publish = false license = "MIT" diff --git a/examples/hello-world-server-streamable-http-core/Cargo.toml b/examples/hello-world-server-streamable-http-core/Cargo.toml index 44d1559..2e1010f 100644 --- a/examples/hello-world-server-streamable-http-core/Cargo.toml +++ b/examples/hello-world-server-streamable-http-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hello-world-server-streamable-http-core" -version = "0.1.20" +version = "0.1.21" edition = "2021" publish = false license = "MIT" diff --git a/examples/hello-world-server-streamable-http/Cargo.toml b/examples/hello-world-server-streamable-http/Cargo.toml index fa4e3c6..db5212d 100644 --- a/examples/hello-world-server-streamable-http/Cargo.toml +++ b/examples/hello-world-server-streamable-http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "hello-world-server-streamable-http" -version = "0.1.32" +version = "0.1.33" edition = "2021" publish = false license = "MIT" diff --git a/examples/simple-mcp-client-sse-core/Cargo.toml b/examples/simple-mcp-client-sse-core/Cargo.toml index 05654fc..46b6790 100644 --- a/examples/simple-mcp-client-sse-core/Cargo.toml +++ b/examples/simple-mcp-client-sse-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple-mcp-client-sse-core" -version = "0.1.20" +version = "0.1.21" edition = "2021" publish = false license = "MIT" diff --git a/examples/simple-mcp-client-sse/Cargo.toml b/examples/simple-mcp-client-sse/Cargo.toml index 0720afe..a2f4a73 100644 --- a/examples/simple-mcp-client-sse/Cargo.toml +++ b/examples/simple-mcp-client-sse/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple-mcp-client-sse" -version = "0.1.23" +version = "0.1.24" edition = "2021" publish = false license = "MIT" diff --git a/examples/simple-mcp-client-stdio-core/Cargo.toml b/examples/simple-mcp-client-stdio-core/Cargo.toml index f7dc568..2db9211 100644 --- a/examples/simple-mcp-client-stdio-core/Cargo.toml +++ b/examples/simple-mcp-client-stdio-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple-mcp-client-stdio-core" -version = "0.1.29" +version = "0.1.30" edition = "2021" publish = false license = "MIT" diff --git a/examples/simple-mcp-client-stdio/Cargo.toml b/examples/simple-mcp-client-stdio/Cargo.toml index 7bbd890..9560e88 100644 --- a/examples/simple-mcp-client-stdio/Cargo.toml +++ b/examples/simple-mcp-client-stdio/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple-mcp-client-stdio" -version = "0.1.29" +version = "0.1.30" edition = "2021" publish = false license = "MIT" diff --git a/examples/simple-mcp-client-streamable-http-core/Cargo.toml b/examples/simple-mcp-client-streamable-http-core/Cargo.toml index c8b3464..b53824c 100644 --- a/examples/simple-mcp-client-streamable-http-core/Cargo.toml +++ b/examples/simple-mcp-client-streamable-http-core/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple-mcp-client-streamable-http-core" -version = "0.1.1" +version = "0.1.2" edition = "2021" publish = false license = "MIT" diff --git a/examples/simple-mcp-client-streamable-http/Cargo.toml b/examples/simple-mcp-client-streamable-http/Cargo.toml index bf2827a..3a5fa02 100644 --- a/examples/simple-mcp-client-streamable-http/Cargo.toml +++ b/examples/simple-mcp-client-streamable-http/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple-mcp-client-streamable-http" -version = "0.1.1" +version = "0.1.2" edition = "2021" publish = false license = "MIT"