From 17c2b5455e393978887f9b89165c33b3e9cfd220 Mon Sep 17 00:00:00 2001 From: Marius Date: Thu, 11 May 2023 15:17:33 +0000 Subject: [PATCH] using pdf export --- DBSCAN.html | 15525 -------------------------------------------------- DBSCAN.pdf | Bin 0 -> 46575 bytes 2 files changed, 15525 deletions(-) delete mode 100644 DBSCAN.html create mode 100644 DBSCAN.pdf diff --git a/DBSCAN.html b/DBSCAN.html deleted file mode 100644 index fd1acb4..0000000 --- a/DBSCAN.html +++ /dev/null @@ -1,15525 +0,0 @@ -None - - - - -DBSCAN - - - - - - - - - - - - - -
-
- -
-
-
In [ ]:
-
-
-
:dep ndarray = "0.15.6"
-
- -
-
-
- -
-
-
-
In [2]:
-
-
-
:dep linfa = { version = "0.6.1" }
-// clustering is a separate crate
-:dep linfa-clustering = { version = "0.6.1" }
-
- -
-
-
- -
-
-
-
In [4]:
-
-
-
// apt install libfontconfig-dev on Ubuntu 22.04 LTS
-:dep plotters = { version = "^0.3.4", default_features = false, features = ["evcxr", "all_series"] }
-extern crate plotters;
-// Import all the plotters prelude functions
-use plotters::prelude::*;
-
- -
-
-
- -
-
-
-
In [5]:
-
-
-
:dep rand = "0.8.5"
-
- -
-
-
- -
-
-
-
In [6]:
-
-
-
// Import the linfa prelude and KMeans algorithm
-use linfa::prelude::*;
-use linfa_clustering::Dbscan;
-// We'll build our dataset on our own using ndarray and rand
-use ndarray::prelude::*;
-// Import the plotters crate to create the scatter plot
-use plotters::prelude::*;
-
- -
-
-
- -
-
-
-
In [7]:
-
-
-
use rand::prelude::*;
-use std::f32;
-
- -
-
-
- -
-
-
-
In [8]:
-
-
-
// Creates random points contained in an approximately square area
-pub fn create_square(center_point: [f32; 2], edge_length: f32, num_points: usize) -> Array2<f32> {
-    // We
-    let mut data: Array2<f32> = Array2::zeros((num_points, 2));
-    let mut rng = rand::thread_rng();
-    for i in 0..num_points {
-        let x = rng.gen_range(-edge_length * 0.5..edge_length * 0.5); // generates a float between 0 and 1
-        let y = rng.gen_range(-edge_length * 0.5..edge_length * 0.5);
-        data[[i, 0]] = center_point[0] + x;
-        data[[i, 1]] = center_point[1] + y;
-    }
-
-    data
-}
-
- -
-
-
- -
-
-
-
In [9]:
-
-
-
// Creates a circle of random points
-pub fn create_circle(center_point: [f32; 2], radius: f32, num_points: usize) -> Array2<f32> {
-    let mut data: Array2<f32> = Array2::zeros((num_points, 2));
-    let mut rng = rand::thread_rng();
-    for i in 0..num_points {
-        let theta = rng.gen_range(0.0..2.0 * f32::consts::PI);
-        let r = rng.gen_range(0.0..radius);
-        let x = r * f32::cos(theta);
-        let y = r * f32::sin(theta);
-
-        data[[i, 0]] = center_point[0] + x;
-        data[[i, 1]] = center_point[1] + y;
-    }
-
-    data
-}
-
- -
-
-
- -
-
-
-
In [10]:
-
-
-
// Creates a line y = m*x + b with some noise
-pub fn create_line(m: f64, b: f64, num_points: usize, min_max: [f64; 2]) -> Array2<f64> {
-    let mut data: Array2<f64> = Array2::zeros((num_points, 2));
-
-    let mut rng = rand::thread_rng();
-    for i in 0..num_points {
-        let var_y = rng.gen_range(-0.5..0.5f64);
-        data[[i, 0]] = rng.gen_range(min_max[0]..min_max[1]);
-        data[[i, 1]] = (m * data[[i, 0]]) + b + var_y;
-    }
-
-    data
-}
-
- -
-
-
- -
-
-
-
In [11]:
-
-
-
// Creates a quadratic y = m*x^2 + b with some noise
-pub fn create_curve(m: f64, pow: f64, b: f64, num_points: usize, min_max: [f64; 2]) -> Array2<f64> {
-    let mut data: Array2<f64> = Array2::zeros((num_points, 2));
-
-    let mut rng = rand::thread_rng();
-    for i in 0..num_points {
-        let var_y = rng.gen_range(-0.5..0.5f64);
-        data[[i, 0]] = rng.gen_range(min_max[0]..min_max[1]);
-        data[[i, 1]] = (m * data[[i, 0]].powf(pow)) + b + var_y;
-    }
-
-    data
-}
-
- -
-
-
- -
-
-
-
In [12]:
-
-
-
// Creates a hollow circle of random points with a specified inner and outer diameter
-pub fn create_hollow_circle(
-    center_point: [f32; 2],
-    radius: [f32; 2],
-    num_points: usize,
-) -> Array2<f32> {
-    assert!(radius[0] < radius[1]);
-    let mut data: Array2<f32> = Array2::zeros((num_points, 2));
-    let mut rng = rand::thread_rng();
-    for i in 0..num_points {
-        let theta = rng.gen_range(0.0..2.0 * f32::consts::PI);
-        let r = rng.gen_range(radius[0]..radius[1]);
-        let x = r * f32::cos(theta);
-        let y = r * f32::sin(theta);
-
-        data[[i, 0]] = center_point[0] + x;
-        data[[i, 1]] = center_point[1] + y;
-    }
-
-    data
-}
-
- -
-
-
- -
-
-
-
In [13]:
-
-
-
// Check the array has the correct shape for plotting (Two-dimensional, with 2 columns)
-pub fn check_array_for_plotting(arr: &Array2<f32>) -> bool {
-    if (arr.shape().len() != 2) || (arr.shape()[1] != 2) {
-        panic!(
-            "Array shape of {:?} is incorrect for 2D plotting!",
-            arr.shape()
-        );
-        // false
-    } else {
-        true
-    }
-}
-
- -
-
-
- -
-
-
-
In [14]:
-
-
-
// The goal is to be able to find each of these as distinct, and exclude some of the noise
-let circle: Array2<f32> = create_circle([5.0, 5.0], 1.0, 100); // Cluster 0
-let donut_1: Array2<f32> = create_hollow_circle([5.0, 5.0], [2.0, 3.0], 400); // Cluster 1
-let donut_2: Array2<f32> = create_hollow_circle([5.0, 5.0], [4.5, 4.75], 1000); // Cluster 2
-let noise: Array2<f32> = create_square([5.0, 5.0], 10.0, 100); // Random noise
-
-
-let data = ndarray::concatenate(
-        Axis(0),
-        &[circle.view(), donut_1.view(), donut_2.view(), noise.view()],
-    )
-    .expect("An error occurred while stacking the dataset");
-
- -
-
-
- -
-
-
-
In [19]:
-
-
-
evcxr_figure((640, 240), |root| {
-    
-    root.fill(&WHITE).unwrap();
-
-    let x_lim = 0.0..10.0f32;
-    let y_lim = 0.0..10.0f32;
-
-    let mut ctx = ChartBuilder::on(&root)
-        .set_label_area_size(LabelAreaPosition::Left, 40) // Put in some margins
-        .set_label_area_size(LabelAreaPosition::Right, 40)
-        .set_label_area_size(LabelAreaPosition::Bottom, 40)
-        .caption("DBSCAN", ("sans-serif", 25)) // Set a caption and font
-        .build_cartesian_2d(x_lim, y_lim)
-        .expect("Couldn't build our ChartBuilder");
-    
-    let circle: Array2<f32> = create_circle([5.0, 5.0], 1.0, 100); // Cluster 0
-    let donut_1: Array2<f32> = create_hollow_circle([5.0, 5.0], [2.0, 3.0], 400); // Cluster 1
-    let donut_2: Array2<f32> = create_hollow_circle([5.0, 5.0], [4.5, 4.75], 1000); // Cluster 2
-    let noise: Array2<f32> = create_square([5.0, 5.0], 10.0, 100); // Random noise
-
-    let data = ndarray::concatenate(
-        Axis(0),
-        &[circle.view(), donut_1.view(), donut_2.view(), noise.view()],
-    )
-    .expect("An error occurred while stacking the dataset");
-
-    // Compared to linfa's KMeans algorithm, the DBSCAN implementation can operate
-    // directly on an ndarray `Array2` data structure, so there's no need to convert it
-    // into the linfa-native `Dataset` first.
-    let min_points = 20;
-    let clusters = Dbscan::params(min_points)
-        .tolerance(0.6)
-        .transform(&data)
-        .unwrap();
-    // println!("{:#?}", clusters);
-
-
-    let x_lim = 0.0..10.0f32;
-    let y_lim = 0.0..10.0f32;
-    
-
-    ctx.configure_mesh().draw().unwrap();
-    let root_area = ctx.plotting_area();
-    // ANCHOR_END: configure_chart
-
-    // ANCHOR: run_check_for_plotting;
-    // check_array_for_plotting(dataset: &Array2<f32>) -> bool {}
-    check_array_for_plotting(&circle); // Panics if that's not true
-                                       // ANCHOR_END: run_check_for_plotting
-
-    // ANCHOR: plot_points
-    for i in 0..data.shape()[0] {
-        let coordinates = data.slice(s![i, 0..2]);
-
-        let point = match clusters[i] {
-            Some(0) => Circle::new(
-                (coordinates[0], coordinates[1]),
-                3,
-                ShapeStyle::from(&RED).filled(),
-            ),
-            Some(1) => Circle::new(
-                (coordinates[0], coordinates[1]),
-                3,
-                ShapeStyle::from(&GREEN).filled(),
-            ),
-            Some(2) => Circle::new(
-                (coordinates[0], coordinates[1]),
-                3,
-                ShapeStyle::from(&BLUE).filled(),
-            ),
-            // Making sure our pattern-matching is exhaustive
-            // Note that we can define a custom color using RGB
-            _ => Circle::new(
-                (coordinates[0], coordinates[1]),
-                3,
-                ShapeStyle::from(&RGBColor(255, 255, 255)).filled(),
-            ),
-        };
-
-        root_area
-            .draw(&point)
-            .expect("An error occurred while drawing the point!");
-    }
-    
-    Ok(())
-}).style("width:90%")
-
- -
-
-
- -
-
- - -
- -
Out[19]:
- - - -
- - -DBSCAN - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0.0 - - - -1.0 - - - -2.0 - - - -3.0 - - - -4.0 - - - -5.0 - - - -6.0 - - - -7.0 - - - -8.0 - - - -9.0 - - - -10.0 - - - - -0.0 - - - -1.0 - - - -2.0 - - - -3.0 - - - -4.0 - - - -5.0 - - - -6.0 - - - -7.0 - - - -8.0 - - - -9.0 - - - -10.0 - - - - -0.0 - - - -1.0 - - - -2.0 - - - -3.0 - - - -4.0 - - - -5.0 - - - -6.0 - - - -7.0 - - - -8.0 - - - -9.0 - - - -10.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
-
- -
-
-
-
In [16]:
-
-
-
extern crate plotters;
-use plotters::prelude::*;
-evcxr_figure((640, 240), |root| {
-    // The following code will create a chart context
-    let mut chart = ChartBuilder::on(&root)
-        .caption("Hello Plotters Chart Context!", ("Arial", 20).into_font())
-        .build_cartesian_2d(0f32..1f32, 0f32..1f32)?;
-    // Then we can draw a series on it!
-    chart.draw_series((1..10).map(|x|{
-        let x = x as f32/10.0;
-        Circle::new((x,x), 5, &RED)
-    }))?;
-    Ok(())
-}).style("width:60%")
-
- -
-
-
- -
-
- - -
- -
Out[16]:
- - - -
- -Hello Plotters Chart Context! - - - - - - - - - - - -
- -
- -
-
- -
-
-
-
In [ ]:
-
-
-

