From 3daf11f5d128eb57eea1d7dea0419c638d3912d6 Mon Sep 17 00:00:00 2001 From: Kyle Simpson Date: Sun, 21 May 2023 13:50:54 +0100 Subject: [PATCH] Driver: Implement audio scheduler (#179) This PR implements a custom scheduler for audio threads, which reduces thread use and (often) memory consumption. To save threads and memory (e.g., packet buffer allocations), Songbird parks Mixer tasks which do not have any live Tracks. These are now all co-located on a single async 'Idle' task. This task is responsible for managing UDP keepalive messages for each task, maintaining event state, and executing any Mixer task messages. Whenever any message arrives which adds a `Track`, the mixer task is moved to a live thread. The Idle task inspects task counts and execution time on each thread, choosing the first live thread with room, and creating a new one if needed. Each live thread is responsible for running as many live mixers as it can in a single tick every 20ms: this currently defaults to 16 mixers per thread, but is user-configurable. A live thread also stores RTP packet blocks to be written into by each sub-task. Each live thread has a conservative limit of 18ms that it will aim to stay under: if all work takes longer than this, it will offload the task with the highest mixing cost once per tick onto another (possibly new) live worker thread. --- ARCHITECTURE.md | 29 +- Cargo.toml | 11 +- benches/base-mixing.rs | 1 + benches/mixing-task.rs | 385 +++++++----- examples/serenity/voice/src/main.rs | 3 +- images/arch.afdesign | Bin 54175 -> 81173 bytes images/driver.png | Bin 156491 -> 115598 bytes images/driver.svg | 79 +-- images/gateway.png | Bin 131681 -> 131680 bytes images/scheduler.png | Bin 0 -> 205653 bytes images/scheduler.svg | 329 +++++++++++ src/config.rs | 44 +- src/constants.rs | 3 + src/driver/bench_internals.rs | 4 + src/driver/mod.rs | 13 + src/driver/scheduler/config.rs | 66 +++ src/driver/scheduler/idle.rs | 319 ++++++++++ src/driver/scheduler/live.rs | 821 ++++++++++++++++++++++++++ src/driver/scheduler/mod.rs | 174 ++++++ src/driver/scheduler/stats.rs | 134 +++++ src/driver/scheduler/task.rs | 187 ++++++ src/driver/tasks/message/mixer.rs | 6 + src/driver/tasks/mixer/mod.rs | 468 ++++++--------- src/driver/tasks/mixer/pool.rs | 2 +- src/driver/tasks/mod.rs | 13 +- src/driver/test_impls.rs | 225 +++++++ src/error.rs | 5 +- src/input/adapters/async_adapter.rs | 2 +- src/input/sources/file.rs | 48 +- src/lib.rs | 2 + src/shards.rs | 3 + utils/src/lib.rs => src/test_utils.rs | 2 + utils/Cargo.toml | 10 - utils/README.md | 1 - 34 files changed, 2828 insertions(+), 561 deletions(-) create mode 100644 images/scheduler.png create mode 100644 images/scheduler.svg create mode 100644 src/driver/scheduler/config.rs create mode 100644 src/driver/scheduler/idle.rs create mode 100644 src/driver/scheduler/live.rs create mode 100644 src/driver/scheduler/mod.rs create mode 100644 src/driver/scheduler/stats.rs create mode 100644 src/driver/scheduler/task.rs create mode 100644 src/driver/test_impls.rs rename utils/src/lib.rs => src/test_utils.rs (98%) delete mode 100644 utils/Cargo.toml delete mode 100644 utils/README.md diff --git a/ARCHITECTURE.md b/ARCHITECTURE.md index 78855d5..30647a3 100644 --- a/ARCHITECTURE.md +++ b/ARCHITECTURE.md @@ -35,7 +35,7 @@ Audio processing remains synchronous for the following reasons: Songbird subdivides voice connection handling into several long- and short-lived tasks. * **Core**: Handles and directs commands received from the driver. Responsible for connection/reconnection, and creates network tasks. -* **Mixer**: Combines audio sources together, Opus encodes the result, and encrypts the built packets every 20ms. Responsible for handling track commands/state, and transmitting completed voice packets and keepalive messages. ***Synchronous***. +* **Mixer**: Combines audio sources together, Opus encodes the result, and encrypts the built packets every 20ms. Responsible for handling track commands/state, and transmitting completed voice packets and keepalive messages. ***Synchronous when live***. * **Thread Pool**: A dynamically sized thread-pool for I/O tasks. Creates lazy tracks using `Compose` if sync creation is needed, otherwise spawns a tokio task. Seek operations always go to the thread pool. ***Synchronous***. * **Disposer**: Used by mixer thread to dispose of data with potentially long/blocking `Drop` implementations (i.e., audio sources). ***Synchronous***. * **Events**: Stores and runs event handlers, tracks event timing, and handles @@ -46,6 +46,33 @@ Songbird subdivides voice connection handling into several long- and short-lived ![](images/driver.png) +## Scheduler +To save threads and memory (e.g., packet buffer allocations), Songbird parks Mixer tasks which do not have any live Tracks. +These are all co-located on a single async task. +This task is responsible for managing UDP keepalive messages for each task, maintaining event state, and executing any Mixer task messages. +Whenever any message arrives which adds a `Track`, the mixer task is moved to a live thread. +The Idle task inspects task counts and execution time on each thread, choosing the first live thread with room, creating a new one if needed. + +Each live thread is responsible for running as many live mixers as it can in a single tick every 20ms: this currently defaults to 16 mixers per thread, but is user-configurable. +A live thread also stores RTP packet blocks to be written into by each sub-task. +Audio threads have a budget of 20ms to complete all message handling, mixing, encoding, and encryption. +*These threads are synchronous, as explained above: the bulk costs (i.e., encoding) are compute-bound work and would block the Tokio executor.* +Mixer logic is handled in this order to minimise deadline variance: +``` +handle idle->live messages +handle all driver->mixer messages +cleanup idle/dead mixers +mix + encode + encrypt all mixers into packet buffer +check for excess packet blocks +sleep 'til next 20ms boundary + +send all packets, adjust RTP fields +handle per-track messages +``` +Each live thread has a conservative limit of 18ms that it will aim to stay under: if all work takes longer than this, it will offload the task with the highest mixing cost once per 20ms tick. + +![](images/scheduler.png) + ``` src/driver/* ``` diff --git a/Cargo.toml b/Cargo.toml index 9e7c675..eb8c101 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,6 +23,7 @@ derivative = "2" discortp = { default-features = false, features = ["discord", "pnet", "rtp"], optional = true, version = "0.5" } flume = { optional = true, version = "0.10" } futures = "0.3" +nohash-hasher = { optional = true, version = "0.2.0" } once_cell = { optional = true, version = "1" } parking_lot = { optional = true, version = "0.12" } pin-project = "1" @@ -62,11 +63,11 @@ version = "0.11" optional = true [dev-dependencies] +byteorder = "1" criterion = "0.4" ntest = "0.9" symphonia = { version = "0.5.2", features = ["aac", "isomp4", "mp3"] } -utils = { path = "utils" } -tokio = { version = "1", features = ["rt", "rt-multi-thread"] } +tokio = { version = "1", features = ["rt", "rt-multi-thread", "test-util"] } [features] # Core features @@ -93,6 +94,7 @@ driver = [ "dep:discortp", "dep:reqwest", "dep:flume", + "dep:nohash-hasher", "dep:once_cell", "dep:parking_lot", "dep:rand", @@ -141,7 +143,10 @@ receive = ["dep:bytes", "discortp?/demux", "discortp?/rtcp"] # Used for docgen/testing/benchmarking. full-doc = ["default", "twilight", "builtin-queue", "receive"] -internals = [] +internals = ["dep:byteorder"] + +[lib] +bench = false [[bench]] name = "base-mixing" diff --git a/benches/base-mixing.rs b/benches/base-mixing.rs index d9e12c3..0eaf7cd 100644 --- a/benches/base-mixing.rs +++ b/benches/base-mixing.rs @@ -6,6 +6,7 @@ use songbird::{ MixMode, }, input::{codecs::*, Input, LiveInput, Parsed}, + test_utils as utils, }; use std::io::Cursor; use symphonia_core::audio::{AudioBuffer, Layout, SampleBuffer, Signal, SignalSpec}; diff --git a/benches/mixing-task.rs b/benches/mixing-task.rs index 2da13d6..7803154 100644 --- a/benches/mixing-task.rs +++ b/benches/mixing-task.rs @@ -16,164 +16,23 @@ use songbird::{ bench_internals::{ self, mixer::{state::InputState, Mixer}, + scheduler::*, task_message::*, CryptoState, }, Bitrate, + DummyMixer, + Listeners, + MockScheduler, }, input::{cached::Compressed, codecs::*, Input, RawAdapter}, tracks, Config, }; -use std::{io::Cursor, net::UdpSocket}; +use std::{io::Cursor, net::UdpSocket, sync::Arc}; use tokio::runtime::{Handle, Runtime}; use xsalsa20poly1305::{KeyInit, XSalsa20Poly1305 as Cipher, KEY_SIZE}; -// create a dummied task + interconnect. -// measure perf at varying numbers of sources (binary 1--64) without passthrough support. - -fn dummied_mixer( - handle: Handle, - softclip: bool, -) -> ( - Mixer, - ( - Receiver, - Receiver, - Receiver, - ), -) { - let (mix_tx, mix_rx) = flume::unbounded(); - let (core_tx, core_rx) = flume::unbounded(); - let (event_tx, event_rx) = flume::unbounded(); - - let (udp_receiver_tx, udp_receiver_rx) = flume::unbounded(); - - let ic = Interconnect { - core: core_tx, - events: event_tx, - mixer: mix_tx, - }; - - let config = Config::default().use_softclip(softclip); - - let mut out = Mixer::new(mix_rx, handle, ic, config); - - let udp_tx = UdpSocket::bind("0.0.0.0:0").expect("Failed to create send port."); - udp_tx - .connect("127.0.0.1:5316") - .expect("Failed to connect to local dest port."); - - let fake_conn = MixerConnection { - cipher: Cipher::new_from_slice(&vec![0u8; KEY_SIZE]).unwrap(), - crypto_state: CryptoState::Normal, - udp_rx: udp_receiver_tx, - udp_tx, - }; - - out.conn_active = Some(fake_conn); - - out.skip_sleep = true; - - (out, (core_rx, event_rx, udp_receiver_rx)) -} - -fn mixer_float( - num_tracks: usize, - handle: Handle, - softclip: bool, -) -> ( - Mixer, - ( - Receiver, - Receiver, - Receiver, - ), -) { - let mut out = dummied_mixer(handle, softclip); - - let floats = utils::make_sine(10 * STEREO_FRAME_SIZE, true); - - for i in 0..num_tracks { - let input: Input = RawAdapter::new(Cursor::new(floats.clone()), 48_000, 2).into(); - let promoted = match input { - Input::Live(l, _) => l.promote(&CODEC_REGISTRY, &PROBE), - _ => panic!("Failed to create a guaranteed source."), - }; - let (handle, mut ctx) = - bench_internals::track_context(Input::Live(promoted.unwrap(), None).into()); - out.0.add_track(ctx); - } - - out -} - -fn mixer_float_drop( - num_tracks: usize, - handle: Handle, -) -> ( - Mixer, - ( - Receiver, - Receiver, - Receiver, - ), -) { - let mut out = dummied_mixer(handle, true); - - for i in 0..num_tracks { - let floats = utils::make_sine((i / 5) * STEREO_FRAME_SIZE, true); - let input: Input = RawAdapter::new(Cursor::new(floats.clone()), 48_000, 2).into(); - let promoted = match input { - Input::Live(l, _) => l.promote(&CODEC_REGISTRY, &PROBE), - _ => panic!("Failed to create a guaranteed source."), - }; - let (handle, mut ctx) = - bench_internals::track_context(Input::Live(promoted.unwrap(), None).into()); - out.0.add_track(ctx); - } - - out -} - -fn mixer_opus( - handle: Handle, -) -> ( - Mixer, - ( - Receiver, - Receiver, - Receiver, - ), -) { - // should add a single opus-based track. - // make this fully loaded to prevent any perf cost there. - let mut out = dummied_mixer(handle.clone(), false); - - let floats = utils::make_sine(6 * STEREO_FRAME_SIZE, true); - - let input: Input = RawAdapter::new(Cursor::new(floats), 48_000, 2).into(); - - let mut src = handle.block_on(async move { - Compressed::new(input, Bitrate::BitsPerSecond(128_000)) - .await - .expect("These parameters are well-defined.") - }); - - src.raw.load_all(); - - let promoted = match src.into() { - Input::Live(l, _) => l.promote(&CODEC_REGISTRY, &PROBE), - _ => panic!("Failed to create a guaranteed source."), - }; - let (handle, mut ctx) = - bench_internals::track_context(Input::Live(promoted.unwrap(), None).into()); - - out.0.add_track(ctx); - - out -} - fn no_passthrough(c: &mut Criterion) { let rt = Runtime::new().unwrap(); @@ -187,9 +46,14 @@ fn no_passthrough(c: &mut Criterion) { &track_count, |b, i| { b.iter_batched_ref( - || black_box(mixer_float(*i, rt.handle().clone(), true)), + || { + black_box(MockScheduler::from_mixers( + None, + vec![Mixer::test_with_float(*i, rt.handle().clone(), true)], + )) + }, |input| { - black_box(input.0.cycle()); + black_box(input.0.core.run_once()); }, BatchSize::SmallInput, ) @@ -200,9 +64,14 @@ fn no_passthrough(c: &mut Criterion) { &track_count, |b, i| { b.iter_batched_ref( - || black_box(mixer_float(*i, rt.handle().clone(), false)), + || { + black_box(MockScheduler::from_mixers( + None, + vec![Mixer::test_with_float(*i, rt.handle().clone(), false)], + )) + }, |input| { - black_box(input.0.cycle()); + black_box(input.0.core.run_once()); }, BatchSize::SmallInput, ) @@ -213,10 +82,71 @@ fn no_passthrough(c: &mut Criterion) { &track_count, |b, i| { b.iter_batched_ref( - || black_box(mixer_float(*i, rt.handle().clone(), true)), + || { + black_box(MockScheduler::from_mixers( + None, + vec![Mixer::test_with_float(*i, rt.handle().clone(), true)], + )) + }, |input| { for i in 0..5 { - black_box(input.0.cycle()); + black_box(input.0.core.run_once()); + } + }, + BatchSize::SmallInput, + ) + }, + ); + } + + group.finish(); +} + +fn no_passthrough_multimix(c: &mut Criterion) { + let rt = Runtime::new().unwrap(); + + const N_MIXERS: usize = 16; + let mut group = c.benchmark_group(format!("Float Input (No Passthrough, {N_MIXERS} mixers)")); + + for shift in 0..=2 { + let track_count = 1 << shift; + + group.bench_with_input( + BenchmarkId::new("Single Packet (No Soft-Clip)", track_count), + &track_count, + |b, i| { + b.iter_batched_ref( + || { + black_box(MockScheduler::from_mixers( + None, + (0..N_MIXERS) + .map(|_| Mixer::test_with_float(*i, rt.handle().clone(), false)) + .collect(), + )) + }, + |input| { + black_box(input.0.core.run_once()); + }, + BatchSize::SmallInput, + ) + }, + ); + group.bench_with_input( + BenchmarkId::new("n=5 Packets", track_count), + &track_count, + |b, i| { + b.iter_batched_ref( + || { + black_box(MockScheduler::from_mixers( + None, + (0..N_MIXERS) + .map(|_| Mixer::test_with_float(*i, rt.handle().clone(), false)) + .collect(), + )) + }, + |input| { + for i in 0..5 { + black_box(input.0.core.run_once()); } }, BatchSize::SmallInput, @@ -235,19 +165,29 @@ fn passthrough(c: &mut Criterion) { group.bench_function("Single Packet", |b| { b.iter_batched_ref( - || black_box(mixer_opus(rt.handle().clone())), + || { + black_box(MockScheduler::from_mixers( + None, + vec![Mixer::test_with_opus(rt.handle().clone())], + )) + }, |input| { - black_box(input.0.cycle()); + black_box(input.0.core.run_once()); }, BatchSize::SmallInput, ) }); group.bench_function("n=5 Packets", |b| { b.iter_batched_ref( - || black_box(mixer_opus(rt.handle().clone())), + || { + black_box(MockScheduler::from_mixers( + None, + vec![Mixer::test_with_opus(rt.handle().clone())], + )) + }, |input| { for i in 0..5 { - black_box(input.0.cycle()); + black_box(input.0.core.run_once()); } }, BatchSize::SmallInput, @@ -257,15 +197,76 @@ fn passthrough(c: &mut Criterion) { group.finish(); } +fn passthrough_multimix(c: &mut Criterion) { + let rt = Runtime::new().unwrap(); + + const N_MIXERS: usize = 16; + let mut group = c.benchmark_group(format!("Opus Input (Passthrough, {N_MIXERS} mixers)")); + + for shift in 0..=2 { + let track_count = 1 << shift; + + group.bench_with_input( + BenchmarkId::new("Single Packet (No Soft-Clip)", track_count), + &track_count, + |b, i| { + b.iter_batched_ref( + || { + black_box(MockScheduler::from_mixers( + None, + (0..N_MIXERS) + .map(|_| Mixer::test_with_opus(rt.handle().clone())) + .collect(), + )) + }, + |input| { + black_box(input.0.core.run_once()); + }, + BatchSize::SmallInput, + ) + }, + ); + group.bench_with_input( + BenchmarkId::new("n=5 Packets", track_count), + &track_count, + |b, i| { + b.iter_batched_ref( + || { + black_box(MockScheduler::from_mixers( + None, + (0..N_MIXERS) + .map(|_| Mixer::test_with_opus(rt.handle().clone())) + .collect(), + )) + }, + |input| { + for i in 0..5 { + black_box(input.0.core.run_once()); + } + }, + BatchSize::SmallInput, + ) + }, + ); + } + + group.finish(); +} + fn culling(c: &mut Criterion) { let rt = Runtime::new().unwrap(); c.bench_function("Worst-case Track Culling (15 tracks, 5 pkts)", |b| { b.iter_batched_ref( - || black_box(mixer_float_drop(15, rt.handle().clone())), + || { + black_box(MockScheduler::from_mixers( + None, + vec![Mixer::test_with_float_drop(15, rt.handle().clone())], + )) + }, |input| { for i in 0..5 { - black_box(input.0.cycle()); + black_box(input.0.core.run_once()); } }, BatchSize::SmallInput, @@ -273,5 +274,69 @@ fn culling(c: &mut Criterion) { }); } -criterion_group!(benches, no_passthrough, passthrough, culling); -criterion_main!(benches); +fn task_culling(c: &mut Criterion) { + let rt = Runtime::new().unwrap(); + + const N_MIXERS: usize = 8; + + c.bench_function("Live Mixer Thread Culling", |b| { + b.iter_batched_ref( + || { + black_box(MockScheduler::from_mixers( + None, + (0..N_MIXERS) + .map(|_| Mixer::test_with_opus(rt.handle().clone())) + .collect(), + )) + }, + |input| { + black_box(input.0.core.remove_task(0)); + }, + BatchSize::SmallInput, + ) + }); + + c.bench_function("Live Mixer Thread Culling (Practical)", |b| { + b.iter_batched_ref( + || { + black_box(MockScheduler::from_mixers( + None, + (0..N_MIXERS) + .map(|_| Mixer::test_with_opus(rt.handle().clone())) + .collect(), + )) + }, + |input| { + black_box({ + input.0.core.mark_for_cull(0); + input.0.core.mark_for_cull(1); + input.0.core.mark_for_cull(4); + input.0.core.demote_and_remove_mixers(); + }); + }, + BatchSize::SmallInput, + ) + }); + + c.bench_function("Live Mixer Thread Culling (Practical, NoDel)", |b| { + b.iter_batched_ref( + || { + black_box(MockScheduler::from_mixers( + None, + (0..N_MIXERS) + .map(|_| Mixer::test_with_opus(rt.handle().clone())) + .collect(), + )) + }, + |input| { + black_box(input.0.core.demote_and_remove_mixers()); + }, + BatchSize::SmallInput, + ) + }); +} + +criterion_group!(individual, no_passthrough, passthrough); +criterion_group!(multimix, no_passthrough_multimix, passthrough_multimix); +criterion_group!(deletions, culling, task_culling); +criterion_main!(individual, multimix, deletions); diff --git a/examples/serenity/voice/src/main.rs b/examples/serenity/voice/src/main.rs index e66ed21..8e4377b 100644 --- a/examples/serenity/voice/src/main.rs +++ b/examples/serenity/voice/src/main.rs @@ -31,8 +31,7 @@ use serenity::{ framework::{ standard::{ macros::{command, group}, - Args, - CommandResult, + Args, CommandResult, }, StandardFramework, }, diff --git a/images/arch.afdesign b/images/arch.afdesign index d7ab5a044d7461fffa371e49c09f66958573fbc6..3d32bf277b3bd0afddd47dfb959e10468e7eec3d 100644 GIT binary patch literal 81173 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

9s&&*L(FNxUOEg|OrlzZSo*u3^3cwiRQ&M=} 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

5)Uxz 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 l3ELKQX>1>)fzGp<;hQKn)G?R(qQ zMa+AHwS{}*IoBsFOm2=!>3IQ2Ld+R+N4*&s7%1n%j?)}GBnXGotIr`yGlVjRY3lNJ zM1@(gCN$>xeTY5%^68g&?Xe?ym$?U7eHPN)Lr1{O>gyRb6r2&r zdD?n<7TYSKs#K&#Fk6t7 zod@8B(B)|G`3f#4ohSeK0Q2jcU?KpQkbRc6NF7=a!5FZ<;VcW^4M4(RuVC}Bkj~%GoK;m_-TB}IJ^kbdkyFn7N^HLq%3anRaEbsW zZaRhGm$)zVb9e3X516!p7i2^P)$lqh5QJzy-eCF(-;>m{h!U+*!Ljo>!u$S&8pqg( zk_%o`-rwkdF6tKL#|d%H!feK!7Q2RsFcG36Ijju93ia4r&^ciC2wX!011_$v6)rt` zXcuC$pwo?12vGw#0%%I4E+nhy0e}Dcbx-UtO#-+{1b^Mv_a_R+B!j#@&J-ydp>rMR zdlti?_EV{eVY>|$sSR*VLSQlC$qYpt_;%pzj_Lj}Qqh#w<-Ek8dN=WaNI&N@yCgYT z3m=MOSME^r%h+oW7SD-DG|`I(60LG4BJt+U3`~kWD_)flCHbs%ra8=Gr1_7B{1%y@ zmvNbiO$pkMcni3NFNecNfsu}3f5v7$Jq?cjS*mI#;(qzd{Jz6fgPQYN?Z6X&${?F} zSy*|Z)dI34Qew;nMCffsvS{uql(q@l3(g3nNwEI%I(WD~8D>?eN6v0FGdBl$&Duw{(M(o4-vy=) zy33(-#rkwdK~yWCm4mUR`Z*CKc!9wx{~K1Ufx!yZA4keFPnM2piGJAr^YJ-9b2`Qh z4S_Uv%gz0=Y_`Uc>%5d))LZu;bkL|d&%Y-ddoFYxs{6j<5Q>7ocp4G{`TNYT*&xTp zvnN42Yh7$#k3HwFd;-N0)cx!MOe%*~gUH!i+D!MOtQ zX3fF89wcxEYtYPoL!JU^F$w}{F|nzEQbN2QFQ^SP{+HiZD;t~GXP2E$p9bQoX=z!F zcMhQm(BPl=Dj}qlK>PXK=>BKy()gmKlVspo98j^Ay6go?Zk}$$)@+U&nt0kS%@>ly=`U+V5;4 z^wa9fsJ5b>(C!U6ihh;!-XQCT1qIgC-k))ssVW$9<3HLEj-KVY=YJ9U2*Jk?-datv z`pC5@-+Kmgm&jh6{qPdy*prb5ljMvbCN1MS+}cH83Ba%7Q-CiOekZkS7mR5J;q!YkwHbUp$PX(~bjmefe@}{V zK*R6!^$$l6AD&-X!N|q2%O{PD=oh6cW##wm!KVJe^NmeDY-X^p@VJw+bL+3>T$?}m z4k-R2DuLL+MXt&6MMVY1F#(J>wzE@*dxxwnecgmm&FZhpymQADRTw*}o-aR7W~lJ3 zdQ_N4KEJ~DECuoje;80=0qMkrg*D-=p~2cbkne|X6nao(8jua3C2X8^;8>}{fh{u; zV!w_uK7SK`z&nCbn1=GRJt^f=<6Gxd%lbx}OA(FU6j@)xkgjfsNvf3uDHRHY)vmt0W>@S(9Yg_)IfIU&U}Dj!ll1l6W-3VT>WAoY<(11}jIQ(eq?6kuoz@T@v<=a%-L}U z{Z#0!owpS6HWv5y_d`(BOi6IMd9I-NC5RpVb!Z2UurR0FOu3NMHf}3O9){ehkSE>Xa?$>7 z!KRu`1jol+LcFKW;=-+HBLGzIx=6V$_0I;1i}`&W$Zx>V3#Vn~%j48@CaxjSHXMlWBj$mKV%7`vILR^X3){c2vV<% zzc@&set@8bA+T4bLI_emIl08epu$MFaDxXc`_rD2ot1U$+qbKiic4YA0Mdb$X!8(Q zWq<_CzlziM7omr=2q&m8CdS=bHh*w9Vv0Go`AJt-LKxiKgnsOgnVHy1B(G@DJ_CW8 zu@Rl}&7L@zypGnDsBl(n+~uRUAKE4JoPIWDptbL$%oiy(3^A=d!@0E8SmO{%44^Xz z52-3BFYZ5nyfM+XrJ~Z&$!SZtjo7t6b-wqanp$Rx93-Dr*jY=ZpXv2m<`7q=Of4Tt zkD<}ot$&#H`n8Z9W?2f=9ecyBoGrx{bpD5J7MK@7EMfm5+yf0ZnXA8=5k+hI>j zNIw@P5!X6fTLq+)RKU~(P5~k@2?;yg#BU@gV-OLVst^l&z}!7#c=4Cfw8W$}5)9r3 z`uib34Ymw~I|IQV`tk*QUrY+e{LRz{I~7o+0KfG<`gpl(ZmY5}LRV?&IedAH%OrHJ z=;ur-Pa{TRI;2i&azk+AAaVuiSLHBVD@LXXn5TXtnjoxb_JipTSi8y^936oBi=Wi% zQP|G^oIv*s?uRujfPJv zGWq!cuGrJ=?pG#SSr$qm{)!(slL?^?x|sl0K!gKu1`G{k1Xu+VwKj}TFboX+%cuoL znce57x&VhLOv6xwmWBpue{D<4ZNo5MIlH!cwuoYep>&-OP@}qoZ z*6LOue{T536@~S090ix&Tyfz&h1C3TjYdUrF~P8ad@_m;_#>RLz>%EnAP16!7xr=p zptn#`PXhgGcZD$h{Zvg~pahDi@RjKTBA@Mqk-8zJEk+**OA^l(k@0jlmaWD zIbaY3TTjnfEHfB|mtLrL!Z1o3$*E&qWoK%AX3|j4-1(Y`0w1X=bSuIqpA%gP9B5wD zJf|UN#l(TS^um+ClE5BGNk|a9*BNf)<*YiL`-mroL_P ztXSQL2vL^(TA|p3>}+oowSc8CR}vHitP`@jOwCY0CStPoH~aSXe9TP$RNnPnV&cZR zlp008T$i&1UzM$)PC$|2=)Uk1K7z*2w~l^vOZZNlD3a;yvnnJKwgs{fcR#g$W^SW;lBLtD8863l>9LAZ*HogYB zPJ=%*N>_ZcDZ}tK6B=mWzQyuc6GIT;go}|HaxLRH1Ir8SG`AEH%z`i%dpuph7a4M= zXboD}0i%P>g25Lx=*D&Y1(Mj2O9s{wB5Q&?yooc|mt0k^E}z+UE4;pVR}N$2E(YBz zoVh(;!TiK_uz9*xSRQ}(uDU}5C3xK%>wlOO7?39dA~pRyR3eeq>rue`%fsZ&bsaP# zvs~>Xah`;=vfK+UWvsc)urlZtkakE&pB~Xrz+#o7fPzF=10&KP#@;N9BZh0jp$Rd3 zk8AG($l@4X=-Q|`boBJ(T7D)zVKjn-4?1ujN@d?4Mr9~^ALaK4mOgRT1@v(=49|HUG|(2cMBAI08Zd}ndYU4F>l#2zLqCeQ;ya!w*mtYk1_0D32~)rF#Yk%p$z$h zt;hOAi4y5O3Uc^00Q*wCWJ6^e44na-sQu~r6cxdw#-l+xhxqvlU~!Zu7MP==9K;+tcbMha$fc19)~C| zRBwEheh~JXeU_IXE@V&IMM>CCVl~4N0=xHf{4En*-BY+Qw1F7{q21_%$QY@{XbKE= zV(v$$$siR0j{Y2j=At?z9ORlR4X(43K-!w$Bs(JhkEmIUWid1WOXr{qR-^d7)ku0D>y^>=7kUZ}Nv#Q?eAgUdY8+{GG75h^t zuWbYtzdladSrB)afayk>0HA1K)O0ygT8u7*xChXGg?QD%;v%?yvQBS!YQ&UxOVn>d z=IMC6y$~LwLP8-`IWi22$B2D(g&nqG@h(B0Q|Fbx9GkK}d*On6G?K3Da>Re;P8~%U z3jmg(3O$PHib-OotXV>{>JtVLaETsg9ZJa-aZm}-aagw?hopkXo|m8(ojAi z8$a>0B|v@g_K>-jfX1Dl{4abIZacCzzM0;=yR+YrgG+mo|}o6KOjd;K>HgL5a6@+8nNR;51y(2&J@pRO22piYRwE+4hRNk%gnn2 zsFz%SZ`kFtCriQ-bI{eJn~XN8Ege=CU>br_ha+**aHBP-o5-Ekw0E?&ZGs;|?>A?8 zlvyCC`c(?vqo}UlFu3dPCLwoHn%N1&;R&n6a*XcIgdDl8LY3j+sJhDfnUc~i7xb4= z;~cnQ!_Pq@)j)3nongP9h+gKbdx)1g=cCQYqd_y8PQzxk;3E(Y zMKy>M?^Y~fFXD=h$CVp-f_vtiT4uLG{%IVaMM*_vb^JI~CDiIU`T2v0n3&+3K*vl; zO$~_t!2FLB)jqn-<+Ic)6=!l539jS!nHkBXl;6#IrF_|3MXS4|ues%X(&J^2)5}Ua z+(p?tG_t|}VK>b~1ErKrB$L^W^E!q4n02cm5FW*7kLm^^VRmj4@I!Wu!^tHtA&Cyh zBdi13^q~|-Rx#&6p-=7ngg!WWt45(rs!_1`PF)qGu4rAST{P{aTAxOJac}P(RsRx9 zVR-v?!;k{?stVFm2u)yyW2TQHAAXM*NN-T9|nE<9!%x*#0Kj{@NwUhvN5Q zpP%_#aKvG1%&E65kb10uR@+W^|G?^T>51N=b;IpD=)?5Vvio+M)N%G6;ZWkd*EUwd zN+Le;lC-{_N*H(v8RNo!$SY@fKw&O9bf+RjK&dbjEebeREt?o+VJvXlN5rX!%ReVy zy?lAU!tnc%qeo%cga@09@n~ibx%9LHR<`asI?@!3iq#bjBOs0hLBh@LTHmlX&GO99 zPvpZ0*nRKUYmG<}?CpJhz8F^1`vV0JnpUpM?^&%J&Aul*`1GjzgTC{Mw)rdeKyS12 zlAAOB2(Opj`AwT}H!ip<=laxNH#V7E%Y&K!?m>f=lUIXgU}z}m8M2(REzU`F@V+_d zla$yUOvR@dw32d6m-+E*jk z4VfbkAJa_9U@>!u7}&KtKHyxs2JBWyq)mBI-NDebBwfC?H|egHvDALd!-|QyhZ&PG zaE6)FX5i>3J zs7x&faY32UW=&HXFe<3tB{Q=Dgt2Yh?=wnafy>)Lh<#VrL(8m%WXy3mY;|=tS8e%u z0;WTx6w&btHhuO+A7$hFi z)&p*kdQo5W<02~WX-qWhjA;Jy>h9^2F5-wG+9`~_;>i|#JGK{MVu$D z@s9Y3^Fez>2VhCK!2@{2+nQv&PviE{t~t6v&>s^Xr6BD_i@Pkiy~`TIcMsz=e#>it z0>Pqq1X-_~glVYDNarx3BDNdk5MTodi;7~+8kR^nU%0U6POA)tT zLxFcfFIwxRur}QtXgzYS=}@8Pqj2Lrk45PJy+yX8NpXx21Hl(+eB#Rqh=#+$!xQwK zw=l?fd)EUWUjO^^6L4=NEtiW&^R}9_rqj@5fgkbeKIiK=m0D=b`C@J1^W>RQp1 z{9=R4gwowqdKfZns}<&fw+`9w_I+ETJ>@39WB*%+U$O76lTEb=I|`|~Hfc;X>=)m0 z;@_hQYR+}hr$%mvW&uk2XXn3qk2fg7;GKj`x*-d=jxehZz_d+0VY1$l4+U3%K;3#;(|n>z`BXyo#>oW+w!$pp?dT z${4gQJ$>-XmLuVl5 zN1_7oPK{u)VqVc4Q-~Pcg;!QUv2#Uq;!@MqGV9IOr9;?5xem%5d(8d(d@F#K_~)U% zUvRm%w+D0v_o3rgKDE3$aB_VbMIiR2c{67F-Nw;E+ioqk>)X!Odd>@HVkInFH7LqW z^tSGaviWm9R7Ab2`Vft5{Bssl*R=83cSpL+=^XQ8Lw1|&nP*tqtC13*_3GewAM8}{ zX*wzYG2I8D3$YMXkStyWd3hX(SS-W`v!XyQ#HoTYx>&z69mwqAabnnX91>OXFZ(^a zv%?b-4qI7qm7^y;^!$=cxFt$4MK1dV}hw@rTyhnNqjp(kYbwT`bEzs8<|7TiYj8VS7V7{u} zr1l(t6(6uN7);Dl&j{b$Co9{HzV+{Npk6TPT*6De{#bkypO)?sv2yzRH?zu0Hik0S z3vUR7o$w4>3)JGxvE<5rvR^_Ir*EYlix%=8-AhM&e`9Si zE^G(I6F*g31B1;Q?&omP*!}(h?Ir>4;Xb7vXTP!zy|MzC15OBx&|;;o=2N>YmeLhO zqZ;<&C=JcFoGaSX8%2u`8g+K?bYFYpz4L)Yu~O^bO@n{gGq|p^*EtIluQF&-S9eW3 z_7=$4Sn4QKXJ%$z2Qo?1$Gn7T-6x=YFNcSb_@Zt2W2iFD$6D&q)-Lq1a0r|LxgAhP zb|(~|@U215*X>q_I1N>3{fQ?Q66}%#YI`WceTLTh>;iT5^)YKI`^T0)+@Vyf(_myk zssP<YV2hqP-~Z(WKH9y-UC7`>v>D)2DaTIOcL z<9%r^(NDj(Jrg6Youu(TZKa>=+UwJIkq@FN0kzr|Su=RExdLrPc!NWJ{M=2c>4jWlw#f`Lp+cTSZ!$P_A#v zSn08&M`5OPPI05}*DxekMEPcA_5KhUH(O+6fLFX;4`T;8aWO%sAEfF~7XustfP$Rk^2|rF82>W7d9}wgKtFrwsbjdRZ&;m&az_jwulcKxej#` zz=>g0?GI)Ugy5(vKDp}kpP!OQueTN)k<_!c{(wL{_XDV$;D63N{5&%?_z6We;h~O2 zf&1?*ijHo>I<+cy75QZPpR2)NE7^3CnsVH`8mwzxwabc(3^J)5XpYnTC#>KvI0x8U z7H-&=4qzod$N5Y2uwkr>;#s-(v7NgAR{H;5%!8j57exQd1yE<^U5z7*7GUMW2o?)O z^Aff-7E-$Z-VE`deB;)kUTef4`%^a*iKNPk3ze$UDcwU<*)1P0auMC6rN&|NTPJRmP+8|2b6fM{K-0 z)c^YvUFz=teIgp&n&al2|ZfO%S2zzw7m}k z@rS(!3cuOivLxlqe|xvfp96oQVP*==1Qz|Q>HmD)gPT_GYH|B-N4yjlr11Sgq6l|- z!@AB3nd`U)ljDhfwHR&E`z~GS++dl@_E}RrD(7n`L>ADv_D{+75BZH$F-Yd^zwf#5 z4hIY55&kLoE{&6Di0p`B?A`M3dT6%W{H5EC2^0VG`TzWdTrGlmB{E$klnYY(dr)qC znVr3R=Z@5D2yxLheyYQ$feGmu?8s(I#kJVWOxRo%{fgg! zb9iosOkfwz(R+Ha=+A7?+7G*ajJ9Y9+q@uU-UE4%8hCMFnunRd@e^swCt{m%(5~_G z#YHlQT-BzF{|OACj09W8^t_s_cY+=|!BfpoV=uo|B6~%@aTy%$-Ss z=K+f2o7yY)qs?GHT;q=@i`fa5&o7qO#PpamU@rr}s;_r|@e_c&1mCkH=LL`98iQ~u zW-XA-u-mge?rRjLs|VhpWe^Ahp&y%0{L?}Zf@>j~xX|Q*u!(M8-G)l$Q7}T@71^ku zCx{5}?Af#SXNp(pvMDsqo;rQ{ZP5t$*$X?3dbaZN#%`BjTjl!v1DFAXQ#f=1=OJBN zkTTwa7Aky)=Fp?Pc8wluK1dX!Uao%lyE=aol#m+Qp7Y%=nql)yQ_^}2mP%k(!W$B^ z&rB^X#b?Ll9aQV2FRjiAzF7Q+%wU7;)r?ic;~r zoYv+E4GneK%?bwX%^UFd0Ve=US&Q%Rv19yu-EI{xVoFfXqesWh&2?q~-hl14|G48O zFpa~g?e^yZ#YUN1vJ;rg+@FQduoopSFGO}QHDxh$j1v}L$hqczAlmS0;PM2$~C*H@5aLSV-nx&N8WL;rU zM_0kOeUO+DiLK}QhZbxwD7yegOR%2-T#swHd12eCB1&C@by9i<+F4nP&fC?5dBYDFG` zr3Kad;AUh)ok&HPwP3Fa3R(QxO>ArYk_YavX#)AFHM@qi)`IK>74HLg9E@@mQi9-} z;&?q=y9h1{q0oJQ>P8;2KmSXYlJqgq=7Pd%-PaR#l*-Jgo@tpx0+$9Q$&GacU#Wz4t0 zB~eM*o!rz-mf3}o@=Kup009OE=`=e<(Srw>#1aP^<-|P-oN)Jffo`HOgz5Oj>RXD~ z!kf2%0ff!bbp0S{Ije%gDaabutG~dkrxDz`^(MIRJ$#?%{g9{Tjp-2BfQ+)qks}w- za6#2JHd+Ac7Gh{@5`26ivQ$-7#op0fid8s_Gr4R#x@%Y(Fo+C~azaR$Z?VLrBpuc8 zmnR5K*+2UYD-7s(`ZnY#6jC3!6b*o}G?ufh0E0(itoJ<2- z(D`&0nQ)G~V4Erd#SgOZ#T~P@miTQ+PjwHEjF~H*18;P*U)v$%F6+ssaI1V;Z(m%w z^yG2#_&mxq%o)?b@AS@nglgs5D>{wmDBL{*@TCt13-j}_l2WIf!XqOWoft4@IXIYaM=mjH{exr{@evaS39S*yD_&m3QBC{yclqrT&Y_|%k%LtRP_AGms9Z3p+;phWs(cVm6?HwJ zahe=DMIjgFxtkR(fKzXx|h5OpVD|5Gn zfnP98sDg#;HZH>R)}QO&1y~=3-}*pvbHt!Ad_oNjSXL0;n$UN2y4z6<6-zHu}xGSX}aD_(Smfc%>&OmKF<5d{}EaDfP04zyu^N@(JpBSxXt(9`=D`ASMy z{j3nYQ7<7Q?kzcGNJmEpT6u2bQ=whEz5_c0SsWe)II5l$7h_x9{Qd4#dpkxHW9hn+?}Bz{68`9-lMN5gYA(QjthvfcL15gx~Zz_hx<+kMnwKu zS^KpiQvcZ-x(8_Qcgx8Eo4m9%m4*3SFTd~Cnx@=;SqlI$Y9Z%1xMMMGlbZlMFrf*P zXY|D3L%*5H1~bCI4+!JR^VOm}1)8qgJZSZ6n0aBjfO2Y3S>nTJOaUMqC}c;+ANc0-W_J{YDe z;rGsT-;1o1-7sfZ05k<+FQP6U7y_K=lj|oT_&|PvNy&IZk`fZ24}QDFsSai)Bu)4M zLN(O>LR4v(C}~#z5Og!hzc7qjS6lmDg=fq7JmS*14Sg`$5bV&*BBIVLp?Lu*1NB#{}&MzzX6T%1ZsF?!=6U_5`J^By05d7R-2V1@GdaJM5nU z*CoagLjTTArr9Fo707zX?YOvR|ZNkjGM%!-^R}$$Asz&Rt=a?;{~^klKc@oy^NHUNal+h>-*GJk^g@a z_zIChFF=@PfC|i7(6swmBl~ehSU!7R!_4d)^v3wj?%mlhaijAwm?oqp>fUt=jD!s| z5_&O#^BJJ_wM;E-vC)4`3kL{+aff z1n7t8m~a!s2;_d?B%_}cGfoFU5Sb+IfZXoYr%!|?$L}XxDXP4MvF-^_0shFfPd8S?A^AIuO7PTmm^277n2iP3BF_*MwKD z(ut<1W`A|U7X;4}NmY-P3DlLUUL!$MZ@!^0tEpH5V2No^;mijN49>!PZ)u7}%^kdH z!dW%&A|&Ssp?E7nfk`xia0URPglWk?ehlXy+0`8m<0_yrOq(}@GHqaN%($@`KEEJd z!hPuBgw1x4S>bvF`!*iSd@LY%H~d*$ZQWUvfz}R~Bd&jNMZJ0l4>EY)W$%1k+t( zjIT~W>Sp|r5(j84xLo5**T?C=ODM%C+n=ZcUHe*EoPbhDu*Ym%SVwM&?up3|_(sH& z^5j0Nn2uDZ+hb7NZLbP^weS%V8tYWwVC&ASAD{OMez<`UbOH=Rs}>3WM{S?I(Y-~A zdPq)8LoF>i*#~w%V68(UUm|5^~)ID@gKfS1wFX8UxA*mGx4w)tHqQ}WoByERBpN?o1bE}*S^FSAxC6+?qUJdOzrOli>b zJPd70Ywj-~v8$cYSFfh22dZ6YKM45_J{Z7r79t*G--7|nTqTuui1)Z#Z1&zAn9zd5 zxSD7yh)-Ol0ys-grG5PP?VUSQ+9k!sSq{gH&N2(?7`i^Xe_!{A_A0>yFN7+0Ll^iL z(amDm0F!o81l5U?C*d|AUc41{X0Z2kPDTZ{HxAPV;eU zca*~cH3x_C^hb|&rCMBH2{C7Y1AHyEI_%1#{C-9pLtX|_?Se5MP_Y4U@Lhr$IPOF7H$f>2h5*Yg#AnO6&3^dwTybGPvZ;M zs0|?dt~xtTr9}*6D{IHIVl<}FDwjgouB`kC`s%9P4j{0t@q)G}&#Jks9!Z8o0Ss;%| z6NTJH8X9%joM#K&?CmxFG!xc}u+`XXSBN-{KQHSdjotohoS}qPkCk&!o8#LTWk4JN z=iBN~9sNvqQ>!31 z%ASrtCuW1EWWDhAEYuN>WPd4n$h$!sSRTZN!&@!YLYB zzlyWsfz96A2la-Y;GLW9Uhmp?Z?$8GO0URr9SXNr&20cKSo{Az!_(s7vVUShUK@rm zg%qKOR{IYl*v2R&Krub-@X*u+j|d(il_1utc)-BX=_v;6K|`F%&V|uxAnIoCLubsD zpm~VNRAcHQXplP@8Q>PxeR_-e(WC1tL!M>9oDFPjY&hOt!yvTwXL#-4b2tqHc5=xg z8{8l!9$=Ih)L;_RyfDiVPG65tOf11Vx4IQ)r=!z^m}W%BfK@S`-~p0}I)WJVtHS<0 zRC@1=ak9DX1>^UKy>rk4P+0s=L8t8-15$kEtJfHD31dpX$T2K|FD_XpB%9C*i`)l0(YKQAk6h6QMIVs67G;*m#?#G6QXQX9LOB?SBgjG# zfX-zR$0ru(3xF?q0ZRlN3Jnd?^&o*TQ0pa?XJnJ_-UUO`hsRw3SuLz;F)kdxbY2Nm z+6IMAda9F9Z2-_ip@yIvjSIuWMO*dk&uP5CwqG>f3OE_iU6AFxhN4~lFYh8P5d>+Vv7Q#C5KZ)VUh#99W!5$SI&H>PI5E(2o0mb4)*ZWO(dFAE-nN2 z4LMYW)zJDf8b74H*9?WhX~JNMm=|BtLd@kN(t~H_6`YvZ2tdh<<2%kIL^RstA8c72 zFABRh4h(Gjw1HjNmon}_Atc5U2OiptO+W2Ocb8YQF*l_8YM6dDkTC?!J? z4TO?tpfn(}%oR#SNR&inN`^`yDJo-W_{8>o|{N9c%4t z-}e=jEaTJzdNA;RYO+RK;`Oh-vqb+z|@}$ zwQL#i;{R2Jq1y11N%?QkWlm4GnRT4xTTppJx#?ta@bKYTzpSnj?3I*6W3LDWo0itc zC&K>y#nuRI8!QYQEc!KA775L+&3k~$KOT!MKO zC!C1H3GeiT0ZR`S^cy-%1#g5v4_HoagmJf3tESi2e*O%8zJXC8cqipN-HNql(y`o< zV_^`AdMFx9$Ju?)782p_KI6-N_zWC$B{lWL5tW?PFL}o~Im=1&o_(c)5hN{L1`0x; z-TU?{j-FYOC87i$-*orQn^qcoKG(;G=6ZnvrKJghiPv*>2O#P3)6;`>UZeUvd#Rlh zJZO?%LPyFFn)nRB>2t7dDK5l318|)Y1PuW7oN{Yx>*8;vx6kf+!%t!EcBt(2)z2Rm z7HX4US|8=M2)uplfB{^BXKD0}aS&Ch8}QN7u)1Qix%q?a_Lgq4*T5oqfTR}Q+B$CZ zh~0%Q7~7bXo{i;_zJPOwf6rCa%;*FRa4`TetGLjg`lssB!n z+hFdAlcbkd9BBb;ujZ$X(~l7^=DiCbf9JP~`Mt4peSWU@!LPx>;gUn6P!G8&eWDMe zRsGBd?>Dz~g|wIW(`+vNo^^9C^I4r&iM~8bQg}5JVQ=q4>H+f{90ciRP!Um#7KDc0 zi2?ne2n6#hSvx?9SPF!-Nj2VXJ}4?~K>zD-XDUj4en3pn_eEzzZow>L`Fi$IB)fQZ z-F?72^q)s=>lM;HAYrj|PkrSkKer8S!!Q+(Wt^=uma*Hto6S!zC69ZMtpZ<{*W7NI z3!20qk~>s8V>KxAZB<1HbxpPJULkp=g_l!OBI`N=YecI`rtR%#`uNGGqhdky7~fYu z1#lZ^v|(6t4b?ok=??GT^{;nN7C*FS&qJ`AhTcl!$CDy|niG>S$*2haOV*+3^nU1f zZ1w{n{OWsKRXy*(f4 zRplI=Zarhh=d^OaoTnn1>bjdIO0_Ie(}x{R{nvG`RMf^xfRI-#?^~*`2gISIS4e*p zxRr~0U-uqM(;rTj;__&+?o-iszyM5vFPu8{lb(+J@P2gj0!NLVJ<6zgr4zUBU_(!l zw_@|(zfrNx)A`$d4h`7@#6CqmmGV}-?+0brSmDJDaOKD|qdQa=E?V?9+keURg07L* z&fQj%Zje6y#X-N_YG)U_>u#HwVlz-Nu@uJOC_@Q#*R>;*j6?y$s<-(OOE+w|di&{F z)5kvE4Ed=(L5<~nH=D8D(!QDGbMG%)B*}Q@c)k||n+5~Dt=EJZJGVM94mILwiO=}K zI+bMYXN{dxGPD_)A>Tj3246SgL$EjggGu{B{o5)2KVQ9aMXvOVz&9lS$+D1na$=pA z*WId2oUPZn*cIYO>Wi4~_{rOWMwY-k}Ctc^YF`{F{xrzg-Aomu+#@Sb{Vx~bM_y(Tx!KcQ@s)R02{40Xp!~|9 za4PQ`CE>w0?k#J4qGh78qsjSg(0Y}~<&q6e6Xu-ws8V^iB6tQQn`?7qNf>tfOV1A~ z0;gK%^R}!^(cI`y`3m3%A0aJ^JTQxv3)j%yE%EtALhYzi@bzIXDj2_xHt#^$;K6TBTDEIBe9r9k2($^znEmL$C)DBgS3i8r1Z5*)15H?-%-B_>dyA+Px?i2Pa%9BTb;Cu9 z8eVye=gm8C`^OM6b&9_GnO7UPj32x|OClmv;rn^_ZOYx<4=b(C$FirBhZm6fVo`(wCqxQ}^wQxU%9o2phnp8~2T#6eAO0Cr8Rh?Y) z(2(&~0}KP&?Q;RS7XA3JKWop7Lu&hu-nQxjVayr%{y)uSu_n|aQ#vLqTwNRF^nO5O7)zR zlau>+(W;?SI^Lc964f73ag9P=hpzto{U-X&g;Ck-%UTxq8y6(0Tn$h0t?vv|w+$ly z2D=^uO~N;b428e_WT;QXpb^*SwQ8$H;&ITwM(~USsED(P8ymYIlT+VwP;-xN z-BdGcrgnVHw>zyPUXiaS+0ki_6v^E=uB{58Xe;>DzQmyT+PR>rpNLfQPxYZ8sC{7+ zO7QMW4ix!M)|e$D)U!KgzM1Ln-`up*zsL)|-D98qa_^Vij!tkN))E;er(&)-W80ab zo^>L#vv5Gu?IW}Na|#cT%|yD+t37e*eMLpUUpKP3#EZpwg<^Q(k`JS$C50WY>~HdC@Qm)<+MAdk!}4AAxFI ztA11H1>NxU5j*ZIt(asqc)x~Q%hiQ<&pA3|dm0W*nAQl!Z>a3Q&0G?iJ{+`$4`0Cn z?oB=mD|e^bwv#=oBI{QqnI0v)uZBj0;Eb7ah@_^Aqj^Jng}AaDIm|K;b;YiVgh z8x51magvw&EBxJfFgiMN(Fn={wU!4vVoFR@I4@aV-)qhznRC0QLiS8$f(AoNmilwV7dJleZ^3tV=^vt*F$4Xl5a{M5; zMl-)qr%NunCBzGR<6|06Vr1AkcJzr{;3x(NN-T9 z&`6=srCpU9$Uuuu`o{vbnPicIL>7zL*_oy&?C`&~ z9p$>$;#VNi68oZhO|QK#);z`T#jB%!Eg^dd5By;N<_|GY5N#|TD&MLRZO+upiQcns z-(#?i{Dfaf@2YFI`Bi7ao^@z?R1!IKQ{>RikAR|?u8Yfox&8IHf)6yfcv{(oST1^c zd-sj_n6_E&@5bU=-|e(}syD2>U+Kw3x{<7df^J6poYuULzT)PRQ)GLDZ@JS+V7(0N zG0?E+_U!=0#CDJ`1W6GVJz?U%*JC8g#LeEblyz0z#@Ls}xp$he;3+h@rVMl2!@LSi z>lF^BY8x6JD)@j3xw3JK(503f`F!r-P&qr?=sEX!qTfX4solSycD&!{EHNWk8{SMt zY2Vqlwi5x+I7c_RiOUX7Vx$MXcrL8EqGLOl*cN>1bi5>**ktJyd1c!45w2%%Zm%(+ z^d{cYbJTAB60FmEb?NGutmeK8&qpfz%1@eJHX%FM+s$g@It3XwQPEQRR_D1?+^JHd z2U=QP>}l;js$ci^=F;k*Q)Q7SyYvpe5brvu4BEJ%i}fs>+l9Tr$Fg+fJJzo#ode0- zc=570n6@zjo!t27gQ|#a#@FtaTWgL+9}AuV2SR7zl>qB9qQzSvvMDIV> z*2?tPm-yW*3HrFg?Zolp4O3q|e!S2B%>mXE5c$#$y8g<|XQw9h)ljXvcC{veolUvN zH7#$(=Y?wL6I?}#={osX-lvD2E_XQje_~31HZ`??K1*2TyXf_!wf<+g&`f`EF+S*< z+Lm9A?x0#$aha)Z>n12Q%B|v z*p!nAhyV4hZN{<1aZM1(l5g4*5`6S8cK3gBSAg`nkffBy#D_`BVN@Ny=Hl$LY6phH zotqc)nW+r-9?w@EVA8#dc#}+k%W_!PhQY14#egNeDc0U%C)V;!Z8}5>2MJRxr^y$l zs$SM0$2;CxE8*~AUi?g2=aN(g@7I-aEonR%+EG1jAdS}~%PuD%#-Mw7DudxdGyU8l zXNq*Hj=$7OtjwPHvU6x|9DPDC;M9~9;lJqpmz9;kYWw7MgT#DI-d^vp9?c!O%aSQK zm7CYQI<{~b#gAGkBa=>*ONqpt71r_Y9rJA;ozLBG`*Wi zqreQBiKW9K|Mx@55=3T8gbNmYLfm=OPJh1LlBhwK`#*&-i9BYDPMyEbomTg5 zD_5=@VblNw#7DFls~3D(L0oytukeD}6wCc9599t8q2ZhHk0{QG{`gB?6I)!Xf z{XsMTtj`OlMYAw6=SY6De zk4Ql`MK5ni9Yg9WZP_+; z&Alki@6Q#A0QjtX--ZGwVvSg2 z-uYjI!*y3P+k?M8&||Xs_3NjvH=g_eFc=ZmbI+si8if1zYMzi1o^x9elc)y<9=)>h zi*4XF#pXfkYHA^l0cQeTSFI|FUJi6|0-9~VBERo*vaJw8-Oy~_+cPk4ZN|fgGuuCF zrwG*-U!4Bz+$Bqf455QjpD($8@>;;NiNj_L463`Zs+M$kRbGwg)(Q0!;+-CRQNA^8 ztGGj0{%fE13kJbb55YvU&h5KhS)S74Axc$WA0M07WY1;5JaD+iY}6Y*9Dktw9U+`e zKR2R1ZMMR`Vxj$K!^I zk}o2jy^4nr+DW>kwZSm_0K>Ppf8lTWj47m(*|08I`luY7yh1y)5REN&=!#fbSZERo zx^+9T4+ozgU*FnSD9}00d(i>u`ODv1v+o(19$>h9Ny%g8Qgs_xVr~0sW8IolAA42I zSS%ozUzM5couB-IKFj+diisd$wwZ+Rh_$maw~R*dmql^u5c6p3ti$xbn#KQqI_iJY z_b{l9{#uYTf$x9L`w#|a_Uf=kp!xd+91 z`D+$7Jz~FoKQq(aPJl>Gatj11R0xxgGcpu41~F>{n0W6M4J+mryCpGX@8ue8`}y;y z>KstgGYXhHYLq$KBjs;9s(#gTW0&ikfFhOTv;Wj4VdVRsPJHiW&eGH(m~ng&FghdXzTlF zASSri+?PLv??g_ymU3SYtLf9zeHxcJcAYyUFJc$$KOd8zPPCuxt}GRMcayH4d-dTU z?wI@~N`ve2b;)ZT>`7MbDqNkDD0=deCmGO-BQ9KaT(?s$bGqK80|cL`Cx6*IIuImv zTwFBW%F%Hfe&NqH;n+?0B67SeM4R6BG_z@I^HT`@Eg+}TKD=EOv~oyKJ@ zQsMg*-Z_Exy(6UVlo(OflcQQ2lduDA_)uC>(iF4APkG4U@tgHytA(+nh7XLVBFIO@ z-~*b_(OcfR((49%q4!U^>t18QXB{>|(4D68_y&yCMaI8AKQ*`g_O4fdNH7Z1=ml+P zZd&1_v0(muZd%KVjE7g1LT_*NqmK)TDqY@k5MaMTM=bOTt@&PF`tB=c)iG7u(0J+F zkj3Ld9J~{4H)m6dE*&?yD64pmZ161cy);`w2Wn(3e;||6Y!$`GVLF?|H{*_nJpMWP zSdUi<{UXd$LS+z+)|V!We-k9D4&^cV&XMEh@_pG!R=%CN)>9V$0_XQ}JcaWW<;vlN zla75IbiAp=SoXfj>Km|qk6mL@YSJ?|nM*)_VhSvJ`Rt>FDbld^KZZN*DEThK+eqTw zFNCK~bWoj*Z5O)i0U(L$wz2-*P5X-AL)6>k;15?9ohr5KogHyIe8TA~#X>c1pdg%5 z=O0brn|a-qxFcI0iM3Oi`U9nqwWpPWu&dfYQ)KH;xGYO4MT7$9QZacAm%}$kl8qa; z2*n8yS;o)&Ri7gy7XJZwz@f9f?$xN(FTn>ZT(8<%!P4H)97Pf^DoF?itvsh1 z1W%OQ$9y``=&d*?kswR z#`U1Hr45~KI>G8cGdDo$C#QdQ*GRz8Hm)LyOnnjz4VZMQ+t;*5j~@?4CxVfI(1dy( zKXbYte}NK=lO$-0TUur=uqs|8Jsk1P(5m>W*Se34)#^Rv)PQ@#9qa4r{@4!(H6iPM zFqP$ciHB9*dCh-g1TS=#|kIbv(CE5!`+_s9Lv_6q0B%hJC zw>2??Y~@bQ@cd#}-yJLTV|^?G^@PS1=`z3P2wAjzF=mT!b7*VI>}FiW6q)5Zy1Ix+ zf6~P{d3J@`=X)knNLFAopE|x|CbT<1VZ&qVoScsJ8haDCOrWJI*Rll!3S`Gsk~E5q z9+ww+(m=r7qX#A8QB3s!+$in$W;a9M#FTP2dYKNvBb+n!O-$QIe2u_m*wst^nZ~ z%j`E=xPo67LIf{|RZOwrj&yBKCY7SbZwx3!gF|e_;z_6_iDf7zD3MQoy@~(O?(Y4) za2l+AM0DhrMs#zwA@>1QyUz77{^wGTC^x$zJMzep#mLSOe*erK2N{FFlCe@c|KY>C z*)v{Elg!&?!4A*cXDX_-C#ObGd+&&#T8gO=nXO_|!7?cL@ZO}7G~}M`KE{d&9iE&X z^sc}-(%^K!Bfq-lr4EGJapPjMa%ki3g(Uz2baL3q(hEUS$^a4EbHUq&r@V+Zdb>Y6 zd(ySFBU_d=JkZ?XCcrZP2f>+kVBv%{g^y1uE{Js^5bu$&oG;!Ylw^oyAIz4*Z!z3yFd zAWjQiWvjz?tG-}9tI)G&UgyA(&=1>Nn=@n=t{SXveZ@ zF(7Ly=uiRVlj`36UVoEUZeu!rEWrGjR({-}L*vm_&zydz(sS^5pW8#=M}!SBe!(xp zy7bR|X48j9AM@lgM9Ow`BVp)(E~D+8VcLW#?7VwF^I~1l`|1#Cl)&nczW} zcgro)>&JD1;a)oP7gXM^vNC;FW!Rvf05N zyoPOo_=J(rqb4r2u~DjfO=P}D82B=A>9PK3rLz4yZqZ-m_HMXCx*VwR8(%PL)IS|& zsGLX!1q-Hu=5l{DMxh(wXs=$iDq;NQNFzbk!Clc_BZ|t09PyEvRY3vTrI(G_w8iPCLg>A5-d%z z1Q^iNP6sc_|7#is5fDR}q^xs%{Vl?gAnSpD-qB((r|88C_%l>*hKsM*DdBnp9GQ(M z;r`f2@M(N@6})cB`cc#D+q?G%EXEbAQ`LQEM-jO>)|1;tm4%EQOLRU-6a^do6q~9Q7kon-1dU<;f zfrq~ld53vLo=s3V8VtA<{CmxY+4Qcs1sB@cK{1N>vTA0SrKZyR*-jcZc{hBu?XKRo zSktJwW;1xJevi!xxi;0$O#`2CN$)lGAi36#^3@xTOW=!I$v2QR>{L}L7IkA$aI1T6 zR#ueRJ$aLZY7lUuYW~COlN1V zJctf2YnnR&SvsqhW^CoX>p)Hk-wua|o9r9>?RDB^*apFA%Tr$oc~WL~!?DMt|CbBU zCFk9{#T9*<+WvaC4pJAUT=auyv9Z4FImHXN>;~1#85u3aX`eK{M9+N>k?L5hkg4$_ zp|=o-DJMj$;tF%WH066!==qrrgn5;jLo{fSNVpqJNEp*;XOekg+G5y zQDn{J*u?hK|M;S7U0hz!R0gEukrsD?MlT?rBwv=6TAG@pa8AMb8W9jRe*O|{mS#cC zWkaO0;fsGinkQRIEMUKL*9fLNYu0=Lj;>;F(mC;u!q=#`=|Z z=Uc$deXhp^`P-sPt=2x@>!;%G9NZ1V{vHK|sco6urm595Oc`bPCs*DkgNb5{6A(jW zExZY526NDkaSl2$k8)tw$tLW(glf2MSafyfOiN3gp>i@ID#-QghvHgbdyO6sszM{y zKM0d6>~rCQuX)KQ_vIf5FX5)|1803c7UCmp zHg>&sW5b=iuf@P3i^Ffn;dNLhcSxcZhO$rH89@mUZ7--@l~h||Oxg>{ry{$#KRmqQ zr|uNV00YGtg6)HeDpnA${_`yudh)!#lMCJm|2>H{AQ%7p3^V$_8B0)C|IZU}d`Hdy z{%_I$_rKD6GY$%giRjJg6CR0;9WMA4)N)eX@VWbE0l+{!$)CES!d;KPED=6abrmF0 zlGKCV!$l%}VM0C4Qc#wMnMxv2BhC$pufjL~XSUE3ap1tvZz>{@bC>qxVyi|}T<#t4 zamsc7V)}$UCXV#c{+UCFYz$K_{#y%^b|TCLj+kKfu=)&xtZD8v>2wyEY{7$~sMqr) zZ5WV=0$Q)RzqW<8@eUTyGa=8)3KfaY3T6+h_S9Z(7pSrS^Zft3VE?bzq9i$f@MW&X z#6**Kog-4|M^%6NwEl*}=Dt(blHB}f-Sp3K#YW1eV@_iG&XxsA!cQ@o9B<$X*zi{^nvjFV!Cl4NcPA=(b zi2XaHl?8(2QZGb8v|Xx3SJa{@7tr3-NRP;*Z6-Gb#Rd7ubo-&Yy8AW6tQaH4Ln>wR z0^?SvQ9JXUSzO@8yEW;FPwAwA=|n`_an?t@OO;#J(n#RoM$a!O_)=5DKHPnC7KJxg z64R-W|IitwqRFkiBfTBSn?J>~X4R_OyHe2hetOIFuUR;)=jGMByo|TX;Fo@v5Z*y; zb*Ft`HVp9xhj8}np_-|B1bW%&-0x`gnm+>mi;%Vc)4;nHg8+jSS&aworNv*)ch+_pcSmoW$O}(U!k(9ua_M+g{p0$&=b(7Sc_e5)8 zgqD``D`S|fqz~(vdUA1zFfs(QCbFw}jOAFvH$^fn^ocn)FDAWS2h|8OjF5{8K{jBT znH#yqy=cQ>$#hOK1vnrn=`$rhC)00pG$}4TVp1C#s38}aYDuwQ%1xRqHpszLOomazn5RDHHaK_KIER*ncsb~!pg?G;-_xMX&7RoeLJ&?tz zi`WeZyyo-g!2IKP7Z88f8Wb|0dO3R+U5XUUm8t26yi zsw(h9-eI3G67!HgeaPEndi1!+U{ebVFuyHeE*Tj{1$Q(o51G_nBBTKeL`U~IVvzIQ zg{%rJ1*p<(Q$RK?6Iya7T}x=Jv%DDnu}^7%vx3l?uYFj14aui`%A@zOTbTq4QOlu^ zfJ-&uHo4Ff8ZB5R>4 zcp710!-E9@5n9-0Zf@OE`)|$VD9f3_0}|jCBFd!%GEdZ#1XnpTPV(xvMmN?~O(Q~H zxzYg00=`CAMbU6p^XtALllIM0K&9*9;ZdvC$}Yk3AOb+n-u_Ef)p~eu(K`so8JU@^ z4wE_NPM#ny(Z~-6pi~aR<&Mfkpkk)}t_MnGTi^L0uR0AmeYk~Md|VuE;?rxl#F%X} zIxAaD;1?7Li{%?%Xy=^@zjW6?lzs2IpM78XO#q*DjYk zk~DTaV9fPdnp4FRGds0(YYx1zTCtHpX818WC}>LRc?IgX zUETXb!(_`LdyO}mM2pDb4?)7$`7({ms`Ob>$LJiS{(Zr0JW!mp(FPmrL-y_SW2TA@ zT77faxG{K+z-^fEO25HVOLU=5X?) zHhphJ(FO|>fB72S4&lUhGwAk5M)dY5+I2eL@N1VX7}*ERiWWM^T=yP5?Dtq}ngoZ2 zRvDy9nDW!LF;C*21_V<4aSAs#0y(?tT5@tMX*xKYtnr(ikz>bt*d9sx;!2dVpOnXa zZeR8j5|smrrM1KTBV%J1VNh)rthT9G_w(yCT^$1h19~f|fP7`vXP$0OslH6y*3&~b zrO@%`^M)20=y@GuQ4!{i4hMM99&`^Wp6^lWQ^<#rF?;2(Vs3MH9buAGyu@?R4`y{-vPu=&*vZl7840oC%@B_DhTD{P%Ta(nqj-!*`c6%XRRL`pRDJowp zUE^Uv(q=%?wn3BJ3}30H_qpAox3Cv*u;4CWerMy!<*hry!^63?!omuPh)59m$g`}z zahzz24aW_LZpM{~nQ&m2Ddm@Nn|>as^gMd1r>zPIO$^N@(pTlSBoGXLXe6zDHgny&My^R=&i4ez9wsEtj8gbmQQ^tu?KQ!f zTY^qAd{N|8uiQ@eH&J2=UK-(+9QdDG&4d`QFBJ|CrIfj1>117xJ4dxsYIMwKVUz5< zrx)pZD0YvXsd;^8T$~*Ux*4{OC&|N31%Ih-ntsovTx2p<^ds#pCD3vce|xbXF;4>1 z#wazwr@nwpE!TjdW0|1rG@tGmR7!vcP;yzqrL>EM-#}^&gdAWT9bk5%I4`SEtH8lu z+EmUt>jRvz*`EvygEs6dEGVeT8J{yR^)I)N_UOO#H5QE-HEPXgDe?{1&r;8Jqz)7l zNen6~-zVPkTAStST(o4O+Jot>PxCLU5H^#=t8Y4!m zCQ;dH*xJ1{5>;)aW((8d?c;V)nl8_upw4Xj(=V|JS>7?7Qi&V)r<7I?f_{EQH6{Rc z%5fY~@Rn!$ie?=~N6p0DyB|nKF27nMaB%6s>KGdtrARCu1351_`HoNoq)NJ)OW_g` zIlhUhM@vWat{MDawfnYvQF*kmAuFuJI?bSK$W@^rh2j83R>0OIOZCDM$rI$hgw4MM{|f(zJsT_4wBj z!-g$nw(iESoy_|khip-W+Ttq`cH`%A!*$5debyn9{d@Uh4ufXxDCCu&F}ez!ui(=2 zTj&IlpFUVYUCq(HGQ^3d(Vro3Wk>Yw8$$s&_cu;X9a#CNUw~m2ofIB%3Kod5&p6TT zK@?FkMde>5YCJSSOGe2Zl#?3|v6V76Z|Wk!Ua>c6^Er#bMWzUvfZ$T8!a2p2aohw{ z)K7DACNExmB#o_f5AHPXPSH_OI|K{Vi#U0*z~tF%rPZrz$-6yEPtpd(@@ek!&Zyyj zQJ|NeTnJ}?`jK4B*4}==z=5qK*<7K3Zon|4`awl#D~JUQ(o8zDm}#QWGuAz-<~yTE zMC4xl`3G4yyh(Y9%8H5xR-apE?K`=iYHFw8ws7K=gCO3pLonC?Sb|SLGgZLVuRZN$Yy8)zV)|nug~^~5J{V}p5uKCAQ8>^*x;x5@ya%+R(B(eG-~Bb$!7(U2 z9xl}*>!f@rJJnZ4RNv)COgFa90K1ZMaw_nI?Lq>o!POzvPr{U%!Df~M-;8Y1HZoIG zKY7laCh#0+JX?R&^}oa=0gX-=$}oNZ=zxxhs3@56#pGCxzZU|WP~OSQo4V&X>(loW zK!S?~dU^us4KA#_8TSq-83>)?4R1O|RO0!Cg@^T5%mh5bYJmc3;e{w*l9s=JalDd~ zedI5UM0|O<`W?n0KEA%XT-^&^NSm#qav=@??ca}$LdeRK)B_L#ctsz>f#`j3RbSA( z;{BLxr@%T*~ z?QP=U+-Kn;mV_d1Yg^0c8{>dyP$UMrmQ1A}a-+orqt$s9r921Dr+5CYqfYIzRv!h9 z#k#6!zYHd_REx#WdOmruDNZRdXTCf?|B`%0$os&OY17m$LM_Eq%ueFs!bHPcc0Lfq zDc8Gn>EhhuuoW|YZ__EKl+jXEeM+ww;JC62Xja`B7yVem2q}~Li37ZP0yrpBBP~~I zcQVdosbn<-D+3#-c35`<{FTdd_W7tAEM5Z{dR-M>>Qm=DhMj@=jfGpP)q z(%7ezx5e#S*~I!RGJ7m?lrWVe!6KU^5n=~a=~-C=Dbog~qs8#8)KLql^guZ;4na&a zR#i2JOu^&RE&ep@3?c*XfS~X?ZkeL;Jjz_W!;B8o)H(5EJ zlwr^_(x+G-yEB$iAC6x)0s{qeW^PCjJW!ri1RR+{*4?p)*H-RZxrDJg8t zE?_UD%|lb$vCH^Nu2b*1vs0NQb!+nS-C#M3)+1TaAEFEDU*ss(_CY%_n`w>;0L>CR zAg18z75hf0tYf?PsgU9K5U$j;?-GYd>+Y5?WFX*cj~d-4Vr`v80c%Ksl|-aav!m`{ z*SDOBRO9PpH5iIas_6v?0=FjXtHl}Yd(&VsdI_bxR;3e7u>j(>?om+-rrq8F#bPER zDJd!Dw?7c*=8&-tq_tHBao-ca%5rk5Soo@qON{s%*ZDxv+?GP>E3UFVx`Y zzm+Xo;wS#2uPESB7u!CftvyWTkWFZeCG)koCQ3J9Y@7~Egj9se8RwIeBj(i*qq!ub zpK$$dnDkU)6tmX!dowm*872xIe}#VH2A#z0R%t+fk)wcoZ=Hp$ZtQh)D7D<tEbn za{1!L+|gVy0v(DZIbX{95b+cm#ao6p2xv3|&Va&R5RAEd{h*Oi7N$xLX^FX&V)(yY z0M?dEVBJ^>Pple}VH0^7ojQ+dLA~JFWf%jZnl1u{(n(Y#9+)mJS~7W1FQUSyrdP=u zRnRss7|(SAp*8eJO-^Gt6dOW=eEh~aHa2=5@5ToeQ6hWxJHxF5nu3RG=$<`B#>Q1H z@SP~+Y5G%vo~)mbT_-`7PFt-Q<}243i;J2yg)4mph$p$Tv%bKY06dgZ#+~O!FDe%c@K=_4Pw+_BQc=0vHn5DPOAuIWm!J1Y3>E97P9^?md^oSMau7&ji+>B5vM%wF4YL=w5C0Y2{bG4>dc> zAQxy`fIZ~+t*y=2Rjr#cCFt6ZetqU+1!sV^dHh4 z7A!E=krR5a`qOR_;NmVV**@wFMV#WsOXLqk zK}h=iQ&uAg%Yl4dSwpB(Fa}wn#p#}6$`p{*m6fRR>nbZvtsLI4_*`|wcfu0Xr-NAS zjvYG*{e)Q_x;T1N9}aQhk<#^$mVO1DIa1An9-nc2i~mk==tUo^n}qIrpa7w8vW`e| z3R=5u9K%e^BYy|o-V<6ixJt{p35rI|Ma}td(oLCNUd!-=HN7bMgR{NN2>JN{EH6trzNWe-M z{yw%6PoF*OrKq?^PLT`f=Uny07WvvYWKgFI3WQebe%*fue?r&bnNkh9 ztetbL20+E0J#uD1&|>-l2yw@B zKU>Ls*CI11TrJV=DF*?VqAi|Kdj^7{ycxH#mN^c{CC{I`e^c8ewY9n5uMJF86$JzU zmbCQ};?D$0E|))j-TExe(=&S`VQpTqB1||Bz9f@yw@{-%%-h?4$Cq_Gu$7jPjX!+2 zt+C47fo_94_Ws`j3n-D`Z{zc43m;=c&b7p51=icOOg zwRe6Zy>w4#=#BEg*4C|4lC4P3(LsFt_HDn$e4s(kZImr?W+V~`15=M36ABJ4DehW{Y4#nWgQ?lzaXb44R>O&w6lIv8;le+srNAtvS97Pmqyw0`Qt}{XUiNeD8B$a zSqsRZtUHA##sBGlE??>evCAY)sMLikHZhdjF~C0}JX~o|Gkm|%r~c-b_tJqF)s~Z^;w@28WOpnFJF`4iG5^R0I88qy_x! zD<-0(O5}lf-VSulC)Z@OJ!YtE%?#+DWL>bFph1&kC&@=PZq7HE>ColV&igjmjK~os z4){Mm4IBQ}G(-?nr>bdaNGj8f0SYq&_5Ye+$3H{Z5fu$`Sf|ZBfA%1!or-&H>X0E& zPHChp96@0TC&63}C;M0oWJYU@LMY19Lt{eS20_A!5tYN~;#JRv|37|lLWJnnu4yMC z0)yquK-R2jf5`sLS+U9>PH2ssmiD-@`Mdfe_QkG%d_FR8#DDh%dMwf>90^W(I4xfM zj-1lx^$?{A6AstDFk}eiyPv}CQZs@&tH-}nrbtTLV9bJ$GyQ==+3=Boh)GKIhYy=y zpC3#D9TgMPH+E4OePc(*!)cDSmkh>?VPn2%l@&fXJw{3{!}5OZ1-n!2#|J6})3a<^ z9O1qH)NMbF{P-C+&sU%3EyPajA==U_F?(z08r_$o|3GPJAtx3=&Y^!k@LqaW)|=O_ zU%!1j=w09OcV506ODo|G7|na9l@f83oe3Sn*}Rkp!JxXqhEH44{l4XeKJfC0$@Sh()digyyG^aPrelE9cT|k%h-6R1XkMS3^)oT%Qq$obS@TSE~ zpnOu}GPCqfJiW&rUAua1*ih|$d5aQfo~G!~v9vVllosT)OUY3hmC7lfx{A|Xs!Tg1 zQ{wFP$glQDbIx6+RmMlEzmU3Ka=Q}IGCy;-hs%Oel{zqA&Tho3TzNCrP3zZ8w&d-_ zVi{^IO{W@Q_I27f zl476NYJR6_C2;ers*0a?b#hXcHKys#b0|DKV63Y_9Oi-1^IHdw?ALwprpszl+esjT zF>9PT6SCTc^XIEJ?r)z&djMdX%1?8VD*O>=eMYJHCr}7fBX`tKK z2s0+O8j+BpVgZ|HjgM&3@OCHZ=NQuc_j@-E>~#u5Xc{LiTsvqZKBSRKQnfvtvyY}D zV`OaZOPCcc6c^|DS3Iq4Z48M46952$XLDAXu8=2LxH279CC`=tc(j}NoBB8R6y8V| zQa5fOA0MBJu|hk71e*T8wuZ)oFPAp1R~#?^JNWO^y(#x`g0;5ZzuWP>COHPb<_fv~ zoV%50=%o@HN7L9EJ(^tRY}XMwI`3>1jxp8b`t|5}ugG{%G1l$>4ID-)VLQ=6?jAWh zp~4H%J{g7EX-pUc3f}D}QwD{=a)o{Oap<}@c1m2F;$~TXHdTQ68E-$8BQX2u*EPA| z>Pe-~@4fcy7IUbF3eOafGx!^9guFbd#d8Bp#9In9!LUJR=hDGHE0mto5xeut-(aHT zfoMjsLwxt{9osLfe&N{DG_rttK%Sh#;9N5c#-~(mqS)WA_a8ilag%gg3qZ(>_MQ zLEV&`Jd6>;eA`_?LDb2!r%%U!8r)9cEwD_ToVv0B7XHH|6eJ?R544Y;ThQ8xYI)K2Xq)V6H z;dKe4V|(Xr6|Ub5B~0=Et|k|td**x!M^)5Iz8~v_9GQMDwaedrlgxsx&Ir<4(>~d9Lkc&Rp*GOTzONIRrHkp^csu_5IoXw8p6GN$vpj2aaBS0M_`0JrWX~ zi^?wnDbwqbXesFLUQ*6JW3dC;$6)C%>LeXDEq;RU^{lK`$oh@OSLsRfBY5|l)~_F6 zuuAT-@vz&~A3w4+^{|z*qalxrbkmVBYfR;)a3_#9|~x@*C%Uy-N2deFpHfycCT z<;t-LO4fd?(?C;7K|pm1bP9B&OoBOVSn%o!umDVPx^(Uw8y~;F|EOL0&P`X+M7IgY zj*|b%t{M;XKd0K!l?&}7;k)joDo;pwgNI?hDJcSTo{+k3Ig5lA5UIBgVY9(?tOpzp+luuDe-cL^zKdD+5D%9y3~8Z zA;=AFxgf&^Q3p*`(|_+pxG@xzfBptyW$_ZT3x)oIx_NZipA{N>-ZNF9vU=LLBTYo;xxT@AUymKBf+Dh<`N+` zKOfm1IPC;=KM(Q$E!z%h&xY;pZf;v?YNHK-<}MHjW)+3Wfe{SAYz-wwLF+W@T~=op zBhP~aKg%(}zdb8CS^gU%hra*#ff5|FcgvH#leg$^5UIfM4w0TZsSYWPoNO?|srXxJjAQME3LZ_ivBkuigFp zZpFvH<`1yrrcRlX{$_%XAnX#ZKi^+_jRwQt5!8U-sCUB3UvI>)fKqiWn+|01$M^55 zXSTpIM}2p%q?B8h5*N~|!?)8*6HlB-1!U%>L2WHrcR(qaJCnYQAIvox2i5MfVu@;o z&&u(|vqCofqp$cs4hgs0CMs>=B?T;{x%#!fo}nL>7Y|VQ#l&bVFnjL;=83D}kgehw7w=Mk?E5`OZsSj8qu z<&!5)RDJw-n#$n(VrdCn;c@V|lAPSg)TJ?B<#*f>c$L74z9~agcduHrMnK(PzWfdU z>E!NB=%5)B_wRD}>1`Ey(7|7#g zah3^&jijJ7CqY(JEsn%P)`sNQxmzEI8Y3CVIN^rH?~i~La7DRX_`)kk&SIoF)*%8x z8lwi(Y;%`C{~xD>+!a@S!HYbhy0X^iTvg!9G5n6pV7u#GWfmJ($sU>FN1)V^BoNL; zr=@qpa49@8;V<7st6&Z5af2>!^y&U$0UE?->3<*Jn9J&MC$<}mvh5G~6sRqEyLpOi z@6`!{WgCHBs5?O$!Hu3hnI@3+%?0KqL%~W*>DPE&`|{=#+%HBoJ$a%_PjTC2;D2E| zLS#dK?vT3l&UTvTKASg3^qBz#MgUxhFASCY`ZF_>>>9@L(1Ptx#KgO#-?(8qGk%P` zq9Ry;-)cpt|B`xA3B|g|O}Cx(X+8)(#_ZmxcV%D)tR8s#i>FVk+<$|2wtIEwoUp(8 zkY9AG(G^O^K$z@zh{YKgsT}8+bBPjj*JarbBqMx34xF!OxlZy!L z9`-R46}C0L?>u^m6)dnL51Glxm@dqZucV|v9Sgs5rDDRMe;Lwf_<>qlb&y@PZ>*(K z%ET4L&hC1o!9ub=B*t`>xW)_*Xqw8=pmx&hM_1KxqnJY_(V6JOYN)S)XTZk4bo%uD zoW;^ALMkcrw1=yxq+kGeD5XY=l7?pVdvqLdz*@B!vrcvFg5w#Y>a4GW%4d`06V)i$ z5vQ@~TBn14Z*@KpGLy%G_j~MY#SRU}XV{z&be}Ukb=_8skQoHIhD(^)f9tFPCYjITDJ-ycdn@|Qrwr(i{C zpAUcwC{T@H8gc9XDFxasc%_7!!v|AaS~jA4$KTk>s_3_q$l;4uug+lG6itq#wSduK zFI?ifyk6kpAxxjiMd%;I6K$+AV=i!fd_0ex)B49GBgqGB0er|?{(O5@ckPE5B{-R$ zM#ph%%V|2n>hAcRHvYmT1BTjD2?%)r1r6q5OFbRYl)rzkFVT1D5`rXTH+k_-$KJOg z61x9N+43)(l%HSzd7O|fb)6*%3WZE##L6jN<*%$??lJ_M`j?M#?VB+b2ZX?0!73#u zOpx@hkfV)e)rF-zB%r(W!X=k3Usmbcf7Ma5I}P^wBn>ov5M}=R@9a)LN0=49o!KdV zz=~fF)AE2=>hBKYtu>sj?6~Jj^4cn|U1}=3*#>PSn zD=PzOjy-?=?d+X|_c6B;kiB$%R92!|W3?bh0BWP~knPjGeV%kqX5oYemNUNyB*PLT z&^j(HWwaz?DOYCO9Z}#%|F@h?8kOp)1!PbPNyh)aGZN%0NO**XU4h-BZ!3E4AO=s= z6#K)ikk&l8Kem@DUq*s3vi32vV-TlgO@1c|w+Zth3}fjSPHzcQ;Dm86r+n@Ht2jbu z$?@Y9^2YJB%(@s~Gu7`N^S zpgVb!8uzb3i({WgLgeiSXqV~Td;h+D_vW?RpTW%&U+@*$w|3!^u=5^23lz`ibolqk zf7R^uXUH}dPacertAof)eE;wSpELdh0>pLMsnbq#Ac5Zc`VnquOQ=~E*bPGlTMLUF zS|oYA(|c!*tfUX_dTW?ZM?0cdn>W9MYYA~TZ*pWV(a^;IY0f##zhB+F%Zqmg*bqLy zk!9Ag+{I%uGh*j{>Rj$3vm|L>pp1NQl2=H=^37t;WL6s|7@_nA9x_Em>hlj7jd^JN>UVasQ-*;s6+6NFvC;_gQP+=ui z%7V7wlj1&8)Hb6}&Q7gO762~v0wo7ne-~+U>+&mQ!M_bWBd+#i=N;*B6hZu?LPiy@ z8vgm39(&b61ib$C1?~n@jy@(wK{>+0UV3c`8aQaspd8I(ucSHl76+tR^QLH5bHGz9 z`33@TiX8})r(sWhdd`yMsp2y9@Fe~^WvPB~N*D6pYfm*sC`DyM(lqpU+@pzvegQNd zJT$%j>+6(-kkBP%L+56(R(S6x-L7MSr^ z3p~z!y8%}JqXi)RrF6X`Jy@ttg=CcUAaB$!$+n=mgWd+P7l2h#nK*V7j@9R9y{qhD z|NVeesQg#14BNzHIiZC#IQU|o4E;d;rKCn^Xv`op1HSat9CpkYCg<~iM#rQ=U4_vi z!pk(jwVt1U%(0H4>uxR9{S2C@OxdoV5cXTt_9C~->KL6kEdo>!8j`<2&UZ-u5q5-q zY%se?@_ae+c*nb5K*GY4yy?+@$(9q*(H%8UhBQ>h4HaZn*k#a&!=FB|5>2n5VI%Kw zf6a{e2GTPY31a*#O^6Pp!%UC$N^YZG1HLti!`R>*4lZ*3200W3(hCLZZ>MA6Mo2Z1+owLPvg<#&7mmdy%3KGI%=KdF) z_Vff*S+Qck#~VL6OsEN`(<7j4$(dIf*l|!%H>%|HilIA{$Wryam@WAljP2U=o^8+0 zR$sU#3~eO00Wyx#4cwaE&%(+|7&+Q0#7 zv4eipAT(wz6on1kNvLOD6Rn||%F1V`^?*_1dx#w;r6qSm(%|o(j2Idrr+UCbd;1oG zA({;Qg~)CIP_50(KJM86c5WxxRC!1s)n2dJxT9VCyZV5S$}_N=(O5{Ll-KncrS9$T zNB~H46ZZ<}lg~S1QMXxUe3R)dAc0j4-fvFXqm?9Jei5D zxAyMML1en2C=4MLb>-~2b2HcfIGdbYOrb$;LEiu!Q5l~tP71=Hr`0vLdyY~Ac`BF~GfQb7K?NvaTr82X zBS$9F%TDAEm=%#O6fBevRl@t<@Jd$b#>k8QSHwN9G>v;*Cj_?53n*h!8+;g(>1bMK zZ*IO_65vMg0@GJz@Ku@?t&GZ(xv-4ShaCqL+evmar}{a4y5iNV9OJ*N9}MTe4mL(e zg`sq(^69ouL9zu}O&mcSFTDKJG_Ojh+bn=89sUUT4OR9ymLcXWov;>Jl`pNZ5xWaN z4-z`3-34A{McspJU>U;RK1s$J6(a0G@R>l7N`=yb5D06ivfFE1YX96`J|6ORqMkiO zZffvQk!b*^fNg+0cD%Py6%K*R1liTa#N}RIPpgw6!o!t!@zU{MI@sAuwC)>+Q-6KR z3Br`CODHO2WTnXZpczQqsy^JEr2P#@ohVg+yce4~d(ijdgDq*6o^%9u%CJ0%^vlhorMNrVC(4 z{g*G4&osUtpI<{|MjFgS2DiJx8;djwEsH>&y|3bnG&to0iGy zBegE+t{3?TKo1Z_`uh(rtd{E(@UZRARWv-F#;6CGC1z{+-Gaiby4#HV#8hpE!HdwH z>Bq@<$U2T6AKZ}5h`3b*WQu1LuAxte_&Ad@6wr9FrL3IXG!Qn@5o+jFZ!&OJ6lAp| z2CbM=HV$g)i)V*0l!{G2#2B^<7xT1_Ue}kpx*C2KfQlb8`Z>+oV)xU>c(CchF@O(V zLs^SAraKJi#xZtlW8(^5HUu_u_n#b*PliS+?InaGuq;FniM=<*5cht1p7Nmpjlv;uL04Z@NeR*LXCfoi z1ej7tcsON^EiZ>e)WXJQ&(A)Bi8_@w`;oqvrcW`6_}-!Rr^Kaqob#802bDa*iTS}K zPrnbrI+ zG9Y=RWEDipDF;y}Wm3CMt?8j}1oisY z|$fNeg5+?zQ`2Kxq;0Ev-{6B&LxFv4*SXlicjmWgTjafKje9@`{v6zn6G3aaWtIJZ}yO*2U`Z%1cD-~VwrdJsZ$W5?Rg^PYnx|cta4#K8DAyK#;d4gc! z!u-h4kdW(~L^MFMEST*@jRO!7et*b*Sz#`j(-R8F=E`}}f-vu2w#cdo{caYBXu8k; zEQ`WYk+BKuA1vM3wa41iffi4HxLC-dMrJNwn!h?)Ql=9VsbSn5~mO%3%H;QQM`0=5K-IVd;J;EG@ z&60ejXv=*0h=cTeV)1Q7)(u}q3}vL{Dqb+(s)(tsrDY*S&nsPDo;#g3pr24Hl={qv z@1lHj+5O$D!Mik+5ws|_54{{9m_lHCf1h$n^0 z8@(qr2+M*gWwl_o;})mwy0f?Bs$E!Al~R+cTV|G|kQSg}x-eoK z{YFf4#5YJ!ZyT63dQiIck-Y7YEK6Ir64gmKMil7*17P`?fjCe<=jF?=Q+IKx zx}O`yz+q?ZizUR^To;$0%;iAX z&_L)lN{n6$A;(mCm4(Y)U3Yosaq8!cjzK{|fK%B8)-va5)^m@WoNcd4O9{bc#;^za8XfQ$*>gJ1e$?taVXpIsnHHRf))}fi8BFWg+697- z?=z*pX*#TB`LI3)WqRO!Bh)=7%l&>x%HpPb2|j4Q+u?8iI3#cA$5{~Eo2=n{^7$7Y z>x+-%r@!Hr>kaC@d{K~*DGA*_`uCc3Yu1nw#18GdFl5SKMI&{y%%i4<%O!r<{@*A# zZj%E=n}p7ENapR5!F%`OA%apKS0lBp3GcMV)wc5k*6US7 zl_#$#RQ-I7v*5#ybLWQr?AS5$f=|Rn(4#dkPaZLG7GGV zi;i`3AAm2@#6W-neR)w)ar)=3T+6!i@d2Uve}3j&iobASDfJD!K6)9!@GL=eDH8Z5PW{6iZPL}zdp73)FpBU=Ro%#-@SW|t?erY#*@7gSzi70 zbjkFMyDPq^AB|FV0kf-iH)*c0POZq{GssZ!xw-p?71yhJ+4y-6Q9uvmJJ^t`~=1 zjo`2wBX$qT$P>K+_j4~vfr+m<@BDeu zLWX$DDJVQ?9#-5RDZ-jF4Ch{WU~_w`ta2gh#orHIy#;@*uE^$4!;xtN&)((m=S<;j z<=FOFw=UaV=vX#=n2fwML;OTg^4+?Nx{Xc`Z;J}b0k;l~kK^_T;At|AE;^ku?Vy$@ zXT_vi(e=5~m(r=b7`XxENNEQ(F33KvJ?e`gqqa8QQ7!1|QPLUc>kAgqd@-$Q%MOqH z#kBEVA?Qu^zm!wd-*Rw@y4s9gj=lFZc`q1wa1Izk8tm!m(~ALT(a0p5`sj`rKKzwS z&v$aZN9FomnP+T#t8l=k*A_1d3Z`)`0p_qRmwS5VrbfVi4RsmZspd+@)7JET{`~o&e6=^!IM|AC65rjt0VjY@{;#H4 zK1%g3&xPL*^entJ9;-P5qf4?o?~NZnp4I1U?6yla_l9lx)bySO;>vv`GBUKO2I%?8 z9yaLY0y3IHsRM&~Owb;JxP``aw8EfKf*m+z2GJJBDy}xmx>oV>ajtkms*F~=f zkFhMTZhTCp!uHyhyfZzzU?MPX;Wk=-I%sn?l~d(ZkvElCD@}jgtH1-7{rJPT5&X=x zey^oZu=^`IN*e0}KJ+vBn4IL>Ikw3EpCI`ixAoi$kEvag($lBU+fhoYe>Zr>FI?Fs z-Whms&amZ+o4S2YDZVgBv%K5i^At+&7i3i78u&3{SXfA*oMw;Q4m zX<<;jV%`p=c2s@8GWATxEOT+$Ic!W=-4vnnltj4b{OnAHb~}f&1!#LjRVN$7DIp3B4pn=4(>EvoxP~C`iDL-X?nnVig7) znSX0tYLAbGt}8xpmq>#D zit{6ez=GQg=rUy*L+u9|Z?huZj3M|VPAGqpue z<<^VN+|HWz%T(+ZnU7FN>FVmTD9L=^%k5A?DreUYfV?+Lr=UsQpeJs+J(Yh6ga^Q8 z8F@tL%&}|hfMr4+l3&b75Ix^TXz=@o<7l7&qzWA)Y-`QJw>KP`Om zZ?=ex&P$w>7xkz|;H0EUKFZf?eV*iRsjZ!q@-Wv4v6`9LbLvE-DSiY9E|FrKg6kW= zEwgvPmngX10*7+W&@yRaNcLF9=$nDQNW%je^u$45`qM_GprmB^Z%T@HY^X8iIu z7(o8Mu5J@QqGrjArZiiZnH17wRjngf~@^*?y54NXE#C7BXn`#kK~?Q#iG3tXxN5- z0d&ZU%DZhSR4HvYA%?^GY|EdD0K+O~SRXq21_c)9=|FSNcrNK_w65UO=v|r^OTi8@ zb2V2hXhieMk8j^*Mh}gMhspClWT)c%a=(qd zfT z;9YHfHSjFlM(Ntx^x-h@uRyS*$Dw=$lDMMdbc!d!A&c^R24D^U-R6|)MR`Qf-1T^& zJ1A7<>k55XQ|eYqP|mJ&pLe2uT1vv9qTAjyY|FMlfUuNWBEfdNI~ z%Yj???;j|8m**e9=Os(GJ+JHW;%*)Q7F61lXOZ(F@*gr8nFDwe_0q7j7>mfm|6gf#Cj+G63f+jn zXwcAwei^C&_zlj&Xry!<0i3e%Fzx2X#%oyRzP>m^+Qyz)2cX4GF)8T}8v)+fY4eY4 z*3V+EvDesEc%0MJ^(J(=6bMoNm_w90b!@Yu#<VOn!92|G2tF`#8m`Xdrx5wk zciYh6167Eah=FXc>Dk5hfl(sdA{jhLp)PEtrR7n+kmgcK;rH(g0GCYy&l06MgpO~L zfP7$;taNc%^vO!>w>rMmNjGn8g+8;z}>Url>)=%8&a%8GW%40tG#Pc*q;HNko_l6fG#wqMu!SDFgYeOkBInKqHzta$%K_N53pihq!H5Yf8p5sLF?X+? zJlxM<kccrmtlst#xTaK(16{O*`DW82LXn_W zeSeXmGDv*H!nwfv!w2k}dUfuaUfo39k9t2O9H^a^lCAnANESHYZAK^-b_bEy6 z*!j$9Z4bRJ&^auhV~ZE3cq!P&os!&Vh(pb?Q5Fo=lARPa(A#t6O0*HzuK!nKMulXW^lr{me;kteQDU2@WY2CW zQ{48bffy|C@fqK}@MtDQKF(5}e{dZ4ql@Q&%u6|Uj{qe$o>Bp-%a=Z0HZyqM?AdM{*ZF;x8UEsXiLL5i z6?@SdjdaTSS<0Z&{!PzbzFg$1T0v7k8Y*Ag!|(CI5G1FiMWn;;4|m%zV1KsY zm$+}=vJ?QRvr+D6yNB?iBpYOUHs@)^J{I27G7cyznOhz&c2p$tB>4p&+tASU4Jq$` zp7mjBb*oO&*(R!j!@^!FU{i&`lkW;=s<2gszDLU#gzvGKl&Y0bX z@8TTx&jY06MQCdn8}Hh^TNtOi7z#sv=ElhZ)!R7YA1gM<3|9_JJ-e#&#UAI!$JyW9 zyZY3A!?PToZA_&L{@W@QEhHJ-+0q`F{d;!fc(8n~Y%4D>KfLluM{{j7LR9imADbg* zNv$fcFWb3&dzU1&0s9!-wH3!xuPZCE3{~iF$wANXY7Fl`dV)*$=uwk)cJI}!zA(q> zV$Wvv<&PtUxBULb&6|!$Kc*iZ+h1X-&r%lZad+e01T>nNj78yZ|WJG^>d z*>8G!8v3)OE3CB>oQ53N-0UodgkHsyUg3bfhO{?%fN%GuA>m+$94+9?M=J_Y9P_TB zk9=*VRL4{$$SVb&5zlc-H7{$O9Uw9&6iGArJT1`qUV>bWvrI@jmRa?kV_{LixFPs~ z94}-8w4dFrD$f@GOcHnWl;No9(>FnKQ;f?WJ0HV&o5Wy--<}pKIGVo#F&03FtCzP6 z$Sze4&F=YLOfEe>X}Kxt!>L!rj}qUPCRvW2&cm_s8ANG*Q@JY zO75=6Ll3}l9%?LH2L6_)Wy(Dr=c*hLT(#Mg8!^;OfAQc!)gHyIX1C)Goq0E_y|_o! zxI!+jT`BN|f`}OP{Y|JgqI&K@!JL}M3F-92$|_hL8$x7S;2K9Wbe|w*2S9)@mX{vs zAi6y!u%lfdFM1fOoF&1y_zIli{XRT8gXe+6Yh2u-i%6+-X-WyMYSc(jn(@Gjg0 zX2>*A`MZ$NF&O97dE^k((Yd)KSm4hp#*J$lSD?K;m8bxkjEaU9>|-Y8y? zR#enwnUIqkFGaxNYFU*N$zAg~m@Fb+jffNA)hNOh3KUIi#4uZY;B2@p7S zDo(9`PZf^Tf|5kC&0U4c@0bp80ck*Ux-nSqo?D}LA-oj29Z{G>r<)Gu@6cUCdJbs# zICYAc1u|}2L70|>3!S;|Ch{U;2+e_6R?9>*w+kDrZ`W;U(?TANO+zUq)jt>GOk{Z!Xw9BSTwVaR?h@Xq& zU$eW1eE&6u^$8;a!NM2?%yyTi2>rmkET=7vMQEd6r3P(p1Ux|A&1oAxWWi-{4Ak+! zP|Kcu0Y4#aUke(C42*#~3w@8fAImwOZ{VcO^jto=B*vA;VcY^ z&J_~9lS4IwvVa&PxbRe{NcJRPG{Ioy-V1{Q6)fIS{4!opurTY}V0RbYi`!}B9lUp` zxI45P|D{?L$}-%ZbC+LZzVT3;;i>Ie!?`K8sVjK(KwfmN;o6KA?AayhM zYqfanpn87x!<-<@I4YJPfG)4@iH#5JbW2kcXCrAnRNWWWL;V#3Q5%7u3nEj>L_UOj zT;3g@t&D#m-HTsuXQd?B#7Xw|?>wEOy|WhPRGu(s-zw3NQWKInk@qOaR?T|gyaqfR zetx(X+#!?TvtGQIz>2|DiV}f|M6ON(yNP545e-I;@NTrL=qZJ4dM8ivJQE0%s#g8Y zyGv)!77$j@ZjwQ(FkM;)F$@q>=?{DU1%;k4MQit#J>hyv-y0edQ&O-Nj;R`R8p$hP zL;;zB#WGkXLYbpg%P+8{kQi665Aol&-h7KB5Ttx*oSt{#MZl8%NWXa1LJjMm0tZUd z2uO}U5=vw)PoJ8a7X939t8tet2!29$p88!th@U9j>>V8PGRJSTCz=vT?Q<$G6Tf!k zR`NvxU;F+_j*~Rc<)Wd=i*cE)^y1I<-*2W$8ykw(J}-ZgJRj$K>1-9yGtSlA6eF&b z7><=#88hCHd2ie}rEs1s;uFeLsG#t>QowHX+AU>WhAyfR5Bd+zeB=7{P+{+=eexdy zpunlpI~32F_EkGQjF*Oaz0g2G8vVF$t>FKops?D_O-fSoIg@&-Wn(YgzI{AZ%G%dx zHHw5%4nwTH)$c-1RM*$%my0x`W%5rq8lEQbQFSH!c2`kR#&KzAr&}4|X(W)lJTpqB z-~@cym`VNe^=pR>Td(P@Q4U-w+U(%K-u|~tq==Zx`wY)Qc;uF@!5Hl(KnI1b?p2R>_1=tLb~swe%b%iO1tw_Y)ubWOz`+UV?n7XuCpy=L zHhSXyPpXEJ%F0Zb=Dv*?$9@1d@=N%GrWJHKTSlQUcre2+&9hU3=phBh!G4dd4B%nO z*yETk@?j$0i+BgEnv{g{Ecd>8_`0I*V7FpErMw~dAx2pUf^5jq!`}_+D<@LrEftbU z3h72PlxS90$lfZ`y?VIx{=nvHncPJK$FXmaoVV)wEx}KziJy%4pPpNgJM2d^`uCn=Eo{9Rk}!;BYG$)RC&jSWF`i+&TcOjYe+dH z_usbxswaV6bBD;$Gy;5ANol{L-=Ln|Kx&C>TkP%20At%xUBLeP{$*uTD+$dkoDlpI z0F{@Q7c_KDZO;+V=paR|rY8L8<>NQ!s17pubKZ`Fi+#Jb>D?YYhg7IOsO=c+y076t z%?eLXZ6X&3p)e(s&08JH91lKUC|L40j0wA1{~=IZ5Y_=@gN4(ftRQolGhU&_8V!ZP zXq_NEB_HsyHEWv77tzj@%0}m-e}>@m6mXiAg(t1~(8*H!3~ACGhtgkyblb9QN^mW`_=n#t7 zS4Bi1Tx@2iY1^YDBD&G0&4-i7GCPV(zzKjZ3ktFPOcYrSfio^4yP{oMQ?pTMpo-RA zxM0B+%Eh9WuMlri?-7g;WEEG(kJr}TK*GGr)B z=CKS6)M(Iq0`hLTX5C)x1UIjvw~~`<{1Owj?#(eY1hBgqJQKn51kN)xub^O;5}eoT&4InmiNsfqx(v zotQ@oOU85Q_Opb{_KkGux^EzbVJ(C^ZRy*;L53u>tz0LkQck~pib!KbCb-NXW0pEj z|LJ8M89Wf!b33eKfD~TzGtsXI4D~6TlvT4|u6e(rnd19EcM~spmHb z!(Od=W&`B3gk+?(gWgu`EUe^z+_r#boAHWjm!EK>^sG+^c@WYV!Wus;y2GlCE2i z9T!w=){PqwzHQ&LXD*=Bos10EcFQP)a3o92qBvf8mq2Q=r}suqN&#TSb<>bH%1f^g zya16#9G;;l1E0_2mE|2>Ib}(e#%iB-m@T?Ji*f`Que7ujQ>ACiuZURbwW|cC2DOG$ z^;>qS=wddQ^oDo7{6nhwxjDr7i@ALd77Y*&0uACrE-$n_{k&-bAdk$vR-*qt!~8L; zQ9`(CU8dU~+!50Mpvv6o};%C4$cHga*~;{Oj6ZA`Y68+*l1NQ3||CB4mp*X1{WDBa}VDy zh7#9ZdI|wyT*IK66-73^Y*8BJH;#31c-``}-M;NNl^W-dQPcyZH8|lV)doWBgtX2M zOJmB^#F_{?;V>25*`|B-_X=eIhCGT99?-pe+g~rT*p_C{Zr!(8T`R{)R=-_8_PK&c z5LV=}zyI5zr(}D>S!|N-^;O8o`*PCbAyRJ?M{s53P%{(_MOqySQQa87AW<;lN2`Qv zlWzl-y)^Dap&73ZngcCU*45oXL8)nJ_*N9wjjEn>#>|7)Kx@IbZ}f;{pSl3UX1zJ; zSU6__)84e*)=;!^aGkkw#i4P-7y}LIz^@0A%YCVpq*9!$(FqjYaG6_UZg4H?kxSrT zN-u0Qo;g0JwR(Zn9!47oUIZI+NnVrQcZ~WQZI|6~eo)|$>%fXk<)UGkx7*}DaOAea zkW48+3f2et|8;IYJ0vO!Y3myQbtC`;?SztN7qO3E@iAn^(D}yHNs|^eY`@QYtF5js zTG>SkAuo)bec~5J+Yhg`vnA~zv>qQXxj$P7`H)0!g7)QPWeEiUyPA%=4K2Ss9UaRl z5;zbXzHCQ*5^<`JV-#5cT?>1DrEzt&Oo*1yYZpqyYOSh-KFWc@+V4ZF%8c2l*xR#9N^<3Nh4~vEmC~A8-LBW~`{(CLK_dk46e#+W$fC9=- zCNrvOzXljiQnc*&1Y;Iwe*8wk{YHS|pr&Z(5G>@!sPy=-ZX%{NkR&CP>tN1_zrQ1hf^vwh{#rQ7Dpo>^wVE|wDOtaVL# zb0;Er7pAVOlTJ@VP5ZP~3!IGVkWYSg-($8KW7X7J%D-3$XqU6M%avd5Qy|ZEGAqfv zXh;#d1M*j(rl#C&avZ-05^nhY@V!*Ni1!q0=8qtHGR}3R))SLQK=rSuU;{i3>7eaLjR;%6&`Q);c2RX z#0g4)D@mywa-6ESQbrWwY4j|+Mv#ZYRZP{m@UFjjP`>Bf z)%|cY^P;9BqU{qp-4IK#`WwxZL=pgfLFLqQDmMnTS~<$=8i<+2(@5tpJ`n68W6RG6 zmcnXiQU_F!m>Qa7);Y2Dv;YlwK(nJrgO zsv4I<_*k-u3Pfa-gBG_t=myIwxa{2NKj>Y5Ef}_&X zDIz1bxAGUf6_f*;`!wf`S=(b<2`TF%!8hO6wwI+Vf609X*!hgOJF5o|SCn4;YUe6- z)!&aCh7Xv~)w-){zp8Q3kvkbEQ0<7-0*Fl)NT2DM(A%vi}DJ1NYj zYl2af4vo})w!OBs@&+ZE9b|HxqIl>%dFYzC4w(X?$*qmfO&aK!esRq28`J)~Jw0Q1 z^MV&N`17io4TSGW84K9I2YfsY(zpJ=T|-MpN8#5fv{n4=3=DSOHyL!K>Y(4$>F5`zqY#xD`9y~ z|UOD=r@^(EXSph$Le|_+1d?6-uoetS~vXuECV7G>b_*u9n zlO*56>1r?KsMN<%!^sK8jy+^2EgnRz^MQ9MECyLBrjX2xpw?=6;a!rklM3hik}Xrb zr8E{6L-F4N!9bBSV&1Xw2ZaH4kc2-#1AzfYtE&$?OT{(@GF?Y!EBQUhsbhp=@6aa| z!wNl^TQZIG+xjuC0w}i{ROW=S{veIZ!6ZFE5qIvOF0xHeFmSMvwNS!=>EH z9>w)C0G#|pG#^#vHX<)O5=x1Xgp<^F~H-59ng=nTnduX{8#_+ z^4;ew)6~*hUUmn;sc_O=dsW8KipsuT?WyT``eL7%4vz{CZv?;eaag!o)3e|KwVdyM zxJT04DrpKb8Z^Yxd}#4n|NcQQf5D|fUb<@*Ijk_B`q|qg4`TCT0pd4|n zWS_1-IWQsV6R!Y1-g`C$@}%>2#h@bzHCchvzMlqW`}1eH4egCQo1A4c^$dlo2UZ~o z59b14Sz^2g2o7K9Y(pU&ee~#qWiubo*N_HGjJl(DIU#{2uTfs}MBhq6*MbF+AQ3$S zW2TFU$8e$vDTFWBG{7TlW-gM()fH*si&?hn)5k~}#gW%g9p%%7RZ5mqs=Prj3VBXI zuIDj)1uo&Bv23QuDHaNlH-O{}_I*ErsO1Q}KJcdG3!X03nfBGWxq=1_L?}N|PiZj5 zVJVH1ML05$D!6=$A%qDQh*B&4-*}~bApUBPfqjjV2 ztW2W-C*iA29xf8aSl9F8lIPj$ANh;#Sdxd#4DoPm$JKgsi&liVz6;B6)tD< z$s4pH2c6t*_YNjz85@^C=A6<^OpMZIjqLyt7@fSJdn2iIIH z2ed=UbmPPDfiFlm(57o^T$;s*mcQ+PzkvomxJq%xwnNb?8S&|}F}MwWI($mU@K=8Q z{#|o@xX4!hc3-h(bwwC8-nam;GQCom#IbzUs(dfO*_%8V&QO*wBMV%dx%G5K0oW%U zOJCJiy#Q8^;a5<{z4Ze6qu!ExKKmkUEn_QIlGFg>j%*^|GzY-L4SBfKEh zWa$|4swmBs$Eqp<%w(YE0Ed7=gwDP67mpq-N1)zxuX~exRl+Id!0LX@4wWI9t$WB< zhl2enZf%;Cn3_&hMmZCcs_sW05Q|O-)!ANj7Da1$4;^_X-kU5{xAptZD#Kznp&}SJ z+3N1-pVRP1W|&p>9@9mM z^buHngOF1l%3Bv@Q7$4G0S?|%F9dVMU%gy%AI}B92?Q7;TfgBzb;KDpjZlIY3_P17 za2og_S<0!ZU0?Li_y}q8-{09*y|Ul2vcctM_7f7;nujg+rEQ zC6ICkIfdrLH?DpLG#|WA;t;CIh%pYuG{N#6Q-D2yqP`Wx?yq`?<{S`|=yVg_<;s79 z%!$UxE&%Tr<5=oN(E+c1EiP`SmZov!`E=q36mEj64z0ECu1^sWWBc^WaasbYpwM8` zpIsUp4>3o(q-x2=1BVU`k^vhOUOsk^ zxbPpBW{DiA7c-;Si0sUn1-(?TL`4@5B|MnWZSe<@doS>JS+%MjEb9?sPM^1WD0U_C zJ|qG6Ic;s8?fZ1Nip8QuT<k`HEghW)ZbppN|rH_s_(| zY4J*^RXM))E6hm6odKMmUC{97k0KH-viy|U4Jhp%14`qArJ`-xr#~a?{Tr%sIprXl zt;}p}@Nhy}^?`yU?@5+C*nR*0F8~dQV$9!iOP6gV4iS7H!!-WRq zMRIyHq$Km0dN%*n&Z*qpt#Xuy2V0+Wq@Vm$pT^Ht{sI%s-$n?`oNyUQNhR%h2M2&_ zvrz=QPe6^-2sX^AK!PgoR`s!Um4Hne8T13FCy?5^VDl%D*GBa%C0!UYJ ztT+FBRY<>c{(KdUFF-yBL;CgU0~4_`(G8sZ2TTRB*}Q7m`u&(DxbQSt>vD;-4#6n~MS@Iz@lDAg(134y49_B#UyI1v3##li>LIukN z*CZm++N6bBvl{bLSoHUfSe|)`{V3fuOksYZn z`@?4U4|AQZtvNIL919QU5lo++&V@iknU|WD$cb#%TZ-Ip_3AdX!#qIL!i+24yX6*C zZL?=3qkqXr8EP955rMVrd!45(Ad%8yEX+jnf8D5Fnp6*G=@J&CevNx{KcIqMC1{Oz1iG!R<^D z;TF6NcCb1&Lqy>FRZ-CbsOnX+=-oM>r{_p|9iku&qQr=5; zo`XX=IT}0Bv-oP{sl1&VW8>om(1v55h5v_y0ZdhDxxzEB7I-OMWsv?Ea8>pyEVVtH zBc=&qXR@=Mg%By=-AueeZ2>A2_gOm@HCa8`QC;2s=;b0rYvDm(49WCWAMja6hqCIl=VTJ%6`mJFnru0 zpAcX}hI$3wi@tw1ZWI#`Fz}>n8LzV7HWK8&)e%lWX`>%EOBbFdWAJ-tI(z_GFv?@5 z*3sx`nU-WUd?UxuKNpK}?l|GVfsE$LJv=UQMw~l$zco(-c;Dvl2MAC8GaW-e8yb!W zMh1bulRr$TRRQ#ol}%CC;2oI#hX$BEfzmuL&ho7?5ISxrE-sT?b3%9<4?0-{#_QgGU-&@K z5&xrM_pAM89M{nqD+vf=M~^--qjzpz-j$}4Rt|6kKC~#{G?SeC@RQ~?eS`KL7AU!) z^K+cu>XHOqLi7q(hzSR#RZ#F8lQg{65ItZ9!@qV2=0)C>xSs5(D8TaUw`(>bpnYrx+Hcj7Y!J%B8%tXfap@9-$QdFin5SqL)0 zQ8Z`HLsA{IS$s$5sF2A2gauWJyoAH|g6tULVQuEr? z*G1Ui3I6oyq15@yoSjuFdUT0Bi>bAM+kYvWa3#NSLe2c3wv_S@_Zq=c2g}J#9HkA}}kd$*CH53s`J) z0RJ8LvfRydu05*cGiS_ov0^>lvzutm+6P%#+v@B^VwUN*i(2k#6^mr!#F(PHWA*b< z+hPU5_~B7vt$KbYX-4RB<^1W>(=wR6p~+8+glK0B5iK0HT`vYu1K)|#10o_vAHUQn z`*YlSllhn3PkYGDVo;S4R0zK!5;czO2yl73O=z{HA{66JqgerSDABN!}J-#?{mJ z?i;z}+{7E3^Mr4h`R^N6jJdLRi_+93$?SW*Zf*E zsQQ?Z-}+4k;y;uFTgb8YGEGi)~qyJlX#$@5T=)w%Gf$=UlXgE}u^+e&JO z#dmP|LY`5l#^oNS4!=G2T}PhA`Jn#4D)(3n)hXP)r@xwfQa7eq8WidUdbEXhq103z%x2>k>FNV_P9B$ zCZeEU|EkS~kBjvJ7MV2dKDOz5tfn5TPvl~(ef2o+_Y#91qp79OEA;qr)dBl%U*i!p znUaukpbOc0>-o&Mg2K9^EygEY4&LjP7Fwtb&i7Tty#ZeO8k?zJ5S6VpE z&*R|&@p(sTY`eTLoNHe_ySv=K2Uh9xO?W4hB}b@~wQM_PxM<0~$$J8q87Wuf#;0Bt zcC=YH;x1QiAo-);f6tj}lCvQrip;D#e_)&QUo)fLUN58OS_~b! z)ZpIY9K*R6grK4-_wTit@7woV_d;sQ$1U3@?{WC_@{m_miAk}W@Dob^enNR>i(c5Z z7fuPRjKx9Hx1aAgG~-0PB(Kq7uOZi9HoiIb=6i|N8FOPTp4638u=tc6x^}LOm>gmC zY}@VfY}jWnlVdH8C0!anwfdddczQ{dk>4u6)n)Yy?yoXds^h3ZZv{vRq_+SaLTANs z10ERnx`ue}H%3jAgJNA@zHg$>%+qPnDvQ^(qz*agk+)9MtY3jI4|3XRl_xhu&l;QF zd>kgXGAHe-8lE?%krS)g%wl34lO|Il3g&&()z$X=p{!Z}2oaIKv)q-n70>)C5473y zy5O14`GlvQ3zVjhP-%JA)qcS2=GX%HH~04HZ_c^JlfP_=gu}*Z%Q|{QOq^)LEu&Hb z?h+H#u6!&!i(bMr(|fmXpXk`Ay*Y4Hu` zb4|~y{L#&tXJWEjLSZ8k3IF{h`(*B^70ANVnB&-dth?|xl}m(KP=!Tr9yG*vQ88&V zd^5_^^XAd6C0!IZtDawDbLnTV(GFd=ul|^8bfPAI*2-;rk=i`H*`3y1Ew6H>eYeoF zDD;%bYg_oHQ0NMJSouP(^m}IKN>feFOuBU6{IPoA?B5+fSIpYec5&S>?c#3hMhmKIc+Br~KyFU!kYQJs-4g#IP32jRVQ z^H=4g;duKCW_dU{MX*nmy8L0;ZWC1>d+uGJb&;IX*}Z`|%{}iNU9or5+Xwgi6*g+g zZJK?ecw3tIm^E>GhE4V8JABkAMi}skcgk!BRVG6mc^0hDD7pJyBPB^;j6EP&{W0n~ zl38gfsoZpDo>nh4fRE}lo}b9*F~R2tN=1#nsG7BV&g-H;O|#`2M*MOabnx!{ON7Jn zk^@is#oQ}Cul6TTQRN7xG6HR2xE6?mzln7j+JySDTUQD?ivsFA$Y*y==6=w*hb8S+ zDGuk>aWm}rrr^)^(;BDFE_!%8R;NO7&cX44UA~>(GUuh2*$K;l4TD!M@{ti=Wgvg3 zJ&?u=a$sYjuX0<}#a-1XOaeYLTWsWRJLrLR$Y3CJ+pIa=zss%{&VfM%d-UZtTxu!a z7Q9X3?-|XkfN{PaZ#T%TU&7Pc=5cw_%wA^`v{(0)d?5^@mXKFX&Bg*OxDB@%l+TY$ zm$MAinr{n-#i`D9A3S&duL`TjIq_Sc#SX1n=GY;&{iccGO`T))5(TBp3*^5#8wT9H zuzIm^v|`^FN(j2}3pWSS8pl&kyaGmaf5B-sk<`B%U;f9SWo$-EMaF`UWlO!>lXjlC z-55M_ahPxNe{(+HEZaYFn(y~EMl74td<4|1zGWRU5lFXX$JVV~3xRPZ>cCsTS8|5> zX4}o1GvFOp_2%VW>{TvoQt=v3=_eU>ZC)*(*XHz#?-I4qNw0E=^0zRHMBQ z7&K}_U?A0%V6hJ$0WAWIX_NL0AvtAFWHqW$`ok^TCeWCV4(!P_olPT)76>D4*X+92py+M-si!lcW8f7KnK??Y(%O{0hf zU^V%}c=2eAxY7mx#PagX-E%!E@6Jp=ApBt;uw4SiV4EccyEhembB|rc6nOF4fg4+3EcZ?4!4tv%0L;j={0eh#EpR+KJ zKdf1N!R5}U_ezPLj{U-mLV<6I5|)^Z{x!zhQ^suhdLJ2o z(BiKp3DF0F33nG2@`W8Gt~b9bFzRXH(u`!Qs9y$Fe)&5c@8q2EEcsOK=Xpp<+#`5k z{P(K7RY6yQeJI5u?Vx-GxfQ_8&9R)dkT|b0TW8LgLC?>aLB}%3he58RP3kj;AM z^<&gli-sa6j4wh+_E}b-V(~@I=eI^YN!WZsJ0xX5|M>kQ(s#1ZrpdiHtyflN^(MXx zT6W$!0wk*&&o}`XC>2=^hfhD+#e#}%qW4g}<6L&U=pUjS@f!7590*nY3^5usr0j_p zSyG(~d-I>EVUCB)XRZ4=XmW8((>vGQ8^qVYb??3)ZO*>P0{PcQr;FFW=r&iv{hZ** zKmm%AiJl>v0bsD`*FOPo>46p~zrDf1&X0zvF3%2@(rx=SFzISSf-WjhfmQkV{2fsX z@Vtfjw+NCdj|>KOL45`2;MzQb6;n7^NJO(%&UUNnZ_@9LRc7tJyOSTJwfEkkc1JyC zLyAYG%jkZJUh__7WvSMFB#hh+q_2}h3qo^dw0Gbi_)AJO*d zy5e$8-%*2)PsGE~8AHv%N9SyfyHfe&!i0(;bJEr?IXS(TqKEU;*+!ZUXLgH^@r~Uu_WV5(^8=LQ3-GrU z8nbDpVID|x`BT;>bjsMItLM)BWV9Bbg~=az2nwR>aks8rcY*=~qGO9#jIl405~Yy8 z20}QI>MW&ZG+x_wO5$Z*>k9uxQWg))d{>W+I1#g>e1N^&0*9}QA}vP^x`V1oE3xL@ zs-Qkcj09*wI9G0g>j~Zde~~D-u&Ll?cl(def9U+GRT_GW zb5nH?jd}BCS699sOk>|>8poe~xk|t0%963k0g}?v;FPH*e*npkZZ=)UL0EK1$n=z! zcW#j;kL98Z?pn8b>0DS_8ol%07v;u*3({xR#-4~bQ;oS~dh@?9x!i!{|4v|-`4x02 zQn05(53x((aLieF0ls>_9n{mp`SWSsx^(-b(eTd&v3Y<$kwt*%pu-;`N%`LP>)at3 zVaJV=ysR@%Ztt$}F{pT3hE&9hvcZYdhr6xJx}{yw_k73N@PL(X0g>oz!NU*f^z)Ju z#4R5`Jc?G(S%dDRzNaXm!45|}Da8$_4`71w@kK6!kWsHVn5w@0bje!?2B8n|eQ(y! z#Zmw6Gxqv{^23W-|9<|{`ek0rdu029y88({+IL*uL#wQ%XtN6jIWVw6*tMS_%!Mjc7@GQlz1!(o$)v z5L#MNAwollqC`n)Pkrap`+Z->|9Ic`c>msh&+mTj`?{~|yw2-9V+koG+{L%fgeWs^ z+lC{1Lo zKj`Ko`NF`*7v>+#WyU!HUOSeOj3x^X2m^3mM>G_>C6J3Cg==@C3jH z1p|7%eqEpa6*T(F-P`*HMvBW<^>mGl4oaJYE8T__k7(BY)Ab7Cn~xuZ?S94rEvCo7 z&^dzy@V@70j9Brv*wv+6&9V@w7-zkd<#K9>pYaw9Z0(p2P9*;2uV^K%>F))S?r54n zk|bs-z^!?edPwc~%2yL~OE9N`VOBu}xa5@KMF5jqUwRWHI52_hUftfs;iWZ*bi4(#j zDM+7p%Wb@$gIA-T+Z0GkrZ&4Lu~oD81gYpAyqoHJ9W{;K zB=b=OZS)e@uC)T>2b8!s7atI?GV%B~B^lCZ{C>N;2S9QiBS!Gnj1l~NyuBTgfg3-+ z!FAliVqdiyRJ_DQp1tZ+knPqWF$;l3mj%XigsY6u-EiYURTWM(_Iuq1-8;b;3 z@52=;$eBRy(&X2b+lM_0hO;R^rw4BpZ9BABc6xC4;8}>l3^!#nxDE(IGaa3KNhOr! z*)|*5@lGM(y?v)=r_|>BA_H{7L?cet3y9o_S#TP$7Tk~Jdi;a=-R-BMiC$J!U}Y3Q z|3&+p6+m6IiG&80z;jC2&Wbia#zibXgE*Ln-s7u9au&RC$QM7xtRsUtZbJ91-%$>c z+J1a3KH_Q@N^y*0?&oFMDka@(Jo(P_NC<8#GH+`PKtTsyN7D`FMu@KrjCzBbjvu93 zSxD{UY(>|C8FgFcLhk1)XF&DX3(YLz7IZ>y48L5&T06h&LYb7p87wzRM_t9NXR^09 zSn4!w%QA7KtoLP^&dQjkwP-!e=ilp`ySHfSv?vWGu^^M{O;Y7K^_*%kgUJ8K{;gE# zs;V}R797BEt`3|^a7w{k1yGh-RyF}gICLg)&^S1!vjwp4j2$>K;c>fHz4&43ky^rKIm>@u*2SHYiS8n5I`3K29I%W;|L^! zhl#X0m}2v;_9}d&R8QXGc_1|+k^*Fh-WJ)XUAQTB5haNFl}FzB<)u2W>*3;?0cHm5 zIPD$&z3HL>G>(IpC3E3azE)K0H}E;EkxpC9O-((4_Mh=$|F#rRcWO?zF*x*hcSEuD z2o9{KE!HrYd;=*t_=IbiHSPNUqq&OR*MTa+=4^^%f@99*S5r z_7l;Jz-Ru%hym96mbsVL9NH&PmqU-^{tAXzzC5|m0)eo1u@x|c1$QUPilB8Oh^0xN z|5t6~11bn+p+JZ|azw|_5bvi-|0w`0(!ZALkvJ7cN3;5n^55HhcJ|)7OJZY{=S4-; zYkU7Yf^mPC4<)AeHlneLCM8f6xYfYmW(wLGNEk3f24cwl_q5O-f)!?^G)wa!@1$V|L`nKe^Cm zG$ILo16`$V?2HyF(Rzt$&gG#bqEL4y4rk8?Bn%kcz>G)~$YPr4hcC?E z8#YWp`dq2T1j#Tw4R*QNG8tScydbdW(Et4TK1D?vOw9zk5HHzTXrF^V)npm*OQJ^GQu;wF3K{66w3U@UMgZJZGXL92r*dg=%c z8d!`$f704ecYmnf3Z)~Awwi7wg6e*$jl6MsYLKh?ipd49*rz*Oj;u=CmmWw-};0PZ}U^Q>hec{Zg@T zvE+sEkn2uLp82w?g>DZe%^t?MnUyb(zkcqh z7nhD6?(C=^g`fkFJTd*v^mX08<#7!9o|NW=ypO5*?nzi~asXzgIYf zXFN(W9Gepwu#hC)PD<4;c<^8bP0#ie(DN|1hvA2k8{cM@Kw`ZN54e6n2n#bacZ}0o z<8HNt>C|axgfD%=y`9bM_9=ANM43$T+Ezy@IcHh~7UOPE8Z~ z0rf6Y%l58d45FjY4N5LVk^A>ZN_s&)<5ZhTkr~?5vbPPTFf+=+!O<`Cp7@M3s_P89 z!x>#HrInhRDn8a$^@KNEmRNNQ6wa4lT%-Sx6|us^>seTQjhoUa__l&dguwVM$zb#e zut2Ec({|Hv#>|7F04%Wo!v{=%ObpZ>?V3QoiH_!}a=Y{ACnqN8Nr1k#z&iteA$di6 zv6P);|9!P!6WXSso%YGy?+ikyRlYZp>9O~=e&&4(}|4Fv;3Zrm=^l#~cY z7WIUNJ_M4H`MMjCsnYD>g|{WK%(O7+=xdsEolx*uh-{tM5vZyZ-OV$_5bW{Rgdxj; z?vr0I!|?)-1Z8{sVX!Jt?7jRR?l6Aq;zVVDM2&fA_INhzu1U+H+M;enRyT*S*Y_Ks|v9_r}yt}5s(*R$PYUiv=(`9cEG9YOr>SQo9%n>!Yf55NvbqC)PF^|Eb2?^ z(;0Rc&bD?1tE;}t9@j{nJZRt)Y;fhkz~EZ=awPSl|34gPh=Kyf+rPxN1+fz}93C|a zX4-rV7$FD}jdLWr_z0?_HsE6-43seN(|ki{8mE=}F3%(|{#H_)T@J z!ZDeR?Uzu`Bcflob!Xs&g3&CMb!%jnv3SZ+Y9*xzL$*PKVu_Yb=_-r%i&c9?o#)c1 zRTwc+13Qwvq|cZXKzL2KE+`}f1q1HtbY<}5aE0Y8WY)5`M$H9cTaPupWJJ$R6>`zjb`y-MEG*NC(yylbmd zzxdUJ!5p_Ee(d(WgEyUfX@d1CD~37zOZ=)-Nunl^3iT(STrXxZ+0Ts8J(U>=+ zItQJ1Kx8&htf2^ohb7>ia9b!CV4~j^3{&iAQgF)<1f_UjC@*8HY-5u-xCp==!&+$c zH?s}>y@UutO~SA`L_r|H4o0jdM!0d4y?7kG@q|yj@qlsHt*>2C+vPgxP`>$7W%$XM zZx`(b>DhgZ(z-}7HR zw8FO4CBnfS2AM+)!0b?845K#ui+!&lC0Tl+dKwolNz|!p_w;qR3Pw`n5prakeqt}} zvC3xq; zLy}#kB`8B>??0(vE5(sEqI1WVtYGJ-apop|Z@3g1ZS*BCQ}5Lp2G>rqt|i|`@P z08wGZpi*#ujLHJU6Ph$^dQ3Z@-2{8CPq11bA^t&q@Uh_;W-QAd-YpyP#ol35?$T`4 z{JF4BJC&8lECcb`dYXL-!HRvm_i3dKy+6C>vfwKhy6#9}a+Mro0>5*3(BXho4Kc+P z8o>f}JA>hG1}KUjBjsX!*~P_U_`iS;^@Cp%pNUY2G6s8!DMR4E0oZBtK4u5N3C49J zk}sR{TZrS{FDi@utSuG#eo%U|F8i2Z^9A9PmQ=C9YdKv%BvyAE=yb2OnDS)K_(}KC z&FYQ*P5^7rf1pVNSc%;1-n|EKGWH#uoIF^#I}Qd|7_vbxtS)FhQ(hdnEa*H0<`0=uedonw3KnArfc4Ubk>5I8_h#IJ}s8nyZ0mcGs z{R5xK{@|0yc+YgakBBN)qceNrzYLLu1s~CX5N3|Lv2;-&*bx zb@S)+cAh+1j<+%sf1KLYw&|bopx&Ib{Ii|&^VH%!AN{1lLI0)=!tn9@S)>6cfdcLX zMDFVb<{Q|QQ$uR^JM2U;_YFp$OVb|;B2Va`+xUo{z9bp;fXDOa7>-R{-q|a#UyF3& zdPqLmJ2N3l(rK0t@9E^v94j-XMZX0GsWiSACFJDh7RlfYhRO12j959aGQyj85`&4f zx-8LGuV0tP9|g%9JjXMNXNgZTkMJc@k{&%1vRBF3;d|)x*lD9WL&*A0t_C=(Qb^F2 zx`!e~IPoQijPwDNPmE>wu7aqA%jD?9oqP8nlYVMQ9Nk=$3$qIga5cHpMs%IZPjWB2G7GQT_kdAz@e(hZK%nI$y+8&EymxwaUih8+M6|Ns# zB2Hb9$v{*GIW7g=nB-)rX+3Ys;d!UVsE&JwTPaXqsup9!jEu_p(ISSpH_E4ILs53Z z2M1c?7WKE07@#2ypn_zFRuLS1~mUL)Sevo^n4f=rUpsqegIhQ z5av`D(O`UrHwoYOeKO)e&H-Der=`&@90powq_p;IQ z5AJR`*QZ}^5at`ZM+S#F+SBqYN3u65QeKQ^5)z(hiG=RE*?}sx0=XhwwLruzF4%$? zdcocOYD^4YI#h%XL;0%bWkG&EWYG=-5BgCHSpRFS52RHKZ6-HX#w%oFWmH~kHvQI` z@;R8=chAO(B+}aa!LQ24qdT&(QtWtHSKV-OQ`*srbqehT0l8P?^Rv{ZEF5oiRUvP3 z!NX&3>@Uw{q&VpR?kzMh=2B8>z~-P$1GaV%YKtE+dFhAFC@!nLkGGmhf{KYr8oPa} z#72#W;~6p;Mv+|~GeQP9wXiYs%b@d~ac7;AwCg&0XX1cJc3Mb0w5wvULfW{$*u%}E})M0sh6jPz5W`B$LVYnsNr zjcbDPdiUz@#>%}q>+ARYw1?eOrNw|G2jSbaFJ&8L*^E!MUq0qV%%S3KC$xdSIW<3@ z?2n-2f~kdz7hk+T0#kItnp<*~pN3~cYhtgobRWn%O>yILTG$ZBq=; ziOnVMy4!=X_q;4u*GG3OPMA*&$R8N|7?*6`ToJzM_}Av-$HvcZI$YXHA@h@ZKJ9*{ z#Q?ehdd60R09O$xyf_1)&461sz71a;(-5FU_Y`u-kzOeQ0=CG_)p|l$x-2+Jv z-xdbg84G%*WQXTGWePV;R9jLwd^wedE>k&!l4WP{JNqW^ZwFWl4fdv;a&_Io!a_yD z@B{AAqH%Y{EJF4f6Bze@p(QXru9suno>FM$n`cR+sd1E3Y6yeJGB~{L_9tHa7a%Kh zo5;30vQliRw@>zQbCQDJuN^aX+MUn%{Ogr}efeAHFI7eSEE0WxuPB_F6x=3cyBZfC z-!!T>wP4MWq>K3z#u$sIJ4aAPp`$f?u^RX~Asm4*R^d@1uiMk#RE6rKn`vT=bS*17 zbLY9uS_;ZH`2yQLZDm-jR+3WWnrs!uHP;&V35%1)J^upL1%Tmfkf#A6i90 zii1P0o11W}h6U+9IB|SHQwIr z`;M|qo+;(Xr0R9`95Q~c#XBWi3i@VonqRZo{WZni67Bin3x(=FiPkO>iJgOE^9`yU zlw&R}k@P5bLicfSl1P}MU}H;J*569RFM3KM8R}-L{8iDc^J*zk^`{?wps$TU)t40i z)Riamu7dA|zW!@WlxaFCo@7c(mlganh%sYd=hRR#<6$Zb8L~S?f#kKdwRAVYG!Yr# zRO92zN7{-jWpmc=uMO+C)JjS&TqRa+srfb)K1!A4V&iXKd**9FJvy8IO>C9o#37iV zrOfLNY-;%F~KT!CK^TiR82rXAOT_# zXG5%OJfXj+(OHE8A05y_*9kRz42`6~L*!=dehk=}!*}XgchZJ2WiB2)?EhqrWA&y> z!;KuV&vTTmyJn9MF>$*wgz9X~E7k3KPdc|XB1&p*z(a+RFq(FFodN$DXwa>Ifzf@8 zs{-vZbaI(#VXmP*z2nG!X4rIr=$_D-m&d#BWjHsFf>rdDj`-#V zo9+=&hxP1t*AG)QHb=8bi!qcwcaT15ZGGAp%Fmc3)Mp1v6-b+=rTh{Fu_1DX&H$YT;?lp)1jyE(D`OY z#ugF)X!zP`-~JPUHObkxQO$Sfo=FM)wOPP*I^IIIrT5SMbmN=xCNz3kO|6!=rd{Zc z*B(92Z6ZsIg`>>sI1Qcw8oZdftyF+?B1ra(Bs)=ds6Cqeo(}>;iXfFozc3}n1<)&f z264W;PRg#T84Ll8>eHs7mIlk#w&xtKA_f0NQ4&1gexhS!^7S09L}U_dil;$X zM{QznkE3x17TQfq$ii)EJVBb%8S^7Hi1yRKE@l&&oLy`xjOd_aJ_Oux{9wW$^t1_p zSSzbryIC7YE{=N!2qwL-7o*xkfj>7Vh-Np`OM#SO{wOHeDU@}`kH=vRs$=r*Mw7b) zCE`qJOKd}p*tOXtcb(i^>lacPech2S7v~etCg(NA+@GNo6o|%LdME3zCTHV8r8s z!X!H*V}*T3LLB2EGG16`BS{dksY_K|3VCToB+LiMiEPY(a5{xA)5SBP*PS{U!kW-@ zm&O|62L?C9tc4f^me0S~6UO((ZegW{K8I8~M!7>)dQf#)lkqnF%-T>TWyFq>T+@@) z+e^Kif4kg(bnC+OG*2wY7ER!ayLXY1rk4Dr(haEJqO~IK)Rn#bHNNdTBoM~HC%|kF zB*^f3fzJKKicU>Ay-@1Gk}@XjB%W^?>Im@cge0WFKWRuTJ?guABt+$|sB>dBMVRKv zcO7BTH_d4Cuj{#AY8+DKh#ho~V8A~y?aXv@q{P$+z8#Vw`~aH(uh(F#Qm~pNY^Y*2 z@U`li$f_JkxQElukiImPF6e2<#GZF`uB4x5Xf~b5DJv+w%SWb|H90oMi7G$}-E{QE z4ld3s9zNXPURc*`k0c%4tepkK9g_2d8rN0Mb7e+#yqMjrj8Iy$WV1dRP0Q@15nUsu zVI7rwPy5Kx+(Mxv5{diAbeScm8{F)~_IF=C=&_Gxa4I`Hyj_6zK3!CXD$m`x_5;i= ztlJJps0UUiHfZ&`J;G*=iJ|8>C<=dhzY1hxJGb0)$QGlRuWmLw?xcC`N- zJ&Ds*A1dx#$@qHy(xoS0-|a3VwCT|^(&biy=qNC1l5)NY?5}R=7kqYz+IVyd;?W~j z8P#DRfLp`e-5rL%VB6o0eD9oHt|IBCai}|w)5VxxvM91_f6bVg!*)IY=ik*F6ypi(r0W_@022uMUyC);T zvkU#I4v%PJi?}EfC`Cdgh5#Yfj310q&U)&MH~%U&JvRRKdewgFvO>+W!pJmcF7xW3 zBoT$sV63mewX6gUUdQR1VoO=?7H!`x`ga6=hlgtwhL-TeIJHoxJTz0^d6}}UIe*u= zTyn=1HKWZgU#{eZ+`KU>oxqT?bw%xDr_laFza>qQdsk@Kxh@0S-uDS;OvTsNuc4#T zQ2-TBBx_`Lm_0|fO%aUx0HblnnWjX7Xgos{A#qzU&sYykcWL?8!L0>< ztL;2EFU>95XPel0X;~gUUfkRtJILl(;qol>YI#G8e9)zX&W*)PeAI4Z#@uPA2MJW!Qo-A?LKNw zGgr0Z7_y${!47AX&Cjea4h5$rUEHmh#CEee*6>H0|MvjHkr@{{R^g;q8-AP%o~m+;oH_CI&(AE#z=P%hpGo zeMvxm#-^cIb>rLk@8eZMDk_edeE3y-Bt!VuYgP$G!z&864n+3*KcgE1 z$_-Rm)oVD|+0hF`W%Kgcv%Ee0H#W{FEs+iDK=wirH6FlnfYAIcldJ#71(5VKHO-T; z>dH9ajPDXa@3QyYt@R7TtlK6PXH>uWHf3GXxh1JV3xQCOW+%qRTuz_f+agMq72M6U zn6YWI@5nmeR;HN{)3%I=?WIH6a)ss{X$=S10|Uq|M>9&AzbX;imV{W}q@me}A#a_#o=tDJG`YiYKo#pI?eGSZ}) zqpxqdi*EU`LO~LC+3I)s<)zHl6N}&J-L~HI5Dx49#K=$+a#n~a?2)qUI(#v2@O^)8 zuQzC5;1pnZ7TgpxM9i;DU8*DSOYjcdAX_+v?|>mYoO8%J58}oxW;i4!#*@N?!bbA5 z-^N}OC-z$0B}x_WM^FcU2X}Mljm0gK`m&yt1+^dF*B*P%%p%I$RdERevyFaCuLD?{ zIzG<0kPvlV6=uXR}xH zvo8z^*Dh1}Y_}WQzL>$^X?a%a_s=5}=dNnT-MZxrj!km1rWDBI(&%aESVVx;j}b_n zxS!KV1~FJmO@aYfXebn>p>Waw!S(nfW`bToxRJhbf!2N^+Gzt{`vn(GRc*7ACvyOO zLBXK7B=PkrWwsqPuE#I4xpJmQsf0X#KC0%#Guff_=e_$m3(1q@a1@1J&Q=bwylpRb zc4uGTWJ@PFzwf6|)6SLYW7Ln8TDp#p49Jct56WcstY`@ok&@-Zgf5_o=DIb=JItbV z+3=1ctFR?fezIx86&;{|vj1<8yu2sB7;xWQqJv8}Rk;In$z{D>w6*c0*I}PsS@{>) z`X_v~qr+0G4-&@5jR7n)GW(7~F zX9meEILk=yHF|Z>gEj(UGvAP%AayF3@0@yI|1%&zxB3kWtBiJ#q{y!Mz+kTsvUY^Mc5F`BNB?#Z*#3US3=$q-!SnAKV=~u)4NJ zkWF9}Dw3ji=PfZP61a95Y4NQ(Dm*gsa{`tj%X+i0u+RX|)yrt_guZj;ZT9-#KWW*S zoe~x)!}m>{dpaZ^GkCGJhqJ4mYjRyzyiTQ#ON8+A^M?FZ z{boZm`eVnR$8LvyEkXi^@PmW;e!-N+-%G`BaGkD5q~uFx!#W$gC711dKfD3gRL3} z*dVG!UwgTJBJY|Q8sn;kRLwXi2NqJ5S97RV- zmcR>D#L4~H7J*1~ zjFI7r2f;gbd;{r-=(@aTx!3=^U>``zdGWlJT!~X;tH0V|$4vKx2kLB06_%wi+qn+0 zaBJ)Ozx)NBr06HP{LVWx?o8Ed&*qWSD;kFOehX#s zVM5r`Zom1%=A+wUEx*1C#l3KWkgoCiCt_mez6 zHDwJbtEtpD>&Ctrg+c>ieT9|=%S?{3W-NET*SG~8-L+yhLfRerZ*gtHtmB}UUcPL? zdW^7#L&OD}`!HN+XsOm?fEcJ2vSQEw)OtSTE&`MVNHk*i(9D=_;@<&|Opz@b*XbT= z`;%uzco-=NtRxC@?nPDp70^j{vH59u1yqyHt1moBTscp={(zdafi_s~qM_R9d~T?a zUh!O))r-;b%aCNqfGiWB&Sy_uPM+Mx&JIC@0~Zw~C3~Pu7ia1YWg0MD3zszU*TIX` z7zk&w;zGl(Wprl8XgL!Rew9c-d1qSy$$rH7F)_*SK1;hLwfoxPdpjtuZQHF#X4F!> z=}$_*h{f`5V-u4!IHe+t{hW<7_}n+jDZecEk1v4lY6khXTcU4vsfy=SKM|vl@`;FG zP)^Z`?8M;yb(~?h9ODoa>X=@?+IlJ~!?yBND?%4#C-Ots-aM$ehWRsioPpj2eiN?a zJE(-9dqrR{$ApRJqky>Grw5KkaC~TA%JiPqpkVRrIV2J+n3%ZDG4tX-za!5_%w^A? zJNFcNM(~!4teq>AlRV2>;Yzj5%EZR^I?L~|&5lvn}Sl-=&G z{_6sM#P7g^4@wRdR=ne|@F9P+8rTiq6Jkd^a9ffD=LA}W#2)*l#`p~WC}7YUNul$= z&dzRGb?h19IbQ1le+LlpA@NXk|30d^!)QH&qmEzGo`MlF&`$>1`S^*&oDCy*2ufGM zxrUw>B;qv|^U@Up{*kD-BtPp0^P0a138HxMnkw*6A&=rUgO(}Y8xc9OY+>;T5I5UfZ)^0uo*&0JtZmGR$c*Qzd-c( zf_+xD9WK-L-VIiFK=)!N2FL=ax4CDmqAemP{|AQa#8mCHAme!7kd*Q8S%)v$qbXp zT@HPu@AG*(FD`bO(JtaBbO~t9j%iY_G&&+pc0k zPP&9?B@m-=b*sxFg*>XGBOoej{N%w^ymB-`K+Q1}VBJ_t3ZnfWc^>#2%15ka{#3`j z!$ZkCR!{6nJz5-W42t{fIW3Fgi1ZB3qwV}d%W~7(e#j>W%23(a$SvO4;k3WqUX}%| z*Hu`Xg0h9{(7cZycq?F4sLGIn@fK|{;WNb)+qS*7U1{Gwhvx9jaH_O7#n?eyrX9v# zz&B#_BSeJO;7x-bHS@nZ3u9w;^hV>~WNFt&Kh#tlTYi*p=)gVhd1RokF!KZj9% zv#0crL>qm78)dP-V$roD$DD1BwDMDhHCaAzh$$&?T{{@Khx+-~l#6bg&Q4v}#5S<} zCN}{pav-hYS|x8p4H~#Kk}`Jr2B&1SFlH`1Wnt{7bM$dR|7Q?pUnC0P8Y9^`IpMh3 z;Hn&2qe7OyL)1>$s|AWJ-@ku{>IQ!L-R5x&A=z!-=W~TvT{8-VsO}ReIUsf;2=!Wb z&7(2*y@g9|Z+6(Hc0V!RX!Sxh@35)HVG7!a`=F(R*4Z=jVxgh2afcUoeslQO+U8Yn zu*MP$$7g$!VXBsFbB+bP{RoAziM@B3cx<_bDA`6Zf-DQAKt%T{O1KBM+Tl; ze+E1lkc4#vP=bLEfRF#paZ5}8)x~XkOvI(BZ8J5l5uTP0NFK9Ho3BuxnE2JkCV0w; z)RB=)duCK(KI171oe5Zn4;-QBvNh{X`30u~X1Bb!#d>LT3mU)8i!soLM?}Dw#RH0s zpK=H!2@ZGJ%@&haC z_>SXHh8c?FNm}Am6^fw3G@kK*_81CpT7JRwzS!!M!g?Ir8FM35@|*K)URl5IZ`KjP zLaY~X%0JrxJh04(}x){=g%0O7RS|CmRZd3VQ%YaWW%bVp~bQJTak7kIxZZBCJ#QYDYv>zlS zNW}iOooO0Y=UQHnj_}Le-NH`LdI`SWiA~V9I**M7bJ%SHmIMZjg8XJ1_PO1Ie)MMV zKYWNwrL6iP`gsaajbb1Xgi>%fdR_yoMxUnH5sJ{(Cr*G6X_NJMgN9>v6#ar6hp@Kq zm}@qdk;pDo?pKV6$sy}@680?GG`c_Smzlpe<)%$UcJ(B!VAyQj(si(j?a5A|)_`X) zO6LS+1;LOihYULuc41%uA?39Qh(tiHhb)utD)bm&YeudN@pTsldLUbIc+CisET0aG ziJ1()!i9$$p0Dow#)=hgBM$J7klj~7TOMezjUTE{5<64Q_Nkv~JAJlh{vFMJ>1z{q z$Nq+~v9Ub{pB#gdH8#2tWH&xm`D~w`5pNeNsXtEt;o4v|DBJh5UDVfF5=z4zrD5f4EpLox_A!W25gHLD|!94=t)(8Z{csC&)V%@i=JB( zp)*(Py_=@FuaAv{V$BB?2g-X?0pqCc(SX2FmbBeToC57f1b?%$5t-a0IKMg_+hOcu zc)CRJ6oV?Sk-y?fP%{@Xn+Vn*iI{go+iHA%Bf$x`r){{TURdOZvcE+jK-fl+M5QC;y>9ZDY;z357LUWSxj- z*lp0{$AyF`iV@TVq33X2AU!J|l0{@VmiG?>fRL@*g=GW*HW`6)256cI;3wm3gwe7dwus4c%*u)`Qo1OWyZBP)w*Rt1y}g60WVd zFug7*Z5$2y;72E0sD0m%?cx1`Lz66Q#q(izSz|EQ`~Kw1sgaD5dptR3EABL0{Wijy z6m(!6Zw~rW=t=z&amr`#_?^Q-N8X?&Q2z1U8&kVTuKnV?H3hh}@vAV6hi21d&{`n< zw0U}+jCg3Ql8u=eB?;gKQUVU#E?z0Q?}@}#f#|1UXyY`hY&ez_kAFp<3X?U6jx?_^ zZvpR*k>OzyDMk}{@n__!e3y6p_YF29g_JxZ&wU;j6#@ibx*4roX5+>Cjo%^)JC4{H z*L>>Q6*SDct`rdj6E%cjG)VGmcgN6L&z*EQ-YygtC-FBx*LSL(M)R2N zQ7w$i4D%sVLj(8z7BUjLHQr<09Uni|)ac!UcNNkdXj9n3_skvfTGC#~-Ny(2$yNpi z*28F5dIEbzlBu`MO`P{|P9_IF^};9^jb%*bj<96Xs>$lkD+s7gGcLq5{ItAq#Cgdv z8bAfm!u)pQ{okx*g?*{t6kGjXzr_25qh|(_Gn6VwtqI5)J;C?rghFO)Y#E*}RS+@8 z;E5ZwO3y+2S@J6nq)<^n*i)+`BSHfnKAWYHsT;g13=omb^JawOID@Y~k*^q?;Weak0GCBAUi~x_=M8CJ#^BDUwnP8H3qb&->1$8UqrU z2IrgmsTBiX+Xn7->HpW>cy*_#f`;0Gv0Rthh^YB&TI|0gq9cQAYb+_gpY9s6;o`rwF zVsU1WX!iz{Q4;SVu8v?Ere$DKC{yM_sCXe#=UN+F zlhgVZLKr1YBlw;@tk?MEJCY@gUyD7RYjVb7*Ql%F>N3;6n0qoUx!{ji7~gDag{%wu z{3g$)}Z3J@vPp2t_vaf-U1aN*b&GP5Ez;Szp&%W8xO}Cl`zI zcwkwIIS86G!WJHar}S&!^Me{sWq^DWSc{cD<;G_+5c$n^RmNv1crVpWi=F!++kNZL ztF$Za);4>N4(l5#YPlJ8t9rT^?C34x3HyOGT3k%b-tXFE#`s_DmeuGvoJfMX5hQo^N}gr;rI2oH3LMh29lKK9LI`M zf}VnS2^8kYkH_d)6>vQ>3}Z2D%x-@3W_LsB{E>u3;L$zZFQf(S9UZX-b&;yN_-16_1s?4K8wymw@&8n~lB&QIRul=ZAIsggcgDPiVz zws3f;w5YF`VS$fi_|-_(Q~a;_B?gjP>d7hxT~|(ej|Wwr&2w~?!o5IzF(0<$r%mPI zK`v5R&(LJ%{p#%4*f+pWc%6u8I8db{31iu(7e{D)fdQ_fTGlt(=mk4$BBB=y2xxFL z<&nvmu|ny&GRDFSjFgwS z_D8P=t%c%<6XH86lZ!H&WygYxg#$@T{(%U$6ciL41yxmE=&gsURvmdTJZul8rPWn` zU=6_9PdWcb`O$jvfRt144QXcRcd{E>tRkrM+=qMnGU;p&d}hf^uo4_%mi3A_NZeLSTT44g2xZdQzBJ;oxFQ3Ayl(pAY>a07sXE?{>M6)O|)j37~PksQm!YUCz7I|E?K7$}>P^{Jy2x*^n~; z(9ic(fY|gjk~@ith}Z4o!(Rxp$uuz!=UfqB8?R}rpKPM0>B<;nquAFE#V{#4P)$-P1AYi)L-F5K@t!JPj9Hp1F+ zlH2^R_oFy0sm2?PDkZ_sR>5(rEX>UCd{*zu=r&~-pAjHEmo3$}^Gfx`y!&{zfK1k{ zqf%}?pN3}>o@X&Flg*xg(`6zMl<~T~9Z-Lj|EMWHD9pqNgT&hE>gz0}gKbL$XiOuy zA76(z2vxbfjjvS`!;go(%hRh@oE;1Nmmkk-eq_1EmhevR#^-;6Z2~zzuBlwvW-Z7{ z2lere3t}ehQf{d*0?8&^qkp@-rI*>bLzSqlx=plbdSa*cnl4C9uOD^J>y*8pJJ4wR zh32)J0-KWG)ykYli)#!=qNu7PPE4n^W|@ldnGM86V3Rdi|hXDQq)Uajki2 z<3f)foBeg~y)S8=d`dwkYxfuRk*85F)-p_(*Q!Jn?!HpiYqCtAurK@AqSEqCxyZ1O zci~*!YU-LSFM3l}w`iZXM{itgu!ZGL5fmr~j3#Fv*-8E*tM;-jdx z$o6#T_Po}wuF6S>2+6&ebbIfq00SYN4q;oCQw43kJ^SBuycyZHU~^Y#C2meiP%Fwn zy3f&Q{Csz1%rUMnWpRI`X7@flGyE5=gw3H&HrHlwz{b%bvb3Zjfto@{cs>oNt>Y&c zV|#f0rh^z%3M2N?s9vh}aukZn9Opc?{`#Zo%8tyyIDIL-!>jAuK{MQrB9CUi2-z~6 zSXbq)m2+17*i&8el8JP%<$fRcwZB0r0{%8Kdva}rB4WhL_~#^zPerZYxvD1sjaNQj z`SYnAD(C%3i)j}3$K1OQe@%Q5@N!bDx_l_PT1vA=UAp+2d(?``ua$fIG>d_MN_W{>dn68_^NJDm&4t7T8}gI~sHtL2*8zk9fH@y{P31*eur=q+e`rq^ftbGSO| zWZ8q_8@CwD^^y|ewMdQVexOo-krB^a4`&vVLnL;9$BN9xAkq#9d+#L2f5()DI5Zi2 zyu5jLQ%eY>Z_N+mdw()A_wAl z?zoSE4vm>Yo2v@E>(|6O&y9)4cPX0(WyU;CUv_(w6kfM}@LA!|Qw%SiJWQ3b6cn@* z|LHM9s{`WO6O!7Pw5A`%$iV1!jEbtOa#>h9arU7neE~wz-CC7}j`o?R=|e zG;9*9CZ<(RAHP~Iy!Y|-7Cr~JrK!KBPuun8Sq0Nv=3XTJ;(5qZ(4WsuBFWwk1X=*u z9ABf26r_-B2x;N4{^H4^C^w%2-Xa)pMBq9sgl*Bl{=6jQTw6jXuaJ9f%Ctf(hP}@7aZ^8baN{;ecBe% zhDeYUxSF`W(E8@-d2y26kKNx-DtJCKJSd?U^lF(=#Z>FI@2MoUSnslSB{hbWb-t>_ zSni``^YvL?ZzyS+|(-vF@ zoXrHMmPjN(LP7!pCoAo(9&B)dX?k`cpGtU8SUBzIAjpy-oM!AvBK>}q7?F-+op*yF zBhc8HZ#9CRi`ui7Rk7ui$pLz1{7-AHw|4&b%FP8UQ{GSGhWD}-{yxeQf2BUfsF!d2 zYK|o+{au=7eyJkUfuD8j%PAaT*Eu}@8r9-uM;xX1bh|VEb(x|0+8Bpt@$FmFksKEL zWJ|3+wNQ>e&WLH4zp}mRMf29Lk2!Mwve>qs&v35yKIS@PD8bpPoqi^-bL^AOc*jbq znl#gT>RIbKSyChaReIGuoBimL^mfQSJXEwucdDzXj6Uf`sgt84^y-_YcNHtWer7Z! z+GSiM@N%!fp|ZtEx~z`xVK09>(jO{#Z~y3q#x0FX@!SCYVKUN{79DMEl=3m9A_NO& zPq;m~59@ATBM?39MLbDe7Ww-HC2j>kGAX<0*sr4digI*cG)HM~7<)T z3g3b%cPHgw!#l!Ur$uPK<=H1@_@U*#x?4j)-EccEVfOzFg_`X z@6$D+i${~QOjK{vyeH(WO{+WB{LGHVTX_!ZxoA+6?LEtC;Jr0#{O<7sT&HaYMhcl< z$oK>di943~9%G1p6|gIX-|645vxzm8);midilHBqcfS|^FlN^A$Sx3GyLdoljfPb5 z*qFo8cO*hoHs-#Yn}%1El408jvpa9y%h?dku$t(vea1#*W`h5s2_6pCxSLY4`tG*y zW6VQsy!0dZRwRDvb(I_uA=}7+Y)m`7z<+S(T4W9W5 zN02Q_zG?eKU6&^m8uNL)O{MCiSFPng53k+EG6+IcXi*ACGBJ5V(iz=ew7e-a@F!^ zfI&}m@uj}ZfW967oQ9N!$a1VsWHP^b>2Re>;#J&U!I*MlSah%5v-3@T6ee`hzD$PPq|iG;8k_XJT#XjLTI|1L zUly@Pr=>=^J(HYiV=^9O$ZvRqaq^p$_Bl({S5XvMB|Y`9NZCCX;HB@`@0ao+D&up| zgkHHuh=_;n&boN^loKD^Rmcshbj9DiVzH)-xAuJ>9#XK_9n5pg{PoAwDFaWk2J)NB zZ+PT}0_aKZ-+jlfN;X++&vKLJSdkJunlPw+%sbybGRI=#E!j}8cC&O;E`}~)KCi_E-Ebi=9@6^jFwe7DSvuwPP=#$>HFuoUlK2xt%vOCRYQC#eP`DH z(UATarhQk~LhaKNKQ(mXV)IMZY~B0Hg-l#sWd-iRH1s37Z$m!t9{RL$)*vZsa$E0&I+iHi@-HwZo2&~a>^69CRK3XJOSLZQe&3?8(zQpTX^W>p@MHP{m zr>}yWFLTu!1>7q7yg`r{jGxug^A4zRpifv=NZaE;cLw%5Fw`=6XpW zn_P_2n`cX(^-DhvUC{pVJx<@i{D-Yl)vfNn;EuTdZ~NkBqj`olliFXDFmrVsaSWwo z?w6>yp#8eu(ERPJrwEy`{WN1rK~I88`I2f=`IX!t1?II+iM?OG zzmj}*piBGSDqDQ2;M-%QkOZ+qR_r^hZgj;yhHo{!!ZzY@<4zDL%y5x;Np#iceuIOu zQ`OTZzVQPq?+*2zI0tb<>yNjwe<}0v_o=3f0iqH zkBBoBsP3lWDKF%aq_}Ny_8$2esfj+FQe1k%G182 z8?qjCSDIwDhCS;(wI28C+P|-V>J8ccAfG$k8d7+(WT%q^huaensx6g`Og%T(tBh#O z@vN+t+&tcRK(I(##ObV=UULv1YgrI~*}vNl|7D!s&Y0%)-S^|)TH6S@XMAi1Ycpz% zU+#TOVmtUDO|XHcqzfGBJ4a$g;yIlLtd8zdL#jG1?@2S~) z)-``6ZKwZf?z?w6Nt{dD^6a6z+3x}=)z0cHOt=<`Mtb#e^;$2KXMM~FjC<&5n>U#M z^I0=ekJwTt{?83nIl1l+((5DRpDnoXgokYmVPN|eZYD;MI!yC{hZ(p|G?t|lHFrMc zs^S!J<)LcSkDd5_wjs#*_|S~BOmEaeWBP249_8()LX^yxyPxnf|UY(JCw^LY#d0iv7hWb8DxEwyV4A-^(s) z&vmxwSk<~?a>7l>WF+F*kEDw(wlB72o%khC?|Pj6m&1qmIXzBC6^6ulICiO9(5eR| z6;i9*4BZ$&hL8xMDQi8ImuRh=H!2xLA|tC9IpOc*|8(%x=ac)q9bUw^yY34c z>wmywe$tTa?!W5IU)z4vuUb|*H^e?j{&0ettJI9D4e3#4Kzs4heM+*nKV~mDyLxP1 z{3MZPJqu?WS4aHviz#{DhSY{Q`{(Mc7HW&g=JR~ag;Q?Zt&PfiPbCpHGr;|}ao@@O zvMk5(`=I-hqBK*G5*NS!#U`5fn(4vr^(1qR%Vn)p*K~a)eV#0rzGIE5Zqa|{oqqU< zNod&ng`2KV-JJY0CqHdb@lf4GVPJl!m4@$G$q7Cc-iVM}PjlV>MU0abZ4DF4URum- zG15O6%K)wNTWL~XVz+NZpoERrAP$_d>4LG_fvq+42Ub0vj*bnYMqyU;^)^`XW}Pdu zz+{88Z60giJa5*~_IftUBXxGlj%TSH4m1?}m|SH~vNRqjIb=&0aL&vv{-<63$2Kef z=2fYEFNB^Sr%6NMWUF;mKtx+`1XG18JpK-^jsL1_YIw|1WuZK{{n?#3U89xW=SeSi z8IuBU+3oRnn2UFc|4eBf@XvzRF3;tO>#umQ7krBZem>+x$Hl{6>K*B$>c<1Es_zZYp8zz!O@(H z)aN;*|B}3^`O%zgsy74O!ovjHsfkjj|}q)$BZZg2Jol((@0=yYX6$+_<#v&;GQhtEZq3B_`Dqa+ z)gmLSK6n)7YK2!5R;IZrV^1QE(SKPg5RkGddK9TLP*wSLWWQ$oa|Xn{6Qwj({tvCRWYcYK9#3q0U%UkmtLG}8UPq&9;z=Q)Iuthd z<3J@*lI3RIMW>G8Jn9cjqA$ z{w_GhVsJ~Ud`Z`~p>xz6WdA8Ber6Rs$J-2w!5le;FS-CchL?+ckHa)o*u) zlMoB}qk5a}WRbf|kE2SgQxeTTf+_+wcvYbWtEr1?!Tt=cW!)lb+sjv+r$Et zuXW=aHNQpW=%Ov1Fzxn|$Ev4oDv8FclvkepV6LI8##JXM&AkST+9;~&n%H0dwKux< zs=>e4A3`(HL$|f>N)^Lp|1#M520AwdG``_%@Njo@4~&SeDA{$O>MdU8?|bGS}nNymzC z6^GQ<=jY}|1bucp?BRB%!zmFPO7bwbMYV7DKfG&H;!%xsaVg2gs(!^z5fsSQT?c6- zMtTMAY{AC&G2%x2&@u8h-(@&U8gBCEZA9gUJRCT}PW+(~_FwS6bi_G%Am_k&Mpj1F z=uOmH`sLlcqHD$tibdOYwV{7nYt!hQOhJ&dPtNW)OZUs1Im58WHM_^uxfdX{_i!R@J$8~Y zn=RpRA*|#Umr3^C>Wiq-dGolJ@08IfY4_F1e7Xa?waBuC`Q5#N<5rVCM_(}%?wL>7 z)MRgDzFzmFE8ugBS+ixJVE>$-I5K{5lP9BBT&iS$yR6Wq%w%7J&!xL~sE6zPM5f@= z&jgE|_eS;7E~)zwTFX-0XxGKE!ZIx;Ct<$KTl4s2jSM0Cw@<#V&e-d!@y=?KpexMh zLAop`VDY;$?)F8dB!HxV7;k0eOvy|>pLE>7IMMBhcQz<@`~66cW=agvB#;$d?q;Fv z_UQ-ybPc^6Qqihra%f8YSx(-(U(;wYn`lSE?J1d*pA{wDqHajh}edu`u7Or@SQZ=Nf7+meOR5oB`RpretAN^JB^2en-md z8NTZqNnd6jx@;f6A7QMckX!zWpjG$zx~S^RWp@-H|8@6+{ELQf+W< zgPdWg^>wA?(E`Qv*K5%`=tc7p$9)@p>wJ9lejoXg>p( z93_Pb+*u<+g$Kzl$K)3j5Dw0);0iKh`C`~)LUqn<5Z5pm-kOvD=?>-ED?(nB6y*IN zvHz<^B)wt<)m!9z(A9ZBu8<@hz#eFVYj)@WNZePOns5SSw!ExN6|{a6aPr`v8k%-b z^Y{)Dj?L*p-_)G$7MGkqC$ZfxPa7fM<^!1pW%4OxMp6L<3o0z~y@6x+s-2qwh%=Xq zBe7EJUks9Zlr=R2mP?9mS5QNCiUQpWbu^*bK+glB4FJI_Z7|1{dVezIWH3({50LuZ{*S^?$ z%5W+(B;fQ48S%-i-nuB8`#lQKK-H4k%l|LCQamkU`Z3_F0BD#qkLf#LV|frJ7s^s( z;=M8HANBOTeVws|@2c=`lFV`B4d{y9o9Vrv5$OXe6vYdx&6(MOjEf6uLG1Itxdje# z+7{3fD!q;(E`R_AT*8<>932H+RD_u%TsG7QSME*Y6GM8)jphB8tn@Dw%nr^5*@4&v z`=(2$7YRi0<-7|NR9q=k=6V(e$(7`<3eeG5CZXK2CAvs=@e|ZXWXFP=R^I0v4jS;K3 zCF)|R@5&{Z1SIjX;YzcW4KF##nnGm(Nr(4spIDfk85J4uteZzG?19Dis<2gNP4#cz z%CwO>P|y%MFml$T2?zk*$vq6qDly-hw~MdxzF|Mc2=u#IngzXHOu8faT&b^T)wxHi` z|GL4=Z3x&+b@dp1Bxwvq*jW(aApqG%Z+7znWmr<2EydoCD5V?oLiQL+D2fNVws&7l z+?R$KWNgeprT{KcYRkZ91%ns4#^6~+!(uRa=wEo!Mn5Su~{ zCGS}mban=77MTEE9wggNQ*x1>mc}-p;-f22)ZvbY2+~Ww1{?2A1SN)H-v=tDvk3vGmc7(6bhOhd)5a=GD@7Wg|ZPEM<%(mwfXOTN83 z>bALLjeiO>y~{rDBsa2ENEKsO*!7!pXt>%e-GM%?9-bhoMrS+dAkl zLXUqUhe>T_%8vyM2k;AB-IZS5H7AZ*T(s2?TKqyC4wz!=1=~ZdII7B)3Ba5*qfjH$ zu7YpiqnEp3pa;5EJwT3P3rx~!DMOlBRjZdy*)pHJq-1iVAv(U7jo$hix$n!a&d0v! zZn;QsX$O=lNDt=-&_D?fBHa*?<|M}z0LTKwmi)O)RRm2!O18b1W#JP_wSN@eK8scT za`a`Nmx7PQ-*g%XR-goun3*ZLO&ambj-(c>MX&{U;hT4W<;&Z%ITTmev4YRG{~&<1 zjAiGf_I#>+N$SGxH=Xy@jd88ya*@D{Vq{>jwy~jo@&MXE9hgsn2&K=3tHd@sY2XnN zyd(^y9d1S*+-UQE-*MqAr;7CUP>ysd59T&E6`D3tzdK9K-*ixe>)WTWQ{X;64e>{g z04Xv!^V|&~BWjccxL^|B9WWzOT9MI1z3C2JeK%*-Il21b%w*Z8;6P!j|AmZ`JYJZq z2~PgbpFcn0i*MF1bC2wS7*6I9ytVxiK!OD1KM2O4VM6qsE$49CDr7$Y=)$G5S3_=p z9#RxWG874LL+{RABVSbozQ! zyk#N&mDl^*9qIsX0BLgCb&;SB7f^_gr#V<)mw<&Ej6eZD_vTF|*v)6(st{`Y;dWiX z>}kH*jMB;lT!6fUlY_PUyUl$|Yxn-u_w#~e>^W#Ia7sHm@#%Ik&lTyH@T ztZQygQepyI$HTr$Rzr6O3qE8sRqGN|L=u8qym8<0rmfw}mhC&O%f!QfK$C0S8P9xO z5R|)=PC_}B+OUA2uEIhI#7RJRdx&L5JNtibFB`QS`(K>MXU= zZxwgOTX`COmY))-H9fkYk&ti`Gzfu73=k1DsSu}3cW9ln)j$%%e{}yZ{+7$ zZB%2}ZnL9*!oh#- zc)g*SX}Pl=7SG{k6N0g$S5jd*E%ur-CY+Tj0sb`8Wzs_)3;x8WHy89OM2@!juwPcY zi;SJ>yMFe1eMuInNg|%@WKN|;8msG*gYCBfbj!hE1*=@pf&wK zNdVy$fLkFA41q%S$cQzqNJLrgTIi)qX|`v@GWo&yA@R6+mP9Hkm`6MagV!6SeXal$ z&MGT0s~%0JmHp5A7QQvsUc9UV5*GKn<6!H#5UW(72JbPV@&)8K)I|=h5W+tNcXTLK zVOIz~lB`-_ateM(T*y>)E)aWRWE6#n8-=>lG@g}_@q^(Qh+r!xD))cpM=(gPMeQc@6y=}AhtEdQGaZhj#J+1(TS`-@C1)K5y6$DqSV xiGEcXbhsh?AH^6L(sjXqG)W!-|4&7ZA5n-P48BA + + + + + + + + Async + + + Sync + + + + + + + Idle Mixers + + + + + + + + + ... + + + + + + + + Mixer + + + + + + + + Mixer + + + + + + + + + + + + ... + + + + + + + + Mixer + + + + + + + + Mixer + + + + + + + + + + + ... + + + + + + + + Mixer + + + + + + + + Mixer + + + + + + + + + + + + + + Thread Pool + + + + + + + ... + + + + + + + + + Seek + + + + + + + + Compose + + + + + + + Live Mixers Thread # + 1 + + + + + + + + + ... + + + + + + + + Mixer + + + + + + + + Mixer + + + + + + + + + + + + + + Thread Pool + + + + + + + ... + + + + + + + + + Seek + + + + + + + + Compose + + + + + + + Live Mixers Thread # + n + + + + + + + + + ... + + + + + + + + Mixer + + + + + + + + Mixer + + + + + + + + + + Disposer + + + + New + Mixer/Driver + + + + Create + + + + + + + + Schedule Mixer + + + + + + + + + + + + + + Deschedule + + + + + + + Move Mixer + + + ... + + + + + + + + + + Destroy + + + + + + + + + + + + Interaction + + + + + + + + Messages + + + + Track cleanup + + + diff --git a/src/config.rs b/src/config.rs index 6a8ec37..ba3ecbe 100644 --- a/src/config.rs +++ b/src/config.rs @@ -2,12 +2,21 @@ use crate::driver::DecodeMode; #[cfg(feature = "driver")] use crate::{ - driver::{retry::Retry, tasks::disposal::DisposalThread, CryptoMode, MixMode}, + driver::{ + retry::Retry, + tasks::disposal::DisposalThread, + CryptoMode, + MixMode, + Scheduler, + DEFAULT_SCHEDULER, + }, input::codecs::*, }; #[cfg(test)] use crate::driver::test_config::*; +#[cfg(all(test, feature = "driver"))] +use crate::driver::SchedulerConfig; #[cfg(feature = "driver")] use symphonia::core::{codecs::CodecRegistry, probe::Probe}; @@ -166,6 +175,7 @@ pub struct Config { /// /// [`PROBE`]: static@PROBE pub format_registry: &'static Probe, + #[cfg(feature = "driver")] /// The Sender for a channel that will run the destructor of possibly blocking values. /// @@ -177,6 +187,15 @@ pub struct Config { /// [`Songbird`]: crate::Songbird pub disposer: Option, + #[cfg(feature = "driver")] + /// The scheduler is responsible for mapping idle and active [`Driver`] instances + /// to threads. + /// + /// If set to None, then songbird will initialise the [`DEFAULT_SCHEDULER`]. + /// + /// [`Driver`]: crate::Driver + pub scheduler: Option, + // Test only attributes #[cfg(feature = "driver")] #[cfg(test)] @@ -220,6 +239,8 @@ impl Default for Config { #[cfg(feature = "driver")] disposer: None, #[cfg(feature = "driver")] + scheduler: None, + #[cfg(feature = "driver")] #[cfg(test)] tick_style: TickStyle::Timed, #[cfg(feature = "driver")] @@ -326,6 +347,22 @@ impl Config { self } + /// Sets this `Config`'s mixer scheduler. + #[must_use] + pub fn scheduler(mut self, scheduler: Scheduler) -> Self { + self.scheduler = Some(scheduler); + self + } + + /// Returns a lightweight reference to the audio scheduler this `Config` will use. + #[must_use] + pub fn get_scheduler(&self) -> Scheduler { + self.scheduler + .as_ref() + .unwrap_or(&*DEFAULT_SCHEDULER) + .clone() + } + /// Ensures a global disposer has been set, initializing one if not. #[must_use] pub(crate) fn initialise_disposer(self) -> Self { @@ -381,8 +418,13 @@ impl Config { (OutputMode::Rtp(rtp_tx), OutputReceiver::Rtp(rtp_rx)) }; + let mut sc_config = SchedulerConfig::default(); + sc_config.strategy = crate::driver::SchedulerMode::MaxPerThread(1.try_into().unwrap()); + let config = Config::default() .tick_style(TickStyle::UntimedWithExecLimit(tick_rx)) + // give each test its own thread in the scheduler for simplicity. + .scheduler(Scheduler::new(sc_config)) .override_connection(Some(conn)); let handle = DriverTestHandle { rx, tx: tick_tx }; diff --git a/src/constants.rs b/src/constants.rs index 332dc73..f31ff8a 100644 --- a/src/constants.rs +++ b/src/constants.rs @@ -122,6 +122,9 @@ pub mod test_data { /// Path to a Wav source which can be read via a File. pub const FILE_WAV_TARGET: &str = "resources/loop.wav"; + /// Path to a shorter MP3 source which can be read via a File. + pub const FILE_SHORT_MP3_TARGET: &str = "resources/ting.mp3"; + /// Path to an MP4 (H264 + AAC) source which can be read via a File. pub const FILE_VID_TARGET: &str = "resources/ting-vid.mp4"; } diff --git a/src/driver/bench_internals.rs b/src/driver/bench_internals.rs index a12fa97..3dfb035 100644 --- a/src/driver/bench_internals.rs +++ b/src/driver/bench_internals.rs @@ -17,3 +17,7 @@ use crate::{ pub fn track_context(t: Track) -> (TrackHandle, TrackContext) { t.into_context() } + +pub mod scheduler { + pub use crate::driver::scheduler::*; +} diff --git a/src/driver/mod.rs b/src/driver/mod.rs index 4045978..3e5b58b 100644 --- a/src/driver/mod.rs +++ b/src/driver/mod.rs @@ -17,9 +17,12 @@ mod crypto; mod decode_mode; mod mix_mode; pub mod retry; +mod scheduler; pub(crate) mod tasks; #[cfg(test)] pub(crate) mod test_config; +#[cfg(any(test, feature = "internals"))] +mod test_impls; use connection::error::{Error, Result}; pub use crypto::CryptoMode; @@ -27,8 +30,18 @@ pub(crate) use crypto::CryptoState; #[cfg(feature = "receive")] pub use decode_mode::DecodeMode; pub use mix_mode::MixMode; +pub use scheduler::{ + Config as SchedulerConfig, + Error as SchedulerError, + LiveStatBlock, + Mode as SchedulerMode, + Scheduler, + DEFAULT_SCHEDULER, +}; #[cfg(test)] pub use test_config::*; +#[cfg(any(test, feature = "internals"))] +pub use test_impls::*; #[cfg(feature = "builtin-queue")] use crate::tracks::TrackQueue; diff --git a/src/driver/scheduler/config.rs b/src/driver/scheduler/config.rs new file mode 100644 index 0000000..87a3b0f --- /dev/null +++ b/src/driver/scheduler/config.rs @@ -0,0 +1,66 @@ +use std::num::NonZeroUsize; + +use super::*; + +/// Configuration for how a [`Scheduler`] handles tasks. +/// +/// [`Scheduler`]: super::Scheduler +#[derive(Clone, Debug)] +#[non_exhaustive] +pub struct Config { + /// How Live mixer tasks will be mapped to individual threads. + /// + /// Defaults to `Mode::MaxPerThread(16)`. + pub strategy: Mode, + /// Move costly mixers to another thread if their parent worker is at + /// risk of missing its deadlines. + /// + /// Defaults to `true`. + pub move_expensive_tasks: bool, +} + +impl Default for Config { + fn default() -> Self { + Self { + strategy: Mode::default(), + move_expensive_tasks: true, + } + } +} + +/// Strategies for mapping live mixer tasks to individual threads. +/// +/// Defaults to `MaxPerThread(16)`. +#[derive(Clone, Debug)] +#[non_exhaustive] +pub enum Mode { + /// Allows at most `n` tasks to run per thread. + MaxPerThread(NonZeroUsize), +} + +impl Mode { + /// Returns the number of `Mixer`s that a scheduler should preallocate + /// resources for. + pub(crate) fn prealloc_size(&self) -> usize { + match self { + Self::MaxPerThread(n) => n.get(), + } + } + + /// Returns the maximum number of concurrent mixers that a scheduler is + /// allowed to place on a single thread. + /// + /// Future scheduling modes may choose to limit *only* on execution cost. + #[allow(clippy::unnecessary_wraps)] + pub(crate) fn task_limit(&self) -> Option { + match self { + Self::MaxPerThread(n) => Some(n.get()), + } + } +} + +impl Default for Mode { + fn default() -> Self { + Self::MaxPerThread(DEFAULT_MIXERS_PER_THREAD) + } +} diff --git a/src/driver/scheduler/idle.rs b/src/driver/scheduler/idle.rs new file mode 100644 index 0000000..ad4042b --- /dev/null +++ b/src/driver/scheduler/idle.rs @@ -0,0 +1,319 @@ +use std::{collections::HashMap, sync::Arc, time::Duration}; + +use flume::{Receiver, Sender}; +use nohash_hasher::{BuildNoHashHasher, IntMap}; +use tokio::time::{Instant as TokInstant, Interval}; + +use crate::constants::*; + +use super::*; + +const THREAD_CULL_TIMER: Duration = Duration::from_secs(60); + +/// An async task responsible for maintaining UDP keepalives and event state for inactive +/// `Mixer` tasks. +pub(crate) struct Idle { + config: Config, + cull_timer: Duration, + tasks: IntMap, + // track taskids which are live to prevent their realloc? unlikely w u64 but still + pub(crate) stats: Arc, + rx: Receiver, + tx: Sender, + next_id: TaskId, + next_worker_id: WorkerId, + workers: Vec, + to_cull: Vec, +} + +impl Idle { + pub fn new(config: Config) -> (Self, Sender) { + let (tx, rx) = flume::unbounded(); + + let stats = Arc::default(); + let tasks = HashMap::with_capacity_and_hasher(128, BuildNoHashHasher::default()); + + // TODO: include heap of keepalive sending times? + let out = Self { + config, + cull_timer: THREAD_CULL_TIMER, + tasks, + stats, + rx, + tx: tx.clone(), + next_id: TaskId::new(), + next_worker_id: WorkerId::new(), + workers: Vec::with_capacity(16), + to_cull: vec![], + }; + + (out, tx) + } + + /// Run the inner task until all external `Scheduler` handles are dropped. + async fn run(&mut self) { + let mut interval = tokio::time::interval(TIMESTEP_LENGTH); + while self.run_once(&mut interval).await {} + } + + /// Run one 'tick' of idle thread maintenance. + /// + /// This is a priority system over 2 main tasks: + /// 1) handle scheduling/upgrade/action requests for mixers + /// 2) [every 20ms]tick the main timer for each task, send keepalive if + /// needed, reclaim & cull workers. + /// + /// Idle mixers spawn an async task each to forward their `MixerMessage`s + /// on to this task to be handled by 1). These tasks self-terminate if a + /// message would make a mixer `now_live`. + async fn run_once(&mut self, interval: &mut Interval) -> bool { + tokio::select! { + biased; + msg = self.rx.recv_async() => match msg { + Ok(SchedulerMessage::NewMixer(rx, ic, cfg)) => { + let mixer = ParkedMixer::new(rx, ic, cfg); + let id = self.next_id.incr(); + + mixer.spawn_forwarder(self.tx.clone(), id); + self.tasks.insert(id, mixer); + self.stats.add_idle_mixer(); + }, + Ok(SchedulerMessage::Demote(id, task)) => { + task.send_gateway_not_speaking(); + + task.spawn_forwarder(self.tx.clone(), id); + self.tasks.insert(id, task); + }, + Ok(SchedulerMessage::Do(id, mix_msg)) => { + let now_live = mix_msg.is_mixer_now_live(); + let task = self.tasks.get_mut(&id).unwrap(); + + match task.handle_message(mix_msg) { + Ok(false) if now_live => { + let task = self.tasks.remove(&id).unwrap(); + self.schedule_mixer(task, id, None); + }, + Ok(false) => {}, + Ok(true) | Err(_) => self.to_cull.push(id), + } + }, + Ok(SchedulerMessage::Overspill(worker_id, id, task)) => { + self.schedule_mixer(task, id, Some(worker_id)); + }, + Ok(SchedulerMessage::GetStats(tx)) => { + _ = tx.send(self.workers.iter().map(Worker::stats).collect()); + }, + Ok(SchedulerMessage::Kill) | Err(_) => { + return false; + }, + }, + _ = interval.tick() => { + // TODO: store keepalive sends in another data structure so + // we don't check every task every 20ms. + // + // if we can also make tick handling lazy(er), we can also optimise for that. + let now = TokInstant::now(); + + for (id, task) in &mut self.tasks { + // NOTE: this is a non-blocking send so safe from async context. + if task.tick_and_keepalive(now.into()).is_err() { + self.to_cull.push(*id); + } + } + + let mut i = 0; + while i < self.workers.len() { + if let Some(then) = self.workers[i].try_mark_empty(now) { + if now.duration_since(then) >= self.cull_timer { + self.workers.swap_remove(i); + continue; + } + } + + i += 1; + } + }, + } + + for id in self.to_cull.drain(..) { + self.tasks.remove(&id); + } + + true + } + + /// Promote a task to a live mixer thread. + fn schedule_mixer(&mut self, mut task: ParkedMixer, id: TaskId, avoid: Option) { + if task.send_gateway_speaking().is_ok() { + // If a worker ever completely fails, then we need to remove it here + // `fetch_worker` will either find another, or generate us a new one if + // none exist. + + // We need to track ownership of the task coming back via SendError using this + // Option. + let mut loop_task = Some(task); + loop { + let task = loop_task.take().unwrap(); + let (worker, idx) = self.fetch_worker(&task, avoid); + match worker.schedule_mixer(id, task) { + Ok(_) => { + self.stats.move_mixer_to_live(); + break; + }, + Err(e) => { + loop_task = Some(e.0 .1); + let worker = self.workers.swap_remove(idx); + + // NOTE: we have incremented worker's live counter for this mixer in + // `schedule_mixer`. + // The only time this branch is ever hit is if a worker crashed, so we + // need to replicate some of their cleanup. + self.stats + .remove_live_mixers(worker.stats().live_mixers().saturating_sub(1)); + self.stats.remove_worker(); + }, + } + } + } + } + + /// Fetch the first `Worker` that has room for a new task, creating one if needed. + /// + /// If an inbound task has spilled from another thread, then do not reschedule it there. + fn fetch_worker( + &mut self, + task: &ParkedMixer, + avoid: Option, + ) -> (&mut Worker, usize) { + let idx = self + .workers + .iter() + .position(|w| w.can_schedule(task, avoid)) + .unwrap_or_else(|| { + self.workers.push(Worker::new( + self.next_worker_id.incr(), + self.config.clone(), + self.tx.clone(), + self.stats.clone(), + )); + self.stats.add_worker(); + self.workers.len() - 1 + }); + + (&mut self.workers[idx], idx) + } + + pub fn spawn(mut self) { + tokio::spawn(async move { self.run().await }); + } +} + +#[cfg(test)] +mod test { + use super::*; + use crate::{ + constants::test_data::FILE_WEBM_TARGET, + driver::{tasks::mixer::Mixer, OutputMode}, + input::File, + Driver, + }; + use tokio::runtime::Handle; + + #[tokio::test] + async fn inactive_mixers_dont_need_threads() { + let sched = Scheduler::new(Config::default()); + let cfg = DriverConfig::default().scheduler(sched.clone()); + + let _drivers: Vec = (0..1024).map(|_| Driver::new(cfg.clone())).collect(); + tokio::time::sleep(Duration::from_secs(1)).await; + + assert_eq!(sched.total_tasks(), 1024); + assert_eq!(sched.live_tasks(), 0); + assert_eq!(sched.worker_threads(), 0); + } + + #[tokio::test] + async fn active_mixers_spawn_threads() { + let mut config = Config::default(); + config.move_expensive_tasks = false; + + let sched = Scheduler::new(config); + let (pkt_tx, _pkt_rx) = flume::unbounded(); + let cfg = DriverConfig::default() + .scheduler(sched.clone()) + .override_connection(Some(OutputMode::Rtp(pkt_tx))); + + let n_tasks = 1024; + + let _drivers: Vec = (0..n_tasks) + .map(|_| { + let mut driver = Driver::new(cfg.clone()); + let file = File::new(FILE_WEBM_TARGET); + driver.play_input(file.into()); + driver + }) + .collect(); + tokio::time::sleep(Duration::from_secs(10)).await; + + assert_eq!(sched.total_tasks(), n_tasks); + assert_eq!(sched.live_tasks(), n_tasks); + assert_eq!( + sched.worker_threads(), + n_tasks / (DEFAULT_MIXERS_PER_THREAD.get() as u64) + ); + } + + #[tokio::test] + async fn excess_threads_are_cleaned_up() { + let mut config = Config::default(); + config.strategy = Mode::MaxPerThread(1.try_into().unwrap()); + let (mut core, tx) = Idle::new(config.clone()); + + const TEST_TIMER: Duration = Duration::from_millis(500); + core.cull_timer = TEST_TIMER; + + let mut next_id = TaskId::new(); + let mut thread_id = WorkerId::new(); + let mut handles = vec![]; + for i in 0..2 { + let mut worker = Worker::new( + thread_id.incr(), + config.clone(), + tx.clone(), + core.stats.clone(), + ); + let ((mixer, listeners), track_handle) = + Mixer::test_with_float_unending(Handle::current(), false); + + let send_mixer = ParkedMixer { + mixer: Box::new(mixer), + ssrc: i, + rtp_sequence: i as u16, + rtp_timestamp: i, + park_time: TokInstant::now().into(), + last_cost: None, + }; + core.stats.add_idle_mixer(); + core.stats.move_mixer_to_live(); + worker.schedule_mixer(next_id.incr(), send_mixer).unwrap(); + handles.push((track_handle, listeners)); + core.workers.push(worker); + } + + let mut timer = tokio::time::interval(TIMESTEP_LENGTH); + assert!(core.run_once(&mut timer).await); + + // Stop one of the handles, allow it to exit, and then run core again. + handles[1].0.stop().unwrap(); + while core.workers[1].is_busy() { + assert!(core.run_once(&mut timer).await); + } + + tokio::time::sleep(TEST_TIMER + Duration::from_secs(1)).await; + while core.workers.len() != 1 { + assert!(core.run_once(&mut timer).await); + } + + assert_eq!(core.stats.worker_threads(), 0); + } +} diff --git a/src/driver/scheduler/live.rs b/src/driver/scheduler/live.rs new file mode 100644 index 0000000..c649671 --- /dev/null +++ b/src/driver/scheduler/live.rs @@ -0,0 +1,821 @@ +use std::{ + sync::Arc, + time::{Duration, Instant}, +}; + +use discortp::rtp::{MutableRtpPacket, RtpPacket}; +use flume::{Receiver, SendError, Sender, TryRecvError}; +use tokio::time::Instant as TokInstant; + +use crate::{ + constants::*, + driver::tasks::{error::Error as DriverError, mixer::Mixer}, +}; + +#[cfg(test)] +use crate::driver::test_config::TickStyle; + +use super::*; + +/// The send-half of a worker thread, with bookkeeping mechanisms to help +/// the idle task schedule incoming tasks. +pub struct Worker { + id: WorkerId, + stats: Arc, + config: Config, + tx: Sender<(TaskId, ParkedMixer)>, + known_empty_since: Option, +} + +#[allow(missing_docs)] +impl Worker { + pub fn new( + id: WorkerId, + config: Config, + sched_tx: Sender, + global_stats: Arc, + ) -> Self { + let stats = Arc::new(LiveStatBlock::default()); + let (live_tx, live_rx) = flume::unbounded(); + + let core = Live::new( + id, + config.clone(), + global_stats, + stats.clone(), + live_rx, + sched_tx, + ); + core.spawn(); + + Self { + id, + stats, + config, + tx: live_tx, + known_empty_since: None, + } + } + + /// Mark the worker thread as idle from the present time if it reports no tasks. + /// + /// This time information is used for thread culling. + #[inline] + pub fn try_mark_empty(&mut self, now: TokInstant) -> Option { + if self.stats.live_mixers() == 0 { + self.known_empty_since.get_or_insert(now); + } else { + self.mark_busy(); + } + + self.known_empty_since + } + + /// Unset the thread culling time on this worker. + #[inline] + pub fn mark_busy(&mut self) { + self.known_empty_since = None; + } + + #[cfg(test)] + #[inline] + pub fn is_busy(&mut self) -> bool { + self.known_empty_since.is_none() + } + + /// Return whether this thread has enough room (task count, spare cycles) + /// for the given task. + #[inline] + pub fn can_schedule(&self, task: &ParkedMixer, avoid: Option) -> bool { + avoid.map_or(true, |id| !self.has_id(id)) + && self.stats.has_room(&self.config.strategy, task) + } + + #[inline] + pub fn stats(&self) -> Arc { + self.stats.clone() + } + + /// Increment this worker's statistics and hand off a task for execution. + #[inline] + pub fn schedule_mixer( + &mut self, + id: TaskId, + task: ParkedMixer, + ) -> Result<(), SendError<(TaskId, ParkedMixer)>> { + self.mark_busy(); + self.stats.add_mixer(); + self.tx.send((id, task)) + } + + pub fn has_id(&self, id: WorkerId) -> bool { + self.id == id + } +} + +const PACKETS_PER_BLOCK: usize = 16; +const MEMORY_CULL_TIMER: Duration = Duration::from_secs(10); + +/// A synchronous thread responsible for mixing, encoding, encrypting, and +/// sending the audio output of many `Mixer`s. +/// +/// `Mixer`s remain `Box`ed due to large move costs, and unboxing them appeared to have +/// a 5--10% perf cost from benchmarks. +pub struct Live { + packets: Vec>, + packet_lens: Vec, + #[allow(clippy::vec_box)] + tasks: Vec>, + ids: Vec, + to_cull: Vec, + + deadline: Instant, + start_of_work: Option, + + id: WorkerId, + config: Config, + stats: Arc, + global_stats: Arc, + rx: Receiver<(TaskId, ParkedMixer)>, + tx: Sender, + + excess_buffer_cull_time: Option, +} + +#[allow(missing_docs)] +impl Live { + pub fn new( + id: WorkerId, + config: Config, + global_stats: Arc, + stats: Arc, + rx: Receiver<(TaskId, ParkedMixer)>, + tx: Sender, + ) -> Self { + let to_prealloc = config.strategy.prealloc_size(); + + let block_size = config + .strategy + .task_limit() + .unwrap_or(PACKETS_PER_BLOCK) + .min(PACKETS_PER_BLOCK); + + let packets = vec![packet_block(block_size)]; + + Self { + packets, + packet_lens: Vec::with_capacity(to_prealloc), + tasks: Vec::with_capacity(to_prealloc), + ids: Vec::with_capacity(to_prealloc), + to_cull: Vec::with_capacity(to_prealloc), + + deadline: Instant::now(), + start_of_work: None, + + id, + config, + stats, + global_stats, + rx, + tx, + + excess_buffer_cull_time: None, + } + } + + #[inline] + fn run(&mut self) { + while self.run_once() {} + self.global_stats.remove_worker(); + } + + /// Returns whether the loop should exit (i.e., culled by main `Scheduler`). + #[inline] + pub fn run_once(&mut self) -> bool { + // Check for new tasks. + if self.handle_scheduler_msgs().is_err() { + return false; + } + + // Receive commands for each task. + self.handle_task_msgs(); + + // Move any idle calls back to the global pool. + self.demote_and_remove_mixers(); + + // Take a clock measure before and after each packet. + let mut pre_pkt_time = Instant::now(); + let mut worst_task = (0, Duration::default()); + + for (i, (packet_len, mixer)) in self + .packet_lens + .iter_mut() + .zip(self.tasks.iter_mut()) + .enumerate() + { + let (block, inner) = get_memory_indices(i); + match mixer.mix_and_build_packet(&mut self.packets[block][inner..][..VOICE_PACKET_MAX]) + { + Ok(written_sz) => *packet_len = written_sz, + e => { + *packet_len = 0; + rebuild_if_err(mixer, e, &mut self.to_cull, i); + }, + } + let post_pkt_time = Instant::now(); + let cost = post_pkt_time.duration_since(pre_pkt_time); + if cost > worst_task.1 { + worst_task = (i, cost); + } + pre_pkt_time = post_pkt_time; + } + + let end_of_work = pre_pkt_time; + + if let Some(start_of_work) = self.start_of_work { + let ns_cost = self.stats.store_compute_cost(end_of_work - start_of_work); + + if self.config.move_expensive_tasks + && ns_cost >= RESCHEDULE_THRESHOLD + && self.ids.len() > 1 + { + self.offload_mixer(worst_task.0, worst_task.1); + } + } + + self.timed_remove_excess_blocks(end_of_work); + + // Wait till the right time to send this packet: + // usually a 20ms tick, in test modes this is either a finite number of runs or user input. + self.march_deadline(); + + // Send all. + self.start_of_work = Some(Instant::now()); + for (i, (packet_len, mixer)) in self + .packet_lens + .iter_mut() + .zip(self.tasks.iter_mut()) + .enumerate() + { + let (block, inner) = get_memory_indices(i); + let packet = &mut self.packets[block][inner..]; + if *packet_len > 0 { + let res = mixer.send_packet(&packet[..*packet_len]); + rebuild_if_err(mixer, res, &mut self.to_cull, i); + } + #[cfg(test)] + if *packet_len == 0 { + mixer.test_signal_empty_tick(); + } + advance_rtp_counters(packet); + } + + for (i, mixer) in self.tasks.iter_mut().enumerate() { + let res = mixer + .audio_commands_events() + .and_then(|_| mixer.check_and_send_keepalive(self.start_of_work)); + rebuild_if_err(mixer, res, &mut self.to_cull, i); + } + + true + } + + #[cfg(test)] + fn _march_deadline(&mut self) { + // For testing, assume all will have same tick style. + // Only count 'remaining loops' on one of the nodes. + let mixer = self.tasks.get_mut(0).map(|m| { + let style = m.config.tick_style.clone(); + (m, style) + }); + + match mixer { + None | Some((_, TickStyle::Timed)) => { + std::thread::sleep(self.deadline.saturating_duration_since(Instant::now())); + self.deadline += TIMESTEP_LENGTH; + }, + Some((m, TickStyle::UntimedWithExecLimit(rx))) => { + if m.remaining_loops.is_none() { + if let Ok(new_val) = rx.recv() { + m.remaining_loops = Some(new_val.wrapping_sub(1)); + } + } + + if let Some(cnt) = m.remaining_loops.as_mut() { + if *cnt == 0 { + m.remaining_loops = None; + } else { + *cnt = cnt.wrapping_sub(1); + } + } + }, + } + } + + #[cfg(not(test))] + #[inline(always)] + #[allow(clippy::inline_always)] + fn _march_deadline(&mut self) { + std::thread::sleep(self.deadline.saturating_duration_since(Instant::now())); + self.deadline += TIMESTEP_LENGTH; + } + + #[inline] + fn march_deadline(&mut self) { + #[cfg(feature = "internals")] + { + return; + } + + self._march_deadline(); + } + + #[inline] + fn handle_scheduler_msgs(&mut self) -> Result<(), ()> { + let mut activation_time = None; + loop { + match self.rx.try_recv() { + Ok((id, task)) => { + self.add_task( + task, + id, + *activation_time.get_or_insert_with(|| { + self.deadline + .checked_sub(TIMESTEP_LENGTH) + .unwrap_or(self.deadline) + }), + ); + }, + Err(TryRecvError::Empty) => break, + Err(TryRecvError::Disconnected) => return Err(()), + } + } + + Ok(()) + } + + /// Handle messages from each tasks's `Driver`, marking dead tasks for removal. + #[inline] + fn handle_task_msgs(&mut self) { + for (i, (packet, mixer)) in self + .packets + .iter_mut() + .flat_map(|v| v.chunks_exact_mut(VOICE_PACKET_MAX)) + .zip(self.tasks.iter_mut()) + .enumerate() + { + let mut events_failure = false; + let mut conn_failure = false; + + let fatal = loop { + match mixer.mix_rx.try_recv() { + Ok(m) => { + let (events, conn, should_exit) = mixer.handle_message(m, packet); + events_failure |= events; + conn_failure |= conn; + + if should_exit { + break true; + } + }, + Err(TryRecvError::Disconnected) => { + break true; + }, + + Err(TryRecvError::Empty) => { + break false; + }, + } + }; + + if fatal || mixer.do_rebuilds(events_failure, conn_failure).is_err() { + // this is not zipped in because it is *not* needed most ticks. + self.to_cull[i] = true; + } + } + } + + #[cfg(feature = "internals")] + #[inline] + pub fn mark_for_cull(&mut self, idx: usize) { + self.to_cull[idx] = true; + } + + /// Check and demote for any tasks without live audio sources who have sent all + /// necessary silent frames (or remove dead tasks). + /// + /// This must occur *after* handling per-track events to prevent erroneously + /// descheduling tasks. + #[inline] + pub fn demote_and_remove_mixers(&mut self) { + let mut i = 0; + while i < self.tasks.len() { + #[cfg(test)] + let force_conn = self.tasks[i].config.override_connection.is_some(); + #[cfg(not(test))] + let force_conn = false; + + // Benchmarking suggests that these asserts remove some bounds checks for us. + assert!(i < self.tasks.len()); + assert!(i < self.to_cull.len()); + + if self.to_cull[i] + || (self.tasks[i].tracks.is_empty() && self.tasks[i].silence_frames == 0) + || !(self.tasks[i].conn_active.is_some() || force_conn) + { + self.stats.remove_mixer(); + + if let Some((id, parked)) = self.remove_task(i) { + self.global_stats.move_mixer_to_idle(); + let _ = self.tx.send(SchedulerMessage::Demote(id, parked)); + } else { + self.global_stats.remove_live_mixer(); + } + } else { + i += 1; + } + } + } + + /// Return a given mixer to the main scheduler if this worker is overloaded. + #[inline] + pub fn offload_mixer(&mut self, idx: usize, cost: Duration) { + self.stats.remove_mixer(); + + if let Some((id, mut parked)) = self.remove_task(idx) { + self.global_stats.move_mixer_to_idle(); + parked.last_cost = Some(cost); + let _ = self + .tx + .send(SchedulerMessage::Overspill(self.id, id, parked)); + } else { + self.global_stats.remove_live_mixer(); + } + } + + #[inline] + fn needed_blocks(&self) -> usize { + let div = self.ids.len() / PACKETS_PER_BLOCK; + let rem = self.ids.len() % PACKETS_PER_BLOCK; + (rem != 0) as usize + div + } + + #[inline] + fn has_excess_blocks(&self) -> bool { + self.packets.len() > self.needed_blocks() + } + + #[inline] + fn remove_excess_blocks(&mut self) { + self.packets.truncate(self.needed_blocks()); + } + + /// Try to offload excess packet buffers. + /// + /// If there is currently overallocation, then store the first time at which + /// this was seenb. If this condition persists past `MEMORY_CULL_TIMER`, remove + /// unnecessary blocks. + #[inline] + fn timed_remove_excess_blocks(&mut self, now: Instant) { + if self.has_excess_blocks() { + if let Some(mark_time) = self.excess_buffer_cull_time { + if now.duration_since(mark_time) >= MEMORY_CULL_TIMER { + self.remove_excess_blocks(); + self.excess_buffer_cull_time = None; + } + } else { + self.excess_buffer_cull_time = Some(now); + } + } else { + self.excess_buffer_cull_time = None; + } + } + + #[inline] + fn add_task(&mut self, task: ParkedMixer, id: TaskId, activation_time: Instant) { + let idx = self.ids.len(); + + let elapsed = task.park_time - activation_time; + + let samples_f64 = elapsed.as_secs_f64() * (SAMPLE_RATE_RAW as f64); + let mod_samples = (samples_f64 as u64) as u32; + let rtp_timestamp = task.rtp_timestamp.wrapping_add(mod_samples); + + self.ids.push(id); + self.tasks.push(task.mixer); + self.packet_lens.push(0); + self.to_cull.push(false); + + let (block, inner_idx) = get_memory_indices(idx); + + while self.packets.len() <= block { + self.add_packet_block(); + } + let packet = &mut self.packets[block][inner_idx..][..VOICE_PACKET_MAX]; + + let mut rtp = MutableRtpPacket::new(packet).expect( + "FATAL: Too few bytes in self.packet for RTP header.\ + (Blame: VOICE_PACKET_MAX?)", + ); + rtp.set_ssrc(task.ssrc); + rtp.set_timestamp(rtp_timestamp.into()); + rtp.set_sequence(task.rtp_sequence.into()); + } + + /// Allocate and store a new packet block. + /// + /// This will be full-size (`PACKETS_PER_BLOCK`) unless this block + /// is a) the last required for the task limit and b) this limit + /// is not aligned to `PACKETS_PER_BLOCK`. + #[inline] + fn add_packet_block(&mut self) { + let n_packets = if let Some(limit) = self.config.strategy.task_limit() { + let (block, inner) = get_memory_indices_unscaled(limit); + if self.packets.len() < block || inner == 0 { + PACKETS_PER_BLOCK + } else { + inner + } + } else { + PACKETS_PER_BLOCK + }; + self.packets.push(packet_block(n_packets)); + } + + #[cfg(any(test, feature = "internals"))] + #[inline] + pub fn add_task_direct(&mut self, task: Mixer, id: TaskId) { + let id_0 = id.get(); + self.add_task( + ParkedMixer { + mixer: Box::new(task), + ssrc: id_0 as u32, + rtp_sequence: id_0 as u16, + rtp_timestamp: id_0 as u32, + park_time: Instant::now(), + last_cost: None, + }, + id, + Instant::now(), + ); + } + + /// Remove a `Mixer`, returning it to the idle scheduler. + /// + /// This operates by `swap_remove`ing each element of a Mixer's state, including + /// on RTP packet headers. This is achieved by setting up a memcpy between + /// buffer segments. + #[inline] + pub fn remove_task(&mut self, idx: usize) -> Option<(TaskId, ParkedMixer)> { + let end = self.tasks.len() - 1; + + let id = self.ids.swap_remove(idx); + let _len = self.packet_lens.swap_remove(idx); + let mixer = self.tasks.swap_remove(idx); + let alive = !self.to_cull.swap_remove(idx); + + let (block, inner_idx) = get_memory_indices(idx); + + let (removed, replacement) = if end > idx { + let (end_block, end_inner) = get_memory_indices(end); + let (rest, target_block) = self.packets.split_at_mut(end_block); + let (last_block, end_pkt) = target_block[0].split_at_mut(end_inner); + + if end_block == block { + (&mut last_block[inner_idx..], Some(end_pkt)) + } else { + (&mut rest[block][inner_idx..], Some(end_pkt)) + } + } else { + (&mut self.packets[block][inner_idx..], None) + }; + + let rtp = RtpPacket::new(removed).expect( + "FATAL: Too few bytes in self.packet for RTP header.\ + (Blame: VOICE_PACKET_MAX?)", + ); + let ssrc = rtp.get_ssrc(); + let rtp_timestamp = rtp.get_timestamp().into(); + let rtp_sequence = rtp.get_sequence().into(); + + if let Some(replacement) = replacement { + // Copy the whole packet header since we know it'll be 4B aligned. + // 'Just necessary fields' is 2B aligned. + const COPY_LEN: usize = RtpPacket::minimum_packet_size(); + removed[..COPY_LEN].copy_from_slice(&replacement[..COPY_LEN]); + } + + alive.then(move || { + let park_time = Instant::now(); + + ( + id, + ParkedMixer { + mixer, + ssrc, + rtp_sequence, + rtp_timestamp, + park_time, + last_cost: None, + }, + ) + }) + } + + /// Spawn a new sync thread to manage `Mixer`s. + fn spawn(mut self) { + std::thread::spawn(move || { + self.run(); + }); + } +} + +/// Initialises a packet block of the required size, prefilling any constant RTP data. +#[inline] +fn packet_block(n_packets: usize) -> Box<[u8]> { + let mut packets = vec![0u8; VOICE_PACKET_MAX * n_packets].into_boxed_slice(); + + for packet in packets.chunks_exact_mut(VOICE_PACKET_MAX) { + let mut rtp = MutableRtpPacket::new(packet).expect( + "FATAL: Too few bytes in self.packet for RTP header.\ + (Blame: VOICE_PACKET_MAX?)", + ); + rtp.set_version(RTP_VERSION); + rtp.set_payload_type(RTP_PROFILE_TYPE); + } + + packets +} + +/// Returns the block index into `self.packets` and the packet number in +/// the block for a given worker's index. +#[inline] +fn get_memory_indices_unscaled(idx: usize) -> (usize, usize) { + let block_size = PACKETS_PER_BLOCK; + (idx / block_size, idx % block_size) +} + +/// Returns the block index into `self.packets` and the byte offset into +/// a packet block for a given worker's index. +#[inline] +fn get_memory_indices(idx: usize) -> (usize, usize) { + let (block, inner_unscaled) = get_memory_indices_unscaled(idx); + (block, inner_unscaled * VOICE_PACKET_MAX) +} + +#[inline] +fn advance_rtp_counters(packet: &mut [u8]) { + let mut rtp = MutableRtpPacket::new(packet).expect( + "FATAL: Too few bytes in self.packet for RTP header.\ + (Blame: VOICE_PACKET_MAX?)", + ); + rtp.set_sequence(rtp.get_sequence() + 1); + rtp.set_timestamp(rtp.get_timestamp() + MONO_FRAME_SIZE as u32); +} + +/// Structured slightly confusingly: we only want to even access `cull_markers` +/// in the event of error. +#[inline] +fn rebuild_if_err( + mixer: &mut Box, + res: Result, + cull_markers: &mut [bool], + idx: usize, +) { + if let Err(e) = res { + cull_markers[idx] |= mixer + .do_rebuilds( + e.should_trigger_interconnect_rebuild(), + e.should_trigger_connect(), + ) + .is_err(); + } +} + +#[cfg(test)] +mod test { + use super::*; + use crate::driver::test_impls::*; + use tokio::runtime::Handle; + + fn rtp_has_index(pkt: &[u8], sentinel_val: u16) { + let rtp = RtpPacket::new(pkt).unwrap(); + + assert_eq!(rtp.get_version(), RTP_VERSION); + assert_eq!(rtp.get_padding(), 0); + assert_eq!(rtp.get_extension(), 0); + assert_eq!(rtp.get_csrc_count(), 0); + assert_eq!(rtp.get_marker(), 0); + assert_eq!(rtp.get_payload_type(), RTP_PROFILE_TYPE); + assert_eq!(rtp.get_sequence(), sentinel_val.into()); + assert_eq!(rtp.get_timestamp(), (sentinel_val as u32).into()); + assert_eq!(rtp.get_ssrc(), sentinel_val as u32); + } + + #[tokio::test] + async fn block_alloc_is_partial_small() { + let n_mixers = 1; + let (sched, _listeners) = MockScheduler::from_mixers( + Some(Mode::MaxPerThread(n_mixers.try_into().unwrap())), + (0..n_mixers) + .map(|_| Mixer::test_with_float(1, Handle::current(), false)) + .collect(), + ); + + assert_eq!(sched.core.packets.len(), 1); + assert_eq!(sched.core.packets[0].len(), VOICE_PACKET_MAX); + } + + #[tokio::test] + async fn block_alloc_is_partial_large() { + let n_mixers = 33; + let (sched, _listeners) = MockScheduler::from_mixers( + Some(Mode::MaxPerThread(n_mixers.try_into().unwrap())), + (0..n_mixers) + .map(|_| Mixer::test_with_float(1, Handle::current(), false)) + .collect(), + ); + + assert_eq!(sched.core.packets.len(), 3); + assert_eq!( + sched.core.packets[0].len(), + PACKETS_PER_BLOCK * VOICE_PACKET_MAX + ); + assert_eq!( + sched.core.packets[1].len(), + PACKETS_PER_BLOCK * VOICE_PACKET_MAX + ); + assert_eq!(sched.core.packets[2].len(), VOICE_PACKET_MAX); + } + + #[tokio::test] + async fn deletion_moves_pkt_header() { + let (mut sched, _listeners) = MockScheduler::from_mixers( + None, + (0..PACKETS_PER_BLOCK) + .map(|_| Mixer::test_with_float(1, Handle::current(), false)) + .collect(), + ); + + let last_idx = (PACKETS_PER_BLOCK - 1) as u16; + + // Remove head. + sched.core.remove_task(0); + rtp_has_index(&sched.core.packets[0], last_idx); + + // Remove head. + sched.core.remove_task(5); + rtp_has_index(&sched.core.packets[0][5 * VOICE_PACKET_MAX..], last_idx - 1); + } + + #[tokio::test] + async fn deletion_moves_pkt_header_multiblock() { + let n_pkts = PACKETS_PER_BLOCK + 8; + let (mut sched, _listeners) = MockScheduler::from_mixers( + None, + (0..n_pkts) + .map(|_| Mixer::test_with_float(1, Handle::current(), false)) + .collect(), + ); + + let last_idx = (n_pkts - 1) as u16; + + // Remove head (read from block 1 into block 0). + sched.core.remove_task(0); + rtp_has_index(&sched.core.packets[0], last_idx); + + // Remove later (read from block 1 into block 1). + sched.core.remove_task(17); + rtp_has_index(&sched.core.packets[1][VOICE_PACKET_MAX..], last_idx - 1); + } + + #[tokio::test] + async fn packet_blocks_are_cleaned_up() { + // Allocate 2 blocks. + let n_pkts = PACKETS_PER_BLOCK + 1; + let (mut sched, _listeners) = MockScheduler::from_mixers( + None, + (0..n_pkts) + .map(|_| Mixer::test_with_float(1, Handle::current(), false)) + .collect(), + ); + + // Assert no cleanup at start. + assert!(sched.core.run_once()); + assert_eq!(sched.core.needed_blocks(), 2); + assert!(sched.core.excess_buffer_cull_time.is_none()); + + // Remove only entry in last block. Cleanup should be sched'd. + sched.core.remove_task(n_pkts - 1); + assert!(sched.core.run_once()); + assert!(sched.core.has_excess_blocks()); + assert!(sched.core.excess_buffer_cull_time.is_some()); + + tokio::time::sleep(Duration::from_secs(2) + MEMORY_CULL_TIMER).await; + + // Cleanup should be unsched'd. + assert!(sched.core.run_once()); + assert!(sched.core.excess_buffer_cull_time.is_none()); + assert!(!sched.core.has_excess_blocks()); + } +} diff --git a/src/driver/scheduler/mod.rs b/src/driver/scheduler/mod.rs new file mode 100644 index 0000000..f7d6ec2 --- /dev/null +++ b/src/driver/scheduler/mod.rs @@ -0,0 +1,174 @@ +use std::{error::Error as StdError, fmt::Display, num::NonZeroUsize, sync::Arc}; + +use flume::{Receiver, RecvError, Sender}; +use once_cell::sync::Lazy; + +use crate::{constants::TIMESTEP_LENGTH, Config as DriverConfig}; + +use super::tasks::message::{Interconnect, MixerMessage}; + +mod config; +mod idle; +mod live; +mod stats; +mod task; + +pub use config::*; +use idle::*; +pub use live::*; +pub use stats::*; +pub use task::*; + +/// A soft maximum of 90% of the 20ms budget to account for variance in execution time. +const RESCHEDULE_THRESHOLD: u64 = ((TIMESTEP_LENGTH.subsec_nanos() as u64) * 9) / 10; + +const DEFAULT_MIXERS_PER_THREAD: NonZeroUsize = match NonZeroUsize::new(16) { + Some(v) => v, + None => [][0], +}; + +/// The default shared scheduler instance. +/// +/// This is built using the default value of [`ScheduleMode`]. Users desiring +/// a custom strategy should avoid calling [`Config::default`]. +/// +/// [`Config::default`]: crate::Config::default +/// [`ScheduleMode`]: Mode +pub static DEFAULT_SCHEDULER: Lazy = Lazy::new(Scheduler::default); + +/// A reference to a shared group of threads used for running idle and active +/// audio threads. +#[derive(Clone, Debug)] +pub struct Scheduler { + inner: Arc, +} + +/// Inner contents of a [`Scheduler`] instance. +/// +/// This is an `Arc` around `Arc`'d contents so that we can make use of the +/// drop check on `Scheduler` to clean up resources. +#[derive(Clone, Debug)] +struct InnerScheduler { + tx: Sender, + stats: Arc, +} + +impl Scheduler { + /// Create a new mixer scheduler from the allocation strategy in `config`. + #[must_use] + pub fn new(config: Config) -> Self { + let (core, tx) = Idle::new(config); + + let stats = core.stats.clone(); + core.spawn(); + + let inner = Arc::new(InnerScheduler { tx, stats }); + + Self { inner } + } + + pub(crate) fn new_mixer( + &self, + config: &DriverConfig, + ic: Interconnect, + rx: Receiver, + ) { + self.inner + .tx + .send(SchedulerMessage::NewMixer(rx, ic, config.clone())) + .unwrap(); + } + + /// Returns the total number of calls (idle and active) scheduled. + #[must_use] + pub fn total_tasks(&self) -> u64 { + self.inner.stats.total_mixers() + } + + /// Returns the total number of *active* calls scheduled and processing + /// audio. + #[must_use] + pub fn live_tasks(&self) -> u64 { + self.inner.stats.live_mixers() + } + + /// Returns the total number of threads spawned to process live audio sessions. + #[must_use] + pub fn worker_threads(&self) -> u64 { + self.inner.stats.worker_threads() + } + + /// Request a list of handles to statistics for currently live workers. + pub async fn worker_thread_stats(&self) -> Result>, Error> { + let (tx, rx) = flume::bounded(1); + _ = self.inner.tx.send(SchedulerMessage::GetStats(tx)); + + rx.recv_async().await.map_err(Error::from) + } + + /// Request a list of handles to statistics for currently live workers with a blocking call. + pub fn worker_thread_stats_blocking(&self) -> Result>, Error> { + let (tx, rx) = flume::bounded(1); + _ = self.inner.tx.send(SchedulerMessage::GetStats(tx)); + + rx.recv().map_err(Error::from) + } +} + +impl Drop for InnerScheduler { + fn drop(&mut self) { + _ = self.tx.send(SchedulerMessage::Kill); + } +} + +impl Default for Scheduler { + fn default() -> Self { + Scheduler::new(Config::default()) + } +} + +/// Control messages for a scheduler. +pub enum SchedulerMessage { + /// Build a new `Mixer` as part of the initialisation of a `Driver`. + NewMixer(Receiver, Interconnect, DriverConfig), + /// Forward a command for + Do(TaskId, MixerMessage), + /// Return a `Mixer` from a worker back to the idle pool. + Demote(TaskId, ParkedMixer), + /// Move an expensive `Mixer` to another thread in the worker pool. + Overspill(WorkerId, TaskId, ParkedMixer), + /// Request a copy of all per-worker statistics. + GetStats(Sender>>), + /// Cleanup once all `Scheduler` handles are dropped. + Kill, +} + +/// Errors encountered when communicating with the internals of a [`Scheduler`]. +/// +/// [`Scheduler`]: crate::driver::Scheduler +#[non_exhaustive] +#[derive(Debug)] +pub enum Error { + /// The scheduler exited or crashed while awating the request. + Disconnected, +} + +impl Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + match self { + Self::Disconnected => f.write_str("the scheduler terminated mid-request"), + } + } +} + +impl StdError for Error { + fn source(&self) -> Option<&(dyn StdError + 'static)> { + None + } +} + +impl From for Error { + fn from(_: RecvError) -> Self { + Self::Disconnected + } +} diff --git a/src/driver/scheduler/stats.rs b/src/driver/scheduler/stats.rs new file mode 100644 index 0000000..d1f10ea --- /dev/null +++ b/src/driver/scheduler/stats.rs @@ -0,0 +1,134 @@ +use std::{ + sync::atomic::{AtomicU64, Ordering}, + time::Duration, +}; + +use super::{Mode, ParkedMixer, RESCHEDULE_THRESHOLD}; + +/// Statistics shared by an entire `Scheduler`. +#[derive(Debug, Default)] +pub struct StatBlock { + total: AtomicU64, + live: AtomicU64, + threads: AtomicU64, +} + +#[allow(missing_docs)] +impl StatBlock { + #[inline] + pub fn total_mixers(&self) -> u64 { + self.total.load(Ordering::Relaxed) + } + + #[inline] + pub fn live_mixers(&self) -> u64 { + self.live.load(Ordering::Relaxed) + } + + #[inline] + pub fn worker_threads(&self) -> u64 { + self.threads.load(Ordering::Relaxed) + } + + #[inline] + pub fn add_idle_mixer(&self) { + self.total.fetch_add(1, Ordering::Relaxed); + } + + #[inline] + pub fn remove_idle_mixers(&self, n: u64) { + self.total.fetch_sub(n, Ordering::Relaxed); + } + + #[inline] + pub fn move_mixer_to_live(&self) { + self.live.fetch_add(1, Ordering::Relaxed); + } + + #[inline] + pub fn move_mixer_to_idle(&self) { + self.move_mixers_to_idle(1); + } + + #[inline] + pub fn move_mixers_to_idle(&self, n: u64) { + self.live.fetch_sub(n, Ordering::Relaxed); + } + + #[inline] + pub fn remove_live_mixer(&self) { + self.remove_live_mixers(1); + } + + #[inline] + pub fn remove_live_mixers(&self, n: u64) { + self.move_mixers_to_idle(n); + self.remove_idle_mixers(n); + } + + #[inline] + pub fn add_worker(&self) { + self.threads.fetch_add(1, Ordering::Relaxed); + } + + #[inline] + pub fn remove_worker(&self) { + self.threads.fetch_sub(1, Ordering::Relaxed); + } +} + +/// Runtime statistics for an individual worker. +/// +/// Individual statistics are measured atomically -- the worker thread +/// may have been cleaned up, or its mixer count may not match the +/// count when [`Self::last_compute_cost_ns`] was set. +#[derive(Debug, Default)] +pub struct LiveStatBlock { + live: AtomicU64, + last_ns: AtomicU64, +} + +impl LiveStatBlock { + /// Returns the number of mixer tasks scheduled on this worker thread. + #[inline] + pub fn live_mixers(&self) -> u64 { + self.live.load(Ordering::Relaxed) + } + + #[inline] + pub(crate) fn add_mixer(&self) { + self.live.fetch_add(1, Ordering::Relaxed); + } + + #[inline] + pub(crate) fn remove_mixer(&self) { + self.live.fetch_sub(1, Ordering::Relaxed); + } + + #[inline] + pub(crate) fn store_compute_cost(&self, work: Duration) -> u64 { + let cost = work.as_nanos() as u64; + self.last_ns.store(cost, Ordering::Relaxed); + cost + } + + /// Returns the number of nanoseconds required to process all worker threads' + /// packet transmission, mixing, encoding, and encryption in the last tick. + #[inline] + pub fn last_compute_cost_ns(&self) -> u64 { + self.last_ns.load(Ordering::Relaxed) + } + + #[inline] + pub(crate) fn has_room(&self, strategy: &Mode, task: &ParkedMixer) -> bool { + let task_room = strategy + .task_limit() + .map_or(true, |limit| self.live_mixers() < limit as u64); + + let exec_room = task.last_cost.map_or(true, |cost| { + cost.as_nanos() as u64 + self.last_compute_cost_ns() < RESCHEDULE_THRESHOLD + }); + + task_room && exec_room + } +} diff --git a/src/driver/scheduler/task.rs b/src/driver/scheduler/task.rs new file mode 100644 index 0000000..a3d7f85 --- /dev/null +++ b/src/driver/scheduler/task.rs @@ -0,0 +1,187 @@ +use std::{ + marker::PhantomData, + time::{Duration, Instant}, +}; + +use flume::{Receiver, Sender}; +use nohash_hasher::IsEnabled; +use rand::random; +use tokio::runtime::Handle; + +use crate::{ + driver::tasks::{ + error::Error as DriverError, + message::{EventMessage, Interconnect, MixerMessage}, + mixer::Mixer, + }, + Config, +}; + +use super::SchedulerMessage; + +/// Typesafe counter used to identify individual mixer/worker instances. +#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub struct ResId(u64, PhantomData); +#[allow(missing_docs)] +pub type TaskId = ResId; +#[allow(missing_docs)] +pub type WorkerId = ResId; + +#[allow(missing_docs)] +#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub struct TaskMarker; +#[allow(missing_docs)] +#[derive(Copy, Clone, Debug, Eq, Hash, Ord, PartialEq, PartialOrd)] +pub struct WorkerMarker; + +impl IsEnabled for ResId {} + +#[allow(missing_docs)] +impl ResId { + pub fn new() -> Self { + ResId(0, PhantomData) + } + + pub fn incr(&mut self) -> Self { + let out = *self; + self.0 = self.0.wrapping_add(1); + out + } + + #[cfg(any(test, feature = "internals"))] + pub fn get(&self) -> u64 { + self.0 + } +} + +/// An idle mixer instance, externally controlled by a `Driver`. +/// +/// Since we do not allocate packet buffers for idle threads, this +/// struct includes various RTP fields. +pub struct ParkedMixer { + /// Mixer, track, etc. state as well as message receivers. + pub mixer: Box, + /// The SSRC assigned to this voice session. + pub ssrc: u32, + /// The last recorded/generated RTP sequence. + pub rtp_sequence: u16, + /// The last recorded/generated RTP timestamp. + pub rtp_timestamp: u32, + /// The time at which this `Mixer` was made idle. + /// + /// This is used when transitioning to a live state to determine + /// how far we should adjust the RTP timestamp by. + pub park_time: Instant, + /// The last known cost of executing this task, if it had to be moved + /// due to a limit on thread resources. + pub last_cost: Option, +} + +#[allow(missing_docs)] +impl ParkedMixer { + /// Create a new `Mixer` in a parked state. + pub fn new(mix_rx: Receiver, interconnect: Interconnect, config: Config) -> Self { + Self { + mixer: Box::new(Mixer::new(mix_rx, Handle::current(), interconnect, config)), + ssrc: 0, + rtp_sequence: random::(), + rtp_timestamp: random::(), + park_time: Instant::now(), + last_cost: None, + } + } + + /// Spawn a tokio task which forwards any mixer messages to the central `Idle` task pool. + /// + /// Any requests which would cause this mixer to become live will terminate + /// this task. + pub fn spawn_forwarder(&self, tx: Sender, id: TaskId) { + let remote_rx = self.mixer.mix_rx.clone(); + tokio::spawn(async move { + while let Ok(msg) = remote_rx.recv_async().await { + let exit = msg.is_mixer_now_live(); + let dead = tx.send_async(SchedulerMessage::Do(id, msg)).await.is_err(); + if exit || dead { + break; + } + } + }); + } + + /// Returns whether the mixer should exit and be cleaned up. + pub fn handle_message(&mut self, msg: MixerMessage) -> Result { + match msg { + MixerMessage::SetConn(conn, ssrc) => { + // Overridden because + self.ssrc = ssrc; + self.rtp_sequence = random::(); + self.rtp_timestamp = random::(); + self.mixer.conn_active = Some(conn); + self.mixer.update_keepalive(ssrc); + + Ok(false) + }, + MixerMessage::Ws(ws) => { + // Overridden so that we don't mistakenly tell Discord we're speaking. + self.mixer.ws = ws; + self.send_gateway_not_speaking(); + + Ok(false) + }, + msg => { + let (events_failure, conn_failure, should_exit) = + self.mixer.handle_message(msg, &mut []); + + self.mixer + .do_rebuilds(events_failure, conn_failure) + .map_err(|_| ()) + .map(|_| should_exit) + }, + } + } + + /// Handle periodic events attached to this `Mixer`, including timer state + /// on the event thread and UDP keepalives needed to prevent session termination. + /// + /// As we init our UDP sockets as non-blocking via Tokio -> `into_std`, it is + /// safe to call UDP packet sends like this. + pub fn tick_and_keepalive(&mut self, now: Instant) -> Result<(), ()> { + // TODO: should we include an atomic which signals whether the event + // thread *cares*, so we can prevent wakeups? + // Can we do the same for live tracks? + let mut events_failure = self.mixer.fire_event(EventMessage::Tick).is_err(); + + let ka_err = self + .mixer + .check_and_send_keepalive(Some(now)) + .or_else(DriverError::disarm_would_block); + + let conn_failure = if let Err(e) = ka_err { + events_failure |= e.should_trigger_interconnect_rebuild(); + e.should_trigger_connect() + } else { + false + }; + + self.mixer + .do_rebuilds(events_failure, conn_failure) + .map_err(|_| ()) + } + + pub fn send_gateway_speaking(&mut self) -> Result<(), ()> { + if let Err(e) = self.mixer.send_gateway_speaking() { + self.mixer + .do_rebuilds( + e.should_trigger_interconnect_rebuild(), + e.should_trigger_connect(), + ) + .map_err(|_| ()) + } else { + Ok(()) + } + } + + pub fn send_gateway_not_speaking(&self) { + self.mixer.send_gateway_not_speaking(); + } +} diff --git a/src/driver/tasks/message/mixer.rs b/src/driver/tasks/message/mixer.rs index 585e135..0b1c17b 100644 --- a/src/driver/tasks/message/mixer.rs +++ b/src/driver/tasks/message/mixer.rs @@ -39,6 +39,12 @@ pub enum MixerMessage { Poison, } +impl MixerMessage { + pub fn is_mixer_now_live(&self) -> bool { + matches!(self, Self::AddTrack(_) | Self::SetTrack(Some(_))) + } +} + pub enum MixerInputResultMessage { CreateErr(Arc), ParseErr(Arc), diff --git a/src/driver/tasks/mixer/mod.rs b/src/driver/tasks/mixer/mod.rs index 18892e6..6fc4e51 100644 --- a/src/driver/tasks/mixer/mod.rs +++ b/src/driver/tasks/mixer/mod.rs @@ -34,11 +34,12 @@ use discortp::{ rtp::{MutableRtpPacket, RtpPacket}, MutablePacket, }; -use flume::{Receiver, Sender, TryRecvError}; +use flume::{Receiver, SendError, Sender, TryRecvError}; use rand::random; use rubato::{FftFixedOut, Resampler}; use std::{ io::Write, + result::Result as StdResult, sync::Arc, time::{Duration, Instant}, }; @@ -51,11 +52,11 @@ use symphonia_core::{ units::Time, }; use tokio::runtime::Handle; -use tracing::{debug, error, instrument, warn}; +use tracing::error; use xsalsa20poly1305::TAG_SIZE; #[cfg(test)] -use crate::driver::test_config::{OutputMessage, OutputMode, TickStyle}; +use crate::driver::test_config::{OutputMessage, OutputMode}; #[cfg(test)] use discortp::Packet as _; @@ -70,10 +71,9 @@ pub struct Mixer { pub interconnect: Interconnect, pub mix_rx: Receiver, pub muted: bool, - pub packet: [u8; VOICE_PACKET_MAX], + // pub packet: [u8; VOICE_PACKET_MAX], pub prevent_events: bool, pub silence_frames: u8, - pub skip_sleep: bool, pub soft_clip: SoftClip, thread_pool: BlockyTaskPool, pub ws: Option>, @@ -89,7 +89,10 @@ pub struct Mixer { resample_scratch: AudioBuffer, #[cfg(test)] - remaining_loops: Option, + pub remaining_loops: Option, + + #[cfg(test)] + raw_msg: Option, } fn new_encoder(bitrate: Bitrate, mix_mode: MixMode) -> Result { @@ -111,18 +114,8 @@ impl Mixer { .expect("Failed to create encoder in mixing thread with known-good values."); let soft_clip = SoftClip::new(config.mix_mode.to_opus()); - let mut packet = [0u8; VOICE_PACKET_MAX]; let keepalive_packet = [0u8; MutableKeepalivePacket::minimum_packet_size()]; - let mut rtp = MutableRtpPacket::new(&mut packet[..]).expect( - "FATAL: Too few bytes in self.packet for RTP header.\ - (Blame: VOICE_PACKET_MAX?)", - ); - rtp.set_version(RTP_VERSION); - rtp.set_payload_type(RTP_PROFILE_TYPE); - rtp.set_sequence(random::().into()); - rtp.set_timestamp(random::().into()); - let tracks = Vec::with_capacity(1.max(config.preallocated_tracks)); let track_handles = Vec::with_capacity(1.max(config.preallocated_tracks)); @@ -165,10 +158,8 @@ impl Mixer { interconnect, mix_rx, muted: false, - packet, prevent_events: false, silence_frames: 0, - skip_sleep: false, soft_clip, thread_pool, ws: None, @@ -185,110 +176,55 @@ impl Mixer { #[cfg(test)] remaining_loops: None, + #[cfg(test)] + raw_msg: None, } } - fn run(&mut self) { - let mut events_failure = false; - let mut conn_failure = false; + fn set_bitrate(&mut self, bitrate: Bitrate) -> Result<()> { + self.encoder.set_bitrate(bitrate).map_err(Into::into) + } - #[cfg(test)] - let ignore_check = self.config.override_connection.is_some(); - #[cfg(not(test))] - let ignore_check = false; - - 'runner: loop { - if self.conn_active.is_some() || ignore_check { - loop { - match self.mix_rx.try_recv() { - Ok(m) => { - let (events, conn, should_exit) = self.handle_message(m); - events_failure |= events; - conn_failure |= conn; - - if should_exit { - break 'runner; - } - }, - - Err(TryRecvError::Disconnected) => { - break 'runner; - }, - - Err(TryRecvError::Empty) => { - break; - }, - }; - } - - // The above action may have invalidated the connection; need to re-check! - // Also, if we're in a test mode we should unconditionally run packet mixing code. - if self.conn_active.is_some() || ignore_check { - if let Err(e) = self - .cycle() - .and_then(|_| self.audio_commands_events()) - .and_then(|_| { - self.check_and_send_keepalive() - .or_else(Error::disarm_would_block) - }) - { - events_failure |= e.should_trigger_interconnect_rebuild(); - conn_failure |= e.should_trigger_connect(); - - debug!("Mixer thread cycle: {:?}", e); - } - } - } else { - match self.mix_rx.recv() { - Ok(m) => { - let (events, conn, should_exit) = self.handle_message(m); - events_failure |= events; - conn_failure |= conn; - - if should_exit { - break 'runner; - } - }, - Err(_) => { - break 'runner; - }, - } - } - - // event failure? rebuild interconnect. - // ws or udp failure? full connect - // (soft reconnect is covered by the ws task.) - // - // in both cases, send failure is fatal, - // but will only occur on disconnect. - // expecting this is fairly noisy, so exit silently. - if events_failure { - self.prevent_events = true; - let sent = self - .interconnect - .core - .send(CoreMessage::RebuildInterconnect); - events_failure = false; - - if sent.is_err() { - break; - } - } - - if conn_failure { - self.conn_active = None; - let sent = self.interconnect.core.send(CoreMessage::FullReconnect); - conn_failure = false; - - if sent.is_err() { - break; - } - } + pub(crate) fn do_rebuilds( + &mut self, + event_failure: bool, + conn_failure: bool, + ) -> StdResult<(), SendError> { + // event failure? rebuild interconnect. + // ws or udp failure? full connect + // (soft reconnect is covered by the ws task.) + // + // in both cases, send failure is fatal, + // but will only occur on disconnect. + if event_failure { + self.rebuild_interconnect()?; } + + if conn_failure { + self.full_reconnect_gateway()?; + } + + Ok(()) + } + + pub(crate) fn rebuild_interconnect(&mut self) -> StdResult<(), SendError> { + self.prevent_events = true; + self.interconnect + .core + .send(CoreMessage::RebuildInterconnect) + } + + pub(crate) fn full_reconnect_gateway(&mut self) -> StdResult<(), SendError> { + self.conn_active = None; + self.interconnect.core.send(CoreMessage::FullReconnect) } #[inline] - fn handle_message(&mut self, msg: MixerMessage) -> (bool, bool, bool) { + pub(crate) fn handle_message( + &mut self, + msg: MixerMessage, + packet: &mut [u8], + ) -> (bool, bool, bool) { let mut events_failure = false; let mut conn_failure = false; let mut should_exit = false; @@ -323,7 +259,7 @@ impl Mixer { }, MixerMessage::SetConn(conn, ssrc) => { self.conn_active = Some(conn); - let mut rtp = MutableRtpPacket::new(&mut self.packet[..]).expect( + let mut rtp = MutableRtpPacket::new(packet).expect( "Too few bytes in self.packet for RTP header.\ (Blame: VOICE_PACKET_MAX?)", ); @@ -332,10 +268,7 @@ impl Mixer { rtp.set_timestamp(random::().into()); self.deadline = Instant::now(); - let mut ka = MutableKeepalivePacket::new(&mut self.keepalive_packet[..]) - .expect("FATAL: Insufficient bytes given to keepalive packet."); - ka.set_ssrc(ssrc); - self.keepalive_deadline = self.deadline + UDP_KEEPALIVE_GAP; + self.update_keepalive(ssrc); Ok(()) }, MixerMessage::DropConn => { @@ -420,6 +353,9 @@ impl Mixer { }, MixerMessage::Ws(new_ws_handle) => { self.ws = new_ws_handle; + if let Err(e) = self.send_gateway_speaking() { + conn_failure |= e.should_trigger_connect(); + } Ok(()) }, MixerMessage::Poison => { @@ -436,8 +372,15 @@ impl Mixer { (events_failure, conn_failure, should_exit) } + pub(crate) fn update_keepalive(&mut self, ssrc: u32) { + let mut ka = MutableKeepalivePacket::new(&mut self.keepalive_packet[..]) + .expect("FATAL: Insufficient bytes given to keepalive packet."); + ka.set_ssrc(ssrc); + self.keepalive_deadline = self.deadline + UDP_KEEPALIVE_GAP; + } + #[inline] - fn fire_event(&self, event: EventMessage) -> Result<()> { + pub(crate) fn fire_event(&self, event: EventMessage) -> Result<()> { // As this task is responsible for noticing the potential death of an event context, // it's responsible for not forcibly recreating said context repeatedly. if !self.prevent_events { @@ -476,7 +419,7 @@ impl Mixer { } #[inline] - fn audio_commands_events(&mut self) -> Result<()> { + pub(crate) fn audio_commands_events(&mut self) -> Result<()> { // Apply user commands. for (i, track) in self.tracks.iter_mut().enumerate() { // This causes fallible event system changes, @@ -558,48 +501,19 @@ impl Mixer { } #[cfg(test)] - fn _march_deadline(&mut self) { - match &self.config.tick_style { - TickStyle::Timed => { - std::thread::sleep(self.deadline.saturating_duration_since(Instant::now())); - self.deadline += TIMESTEP_LENGTH; - }, - TickStyle::UntimedWithExecLimit(rx) => { - if self.remaining_loops.is_none() { - if let Ok(new_val) = rx.recv() { - self.remaining_loops = Some(new_val.wrapping_sub(1)); - } - } - - if let Some(cnt) = self.remaining_loops.as_mut() { - if *cnt == 0 { - self.remaining_loops = None; - } else { - *cnt = cnt.wrapping_sub(1); - } - } - }, + #[inline] + pub(crate) fn test_signal_empty_tick(&self) { + match &self.config.override_connection { + Some(OutputMode::Raw(tx)) => + drop(tx.send(crate::driver::test_config::TickMessage::NoEl)), + Some(OutputMode::Rtp(tx)) => + drop(tx.send(crate::driver::test_config::TickMessage::NoEl)), + None => {}, } } - #[cfg(not(test))] - #[inline(always)] - #[allow(clippy::inline_always)] // Justified, this is a very very hot path - fn _march_deadline(&mut self) { - std::thread::sleep(self.deadline.saturating_duration_since(Instant::now())); - self.deadline += TIMESTEP_LENGTH; - } - #[inline] - fn march_deadline(&mut self) { - if self.skip_sleep { - return; - } - - self._march_deadline(); - } - - pub fn cycle(&mut self) -> Result<()> { + pub fn mix_and_build_packet(&mut self, packet: &mut [u8]) -> Result { // symph_mix is an `AudioBuffer` (planar format), we need to convert this // later into an interleaved `SampleBuffer` for libopus. self.symph_mix.clear(); @@ -609,7 +523,7 @@ impl Mixer { // Walk over all the audio files, combining into one audio frame according // to volume, play state, etc. let mut mix_len = { - let out = self.mix_tracks(); + let out = self.mix_tracks(packet); self.sample_buffer.copy_interleaved_typed(&self.symph_mix); @@ -626,7 +540,7 @@ impl Mixer { if mix_len == MixType::MixedPcm(0) { if self.silence_frames > 0 { self.silence_frames -= 1; - let mut rtp = MutableRtpPacket::new(&mut self.packet[..]).expect( + let mut rtp = MutableRtpPacket::new(packet).expect( "FATAL: Too few bytes in self.packet for RTP header.\ (Blame: VOICE_PACKET_MAX?)", ); @@ -638,28 +552,7 @@ impl Mixer { mix_len = MixType::Passthrough(SILENT_FRAME.len()); } else { // Per official guidelines, send 5x silence BEFORE we stop speaking. - if let Some(ws) = &self.ws { - // NOTE: this explicit `drop` should prevent a catastrophic thread pileup. - // A full reconnect might cause an inner closed connection. - // It's safer to leave the central task to clean this up and - // pass the mixer a new channel. - drop(ws.send(WsMessage::Speaking(false))); - } - - self.march_deadline(); - - #[cfg(test)] - match &self.config.override_connection { - Some(OutputMode::Raw(tx)) => - drop(tx.send(crate::driver::test_config::TickMessage::NoEl)), - Some(OutputMode::Rtp(tx)) => - drop(tx.send(crate::driver::test_config::TickMessage::NoEl)), - None => {}, - } - - self.advance_rtp_timestamp(); - - return Ok(()); + return Ok(0); } } else { self.silence_frames = 5; @@ -676,20 +569,14 @@ impl Mixer { } } - if let Some(ws) = &self.ws { - ws.send(WsMessage::Speaking(true))?; - } - - // Wait till the right time to send this packet: - // usually a 20ms tick, in test modes this is either a finite number of runs or user input. - self.march_deadline(); - + // For the benefit of test cases, send the raw un-RTP'd data. #[cfg(test)] - let send_status = if let Some(OutputMode::Raw(tx)) = &self.config.override_connection { + let out = if let Some(OutputMode::Raw(_)) = &self.config.override_connection { + // This case has been handled before buffer clearing above. let msg = match mix_len { MixType::Passthrough(len) if len == SILENT_FRAME.len() => OutputMessage::Silent, MixType::Passthrough(len) => { - let rtp = RtpPacket::new(&self.packet[..]).expect( + let rtp = RtpPacket::new(&packet).expect( "FATAL: Too few bytes in self.packet for RTP header.\ (Blame: VOICE_PACKET_MAX?)", ); @@ -704,19 +591,15 @@ impl Mixer { ), }; - drop(tx.send(msg.into())); + self.raw_msg = Some(msg); - Ok(()) + Ok(1) } else { - self.prep_and_send_packet(mix_len) + self.prep_packet(mix_len, packet) }; #[cfg(not(test))] - let send_status = self.prep_and_send_packet(mix_len); - - send_status.or_else(Error::disarm_would_block)?; - - self.advance_rtp_counters(); + let out = self.prep_packet(mix_len, packet); // Zero out all planes of the mix buffer if any audio was written. if matches!(mix_len, MixType::MixedPcm(a) if a > 0) { @@ -725,15 +608,11 @@ impl Mixer { } } - Ok(()) - } - - fn set_bitrate(&mut self, bitrate: Bitrate) -> Result<()> { - self.encoder.set_bitrate(bitrate).map_err(Into::into) + out } #[inline] - fn prep_and_send_packet(&mut self, mix_len: MixType) -> Result<()> { + fn prep_packet(&mut self, mix_len: MixType, packet: &mut [u8]) -> Result { let send_buffer = self.sample_buffer.samples(); let conn = self @@ -741,92 +620,97 @@ impl Mixer { .as_mut() .expect("Shouldn't be mixing packets without access to a cipher + UDP dest."); - let index = { - let mut rtp = MutableRtpPacket::new(&mut self.packet[..]).expect( - "FATAL: Too few bytes in self.packet for RTP header.\ - (Blame: VOICE_PACKET_MAX?)", - ); + let mut rtp = MutableRtpPacket::new(packet).expect( + "FATAL: Too few bytes in self.packet for RTP header.\ + (Blame: VOICE_PACKET_MAX?)", + ); - let payload = rtp.payload_mut(); - let crypto_mode = conn.crypto_state.kind(); + let payload = rtp.payload_mut(); + let crypto_mode = conn.crypto_state.kind(); - // If passthrough, Opus payload in place already. - // Else encode into buffer with space for AEAD encryption headers. - let payload_len = match mix_len { - MixType::Passthrough(opus_len) => opus_len, - MixType::MixedPcm(_samples) => { - let total_payload_space = payload.len() - crypto_mode.payload_suffix_len(); - self.encoder.encode_float( - &send_buffer[..self.config.mix_mode.sample_count_in_frame()], - &mut payload[TAG_SIZE..total_payload_space], - )? - }, - }; - - let final_payload_size = conn - .crypto_state - .write_packet_nonce(&mut rtp, TAG_SIZE + payload_len); - - // Packet encryption ignored in test modes. - #[cfg(not(test))] - let encrypt = true; - #[cfg(test)] - let encrypt = self.config.override_connection.is_none(); - - if encrypt { - conn.crypto_state.kind().encrypt_in_place( - &mut rtp, - &conn.cipher, - final_payload_size, - )?; - } - - RtpPacket::minimum_packet_size() + final_payload_size + // If passthrough, Opus payload in place already. + // Else encode into buffer with space for AEAD encryption headers. + let payload_len = match mix_len { + MixType::Passthrough(opus_len) => opus_len, + MixType::MixedPcm(_samples) => { + let total_payload_space = payload.len() - crypto_mode.payload_suffix_len(); + self.encoder.encode_float( + &send_buffer[..self.config.mix_mode.sample_count_in_frame()], + &mut payload[TAG_SIZE..total_payload_space], + )? + }, }; + let final_payload_size = conn + .crypto_state + .write_packet_nonce(&mut rtp, TAG_SIZE + payload_len); + + // Packet encryption ignored in test modes. + #[cfg(not(test))] + let encrypt = true; + #[cfg(test)] + let encrypt = self.config.override_connection.is_none(); + + if encrypt { + conn.crypto_state.kind().encrypt_in_place( + &mut rtp, + &conn.cipher, + final_payload_size, + )?; + } + + Ok(RtpPacket::minimum_packet_size() + final_payload_size) + } + + #[inline] + pub(crate) fn send_packet(&self, packet: &[u8]) -> Result<()> { + #[cfg(test)] + let send_status = if let Some(OutputMode::Raw(tx)) = &self.config.override_connection { + // This case has been handled before buffer clearing in `mix_and_build_packet`. + drop(tx.send(self.raw_msg.clone().unwrap().into())); + + Ok(()) + } else { + self._send_packet(packet) + }; + + #[cfg(not(test))] + let send_status = self._send_packet(packet); + + send_status.or_else(Error::disarm_would_block)?; + + Ok(()) + } + + #[inline] + fn _send_packet(&self, packet: &[u8]) -> Result<()> { + let conn = self + .conn_active + .as_ref() + .expect("Shouldn't be mixing packets without access to a cipher + UDP dest."); + #[cfg(test)] if let Some(OutputMode::Rtp(tx)) = &self.config.override_connection { // Test mode: send unencrypted (compressed) packets to local receiver. - drop(tx.send(self.packet[..index].to_vec().into())); + drop(tx.send(packet.to_vec().into())); } else { - conn.udp_tx.send(&self.packet[..index])?; + conn.udp_tx.send(packet)?; } #[cfg(not(test))] { // Normal operation: send encrypted payload to UDP Tx task. - conn.udp_tx.send(&self.packet[..index])?; + conn.udp_tx.send(packet)?; } Ok(()) } #[inline] - fn advance_rtp_counters(&mut self) { - let mut rtp = MutableRtpPacket::new(&mut self.packet[..]).expect( - "FATAL: Too few bytes in self.packet for RTP header.\ - (Blame: VOICE_PACKET_MAX?)", - ); - rtp.set_sequence(rtp.get_sequence() + 1); - rtp.set_timestamp(rtp.get_timestamp() + MONO_FRAME_SIZE as u32); - } - - #[inline] - // Even if we don't send a packet, we *do* need to keep advancing the timestamp - // to make it easier for a receiver to reorder packets and compute jitter measures - // wrt. our clock difference vs. theirs. - fn advance_rtp_timestamp(&mut self) { - let mut rtp = MutableRtpPacket::new(&mut self.packet[..]).expect( - "FATAL: Too few bytes in self.packet for RTP header.\ - (Blame: VOICE_PACKET_MAX?)", - ); - rtp.set_timestamp(rtp.get_timestamp() + MONO_FRAME_SIZE as u32); - } - - #[inline] - fn check_and_send_keepalive(&mut self) -> Result<()> { + pub(crate) fn check_and_send_keepalive(&mut self, now: Option) -> Result<()> { if let Some(conn) = self.conn_active.as_mut() { - if Instant::now() >= self.keepalive_deadline { + let now = now.unwrap_or_else(Instant::now); + if now >= self.keepalive_deadline { conn.udp_tx.send(&self.keepalive_packet)?; self.keepalive_deadline += UDP_KEEPALIVE_GAP; } @@ -836,9 +720,29 @@ impl Mixer { } #[inline] - fn mix_tracks(&mut self) -> MixType { + pub(crate) fn send_gateway_speaking(&self) -> Result<()> { + if let Some(ws) = &self.ws { + ws.send(WsMessage::Speaking(true))?; + } + + Ok(()) + } + + #[inline] + pub(crate) fn send_gateway_not_speaking(&self) { + if let Some(ws) = &self.ws { + // NOTE: this explicit `drop` should prevent a catastrophic thread pileup. + // A full reconnect might cause an inner closed connection. + // It's safer to leave the central task to clean this up and + // pass the mixer a new channel. + drop(ws.send(WsMessage::Speaking(false))); + } + } + + #[inline] + fn mix_tracks(&mut self, packet: &mut [u8]) -> MixType { // Get a slice of bytes to write in data for Opus packet passthrough. - let mut rtp = MutableRtpPacket::new(&mut self.packet[..]).expect( + let mut rtp = MutableRtpPacket::new(packet).expect( "FATAL: Too few bytes in self.packet for RTP header.\ (Blame: VOICE_PACKET_MAX?)", ); @@ -962,17 +866,3 @@ impl Mixer { MixType::MixedPcm(len) } } - -/// The mixing thread is a synchronous context due to its compute-bound nature. -/// -/// We pass in an async handle for the benefit of some Input classes (e.g., restartables) -/// who need to run their restart code elsewhere and return blank data until such time. -#[instrument(skip(interconnect, mix_rx, async_handle))] -pub(crate) fn runner( - interconnect: Interconnect, - mix_rx: Receiver, - async_handle: Handle, - config: Config, -) { - Mixer::new(mix_rx, async_handle, interconnect, config).run(); -} diff --git a/src/driver/tasks/mixer/pool.rs b/src/driver/tasks/mixer/pool.rs index ff32a2e..0052d59 100644 --- a/src/driver/tasks/mixer/pool.rs +++ b/src/driver/tasks/mixer/pool.rs @@ -24,7 +24,7 @@ impl BlockyTaskPool { pub fn new(handle: Handle) -> Self { Self { pool: Arc::new(RwLock::new(rusty_pool::ThreadPool::new( - 1, + 0, 64, Duration::from_secs(300), ))), diff --git a/src/driver/tasks/mod.rs b/src/driver/tasks/mod.rs index 584375b..665d0e9 100644 --- a/src/driver/tasks/mod.rs +++ b/src/driver/tasks/mod.rs @@ -23,7 +23,7 @@ use crate::{ }; use flume::{Receiver, Sender}; use message::*; -use tokio::{runtime::Handle, spawn, time::sleep as tsleep}; +use tokio::{spawn, time::sleep as tsleep}; use tracing::{debug, instrument, trace}; pub(crate) fn start(config: Config, rx: Receiver, tx: Sender) { @@ -34,7 +34,7 @@ pub(crate) fn start(config: Config, rx: Receiver, tx: Sender, config: Config) -> Interconnect { +fn start_internals(core: Sender, config: &Config) -> Interconnect { let (evt_tx, evt_rx) = flume::unbounded(); let (mix_tx, mix_rx) = flume::unbounded(); @@ -52,12 +52,7 @@ fn start_internals(core: Sender, config: Config) -> Interconnect { }); let ic = interconnect.clone(); - let handle = Handle::current(); - std::thread::spawn(move || { - trace!("Mixer started."); - mixer::runner(ic, mix_rx, handle, config); - trace!("Mixer finished."); - }); + config.get_scheduler().new_mixer(config, ic, mix_rx); interconnect } @@ -66,7 +61,7 @@ fn start_internals(core: Sender, config: Config) -> Interconnect { async fn runner(mut config: Config, rx: Receiver, tx: Sender) { let mut next_config: Option = None; let mut connection: Option = None; - let mut interconnect = start_internals(tx, config.clone()); + let mut interconnect = start_internals(tx, &config); let mut retrying = None; let mut attempt_idx = 0; diff --git a/src/driver/test_impls.rs b/src/driver/test_impls.rs new file mode 100644 index 0000000..2dd9849 --- /dev/null +++ b/src/driver/test_impls.rs @@ -0,0 +1,225 @@ +#![allow(missing_docs)] + +use crate::{ + constants::*, + input::{ + cached::Compressed, + codecs::{CODEC_REGISTRY, PROBE}, + RawAdapter, + }, + test_utils, + tracks::LoopState, +}; +use flume::{Receiver, Sender}; +use std::{io::Cursor, net::UdpSocket, sync::Arc}; +use tokio::runtime::Handle; +use xsalsa20poly1305::{KeyInit, XSalsa20Poly1305 as Cipher, KEY_SIZE}; + +use super::{ + scheduler::*, + tasks::{message::*, mixer::Mixer}, + *, +}; + +// create a dummied task + interconnect. +// measure perf at varying numbers of sources (binary 1--64) without passthrough support. + +#[cfg(feature = "receive")] +pub type Listeners = ( + Receiver, + Receiver, + Receiver, +); + +#[cfg(not(feature = "receive"))] +pub type Listeners = (Receiver, Receiver); + +pub type DummyMixer = (Mixer, Listeners); + +impl Mixer { + pub fn mock(handle: Handle, softclip: bool) -> DummyMixer { + let (mix_tx, mix_rx) = flume::unbounded(); + let (core_tx, core_rx) = flume::unbounded(); + let (event_tx, event_rx) = flume::unbounded(); + + #[cfg(feature = "receive")] + let (udp_receiver_tx, udp_receiver_rx) = flume::unbounded(); + + let ic = Interconnect { + core: core_tx, + events: event_tx, + mixer: mix_tx, + }; + + // Scheduler must be created from a Tokio context... + let (tx, rx) = flume::unbounded(); + handle.spawn_blocking(move || tx.send(crate::Config::default().use_softclip(softclip))); + let config = rx.recv().unwrap(); + + let mut out = Mixer::new(mix_rx, handle, ic, config); + + let udp_tx = UdpSocket::bind("0.0.0.0:0").expect("Failed to create send port."); + udp_tx + .connect("127.0.0.1:5316") + .expect("Failed to connect to local dest port."); + + #[cfg(feature = "receive")] + let fake_conn = MixerConnection { + cipher: Cipher::new_from_slice(&vec![0u8; KEY_SIZE]).unwrap(), + crypto_state: CryptoState::Normal, + udp_rx: udp_receiver_tx, + udp_tx, + }; + + #[cfg(not(feature = "receive"))] + let fake_conn = MixerConnection { + cipher: Cipher::new_from_slice(&vec![0u8; KEY_SIZE]).unwrap(), + crypto_state: CryptoState::Normal, + udp_tx, + }; + + out.conn_active = Some(fake_conn); + + #[cfg(feature = "receive")] + return (out, (core_rx, event_rx, udp_receiver_rx)); + + #[cfg(not(feature = "receive"))] + return (out, (core_rx, event_rx)); + } + + pub fn test_with_float(num_tracks: usize, handle: Handle, softclip: bool) -> DummyMixer { + let mut out = Self::mock(handle, softclip); + + let floats = test_utils::make_sine(10 * STEREO_FRAME_SIZE, true); + + for _ in 0..num_tracks { + let input: Input = RawAdapter::new(Cursor::new(floats.clone()), 48_000, 2).into(); + let promoted = match input { + Input::Live(l, _) => l.promote(&CODEC_REGISTRY, &PROBE), + _ => panic!("Failed to create a guaranteed source."), + }; + let (_, ctx) = Track::from(Input::Live(promoted.unwrap(), None)).into_context(); + _ = out.0.add_track(ctx); + } + + out + } + + pub fn test_with_float_unending(handle: Handle, softclip: bool) -> (DummyMixer, TrackHandle) { + let mut out = Self::mock(handle, softclip); + + let floats = test_utils::make_sine(10 * STEREO_FRAME_SIZE, true); + + let input: Input = RawAdapter::new(Cursor::new(floats.clone()), 48_000, 2).into(); + let promoted = match input { + Input::Live(l, _) => l.promote(&CODEC_REGISTRY, &PROBE), + _ => panic!("Failed to create a guaranteed source."), + }; + let mut track = Track::from(Input::Live(promoted.unwrap(), None)); + track.loops = LoopState::Infinite; + + let (handle, ctx) = track.into_context(); + _ = out.0.add_track(ctx); + + (out, handle) + } + + pub fn test_with_float_drop(num_tracks: usize, handle: Handle) -> DummyMixer { + let mut out = Self::mock(handle, true); + + for i in 0..num_tracks { + let floats = test_utils::make_sine((i / 5) * STEREO_FRAME_SIZE, true); + let input: Input = RawAdapter::new(Cursor::new(floats.clone()), 48_000, 2).into(); + let promoted = match input { + Input::Live(l, _) => l.promote(&CODEC_REGISTRY, &PROBE), + _ => panic!("Failed to create a guaranteed source."), + }; + let (_, ctx) = Track::from(Input::Live(promoted.unwrap(), None)).into_context(); + _ = out.0.add_track(ctx); + } + + out + } + + pub fn test_with_opus(handle: Handle) -> DummyMixer { + // should add a single opus-based track. + // make this fully loaded to prevent any perf cost there. + let mut out = Self::mock(handle.clone(), false); + + let floats = test_utils::make_sine(6 * STEREO_FRAME_SIZE, true); + + let input: Input = RawAdapter::new(Cursor::new(floats), 48_000, 2).into(); + + let mut src = handle.block_on(async move { + Compressed::new(input, Bitrate::BitsPerSecond(128_000)) + .await + .expect("These parameters are well-defined.") + }); + + src.raw.load_all(); + + let promoted = match src.into() { + Input::Live(l, _) => l.promote(&CODEC_REGISTRY, &PROBE), + _ => panic!("Failed to create a guaranteed source."), + }; + let (_, ctx) = Track::from(Input::Live(promoted.unwrap(), None)).into_context(); + + _ = out.0.add_track(ctx); + + out + } +} + +pub struct MockScheduler { + pub core: Live, + pub stats: Arc, + pub local: Arc, + pub rx: Receiver, + pub tx: Sender<(TaskId, ParkedMixer)>, + pub id: TaskId, +} + +impl MockScheduler { + pub fn new(mode: Option) -> Self { + let stats = Arc::new(StatBlock::default()); + let local = Arc::new(LiveStatBlock::default()); + + let (task_tx, task_rx) = flume::unbounded(); + let (sched_tx, sched_rx) = flume::unbounded(); + + let mut cfg = crate::driver::SchedulerConfig::default(); + cfg.strategy = mode.unwrap_or_default(); + + let core = Live::new( + WorkerId::new(), + cfg, + stats.clone(), + local.clone(), + task_rx, + sched_tx, + ); + Self { + core, + stats, + local, + rx: sched_rx, + tx: task_tx, + id: TaskId::new(), + } + } + + pub fn add_mixer_direct(&mut self, m: Mixer) { + let id = self.id.incr(); + self.core.add_task_direct(m, id); + } + + pub fn from_mixers(mode: Option, mixers: Vec) -> (Self, Vec) { + let mut out = Self::new(mode); + let mut listeners = vec![]; + for (mixer, listener) in mixers { + out.add_mixer_direct(mixer); + listeners.push(listener); + } + (out, listeners) + } +} diff --git a/src/error.rs b/src/error.rs index db4b3e1..8b54ad1 100644 --- a/src/error.rs +++ b/src/error.rs @@ -143,6 +143,9 @@ pub type JoinResult = Result; #[cfg(feature = "driver")] pub use crate::{ - driver::connection::error::{Error as ConnectionError, Result as ConnectionResult}, + driver::{ + connection::error::{Error as ConnectionError, Result as ConnectionResult}, + SchedulerError, + }, tracks::{ControlError, PlayError, TrackResult}, }; diff --git a/src/input/adapters/async_adapter.rs b/src/input/adapters/async_adapter.rs index 6131f12..c6f1199 100644 --- a/src/input/adapters/async_adapter.rs +++ b/src/input/adapters/async_adapter.rs @@ -177,7 +177,7 @@ impl AsyncAdapterStream { }; tokio::spawn(async move { - sink.launch().await; + Box::pin(sink.launch()).await; }); stream diff --git a/src/input/sources/file.rs b/src/input/sources/file.rs index fade69d..2d9fe57 100644 --- a/src/input/sources/file.rs +++ b/src/input/sources/file.rs @@ -1,7 +1,6 @@ -use crate::input::{AudioStream, AudioStreamError, AuxMetadata, Compose, Input}; +use crate::input::{AudioStream, AudioStreamError, Compose, Input}; use std::{error::Error, ffi::OsStr, path::Path}; use symphonia_core::{io::MediaSource, probe::Hint}; -use tokio::process::Command; /// A lazily instantiated local file. #[derive(Clone, Debug)] @@ -56,25 +55,32 @@ impl + Send + Sync> Compose for File

{ true } - /// Probes for metadata about this audio files using `ffprobe`. - async fn aux_metadata(&mut self) -> Result { - let args = [ - "-v", - "quiet", - "-of", - "json", - "-show_format", - "-show_streams", - "-i", - ]; + // SEE: issue #186 + // Below is removed due to issues with: + // 1) deadlocks on small files. + // 2) serde_aux poorly handles missing field names. + // - let mut output = Command::new("ffprobe") - .args(args) - .output() - .await - .map_err(|e| AudioStreamError::Fail(Box::new(e)))?; + // Probes for metadata about this audio file using `ffprobe`. + // async fn aux_metadata(&mut self) -> Result { + // let args = [ + // "-v", + // "quiet", + // "-of", + // "json", + // "-show_format", + // "-show_streams", + // "-i", + // ]; - AuxMetadata::from_ffprobe_json(&mut output.stdout[..]) - .map_err(|e| AudioStreamError::Fail(Box::new(e))) - } + // let mut output = Command::new("ffprobe") + // .args(args) + // .arg(self.path.as_ref().as_os_str()) + // .output() + // .await + // .map_err(|e| AudioStreamError::Fail(Box::new(e)))?; + + // AuxMetadata::from_ffprobe_json(&mut output.stdout[..]) + // .map_err(|e| AudioStreamError::Fail(Box::new(e))) + // } } diff --git a/src/lib.rs b/src/lib.rs index 54324b1..483ffd4 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -98,6 +98,8 @@ mod manager; pub mod serenity; #[cfg(feature = "gateway")] pub mod shards; +#[cfg(any(test, feature = "internals"))] +pub mod test_utils; #[cfg(feature = "driver")] pub mod tracks; #[cfg(feature = "driver")] diff --git a/src/shards.rs b/src/shards.rs index d0b6e64..71e3a00 100644 --- a/src/shards.rs +++ b/src/shards.rs @@ -37,16 +37,19 @@ impl TwilightMap { /// Construct a map of shards and command senders to those shards. /// /// For correctness all shards should be in the map. + #[must_use] pub fn new(map: std::collections::HashMap) -> Self { TwilightMap { map } } /// Get the message sender for `shard_id`. + #[must_use] pub fn get(&self, shard_id: u64) -> Option<&MessageSender> { self.map.get(&shard_id) } /// Get the total number of shards in the map. + #[must_use] pub fn shard_count(&self) -> u64 { self.map.len() as u64 } diff --git a/utils/src/lib.rs b/src/test_utils.rs similarity index 98% rename from utils/src/lib.rs rename to src/test_utils.rs index 35bcf34..061612d 100644 --- a/utils/src/lib.rs +++ b/src/test_utils.rs @@ -1,3 +1,5 @@ +#![allow(missing_docs)] + use byteorder::{LittleEndian, WriteBytesExt}; use std::mem; diff --git a/utils/Cargo.toml b/utils/Cargo.toml deleted file mode 100644 index 9bb2698..0000000 --- a/utils/Cargo.toml +++ /dev/null @@ -1,10 +0,0 @@ -[package] -name = "utils" -version = "0.1.0" -authors = ["Kyle Simpson "] -edition = "2018" - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html - -[dependencies] -byteorder = "1" diff --git a/utils/README.md b/utils/README.md deleted file mode 100644 index fcb910f..0000000 --- a/utils/README.md +++ /dev/null @@ -1 +0,0 @@ -Test utilities for testing and benchmarking songbird.

UY_ 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 diff --git a/images/driver.png b/images/driver.png index b06c2c26f551de4f67f31eed3f94082e027e036a..8f285e33c5c11aa9d6820cf08505c22f260cbeb3 100644 GIT binary patch delta 37986 zcmZs@Wmr~g)GhqD-H3vUBB_K$mvn=ofOL0>2ndLPbS?})K~P${yQLciM7mQ#q+6PY zJae(%^Pca=x2}D$k@c|F9W%xpbKJE4xDeoj`EDlRY4;f@{))H1LL`30(n7B<^^Zd?p7b<%N3@j(=iEKpbJ+J?cl__97=IgshTYGC2}!w!ep zVUk_E|LgbQ@4ZV}{nM0_mubiY@Zv61a+SybjmeOdJ~V%o*f2qBkq}Rvo%6lp5wT>Z zrj)svp)-H=f~q{jM3bA8Ei~7daR=@4c+L_|x|~HumW; zvqezW&+H&cqtJh)zLq^|m)ic)P&Us_&ah!}a*Vpqa zyj^9wi(1#6rGMI76X}TNY?SuLFJdRB@IFx9Gn}xFPRzlIW6t2t@jQlPF5!;4HvOR zMMZhF$NTf$Nll-q73Ae}bxK#SDF}7v>Iv#e|B8RTuJxLqpFfJnGDtp!jarn%f!kg;`S^c5uB#7GlJ{u>pcZk;e}Mi+DH8w1}wT|im|xFL`2IY#TJ9P zdKJAFuF+Nx&+QsJX2P>t*t~<;-?k~qGwwvkV znDwhP*Ib@HO;jz(%37*is}b}#+AO97N-C2Whq|)~j*jr=?AW-=cQ= z`)#vR)L>(x>-+cbutCh)MUSuhr3Qcgd^5#K*kwyI|H%UwPiu6zS@DST<}8b5{{4!t z&YLDG3{oa0voJ2vz29fCe49F@FD=Kb;1lg)=QT72;TySVzJk;TblIb$qc&4NA{eKr zPxgGq5#o%TDDu_S)vH&pRGxx+p{G1~ zRWV=Zb(@o*zN67V!%9SvJ|=*S{rgY1^zUMUVJ80O8=Kn^bM9Or%h z{Q39q-?Va(ed$UM9cQ`{9;S}#)>yQu+Rh{-=~uJrmOYsz ze<+>us_hHA%Vfal(ZR0k_F}PN{kfchQThfZjohup{?>b=-71QT_gr_D-@kvamZc86 z`^9A$8OYJ;6y6=p)+)SMPg&ih?}44^PLgcx<>K7f*nlx`+5CA_Z7tbZ<9<-#xF%xw z{a@_uY~|rHn-|x}R5eY_=Vdc=qM|3^1|EU({yZA$S^b43?fdgdpQcH1FOqd-sL=89 zma3%59~~d8mA*XUuV3AmX+4X3S?JaD;|s_~Qn9M_A2%S5^ihf)EElf)Ds_DIO2BTu zD_5^_8r%B*>YZ1wUj6t)ZM7xG!NK8u5g|_`W$~vHt^k`HA0KC6U`SJl6LI<*Ph^;! zlClDp2zxCtv9j2oRquVN_lCs4SL0R)S-3bj5KnfRsF9F45r{p?jG^#SJI-G_f^>9q zGvNl~Uyc37x8bc45)!mDG?YS4id6Asm6fi}&JoTJRRXAl1)esXUqI~O`Bqiy-rXtp zch@Fhapq=_bLRb-{Vq2a=AjQ#SE z4Mc&8DbeG-dfB(u7>wOdN6f)zefnf-0bybBBnh6JR9_`}B2Lo|3T|`NmoIa#+`gkx z`AqVgD`FaskZk3Qs8}D3$KlUJ$HbU+##$cw)ct<4E>%<(b~`AzvG`eFG;>dHj&}O! z%CA2=mNr{?q1*xTi5^{Xm!j;;Kh-YKinz2p+Tr0ftQ#d-@K(1vu8oJ%CgJ}3Z-@h~ zN{oR0?c2ALI|Reo40v?Ugaie>n)-2RY~ARSaH`<^XgN~II?>$LR^^8M>PGpwLv2`d zKR^FolE0F}^3W{;$NjB^Li2t`tWUghMi{f!#%z?;qI__0@L;yq=75e>=-(urk{1zI zp4NGu@grpmW4r0{_xHDt|ut9~LB1?0o$@u-SS}8jcVqgFg5ae)O;^rX2 z86e2fc0GaUXsK1)OM}pE(M0oNmmeR=H>~Lx85toag7GRhz`H$;wg>0p5Pe^xl9yxq zV6IVX|5m*i=5Q{XT3oCE%N?(Fm7#R=_4Q@ds~`f)zILrQMJ61(ITwDbugqr3TWE9v z@>g1%hq<}tuRo1`Gm{-fX1%kWNF3Y54}0*2h2FG0gIayZeHc!|j~^{bItYU3B~ipc zsDRL^B+%a07E-IzEE)~rNx*(_J}h&r#$E8vo%;DTK@5g)gR)L!)V<8`(bkgbp2E_- zJoy*_a1*^U>x9*$K8!qHXp>>`#RD$ti|<`dHU=p zYN0EG%8z_kk>=a{TGKP?*44D>e#gv4Cvht2@1iQtUp_80EM$dbh20G6c9T4B^Vid` zCTVFS>lz7(`Uv$1F`l@pYDmc1Pr=#8)1;6Cas)p++K4!=MjO`HF7(hWl!0-0dkH)J zeX_GW+_PZYi3pd%{#Mg6cXV`sg}&%Z?}jbQs@(X7Oa1XWcc%UaQkk9kZlkdZdl!FS z$n99{T-?Fl-eaBI)rs0#<5rS-8lmg{5;ZJLw{Jfk{%Y*aWT307dk#VcIFJEyq;}rW zTzLqhY|5lu1p(x_AA^G$YY*Xc#s!E`O~%gUY#+5yO1)umKBrGWGDVa>^y>; ztks^>K>pn@jgF3v5zh%~_|4OAO7Gu3?(wcYR&R7Tz z%M6x?rSZ*^sGyhiY91I*#y4)b`Dce2mG(3UC#Uc3@0OZztA&asIDz-4tgUV07h7d_ z)D(2u^Il?oxhx}+zJ{Ie&GJ4dh+doUU<=E; zV%1L4`RR&Yg>U>mvB=)&$82VsosUBWW7D^hq&NRuO^d62_Uzf?CgWB|urgN4wXsSK zvn#hK`K<3dc9mKgFub{N@nVSnUMpKI*$$nE&7XI6FUl$;v-$xng!e3f!~6m;tU@fn z$9K3HcM>8`%Bo9$lHR_z^UJFJVq30OVX9lL0suj-T$$Sw)X7YhcWZN%BtKDw4j@zK zZ_z5mF5k%+;z-rV)4z4=R?os{xvf9#)l!Ibi&=Tey?|Hrt6f6NAFI^t{qgG*Igl05 zD}5OgAwQmxkul+MkYgucJ1fiC>UDT@WZ=5Oy`XxWrAo0uiMgMF;_Tl6FV;J*DV#5y z$f&<)U@)OoXd-2?#`&ship;?`mQbQKm;3eMRZqs`o518`@TFvq%{Rl_PXA@cTaKLdLKDCFoPcl1oZJPDUnJ(uA-YYYcYAU>G$S=Au#UhxlGAB`QMgWyd#LY@ z<*BKvP8Jf)AS%-c@)m=+=j(=>zFPEYR`8+sP;SU#yi7Q2Z<<25eBMNF+rD&$YJ@XR zCTFok+mQr0GBs&kp_C+X={ncX>$N3*e&;Rjx@?mqHNAJ7^94u$Vb$Q{*N_$5Soa{& zm}zps%%4M+eJGK}!2RZgrRpmW4-ZNKyU+5$K|#}w*9Zxd5u<7vo(+u!?$vUSqlzsf zTPLTo$p)tC^YKGBfAsbi7GxJHo1151=Va0$5pAeo_peh*N;Ux!kxrZIh>5yq_`TeA zPP+25WQwxoQ2qk}%i*sn8L!u0fqR9-N$cg#cT=xQy_XRFkD96j|5(H6wNC0*u`rkR_YyCH745!*%Ry!7-|!)$vLq&wj! zb)Hr=*wkqY=hg9QCW24XXA9f9mMD@-i=<5_YTP$e>eqK>0z*T&&HLyx&MJMPLWC2O zlH@M61^o zH?Mhkh%J(5cfZ#uJ*MbRIWW+UM7mTp2{O(eh?n{tB)7z^y_fVcY(7hQYpINakT9`S zRK8|u@$Y2)2949k=f~r#7WWkfa}y)==z;2fCvv>`2|0Y|u@1fl7&p${%?(hvs5SDtE`U<7qP#o; ztCnmyC(t;nCE#*nbt_E$!Yx(CP`B4=kUPf4#$+}+Xp~e{xxkmfxfkWz3EG0fL%w{W zkKuXV6+bkgb?Xrf0!k*kCJ0J_fq}+36^{T2V^YLw&Z=54I1>mm2@3d1nuf=>*;R+F zP1GV=^Gai($li^`W~NQjPp|N|jP;&vhX-c4+q%Ot)jzu{B;>X_T5cTm=7lhXqI-(} zp7ZU9IjK_Cq*qos@pV;xB>i>If~*jSLX9!A=lWlZ;?6WPj$a#P2h9y|-{CP%v;7*WA)E7o3}(=CT^E0$?en z@p5!fRy(k>Ys;LCTaVMM@y?_?42OhG|HZfM^8-_VZi_t>S5;tNG+xi!ZOCM6OtorA z{M3-l@U$y9(cZ$)C0cPkk}LF+Jrd5gPQNMrud_uI)X9(iEMR0%&lsOp2qt@C87nsW z`msgjQd#{#Anh7fe?4vwdc|7DFi2J`xxmfBF=DBapm>pj@9)pRJDYQz1o-%zZZ}z2 zEGNHv0i_@l#@yV_&2cPibrjGYxZ+JgK`|Xy4M2v3grtSK3tt8CU9nSPM1xf)>90c5 zPP#ZZ<>jnouFSS%{R85(L%l2v#=#5Xb4~6v-nN09p^#96;M!18r1{VGcFS*Xa5e&& z$oWT*+?H_OXAih-dBlay#67h4>#fruio@#}95^3`D%C&avS8gOxN?ow7l+z6kH@#z z;KS~mpT-a5L+$oexk%qXE+L1_oeEX_GJFEfteQ{KKIG+Dg|q4<_rkKwUj~lhrd~*C zZ6Mj$kp01qB?GbV`}gT8X#tb??VrxEg{93@=q}N)nUrYZ{QECT6ahv**jaG};Bv|K zHDt9xeb*d=S`Tk`=Pd{And#|}WS$&#rnS4s%FIkk=_47oqmU9lt#@zV*1y5QM=Lg_ zwW`ek{k3Ng8y$Wzgc0A?!%l>Jm5Vux847Kw4x+dpF~)Kw152Qgra*d*39IBGFE0;e ztOV411G#!xl|csSG26u(5gi@Z4k{}C#toT2O1iqVOYDKwNst(jc7-x6uX-mE2N`^> zDgd!*o4BSXamC7&gRaF&0!LOXDb_0#I*!tOpODT*z z%69hlE8qpYt78+cYt?rok$}U!sZUD-Il+1R{7!#=14~xN(j}j%$K4|^=c#sj}dGy&q-G}{| zJC*gBy&C-|`=X`Z_L{U>l%vf(9TSN{G1*}T6r3h)GHlhVAFea%_=w$F9Jpp)TyFY9 z;mYLxEx(ivN~|=6*-&}N-qy;m!PeH+ziI#!&g0|v;s{hat_^UnvU4iy^`tA^S>O{C z`~?>x`%KXW0@Zlcy(H>XB`PYa)5WRWg@rii5L{yh&|N`HNqICKtgy2>rc;qP*qiq5 zPU4ow!|imVU1sSqQe<`@|rEd+25=-Uz1LON5^ zIp9m&pxCWIt@@phk4`>9<#%)93?>9m)CtospCA$4;!?&bbAEl;bjCdKH6a!G%s5B z_bV)iv)>GmTNiGn#ir}$v4CN;r z_E~d;*wcqfWA|giSad2vJVvTZOC9a(w$PfLG^Jlk0JzGH^sIL)K3f$WH&(=048%fX zV)Tx8c)j)AxBH>O*A_tWrP0%;Z9;5p3qV`b#ND>yo(5c_d~4!NCaJ%AbTgs!uxL*0 zQ3)Bs)8>FP90)v7u6D8X@!5y3rJ2XI|Bjm&yIdw$2n|W<^C-&s9pm4EizPsCZ}7Yz zyLRo)TIDlGRmQ+D^F#HiA5Z_>HDuoTs#2=mps0Bj5(N z_1FQ$kjdr*v0)2nv3IR*H2|yGx+8KKxqP{v>d5!z#7OELt0#7cd+UOZt3(GSP&|jl zNr;P+izJcmKeotY{y99%FCd_Otg{1o9O}2@d)rm|_~uxTYUww}E&nsOt2tLlso%>E zpYKn2*ci=U!t`^sFH2)h^aR@p;d!Q2;AtnR{~p&`)Wgi%g@W3O8PAcTr-K*z-z#i7 zP$17}*Mk*A%AYpkVPh#>LtN_jjvRUhloL}6jWqYdU5(-YCi8GhMoj_Sy3;&_|J>5$0{OKJr%{8g%YZV7>%D$ z;QQa;U4^Lyb`p0mb$QfeJz4%*rJ~X7l@Vd- zMd&I7j-Ss6`ZM)C{pAoFz(#1BC|pm5?!p*cXcl{R*B6RQc243EN z>2VU_H7*Yq&YWQNip`<><8Hi{92FHc-j=;P?%H{{ywld!mZMV|x&LB*eq}+>dE=Q> z3lH$dN(+1(9A5=G7tUfd&x7@C8)r6jUkto+u&YKuu)b3IeXG`}9oSt#w11^REEm9>QOPgO0EU-QC@1&YUU9$_EDJcom| z$22jtbaalZqs~wwdW%kH^)JSG>}P<Vu)LI4I}ZIrw%S7uQPGLNk=E+KjZ=AgkXlupjO3i~;b4t@VsRKME2wn?X(Xt|rj(c6N4t z2noxN0Lm;?M)3t_C#S>R+LKU%v^c2Tt71x?0junOuoEg@i=B-ED0-!TwY)zmCQPL6{Phd<8=Zqx!P`z4Vc%S*lU^vA{ZxRXO? zip5*koxiwW&u7TFVutFs*<viO&}+F$8{~COz=qy%@Y*`VH!DVQZX(-^$>pBp{@mZU+uCDy_cSzo*L{d z5(O=mRs%ld_;9$;^u}0JiT#o~mYMO^BLKhP;{B;|QJ$WjK<@u&Y&-&}w$a&)W*_KM zMxDs6LSIB%oCa-$0HT8ij2lpbkRVonm99aPra}j5l1P5rRO|>O*n#*5XX_0tpxj}r z-U_lC0p23c1KDr3&OJ(Vwm~1&d|{%pv?|YikQE39Eh;*^L`aD`A;nme82n z9^sVfGv9`NN{)Cb_8x2x+PYo6y_^gTX7EckHa0MGPHIVWu1I*O^im0QYjk!@&tQDT zYm7YIaMi?J63U|Qe5JPZ>&l55szS8-GK`WUpD1f+{}3oDu;P&PV(9 zW9zU1+t)|Kbiog{67g<5GBHUlEiH}EprN5zu*VXM0du+y{qe?QUu3Q`4uK87NE-EJ zqqO!2ZQ25c=Wx-8UAqX|3xME`#7FuPy6)POqcz~Rum4~Nn~!tf8NOjvrSyHo4mN0~ zTar3rWIL(fy!LRTmEGt^$ltMZmnq61&;>oa0yc33)~fQo)E}5cfB$|97Txb|k~!)M zU+x(q{h4Y#q0sz5B>~=Xb<`evhMH#QFF?CgxeR5l(n$K$yu-jz4;y%w=Q+3|(_Pg>l0N5-_ex;ig> z(qm8*gel}+6{A;sy7{1gLbT)Pg(>pQ|G=2K@QreLRL;>;g~=25kkZ*wv1;oyXouU* zwtWZ)pdDpj9Z70;Os!Slu$B}Oh{_PsDY|GI3~A&Gf#bU?K$&h|%3OgGLCT{M@CYzJ z2W!ZQYk`8dkB=3!Bp|G%ey6N=q~f#w4JmF~CvmH+q5?4TjZ2P*og;Meo%jA4CS?U* z#KFatl$1pFCVfmcaJ~w8%{50_m5FfC9l;H-7w(!0znM2lmPIH)GfRdELvZuq1ABDZDS!VZX9}BhXiR1;GM$IBbAl?7-21WzPrNS0xQe@ z5D`5&EOc9qx`mz14k9{-@x1cAc>o7P?>~AwFq-b=^{qSB)>o+A@6sxe&`Q+B2hI0o z^n(A@SWVObvES0POGNTv?Q&L)V7BjzX}&G?x!m^X==o%=GhEs>hhJTOvG*tViC=%) zp9N(RxSevGhriLC3Oh6s zO>6A$t{E(6QBYDg`QJzzTq}8p4Y+cfi^~p(p=-3VU{L;keh1K!o2hn!_%aS|4Hd{` zYLQXvYoDp0iI(A^*8|gCGVs6}H~JDo9O}1teFzX8AkH|__WWK9FdCL)72K?>FCmJM zvgxDvmhjrO?O0&KHz61KTqIY9E_9IFPn0VeDPDqI_Sl=m#d_bNq^6Do>-|K=o(LQa zjWe&*Co18cwTTmG<52)$geuTQ$^cXXFaRFI@9*mB?kBPB?(Bq}tO^PWM(rbB=7YJ_ zkWzrnk+hL(61yU#k(Cb{!6)&6|+yg}i zgtiUY#rQ=#A zWs~1a6Edy4Y7kt)^<5UMkb@i7%zaBaB$kI*-(9gB@h#tc#BgJtKC}fA3=z>G|1z6^ zKn2JQNbuXhtqJz~HD{w#EW}?+5IukNT01$bq52=C=TCnD z@%404jQt6w)ghBUN8NSr?<9&Q}#|wN8R79Xe&@8W7yveEZ%=iN$f9;$~x-{#(d->3c zu02FH{8sH?6>aA_iWS}Ohwg3<8pt#O%RE`Dit!9GLc(5`+cv(zDPjG`DI_@fy)WTI z@Aq_ZL=PU6KYVkmjH4yI$GQ z)mBncg1CZr`vyzxJ3r_X=RcAe14t%w#}}IEe^If;iSX;pmq2- zA{OB$5{bp5Ch$_Y6~WS4m{Bag>{A(Ugjf0!DRR)%$V`EWVW`tB!%P(|l^Q6Ij)A=td-xDk8tC=#p#`AM<5KZvViJS|zyc2qjkx1Tx>6EU?WQtYR_8MD zLZ!K3yk;~enwmqt#7uiSAXGjJE$#GJJDX3eOWlpa1XM!#_DU&=NfQ34$OQrdQ18?< z&efe9Zgzt5BgA0+@82#Q;kzR0w(EZyp{Q5WF8}+-j}2Zo0DCq7t5gWZ9x_&tlw<@# z!eCmt7dnKPc;DMVhgQb-n->-qs;HP;pl8OLn(tX8ZHA0MBSt1BpN_V)Mpf5NvAM*qdZadvjr znl@s{0at_Id#yEEYf;;HAdQpmqQY)K8PA{H2bgS_Fy}Xpk=e<6Z&26vb*# zGuoU%$W@JtQI!LS!2~0age^_(HWvX@GL>W!S-pODuM#`;-yQ) zW=a^(On+2Z^C?8y7(fxzykC4;8Z!6p!ZqkFD_^zJ*Mr{m3~-g7?9g%%a&50MNx!n8 z;Uv)WfUxf9ML^zz%I}3H?9=u1k0 zX`!jY!WPh%{vSRR7z%qfg4`DLWI*LfYq;#L3VR$n{Za!D7kNH;4wElQ(&-4DEeU|0 zfbgM$Xsszc0{rtu*ww)WL=3%Y_8LH0s8%{yVk@ZPrGEht;yB?>7gJ(|On3}rYlRj* zB*(3?0kOhulRl@*_a`Lkoh5!kll@{nPD5JqMg04*pl zQ+g%*ueZmE#?h)^FfzbzV}_C-iD@t9?C-3gR0%+3?Zrzgy5NtbEZXQ0#xm5ijzG|< zo~Pgb2sy8+2OxE(B@~(;fw_AJ2W;9!?{C>)F!)bBNHBG)n&wVnK0Zyb1@k2;S95jC zf#nGq9o1cEiGT3cr0vT$JO)*M=$u2PzYoQG3R7%sEVP)NffQZwg}D4M8yyp+-^I?v z&{tk~`1m?spFwXe&u#{K5z)ekYl(73k)hgsvzeJ07^4i;>K+#B4#E%EB#htbCdIts znXs|8CgU`b1WdCk~ zLuQPpJHy=HY#0`+*4Kt_uaTPt&|pL{95kbUvOy($vSe_Q2{AG!^Pg#OuN~0u8dTUJ zQXV$TLj`vv161jWN;2^TU2%vlWE)C7fP(e}~+qXAgzy4n_L9P8#SXP$B zqet&>WW=QCiG1Ou=WuWUb!MlhKXycGNZ?ktc6Y7%(yxk&)_WIeufPk(Jq}jj=Z{Gt zoB%R7>Qhlz_qm2(p5UN?=zx%vv=rF8jjDP;#z21o~VX7(nt1_1+<>mYP;N-wjO)8ksQ2LO;B{&R~}DT3gRxc2eH8 zhqixgQqJm!4R7u2EY*~w_uoghmry+f&`9A1qrhA-y4xv)IYY0KpqBFX~6sU&|j2+OIn&^dm4WKzeLNJ z_&DSdAQ;G1;Iu)Jk&Jq>k00-?H&KIFZa7)$T4Zeeo9A3eBp{O7%??4>l2C&+U>78* z-HAv@OtQXXFgqWyT5t;Bsfkkh0-~t&W0*NhG%gD9@NO zbwfNQl7MfK0gj_;8#*0;+CV@ItYfK~VR|mqm*LD>L7*9_onKxSviZ|s8taUBt6s%C zVM0wnFzEAVsHdIkmmn5Lahl4vhOunt!oGX7gfLw9|Iv4YgS9%S3?g+9jf{Mp2up3c zBK^n{!!? zgm@9ta~5k?LzT~OJ3GJq7xg3H&FSQ$=a-f&vOu`eWq1Ue6wuJn0K(P>0+16yF)jgg zQG3-RVBDZ7o7d_c4OJM(*kRpFkY+I@b#P>;MaDp}uALKRKycxL^Fm6v%g%E1Q>GAK zi6kr#aZrtf2L;`(U7eoZ8nx{NtxXH~k$UkN%uUIfvzYulz>k2;{_|=X3=X6N@(?Ed z-21@*L8=rS6=kvb8VY*^Z0GQchVxxII>=ISd^Tdp8Wie(0kjNNI$D|BNYDfUHn+VZVg0>hzUPi{uT$}ESTjm z$TUq&O{4m}r5~p#qlprxfJUlu76O7#C?xPA)wi~_EtIl^zQE~{kzTlPK?ec(I`FwZ zK9c169c5dYOoD>0@MKW6vyVO_y>jK=tLdMh&?yHGP3BQW&q#s1win=}{agoSwGJdZ z^z;ZyuNIofMfIJ-+?P7d5#ol134VSu&f~9b7Sy!mv`sE ztlNeZB9J+h5E2psUWhV{-pD-=P8_eD9HUb-#)t5gPYX#4BW(!PI3#wS&APqyDansy zhQ%(5+F&@Mhkxrq{03-MGlHQ;_b-7^(}#S0;U=P-VCx&gz@(6H}PpLN?GVRjR1fDG1z}V(358YaYEUOw%37dYVWhf-0v3$ z2f43xkF|Qg`RC6)pkzy|CSICLM}GRG@Cl(3hKw>&Vky(5(hSnn7$Ij49v+mmlW?58 za0`?>08Tlc)M2cwteC=aF`kWp-Z6?Kuw=Ph*V};vLMQUO?u<%d59}OB!PXnDDHK^v zj5jwow-A577%FWKCD_o=5O@fgWdh4PYdgDTV5mRedI(*UCZtFZ68Hmjgyih3)h|beEgZS=Rkjz53-v9 zW&#X`3DtANFT+->0BB84PKI~Gg{CQ&w(jl%Kx!b*gA3xaX%$jI4Bb|!GJt4Z0bxy*V13qbh;DCpYmmqdI!LPA0~Cz5<{QiXu> zmCeS%;U!e0z#+j>U!|aU5hHL0ldg)&7xOVcQhxELC_Ar?^6RmEX=r%FsaHw^8kCAM zIw7Gdcr1w99d7JC=ZXX`hOiIT3}2xfikNUpnfm?v3P^g$$%kQLut5+;v=dZe%q-}b znLTY5kk24U{N0zKQbEN&E4cj=JQ^*0xwyC<|7dT|5tAwYaCmswcY47=OlYy`R=aRB zFl5|)9U%Ys@ne`SgsCHl)AaQyI*v2anUx^4N=c(2OoelR4pwa zszfjN{!j)~B4FQN3kzHSc3cMi3lxuV$_@&6^uou_3S0UD%g%hdK;AYB^yT1#P}*iJ zw1GCE-@I6S9PN*TbP7TceC_Y=|G%ZG_}cw7&F%2--^J>U7Vc-LF8&h(u?(Mtf`o*& z__ldpdZ3@5pZGXApiR`_JZacjDG_58P0cUS(b=V;Xq8-&+qwY_0hS3H5+WiZLc%}G z%P*EHFqrg_Q)9UIBc)y$&VT;bNCjdbEHW}vuncPWVIBvqh_`Pa-oJmpD+v~+$%N^D z5E~|}smx9_Ix+Ef#*BY-?vekh`tbFM5a00daKj~P1g(YO+u&do@$fVM9UjBv3&DFz z;4l-c5*pZV%#%@pm%=0H=;-Qegd_-nj;gMzf}V`!kIMml(L&BWePzS+Wi9Pl2rntMo99MNTTs~PhWcfql{z(V`+Z0f%)$k0!FcbEIgnEzyU}TmN|1%eDU95Z%XVT&_P^+0W>u>f{-PAXC@#Zz^Zy%9RdYYA`cklRWw_u^1*uT ze=O-^_yhqNT2HzOiXkUx+u$@>Ke+^!YY%?24OoS@S2;~6)_FDpaL3;?A_U_p{T@4y z!DybH>M^7g5fK3i2;{;{2xmZwM2wFcTZ5Dpd>gQy00^-DTAsn&$D;5b!(^x{ki7=+ z3Oa~@2iu^|S5a1G-iQTWUoZd3>$J2q@$pOW=zjsYV+QKW?1mJ<`Xg$gp&w?ttN#4? zyd*;Hj@IP(Veq_`w*Y@ISx+v=+<++`Zf2!u{=-Pf!q?97P47q=3XC_xLgWiXd>L z(6^@pk?GBw@yKn)e?g@EeeWy=lMT&nGw2hVP-%i_2b?rponUzsdd@97-=m|WVR~!7 zN;|)9!@6>uTFSuepFcgoWk9bWVuVIdQ_~4TKUfI^5gyavIaerxs@<@!R2;)ubV#mV zom^Ro0nRce#&Qqpgb)7y+w1EI2pb;;Q-Wq_&rA1MDMK3yjGCZOI9B@W4O zJHj-UT)^%*unfRy!1;}kz`$F`1{D5~qW~b#1^$bvQ;&WD6g|el9M0aNDgaJacla!1 zI%dE7UIK8OAVUXc7#O#Y#h&IianL0qwzfcvr`@RZSpOp)D!mQzpRrox1iBE8um1d! z!C+o^qBYRaMX(NAXm^%5ttWQtz!`&C=->Of`@kVaU>oOu>&Tn$<6z(oAFsuM!Ki@< z34`I8ot$Kcv!=MX!3H64jte046Z04xMH8@6c6+~Ja9vdv)N6+HVKosTtt@9>gEv}^ zmUU~-)UiUK0m)QUMHa6RK791mse|DGLGWU%qBsH7933AC^WnR4;FKqIfscyzNW*U z699IpO~@J=%AhxDGvAJP;S65O=f{T=VLspzp3?7Z7V<9xvVhYeDvoBk7cuukAEJG;Z)Kz)6WSynAD_zda;-u#Sc$8rFQO$2zpU~c zeR}cfn76-`*^!-&?)2Zt{nHa|<0GjrQIY^U z$pg&i;Kk^%K};sgkCeBwXo$G*|M$^( z*@ZSsBz1U=%eFaCDl%{w5~RHnRv?z)dfrvng60q3Q_td_`wi!h%IprFnb@j>A&4d9 zqgxa&c4{L>?5txV-Maq^*Yuv~R#Y=EG72EaRT-71)8ItE4&eht4+X@{5GtKi3SB4w z$uCe_yYGb(7IpgfSjTd|3`avQU;@^|f&@|><8?GtI=r(%7Ix}oYoIu|VWIvHq(G2} z0X&4T;u_!m{5eD#RCxdosey-3K{55r)bvL6%<}SRm9s6=;QxD)kIh1VY(%3Vn7XZv zO~I+9;hjclNhlS^(Fo&NeflJMDD$qPzEd|2dj$Mv8kA~!aF+a+>b*2Y`Zh8Q=oQF{WG%ws(rwLAJgj2M*9 z74hYeWp+NGFFX7IyoR2>{x}ehvSY?5ZtN#R$L#bTZj3Y;r*eg31Hk|6uzpAYHn_@_^fo&uIZD)-crXEAnnyqmo1F&8ZFJ_Igoe5Gf!l&M-2HK^wUrhs<_13eWPX}*|?-ByQ>jGT@J(%zPIW7{9JfZpFj_B7F8^&bNp z-vC&P!80Om6`WqIlDhJQnQw$oi{2+*VZs z@e&-<*r~#2fbJz9-yW3XsZ^T9=5U1jJRaUx6Ez3)FXupWah?Ta;DDQS%Mj~tEi`K4 zfEa*t+X5T3zXk7z`QEn+u(Ym9K?M5@irbRhe>`#EurC}zF9NAV3G2TAL7&3uOpGxc zN(5p_UPt3h9S7JjNP&%(7-86gsJXR><*0+U7`^!vK>Z6naB*YF6ZB4Ny;^r|wH|^< zsbw_gnfks8rR8-O6#O7!89k~;G?1M+QW=#q=2-J{o`sZdecGr)JvWU}T4s<+{@yYF zzrc7EELlkaJ9plSpivaJVx$7^#*MB4vkg*g>TE)m@1qg-m7wr3Sp`+ej2u6fQOEJU zoTezgbTvO$~)R*F1c15Sj zeD>5>jjM+0Q;LT*4Y%{WNLA#r|2|;I;Qlkp9URxjbL-U8Nzpk!A-{b2PmHOau&x}> zu#!bXl~pK+UVd%GPqR++eA$<+D5sC?n{pL`4aPS(KmdO>_HEmIVQaFK42e|nG0E?OQ69r349=|H@{wwmv@BGboi~|jQbRnZ=z3q-8U8rFk zpdlT@{9@$E;C%zz2_xolZEHF|J#FK(e&0fqNT%NZ&xhLT)!66wH8_*H5ZjOu9G#F< z?~EkP!8J1uTYubV@&Sp??&wsOFQXQiF9dn8ldaEWW_aQDP0rx%sB;1p{5plO`-%*w z#*U|yFxA7BYCb-ey=BMApOxjpIq2qt0 z+TmxcBuICcz9<8HkQW_2hPd(1RL|Nov$VWs1FVdpC7bvJk3+?!1^KWY_0)AY$%HF8 zZ_!leDSR4eh=0DB>M`mhuCC%*Q~j!ap8czjUvTv-nMvf@yM4hvyV71^3wSm^IvK@+ z7ExB=TE&A&0-Uv%>a+C4V($g?5#KW_%XaGlSN_O;U1**+xj}`N?H|##Qq6u9AX97o z@Tg@DTPdHO%*3{3ZNpP~H$9TG(1Y&HYzsUYZD?W?CtG+}^^&d{tgu8^afoss8SYHY zWsvoadyuX@n={KBXCKxrzqEwLiqpVfcU@YL^{7+5#TBm~`IJiD>F8)vJmDl6U2XDe zT|Pdq{-n@xVp2)njJjzpW1;%{3r8~dDiGvu0lS)PJ19i^z@w81>jGGX_idILh4S8<; zv-F+%(sln9n^H@?}{D=bd#Z{_B`gDMC6T6U248P!7m5g$HB*5kYhVp1}vOp_2f+kLIX zY^_D7b5&iDqw{1xP-jM+9z8nShr>AJbTt>D$nVNq=XU%7cC=D} zv`Eu`buvV+waDdFI#_8WRT&nx5X0r^5}~tDF!~i~HWH>^N0sEiF`t=^U0gb@t~{JW zrp8jgY{&@k5An@b6cir-BTBO;C5uaM)lnRy7RN@_1qJ9&xQ&5UyuGg1R=KNd#6jmkJ`o+&L<+Z`A{wo0u5Id2AP_nMiETzhX0U4w3B22I8DKZ1{(}bU| zv^WZ>4LzGNk;Y=rqDJGpBx^OAJ-}r`Z0qCNoMPi zFl7G6Xh)pFg7Ice92g+!a2BJ&588Hm$6)D87h3Jd{PQxtEun?K+dLhBLEp}Xd!1yv z%oI;jG`R-4y6At1xqcWj3QdiT`b`;Coi$X=%28Tky9tp_1DWJ!(lzUtm-u)xGfdtp zc1~;>s6FBzuH5_lg)qc{5kebwiaDQ_a% zR5G@D0;3f~ci9w?`v_DeIqH1%;L44pf}iR#R)Wq}g6Xp0S}JGWqC2 zW|NfRMLA_P8d(G4X%;GB70lg(nNlbUMP%Ff%i}6lijOPtthmeiV1A^}>>gLERb&Ir z&A42USss~<6qU$&o}Z1>@^x#0jrco- zHzf%zMN#T(EOIJ7!)pbi9^Fp8G zEq9dSAg~T~=4Y`FQq>`9ci3m4IxC9Oedy1X#xW@F`|pN+xxx6K>$So)tQx5PNTuo*f%WUt@t{F0!TIiJY>&R0g%;z3 z7FbM|_+Dl7fARGtRrAnZe?YC$ZRX3J(itkCAqLzlUZ67r(mF@SL5p2b%BURwMNgrG z`;EzP+soOdYh)V~R*q#eZdLZi8@1J&)^?SqNy0+3#NmK}!Q7(3{|L_OT<-El-@4g$ z24wR(S4mrQNhdpK3kwA`c{m!}`!S3=IX(tdVIaYyxpRla+y!MNvl9A~P0+8&6~Kp} z$Yj>&sA{npa69kyWg2!Sgkp~B9945Or+O>5ngDaGAam>>+cI_Ly_VA$_i}p8_yEWV@`8Yn5Jm_TG<0+lC>2;Fc)2Q%s zkRj<$uVkkGy?l==k)kU%yd|xj zJIq3xRMZ4Wbgd%*s-Pd8F(95G>x%F)k6JH_zh-i9ly+$I(Sm{ko%H!zX#VCcz89*V zH_TN*1q`SgO)XhjSOB5J0Tk&$t>`+@IJXM!ZkhH#Ku3&6y}!U1jJ4}iw;I@GNHyB| zTH0$Umv}jp!WRlmh_<)4Y5M1&=(_hQOg?7F_keay3kkfD%u&aIBIZ!8ZhTCPrn0iK z>BySuZi}Yr0I*3S=Sa@0$A*wpTyt9V;7O+eTCDx&SZ0J1=IQNr#AK->WZcE%@mf9+nB?=VqRjKikk=dQaAk$8T3a@NaNuf_v{8ld8g6*xOT09hM&m2jC?J=!wxuhMM0A-BNR zI?kl-6P^two&K{YM6%^lz^tYjf1P|1bt&Y}fEgbEJF5V*$Ix)}R+Ibjp&V!%wCK{R z#jS-(#Q(P2L!zV%7J#F1TJpkbOX+~EG}QE82+a^ zj1YNyol>a{WxQv<-J*%k%P49GcVGQ@QxC-dKhk)v~O#X_Eo3n1!E7oT~?1ugW}QnXqv zW61#Y8a1d8%VSJDK1fV_bJ70dIUkA11>2GUzsCXiH>Ene7V|MRai)uI?#mETmln7w zcA`2MQQY2I_t(RjV0BbA(2)Vq=%nRg$Ukf4-}m?3nsZZHf*(e;pQ_au1-5E2gGuQB zeN5ULRRam|MZ;yM%62XcJ`u6@KAc{I4^$O_^aFqca1Q=hWGmCDmZfHC!~Vpeo)2P+ z^%*ci*CeVy2nIRs)VpGxeP5+gP*m$dgK8Rp+PVPbTdxsP2leDW%SAJncs4h&uOw;9n%8cXMhN>EBEqhLx2BvC?fCV z2w!dsO>8v=R9`ae)Ja4(b3}7Lt~D-fE}?W*fN}s9T}*f8t0kxH{4pw3h%pa9!?A1j zQcagr`gC_oR5G_#)Vr;G#IS^MVM?PPv&^f-c2aYnG8| zkm_Q>0`k?3Z^!Fb`%Z@F0{_`IhW(HT2O6(8bRZBknsLL|ns2INq_e+c3Vk+VFxGKwvAVjohM zQn2sj`vyADfcAY8{>;hrs>U)(pHxkg{1GTshl8Kq(TXds*?H9peKpjm%{Nt~^nsRS zdn&*8u~oPzNtvt3mjme~D6cI44zsJwE=qg+JiAb2jjEICmLodhSfRt1elG>AlgwE- zOl49uv7?T*lg=9kx@IUI^fOV&xne!M*&2+@QuWY#qJ*b)8>Zo z{>B(FM6B%b)Z zH!WtfcTP5${Sl0R z;Ff^iR;dUE1U8kANi#Mv)GncVM`Pe84DdN?cKYOynm6IUzq3kRR*qf6i@@b5^2~b4 z{R>(~Bgx319;&l@B!>0nNU+ANP6Cbspwb`SJVRVH?58C@}a}T$F zXi45uVXry#4Jm2|Ami1Un}8lro_rAtX+#hHhB<&fl|T?LQjpm7ke`1SkTgRA0}(*k zt&k|XjCYW{b`W+FXmq@EX(m`riNLxzIu`q-4PkjrJ_LB7RX>t1a#evd(-H=AI!GK; zdBMrKDhH8h&~=E^BMGqdNhDX$D$v?AN;w?w^eHAwEK@Dpz5xM^V6f}|#&*hIBVFkX z+I8Jti?hJ#JGyGd&bPb+BGy(`!Ww8BW>cVN?fz~ zHtAITeMH(kHo?Z)tE(Uy0PSU91u+6bKp_bNY5XLpT7%xNd{6b1B0!e{O*H?y$8SFh zC^Tn$(9EjQ})4OTIXl>`LQn7nLLKN1D?grqDlr)MGjH<%0OBc^>+x zfiWGH;g)%TU?L+kWgu5P7xKfTk z02O(C5LgFm44tux<}Q&#pkKBRh!Fr=dlt}!b1`d`gzO6UrWa4fIH_#n@gusz#yw>c zjF|#)QorAYHEIV9D-OUgkHI!${O`sqe_P|rj|e|C)8EAYSzlkrJHXLDe$*9U0HYSL z{Xj)mK)@Sd@8C>;z*?Xjs7Zl-9vou{?>MPa=u^SlfLlNRNH$les9fCl&~eeju6qlc z;k-*4&kB;{?`i;sVABk%#4c%p4GriQPA*TZL!+ZL7TW;#ApUMG*smfQfLT9YkzV?g zTDHqW<}?}i87APEeq+c&!K)=FQ{8*a*ujRhb1$ClTqFZ;f^NNeYgZRk$`2agSqB06 zl7PU75sw#WR#55!>g(v4W6x&I$HKIg?+Ohm8Ssw16<+wsd5Gkv?3&KbjEU+k(WX)U zgs5-du4&JL*1)CwpaGeVvU1<_G+?{^%*Y6A0RlkN4k0S5`NhSg10LG<9Ea?qGS2Yp z$hu;g6a4A`q+?0>5cod~$%oZd?-Qu2<+$1lm2Q(r{iOuZ@WiTC4+^J`2g38op%{Kk zbs#K2gI)><7E7zo1+N_hWDifRT7y$wzqfBBKBPIikrAztIP`QTQmx6$x8HSDPF}uS zFs@@&WtCRxy^@TXab>dz6bd-4mBw0ls^4l!HemI}T* z?%&Gw5eoagiGM3hjqD6dVmqQ}T&t`tYfrmzh*y_rzb!PjyNYg(72>N@`lEwwJ+fT8 z^PARs+`&OE@|8qSdQS|U*k_n)<^_udFpz!V`g%YzQqj{&q$i7riW(aS zEh`76t)shp9w>s|&;EZ1Lm{Y_~Ey0ep2f|{cXE)!PIud%;2re(KYy%KRsECv_ z+C79bZZa<6nG^zN#bJO&x0r~?MSE>bKR>GE#E_KP_rP%=?CtH5ssybn5tq29m|&t(O{Rg;8?u^1$k6Mt=ra!3O1s+IWhTMys|7P^zTnSgHV6dWj<@|jCVBt4H_jb{bA zdZ{4x>2s>!ZnfL)7Be@;UFb`kv7U!S_@pA!vtbuAme*lD(07yNYorK`RxajxJ(h5{YWd#Bp; zq`}dhZ-3{P^JniW5Kxx{Tt$3HsW61y+}Y77HVZ`qy#{d&vmW3VBP;HO^RGT41p3wHEuunn z(*_4l{@GoN&LH3}-`vE^1QhJ9;}>xU(`XgzRj8)uR}D(R=LTcZ+Xng$gUoZj@NdFR_hx z)O-6Ogl{fP=B0H|8=GNY=(qHCw}l#WF(#cO+Iw`<#%Jn!Qt-O(AO~-6&StR zSC&g)WAryZ0mrkPLRUqar{Z%$0-bilQ!I^`M{#W}WNyB^ISVxd9qC=rL?R*r=zZ@q z0UBQcNFQ)TRw1QvS*ih)X&hRT!U)Yg(?vyy5HwF9*GC+$l*epbN{ZH3wXuZ?o!Uci z1U|wQ^Vp2ie?+3<#w8zwH{VblRlMV>_44TJkq54wJ&1`%C{BX?Jel34GtYUWL*4zj zJv;U4I#e~+XI?hx5?|DAjsY^1v3n05@SA=F!Fm_y#{@)8w?hG&u(7!rH2jz(^Z;Pc zj1dsL0OdLqiR83yaeZT~T-6+fAIU@V7e~+jqt6)9l!(;OG$D=5Qcf>FrS&proX3$M zhDq_}DojzQ%4qPMvszn2zgRp3s-ch>yX!v4sK};t%=b?+)ABP({ahw$p;|DYhf+#F z#c6GQL~IjK$w(A&w*Wf9KX&Se!ixj=uc^veKniJXxws&}4@;+3iJh|!4adriDmB|> z{3t&r-l=t=+Yf=fk+J<7rJWwSs8f@L#eU|kU_GUeA=ra5>AVfqZ77RmZ~V{fjZbPU zfBY~JXg2_z%f;ZSwYrv;d6FyT-MdTsJtGC+@atDN7=!Qv@Cqc20OSOcHYYl28g~m@ z!*Py86HPW|TT7&7^DCvfB-=cpu&{?r(TR*ncK11XGlXDyb6HZSM`rc%yBZ3+D@wfM zX1KDDAkhD55+8`dC``ZS7r}rDnb40ucn81@?d`o>^D=`KSymM|+`@La)fGTf+!#EM z_7RXdmhq=6Ch4(SEDx;?B>pxxH}9;~Tgy{+`RNUuA8je4+evNh$XK4J$6zf(g0Ur7 z3tYf;1TJKq21vsni=lejRj_!7;gAd3HWiSIECSg;-N}Djj*N zqm-`K=;&hN;IPa5I=AP1`FODWo((^1G`&#N;IuV{%h7$?5ZrSaI^(3!OI{j0epANy zbj=|k(9)%Bb1x4;t%>9V6n9UcLve2U>*C-XM{vcvlR0b-fnr7&0`A98&MH*5>?0>T=g)QXC(FqjS6)fjR`A6q+Y!Jfc4 zWE&h^@B$~^OC=%Rr6qSn`PhXv24--S(tEWBZJVV8+N9j^^4TA=MK8{KB~>muXd_O0 zI}~fNLpvy^2W&wRl`CJdz#yD~hZE0renMk4$iS4xz{R>)2wQ{r&&YPT+Z9MuKts6I zNgz2GuJtjj0kmGG1&7vCc?ECQG+(KLAx3>^d-M6~Zm!ajQvvUuoUBy*%`DZe-&O7S z_=OH=2H0l!c-w@Csez>C2lUBr6gF?Q>+ib2<=?& zTpMI~Em4xX0a}vV#^jE~WiqC-2%=)|<5G8760-fbG2ShEC-i`uBg<|?Rx4w$0|R+) zF`goLyq|?M=`HobxJS!Y4luc5wQ`?f_iUd?tl>e5xpa#J(SL~F=#%qH%Km{LNaqGo z{uHp2_=zyMCFoIoN7pIT4+!;3*J2lBpG>hE`!ZE!dmnCykC%)rwKj9288al%ojQxKJy_`d`7l;m z#qkDR=NnNc9uYP-JM5a5;V<$Xf2({p+LBksd7Oot=XGRxF)KKqJb-gA>lbT#xNK2)f-Ybw>;8v5sGqMgR?RUPE>Ib51})e~GDvQ2?nU*%8ysrNRT{E4 zDR53Ek%Q?+`daZ(x=c(EF$;2EbQwPN1))*kJ0b~4SeT(0AMSXXXLqw@6md65GEJoWd={thFMWBvyMgRC+U^VSD+QW*4 z9q><=%+BmMul_jq*mC=CZiQbgA{B9m9G9MqvZj$YS~$2oF$>J8+VZ`FM)4$ESx{xl zo0v{BF$O3qeK5eSpbxpvLL071-Ffu!B~rIlAAC?Itnb1jST5@4#756A{VQ_Wc#T|` zqQno_GFTslx|{F7d|X1w+^D)w#hRe&>o<7+3)I$Xn~qj=I?Ce3C0(zD)n}hPoF|cf1&BRk*xwUm)w*jbMPn#BRzu zcg1>9p_Bq{y>^+9F|iq)Jk@c2oMz&m6s@0DBd==?x(0o{}dEAy{`( zyUMh*G{Brs1U=D+Cr8?@qL~S;|cT0OXyfNQ6$zmcx_kvZ_Xb=2>I;RFBjJ+=cmSh>%|lP2bo}IqtF+W z5Uzme;x6P4U{+MTYe9x@ZaV658))U>1(NHihzPzzI+RQRCG)EGljCqZsJYX;YHm(Y z*=2-;IDbed;afd}7v0+X$h{C>h7VQ0$HjrKSLpy{<6(Mhewj@@VVT1IiODqwokC^`B4nF%xb4 z&br(#8L>bPc0<=kQpo(Hsg7ZVk#SQvBdKXKg{jbEc8!+t)CFNsS#;&4^xG`S*#|Td zvIO`qur&Ww{Q<2bGCFV11St8z6#jdn~!Psv!}`9W52 zmtw#kK<*8=94(ZHfv9nFf4VN0f zisU^jMy9kRz8p>B!WJ#s1;f)S5o<9h7ODLEz*hgqbpm+6C!40blaM1;-Bv=!auG?7 z=m*DyQS8x5!6_}{EpULgdf)*}5JStcllz~V)QVDeb*Y1H!CHO(p5}@#r269-Z#eEx zT6A>owrH5S*9s~d{|CMeb73(S-y<#vG9p)U#(EqAm|)>N;wMk-AqPFA@A+02u)V!V zX6uLh36wH`6`d~H{eI9H`IXK$f>kVIz+WwyIs4keE-d&oe{-Xk^2;vcDowWc_NgeW z22e|TYDkOyOfHD=2ff5I%&gx*P~_K+7gCb1n%Pn`r5GQxd`eVcJusRHp$$1MJaIEF z$s(pceZS&s;&v@)XaEAiUilf#zDHzn2kKAkSJc+yG*%mGxnE**tf&gVETLGHD&sD4 z!Kb&--gIRv2(&mwVQ#mlyOtj&(0p*3QIY#b5F=_C1JH|2#GU^=YO*;~Jl& z0}XC9uKXUWWRVJe`Q!lSLZ@G}s_C9qQ2*3EbVb_4jS$E*3Jl!jS;Y||sCcWkg#-*q zzhL##c+~GM^0n3Kz@V{)Upw6K3LC%v2sR$#tXjC*sq>L=W-r2~j>z zE;{Ef74ziQx=g8hl|6F+Te|WuaRsmsc;!RG9zBscG=JH-lAQ2q%N7#fSnVcvg6~d? zzkf(B6@2fu@DJBa^_L9225|iXRT+B&PovHHStcfnNNC6Zts*TNV|AMnY>OrM+0v57 z@@XFR=T?$C$9D{g`8pElx(?@toSFZNl%JRexxi z=?@OQeuuKJR^xT8-h&gw7s)RN6|Q53Y7sm5zJ{!eufmNxde)MkPw|Ijsiy2wIYz3| zMTb=zJRN{MtOU=dfsf>SdhFA$^()Y%^J~v9{?%V8xjn;SDdqf9Cginyn*CmV&Lnw} zl`bRq$x?l&YX<`r)xz+{-NfgRIw~wm*Wppgw4Fu$%)qC);$Lh&qlC9^`Q3}BaWnIj zj{~&W6lIk@S^HQ33)ghEX@b+$+S5{Q73yCg*H+f~8vnHL(x>(?iK%GTjLP_#bYTef(Ik2_xkECju z6ZPcF0ay9ma>z2<@AdQ8-Qf#Slg*s1qfu4LjYiawvgtwp%B(ChF|ncD_HM7QrQ8H` zoXiq~62COrpX%SjLbU}>)A-$`BAHT#&Cj2RULgI5fq%tz?;#aZhb^4oC3+dX%X}he zcplpPaf&7tO&@E{kh&1(M#I;adC&oZcB)2?eFi$Wa&B^Pn`;QMJZ=Yu_g~5LL)YWq zie8O(cc~1WN^MG%cHmjU+uBd%qykib4tNB^+4aO4*_C%5r0i0c5PjCmMgSk|X>z z7b@`6cMl$Ph;B~5u|hdC@hs9zR5Fb!(qebWkh7}7SK-%%ffJ^|)IWTbmsXCe;gH%r zFzeSz8)*8xs5VbhBV2GNiz8d4bC_Q{2b(LlgRgo_fqJZ70GH%Q(fn;e-S{}2=P7ky z!P{?*OzPt*zpAot4%hh0O6G-=*{ZpHs5H&Yw*6^h_KhVs9^M(N0jw;Nv}wr7b~~){ zSff?x+w$*q1`M*HN6t4t{|PnA$Q)J9&+3=s)z6>d$1ASM(KWdUVBpz#JiS@GfR%8_0CQ>x1PP zkr(`CceW8p@8y!3HIZI*C1)c6zm=acdP(mMpAmP#FVkbBgHC$s(30wc;Pte6iN2$fZwg!RQpd>9P)T0)m z8gn!8ad!)Et|@I4hn}WB10^!zGXf*qxC)%8RUz0@mEDvBZe2rb~cyC8AS^vupL0Kzdpd zr?nQPGF9od?t{^fLFX1hbMom@ab2W1F>zJ?Gc369>U9mVB1976i0ut&5C$toB*siN8Bg^n^jHE5_cYB79JIXsd+qB&#vKG$Zd-X6cC>h(qt^sm zo=oA4?P=5Uu5gO5?nQ0cX#;zBczB8<5bp%taD;Tc(;kPZ80}lhA6`vj)=<^9x|0#I zE+E=f>vI)gE_KWAyg;sIv$UPWTX^Lf!RFK~X*aOxjTkJaYf6MIQt~f^sDpe`LtuA2 z;(3JM8yfn<&4!nQ7KCZiWH5J->K@mE}VS z-GC8G#zpG%dk&sv zP59p?joDX@$lFp|0YTFJ>}{xyO~~u`;U}@N&3{X(3=DtuDu<8Wo9tvykB_dsne^fu z;BOxr0YUfV;{c(=kAs{o4YSwYv_6f?2^==&IutO*Zt^tao_kk_ zc0=fNc^0GVpx|cN5Qq&6NIcwc$@BkW(w=pATvcMadozYdWap!BfrvG`O_{On%ytsX zIOgiw5~P0minqM)%63kM%Q(i7`&;FF7z3KUS{Tg39naV*H(e9+FQeX1MPEzggq-@- z5MAE{1_y1~5Lkk3E&BYRY1Z73qLMuZ_M_%;asfP7en^$QMTjC}pzSaz%GDr=RzF~r zvL3Pg!tLuIj%7!^?l{VAKkP_qn5ELD%0O}b|q zEhdNE)JRAG4?8RU2l3gxbna^!)dEic&9S|<0upB&xe#>uA}!?=?~%CeUEYUq2ln_0 zrrAn~?bS(NS;P3dR)w1MZbs`K)Z*KqSt7S7mem<3SPH4Rw_tq*be1qT_FdY+E*$ft~sJ3`LQ9X=r&uta4X; z51TqprD8P|tH#vZHTSkote}$QVvamt6bW{4KTU+$B7A0ok(^2vGVWOGwwgb!5;$L& zbIxR}#O4%z)~H(NRDM;PL+e8rcstlz;w>b49L3r0ZN0+j^ui?2p&`&e&nsM6V#40& zUoHK8j)R400z60lx?_a4)$P#hn5)F~`O2AKzi&(9i4;_1WdAGx8#W#F=V+f33lEo` z*ghmOyiZ)bab4sDR$C^zy7ooJnd`>NJj})JtzYfhTX^Hgfx@|ODk{DM7K6I|hH+5M z`^b8p)dGo|8ESrh>Zx&v=L0d%KZ^YlRh&~rkA?1SGrAK(u~sdWhVY$(hcDvF$G6bJ z8WPddcV8y(KDO)lQTN`SIC}9bFt)WU)C;$fB3c~GCQ=(gf!7wd72 zIky6+xEmbmBJxY=MrygIMel}Zpj#-lCt3eW9AQ)CYeyBNl;)ZsW-cv_BC4{G43n*v z@4Xk!BfcUSgp?BPemXfCd=xu8I9~kryxNnoB3)6=CQ-wRFD6H@D#lE|eZlN52_QDJ zJ%gl@F7}&E!T?o)W-MvYR{{(@}pnAKEtLf zI0ENoU3bPzcxx50hugd1P-VcUW$R_E-+>Pb@v_@*X@vqxCkgAe^qD-G_(}6c7wxhQ zya;K7;qPp;|0;qIuJ{JW_%ZdS-VbJ2DsJRp27#r9EwZDwaJVie?)Q6O0n;|AUT|}Y zN9mg7yVkn9NFwc|B|jZINpK3aKkac}2u}^-gk=lBla81CW+P8Ug?_371eNJyO=So} zFa&L^MAeLT)fuTXxRtR8;TTp9j*ezmKEs%JTr&uLRg4s~i?TnA)z5Pp2Y#OfCE94Qt33c5JNHS6coFfk4M}<8`iM zmbA={fw1V74p3lMWT0Q!rw961)BhevCM~Q{@%rgp@BW9c>it&Z8aoj8dQe;i5u9#B zn4Gpl!@A(`nCO0KJHlgSe8%TjW@0z1-qQyu_4%pAfHu5UOmSMa zi-(nZRc#qjW;}cnAY?NFx*M-045>2pIC!O0NfRK;6}~hPTrC@ItYfi*bf-ec%2<*2 zJwA7%PVr9Zep=0Z6Fx0Le6Db$=!pK}i%t1{HWX)Y{1sgxwt-<(ue&DGE$U2H(NJ_f zw}ww5rb3_c38+>5pVh^RwdBNhqA<^V{B{y1&DOBr$c2HeVmHz&e9dyFYU3d*I~@d} z7)OUCDz#I2ZN{S0F9ud|s5fr@L{CxZb#`&CP$?A+E2@7?CMuWElLxHQss^@{KX|^% zqo2h)67%-0bxtgf?|xIpXoiq?1%5G=pOb0C5I{cz?IQ6UH+t_&g1B>;bHbdb#Z6W zA{!I?971HvbmjPKOs)@W8$ISiiuT^T$WWo@;+Fjk=fnp9+9rs1Ndq?9RV9>Kxb)XI z3^dAbEsh=z%L>Q( z@aFRe%q58q9I1Wwm&5$#25U?u{f_2f&NVtRPmDXgE5hhY#Y7U-vL5&0f1v`qZdh7= z1j*eXDeqYdcyYYDoribE=ICkfQFVFQD8BM8IY~}krn*`y?>=*SC>-3)nH~AJJi_Z-=h zP);|fMBi)zqMtyQpE{E@68xNkhMJGdnV!WtZv9lionk5U_t+LkTrXVLQd;qN$IS8 zrTAnuJw{M>V%CS;w{+!3oCma>?f6U+$uG}^R#ZiE53fKWHSdhfP-}HrivWEPARU@# zl5-QuP<`-$0vzd?;qoC&>#b|qy+x4w^ku41qYQ9sFunBtM4R(U+}LHE(4pnb?a7HG zW%0=B@1TNUPnr=jCZ_iv<h&vv0HADR zp{AtFv5VWr!l9>`y$UMl4MjCPQ5oI-TP-jis*s&X$aO>i>FE*9z6N} zua{@pU0+UL$G~sV5|ya(su`7rcD7EE(}emzB5si%t|XR=cWt&=pH4+54x8DeJl;B4 zz+>*P@Kb#3tiI32R%{YERH$E6J03AP-9jm>7QQyFWU8{l^4n><&%(mxgI-1T%rY@R0Z|)wGP-fXc$o>Y9|Nx zKq51E%0Rz_3jcb%n$rVytW~$Xw~TKvrwU(K@5xkqX>fAhtAt#+eVeW{Olwnnja(v) zKZY84IniSm1-aggIeGKxL{=%*oWOhexwlNi>@j)M{=#jV8)=b@@_9}j6$~fc$=lMO zzb)agJ)HBw=DoI_(Q#^a7EED{*&XfzGp!-PqY?P9olmpW4-N~yxzl}L<$R4DTjYtz;l$>qE!qWbY-KF3Zo z&krYRgAWhEw1bCq63k2C>F3TvqSc2*c!|dp4|rK$aU7MHyy_#INZC6I?gsAwaxNpy zAA7#)KLEmMorn{D3k(7(X?z>Ra&)YW0Bq?xQ%#qpsH4E$uq`#`%1#ja-ZGPrE<)bK zc)frp^lNw2%5cAFt4hPs(A2&3V2$;AKOS!#_Q5fCv~y&AOs!CZY|YkQB6VuvOcGul z4(;tnbQ-!;k+CGeTAY}J86>Jj53>#9OZh9TZF{G2?CI)1cQQyPioy`HkU4JvTgwqAVZkh>9 z@3q&d>YU}(r_qWxR6wSlvQ}Xjq?9!m$of@ZlqJXisiF>J+0FrlMG2c|rW971q5@J_ zzqH8YRapsrd|58)v|^h?yV-`kaO@R#5U=m{o#^BHmBmw(XlweVG#~Wg>IwZ1f7;sZ zBcVMA6T(u$J&|kELDg8MlloQodPEn zmtVbMV$yPyA(5l$W&7@y^Gq4(5Lf3OkN1D0(y1PEx%t?QPNC!oe&J zj3`6p=>fd8e)#UVnO%{K$n1DTjFYzp`N%Mla|L8gJ|4)*!4e2JwVrqRt^6D4YN7wN zP0fR?r4Wt87jxoCBVo+vb0Q~F*sJuP`TmX-p)l&07XPcI57{&%W0zl01N|3!+mDmdM>JWVJm8FTd zvw2#DX}M{BQcd+#-e7h@OICJHDdF0lm5YG9+~WX%i{0ylhKOQb+G<9Nr#7XjX!1@) z4&jnSoBxYI`9FQ~GmT_*6o~OSbqWT@V9n0!1D7?-KGb}Xe#_skk{29gaVm&XM|nt> zE?TRxnQJ4Frx*~Ht{9S9?T}vok2pENzyH^O^8bBk`+o`92KWD;V{?CYZ<&nj+*KLL z=c@k`&yOD(1&L@rks0L73kRgx;?b*E*H z(#-#Sd3#%m<}ccP^J|XPLIj?#%u`Nwm*(o=m%H}9B0$sjcmS)hTASyQD+u?k?$&mJpCsBm`+T5>g@{B_$yUf|PWNfRqx_(kTeiA|UbR z-1px8?lln3+57+JpIK|on)5OOqyGz5JO#pwc@+%}jsJ1tZ8WqiAx?^lx=-{~6&Tc% z6-D^PMMSs-c=*xKI1;=Pnl!G-6GpUkswy!PRaaDC<{9bbDGYsKYNsetCT=g%@>pYB zai6h>zt1^&gH(yeD*OWd2ljYK4o8SdbWL9D^CttCST^=kQ?7`l;MPEhbf%GjUke2y zV5*3teL9Pipj@|{#`Z{zDxbf2{nsN$CQYq>^@%2x89^mRzw41wJJvGJ`wxk4-Zl6} z_=fn6sh~kjUASbDfv57Z!Q|Us^l(>hX`?lYm_)mak0v-6*Y3NLJY_EtGwM=T@5k)# z-{{Rh=-UbWkSex3brSz!R-kDJOCX9~6d8Fz@`>Goifrd?Hsg&4s<8n(Iv2F!y@s77 zq(dgGYS`D}ihSSSOciGIGgnCu8M|x?93$yaT>YgjD!td$fU~Xg8>&f9TG2E@~vBaYK`)~Qj zrf^Jf0^i*HNa3J3JG&@*&z-r)P5h~<1w%QWE1$ZR$Wc){BT4kIyyRJje?9UOVXQ1M&@Fy#JHiMVYbQp za<7}dw6t`O!zJ$K*+ca4u`!EgpM-T{M8GXKH`l|;wdTo_CnFEH?~*@!_>emG`9z?G zwsu*0ImO3E5QJzLdvs`xxRE>6(c$6YrKQ|KPeVK8yLUtpm-O+Qb-Tew%a3TQp6!We zHzXtsS6Fu(YdUvbWZ74maEM~8z8YBX?Pu<|{49MeLT||5dC}_VC}(G96+5)Su}DVU zw{wd*DL($w2`^Puan3N6DFI1#9UA1$Hhj+{5R8=MnTSZ~eP> zqeR401t~-_kies@DT}733Cr@hHgCiIk$789GCm`Ig+ zot8#Lin{XOzxO@aUnOEz5%SM^_3G96zrPsQue-%MJa|CZpOTzB`_ZmHPdO%?o6E$) zBJg;3@zW={vR4m|e+UQ)Dk>;6dhfLQ|J_a#bcntnKz@vll2TK{*DUk6sClHNvm%$o zB_y_I8b;>kTF3STa66uEO;$enscpl;#igm6lwVwYTTIO7@AmA9#~LdutMz{uCZnn8 z6rJQ#F4K=nY3w9Mfq^Y?adA0zXZ!uU=FCcFqKqr6s~EVH!IvA>RZ~$>QTX`y-{x@8 z&=5I_i6GhV8)%VKo!({-2QtN#{%zBYFMD$_CdyN!rVrx#&nS6HOG}@OMmRewC@Z^E zrhidMdh>jHMnP3^=nJ0X0N2WDl!&X6YFti}x2}pro@mg>pA(h$H)WRuBMDC>PVlos z_7oECaupU9rn+|}Unpi?3cw{Kv^CpQhlGS&mDxYsxGPV=o=r`XWS-V#k9qIsi`Su)t4)H+iuo; zltDp3*KXj71)Yh7wi61K=I1{+J=~xXd9(oktd${)Tr~S0^b89zQd3i>aNny%9`q8I zE#Rlt*Nb6bM0CYaB#K(s^n~M3^t96<2qGW;h4c1p`)}zrz6bUmZV@=4?IvwO=UY=% zCB?;NbvHv^zI@3s(t|II(`BpR^`>upU_U6ZB znt;PUM20I9H+;{QB=>j;L!bH7dfcZRZ(NbApKI|?Y!Vk2pKbJ7PVcay1uVf_SL>h^wH!l(oK)VV^~;NMBq{} zv9te$><~dfpOO?%W}TXrwz0N$bawKDX#NXx*m$`WviKRjS=!}?5Dg8@?POTj5jZZd zmU-X2dE@2f6+_Ow$vLXKJkPCQBu_9v&OV|=zB?Jl&# z^M9G~b%+%rqgqF_Ctq|2HezWnbtDI1bl=Z0=1n+vD_i{dQ6NvC@#RZx4IMtGhYtxT z`GR|z6VuXqo33&2@|Nf1pt)Y|b`bd3t`Ft<1QbGY5EM*oCcsQpyshDCWAj;*U)|GF zNW6Y|Yb)UF*nR)*eSx%R&z`kioN~^6`}PeF!NWWMT{o{3@H7ISP64x_vGK+zz5 zW8>px7EMR%!*4qyv$N-`okoO&jvwSoc>N+xn8RdT+1P0C|NFSC{K?(BBar|8ZcUL; zP();xEdAr|v#**cv(Uib784f_4+}fop3T7I=S%zg@9)lFrg$P|w~~s=^N0wX!RrC* zLkOdXo2rq~(dhfTZ&hNM1dc0AKK$L8$3RDiAH}5+`8q$}MkXH%S;E7udw6*7)3a+K z(KYCBkD-z!My30I|FY9B-{$2-)jG(iyN{KWlr%MQ#XYA>?}X0Oz_pr9Z*IT;DKoV^0Oe6`aXZJoNWm6lT8_RDTiHGbI0__$?* z$11GC?sf-hiY@(k&&4h$X}}&^YT(IK>R%s7KcXTcYqH5IitpYw zO%@(Se*VG!WFKhx$Ni}QcWcpl_Glafg1jt5}zqK=C6-uh4&-MhE>^QWq3p-y%X z>}VMamk{;0iHSPna?6o-S{d#6I% z0ISvJv5LJzeiJ`J5s^s|zW*s$F#>;YJ0Kw;!5t3r)2FS-rHsNI-GYjqo;!IyBo|3g zwnoRs8s6+rR@%}_`S98GCCyy!hr3SKx||*FHB&jeZES2PVd655mfov_oa68BzfXHR z+1bg-_juQuo}S*$&Q3m+IIp!eXz_D+T3VXVL{HB;BoL(ds({Y+j1$PQWrbgn(bz3dV4sQFw+Pclk(IDQer%ph77Z1 z0;Qx7DKj_3&Th1h-h(D0g-6l&O{~31f7{Ess9psJR`=~onB<{>ovda^|9CGB_;Rj9@7nvjgCrr ztY8|uMKtd(EZon_NJx;U6@3pO5Bd1< zBL%M|sR0*m2jBiHTs%DF;>4kqCf!l!M_)2$6z@h0V3paXiSIQvS5Mdr6hfNLV68m~ z3Foim;1pTsy}M*0GPq4GX_Qy8Q3Mav=(QO+@i$g$@>DRkE17WVN>SsL18L>*50|vF z5MNUj)`}$~PZ+`o!$Yd8<6{x-bOEwbvrzoAD4vM79jZgFL5}a(sqNzq@ml>CpD-4e z=eg*_o0Bu@>E@DTN=k~7q=-n$0EvR%*)ji|o4Y%s0-v9sUnkwp zTuXmOwirKug5$yVc01n|tg(_efC^aL5F-v&)*72G?7XIj6FmD>2>H_fYQF-uJtrq; z;^4mr0O3{}F;@=ck3TB=nzt@3FGrn=Vdk#(r&)*e%dd*ml15Dm}Py3owuQBqUu zovLz(+77;QP30x+)GuXh4=7`@muHFVaPZ9TuU6&Uw#N6NC?@!@oZiM2z5>NH4Bxq_-_L9pc-FmpIvy;oR`Sm*X zt=Hj*|HYYj!{*u=+u3QSDDi~}*SL3i!JP{=#>?xdyc~e4z61FGBw7WnLsnA0Q$bC5 z^yk-@lISIgLx-tE)~%JBIfAxNhH5nqM?-kKHr9agJf5kq^?5`^_24^BEN%Fj?_2Ka zp{Tp-pININc+DDV8)6j$|1q)_)S5hJK%`WwdzuJ(3S*TDb91d798^84K7Q<}dskRU z;!?&fvf}T~y4^cC$UY~Mk&$s=)Vzd!MTjO+PhVev)z0WP7Z<6FmD2g?A7<~~e-GWh zfB(+I!=oh1%4)Z_)OG9DE$-Q#jt2sR*|IvG|Bilh7TuSciX>w0v0&;Ko`Ou-V}a~D zcQJ8t#$?|01_SQTs#}HTK4%*NZnNW}+ zRp6OVFLy!WYd-6c)KrS$z>LAUfZT++>rFn5wB$6uqjF@m{_Rt>W@JnQa$>DzP*xr- zzy?YZNWZQige2&-x2NK0e2%2};fmVeygwywh1ZIW^`;RR*xM z7z%k*FoEj**_odo8~gLUKqGHw^%f^5Ge%qwdR5p$A8lt%4K@V@LZQ07pHg>8J~lS? z_K&xHq&*a) z+@h(LtR}OK0vp{4ab&>5Q(D1YbJJDp{Yh+bj3_Hd9?W{&kq!!bj)=4W`MpPX=*7?F zA%~G5z(Yet<(?JCoZaYmv_<8Mb5s0|(!jhXL-tQ#ln)&p7igLp?lS$(T$*(paRxwg zy1RI7PW#Rsz+C2gF+u02bW%RMsa8RZ1aqx{5D(MN&WJO>W{)RNXrz29GBY#dRT-nR zmeXS$7VGh6++9i)F!|Fo_iu3Cy?fW!*H^EM3!6Nq#_!KB0MiQ=i|AE78ht%I42{x$ zhmJ>9 z?rjz`)Y09#m0uWfcsMkao2{Cju4}!BEWVLSN{zYT{K9pk+>*(U`PIKOkvEwi@~2|S zLgMdob$4}HQ$EKS6{E#Z2ypoNn%}&)l#GlFnVp@5{di8;70Ord-M}0x*O%bKUcrYCAM)~GgF?OU>g(6Dxw$YnD_e6h+SuAEDk>sTW$)j==g0`H zPw`y)3J7wbdfmNuo@O5Fggu-yTm*vc6V6-&+K?~5*t%jz>UIeFoe#Y4o5XG>H`;c; zWK?`k$c(<4X{Sn^>*!Z#Y|?J}bfsiL8?eRIt5-Yg>2rU>{@B{C2wnY_6?aibMkgD^ zW2xYODc2vQvi#-k1#+IS;Gyts(?x}6Q+sY{_*WL@%BTo1+RnA~kdTnCUp1T0I|yWV z=MwJt&kPO8(LVmn$0Z_i)bFQul7Tf}f8}RJUr}HzrxVfqqb5@9u5aIdpB((WxVV7T zX(jc4pF9zLcy{~d?k~LchRgruo9cv#I)0zsEN+Um}mM>Z+;^%U@z)Yu(-5H^)nt zV{!N>UkE=Oe?cYqT$Gn!Lan5+Q9^J0IbuyIo>(0njXgomUAE5d-l@iwpP&D9dq({J zCp4P}fT+zI5`Bd;TnbHH2*0yl=2w^f0#+EzQxLerf`L|TMs&aHOu@cILe=E7Rsp(%jBK)wk zUiIy4u5Nszgubz=(WPPjXFdb7kb!JPeggD4jr3@dM@m+zDxJw{4?s#%D)5E1_lOiWRbZ%3mR-}>^vRvmn9sA zRgB7}rluIED+20|41!#o0pLb~(w$RZsOX@HT)lR!SI6AgI5mK%%ws=9NJuCtDT&ZR zLqnsC*S_xY>;pSHsuzP@v|T=r@StY8uk;Y@Kkoy{M8O#$f7=FWpT06Yjd1j znqxjV$0v&QAsMV$*|oU~doN?mNHpT2dEBa?JUkw}Vgg}tMr@$cWUadB79Qj3qW z9lnZ+Z(V+i-+YfZ%_12ZH}?9H>@>q%#CK?Vdb+>AgpSqVF%2p9udvbwa8E&=LOE64D|cKY#l*3GeNhc9OrCx87^7kCjji!;#lBG$bPy zI1WPiaF>fIzWjCCFDNP!a~=hXrQ$O6(GE7gy}i9tOI}`n8H7Y(XHx#p$s?+r#CqnJ zIp!y&L<$DCy+ABb!YT!Vh9AK^cc2xDL4c2qZPwtyilWvQHO^xVPkvr!_0Jo2484Kp zceqY8_ibQ6L{yYw*{}2JfAG%?xjyHEHnbt+KD7CZm%WNm0pPcmnouw%o963XO2D)KqX8GIF&`_9zgM)z~SnAG}_UGRI{zOF!rg!v9eSKd=afE$w47Ier z)fKia)_87w?@eSUnT2E=5f+A-remoe5YW7CxH66VA1|xML~(0#G0M|A>R~ndQrDTt zcbW+^A&rFo{{IkI-Nbo5zSkTKuPTLKSn6T$zrlb1^5waEa^=R=mfF4kw)=x`q=A3- z_@*|}vXPLH?YH%gl5(3qKMrr{B%5a}GzmK1WfZp(Aa2IPV0-`wu6i$479bb9$}yX< zij-kV&%K}@#0{@R6&#m3qe`1z!ZIY4UoyqV)h_lRST8K0QtvHy+w=Zg`$pq20Y}Ii z-*_lu(w|jDh?<*&Bl1k=sGqm3*=J8-D4>jVbmhSB_w^Oy8vw_cP%Ma~olw0**)X5D zn1ns=TLx=g4v(s_@n4YrsvHK{TsI?q`}d`W+%|3{vK}hoI2wylHm3C)N(~X7|0+pG zI$;51fw!G})iyRT`E(hO@=@T_g_*dbJdAe!B<1sW5Y(7eUNAI5{RerEwGn^=nWw79 z?y7I2}z8Uc^bwDV(?6A#p_|y>Ip0Aa2-PSQz@HLG|B7WKm{og_$cKdV|R2 zM(DGNWQve)_K9`9JxE_4KAl98H?=rl1R;~L5XIY@(tfn!9$``+-4;LVWXtSjeKmY1 zEg-P(&lM$BH;uh=;2v*91vsJ#RSO*2zvy}h-_Ap*Hs`xoE6`wY@uv2ds)F03TV#qKmouZI8-zU%@f;G#LqNJMxgbD zl{J6{N|GqP=s82dMIROOfnzsG& zf=It#Q(3udYKqDgbTMH@#%J|WnN?{M(PW%GHPz>5XZ7l)?$!cndU|?DO-+qLcBk=| zSQ>VYPLPm8Lqd9{oJCycH1X+4^!4=trFJJ{M@&F+>#>;AO=xU9g&Gn0SV2MI&K*oP zh6EExwQX&(z7J}GJud)F0Q(j6ebDh7Pr>LP94i8P8O%mQOwhJKw7U4?4{{M4i~WJ5 z#Kh&|v>L=~(`d0~8q{>2Xw z1+W$~2euX$MeFMvKV$~ zRlbJFSUp4&$aVf*m`@J5&h*{iNglwg{Xk|^9VESuj*ffAj7_brmQnL-oj(V&aS$3> zIy!0V&)4Vn`ufycRiiNhf`6>7UHefh==41wSl{1`kqGqydj|(-(@FUsy=dmWB_Z(x z_(#?bIsvWNC-3Z-tgKnkq4y4K_V)JRY(VI;=!ikx{v3|uJ0a`zoh9#7Ord9VbQGWg zQ2o(S17qVl5YUQ>)`8#x$Y7iwo}Zr|9E{tUss`!QgZp;a5HvGE8xnV0kfWo^s;;gM z3k%zvC{Ju-gQVRUi2SSFEnfkREz-i^I;f@q%s^2`y)!#I;F#pp)MZg1Hxm;R#>YQo z0*;5?suIj~OFUV7fg=5M5}xY-<9s&zWCKr=HsgUZdHpD4)*Wb(`EhBS%erfE;VCaKfjkcJ{cK=Fu9B+B&z-+ z$SEht$K>}v+B!Q6XbwDF*DJeTmq#OLk850XmC?Y^umD;cE0zFW%}s-d6poIL;^<`` z9}xjsk%Wzz`^FaX0xB1z0mbLIi~gMAt#JFD$}!}=etseuiR*BJ|Ni;2iq{P^05a4Q zkZhRB@amkAv0~YaW5uEO^tc^x3O9cL=3W|u6;V)BRF0Ali-^$4k}&M-$EW0DU}JmE zSyK_YM<-6~e(M)}%!{D0`HrT>M9isho zK5GRZpZa)aW1u4%sXSfNU%q^Sb4D8I3;G{gBbQhT6GH)SE-jj{O?DQ7XU&5ax|7HnRQn*8A@4p5A995br;xnZ&d6F&~O}l z{GiiAr;<$-H4Tj&WU4A6;FyPx4;C=QdkvJ@<)x*b`OJ{|`g$qI8!RkJcib=-Mz}xTNIW_q*MCd>;HcP9wuZ)>j?&1$}lG0HkBM%A!PrOdsEzl1@vuB^nIw!6x?Pk`9hSBd*T^EM28oF?Skd= z-&;~vQMoaZnX4GVW7Qh)ISdQnVxH70zwH-jXj%akfn^O?z$|?CuGa65vyRRnpxr1B z;gGj)m*1+!F)<-bme2s*ni4F#GvAZI486}*s1nfcZ}m1dG-SQp9B~wqCx8d?g2D~a zMa-PaW8vZEHneua(AnP32vWqau@cCa&@f&2@lgEHB%h>Y6ZGs~(uitz&J%#T^|7uF zj$VuJ0h@0#^b#PV{~R6ytta!e!tFrd&?v? z`l-CJ_AT@2x%cRdLvD`6qMI0?K5^fDmigtI)as<(lIcx!TB>AMpDyW{M$F!MpwebT zX1qVeVt4=k!s@CpY*CT!Nb_4p4hd|=up4H%E|R)9Bg|S z{`&O`8g0;me>hv*l^~Rl$8w(43rfW@qzJS_-zDe zCUsT^Gzc_W*Vfijl9DLlqNc8uz@m6=Ei5d2+!pfu`E%%(0pm_Tmrjh2uYk@$GdDXs z1sxqXGxJCzIxHDVk?FX$Bq_HvNonIo7#d3X$e>**o3cplQ)QM+;82-G&lp+lZ%3Fa7 zB$R3#PLsLJ1i!je{_%rjS7&sFhphEzXCC?U%dlD6aVRG^7_G95AQ;~jWO;Cw`1toF z-QqMZOWN{-8}uZtK({E;KQ$IEymDLyH(5ax8fwC%Wbx;4sMf{t2zhjU8c#w15(gY1 zh~iezE+C-bysii|(&9>MIKY3s!$X9E#dl?Y5eho_Qbn!`mq&%eX}#HMC#_~Xaj>GT zf~m)m1X`RXsNrx#2&bIV2z(<|6lp|ic;YB>DKVWva8=`HytgMZTEcEpi-pD!Ry{`N4x{izLHuWPFy5UrbQFAkS@~hG_l$xa3z0qpc(pnCp ze8=5t!a_m-)8O**^!(xDn^ure=H51Fcy%t*Z14VD z8CryGcQ8&)0<@aZIEhI)D1xwde*% znu?6<54dUq;;!*hlbKSfO{d?PKFmAXo+}W|xlh@5-lNuI&u(8uf>ce#YF)i7n)>kr z2+1&bj=VM!pLlq{`GkgIt92#ae8$B321&K&iKrzTJG%ok0DLkOax-ND8>d#<(LB-3 zWvL;x5?dBQ8b)IXJ;sk4HCS1XbarNG!5^x*#lc`<0aCHwk&^9~9DZ9}3dDGd6^@j2 zz%d^in+oDXWnt$VT~k@@!s|q1yK&P@--3nWt~)C`e@1MC*X_-)b4Ed7VJ{C4YG}P( z)OD#qZofALkb`CR*O1z2yb;CX!gWtgNi<9E1)llHiw*!KZ;z zfTqE$Bl&bI{(l3Li*SCiumU0M`jU59?2k62^1x2E+tbr4;iEvl=8Z6b7hk%%pj8EO zAm(L3X@NqeNJ{Ncs>np5z*zDx&0arB%_PIV0gk17G7rn26(=d}OoF1KD4SeXW@an@ zhtP-4&eVWk=6@SlNH2|;{eSTX;K;6>$tNK2YCRe)9;pEM584@Vn*)HvtMA{#BK{|s zpyhNNA8wG`TvyZ9CinD=k;~12wORAixA)8LkdCIiZAXw5^-+CtLpk$>g0>%#WZj1; zhZlqj;=OaSGtkx-r(r1t@j z=|>hpL6V&xQ&YdE>vTS9fNOMU@xNw)#2c{Wp!_&2EG$5*S5_iDplPyEtU=|dk1Lda zC|qzT%yCMs-}p=)sO$Kfif5Pq)M_;9V>4@YU{`uqb-v!49 z^!m1L?48-BzuXuI>uw|g(Kf$`$c6UimI>g4RPK8!&G@Dj_n)Pvranl$9-N;k=Dq~D z+~=OU`mf!^4tT;>7Q_HZ@&9X~4pkZ&7{J|uuLrKAl$6@_RuBi@sSi)Ye;(8wrsDP@2Dg&9AiVC3u!^OOh7MuaN zHMN%ti7G<3U*%p*#J?LV%BG17dCm2rS3&Dh=L2g^5u1;?BS@^o4I{(2F_EB6D;i(l z6Yz7veu9b2)Wqa)eK_>{bMa!4$1}&^d)aZf1KPc@Ar6>q-0;t@bud+s^O(O*O^xvO z|MQECm{@@XQN6H7lfY(6+*n>#-0BqK=NAVt>Wmb^&=DONH=5kfun7NM6M~!D?@LRQ z5A)3A<5_Y<6F!(^x}`1IcvSeOL{27+f2?h)e95HU1_o1QBwEBi7HG@gcDL0w%PzOJRE z1-6V>CHNz>L9MLXvbx3045Tzjp%Vqg&C|=vh5ZUwl&wG-ctr>L`aU;78v@W1N*LNI zMmwHU*U*4SKH3;zZ+>WR{}iPAGG7A{h+32XPFAoS<#Vv;P9PH#f@zv;iBqGaoo58Y zU-(|AyaneNgvZ?T=H_OQLaxUd1va^Iz3J+jnK?r)|7AlfrJiR}{DHkak6CpjCR_UJ z*Vi#HpeCt5HAD-L1wjWza2`MAnJXA}1nMpfC~_U;PV{`VO9Tsn_Kbrx8eSN#d*zCCT@(iSfp#KoQUc~QdNH?8-Q5@=k|CNIA}(MLR1&>)%L&{gHah;-gFD^DGNF`R zfY+z92Lhu|GmWX86+!I`?SDIihIs(ZR(AG65_WCRJqgo1liEk9Zh7Q3NQoc-v((>2 z>%{M<=qaN+%?ky(xok15u2&j9>4i7tfo%2|6rERyuZ9Ba? zYH9%1AW?w(^9Fr`&t4wTVqYr)G=$E~#AFf{OwrTj(Ib&ZlS8?JNpMe&vI~P)s23c9 zO*IQt>Vd_FBc;n;q6{7p=ntuBEA3BMAxRQWa@84(O z{|>Ys;I=}77`%YZb#PC^QOq%-7__OHLRqEqF&<|;XX;is!m# z<8@$S?W08wX#V56ZX-bwO0C!!wQ3&x3fBhryJI2 zC|40mMkmUfYg}dyDi~|K;T48PU?t#L>FVw#VFpwSOA3~vI(Qp6|2b75|E>zVhJ96WGfb6GSBfmNDvW4dk!d~IVb z{@z$+*swzEH~xFdU|GFr2R#l_5L6gR_74sSZc1^CdwFq#JPFzerGzI3zrKk{JqTb3 zv`N(64AC(ELMFHCPa&hAAYtx^Aee7M+CXqZ-6C4flf=13uaf);cyzRCRlv9aPZii4 zot%EpwM>tURORF_NJ`!tss>IC;>{ar|DXurr&!P+>Wm};4{E2is60g9p0psbFvM}1==oqvrkH5;$26_qU2;U z1(d@5dC(ku(|<<_b!;rHjG4H(TObS|%_U-hSGFSHWFM@OYNgm{JW%3I8a+1(G*Wv) zallj7;#ZSI+WZUJ7Q2D%7pQm&Zrj~Oc7cxWzU=Sqg={+B-L0yvjZY60v$CS1-fNTm zxpe?<*L^+#b@}K62;~3F1cHJV=H}q^@-}xbQ~^l*;R6(RAfLT9mAmc0jzBr^gqACa z>bo`Q#9`Kxph!S2fzzXEqibn7H#q3}Jzs728yv43JmkM@h_JQ@rEjC@z(C?F<02d-eu?XO%OOGZ> zwnSfO6F?<+g#qRK@^9NE2(YU9C08x(s;l=wae|`K6Ix~eZU5-#`Gg1Dzz^b1Zx+|N zX2ci3^AdIQlbC=H}+`@bE&|pvo_U z4YRYIXO|oNY2Lqo7@C@@z0l=I0#3_iUQbv|`b2*_@=)zwL(pXD5q)6=ObDPM!x@n-(8BUpXYAQ|TC z!!|P9B9w`*05fWyG<0f+m-$QaA#6@%_7ZV8V+lb!m=_M z@ae-^Gzb2xt*lI-9PH_-4?1rI_XiA|1k}ivR8DR6^z^_f0u|>~H`EQVo~Lq|0vzIb zUxO;>Vq)2>YM_fy$pnba8R_bRGyLzt0S+#1r>dr=CbZ2KyC7|Q>cak^bVmW}-dC*P zba_;=>WPs3`SS-tun`==8Q<9Az~KbCS1cv})d87Ma*$gfb&3U^dRkiE^vzT+Kp9)W zrv|6|l^G4ZvmE4GH8beEfLnR*C=83F%(CSaBrWKo6OmZ91%0cTZZ@TS-U5DNQPDa$ z!{C^NW(6qcMn*=Nn-?Mo$S+_w`M0|m3XKMs-hqB*8|!mJXrRJNLPEuluzifWKsn*~ zGIkYBu0+1U6RQub>)6=pnwl%rqC!HM@G#K02bGHTBj3=oim5HoX|lwhu*u41Z?b_N z1&5D<;LDmpYB7i2y`XF)hhu| zIYBlA-)Un}QRF5YbQ`jfi>dbZD^E=zKpkBfTABG_7EDA$M5zvJ1;)k{jE5tLj;uwa zCl>wIeA^}9is`L_$wx;h6Uf!8z!t&=;e?+p$H@jAFJd&`1Ed7)hb8~}VCZRHB({WL z_&z+$_-kMwT^Qv?cbTA%65n2azqblwtAq<=C z?e6;gJ3>n1#eoq6T>wjM24Dk@iR);=J1ZbQNqTRS3bcb-0_OH_<0E4*yaIlf3+V1P z>xoE9w?MXOs;?h%6pH$QSFNbYb^z7DVIUJWYOzsGPtP3;zmRc5g1Mm59bvu9(ZFr+ z7$=ZD3&sE#yS=^L>Eq$Ck3g{rw}QSKmr2Ea&FYyHd=cLZVktnC&bSvqQ+RoK;X7q)#oO<;0m}U@EdV+m)4parozn7((m8W(AWmu{U>zVlvdTlbe)_w zz(fh6$r9+VL1#WaMc>ik1j4$36dQ9E`wVzM8YFXQJ}@-Vqhf$yz(GyL%nXJBS%VFk6lNDwX(Fd$x_r?Xev+X>4k;f-qYjA06f3g)CvvbaG$q9aKt~eem}7UOE(7*93H)_x3F$7qD`5`GcLWF(RTH zP-O0|IBfPybQ$&}RJ=quHZ?Upaj9dZpHRTWn$k@KL-Y2l#Esq6m6cAi8AKlQ+iU(% zN0{W9YeTGh$Y9<_r8+q&2|78PXGBB_phAEE_LF8t9@Cv}2i&#`lCixH9#4G?mm;R7 zzWsnA5C|?KKmbQ$;Ok)%e?Vb;oiqPTZVPw{3=Vp2d@ryHItl+o5x^f@^>P}%j~TdlHo@^Q(?Kyb!F%E!aS)l^pxk<(G_1WB2M1RRR8 zUcW}QGDKPePF_8{8mmGB^$dFOsNRj&FN2;OTnN9=kh4Bwgpi0xz8cQ0>I=$t;b#iD z^-WFm5}uel&?8MrO+A>6{haK_CL{z@tpF4jZZjQNZWLt(^u08@zV3)0(IJYV1c)7o z%P^UxI1T`+fq&O~>y0?qWAThfoxpBkp793W?|cMimVpIF>Cg++r59}2=tFio~GUs*X9gToV0_bEQkv2yCsei@YjWHqog<$+@N(AD)4 z1O#MHT8HQQN#r=V46T}d+P$fLsUWmLzvlKMZB^1_Qy&-(^?6wV;8AsPYYTVv`!u(g z7i!k+jifg?kOD!}Zbot;Od(A|21U6Yf`fy>JVPGCnow|6{Bgi;XHWN_(~->cjH zQS-35oemxaq?U82f7#Oh;~gE>LQvx<5*R(@GvlCL0gZ{`{Wttp6^eF`WUO`}sM*Bf zpWr6x$;i6?h5$uurg{nc28VxpdD+(0mA6kO6-0AT5{Sbsg8u!kgHnH>%}jB03TA1ck0!IHJp@x2K2DN{Bl4%YDB4m-rAL;7a*> zbVRPtW1+0fDkMbOSD-NiZwD3F{a{Utu^Z)XKuHM@1uialRQFhlDl7S+{6kL?j7QCO z16UwMz(N9gjL#>4WAyXdURLc>=xITTBALz0W0J2y#M!jcm1xypB`0%pa*`OBI79Cn z(gyo{1^`5R@TuE=!G)b)ypjNmL6VmI?{EWv#=SBum}rCUUZ?0+$nEd6v-f@lhIgK_fHfUL4lX!O#{ocDE5Yc{rrr9?! zAUYa%5WB%~IPd#+{j!XYRaG#L3H|w-Po5mWY`fMQDbu0;bSgo6!o4hz^1xIMD%pM* z4DS*n?R0>^D`^Lai6#z~xUT?jqSLs%IB$VmmZYHrqm(!}p&lE*uY@bWoxx>MabF&e z+D(|q?_W;;VqcZ`-vuZ87JT}^{ZD98<0B=;ypbbOL=hdnmluKX;K1BGJU;FQtiYiL zx5Zod2^gXZ^MZgwJpBmgo$f*oTluxzoLmJu+f2_alr;H0y09TQQ(M1(!)v34W1vjV zVL|PIgyZGyO@NQTJypfN69!Sud$0Dz@fOY?uiTqYhT@e61aR&PZt=`&NqvHVBrGPs8c?v0bB-p8+RX;{y1Acx@Q}l#0 z623DJmSe^rpaMYDztl06^e0x>OjzqvXtn9GJQw zg^;?zyf^O=4oboBvLwteuZL?up09^9W-&s(t22}!( zH5`=PjGl-pFlkJrM1X-C8U&Db;86Jh%fjs76T3rzwthV`D+`cN5J(&HBmgl)9`q1` z1;5rDA#+5B0e)bbaE0l*xcmmxy+_O6oaToa8ykCxlFKhIG|b!K+)hrKWar=Ao^yWm z2tLOHb=|&wn}Y*P|1hXW%$gGlPyG>M208#AKSHpdmT92$c~nQcItxrW306%o2(SPC z8*<*?-*3uAKKC*jiMFXU$(xDMG&MZ|n;R|uPf#s7@7vfgxdy0$SrIfOl;`Fqe%#J| zO4KZg%@1I8_o~q)eAocqe43#BSB51?A31exZ60CaWHAC(Uf#iE7}j=q{rYwM!4>e)z$c+p{7wZy z#ip>Rs2+qj#?|jo_CV~%f=tcp%FiU$78a{ChaAyFGg#2HWKi|WetI< z?lY|vs$IBzCF|EOXCjIjF8F>(icDmBAl1V6b$ZyrgXC-m!;|>#E?hY&cn!Eb(i@=_ zc23I7q;;?0WMX0hvpwwu;a(^C#Pck$bL?il%gqJQ1G!PFnFeqN*?dCJB3IbZ2h%Fh zz&3yV+IF+bZ^!DN7q zMfoI1_X#>E7*2ywQDK#HKT^oxcA5m^TZi%}_wdf!C9gD!n*^ zkJnjTTtor3L{qMD$fCmFKLM^h^ZX%*9^(KF=Bk|%<2^RG$REOZpe|1f2^7k9jlx8X z4NpH{b5PlU&{O3q%nvL4$AuMG9+p2=)+k8jtp0C zC>MFm9bd)gg>CJw&K64<5q!0ztJYe*Zo#JsrHniGTCJ zCI>ID0}ZYC1X8piJ-G%?2JG9(@GZBRUy#OheI7a7WgA*_;Y-szs~2^(yxEEeM+n@q zAYh32BYmhxaU}2b{_z>rh1{+cYJCgJI())Oe0;Dss*bhzPXOw58hO_OlnkD&^MX2z zFtIlPH9%VDdSVHm6aYI5A8vw;bpD6&=xi|RGcz;c{)xa84NV4d@I^Bb5tJ1d!>SuM zACQrfLIMJE{lgh~2K}JY9CHam9JuG)+$+cxR1lS2I}#4?rp1rQ3;^5PCrDKV6pPqc zixi--!*C%iXtt1(epNE6J1-?A1q>aI>C9HgqH1;hjoJSU#b)(xdo=tuN&x|90HVWm zHlbGs{a@hhiv`?hIkxTn1vpbaNMx$U4&jC|Y8BArGM=4F&I8&?7&kOYXuozvgeHiv-<);N<5vm$+wnBWC~8u1MlS;qee+ehQLcxk;tMod(bUq3SK5s@lG{Vf3mXNQ$78 zf|7zrcZeWLgLEm~ASKO40i}_aM(J*(QRyz}l$4fkc;~_2{~O~w;|}%0Is5EbYt1>I zn2R9-afbdFbWtdx1P$#C*ojVnfrR!tH=_ek5D;`7YJCJmS!MXlj4p&Dd=Z$S9yUuC zZ%0Elyg*pGhp0bgW|@bjH1U9@Xqv<6xV~lPx`RnJ!l>c-wzqTuK}bFs)q-)ERb{n z=LCfpbrl0J_c5><*3{I%OooYxqI_(Yv@k!`!>ZW=2S36+BZt7awU~(bY0IDvhZcXm z!Qs0R+zXI3R)UHeK@IvFAWH&n7?dFrZ*%~NXr!j4y|_b9>_|yt;r3sr&&1)agfR<& zi9aa}Dxk2ieo#y}!1`|Z=1oCDf;MSB9_si6&}hs9h9gioL4cp)Uw6QO>@9)QB1Tjh zk|7T~z-&@9c}0wY0)h3l9|3PRJSI_LDDNSRi|oL_nuLyDsu~){$GI1WT*Cvl8)YGc znyTU&0EcI1$5y|c08&IN!3LDdSLZg686TRhq3(j$_STk{`4E9OL@vPJGl8VZ6GIX3 zNvEKV69$>=ZB~7ZUXbN$13Ep31IbQ=T58C+pWX;OP2DAQq2(X}>iOog# zQGvj5QN@@$J6Ebc8it_-cNHo)e`MYibyVX;kYM0_&;e5|R2ES?BJeZz`l+dNSk`{h za&vQ+j5vSa2U(66x-%?D`+-qKrKJ$t?=j_7*vG_eYg59{N9M0U<;aMxULZA3y*{qr3?WZ6x%aGhDf3@k~;(ePAF$ zCjHw^P;YN9;0qtL#!zp+kQRJDAF0|XPs`iKonAB)#_+0nQs#k)^F}r<*IvV60H-Q$ zz{*S`w`?k3S)+7N9Rzn}>e=>+E2gIv_@(w9|B03r?bG04w4R>gS8Iw8eEo@y%x<66 ztE|`1?#JDGz|}3V=!BN!{d@cHp>ob+4vvArq{>R?fh?tN{Hq=dpt(JFOKar|04yDb zNPcfK3To;^H4s5VV+w{T5lSs-$NpSe8amKn8O>hm(yXu%8>0l(H_#VbhprabpjWpA z{DbBWFtBL1Nwzi+_`BpeP|HwQLoP8&($Ls=cyItHoGlN7u>xzfIn+U*1tkft1vw=a z5hKdt1ov3vOA7>r#E&TB6Fl77+FEHLRXEl(;j$4txDrK}7=vEW>JJvWSxSmv;B{GG z5i|@|WVkbt|Nk{6s6oK?5BWbt(0Lo4;>52RV0Cf@39q!EChBN-3#egIq6nlugdI@S z4ZQu920gJTDRn?wK^OOn7bS*(^o9i2er?nq^zW+z@LsqcxJPcg11hjMnZ$H;bSTmh zdVK;myc8ByfJ8KJphgt;y8{GPUSX^cHcJ+;*bhL(TgucG0~8v7giTN3NZQ)kKxRkt zI~4^7<5Gf7avS&u$oW8GDb1~Waf*W%7i^B{tqWxcWGbU17+2oI^SM7SA?W}<6R5k* z_(kP^!IA_Z!Y+S=6ipSx8xZ&a^n^estr15()WGz7a*Cp=BC!GD!yu0+h9xHlc>}IY z0^e)cBqerB3b?qz#CK8ihaLT5`jj}rU0!aT--4RajE@&6`b9n_0yfnBC;9h=YanF- zRKGmv8bmi7EUZ~`{+@EcQtn4cl#;uxAK+X(|Np(20N8VDJG)=Kui>m=QH%>jCy@u~ zN!e4lU|4Q6aZnRIhVnxEqkbJ$rdtn{|2nD*jYA^=fF6?-87jzbRdZKp=IO29qPdvh z(7pwhK91`*Zo~<=lm%S_u>ttzX5cjFV4c!XMwHXm=>9Dn5d2^vGBE5;AjiW?O8x;$ z5AaIdq`1}GsJroY)!53a`!{NkB}I!|999XEedV;uO7-TMoKK(daGFu;Y$x%>;c~It zQoqqarv8wgzV|Jme=+<@_$o>rn%8vSOqvAWvv@ATB3{=4d@ z6+4lVnTmiND2>T8cA?IW^WPEK;D{CAc*H`muu91rXW+r3z5e&92>29{MDq-zmDL7h zo7UW@scO9b@9vyJh-j2&hyW&kG)UJP^{b43w^&*jzHA;OXiyZ722r8Zrf8=BK6Dd4 zWYAm4-42SX&d$L4Lim+1mIq38C5&jivsq&DUT;)u$pKIvZI=@D$(|3OhVaL`c{40F zHv4~9EbK-o-T#5&KVv1J(Bk7e-Rb~Zr3&$Br+_{L_WE~>sR+d?s;aQATz5_YU+2a9q)7I`%3ub_s1&MSrogY$6VG<)FEuEW{HIpNL3vfxm zJRi9zGDHBXf$9CeUFJF^u!pG8w?`M%4#;7}s(d4$IemShv9%B)0b@fAW)83cAI$hO zLj@80)d7w{-Z&a70)?uwGEtO3R&~qAr80}L66qAk7a#&) z!LCZS)sIUcO-q>d1@Mm7aKltHE>(^WrDn*$?T17PX!SS!Du#w>7heisNtd7$G~s)l z0Y`nn!m}GUAw-HCt@6f zGA$Z;U&bLrxL?D`u{3;K^1tGMu?SAKq|*et4K`Yikut?FCWT zfb7O;`H<{IK;ur^vdV(M>dnw+M?xH{rQ)RTPWU=ipnE9zg>Doj^n;)fjKgtmUz~y7 zhC-&I?#qwaO=x2R662q0k7r;}1jog+pn-?*J<#zlf_RSSxC9l0M~V@n3fVia&CQ`P z6Vy29wu7@^#sKptb||tKp`yJsS;NOQ(aY`z;$P6Cyb;3v3D7VQP~g0sPUEZ4bcep1 zpaxhMA_KJ=#PbHV-W3>qkf{j(o(1l&W`7PYt_^^WXKU@tD=MVpc_WJd=v!K@!^wl& z0jXFDg6@r|?sVNpIuiXmFm}Ml%|QY3r3Jo?>f}v1P^rL0@l*+QPj5P2x^xNnkNMSl zc3$2iV7o!?FmBg8eOA8%i5TQZ^X>{?3Ja~DKZhLZDfbGP4*elkjCXrNHc1YSLZds^ zjbj8su>gbhMrem6g1Q#Iw{vNH|G9r29UB9#C3+UOALv8NO1;^GdXRXaP99eCZntYe z`L?5s7XfTE4{95=eb*(FUFe%nwoKC7&w&r08v0Xs2K!-A59%IryIhaaTSE1 z3aAeU-nNX4R6yN&H)Y8r4=+M=#)YiBXAm1QAP`0H zlEewR@iH<76mOQO@e&#FaC09VB8S#IsEo>3?IKp96+u5>pnJ)&q1|mFPz)oEqxWLc z>=mEkUcdh1B24%E6H?!U(i2MJxy=&o+rat(jP@*3(FVL1^MLE|N_77V&VN2!Xq)jw zo(l_qhx*Z;9rQTd052KMnwZ&1O%@_hFz)X!zCk4bJzM{D@EmfFCOqsOOo7d_m!%XF ze&g})7dOHsxxxV^0~Yoo-MjY)9Tn!8@GmkRImkt@MIdp|&=`}6=lx&e5OQ%{9=vjo z;$7gPvB|jcE^?uyC*`ON8$q+Di|R@RcA=p`)IwaI2j$}0`KMdYcv@liXz6pco`J!w z+qYZhU&F7Gyf0EOG3pRlLq4n5YWEf~MUo?5q?HG}+qLPx;@d~ymPk6c>kysb{?H)|{?C8a#CwcrD zEwOv?|M%HS$WHo!^Y9A{9QeP~4!KBph5v(r=KDuA&cM=gGF6iJe>aHa;s*7g{YzQl z)5-nvJZ8{4>N4`q<6l11{_jb#Gd_O&2C5`plIqtLcBu+ZpgZ8aMcD?+UQp2BTlNPJ zy#Br4|Kr7z{bK-cu53@;7%i0)=e$D>94{DTAzR4M^OIWvQLK{1#|H#2z&HKB3(UjT z5`!!K?r&V6St;@bQ3YbDI8qW+en+HM)ghlhqZ$qnQ|L*;J(Yn-RLG5bA_>(lpEp3Nj!uO!@pSa@W5({~o+il5B+?Ior$IFq$@M zkJrI!fI$grXehDGN+`>aE4=QaFq8o*{ojSum8xS3C}{yCmy#W_Rt@tjH-!n zDQMlRhi$3Z3iQRE5VK)+e#=A!PUxnt@kShBB-#hp)a)i2yC3l4PjN4ykx0X$3h=@g z@k`y;db!~Mjuepg)Itw-MaA&4Yk-yk+6E8$zE_KW5g^=|MQa5B2iG1gXG`<-EG&XT zaTEtyT0@Il9~dm`*Yzmzx9Fb+Uq(w%bE3{|z)U3iH_RO=vJjgk+l7u0iBuBO4B*Wm z+%Pd&K*0~$@9vlsI5Imra(u-{t9#fXzJPEr4#Yg?bPPsMR{kcke2uF5?SD3RJm62L z{$t8Op#UrlYQ4BmpOSbXI723BGW;7xsW6uJ#VF^mgBW@ac?76IdIs-7SR4BSVsnW3 zT%G0WXdvwcJqjpM*}$C1&b|XT09b4w`#(?+qaN>bpN-oJYHA~3)v$+z7@A;!uvf$f zV7wZnrUrTmK#vRv*Yubxk(bbtDvrC6GwAb_nygv*3=RVE&f+U22UWBbz--FkD2ZyH zw{bc}mq=BBguz?n{{8zpTCmPgg*>MU`IUdaX<=rD6~uyog&W7sqbh4u9e3kC3yU>0 z_JVXav{ip}l$)2=9n^%#M$LZ0y1xj#tDY6q4TZYi>o!ZffuvkrfNv~4OHBuC3P3JM z_<^nenvMwyV1Iw5V8Ak76<|>W8-cjwFdRIA0EsRag0KLZt3Xk(926u+XC44rRx~sV zSe`YLO^#Ob>$FQvBZ69jB$Sm0!H9$s$shoUgZw)r7InM%(c!UySWK*YPvpxRNC~8Q zsIXHMOyJ_6vmw0TAD{(*f55lC+|O2IQ2Ih;feq>f&1GPH8?hw50O*Bt}Z1hTb! z9s!AJJ`RnZn&kxK>*@W*fY zaLp&}*)JmAw`7}Cz#lIL`qAf=>_WmH(Wgi36x(Y7>q1W6sh>`S=?wr;mTEA7JP7DJ z4fo-;p^?t;jb~9&bTRg9T%XDNn`6Y%B=MCANk;>>RGw(^djP;@A(1*-HygVw2Sxt7`!n(<1pTG zz^lx|a~Pe#q1%8VF5bMj0;mTdzo)Ra0Hh35mT5ta=hgX@pZm58hdkS3eA_uvu}dH6 zgT=`h>Cq+K3y2d(=v6*7kF=FbiD_1{ay||DoExrU=I*SmJqg+y7_H(M)((gRBzAY$ zjX_RA{D=b0F3BWRMKdDup=5gmk2>l8-*1n1eAHt}<-O&DB`3(F#>u6|$)u#jPCg|5 zhn*Svu;0d@b>tTP$Sp&f_bTWDi;MIn%03%!#F?ygLDIS7M3k6+rmPB6NK4Db*T}#? zsV?vt05t5zWmX(lYsSUl=uX!XUoe>xq z5ODzHPyuMXN%B!Nw2{duawURpv}>xu?+9D(XKx-*Pc774n;miEIa zH9ftmvXV6xLJ}ZpcdOn3aq;BIyJc&*AMx?zlymTYpz-S7{1!RA2{}X+bb)@%#WiF* z%q|V|l?6z?A^!9ZC&4@b?l@n~;n{V#XSa zda3|PC(iOi`z5EKgDzO;kdaup3xmDf_wUya4!(ux2(8`@nL7aepK>HSG5i5j+4JYinF5HMpf07n{|8|wz73pa1tf{zP~ z6(DOhHGe9flKil)ic6>^cB(ak+1w?HP1*2QPZ#q3OZ-)@PXQtZaE(;*)_n5v3VH5p ziLevEG_-0$$2mAW1Z&n?xO-F~EqG6_IZ|i@Q%9+AhP!Lxo>`{p9rIKlIDId8n;=2Y z(9iE5)}5@mCQ1=RLm@-67uoc=48!8(SQTt*1S~QX#qlH1qrL@XeF?LIv(Po23?U=? zOi}_tS%Dz}J7E!Q{vCRtT7NkC8DZo%V#nwJj4?5}?$A0v+X|sibvp z*Drz~PbTE9xsRa)tlS2~YOp%KX61qQgkKQ`gMV-$)N=!MH{ixh$mW2s2l^U95)3RR z2j{drl9Ej;loIw@So~e-9YGpXZjH@2Pp4#0Z%pcneNk)btRqus385&^bCZ;`N~it< zq;G5Opc?~*#~Gf|!#`DPJnY9I_YCXpK5&Ej0q`E68Nw+T%0D=O>R0P(~t*scYK}c0WFKGjH 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 diff --git a/images/driver.svg b/images/driver.svg index c3b6faa..05298d9 100644 --- a/images/driver.svg +++ b/images/driver.svg @@ -1,6 +1,6 @@ - + @@ -32,15 +32,6 @@ Driver - - - - - Async - - - Sync - @@ -49,37 +40,25 @@ Core - + - - Thread Pool + + Scheduler - - - - - - - Seek - + + + - - - - - - Compose - + + - - - - - - ... - + + + + + Mixer @@ -91,22 +70,6 @@ Events - - - - - - Mixer - - - - - - - - Disposer - - @@ -130,14 +93,8 @@ - - - - - - - - + + @@ -145,8 +102,8 @@ - - + + diff --git a/images/gateway.png b/images/gateway.png index 79f5a4fdeada7b2d5bb2a64a5fe92b8103d5a61b..50f6b14519b42b4da3a996e8922d089f638efb2d 100644 GIT binary patch delta 418 zcmV;T0bTy#gb3h-2#_RyfoVfSP;*j8LLf;+LpCuvHa0CXE-?TAD3NuM%S%E*6o)^x zNP1vVL5mg=)k?z*qBbp*vY=X+L9dNoUxC`?UL~Y$&{imj+Von~Ur^hibr2Lq5N&H+ z)TZKgt_n)z8P1$HiW>QzV*V^^lB>w9l1F2e1WB^EM9oR{n8di~F&QcHX8-^8RgVvO zOVyiwQ2%Tg?|sm)4L=3L_&PF-pJT8+!DXhBzjg>CAEFm3TJHfkHsSoLqD6M$Vhg$+ z)vy*WN;Yw8JPvQC(6R{aH_*6T>REZ8lLrWG$X8v%-ahmV%X!DjFJ~=h=J+%#xr46( Mhpzzvm#+Z=vIf7yO#lD@ delta 419 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