-
- -
-
-
- -
-
-
- - - - - - - - - diff --git a/DBSCAN.pdf b/DBSCAN.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e52b16c08c170001c5eac5a8d51d7fe44ccbc032 GIT binary patch literal 46575 zcma%>V~{3M)27?Drfu7{ZQHiZr#WrgwmogzHm7ZCXA!aA#(qEEAC*-Vl~omSA~GYd z`#xlfqT+N+^lUI>N4Hn6FwBgEjD!xx)-b%h4B}R{u4c{*;$4yI-dvS#)c zu9k!>tgI~j{4g%A&Spk-FrFJ%c$4;9ocBEj1q6)YH;{}_5U`gJ={gV{@F#ojo9iOx z_2c-@FKw^pO13)6Rc3X_q|$AbC6&qznhY2zXPZOhFac|(oS!9&gL#h6$gvD(uWQ)? zKW{IyiwZxcs4M^$va(qP)Uss9$}*nmh$Z`X-|sIA={FMG+a&W_F9j+dC29ix&%3wP zGlIM{C1g~SA*x|M^b_29by<&S=Yw=v(_)FQ+aR1*`^Rveeso_IUi{BXB5XqJF`Qol zPk!b_Fkv9ZXHaefu&0}7oY2*>$xs%{kGoWXk!Dlr>!%*=w`BnVUhl{IxybET0^iDl zve}2yasj0(BCM!Uat4bXWMR<1<~ZfydCBI{zLRla_lz=&R{+dJdZGSLiXxhV%K6GV zAaPP=WOISch`=U6Vk5p32 zR#n57E|hAgtZkZ&(17AB!&FAP=m0^gj@#2r?!(GJ79dzokzVogC{E@jSik^>${hzG z=^lt3xNcBTg)~vq_5`PJd^XA7i)3U|Npu7dgLrR>b%*a8y=@P zGJ~?+pTIblt(SkR59%BIN(JFv7H>y9^&Wn(U=w%Z{C;%^^vbsmiz(}Ae4gI+%VP@} z=Thu|C4=l^UmhH%zaRTHLnxD^kOgg8F4tpLxx<-c30Ut)$3(0ub$brZN;|D_d37m69tlle(AaNtL$?rcFVKm{ z-5k{6L^(z=PRxx1jlC_!D$x{s2*W#bO6Njw?QO&U-N5+3-5ON8(uqy?LUGh~){i+% ziMqS|zu$5QXh!WVKemxlp1R{jIOycXIFRjf+cJ8WpVh+*B>na<(78@6bk6a5m@P;l zx0I^G-G*^Ul&H4(Qgz7Tj8um2cdOwBIZ}HsdA1;0-*@~> z8&LS>i`dLrSdJw7Iw2Sl5X%!FnfZ2pdq;(PknS`@Ofb#O?@ZU5^;ZLIm&U7twW1GJ z`e_SKBqrkm)AZuwZA`LB4zOiZXoFric#NmmuH{#Jz@zu#zE%;wXdt7>qPCS9aa`=+ zl|oZljyJ0u_w>eeKQ9}gv2PA3rXKu)#idms?gvo$e({;;@!k~u-l{u5Q02==NpB!; zvRo_50&v<%45+O|A(9!?~ArfUC*uR*AgRM29wb;lYLoXgmQ{wRw?Mc`l9uXhCl^-AD_wqVX-5fCo;MNlEdFER*B z?8!^urm@W1KThd*azsO!IIzKuM5~sC?arT{ay!(bxMLi0*U=s|LgJqB;ZgT&Qt7JL z<`>zqnP(i{?)UDCYOPjwTt?NMlK5gm(QX(F%}#>9`>7u=E}y!kzF!E zr|=K(i?M^iHp@w#LR%W%ROqdG5>Z*#PUy31>~IYnemTnv3@Wy>Lt@S}qi3c?p-6$9 z$_P!Q%#$i`ffYV4Ks|(e>S8GMm|rYNX`v2B-+|juxZMHCDB9AEtenrC7+3FwDN4rs zyWW2P-TRvF|1cJ6&7gPaB+PoVg=utGdr=BElyPeiaXLIFE=@IwTO0KeCC*G+Vj`$h zdH|7OkN>gX_lxRgeAc}}A@6kIccW}>94lE2g-=1^pRFq^h!$U2^ zua8e&E!9JGO6GX36|Q$;Fudf4ZFl+|DjkY0zmo$x%q-6cDSfSbN9A~(`AV8Y{6>!H zoCB?{XVAYH7;m^+b7)IGx#^w_bD3pow^_U4M}~^3l_WZ&G9sk1cEH+j7mt+{^#SUl z#6k934~9lQg=3sXDf( za}Nu4ZmIQ$G9{CHT(52wrFh61_?#NDx!RnI5{d&8{i4oB1O2Wg-J9o(>4_;|^{)er z5yFCj=oS1jACpPdd2S9^+X`QnrnAqzIqQ7pF0&VC5K}~%ocsc zMLm$Bxl%r*6U|(vC;Iidr95Ab55GrPsflK=jXl{p9tl z)WNN@`|MH9Ivs;iQ0|?aq11s!RzTRtWihUz;PnDY1#w^8((bIdV`%BLxYQ?%u0v|2 zBLomzQPN!m(+#82)yJ)opvs5$YfuXXYJdR4^2U$iHkeMMB6riNecflJqI=zEpqO}I zYsrTh++4U*`~4B#ej&qr9f?q$S!dcObZ@}|`0(Gsk=vkXWfYn8<3Nxpu-PI)dI-itw5Qo5GXLwj;SVMUS@QJywm z+tZXm>+>cLkA2|oksIawYP=~X(%^H2ih9TV$%N}!?V?-I7y`jn==-KoDQj&j# z9~VfGCdpYDT<9!ayn4ere$A0=VA^>Kczd?*NLBAvP%8U7?u-YrYJAaTfLujc8i{5% zC>sGcggkAyo?(nX0Fl`rwe3iz6_Yv1*y9wF|BQ|R=;n1i8!98_nzvLP?;;q*9+d&_ zxk}Uf#g?r8)j^sT2A}=A{Rz0pvPz;&2mVxe1gVjv2XNC((~9HTb|?>SW-PfZl~xAz zuKGkp>%l5^svER{j|7vasn5~8cPK8>WzZym2d_VO#NUuNubTo`IE^jXCZkYhAW&++l@h^5TO%>?IeXU{5&e zxn`xWvl`+DZIh(Lh7yTuTc*urN!#PoBI4_XUt9OCQ;430y!Ii+&|!v`w2!l^+D=wY zV{Z_QivF2#+$a))v}@|1)wGe0u@d_?N@G0T2w&OI84ody1}t5>x4FGGvd&fCsF)-3 z$SX8IY4s_Ix0eHkWXCD-6uuNM=;B$w+6)BlUU1tz;4KEd;l?mhdP%sXfz2G@LW6f? z`CAiL1-H>jD-at&cC;~Gc8Fiqw`$>T4b!cz#dE}gJwPucT(iC9k4@w-or1(48)}CO z3EE5k{V4cr0@r53c$Fk}w&&jP=JXXb@~J|X+qryL^b`T|0LaQv?}Qo%OfUX*MVz)uv|NvG#^Nit7qC6cW_eX_btV~ z87Mdl23hS==l7}VQ|14KaFY|9mpZe9KuaIjfT85p+u_Ln8)noS2tuNdr`T=wL zQz-#WDSqC-od0*k+C|W*qc*`Of?oC6j`zqYMcE=Tlc?u}E!@Iddz+-A#z9NFmp09P z)(GM`K*e{1VV>`F!yKh+c{~{-@ySGWCuApXo@j>TrN;2U`c$&awcPa}L8EzvJ;z^0 z+r~tcj!}b_isJQcgPa4AP2lS)zywlR1jfwX^#9P;zpMYrYs{?w5x6n2GyYd_+twSm zKWRtqIi-38S#dN7G(-ZEgqx~??14X-+aZTkh`+|Yf2WE%P)4(}AtLLVPks8GYE5E8 z^mKQ#zbOa_^7A(z>ob0TU!lD-^f2zNeY*CGi%%pBhfcgA+2?YTahqwIIX*#$B>V?n z<-wA2+1u$Gf#drzPayZ_`8Fl?b}eALM$n@o;em}H1tXD%ITe}D z6Is=lURMAvMA4cw85Re}K(`2=>X@C6Dj5q}NtE!7+F5x*;F$g^p?0w5cBwaP-wU&63ZrF$vWHWH&br1JLT8yHs8Jbp<`0rf7A6(R zf|d%@hzF)dzeTN>xi0)kgEqy6mI~6o(U^9Elgc5fqA`-_%+-ZXe2m}XBoY)L)f98- zGin&N%HKtRV+ZkM@d(6V=OK|Jk7$r#(4lwm3>m*GwCKdu*EJVhM4s3Jk8Rff%Uh?_ zSE2dapX2jUflE;_Lz8=p4^cQ+CUZY5XqTF2i|_kcLwJpa=n+`F^~u8glL#}LAmID! zI&Gi8BMUQ0X~?9LNzcD7(u^&F1g3%XceTNCI0}DfT&VC0o&^-bps%SQ$ir!2@~38< zlDx#UYsE32V=z5RT+hXph1i}a$R;#r`OUzshk2q{tJQb}c7+kod$`g$Kg0WJbdOQ= zs(6asCP(z|C>g82P{S{lT8o2O@gjmi;!V(QItMTy_-f06j7*)-9Li8f&QwEFgrV)L zhuAPl1}6d6r@J9PiYr8FDB0S#k+tB^hbR$3&H>P?@d6>Y9*5AN@NrUvls{m);_cm4Pm32Zo$)3V zKiAh{aLH-W^;%s?qFXboYh?Sms^FWgXazbspWZnI%&`eIf1~%G#3tyUb%7{LPJ5`~ zph7o92o8wliHSZ)-LG!GiSQLlvBPM2lO-9X?IY(I5XqkbrNpdEAajtQ!$^kkK|%2) ztQg!FQ0T?nfPC*XRp;5*2RP>NIi%Ow>YlgzTxKvy6_J?Pr#I;6j z8c)+!Nou?*YPJrDesCg(N|nYt8`TZ!AN_rk4T5TOA*meGtv7@S|FmpE+M7z*U-6BZ zb?i-SHSNKUBLWnptv{G=GXRlgzeAd4_uK*XFaeOP<3m`@c%HLyLp z3DApv8(vhyyxW}!p`HJYg7Tx8<3x(V#QG(7c!$$~YwiDxg80;%IE#^F;!@A@;&!F z6+Z^ZG+{vrOE3|()kTe|a$h5At&SA7t$WlQd$lj|h{}B+R@FYf4?nu)@D^{4Gnx&a z3Clx&Mrx}r{ma>GtS;KEBhiu02MezN@9bn939v*xS^zW>`e)bEMb^@3^=Z41wbXmt zWqk40IR|CAxF>2D*=uK?sik``)D7s)MB+fhhNb6aB^uwUu6c<_OItEjOC%%?NY6H6 z@GU!~W5yI%a3LI&E?2~cczU?t4jtQ$3Qg5Hs7~hsa5~ncJ z#3NAkTha$(?ujeS3WAfu-vd%0xb_sLQ$qiD?I<&@#Hxw6L&3#wdtHNA4D%!xfg5o| z70Cp29!kQgRatw`)EdRFhP$l$U|xY@XHP#zK|2$l3f$FqrnhfS=Th4mnwPyXtf?+) z410(ciWP+z7}RZx6VLlq)Mo`i4e7z0I?DBZeZ0g7Jjd2-D-2FvV+ufoP5ELET?XJ3 zCp2Hsx_<&>ZH;{02N6`C0gPb_I zq5LDS<$n()y8iw4dgb2>ZnbNKfnuB%A%RGY-@{sxT2pefz{K6wypWa2h3F`yn-IWL zCx!4JVjM|_S)eCwRfQ6pm%LC8-oNp!1vO`L!=TzWybNs)C$fsEzc%2|-I38w*6LA) z(OwMl6e)Lr$Hw&ffiPEQgB%fvmF8%i;*M=Ma5G?L7 zygRkg8eQR{>c-rJ2M7-3nnnPKXNTTzQ^8pCZm9t zu+=Emg=bxQX6Vdwd)`B@GKLv7W$QMIphEYHnwwFhkj%G=n4ekEj37)lVu)20Yg`cZ z&cld{;WVKpNurUKeuT$~ZBEF8H4MR6{G%Ym*}n!^V^zxAyi)OcwI6!F zqU`KzK>~m-O=hV2TgE66A|w=0C}shKMmq?@?v=t=VQ zJABiU!A3ROEjX=;3_y!V+_;UX1cMu%YR2TTqmW`|9v$L8&Yt|lTh#^$&VjO_oVHNb7(rvEDs zM0}NgR%sbG6ns<{9>_SY`)-)H$YaZYUvzCdV1m8S4H_LH&JG!cyVyV7V`6IieV4A8 zZtp2O^-nx9pP#TSAD7gytAAS&>};i_=OsLBwxT#I;zpW2kH5u(HwD z|0p4k{pEUAjVb#l#_Lb&*L~U#C>=zJ(|u( z`#DNMGa$gu_l0%66FN)q_E6iQu=k&^rbbV< zHw-f1^@U(oK)~}oq74^0=BP@9e9Q|ubJ`(I^;&;iu zRc101%c1hy#ygg_U3)^0mlhTWi+Oq_R3>>bk?@fE&`XD%XeBiaVP_(+2QW+zY+HlL z8C|4`VPm zf*yF2#AKtS3aw(=SGqTZ^A77(?!xgWUG(>CKOe6Jdc+@RI~)o?D=7Brm?9<@O$`Qf zcLvI##kD9TB4_b7j5Tgn4D0sh=&dXa%ij)+Iu)uC%tz#rKM2Mg_o)p5+uCD>Q3Fpp zO&EY`HeH&PVE4biHbS=q=5&++g(rCnGRJ#9vu3R>4DdM7!EFTD!4E<=8tX##Nyk{x zGq%0KE%UsBuzwQR$D8dyw^vV+^&#+dGa;^CQW{MC^BIJ5=LZ>eVw){*@C)(EipXZS z7()haO+1>PXGxXoWZ5)p zH#FNxPI&yfa@VbmAs0Nv1OriNN0DcX9!ZUzUz0W7+0Z>)i2}5;MSt5L?uh%v!uocE z$cHxIeq$$0d+u_wo**jElE3=(OHWO}HghnRgjp@}o>)CwS#61B6YIXCA}3-Do#@zB zOPKcgXXW8H&jmi4G+rXb73cwO#P?A9rB590xu<N)$5BV2g26fSO9jNxcMX9H-jR5~O%aA9d zfDj+$Bc(=)M9Kv6kK1*S(nqihIB7lK0T0{oth6|zBm zv?nRBmkq&BXoMZA|IA#CQM_jzLll<_EOwvCY9_1hc40nq2>$u3-IT|s^Dq$C ztjOZ#I(OtH=QKcd7fex7L=5qFtQ|ioNfm5-rpHYW$$YosH4LecGCCG_0Jf^BFZlu%dNC9jdxX|jETJL`y3g9MS8x)^`U3DiHRo^Fb80j) za}OKMV4jWBtY^3#Tud)E9ua~(2Qy~yxT6|Lj-&n&+6H%AlQs;L+UhI#EV(h zaN!KwRA{CbyX6gRuceqGRU-Ck>feT|kSK!{_zU>+o+pyM^qHk`srwxMBdi8fxlb;R zFSE=(U^<6#xSY)s$&!vYcE=N2>rc0>G4mgFaB3>TP+QG7@jc$7t$&TZp!$|S3QMqK zwn07BlQR~mS}(V+J>4tqeVA~JW*6*&rz=(5viA68+n`fjsx{mepzd8LM$QM6_#MWx z(*}??;_QuwLQ6{|d`k}`9sgcxMTs}W!bK>PWC}r0Yw0n|T zQ}*;8bgM>y!cM;9R1aC5ZK$@dx}DKkJ86R;(2fv&ZFQnvxO>119$hh8OKX)!%U3W8 zd882Ub^#T&x8V6K0Z-r*+EFaEm30GZ?c7|OWgPOm0fC3fY0nSv$sSG7mG|z<+!|g~ z+u>9ULN1~m$$-a}6v$;6DGLj;VJmPIxsH)(bd?Q}RzW;1reVB1a8zN#Vb!@%EoP(h zal&}(Q~h=ARb?GXA_Y5gbd{D4st{_;4R+GwuB!C&c3qqrj0wXxB*xGXLz+Ank4_3)8ePWbY7EU}1M9iv6{LB1 zb~`+^jTx`6t48dB^V&d7jDt;X3PAFC4$Nm}r2}n15b~LV|F*XUkLDyfZ9?hbbXg7^z+0ZlAcRo?Z(`8vI^hc5P5bIK?$4p#jw!>Il z2lg_Dx(wwFR%xiJZ(2=SN=f6d zvM<)cdsx7yR_|vJP`U8xMV`Z9=)6T=Zs6&#HjW)PEF3JQ-dv&Rag_PDG1n@p!B(ar zNqVbj*2iX@tHsLXnJa`F#cgJQ8cAyLx}3`J3Hmb!7FBP%9_ZPcxxiHFw&Htq+f4#^I zzp)A4FpEc*T>XBj7(%Fciw&gv7sO6!CD3Vlny6Dv;&+tMFI*e7(8*Rm%J*R{Hr+r3 zs>2Y|*45@5ue=UD4)qCAzLwaYe9|kg^3OKIY;2F-6#OuBdU}$})s3R>8iT##ZYMw?*q$4q+SiHL+pHQf?y6|(Asq^8NerK3J_~Ra@ zfgW2H#7nAhU1vvHr3O393}Kp?k0bCE=v8Pzniw-7qXLYZ7wu|Ec#&9px;3#Sz4MzB zNoB2SxRQhOt%R|^ds!Gg?U)&pyE^1%v$?eHak+UxLK<#=;ZO!Nq!b%S+sNe+zLtj8 z|I*02?xz*vS78EFExZZu|&N*?O1Zs56@)c#}K8|5p=wYi_yW>f40u))O1XbJT=v z4>tqhwL?OBFA^6I*~dX_aQWz1vCG|dzr_fue;3atu>G|1qOME5&y!4Q`ROpbY5nep z)d}*dJ$8NmM&SaKo=X{|PeXGvy#4$IF%U2bJaox*X7XGXFfg%p7-}k~^qTup$t?&kbkL?P|eB)#F(w?U9R~RS)n( zcGZZNk{lJI&OQbM!45U_ZOdM!L|+9N*9yrtuTjBiAG>qLzdz8Os+e<5-GJ&oO>`%d z+^GG#`Om>gBqdh$6?qQz?aj(VoZ|30Qt2o53@r!(?f%0v>tQ<8ulN-kQ27S3-pOVV0U@Abo7?uJCjdG*zDw4#GbRrWe~@vazlOtYp;1ennf zV)<(`ew!Z-6$M6(RsUxUVlrNZgol_!L)41fF}cm#1z5XE#dJ3@L@n%D(9wh>FH=Ed zftPHmdQBx~ftxF#67ac}D2z*drdvwEvLnqL_Q&~?yymqA3Km@NN*tpP^mgRl)-=Tfy5ZUP6d&t29*@SXf{6p#F{8R z`B2wp29%9iA5db9FA{>tTLXuRU@ud`#|umTvHi7i~HjQEC*0Yr77FVEnq5%5C%uwC_GI@*8~!*0G{7st~kWlK#wc1 zM(=*ea)N5<;VTj3d*n+Ke4-|ga=F<`>%9r&<=_~uDahNw+J;Q6xJ~@{04Y73D!Q#f zZWF81FJHneEwS%@$l4KoRerH=iU5ee%MvkkqxVUBvO*0F{v%I z&hBZiB_>tW)XO#w(5WSvt=*}n=UVpwhnv8_;2NG&FTOQn-K8U62ZuUHo%wacR_pXn zdLDQW(gQRYPSZqQY*CZ*@9a&L7Z_`DP^wStqoXhrCUB)6nigE?N{CW&$g(I5hy9zF zrNg0+@~lWX-GLqs3oB;!qRiCjlkvwSFF4#DvyTAyU1k!y=kKX89+g-bd5r8#4%g#e z@aFcX!}FrNsX8ydOQfXOZP!tplEkHV_yUbe=aW-JUGyRfgD;uZO-C9i5J)xOyPv7q zUWk`}%4g+*;#RhcoP;=A(2)26vEmj<^B8%7@>aa+Ex5620nUD-m=VaRmkH_|agPAR!=xPuA%m|ET{QPCm_v(75C0 zmpkM@sy0y+eIEz7jM1~g#d?`+%JK*B3tBxOltSZ{j-22=tn2zNXc+22zlL$9mUxxS z0P)~6@`ICLD|&@0W zo*$QF^TZ(c#-g&G&b{ZGl|*JxU{T$)!hg^ckCJ?3QkI`$ z&Sqm$vB2?el*w02d$Nh6SK`Yvp0=LnnUVzrUB-J>V-$eL`Vrm&WF}om>;eXlmO0n(C|P zkfgO)zSHEsyfMaD=xB~XJ9XlRv6!d5ED!f{@KDdWvHq=63R9*)@OQKsr*@4ADZ=Ge zEc%;Jnx@W*U_w>~4}DeC#n7lmLpvZ{ajf&{kz}d-5s^7Qy2NX3W_SnFJ9G?SMVhvL zeizLGl<0Y}4+a?hn;l~j;l`*#QKC!0X9|Z?AyyTGfQ8yFc(h&xiMj*~?{n^HzeKu< z&)+>?#Dh}=-c|zwH}EGixCv5%u@(veTi8Xr30HVn87Q^ID{-1dr>k2fKw)x9$Tng)5A^PrQ>0fae<6JLGf4WhbE+F z88j|L4mY58=$OI2VZIsT3%}4lJ3)*htr%!!vIpXc9i~?`iI;W+FX^O>;r!w++(}W3 zYY`UssyIRpp4zZsL+r$+Mc+owjd|!a{m8;~|*P)*u zI3L!d9R8f$POC}}!u0O8p03Q}fH;%C3I18uP(CQpmo0qBNse34%YoUlbS<5Z4G3TkVs0*MpXAFNlkl!g2)7@hje?p-i{DCTYn-t)KW) z1&227WvFEBrcUMz)lscj^u^2tB_tswR-}rcv&umq33_0pLeA)@W4k~WdY#cH zixAs!WK1KTSWP3&%puchM{pF=GC6~etStX+83;I9K_WPIjSG~B_)eNbKGdiqtHL@^oO#6X}M|_AlB3l;#(+d0TB<9c*7JieY3M$2XEMs+I*2x`?4iM9) zIp0J?E%8z_3;aSq=CzfVgzyiYBTJbXgX%`ik@0FBTXZ93&J46#ry=gOyxL#V-)}@I z^;xQbfj+}lqQI9Bdv1q7w)3h)NeV55csDLgmO*2h$3_$T8=C1Q9LCUr_L_>Cf)uCp zShN@kQxUt|Q(PJG(=(slem8yg=OA(db%by-QTt-B6%}3fz>0!8B1X-sXT=P?7r6NT zq*C(yYUff&IsYv)V&!cLRD7bMPAb5i&^|B$=ZV*C0KUED`)xrO8*fU&<_CRFmT1!> zmqpGwy&AwzYk^(bOJ;#xyDngnnQWVF{)gn>&6~Y*DZ1^Sv}~)3wewsS_@*a(=Ta#k zaN+Whe`mh92U?yJSsHEIY!-NxpMaU>{1peNuNie~r4|+pc<;)HFtdXz*7N#)TS#75KTs=kS_m9cWp;%$ak_GV(8#+!noP->+Ob zf0p?da!z;;2Bx8Hia%N-SCEWE^j&+NYcgWQH;|+K5aML7LXNmf9vX3CnOG=C=RZH- zqH-@CGnJYCa)HEoSuwGeDYNEpbg`dj?2IulJTqze~l)P}cH9yXgK1BbucO8bcn@q?kxzb4@ zS&R%bX_x%Ux8#$br+y7?VhDI6kU5v7|8EG3n3q?PXiO0> z4*CHH=TpvMk4=X<2qC1JmOz$SE{Od2zqP}?ahh1LPlK&!vY@4n#yL=wTTk?l%ge|Yo6TM8{Hg?S(_VpXMaw;;a9_XhEoC(w+wz698jv!rVS*uzyE%D zvaO(jE4jS9vGNV`u>{Whh^tf|2pGtdiMgFA5XU~;T4incLqWd;^|*$ZMgMJ33~v6gx+8ROyy31Nu^Z)z!yp8JB=XJ0fY*AF*F*M~6|skrYx)9-NWG2?al* z;3VirwLs!+wGrZyO(Z-SR_zx30O4~m?vt=jERP!qRXGmYKYIt_1QQirIxF8$tE?h6 zn|4M<*wf=Zfn4R58Q7@xqi!ow6`5_Ep&S|!>Krq|Mjul{K8C(Zw~QlV43;3v7Qe&@ zHfTgFtB7FJ225(H>z)Awo+K)@+`|Y;FEfM0) zHhxrI2HYHKRwYW~iN2>)F3RE96>Chxmk%SlR(vmWeP(CJk^Y6y1NsolxM)kU94EoT zTv@v#!gEz{Lq|4spPK5&2R<5s;TqfEyr8KTXNt|30jLZ0Bcnd`1i9r8QQj9o6)d9{L`Qq}3 zI>;9%6>~`#%3nL|#f%%^P6BCDx^j?9fVWLkIaJhN4ZOeS)D>YKTO0`EzC%HkK#GUj z=H-~N?aeDY>DC8a55q@ZD;=FP!pOZscKR(&&3B&2;#k~2{ERIu_y~L97vq9N>jyFa z)ZzZ8Y)ltQs}4NU?XwdF_$)%%8Uw^^B)Gw7Cu4 zl~>ls&i_l=+^)lMhY;4TTDJ@Udw+?tYQadYcx=6Sa>GD$Ff(qwH-thTRXALHB||jD zx>*^IZ%`DeUbsNmCg$pd0OoEGY%T_-ARUaEN;_g$%N3J1=-MAQ=TH33oZdZfj)Kde zlqkbY7klzF6Tx^DD`~Ft6n(CLf4}t9bdK~1r8En~X^?ZT1axxo^R{t2i02~^8W*=1 z7K}wqsbfh1(e!=?F@v9_6^v3+lhzBXAsw-bSR|0k;+Lq%2F8R)2?SH;~zMVQwpYX-8!DfLL;sjcA?{J#ek`d zvcDB$!eO@O?}hbh`-=;#4mQttu8Dy$kPM8yt6edphV&3H&VT&LDl~lj;8K394!f~9 zj6N@~Zru(K<|b_-$lQoN6z^Cf=2j>9PsTMeCMUzoiM|ZV5*CJ7P>Zje$nx-VA#Q*5 z!e2hwRUb14r3fX_eMX}@ZO;f(qn3|GrGclpHv3~__kPF%XS3*PFc<~7J6F$+w>wdP zU=+(*eLIXm^yU( zX)QO&+oauwrZC)iGM!&kT~(Nwyftq>qUQBf1JJS3bz-=Pu@PCe3UjiPTwiTJ=;vUq zl^bniuJueOiK#+KRJ4g>sZ9^m8bRmS-fCyxzOm8Ga?3E$4X?j+&`klr6=)giI!)HZ zR4qg^Rs|qjL`7zp={u<)_(C=36#4N@wPGve&RxV@6pCQ-p|7CWk0PFpm$}MI6oHbw zNy5~{5j>AFYtq*sTAOCnxm@i(BI0dAVB*N#zi%lh-ZpY$sUF`~If&f&HR0w}{bzl7BQRj?n)agq0s)m^=As{mxmxk0dj z#Zh)5z`_X9W>=oEBlF>Y+7GZUhCuCqGxD(iMec`4 zx1o&!u?zfDGG;d~a$wsUZaXiB`1O^TSUx(%i61w5O)U9|sf|Jv<>2(n9}zT|hnWos z;J@tcU!?2qIa#%P$mYMm<-Y_lP3Z(Z^dLG(;<7lF26GJdih!{&09=x0H85ZIZ|Y_R zZV13atbX@)VAc^sT2q}0TrK+; zpxkAl&^O*Tyhl2YJNp;@>45Flz!t>}bn%u|n(@!lF#P@0tiK2jzZYnIW$WH$MT}PR z25))cJTkiay{pLcnzrD9Ti0DULkzoiv`tXa!B}Nsf1@_1TC?TRv8Z!x->n1Z1-qb2 zz!Gaei@@5i>jot>Muk{9aODu;Zey!9X2y?O1GIZqHMG~U8f%jKZB z+h4qWLwxlN_G-J$R1qIm+!uV8EgPDuIJtV+WIAf8eVY8b-RIy`USmNtZV$i@HdJ3X zq7cfl!@SPp-wkwxompl%HJp3`r3Q-*WqL>EpB@#s7J%>F z0R`^tCN_JzbBo2@AB@1bQ(fV1hel>~S%@*mUJLRDf=O5im(5YgOW0UemA1sjjvw3NV7goWFWuIkgHes}flUhkjfAXg3| zzb_(o#Eu+rqSWy z2&$~oq@!UIz}JmufHw1c0Y$;iQ9i9_PKE5LQl-HoG7`~>M#eEnBY!lQKpq+BVYv2C z5+eXT!a2w=y>1a1^Zc{WhX%eUnlB#i=8;!LHZp+-yhrzQFC@7XndR*7%qnA9v?ZCd zg(i~v;!Mm8ht(N&DZ{-_+YxxIVQgjfoa!ds$I}fy$y;~i!^JtRMp%WN(Xho3Xkx@D zj~ul!HL_pG;}gSU=*Q65wU6!zp0K4u>nizL`xKCka)3vVboAH7)7vZzUXiJ@6PMf< zO*t-!|0GeGQ&pAIlS7TLVQ5F(zN6GA{i5ib4f`B9I)pMGSy)NMkuA}!F7vt?7s>ca(!91>tNs4fnYletS&!cg# z#ye>)i&PdOxnRykDnuQ*?99|19)7!8)kLSXA^M?wzGAPC5W9dMUX`rT$=YYZ*54yp zXA#k0A#q;G_ph)c!W=aTu?9&ym*#0ne`t@OnS5%`K`&-o){rC=^YlT#;n-ruUy+y} z!#lVcvNbj5IRF(57Z!_yuQE3=0`IV+-o%~$CO-~?txQcDMj0_#& zdtGm%l18n#LQ~tbC{K+cPN|5QES=NFfxL)f_-r>j$%D=4xRH!j470|9x3{6yD!H{- zZNpg9+DPV6lC_vw6$u^z%#juE6Yrff%`5j2T`@3!tTmJvD@VcMdau^85Ew?EUIfb_ z+9Xw=VLW+BaBN`dx^!(H+qj^d2g z!8yy)U9~u-jiNL)1P>5OEdFOJpq^^?7e$WbOS#T3WJbAF^Ut-&)MI}i`}PzZJ3Wd4 zo$;7fFQ?YQT>?;1;UcVc<2 zMjvuRyj1qI$f*|*VPD41NJlEGVxLtc)&e$ z2i&al4V?38OTtBtj-l@q(2OKkSN6hWu8ZFxOjv{_=JS8v+2z1kNS~m$X}3v;R;q2U z-kxQqz(pBt$3$tE99@o)Tdv8K0iVd2lUZd{nnujQ9IE)F&Yz{|sAEP;H{V>kH(&}I ze>-8R&!=gAj+ou7Zh=3wB6YE}f&N)ii!M zrw08I`Q4dLMYN0bv5HKX>SK(zVfGxmJR;hSn|fw=p~km35~9|Rc4o-c(#}?cFRHZi zT+dR?eDSf0kK+6na5ThDF;FET6i35QOJBnlva*`=(X5sXPy&g{ahhUG#ZHxCo=0@V0m5WrNW0xDF~r3I zYLfYr*VY5R$q6BfA%MLha@9S6=(tV2TG0V`3#(vgacJ#2eFE3Um~;He8D-xESORL= z(vg*eFQ=Z07|Hwg9s@4ka*Z8Zu?CQs=-M6`OoHES+{#LPdTQgM0vVtHd(=o@dZg-C zZ54M@$3D?sg0#3~MQbgp4BvFsI@LJhF(OM%rj*YYBmQ+hCW|Qqc z_lwQ?NbqpFkLG#RqiMX4RKMDPF)G7n<@(R# zPYBw-n3(auF)<61(1>C~)>+j2y-X8C-@5jYv9oEjTzeDUV4sG7vYew6P_A>)?c;3wI zZk^lSS<`oI)-T!VGi1ZkwHp}=?yvN06CIwBy2GA)p`5TXp7dpNA$coJlc4;rAGpQsgH|*bP~P4&nWf_p?CAc`Qz1Ak|w!np%o|f@RNy%39{} z7E40T3jA2l0<4Bp0&cg2+^bw=ezOMlNr?$Vfn+3+V3kU@dMa|bfW&Zr-=A+*tUgzS zL6O9z3Fh7uy2mH9l*<9(gmR#mJrkLyNMKaK-vTrS;p_&_PVs;>9s(6iN6Vi~NGIC5 z2oWyA5|%`3g@tRU+$A8>2@S=jfraC+!NCnUFBd8j!4dT35R6otSs=iL6AXaLW!!=v}T1e$W4e4@VAl zk3a8;|CUFWddcZlTcq}92fPEx` z)dzN`=VCL1YVTA z{nll-0!T@gp>}*W-U89E#P=q$zR#j^uN$&$JokJxlu#BUOO~38JKa|!2GeP)pZmoZ zt(Um=ZJnvOX5`?EUlg{*U*CAQY?zA zwmmzpoD2sojv)4apv!N%y(7jtSWP{!c6hC2T9(ilIEq1fkz;E*=cAqI0O=&yb-?YD z%g?rxQPvc7N3}o(BnBz*WcTB1e%6S>>l~H7Qe2$i*aAJ_C;Njaj1yuQOT-yP7_1P$ z?HNIj@-URJ{g3fM1XJ9`kh$d0TJtUmaSOt1X6ev<=>YXp)al0 zCL$NHZqHY&9t2}5?Y%mrzBTU$_{$f= z4+rKIjogX|V+rHp^8q0J7 zP^$&BE`iFSEkS{eQ;O_KE2sjQ_EZJZgSDQ*$lOVtIpLiX(lj6gWP_8Coxgz<$i$fh z%;uE8zzhCPI9m{x#g~!@G>g(Y=C_F!fFbhK;qt`o3J5iafJp^dgtr>xdGugFRM0?F zpxiT`0tRYBC%6)m#u7tgOSG}v;wxm5aI+(J zqrWxX>x#+7dibsj6i;c2zIwQ;A$09fKLS}P93ju7;%1^SHNh0PZ*P*J z!&wjr7v{!{wW5kx77DPj)TIIuus}j{`{hU!aGsb5^$dUIeruhsp+Oj_ijYjGT=;~E z8C$g+-I+}aizZwwQ_R4R2STVq1KBH?x{bfzg&8-j<6?y9)E!xD#mnJ4P0+ z&izk_J1+n ze^*>%`{(V9+p!G%-}%ym+NR+M`S)oOjIdowK$VV|^_iozELxdF*!!+;Z<;usOB{CY z#Mh{IV8gnaVif!*`j7>7K1u=>_M#EGU|@C}afCky;6+*zr-M31X zZft4fd3jX-6-eiqz|^w~k1&OumG`srGWgy2Qcq4O!iQuFWJ44HaEml_VYkaEh2eIqp-r1A_qGtqlad_#X(w_Or*@DugNzGR3S)`TR(yCF^R-gIBq6R7g zV(z_VaVn+jH^4TJU+BM>l>PslM85b zl`W-_)sS=S@q~;eRkWpC?2aXi_6=R*Ex_aQ3>NhOsA8APhF~xM*r>benUKR1!D--j zx|-^!BKy;lc5EnD*CH-Z60k-?m{-eKS`srfx72@{nforLacxK?PFu`>o6W>J&hT*P z_IT|`{1sJ;29`*e7$2t^8t8I0?5S2XvwFH!Z0Ho4SX33vSW*`}5Qm|jSH)AcQFG)?n7?wQ9eTQaF zdgkli!ZE~|zewSR(mEe+Iy1G^q+@j*w;4?fa(Hyy(?gIB#UGAyd3=#M$l5*z<5r7w z*%Ii$RR+KDSc7#K_FJB;%}ovn9*e)Z4z6iDfH+W8!pb^jWnG|of+mnv!2pJMWr&qW z9+6HOKD5aI@Q;f@HCJ49JQVI>RMZ_y248Q;We2F0vUQubL~DTu<&J<9zKqNRhuPQ^ z8Wb)1zWt@sptl6f9HTi0$M?${JhWs-hR;<+#q?MS)LQzLkAYNnCyZpJvthmxN2#_Z z;p=!e1MjS^JO0EObVTCwrmUcm*r)zJ!(XU@+bo$3eMSeLwsYpp5s6;O@D4K()SwYTyH#JClZD}p>hU?evAIsI}?SS3n5 z{B_xVXEaF1V`jeigEZ1gh}`N)n|o^)^uvQSLO&Yb7b3SNQ42Nl@w}(8k7kSg3sE)V z;34UW^vr$cOv=#PUZW-EWKM?GC!<(Od%eH?4S_EA6c!2o!m&FB9o2SvHa~8+9=aE@$-oqCCQe?IHCk_|wt<%?@plbJfc*1f&tQPp*|nvd zfq{e&SiJO;U_$aZ?P-dg-a`wOpb1S+a_r5=q?&~dPgfoTg{)+8bJvW;hMN-*h;z_! z*cv0Fmk7TQid|Z^mg_1>;M2Dx_@E)%ZL91d;X7oD>KtS@PM(hr96@v@-_)^B&L!S zX0yhY4o-8AIJ{+bECK-~3WC^Rc`@bvD)C?W1FPTi^@NxSo5aA2l;yz0fEP$8l}{>l zuof4Mynig5u`lvun-_dt?d{i%vdn!SKiOZV*-p4#vTmlm$Puw3^T;uC>zN~I#tchH zNQ~w{D=B8MMbID$gXZ{U!GQ_m%J_%C4T<|#)fLE6vl2#NCsE;|6Eb$f=I6izICmnC zhhOpqd08D2mq$lL{B`c{#I>OV2!-PGN5zep?;+hI$K~IA;fj$P-X8Y_GwP8w#uJ#s z!|^Uw=NTR2`^@qa5RppdqK`F{D?%h^sK`yOwCxd+N01fIFfGbM#*MBJn!++h8I^gh zCz;MDROO5pD#@wDGC9WeOsb1FiD8nhsrSjbENM#!OVe5B+_81UHPQvwr8T0MlUp1_ zSewI)sg*?)eofgiC&%$CV9O|pMix7@s9M%zGFPqTEs0sMSD)!1lt$kpqS8!E%8sg6 zX{EIr7$=13#iIv7 zM@XVYy2WdiA@E=~G9EV&>)!K!YV94et>y7G-OLGje(r71|7hO)HZJ_bt)$ab^QWP$ z0us{+1fpz!)-PuBU{K&-{axEjb$Hx~RCx}2yOGSRAAmJshb7ng^pBiwL1{clTHA0k zw_}bbhwruHL-NIrYZeT`c*_zC7&O^k$@P0^5qqN&3x)GnN7m!qQz@0@93y9twFo0VX_9ZD+>Ioeo z=*!b?Fb2V27XUkSM+)L0!ACD$FT`JTArCInC+qG>$m?~5-`TEVqQ4i%t8ilrBaqYm zF9?Y?<3d_I{6Nr}r3)`(dKKkh-Rc$VJShA0dQxa-Lt34Gxk8N@D)ptSDzcvq?Y6WA z7H3+1s&L)m{Pk)nK}%nd<*s>RC9W#x;9NuxEPTM+(|o|!CW^n@@&kJ<#0Wg42+cws zNUb_7)wn3M`!f7jWRo0pPe=Bkm%VVCKE+{~^*~ov79f<0Brd4z!1*4*>{=5bwJsW0 zII8Vr(P6KEytUcCO?1~Izr0U$$&16{U=mekl&+=Mgt)g{@2+dl!5TZre3KH=CCTsJ zK)@;jWcGHy1GT%IGqK#X2d50_1OWJ)tPhAoEkPP%sK;m=l0Ej5S~DcI=N;slO(Q!P z0WiZB8puXaWf8=RFdTcbmb|hFl93%|$Jm-GlXWuPwTLFH%kmO)iUlF^i^$mzUwV28 zC$>Xue+yFJ`CcD=jqDot86K$;08OiC7}wlaT#nc7w^&U9lC-rcFRyzYSxB+VzJbaH zFAh!fEx}85(G7>&n=jY*7Y3PxCpWF{fW zOA`!7N?DC~1Rr%nfCWJ1Y9&%H`yTvd31l}h)B+|baGh(ZHW zJYrV>e358f3gpaFHEG5E6)hZ8M*vp$dPtt{*}2e^8I%ZW;4lK<>bw+6a#Z}Nxp`;? zK+LY_D2(HBNlTQ}=b%L*gtz3X!)kaT&iD%42nHB}%>9Aw*8ASO0PD`8Y`_apkO|IqT^|xzfqH8%X z&{!rD1jBIr9{v8%84SF0Tqa%Mw(er=pKe<^1h(f-yIo?RstraW;p=HY$A!g+vNKpD zySJb)XF|sUR?L`I7KjdfBUc;S1cX4tMvXUoe7t_R9#-PRCy=h~b*|*! z&`(}n8S7}TvbwXtZ-fe804#qGoPTls|5Y7<@gG&kzcJ-+G||`7lb6@iqt|l)0DwaO z#rH4Y{tp!NKMgCa9E|@!meHDE+Q=)*xgaj6C<+*2_GIls%oYZ*B=w|v1cHCi1r(Iw zi>RITHCBsTi>DQfU$#lm>kG}~wWB0d3rR^CWTHyU&s|B|4?nyc{RDsi-hOFeWO|wA zc}e>D$!ZJ(M?w-LMwD^1b4mi6&{c173vIP^%M0zdbD;V`{$Vx^aTC6+3TtKD&t*6^ z%`}@5cFRt$-<~uY1-bA|{mDn+lYu9kLf%_2+hhKYU$fe)U0XAm!IYh3$dpRML?ARE zWC%`^;1=-`(~GY+>rYI!>N?EXcKN;CC&_1gcuz8sQoTtG7q0yJHlCz9kxHXgKYH6f zY;k}{on7uPS%R@m`Ng&Nf{vFE)8|WPHuDRmCl> zm2h%gjQ|b~!qX=_xp9(iQj$asSRG;q@`m3wmfn`G@>Y+|HaJ=F*!t;Qmdun&%e`)X zyzeH@)h?}dX@5vnReyV1m9d!7=xV-r+-`@&A^1iSPhWa<{!hGsz7)&@>PAn`lzV;P zRte2URtvR4MY1ZdLvV6x>-+#6z13K6#q-@AYdhg6Q5-yOR9;Fcgs?h7V>rj4wgE0f zu3L;-jygXzF)Bi2ILV;mK8OKFeSo?|72$6}RV2%>=0Q#apgYDpNPU@Acq|C5eH8;L zeX%Z4cKDbikfN*%iBzbsA!T@=sc+r~SfUBSp7lY2e2vT9@yWWCMQKaaIXo>^y1B1j; z8A=(O$kIrpp_Q@lA{Y(obkecpPrY-)b*uMD} zN6QE72TLUr>9h0>D~pGw(ozvQE^CId{uzU~3^@>KveKDsT=p-ab${ACPZPH(H&>HU z>AFoL4aUffW^>ge>fafJUy1gHkCSwAS3VhD9iY{sxpf!nFdI;;$642CI6qO6i@>$M zV6|8e6xB`=7W!Va>J)OJRn|+Ma#&twe+@s`GSpsO;5QujJ;a#lG7j>~<{ z*+UvU!WR@Qy4#|ylx^s-gPWH|!2SsrTzn%lxM>sC&=uh|be6QI^94eh*3PK&DJga! zlcC-InHpUrIC5)^@{%O0zw3X>E%AG=m$H>U~nd9HJC3R-V;97pPs$7f1-Iyea5N$V-IqRH~QPmnv$Xv z>;(Luv_Y^M)_he)YuYeps4AdJ_`b)VRwSGe@N7hrNa{^XH$H*hWLaRX9PY7djg2xY z1`3Qnij{kxs7l$qS2wnNieSnoVsCl|yEg8>(_uMAf=z--8m`U%_SlCGpF}0c?M5k z&dU?MfU63hJZo#J1#cE}PI2P4S6#rch_D5QLm-FEcgNRC@>k&*H3{0ZiPXjgNhK%* zyxebDKLDK;a(=l$%{K0WE{LBO(plhqtzmwmUY$34lk_7C0}xUq(rL1F)CcJH%ix4L z7u-C>m9iZh;>U$hO!&H))M^>!;Q@L|Xi4Vdt+Tf*j^%SJ4v9G79#>$+iM`wvxqu4q z_(CCDavAQSe$ZeUxz6NaC45Vr)NXb)*^@AWEwLD~Ur7CYM--)9B#p6aaKAsGNN|%~ zTpn^p#=lwMWU+J!=Pk?q1iU!sYay=_2jz|*Z(AkyQ%VSVv^r98F3T_HThoI`NdUPr zf53Apy0cX#j#W-qqG7W+K%ov*hZ!&_wedKdK_TkW4zpnnyt`3GbDhlxV7_o3 zj;4_d;N`2B2b?Q_o?OrkRT6_u0LDAAeHnOSOM&EwU^YyhJH0!^eQ>Qi6pUZW;EwCSPF%t6;==_E9D#SUb z!1D+NRjJRjg)mG)Owqmz{n%w)#8K0*9@5H z&4fnn$MY!^49`gqbE%gB{@llG*fy0pt0NHoYdhi(f9~?^GZBonHTX;B=T(+|j{Y>a zq1!6|Mc1|iUl}yyt&M`y;gMzIy+YJM&*>}k!r|=Nt}? zGURwf5EOHjHVD)$br268m^g+O7cv&F3vdqcWEYfbon#ms_Z|$l2>4;J*QG0Q*vBok z)p(5Ez()vqlb@)%L1k+&$--1Qdk;T;xI8Ut`sE8+%J!MP1M4MNzw>TQ zBYc5x$#;=YZq9q)%w-7}iHdf0Zd9Z^ftEJR9=+23msYL}fOk zOTs1XSN%Xa@OVDzvsqxqVE`3SlqT3A&}fPvQ;Bi2!52lR%_BIv0jF#blzz|X4k06l z4$VN9&>QIlrsZYR-YAnjYz?I$=U;E@aBiSEO?JFF{fauPpCj)4fk$VaFlJ1XCH5%p zg-t(KmeMzV`)dLE9TW3?KG{PM-Ho{CL2wobwL#I3G#@^hn2!<*V>yxYTy)#RiFIpI z7c1B7%_j%)!aA)nZq}X6PJMwW0j3(8y&pW9Fk)voG1piKOZ9ViM!L2;>9MxDn-~2l zkYN^|wf^Y1! zSaPVL7Fg|w$5WR=VvVcVbqJQ8j@!I+IFzjBu(in(0|Q6*>$k_p>+8q*AF!u-82~V_ z?>D`SsH1m)-tIVP-G3nx)m+V6f_@=0xab=K+$0tg`eLH7Am{?>_)y)09>C;?K-`=8 z{j;Ywl_b^ec~uP+8Y%+vR!N`==bR3Y5u`l=IM*qj?)NXbq;|`G9)wGPXd^41EAXH_ zN(tgptJ=vi8t$O=%nm9#23J{|Cf(Mzr_{q*91pGO<73?M+LRXZ2_l1lgf3Oz9uR50 z^#M;k?k+095k8u-Qe)Vs?9(t@%-|_=e#5Xa^dPcm z|1$=}%)!pmlG5cQp(k`s;<}J-aKPrivV3{i)0+?2fezr#*{v3)K9&Vrz5-H2k-3J7ugU$XWjfrlTRNr2q%iR?SxC5qaY+=AyRdob zX8VKRGI2HU&REi+XT7jq{^VGdHKUE4neskaVpmX;sEiyj6Otx|if!|5DH+*u@);Tv z5{?a$j*tqX&j`kFjz7a-fz-{L9W3P}6&Op%DXwiW9p zMm{yS=O#4+?w`aF`-AlOPWg#jtDcl^vd;`+@D9{x&L@t(?K8Q%_ChJ(gje@f5G8)X zYizQo1O_7K_*aoGap>NdvK606ejcIvnuEz^qsg?I+=SfCAPKiKaUM3Si*Pwst}5nu zTt(>e27j{3c1(XL6$C)JlG}Rkg!z&Yhc0&6n0)ozdZKMB<|j;3pdE#iK_*TwGT#)5UJLwG}6o&3s@2*%(OoxLZ`TBdo4oSsm=`q?~l(x)~fV`K%;^FeH7w ze9*qsRjn-LjBJfRNopu7(HXNEruIE>q!_;!atl0O5e4$Vr_lr|>O}BU!Q6-4$L99X z-HZ8<;E}O#hZS>MOv>8CN%aPMST-}MapPV^qc{(?5E8*(^!8LBmY7z(J34Ea$8q=6 z!{6&iw%;f6e&`SD8*m>5g8W`FzY7t(dH!x=J4z>Z*@P*+vVSsQIaHO13^>jE81JjGd_w7Z2=S?i7cEx9wDjPq$}!+MJskZSSf z+po5p#R4=-qAm>g)XJt?>T?9NO9?}EEoz*ADb!BTY(B_9osl2a*)*a5Vs%e5FhE`W><2EVI)F<6}e&6m@2%+P8 zLa1Q0Uc(^=H;mE_Eg%v7`!iP^f6Ln=qL?KX)`%9|-%-1#cd(mPIxN|)DQ7)ed7lb; z-wm@S>H{iqpyCRp{R5@=mq=QObLfTB$uQ`4WrcK2)un9LLtsqJPH9Ha4GzOUmwADY z`g+swHsy!aXJD)^b-?;Ze8x5Wv3=6;?BGKzY1?ft{G%7HICVN9l@)yr%^}GPI_5r!i7NN2|XNMnJv(D3pH_wFty}KwD z<9i_=e%$SutR zf&sfy!CSolO5*`I1EM$OU!*WH|EqV-a(hfS-`f5D+~Luy-@Qju%ETi^yCsa~ajm<{7NN>&ZU4K|Y!g>Y`g9qKhd?#Dr|#VA-;NNeZV)>4CH<$%r= z>sC$W>yJ&5U(lr>6=r$>3z|8JBFWDElnJ8u_+4Jpfr$#%COQ0SzGY_8k(DcOW2e(N zJp8@h{ju_xyUF?1fb)0BURBJ31~l}u_kCtg!#>ZOaEH_#ii_}K=_`gBSE=87T1G}k z#PR-O{~~uw`<~Oc)})**2yjTqNF|a6w<}KTXWn9DB-grTnk%}BxNNGfmmO?#l56v$ zTW)sWN`kvntTNibZ)3oeOe(nDTM(-)L9{jDL z_7LHcwB$%6rmw#4K(1^RK8ZUxzgN$VEF)58Uuq7^I0suHIRph&1&D9baRKW=JV4(l0SJki{T3zCdn zGRnhrb(NjkbslHwk@Ai1z?*m`_C;)!IzKq*waQhRvj(Y zaO5pa_dmMI&3>!R5N?0Pdf&=(vE7kx&+QUi4%~O~s5DHFQJObonH#{#Tfd?8gJ7hK z+NC=aCVNB+dTEkqKMaKJQxYC)PNfkXDX_|5C93ct_#G2?Gv3>pYCleC@2Ft z5=5g8iSF=OI3KU7QUrPmm;*?I{)6fNP;2{*KF{kir&J2EydweBZUB$f-X`qcLEu*M zn91duK5zt4-fm@KVIf(>T&1|QDz7uQe&DJ9D+O|9Oz>~aBE`ZZJjV_5dBvUtu2DB` zHB9VQixu8v*hXv6C$LI^>ezxnbs|wCdYFj{6O2jcLQI~V(6$AFlBo00X48Md zxtA!lm>RG58P>^?rS;l*8J?1hg@bh^Z`l5&mOT{Sw*n>ws$cM(mjj7w1FEyLV!IOY zzHQaxCg9s>N$GfI_=nZjp2@vq!Mg zNeV6^@RRCotJntmW1AJ2uaM?id)sBh%@-c$hxk5)E{*r&Y2^n! zNZ)|!m|dcMQ8WjAPv{#m3e)m{mp1%2iQF?$c@En0Fj&OzG3c{ywb{X#Tra#ZH*ZYBP`)v?IlQn5Q_)b4z z8;K3B+PfTjVTdXs@vHx8t$NvWS_NlKp*VoptLP?YhBT?~G}r}ogq|^Cl~rK!B2dpP z01W6?&0khW5!W}Pd*(2S5-(Mvw7V%@o5^wdG6_XHF{#2(Fj>P{hPRt;MWH!qdZtEk zyPvij)m@v-phqAAU|>c&psJJ)y)sP+Z^F^Cu)3gV2n1#MLB%Sr z0~{~eH1PuFf$WfL=I?N6x&(%B!75U4M%+Pi8IsXcz>`59qTWDC4wer$pXj<_V{UTQ zW1|sl;}{dPQ_8iF&h`0AO@RjOR9bEVvNh(4HpRG3s?ILf&~E6!{bkHRp3wG%0toGT zrnVfk9_&BK?_n!ZsGndG+&HSgAZEg26AXi&%P1_{NtaEwsrVwWEJ12jqJBf*(A2~v z&?E4LmhP+U2NEyc9&$^g&(+GeH0bsx32=*0!}(?*NTdH2xn*j$!BTI#cVY~&eL6OCci->}8ZvUz`Q<$iyku=b+=yQXFhOL@iCI+`9=rqxJ zCS{1@Wvfl)UpY%uQ@(7XCJqP-hcF4bcrh7+8Xo$hE*|O?Wj-6+E4lr>U*;GjFdx>WJemy5BWUW5;i=ub`Xxmx;h~2 z277#lx7}rb<<5ol%wLWu4q|D=3z~X4K>I{xkan#!TOY_bXsf3E^6c;TBF6Q zT`^y~Bpns;F<%k)h8t~6)`%?K3jm5fWxu`&>m!7VYdY|5FJFWAT8I~ShF386r{+C2 znGa&XZ9~@)*K@dkj@Q=VN0jd_{gPY%!5s^!O`m%b>S1WukoXz?Bm3l=P};4FQMG~n zcfl;N1@uCokf7iRl@d&aaJjUQ92`VC!;pKHkT1G49l{6+mGk+bux3?QX)5r-MBo{D zaST_cI2bvKQUt!%Yw7N`$I#1r=XK5l#w{e!^>2XAZnJ(6-{SzsuU)JQmM?BLu_I{ zDZh;pKPjJh3qYv}i-6H+aq|&c$OzYo*5)H6QF8t+Kp-1m>hleFI)Xo7Ma&G7>EG_( z9x5?dsMlDMorWUS4T{VD%Qia!uqRL8|Sno!O8IS$7yw@ zE7ayNW0z&9(sXg7kh0s~wfefx;(G&(@4IXa5=KUfE%I#%f?89OPwDP@_T2IDiLH7a zVoQn|pxC>2(UOBY{nV)Z$(OfTJhqv`iKvi%;`pXH^%(V-*K6K>t;^KCI2oSdAZLx2yZOV82ISaEY4sG{;gGs#t0P z(lNAHkui9}3&u9)TciwyAKnLUvN+c_w;`L34fmN2pO*WSMvO#}M2tL1(TWch=liR0 zG>W*3zy82R{25-vso_yDeYpyLHw=m_02I+&+}n5(hg?AW@WXmP4{w$e?sYN_EPDT z7IMt4Hw=$3VqrtmoGFUiYd4DfBshMt`L!F;FPGMCl^jy=%Z;swj@k1NjD zz~GD(;b5?sk#vraSUo4$CHZW4YQh6yt=EF%DFwC^LQXFFo4vHRDAAe`3tmZBu5Gsh zW?+BeY|)w78ozp0K`2Nffu!|+T{NZdZGbD1sqx>tq_KQF+q zIrPW%+YLMJtksuYcow90C?v#^<8j`zpkN zEceV3|LO%`50QH1b*rjkAATKzHi98?8M8gnI?!5ceNHQiD1S(QomrsTy(WDr<45HC z(?PmyT1(LM&S#1ZaVf(qebcC$E9(4%J}RJVE8b1Uf=iKGtuCfkM%beL^0%RNXvp$e zdSBC$a&f8zG$w1D8Z`%UP9?vGyY+Z-PK&RXm0JXknp5NgXLfC{nTPD+Hn+D@ zqG1AOuM>RGHOUQeY7FJwpWiDyWSpvnYC!B-{J>p$5@!bG8H83iGlLCk!y`EiG3Wea4YMc9~H_M0Fu%OZLiixufhIqENmAXDJS?laKnP!ivnKLHhcSy z&cdkRcJ!zd+Vrr6w9}C}6G2qBWl$;+-~xWt$SoC^35hC{?hb(!)z$g=Fm|z~L)Z%D zu&%6U?mD9%!Q1k;Qhfq9rUuOC$#+u-O`?cVbsyfWuSUCLyKUjZe3mT`a2FFr0OufJ zk@;$MiV4|808?k>V24G7&ZPoE2(A|ok5T?fos4pfXm)k35Jm3+#A;73x0-b*exBm5Wgl{`ECCcDTQHtL#t6+5>p{IZ7-_tX)>p2!S~|9f5}oKsRk+BSyE0Dj zq+Py($5`xTNyA4$4Y#-5=EsQ0RM2c!xa3!K-K;)+-JCeUZlZuvIP+cJkr<8`_KCie z0EF}GW4D8^XTRo%#QoM#`qL|kP-!%I?0zyM(Q383>kLqDMI5+@uj)or`eu*w2MN&G zg+H%QN+YL~Nq!kL45cZNI3L&89sL$UsK%LzYETQyj96(Sw%<F~ZtUMkeQ15?2rv*aa^~>k8-(%9C)BlRu#>iAPuF{2jh5}zF!Nw%(hps_g$eJ}` z4is2y24Ev^E1r%fSHE*8?*+2YLjSv9u@#;QWDu}<$nG?*xMj&$=E$XZ>!t$-bv-=U ziW-~FD}q!#VcgG`hOe5td7O~YOset;cZIZfvvxU2k+VeElqi-#70Nk!Vo-aNc;Wc? z5H$ePK5L90Q8yp1iK$qi_Z-(qam)P~M@u-oVUa_NO&QjL-`l6}HwT8La%DNbe~yBa z@^TvN4bXkh_r56NwAF`LZ{?p4ZL9A<4wG$w6v-N zwI8p^$S%(P?sq^xWCeXMJDpNd)j|`%zHH;rrVr&_7ayYihglQI5x>{BVT9Ws0bjUx zhuL1dW}7=mjT;T1(MmQ}2<#X0 zTOm+aJ|m$6p?joaueVlUd&4$?2>q7(j#TRa1UIcLSsXMCp>X(gkD7z;;1Ulmkx%kE zS}Jqb1rB=F?PlvTKHF5WN+x3}oRZlE6w-vL#)qVxuh)Iy_jvEBRXUA6PgdrKIW@`^ zRb5tc&1Djn3Pt7fNF_WG0fu`QFSy)xZ}FScTrAKJZImcv!7zZ4dX7YfK3_dkK z*GDxjGg79WHC{9UgueaT9#}&`{ z8QACe*tq{vsa6+(^_q9#27GOhamoPT(4{+#FE*8Yf#Dg>BRC7!)zB0oo$7bR~7B z=VOF$GlGE01G*${ z-K-+@4`b?fp>yWWfVkGHM$ZU;0PXsG^L`fR-KKUo{t9LG&`j&5A=LWl5GGqWl`v5= zKKq3bzut9~Cs?ynvN~V?^qA=L>aj!%0JK)@bx}zZxN@=k+hudDDY3s1a3V}{iQoT! zRd!C%m3`Z~PsO$>Hde*1*sR!2R;(4%#feTf3Hxe-@e)$?PPXFtusNrjRYg$6qxJA0DdB!9?A&sL6>Th^7H0fVg z&cfacXLd853*L6OADdSN^iA2-n_G`VDGw=4N9XmSjal~glq7+;D`ga3^-TV zsn+%E#EMAxtZYoxYMJC|bmQ-OAY|0xr3(t(zqbm1#KRD|9e*6Z8oimtKb_68z(dB@ z1@QW4*;D!IqWg-V`{oPw>P_rT;b7j*)jQ0=*FOhX`#3Bjca_kUH$-JC15lF^-zmeh zGc(i&Q(&bLp3bLcD|#y$>MDM8m2k0^Co+yt>{hQdv8Q!wDbVd#PmK)&7{+!Pwfc`z zOiXSZgL~tLa2T;89O5Ahzem=uFq=dogu*1z$M83s-y`5B;8g0jJ1h)Vmd6Jj2>UeU zBxa{k{uuj4C-d^l-}bXrQ9&zFEv%Liy&a|<2LhKkBY0x)5O`YywJdz@V~v&^L_bK> zpKKsg8(J$-J5)1NOI<@h$&YtoHLaxmv!UbQQNKRZ|l##TK7DP z?HF>y(|f8)ZQplwyqs)V6Y!q6V`YsnU8mr{V7u8W@awRTeaOnbs%(3Nlmv%JO!{Q| zd>MbX6XPX(b`46S-C=rQ&|CBI5GVnrUlY;lDp3{P9)P)n8n^4vSFH;QUZhE7VONjA zo_^w6=eIBKn9Qg7?p>o*nQ&As%WFp^j+!fc`wJiS*I$?m9^HDsn+;* z<0b;xg|XAKT+Td>=0-fFxROZCR37P+vtFZVTd4m$RuVD19OX#w{PgyH-nwFD` zDUyrxh7_QC|Ne`yp7Sg@!c$}=ax_?F4Bu`X#c+I!IZsCT5zl){K7?=ki*mzXx-xdw zGTIW0)LdZ+s=c$A!P;Vt-;*}tm-cS52ED;lOfR)7DnhjYY>ME$^AlzVOpgBMVK^OL zaPoYK4v23-0jK8GruK&Oc^r+X?bQ~#J$W(REayW0GGV2O7-8J6oUyO;Y!#F77d_lW zSST~lv@i&wn8^x=i$Zts>?{|JK+y?ZtkJK&`@C2<_xHw~~M3)?v#E`Hg=zR+=y&RNMdhfuV>o{_{!Lhmr!?feT zAJHc(y()=u3Q!$h+dXv%B+p*&t2tbP3eo=DJEI2^WI>9T;irlrOz2U9OGv0@vcifq`H5gY{`EGr1A*siY zzdpnVp=`$${ra_2PU1oo#_e0S_A7~C__`0x;7;dyw$MA`z zbCBQ08K_Z}$Lg1JOq+&!XM3Ln0s7)MubgkwYnMFEh#$^v^_#BflMMrEjoLgbNVMuX zJea<;`Lomd2UCno6=j)*G^KO~`O`=5DU=f>jLai6_2T-#QYPu>gQ7ngfui~aRM^6$ufbD-+0^6k;5cvXF6yYPfSyJu?-l}&ts^`l(^WeYJFDjdRO?p{; zdDd9m5-=r)>rrLu>ZbPQqpVfI3)^*B#j2=nZ2fJM+~x{)=sQ4mL#S8MA*YwinJOy? z7{ST0FEIZ4j7+xm8*xh_s5QNG6$x~(V+}(8O94^B!=J}XKLKD#?_p-=9z7$aMw*^5eirJu`Tf|bfs(wQ=MW+G*4cBhN zj2aKBwR{rh84xMiAux4X6%PM(y8*=)+B%0>dU0v-H|`<5Dd|#5{njIHcdhP<&N z?A&mc@;FNyf(A+X6x1)QUHlJychyoRPN-HRECPG-wo0Lo8It9d?9C7H#L}HuNe!5l zwJ*#a{I98777QJELSh}PW@+Tvk#AKVj!$s;IrsA+vPd1#&{BKS5fBC6d$J8KnDKxU zYF2~`1Dy{Zs>i7J&7j9ZCVNAPEmm_pga%PIGe>WaGoPB~>RA3e-{0rV$9sG{GVe?@ zyFSymi={qw?TUkc2-kfs@~tv$ziJ}ha#Hy(CCJo|d_b!wi5(rf%q?Jc3{-v>d{kID z_R*6k()}_`UsV>@xgr8X>lUc(7}oh!e(OnUyuwI1{5TZXl-e=I>{0UEd$xlO@+v?joeNvXzr2n z?Q#tF5a5{TN>P1Q`>JB)V&%`j^|fl5;B~!3Reuj8M7(VtP+Xg`LQV$ar z!%|(L(b3Iy5VZY=XNceYF<{%?HoN!={muEsY(3pYt+j?IFWK>z&1HT}`Z9J3t5d2| zgIYRG!bk~OP-ER-a*-WpdvWJ(Mt0q53HR`Axv*0HCXfTHQw10wUnX6?ae3y*u2`kE zB?BTWKn{bVa<4UjF90gHXBQ!v>_w{ z$Xk1+n4DN}bADVCKd?{6ojeXR=+f2(F>I|wBDw-RstubT&0n1yP95ghzn?fYH09O+vEDhVBLR@8gu$g0 zcga9L0~til4}Qx4@@Ow_E-KAHCm~SJfX@;oP|_1xGfrFpHF_??oXN-p<@Fv3Ru{uRu_=j6N&fa`o^m2fe$>k{`~!8r}BlWTl3_Q-#*3 za3;aGcgI^N(JnIPlt0n}w!x-KJXv+;O{927e3;TxC$El=_88fjKk1llIC|6psIGoF zVjKIr{Zxq8x^2*(H5CRJf;feaIVNQ5xZo~A(2qX9rlbFe3WIc1$C%oUf{#f^#CM3& zHz&#>(F zN*3p48!h9TXy%5i-C8ESIk0Pz^u*l7148Z^G#9SGr+GFv+(2bhn5GpnYo9+_k%G#Y zHSB#bAJvrtwS9vxH$KCfE7Bdc`8MsuPaU>8_FR*{tm=a+YU`wvpZulE z6{W-LxZV4{4h0|b+dpn5>K0mY`gQUI9gy97UccQ5BrJ6I$=O6#8>U{j(Pf`JpoSZ^ z*49NW+fiNJJ#L^r`P8RV_0)go-ZnmxTwL6@2(9bzSzbwL@lReeyc;gjT@C#i&mBQ% z3eTy*8lSIeWM_aTQ({8yLc?B`L`A|Osdhn*)PBApw|aW595;53hmUYPIRoK6a7NF-*U(x6l$^pTGhoA z^erGJDs(x22JCD!&N}xo(GpLf5hH1bixJCUMS(SswsLFjnm}bA33OusY@8NYaL-C@-m^Y%4<&J?s_#dvd(7FVokbIh zNtaoZDrOi*DIBEHQsWaUDRy1cCd8vxnMxdg7zY6;ebFe_jL@XRiy5Y4u+8!x zIr2c8gpKBGk&^_JrffHAXnG^w{>!Y1+V}6n6Y6FV1 zV>Z__FdE;-jRMHo1bW2?Oiu*IuL5jSlrqW5kW5pW2iH!kig}}{4SK)z<7-NA6q!oa z*Z+nSb8-Hf)~=t)ShycNTB$`gDt+NXoG}maU_c@IQo-`8ZPs{3v0ULu!^dSY>%qV6 zF}=!FFM^NY()}4x^J?y}xFA<5f^C$99njyO71PmG9a@Wz-6v7~yLD-s9DTAliZ$dr ztgBeK7E*lc(T>g=!P1h*qi9+Nx*f`AP&;_Tg4jGjIG&|b)C!zu2GMIXd&BLHW8t+# zy>-N#A!}UqD8|m0NB!HloDxP}Tv^kI?wO-s$`0b&AhF)N8<%X3TT3#|FVoHGMe(xH z>doM-Zj8QRlF+65-&n`*VNZX(`qG0AO~al`bBr%6RT>jDT$Bd>P#l-P-*8E`j%vqI z1Ay$$`6i8wC|&T%?-Hfi?b^KpKZzSvtu_gtBy!TXF%mpGP%iOq*A)Q5hW>ygt@ zpX2Y^OIf-V$KRrR21HCti2SqHjg|R1lp;U6#!t22+Gy~mP(ZxeW@fI8vP1f z=+cQHY}n|kbVtLwO)X0{ZH-j%5h?$pC?#4QuC_GHOWGE~W(}VD$#~S)uMB=(fK~VB zJ|(;SC(|%`HMVn5vhCh8JE$J%97W)UJ5!=(CA$~Nj&tJFEjG`Fjt{x(@QA32B)nC69T~SKiPmOIKv1@%aOqiSwR$W(fR?8UOCeYvhg$ zdbd<{_ZYnL4Oup6kzOZn4jylg)xX1+C|}{CwO5yquc3a4&_})e>40U@p)yWSSDb~|xiaKIWq zK06h-U~X^ZTT&o`Uz4!XsJ<6U=O#(-mZ}5Ng?5*0U45~O)L5B2kjfV~QPdpt4Pm+m z-me8M@vw+dS>fn@4R=QvZU*XKSMjgiM>!#My5n=@jM~bQ;w0y_7VRLa%x&j+l$X7( z4wrc(^z`g12~`SJKACIsWcq87F21>}jn#V7{|cRqV-Kaz^B6TyIg<_zGPX&%Lc}Gt zdpgdjIhRJn2x@l^^pv+j32>iqD|2nWBCx-yVz&g!|Al{|#+i?LM;=anh`VXX=>FWH2FR&cQ>ayI)ZRU_JKJ*Ge9>ml zv0->sK#`&@Ec6g8&M)K^-uuY`shb7BsadteJFi;itJW(Hq{zG>?C*Z1r{pE}pArM& z(q{I(dVwy8P?k?8T$(XdFCVH* zui51n%#ik)JP~yWcPJ^Gw(<`dzh@?U>K{MG-}esp^k+z}yo4H2DYzf8%ns5{yo>Ku zG%dSIB(cg_X%P>CinMgLpo)E9sRN#nb~75$CuPQmm^t@AlSWuJl^SK$Ot`=4mwave z8v*sLz_73Y)lC4W0RiXI9;kXwRd!uXi=Zg;v7LXFPsb2Swo&^w$1Zv^3*8EPD6{YZhcYtQ@?-)@~G z$`=1+TMEP99c}V8@Vf8|bp|iLv1rF*R(I53E=;ywi?(K=HOSsggu$-$CbCU=zb7|y z-e!s~yhR0DT~ipR2K7N%q9uFLX0#P$Bdygz>=}+xmgk(Kj6srfT2yjFqd~s8djID4 zMn!}lN;mRzVA@6<*wgv)O*u~ZQ^dEZ=xAm9_G{IaD0RkL$uahd5{UBt_F0#N=T`pa zFs+q>ro$Ea2YqXPHGBl>Um>m%BvNl@wL&flGT7uF$b}LsN`wV{ATVlz7xg~0KhnN~ zqm*NFsLR4O464Z?TJ(y1Lrx2uu_-_M?u8F?d7 z4>H=imwJ8B+qE*n6G87!7@x?#Q0PI9;v`{+I9x2o!~|)_Y0mSzZ#5PrLI=1nObR(T z$MgooTK)(~-_0lIjI*j5^ZOk4xiTedOXrnEGN(XelF|~q_K9b!1nfdEEx4AJ2nnE2 zp-K)5L>7Qmk=L3YaAhU)qj3G9kk@-6)&pxLeSh1^}KR7ZFYIuv@@S*_4N&NOFJb0nfF zaO0y(gi~;rN_|>WSt4`ta>M@964;v4;o1E7}Av&-p~ z2zYY#x)~^+6?Apy|Afcvn1wXs-W-`rEukz!k0UE~Wg~{L5;44D5W9@bwS9iF0o3|w zG+RXvR=3_5RxKS{xvxf8@7gLy?Ejg*`Mqo>#B6qLbd7F4S(`Kxp3x?++#_@0CvuN8 z(AIm3C#&e|qIBeZyk4tG2;4;P<6K?VWm!%3#6al}J|Ym2g%*V*de=qq>rUem#+F&S z@6Li#Hc(d<@}xdZ@$A?JIs;Bc%A)q?azZ39+Mz~{?#C3B>nTbjTg#fRVc84is+u>Q zlSx~CQ`wr_(}GXyG>z#V&uT;hF2c;bu>*uRl~WI)%aRhk?cM@ml>+t6iAP3N4NEqM zwpgXD)l#S`uM-!9#0HQt#5evHOOD zPT&oX=*1E<^;H&7h-S^Or5h)Loyh63q(bP#u4wIY=d|qou^nZ=q%+V~IhbRo0H~B> zARdifkT_3axV(^^9FB*T5mJ}x;>^x$g|?r~{{T5Zy&<0}J^j$eSy9#2GANnXK%D1q zK=)N_l&7V{0>o~KF1*?x#pHfirU^D#**?aU(+_p({vv5FADR{xp3Ja&%gyb&jE3cl z8noBH*OBF&s8GJ?G777;H=^ajgn_FXuk%G}dV18jkZbg8Fg;y`9EN$`^ts_T@tq(XBm{~Az^mE@`h^?SHuvG66 z42E#Rkfjh$AA=yXNq65n#7M*0>6bU$JwocXfV|Ycc2-;0GbY;kO`9R07jc*m69;>d z;cWTwXvd)gA8Ej#VYHh|Sy3gM-I=?8fwF_gg;w=p_W654M(}O=^MT2Dech88(UbS( zlS_b7MTOPsmtE@==paC9F9FIPnL+`M=en*4f&hZ&%%~*&m&MF)#cza2o$+@qb89 z|EDcij(-KzIxFc*Dl6g&xN5J>=9?PBPF#GWi&#z8LRm~eiXM0il!JrY1@Wwbv>%r{ z&8nUYzQMaTzMr(g3bU|;LlR#G?qUrEyf>%q;biSxLalK9Mygt5mIr&>nu3?@pZb&}backTqsC6zhxguz@Tfe>! z-b1vfceUen5n76bm9wWk6|Nj;3=~I|n?N^bB*#9nIcT7Urq9^#iyyVRTmo=jGODS? z$tiHj$uKlPQId6nV#n9c`j^Pl;h7W^@rc}vE>0eu(0Tz}Ne11HT;_!1T1>c?fs)8o z&)d+%vNIK#=nOq^DB`JXVzV=)I`D4HrdlD8dh3sUnt{~9@m}1>Y{-TV7%X){C~)DX zRQrznu+&gr>r|xu?WHMX-O~C=$nhF_;vuVIV}f#HBM^m!6T?`(RO1*6lZ-6)V|8bn zpz{ML-|WdnABs_c#@%U$7x)CQo+7^muX-e_V>irR9S30df*a0Xr>5RmIfRFACM|hu zYUzf1?VFZ7v+dlU%B9(k}JlF&}+_Yt^ryED^-wrEYa#-?z ze0%Qr65Og;xUGZh$=)@}IAii`v-ms)LWuz_SZZst$C_4`SvIDt7xO84s*_AF+|yn! z)LS)gO>8Ex-XTv7nhhoj|E9_NQT|+3m&02*UVeHwcAvz4v^v=KU|7qhPe*HFmQPzl z{sQMUI1PKsd|zkh~D+64A zK`<~cXs~~?5xM>$efXd56=oKuf01vSsM!2aR>$p1@mU8DvQ%ySsNVD}nmi#W%mM8t z)0EJ}#3EWz0Yj5EeWqt4JL$0o!kTKDLe(M>90LO3<WVoREES z4M9HmDUN$4BOuMX_hrxc$4p-LDaXy*%mkRBeFwy$o2a~9ma4)1(M7Z5TD9uAeYrfS z-XDh8Ds$k`aEJ_km^)Z$Oxg^S%45*;f5N?P?tX|Jx0a*^8@k;#7=wJ#3{O{PrG0ex zIN=Bsx+6-JmDY9xfg0Tf zWAwU@qm3t_p1Er#RSvejI{J`*FtBPALkw^$^gdI}BOf|4)Fd^gWn%Ye`uT6bcJQ7Z z`Y%klTRlT@|D7y%-`-nCCYb;&j-c&ga%8V{I77co`b8C{?}Q$OQf=Ds7DwtpJY6Wh9ATVHA{= zm);t0Lk1V=5(?lVT%s`TVv3Dt?g^e{G`=Ls%^Al-HY{s%}wTI_eHt8GVW&; z<-7Bp#S0&Nn7OcdKk_Y{e84?JVY)~TYt^v|EbIv9xJ|YZ2XvpW7ZM`20>!xSkeU^# zc|6+MUGG$`>Y$zH^)63# z3bm}sN0MW>1Y>x&rPhSt-5zrnvv9j%BP)s=8Q8^1&7-;JHt`>F)Bb_mKUdBal%2kH`7qS~p|DnVt{fL}EuOZ0 zUo5vd5Fc0)00{N5>v+V+Be-}X?ndjl-$`+2u#w0dFT?BDlcTZt+cE^16E`1i9u*S! z=f(CJueq+3N};t_=l}&%n31wd_2XH^ z|1ON^`=?}N;tJ;go8r%uqHxiiL(FDZ2gBQ`!75=D+91V z2t-79L^|ld16^N|{`;yd{|L4JMTlmU2U;pS*)YnHuyg!nMLRe;k+89F{U>TP7t_D^ znG9%XJFanHcwbfbXjh)l^uN!JxB;~7cjqSuq)%Juh;hRe*~k;{A|}l~U$6WUMMu!F zYNNGdDN%bE9?o~|YEjLC(5qmTL+oT)=0usug2{x@O(@Vpa7V+*)D+0V7Xl=mDoA_L z#c9cVa|h7l^Heh>Ll%WoF+yPILe$L3D7EOr=gkSJaSss(y{#a3aIy6e$Ka2^f|=k{ zz{hCh!mml_D~xoEkSt(XRnULnBleXvCew^_=ffH}z|$i&m)Q3+^%g2YD(m#I?;!~i zr3WZU8-#+pS;PtvURp^LRB%hNWwPP*UjKBr-6kKmdZKH2#3S_=`XP0}bh!=Lh1&}q z`z3=0dD%`$3OOgN0vgpctPVC#=&V*y#gUi~=C3XGn1Qg+7P<}E@zGQu&f~zC5E>3# zQ$T$AHd}`2vjH{=#(5ku*Vrt$gPB6*3wX&G%z=Hf{2=+aY_G6#>Zg8eyv;tPqbDx6 z6tg}drJ&#KADY*st&9P;Yi^mDY7{?vl! zi?Ky@dtH)^)ZUYgL#VhakZyQmRuPEUa(WX};4JS%QSMns?!KW+XgsJY?`nLKC4rv2 z_q#YlAbjVkn4&X7EuC8it-Y#nUyDObwdRXA-r=4u*$VM1!C!kwaV5P*IzuLUZi=0m#`ir%h8?Uuuff z4#wgG_UpAmSm}&^~7k*t{mpQPM7P3T$rsuAtlO(hh_xg`FuV#i=Va$FfpV zwEaQ~&yX-f!9Q{-LJStYw8_<_amgmXOEwnEu!}N6{ij>%Cdn%}m{-2b$qOEL11aI{ z*yqlM1>d{1liHVX=h{p~`BA-C*+RaqA$Htx{u4_%VAsGj;_F~r;z!h{oXPP8os_2t zV~5+)B$b#7w?kTV{PrHNyQlgOYT7q|V*sORhsMb%3!w0}*d9&3zScLR6|NEEXI!ot zOFZxVs<={UNc!-x!(epnl<S{k44X~1iRmhT6W#M=o zk_xnYa;;~|WS8fIJ-3PFu-ZKmdEfX&$Oigk1Lz3&%pDteMA=xjup+IaUzy@bfV^+a zkcMNhtf3puZmu^KB*8q;{2#IpvaQYy9{DNCGXVP+78=}jZ-!A(hs{TC0inPIx2(i^ z#!cPzj<)B6-9Lc#Xl2tj^^qqK-jSZyH4|g}+U=c;8qt@%k&a>F7?1pO$62_|!+eVD zg1!7(w7;xTx8t5!YYthEw_Y(#>Dvoecj&WmNak6!D1YgFwY}5q_UcxRTIdVB4L$MQ zp-6Xp;i&qT1ILu_ScrZnD43w(sCxAg_lXWk@*Nsmksp+_B|gDO^zly}UY7lxE)cNs4H9t-^e0}b+_ zP{hku#}K9GI-dwGU$U%8og`v z`{%oN10%0csgdAza&;%iaFV+mQovMk^zTE~;rDcO+ zCw=eF^e|?7C@s=Wc{uQxTM^M#C~?E8`7nHWH{5(GL7+-*>v3zoptARA&mGuLo>k&Y znbso4QcL;w1UG>pVX9<$9IiasJ@~z{e-?F+y=@q&?HJo>rPIZ#t%Sa9_`%8j_T|%AEY4kJ9`8}!5=$z>607n6&&IBEo4-3JJ#pTFEV0O@3`?(0 zjIHi~M^VRULfqbJ4YT>xronW|CAxgI{^(`*<#BUOmGC~OG16OQZ`D_AuWb-dz3twK z{LN%IcQ6TdIkw6kKVSWJ05spyBpbcf;9*r{jng`2{OC);Lxd21VpdD7fFq*ua zFtrG5-i4{)<3~lC|?UCNB8{*5=1oSqfCywOMzh><$}AC>}=k~ z*el6J*%S&Ni->XGGkwfs;+WB?_KX8WhbhA2QPaq7jYBBxA9jhjA9)zo?R7r5s)z|W zyJMuKI63UjO0gBa6-*T0mFRaal^dg1!!5r)%9rt`3oXERL|CG1)&rs+1XYEpE49QP z<(-2zlPr