From 09fc1fe076aa3e34104f9f4e40eff69ad73f464d Mon Sep 17 00:00:00 2001 From: Emma Marshall <55526386+e-marshall@users.noreply.github.com> Date: Mon, 19 Aug 2024 09:56:21 -0600 Subject: [PATCH 1/2] custom index nb + img --- .../indexing/build_custom_index_1d.ipynb | 4756 +++++++++++++++++ intermediate/indexing/img2.png | Bin 0 -> 82118 bytes 2 files changed, 4756 insertions(+) create mode 100644 intermediate/indexing/build_custom_index_1d.ipynb create mode 100644 intermediate/indexing/img2.png diff --git a/intermediate/indexing/build_custom_index_1d.ipynb b/intermediate/indexing/build_custom_index_1d.ipynb new file mode 100644 index 00000000..59de152f --- /dev/null +++ b/intermediate/indexing/build_custom_index_1d.ipynb @@ -0,0 +1,4756 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "8a8e5623-0622-4ec8-92e8-31d1d2e61d0e", + "metadata": {}, + "source": [ + "# Creating a custom Xarray index \n", + "\n", + "This tutorial demonstrates [Xarray's](https://xarray.dev/) (relatively) new Flexible Index feature which allows users to modify traditional Xarray indexes to add custom functionality. \n", + "\n", + "Indexes are an important element of any Xarray object. They facilitate the label-based indexing that makes Xarray a great tool for n-dimensional array data. Most Xarray objects have `Pandas.Indexes`, which fit a wide range of use cases. However, these indexes also have limitations: \n", + "- All coordinate labels must be explicitly loaded in memory, \n", + "- It can be difficult to fit irregularly-sampled data within the `Pandas.Index` structure, \n", + "- There is no built-in support for dimensions that require additional metadata. \n", + "\n", + "Xarray's custom (wc: flexible?) index feature allows users to define their own Indexes and add them to Xarray objects. A few examples of situations where this is useful are: \n", + "- Periodic index, for datasets with periodic dimensions (such as longitude). \n", + "- Unit-aware index (see the [Pint] project) \n", + "- An index for coordinates described by a function rather than an array \n", + "- An index that can handle a 2D rotation \n", + "(add links to those that have references/examples out there) \n", + "\n", + "## Overview\n", + "We will focus on the following example: \n", + "- We have a 1-dimensional `Xarray.Dataset` indexed in a given coordinate system. However, we want to frequently query the dataset from a different coordinate reference system. \n", + "- Information describing the transformation between the two coordinate systems is stored as an attribute of the Xarray object. In this example, we use a simple, multiplicative transform.\n", + "- We want to define a custom index that will handle the coordinate transformation. This is a simplified analog of a common scenario: a geospatial dataset is in a given coordinate reference system and you would like to query it in another coordinate system. (maybe take out last sentence)\n", + "- link to existing documentation\n", + "\n", + "We start by defining a very simple index and then increase the complexity by adding more functionality.\n", + "\n", + "\n", + "\n", + "## Learning goals\n", + "This notebook shows how to build a custom Xarray index and assign it to an Xarray object using [`xr.set_xindex()`](https://docs.xarray.dev/en/stable/generated/xarray.Dataset.set_xindex.html). After working through this tutorial, users should expect to understand:\n", + "- How to define a custom Xarray index \n", + "- How to add a custom index index to an existing Xarray object using `xr.set_xindex()`\n", + "- The different components of an Xarray index and their function.\n", + "- How to implement methods to Xarray indexes such as `.sel()` and methods that handle alignment.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "09c0cdb8-8570-4a29-b013-bbd8a6a451e8", + "metadata": {}, + "outputs": [], + "source": [ + "import xarray as xr \n", + "import numpy as np\n", + "from collections.abc import Sequence\n", + "from copy import deepcopy\n", + "\n", + "\n", + "from xarray import Index\n", + "from xarray.core.indexes import PandasIndex\n", + "from xarray.core.indexing import merge_sel_results\n", + "from xarray.core.indexes import Index, PandasIndex, get_indexer_nd\n", + "from xarray.core.indexing import merge_sel_results" + ] + }, + { + "cell_type": "markdown", + "id": "6105c786", + "metadata": {}, + "source": [ + "### Define sample data\n", + "First, we define a sample dataset to work with. The functions below define parameters that are used to generate an Xarray dataset with a data variable that exists at arbitrary coordinates along an `x` dimension. It also has a scalar variable, `spatial_ref`, where metadata describing the coordinate transform is stored as an attribute. " + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "fb2f688b", + "metadata": {}, + "outputs": [], + "source": [ + "def make_kwargs(factor, range_ls, data_len):\n", + " \"\"\"\n", + " Create keyword arguments for a function.\n", + "\n", + " Parameters\n", + " ----------\n", + " factor : int or float\n", + " Multiplicative factor for coordinate transform\n", + " range_ls : list\n", + " Range describing the x-coordinate\n", + " data_len : int\n", + " Length of dataset along x-dim\n", + "\n", + " Returns\n", + " -------\n", + " dict\n", + "\n", + " \"\"\"\n", + " da_kwargs = {\n", + " 'factor': factor,\n", + " 'range' : range_ls,\n", + " 'idx_name':'x',\n", + " 'real_name':'lon',\n", + " 'data_len': data_len\n", + " }\n", + " return da_kwargs\n", + "\n", + "def create_sample_data(kwargs: dict) -> xr.Dataset:\n", + " \"\"\"\n", + " Function to create sample data.\n", + "\n", + " Parameters\n", + " ----------\n", + " kwargs : dict\n", + " A dictionary generated from make_kwargs() containing the following key-value pairs:\n", + " - 'factor' (float): A multiplicative factor.\n", + " - 'range' (tuple): A tuple specifying the range of the x-coordinate.\n", + " - 'idx_name' (str): The name of the coordinate reference system A.\n", + " - 'real_name' (str): The name of the coordinate reference system B.\n", + "\n", + " Returns\n", + " -------\n", + " xr.Dataset\n", + " An Xarray dataset containing the sample data.\n", + "\n", + " Notes\n", + " -----\n", + " This function creates an Xarray dataset with random data. The dimensions and coordinates of the dataset are specified by the input arguments.\n", + "\n", + " Example\n", + " -------\n", + " >>> kwargs = {\n", + " ... 'factor': 2.0,\n", + " ... 'range': (0, 10, 1),\n", + " ... 'idx_name': 'coord_A',\n", + " ... 'real_name': 'coord_B'\n", + " ... }\n", + " >>> dataset = create_sample_data(kwargs)\n", + " \"\"\"\n", + " attrs = {\n", + " 'factor': kwargs['factor'],\n", + " 'range': kwargs['range'],\n", + " 'idx_name': kwargs['idx_name'],\n", + " 'real_name': kwargs['real_name']\n", + " }\n", + "\n", + " da = xr.DataArray(\n", + " data=np.random.rand(kwargs['data_len']),\n", + " dims=(kwargs['idx_name']),\n", + " coords={\n", + " 'x': np.arange(kwargs['range'][0], kwargs['range'][1], kwargs['range'][2])\n", + " }\n", + " )\n", + "\n", + " ds = xr.Dataset({'var1': da})\n", + "\n", + " spatial_ref = xr.DataArray()\n", + " spatial_ref.attrs = attrs\n", + "\n", + " ds['spatial_ref'] = spatial_ref\n", + " ds = ds.set_coords('spatial_ref')\n", + "\n", + " #ds = ds.expand_dims({'y': 1})\n", + "\n", + " return ds" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "3873f02b", + "metadata": {}, + "outputs": [], + "source": [ + "#create sample data \n", + "sample_ds1 = create_sample_data(make_kwargs(2,[0,10,1],10))" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "5fa03c98", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
<xarray.Dataset> Size: 168B\n", + "Dimensions: (x: 10)\n", + "Coordinates:\n", + " * x (x) int64 80B 0 1 2 3 4 5 6 7 8 9\n", + " spatial_ref float64 8B nan\n", + "Data variables:\n", + " var1 (x) float64 80B 0.6362 0.6464 0.3027 ... 0.00198 0.2211 0.5605
<xarray.Dataset> Size: 168B\n", + "Dimensions: (x: 10)\n", + "Coordinates:\n", + " * x (x) int64 80B 0 1 2 3 4 5 6 7 8 9\n", + " * spatial_ref float64 8B nan\n", + "Data variables:\n", + " var1 (x) float64 80B 0.6362 0.6464 0.3027 ... 0.00198 0.2211 0.5605\n", + "Indexes:\n", + " ┌ x CustomIndex_tiny\n", + " └ spatial_ref
<xarray.Dataset> Size: 168B\n", + "Dimensions: (x: 10)\n", + "Coordinates:\n", + " * x (x) int64 80B 0 1 2 3 4 5 6 7 8 9\n", + " spatial_ref float64 8B nan\n", + "Data variables:\n", + " var1 (x) float64 80B 0.9233 0.5917 0.4112 ... 0.291 0.2584 0.1781
<xarray.Dataset> Size: 168B\n", + "Dimensions: (x: 10)\n", + "Coordinates:\n", + " * x (x) int64 80B 0 1 2 3 4 5 6 7 8 9\n", + " * spatial_ref float64 8B nan\n", + "Data variables:\n", + " var1 (x) float64 80B 0.7656 0.8868 0.01945 ... 0.3991 0.5366\n", + "Indexes:\n", + " ┌ x CustomIndex_sel\n", + " └ spatial_ref
<xarray.Dataset> Size: 24B\n", + "Dimensions: (x: 1)\n", + "Coordinates:\n", + " x (x) int64 8B 7\n", + " * spatial_ref float64 8B nan\n", + "Data variables:\n", + " var1 (x) float64 8B 0.002764\n", + "Indexes:\n", + " spatial_ref CustomIndex_sel
<xarray.Dataset> Size: 56B\n", + "Dimensions: (x: 3)\n", + "Coordinates:\n", + " x (x) int64 24B 4 5 7\n", + " * spatial_ref float64 8B nan\n", + "Data variables:\n", + " var1 (x) float64 24B 0.1692 0.1182 0.002764\n", + "Indexes:\n", + " spatial_ref CustomIndex_sel
<xarray.Dataset> Size: 136B\n", + "Dimensions: (x: 8)\n", + "Coordinates:\n", + " x (x) int64 64B 2 3 4 5 6 7 8 9\n", + " * spatial_ref float64 8B nan\n", + "Data variables:\n", + " var1 (x) float64 64B 0.01945 0.9708 0.1692 ... 0.3991 0.5366\n", + "Indexes:\n", + " spatial_ref CustomIndex_sel
<xarray.Dataset> Size: 280B\n", + "Dimensions: (x: 17)\n", + "Coordinates:\n", + " * x (x) int64 136B 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16\n", + " * spatial_ref float64 8B nan\n", + "Data variables:\n", + " var1 (x) float64 136B 0.06861 0.6461 0.5169 0.1095 ... nan nan nan\n", + "Indexes:\n", + " x CustomIndex\n", + " spatial_ref CustomIndex
<xarray.Dataset> Size: 40B\n", + "Dimensions: (x: 2)\n", + "Coordinates:\n", + " * x (x) int64 16B 8 9\n", + " * spatial_ref float64 8B nan\n", + "Data variables:\n", + " var1 (x) float64 16B 0.1917 0.01797\n", + "Indexes:\n", + " x CustomIndex\n", + " spatial_ref CustomIndex
nw+D9*wPhEG%C zultHmpm??uBlF0c{!<~LJzSNMEsM`c^|y6dU8!*FkChTG0@35P`o2WPe}ZlT6Y;L2 zNR`lR_BbGwihzk=fILh6dh{rv>RHCJW|IWOy84dLmTxjGUt*%xx*}qLJPv**@>%ITVPhp|4xX zXRhE)ePaH;$(S%`nwpO<&ARF0b80G~SOj5jCytIZ$oOxF{$>b0uUiZBsYS%ZFbJ{L z*LG165tba68*rmWbH4t1f+E(8+P>tNEgosq7yJ5pL*VWem~6YGIX%UyE*Ou+=u2GO z+WtYrcC_i8k>YwaGUUQ?;sO2Ll8T#$*K^fd7oMkQ^sx61w~BFY@M=xgs0lYVPZz9H zHvPU|mz2A4DaH1}yk!g)W4(uNDs;nAy?E>u&5a9kvXxaBHZLB#7#(hFvN~eT2@rIB z8?iESJ1XH1`z7$>lAq>qxE$gN-qsHLJu0u>cpaDC!IgoQ3!}n`ualYkP%mKoLOJCa#UC4Co4|eqCA_5D8W4J!SZqDh? zZc&kNvMr7zg_ZPe8G_9PKMh|0_B5S@hB`XK>AK7N)+1s)!Ru|oZ= 6QqgQJBkC76i)r?=F~DQvzIeRUnXjkL1O ;PGHQRwfqP z(uf;_8n;s^e55_*t*$53 QV&^IV$fhoNbPm^y|XJ!G{KJH!W9Bp|jkCL?S)qbo9!2xBJcilf;Y8 zt}bS?QEIVp{LW&n`a~vu#Qml#dWNQR()Q1&+0Og($6I621znY`P?-gL)8%Ky`!Ss4WZYhViPLV9Nl5$g#&!H667u>noh0IjuFhsJGw&fe5 zuGfas)#_?#D)acP=_DgjQ#r@CzNJ3D6sSHeSfocxnXFHrCR{Ml+|4*~1{6$(Ef&`8 z!Uv%S8>xlfk{jsZ}!^PG~KLuMachr_>MX# z)n|Pmg~jdIL@e^ ^QP-Yt2L@54B*# zNh}ptS&2csf@`;5BHeGwBv<36;^tYtwemM@ZS`CF4URp@FR#CjbLcR aDr!BRh#9unexkTK>^1`w*nUYH2f8tGXu !)Aeuz)@F=u|$wbOYFditIK?ahxbJw zYp{h#F89&bl^>5E-WU=yx}N0SqK*fG!KC#8wo>y3x9Jp# zD3pk7+fal#E3ytk&E6 lb6trfWYGli|R#39sJcRUIa{_75nF#q=C{?Bjdp+R8Vx zH%3qgxMC~ke1W#(+K{carecT E+lvo86xELa5bv%UDndsdW^ z!PHm*+xke>NS=5C4l&_fqK_3Fhg)mXs$*{I)eOPC1p@k-8G+_Ek)Gchw5L0&SL>w~ zHtv5ifeDVbsj7LKRNOr{jSAWNmQ&C^(%7B)Tvahr<$dEr+yOPhPS#Mf{uvzpL4Ce` z!}&dmhH{T`Z@*LDkgd)oJ4U_>Rl6eB2Bt+*;9>lTtMA%!a^$WFD$$kJ>> q1F0 P);Nk@0L3Arj56${Y{7bK@R2i;!6nK+Xk Wexbr^&DYW4!rjvns8VV#FhQcJ{8^4O z$vv(OBYJC3y^Mmq?5!qkx(K~b=B_YDPOnC+N#qOHZq3=6q%>w?PG;^#=x)}aYQo`R zDTmpKH1mr_?S3))q&-H#T$1aN&jS#e9|`m)+()Wz3i&6L?Mb%ERpo;Tn&vNctdhGD z_ne=ZAagpMeb{z6S$5#EtxLs?boER`5u-y3We`3N{oz3zr-|DKc~Qz~`AFYgdA}{G zC-_GkQb6a(ZFllQp6$rFoXJSG_Zkl&nfZd%{awk7yYd|r6$LF{VcS1d_$u*iOl17} z7QreZ^tYR_6S0jBbrQSXQd>ZO5=-FwY%$vjE$1}55wQmzbxS-yL#)LMey`vEI{fsM zCFkN1oaV$W@?QECXVDgGws`x`ei^NfkQ;NC@7-x$5z|*7RQRMWYZl59pe4jS(0Km% zDN7JqvEsIOKL{09$Y^%kJCE^(8;JdqPnSOGBEl{C>Q*&Lx{IFJ^;UY@d#$9Sn2jft z`p9GNYW+O&EO6CtskomuLX`oG>~C~K#uhI#o ;7{ }M^P>cRGg=F_M1nkVoB*~yHizwB8f&2~0=8VkzZdLb_uSL?S+xh>&xR(IAb z!WV2kub{50`|CAT?+s6wc?@6Hj(arCT(T@!-b_{KTuq8JHRYV1-W3;WYww+r6PIMP zWy3Pa>Nx}bgFc7tvVHcF`3bXMomW z{(QD8&!#@` z&1}B8Z-Mh_2O*P(tg9 -_$;`%WmO`)eM*GFuRoh%K{ z)9yMAE;od^4R4s~E^1k=W|D~KU9hAC>78X#_tcv`*E0GqR+U4J%JU}**(Uf8*#VFU zcaIa@4{ajbha
5 zrR)QgAz-0V3LwQ6o!Fn}FLCdYMK}PQ0LWFB`SHO|&x9}FDofw!>=8bpC0c&EzrLMk zwOG>m)bm4eiF6{PFVK d-4%op{#TxMI!tvHGEu$+K3MT3}*(umdk*OCnff)Ar(Ug zxt=Ah=_{5Wj%dL>l^4=@go@}F1=%Bfx78JwzK8Yx5cT{dJ3+$46MKA_w8`_(i~AI> ztMiPoc@sd;X#0`1(X(MU02{@?QzZu1?U-sUxXDJYVDy)DA)nvy*i0cXU}!;}AIf}i zJw-3U+^E&jOq4T_p2Ppa_j>62doqxl0YXXZKQu+p>+S-iM=1lJ+xG@ABHDM2x@Pn@ z9d2#fwmOz8XSgbPl89B`tcDCRMAey6%&5NkI`gYQ{cc0fLheIP<9>e*fCmX@8`FZF zQ7HBI(cpH*^^6)$upCn;k1hvpY-&?0x4D8;HjWRmIF75kxf;CDi3Pk6Wb^!VA$)tL zMK-+PvWC&B`}}$#W#mct_xAFP=8s)DsD!gI(pU4sPtZ`Q7|Buc+GVBvC|NDNub)={ zxSyYRe@WVAOj-4U=iwh3B}y?Ka1%^SOa{0f0+u N zJ}-C{T1-Js8WNzm@c3hQGKIsQ_iNM-mF=6QuoeGqfMxrqncrpAFlGq5N5Afa-Xksm zw*a`hq3k>=@HZ{G5Wt@#RM6Md4C5+}(;H6i%00t>A2=K4*?)7)rbobT2peAb4G^$V z^YPC^`*&Tbkvi+`fhCk><~oQG_%eVAfD%GgH2t}Loxw11aMpF%Gq^mj{(>N@#8pm} z5df3{IL?DFfN^6&O=dh_7l$+XRgQ3_SiR^l3D9&3U_$YO*U@)38{FmSxwhL-9ZYSi zcsB3rw~e_)NClWs9JvKqK_^7PSGxDWm_Spi#Mb8*_a}5l+z=w{?qmadnxP0#C(1d` z=dfni`nK~2e!}W}&iGKT%T#A^9ZA3V-P)xjbjg|O2!#6T2hZ^F2AXeKe8u@SMAF=l z8txV)j2igj^#dDAaWoi{Jp=|6Y}Cln0^2v%{_$RSW7AM5090MOM1J${fD}3@f(bAX z$(1~T4gClX#BOXFx5-cjVqWnAde0i8Wd~r@jH~f?rTQnNKkHX1t=t`vSt$8B{dsQj zR9~@Xp#^JQ9ra>z=&>f(m@h|)bc}vePMD`lz2tW?w{_KZJtlH}EYJwkaVpZ0op`0n z1g83k_GEQ-X(Fc1mZA(bh1tu%7*W$(Knqd3^_K=QS(y}ZlglaE^eOHlUUMs8UY=vh zO}^Ks`HN)-xo8xnt%1jIpYa>*bQ0YYKcz|o1n}8QqR7^dA8#@Q077h>wLNkD`>tT! zqnlVqnq))1&RAW^L)gmugaGJ4!Qs)5g6hGeMfBd@-u_fBOt^|EX(grD4Qwo>YK_od z15#Gj*e_q64ZZ>Y`uM *5KB9UWQlOl8wtU-Tv*6cbY5}JUo2jfYIPW z_I?7Sf7dDDM@;n0& X2+&O`oWEU0?`eh$IjW&&{?FX zN5hq%prFTbR4z8o^Zg%HZ?M90lfBIVtnM!wm#%+R=oJ^4V3SpcdV!<$SVt7FHpt~H zNWnp*)w(Pwh<+1&Sa-=>_LP{E(g)7C%ENVz<{9w`v9TQ*){V;g-A~cbC|Ox6M}uW0 zhr58_xP$pmy$q2a>7+e`_c&;M+;Fj;LRDD;PLYl-?BKvgNLUyN9lhItIVveh(#VK1 zARvGZLw_)x&wQ10EG{**AKZlb?l!VxtTQt+(>wZxpniUSa&@yu7#iXXJf~&tOCS3a znb;1(XdxC;%o(wYm>(ck1FO9;p3y$Qq)4c#pVZIET3J~o8LX92eX)Yf*xyZdi(6~h zHIs^E55?F3+0t;hzPEF~Ihl}@kT`JjB;5Tyh~w8P|6|6mcRy-NJB4Q7zhSjeVZQft z2y!&eVLl#)qvKI#lx{;Y?*SVaS$Cf%zP;Qop|RG`7OMOHeQTs$`Q*$-P!PVhwl-ZO zn83OrYNHiu51rPHwJ)gp=RyyNEQhrV`=}@ zx12FS*ZptV5P{1Z=N;R{o~xWy$M;8PzpuJ)`7Rxml$1n3Z1p&5udXY35!0*mBS26> zLZY?^Bc4G=``b#bCjH=sIMChNnM$j |~Naz0Sn9S@<~@83h#;3>0Nx5EIKax}EeDawJKAt7|9p Do;X`A`(6-FUL5%=|iI% <#PqI8PR7qN>>IJCFyV)P15Ss*wK ?ef*OYe9j~M~9+sNrR|^g5oe&Tx8DZf}bctv6V84G~#IUW(sIsy$wIg)* z3Lq1ZDS_~M&V%x=+ybG55-XY2R7lrp> fT5BJ+k z*0`GPW^AT2DDs=7PUM_I%U40a|D;?&=f0paL{-!FQT}$kTRrY!SzJX^&V=j6<^QY` za~~rAdp@m0 1xaEeffW@lJkg`=iErOui5;(oy2$149MLx(Wqq#Kw5r!EB<_t z?=1CyWGHYXDFlD-l8*Q1(yY@P1JcYB&VQ)o3obM>CtuGITpZl={ Uz&w6{vL(^%oTjk z_IOdlY1c!Q5_RE~(>aM9CLbrh$Imfdu5HV&a)OZF6>r#FVSJ ivBtn$P^$|PvUl@fvQkORXa0)tAoF2*E1|^-`CW*eyzrQ%y2yd9zj8gbySWh zkQrr~z3Uwm(ySFZ_DY2#G-A>t@)h0>x>oG3GIb|Io|dg{e91_YR8k`1uC|8$dgX`5 zq$d&{_pef^%1;Lqxf^(AqWt`P10y57GPMIolX|D!ELYe%m>$Hdp>sK*Ov(t?!qHKs zWHxgZ{cb5axjgW;h^XjLsjl#JmASZw#{lKOlDQlwu5bS#Qc3OH4lFYs{L|$87ymz3 z%~dob+!xdw=5nZdwdh<$pL?8ZJWK&fDO(h;m |J0DJ8S5>uYziP_~Pt2 zGSX7Z!umHvSwTUgB!3F}a#S>8t3So2&RO)$%1&IS-G3b00F9KXjtjsM<>a0efQzE7 zYBDu=fRJ*sROgfc2!@qBYEhA#-23XonFT@MqI))9O(e^Sy~i%fO1a>Pr75c?JigX@ zD4P(2gwQ=y((8JQwwWV6#~l-%q~QuK-nVGq6!dW#+gjUD0C2RhL(ADSUPweItI_*2 zRq4}!An!O#8(@T6`;4L@tK{GRR8JAA`WAgT8~17*E3Yl(4SL|JT^{qXej1PK1_4_ zA0;o}rK?|a57K!NRSfk9#RKX62ntFiLG8P@$Te=Y#MTpm1t>sz-&0YC6rb?CH-G>h zgIH=<^^&K7MiM%+QA_+BcfDJ}OeLLdVd0e$&4S9?rlQjRqxtYU*u}v;q6@nWIlF$A z1VoNibzfx}#cUzVb9Qr!RSz4kIZI8c-QC%SON>2cA}+f741nEi=j=VNh;qBB&f4^= zdu{|*a^M3vBqFZ-oVES#t;*+mXzQ1!3Ht2m+yc7*N@C9|nsr2N+qPAiI|VZI9WbT( zg|)cyTSO#>GL?IQ8*Ig{@7xWBZXuA`CPQ?$CP@hwwq-+ck5Y`c^Vrl7=8Ym*xE6Y6 z{QCU(^LvitRZQegG+L<<)x(J<<(dZEEM@wD{Jq{=%=AlEM0T^)F^nq_;m z1iwLc*>Bovyl1JfeTD5TzwF<*3!g0mo%IALGe0_hxG=bZTsP>` eU4 zGkU1C _=6P2q!U(@qIP)LBi&^`o t(FRp^nBC 6k@fQJUWs!X$=?BT9U)!n4Rj91l#_`K|8VhXo*XPTB(;V_di`CZ>k zfxzpk+ro3F)QRu3yDQT+P98j4u`v>paTS4(Xnv#4+c8{JN;kHxF3gQNaV7ax$uVK& zq;Ml}d;o!7w5xx@^tgh OY+&JNe=RjO2VuLH{^#0HdX9Ma zlk@h>k|?cI;UKQb3JcFJ>~zfo40qVsa|7hnhR<5BD>V}9&EcDOuKl7c#SS`L&)j9V z@~H0m3ZPU#XwL{R1}?$}4Xtnan`T+V^EHf*GSbg%M7MQYqI_RH-Ngok?@_a(PR077 z7zQc+GYhn=Nn3K=MSw*wl|asIuS#mTn0=LFdc-P&O_5q$!|T$O(&!c-$yC@)4_lNi z#ch;RLQS>vkl@!Ue@#ZE^#RP^jcA0TBRs_#(%-U7-DSe4a*=qGa%?ov8eUmA5(ZA5 znZxnbnPX$X9x696$Naa=0vDTk7Kbo%C~QNZYiU_iTjP+Pfq~<&?IJR+Ue4~6Ucvs% z4TJSDGCI@iP5oj^XFQ^n8I{KJTWka5uPrJ);Vk D9}kf %*1PDRME6jUUxyjQC*&I2%W6xx_wX1N(Af5^taQ=E4Eb(1}KH zm|3<)i3xXl%lB-xOfn3w*M2f4K~_@&g~NeR((bgFhKPlqb=;ofuD(csg~Ks3k5=3j z4eRA{)WwR)%Q63n$JYq}L|ot1{xq`IwpZz1P3xpqdmNaO#QK{H9OuEldiLu|946ae zE^e&9`y1^u48)yiG|HV0+Sl$1oYEd8KZvZiy0~SVy_vz}oj7|BLPz0g8F0m;UjbbY z+)8ZE*C%k%6^cI^w01utWm z>eU@&RCx< X*NrQjF{M#F+pfujX!od8cv57H~=mXBP@{vD$nH%;CY8=!%re>l@`CdD&w~{72Ud zxCbcaR=43fDPC)5=1ps3xB9i;*WR)lSS(Fv?61Go6|0JT1FE4B|5 H<$SMGE zrxMGm-dzC}4vsa#M1JqGr^QCo3bK(iwoIL?ZQ@a@MI+STniy_$WFej_#!4_C@<<%x zBdfiBca&lE!hv%bhvOxVptsHohH?$uW`hS}e!e};CBG6J0;rel>Y;=Mq`Uf >k0Wcv5tNk;Li7 tQ&UU`NhY{p2e$djBW5Z>)2EijxW(U`N!KJrw;%7*`!yPIXBlEtPa{bYHXKj2A$7`H+4YXzX_mon@DsFoCKp=Hq-2NcVc)#ZMx?BTT>9O^2 z%2{AjTLKxSt#-SWM};dlDA6G(K(~VXs;;CDXO!399i9S-;n#gXjqKB0uaEn~vmb+^ z=;gcUH#P>PJva$6fNtSH^n*{B>0GW{16FVM9_l;mbn1v=<<)B2O?z%XsMCQcZg0Fn z0Iz0mL&itov{rSizxiwe(I+gckY++L_;Se+UV?!WC`+_DM}#Npeaa=QPYuK+fd>i+ zdd1tdH>NtR4}NaRxmxeyR7T2>x8Sy9W=S)@3Eb3#knN*#F@Ikivt(F`9PQ*~y;G;R za(rd`is?S{0zA@`s?8UEBtDnoeQ)0G=G?h&z&h=%5?zS_W8PxHTE@eX*11VbUHQUx zW@^G#>k7&@lY&YKVwXGYG;Y&ghk3kx<*CkUyQ5ASl{K+SUK|KIHaZg;Q&EkfuQiMg zI&)2rC4aYq^>|J46ZkxGzg_ rX6 zIy(gPj`7dtrcCP<`+Q>T!LU`X{)I+=p}>G!88;^HK?Ou2HZoDi2=!=xYCO4nPRoY; z6_e!*-PY%>AvzlP?A9KlH1R_qlUmDDVcyXdSrC6e4}CPa$sC}2ry+Q>gtfQn#v(&{ zo8L|4&i6L6=$X%@uA^)10w%D&>8@(h786jP#a?W|(lE?@>9KNlU1!c8JTw5Rhu|an z+28M!VwfOzEZLPdACP!|qdL5uW_ZGwTzmWdt^#B`+J6%MC_BgE8Q*<|D<1(T1|zF2 zA>bfhL8E0fP3RC(PM69%GSe;VIezz>Biur92%3#APj$+;EkU@lvuda3on4^^9F5l2 zq;o1CGDuNNUc=4}+Oa@w2Z#|UR!;C_GZ9}sE%fqt#T{#+t*fQ;tkf)$IC;7th7OP! zFw_~OjCqD>l(VCoIw+>|=sx32Z)(;G&3RX-MIMU}zixU1k_MQ!vNUBZZ+C`s|5^yK zb+)nt3lJgvm-uGlJg8(k8*$2rSSeQ!$76md=2Pvqt;(aeN0Bff*ZayVrdCJU^F;A< zDSN$7+Xo=PS@h5L%{O>*YNBcH3XHP^Y!n%51@?YizNykV=(#@p*2nVktCl7yNZ$Ps z{W0{=a?NilYCte$4k`aVvC6x*Wfzl2Ari!u82SN?oXcG`ZtFK>^pVBS*`MqEyXl6Y z5U%%Z#wdQO8f1?#j|D_QcB#x=4Fv9nV&%-n^XwkBPR+c1C#NR{N|9bpOMG5q6hjet zJdx?CNy_1XD>-p#95-bQ5|7zyC~nu8r+=shD*vYbZF*f0C`@|x9Ji|_*As8bi8Gw6 z?`P~6^MQ@XxzNe96i|ee<*8|2HzqK{qVnLa+b#UoLva;O&+PWKMfvyGsF6ui*}V03 zrw1BaLTK1VU#w|Crjy%a)f%4i(f%3OFS!US*txkI$JV+eaCJSKl7IWF7~BkQU9j_t z79-7@$XH1_7M8#kMsfe%LY67;MAiFeD*SzAuBekhze-ia-y5bjv*WgOD!p;777>Wa zvd*Bo3A|iD`oD2y$zqD7o$(Tt=Zc3A+&J*_{ #y!AbwR;UH^kYh}iRFOQCnf+8cSUcK@Kz #U- zVJN5j3vyy&h_ZPj1%{vw-w?Jwa9?m6M+Htw=#NU}kD Fn%;GcY!e ziHi#uFoL~v1!yTDzXxt$J3OJ}NASjqU2TJcHbA)n0y1gA4(NbT>^E6ozqZicuZ-|- z17QBxc%gcGwdD*i)iFTB3w4^)8{N;`zBPa{v2yP_FS!Z7ogE7W1qEsvnxl8F&;$l5 z28KbH%TU%mH0$<_4ya)EU!|y0adKj(RVk#7;hn5=q}|-yWSeJeS+gtq*!qB(nVA;~ zI9TvD2^CeI7?h^Wpf_3p$^V;FLb>C%%8paLY9HqF=dUyWXyE7v&=N&XK@nH0mk}K; z^zPleaP)YW#TNK@daVyXI^kM!Wm0+u2TKkgig|hQgGpP=s^UL1eQf>23 j^rDFcS%gBb!kBjUg{s{T6%S)hQls>S5Av`@2#?n@@9GJj=>J_SZwsz!Ie z?%CPd82Ulb*>bht?A~SeT`@0$D(V>~rr(f>!R~YwK#9k|_os5%^S*foIv#oNSrGU{ z4(pdwQ&VgTpiElA^=| ;M0^eG$DzJxN=Ve(1^G{vZsJYM!*Wd>0~s^ByjRz+IDk?AkY-wpJ z-O=;%7(T)wSgrJ9t7HN&N;}?v2cid=QE&3#0zGbsUsX%ALACa>1Gg{P8!S+#7dd5N z1dV?KEFb}Iw6xA>Fnu7M&)ue0Gu3^s7GQg> 0{Q}! z?{PbBiI|vB!x>d1fzRkM;sUP#)^wKB2XM^%pucKWkn` }9&`h;nu-BAkS1pmp;Rp(M%i_5?b>-d#P$)s62<0f1Wo*1O!|i$JA$e*mKY z4#03ESH{4=V9~Dj_gDcA0KCZn`7t{AC^$Gcy$o@@SZf>aYEcB3Qkm_F7?@-rnJwFT zp{ZtWPXQ?m_LFCjCASS2lkD=8An0 0=i;Jxw(@&Iz)huia9v20#4cflQkpm@5wT yRNWE9 zcNUrj0O!w{CM)L(LGZ zm2U_HF(UNUprs8ID S&M%-g8R1vCp_B!C$_Dwo0W+vq_zupWq2b_x z`{_=m2E>X=6RauAbR<{P^JFZ&7}eF)H60t7G6o6A$Hj&7Y|fcjF;8|a*}Rx5e*=J+ z|6>f!772lvmapVrg4QRX_ 6NRai|G{s2)-)_WqeRH zV*VY;_(W++;FAHzh4PX&vDNQ!0zMCDhsmKdMY-<{&p)wX*U0y83y#p0e}NY0x4f*k zn1PKv@8D40VZa=h^k8IWEi|YnN$PJ{Iyr*Dq|!{>VdOJb5O)k@pydU q7+R|?(tkL`BdWimu#~^rZG(k!hc?{atkN#5&kR}@v62cqlIV7|+ zNq?VgHDy^7-Ai>WLWbG}hJ0HFc*3wun;kmzKZ! YB+%x=mMn) zo4+y<5D-zmk5&UhODgguAE0!@@K` LU? z_U@(Y>T~d?3&Q@kkN4d>iR+UR@3m+tdM0ixrbG~qFdXkwn8{Mz&c1qwO`+}xB2ZSq zNJ4YJe)xl{o1NL(n3Cq(WK1gAShemY8%B`kfFOsp_B)5>-j=e8K{O!bv>`ca0Qu+j z#h~{(a4<~t)b|s-rUcDRAVWLasTj07TJ0sh0tB9VjZNmd%J Se6fJ|}qA%YEmB D^vm%sMZ4Ms0u?W-(dn3-SeoY>e#hfuDjz!l7#+ {uG~L+PxWW*MjX;J$cAp5nhs`-Jh*pDaTOxzs6D3USez;di zUb hAGJV|nC*3Q3DOEC&~M{M2HkL~ zPhvJi_G%`sn9|HqozGXy<8<0d^c@OTY5>`0&uOM`;D5h0DJdz+64mut)YfV{x_|-r z%KJ@$lc7<#1>JbRa%Bh*$auW3SeiE?M4Q*{iZ6*8Qye(BQ!DU6`oz$9i~;n612XSc zFtmh)iHX@BO(FFpKuFVJNEEI{ll~TH@exQF6bn?|_>p1dtG$e*D%bjQ5R)tpJa#aC z#vsmA^~^4!7%6GoYb@mZD )D?28Dc{rngQ{0B~=U`-c^Bv(9*buwc&K7si<4MGTR%CYPus{ zcJ_GClLh}JHr7Byf;5g27e%aEE`#6lBe@ G=!mc|Gn@SSDmc3QrUcAxGbD;L)Zl8LEu3Gbpr|M* zE4vQLV8sFz=t1V-Ls=B_R1W<80Qv-Ii$sS6hj2O@JB??qa)`98- zhvAhd7hwA#qGkyPqK*Dg4!yS!;MB)UbaX5OdDd1}f0gJ6WVhFR_2 y#X<|ro^~vvPb{QoXCGgb5TS|hH3+e&pR+ FM$;o*}Kp=H>y6gHoGZ18q`cciAjlesMf-C1cN=%TE0LP&>_CwhNq&(+0UN60` zZR;F16>`!$_41$7auxDcrr%k(rZnO`&R>)GC?Co{JF}^xXZhl8dJekReK&Ad%1+?l z*gp5MY-xcFbK=usN9Snkw1s?`J`huZ*2LDQSNO@og7mBbRFf*`0m)LH5uzQ>mTV?} zKNHFMRB1UA4_0#2e0LN16I@3KhGSDwG|WnJz;%46+EPQMP)$%<`(+H3TrN1s`_v9Z zChU9y6htn!V`@A+Ji}YUDUenMuj~n29|!|~(W&J;*U7Wr&<>i??lsK)Y%hG&bu~)- z_h>#Qe?}zeMa}Iwf>7Ll9-Z&_SsIV?I_Se%+bSqoXYjs|D#QB)g(X8*&JR}{_UF?; zBS-#hcQOC bgPnjQsyQR~( &B!v5^r(aP=ClX}2WKMH<}Ve$0hKhqA?i(sy)s z6A*<+1lVyBMp-s5$dNo_WW;9*`Qy(5?zr>kkx6mlhvPpD^!C0!nFKfiKvvFy6G`H< zCADrm!CtaS1TP7W>9-^;ut9;rwFDhmkQUtE64JOG^?=(I{dodPrx >c1pm4ezkbra{boBq>?5(4!YQMHo zECf+dLX?y)DUmKgDM>-;kWi$%qzt4)kOnD{lJ1TzB@NOb-QAu0o6Fz(zTY|LkMEpu z)_9&V6t-*M>y8=Myso)EfB7;8uEncfpU2`a!saTQ_GgLW(7)(;wxTx-Yn8n2x>4N( z8I1Er^#Mn;9Fi%3JJEGr e+iWL{i1N->q-6?jCs(y@;gi~*q309`9s5W*~EPyCI2ri)r z%2sJb#Rd4;Y+;v(pqcCZp=8wbGBK;HxqnNv9HX6;U(@A}wWdzJwu^tLmIt!U?C($$ z 4Xns1N3^a%8V zkTlM~&cea4v9TFib957-qzLlq>+8dJeRjGP Wm4hVouu5R^DwOk4e80c&Gc5TnIy}5HI zl7Vegwwy8Q?NRdwHcn|;>Saz$vUpkZ#*x=q9OY0RXHR3bs3ArH|Mmx5PGJeLV?tf! z7UgB!?0aDj7;gMtA9b;gu$#h##EdmHHH*LX4X*6jf?pJHTzzBDNKK@`;)wk(uy{7* z^}$=nw~tIUv$)T4d2hMD-spkN>JaBT3Vm+CI}jwajRhItTzXo(!E#@E0J&fUNSdu- z{S*>JIv`=CcEC{$MKB4(PcQu~W&tCHfH|+)A|#d_AaMlEa{_Er4&zQTNUl3zXJ}0y zp0epwAa)#ld=%)S5zQ{-Xoi6Lxg9U1X}hi!1CBI3Jq^sn$qDqi6KyocpBx=QusjNK za@SQ-<(PWSyicca5Q{n28V zK%iC_-)mXQW%&C#f;c1#Ilm=N?5)fzMd29dGI)&MVy-^W1Ws`Ax6!=syp84a<2Ta- zuX%!gSII6N32No1@*Tk+CC>vxGdN|Z^Y@fBKx3a-v(>)dV?1ofx_l8Bejj}(J)!`U z0uw_D7!gr4W#acZSgf5^mRw+pUs!}KSNk%rxx)#Z6Y#!acXHUx%K_{l1>tX$h`RtF zGDxTuTycZs;XMd@JkjTcHQoT?0QjxCI?u_#;Da1cFyrerC+l`K^L1d+enV>GvYejw z?sSR(=BE7{_vi6ySK`VNfOkh7M=XL9DdzHdcV6Zf)bmT(9F0AE%IJb6E{1m*c+fFC z7Iy^f8NnPHK!So`3|f}upCDPhE!b()f_B25BWG1!A33^xxw>)r@ww}-l|9wWIb!Zq zZ8js=KHn)I=$7~tsSPPx@;q2?*rBiyo`llNKg}{M*4%nq4T%dP`j%>CuUvhAEY@hb z-4VFW=Js|#KR-hd%LQ@uZ8q&@;Ap$7WS2T0PWjOAmIaBP^X;vm`KI)0AAAM7mIxRe z2I9)Wej^&GUI1#qL^QMHR@K3wfW8jbQOEtc>L5l1_zDJram2d|v}_x{T>a?=Ke^}! zpTJ`x+H=4(P7XGVkGAJ#=jUxF+z)I A zmlqC5Db{dh+6_xNTj&d|KA&?m!} ?1Df -cR;clv2F4FK`$Q=Com+w{PekQN9DQ0Q^w{`S(_&n0()d3{;#f?y?%Jh zF9Zg90LKC6opHR2H+27Kne+wXq*k#hQK50yd}eM9YzzWG*dQ5x17->Y^$b9O=eS?e zo2EFkbJY3GnlTRwESg2l2}+#c!x$3WLLl_ckj~9h4(bwUi2Ll(rs7V~NN&B;8sRh) zb0l0$hJD?1JjPXULNY7cd?7;)@Bjo3)Zbm~K3&m6KM;t005HTutMOPQaMhYtNv?w!5xt@#25 zSLPs|kLs8=E$&N^)*zy&(X4c|_}>{oSxkni%gtNC+lQw+T^IPQCov3v2QU?E)Lx~W z9YmcM-_n;rDo`?^^ucj)I_7!~B&k%&s!tiQ5TNJT^MUnJ09cIQ?siKd13^062@1wQ zo_6o%OF%weyw;HPsTWgL#@DHIY&7Q~xb_JwDs1sTi+`RlYfp*dzDS$XPBHk04yZWS zQN&~)dTAkd?5%cn0&2LW{T<`}Bq_X_<7Jkl`kN4i2@}Hd{YzXg=)jzPs&r$9kpRf! z{_52$iIU7-+Z^Tmf5|^*v|R97orVR1o22VPv50(F#N)K=f4~8zs)CQmv%_!Wt8}e` zz3L!9x)C55kPM)}6L|vz10z@HKZGQuaEbOq?CURt=Tna $ zVg!BgJvBl@p6f4U)syTe7VO*oZxkj_%`-ZIG|&xH3Yd~K$i3$Fz!h#mUQNif^0zos ztlPI+PJd7FRxl$8zb)-ZsnykcOiX@PaBlx8voZXbgb=oa?PMT;1w+bKQ1{r@_5ti7 z9u8*Ckbl^Xd@LVlL0oini|;KO=cBpEEoUK2$$zx#l$Q4P*?8A=rVu%dvV(Eg8~)N6 z7xxfogp}7(J3q%3Dv{7tB6xkQGIK;b4D2}sw?^1qu!s1_*!G=YYlw}7EE5T_r)L$} z-9BYzuF^R?tb6t8;Kh^bIuxdCrb_%<<4o6@y{E1^R|a#ftLqln)((3p+LY6hcO(ke zxVp3=4BL7fU8b`GN^n@z9ZNS2WnLMtvn(C93gslvB-vo z2;}ViZf$Qj0$}aFMu8VtO;YkeWDCVgKozQdtz-nyy4dbSX(9wOeSX)nGzP+O+tWiE zDBFT74Y*E+;qS1;zBrE;HnfLgrcld6B@58S P{ch}@AftyjZH z`hBAT)BY$F3DiAG-hwLbp7KI_Q%DI8rRV&9bQAPZ#V{~5lmU 3UIis-0VHUHxGv_DKDZ zJKo~N{G>B&J$jF&!cu1I`Ewn2@{l(y77rQ=6h_q}+!yTPTlu7949~jACiJXTw90gA zZ)`^I;Y?g77CAS!h%HB1YtdOm?w*>9;`-3MwYnF~{GUoYa+H~P3;zRj!^27MAsFs| zuCV_LKf)3j_P &uv7Y=*X&HjBr zBjun7Wo~~Hxn;Ns1cK({Rd?Tgyo#r4ss(4)7-U8mr_hLMp@ktKt8X9Ud^-}g`PVEL z;t@R9DKD1R0IYlm2UmL&^kedXBs~#Z|1-0-2?=ixn7xlQ1h@PGAuE%Bl%R{H*Eqrb z_V9S2v0_Te73=8+Y$R94K(L^HHzEW+!|cVu?_!rA?o~-uh--za8VD~g!_I#NJvt %5dhfaxxCB5S zoSq0qEM2ThmmOk~hS!C60U~d{(q{BPqF6Y0ko4blT!Zawd!Y>sjT7pG94Vh6cp&7) z!lGagT_)dO-M#Ys$?U~Mh#sj82ob1Wdd_9qj{(6ltx#t?;Dleor0uSaL>8M3PVXE+ zfl<;2j?Kb9%FaJ{gE$XR(g&8K07ER^Vj_hyBLuMzIGAq%%e;3fz|<8G#SCO(|1%#0 z=_(9Kk8j>ew}EY)^fw-6+t>HmLx}BR(_8_`=x0;ce|zK^JRjl#9(5})z6sH}b?e`^ z!O9Xb{(X$lZv*~Q1(Lo}Fl_#B2JwmhPn%2I8VD&AmSt0zP++zj5P
aP||FGg v?B-w4Wg}Y1#Ww#848l9l^PL2u?Z5EIPmx1~@dxGU ziHS$i4)p}2s*5_EV?R2a3Btzwh-@ikHt5#uXYRQ_Yz$%b?M$F@yymeQzy1hd%g)Sd zsM%i3bK20Y0g%Yx1f-dDkQiM+$P>n0@uKCdpBwRq;~@|NTvTFTD_a%*X*+~l7a!T$ zZYx^K0^+ZYcu!v+inqRC9d~|R!pnmUaJ~9K7lDbOTn*8MU;wV-lVmxlR4k5^vSYx# zAe#n>0TGMplM+C?26jwyfr{|YMH7vn0VR L8QAf0vbYU*vSNzM11{ zvmzs+PYqsxtn$RA7-9F2034j`8x}^0M7Vj*TL$1r`AK-poBPsLkP`-QHw&Z+Lb>Y| z)YRS9V-AB7CGe=q=IH6h&om=o5kzuJt{w0lZr0;{UehZuk}-1a`}u64|Mo8c)Tl=w zxMnZtGUp+dVT`pZfQe6rT+LV7Z`Dx{4kE;1cR~Ifioi5oqUcyDO7}20+B=mKXF1K0 zMz?}9j3CMkUgL6AN0tHttP2P%3^|vJu0=6Grj}zB7py0Ly{E 0JR&g*t0zKmrU^Wa$0#GRoAxB|82{bK_9f3@37*ZUd3t%)r z?~1Qq9~l@>1F#j$9`PtRCzmJYMp~~QXpN_=pOk=hS~WBLC5JQ=JqWMG*;PV>`w(Uu ziu8rBfC%*iY%Aogi7zr$5fB8SEZ|XgLNG+OXGTkHn~FeXkf_{dnShF&QRU0?k2~DX zo0H8hI1Ge2r#rJTQ{}RMcN&qT+r1ZXHa^WhJA2EYt+$@PPGIILhWQiO+2SiJ8hS z9e*GYQ210)kwI8kcw0h%@Y)vaq&sBczS8G6+)S`P0rZG@{f?5ph49I0;h|eiAw3~L z!fI3&L`7;}l@Mr?dQLZ&w?NqKaPyj(A}kT@zq=zb+BU=4@>nG=)b$I81Hio=I8Hsl zNa*qzTw&c-cOIG90&$;Bxi*wPAP)jTHfkaW8j}J#3Tz$-rsX;AG??@BX1rjbVUP5c zegXtEm= Tl%F;gcuVfFfiBTLrSG%!V@}?$N|YQ@WRo1t$C`yNpUl?m|=w040kJ`Y4AU z QdfW;*x_X5@6SV7YSaZB&z1OeCWj@3Kt0S(g9FoZC?;G0zi0@Om ze szY4p^p9|*D5%FF?h&xZM6gSvE(>u8stVizi4=F>uJiz}(Lh!L)~H1J?=nF0 z@P}8xg?r>7o 3ST_|BQS~=3 z#LYdNg?mF?9UMQ{)~oNrS=0(Z&L8i-ud(Xr>euvy3nFIQ#J5m0`0;lf@SmiC0gKYH z-|+wKVk9I(Vi5dSwJ&c5HGS+_n8|OVNP@f!FyZ~IJskXNM8c%y|H8rMBM6sh{n-GV z0`?_R iS9XNjhgr@=Iis%S7JApV1ullK0T=0T$CAa_kJ(vvy!oESuBV;`G zf#MoPP+Gx%DS4T=z)xMjiFFx4U!s?9w T$uiM1paTp>GUwF|Hm(b6FLjG zsca{frH3{i2mrk!7{~kHjlm%1yTOim76^}XytSbxy*aD;p$P>a!oISZ6&GN2VkRjC z13}`wU}htToRE{*;BK6=Z4IRXBx-_s@{e2Jz)TL=eVa@tm-Kn&C`OqWV08h@mFouX z{OM6iO@QmxnxxNG=oQ@TUzO)FRSBZ{NbY4DpCx(q9<`_@bjyGWYbvlSph`{z-KoF& zKt*u_0}KI;>6V{#2jTwfDV+mPsHleKEj*;x5=t$5OFOz1*PR$Hv)Mq8bp?YXIuosy z@GF@6(5d6s@QI0B{$2oX+UUirI|NgyQG_39;GuU?AkKZ!jPzgtrZ2+2Ey=YOp8}pB z;>}rd%058kBFQO!E8Rq#-=`(6`^Ls^rYM8umlmTwd7_a@^ST$Wif{^4J-~jo{>40o zOeUo-OSdk*SJFqxa_SxF#Guv1m;UL7)(_#)YG4)8#i4j1@8%{1OyHofPxboW--svP zo8kZm^7A(XHMiWK&nq8;y&lvwy3B>rj@HDKk*ZEFo-<;^7kfVB`&EElt{_<=zxCxt zK(fKn0c!(#jjW3F+}n5zJ$1J1f_3x-H}m=Ujjo%HaTvd5<#_l=Zr$S7>qku_G+&_w z)DSX>LO7~Dy}jVQ{MzG`_!5=AS}#tZP*gVl(jAjyyNVweN~af(Zw68XNwt#eQ2aV+ z 8-7?6MH9a;vV}hosdO%S2J(K zUcejAJy+l` P2gAc!kKreBoDQD0WZ_I pD1C*Rus=& ^)r-BpIVKLtPC2SGD-SeFe=>{a# zh^*)rIL5oszMc~o>uSi_vE}oM$=+A@x<{E6ALfrQjm>s0K3)BJkoT|(ziU})$46V8 zjL-FqvPAaxZGiC|(zy_KJ7 z3G2q?Y$wcvQpB7Lq&nD?2P>BnoCk#h&-^E*R`;GncP@==VZ!1v7EJVfzdA7gF~6_! zqFH@B9WE7C-1sNsJ;Td2de`W22Ie38-rZE*U0}yLvT?U%!QlL;OJ}8;uvo$li7g!W zVCL6QB|s?nz<>9J{Ok5gV&2<5(?|8>Pm*onn9;6^_*D-QytE-4p>#TXP`4f`ao$QM zR6#LV7qhc)KTjZ^hw^$2+37^*Z &c>K`D&{sQs)S?cOLsy6?0*8R;in< zqo18-2&=U8=u^?CywXa7cX{le^Voghq&p9w!zY8eVG0|JzR;01D^}re&z!GPxQ*yt z-S+t$ZKfBHVtMu5sdMMTH?q^~@XZ(UU^(`2Q4JxZnD_S$96qKw-fZRfDsKG4weJO* zC%-&VywG9gc{@#Zl8 (U?S!_I``xr1gF-6$iD$6DW}``fTrM^5Im``zWc zA=`@AvY9bn2(QoR{AbpnLlKADp*51BgP*7N^ZL*P+3v+ZrB-_N286*ldW?p=7!d-I zk!2G`pBs(LRFm5am-UfNF<28-W=8xn$KB?<+%{-ZXXmQh$oZw)q?~7ZUP>4TAu=~{ z^)0ylho-nVh6ymRC? HS;8PU=kUx u`k)oLx_Ackw?RqVLGx~X>GW=Qb`4PKw~mz ^m zJ1bX*9`o_47sEQH-mCK wl!4^MQ9YZs+XvfohpibQ|VhC_>Un1F-d z^cJtFBUEx 0pBpk!E1r?36#5`gY1! zbZ=FFBKqK$OMfVss5ya!Acocr_gni$vBmzz9Z4@s@LNY8?-vOeoz?rBovXL!JJ{^I z%s2U8AWn>}zuYU*RC%83 zR*hwtJ><-}Wm9OY{9L*smCaAYX0l)FWksTu>&6w|?j!AMi-nS29 z;C4MHzsjb^kz2IYaoxEPM!O6hgOGe6EtU_KYaz`ZcnaB5+2WSlS6`FrZ{YEEyw*A| z^ZZPHLWE*f6}8^Q!C2LyyqLM;v$HULzDxY_fuZdHecr;QYu@6gckF-4 2g?76^4E*e&N)0yy>qw2R4dNe09^wTK9-HpT_u>sLj=RP1etGJt#Cmm7XxA z4DC?~D$sLKaEOiMOW}kl23G3E{lVgEm5S5f&|HW5xHyANGtFmu?6%{bdh2}FZ}`_= zp#rO{kU#~Ph{^sWq8>s3EUb>lO|0?V!~)sF#YaF{OLqg0W#BFE^EGHx!+k5qGbC@p zeyM55?7~f !pU?f&$muh zjXi9?C-+~t79o2&HP0REbbWAi3USumdsOBYmh@q+Ucb&2sX5Cd<)~LERfSg0a|6`q zL}lK$d|3Oz*`R~IyG2m*Yru`8MxH%{>+HcrnD=r{G>76lbPW1}zK|IOL!K4YS5YvU6YuPM;1`=gk&^O~!DpYuD7+FXUY1yEQ~u5X~;3P1rwtcJy=*9c)kYiZ1E zSfigT?y_-c<@c?8XfbDihgTZs%=(f;Yq^Sl56#}`vT*~>X1(L^lXjau>{pcctgV?6 zS1+k+U8iyEbB!|J!f+lqqa5!__!T=urWF(O%bX@`i}n54XV|(n_MX=lUMNZ$w76u` zC1#z`j^ yeO{5h{5 I(|}*9Y6FTX=Nk7 +)2}l?^@)WW$>rJEcxNlx&>Inz&({fSMZH zyq}omuCDxd{y?s5*ZcI$L2z>M9P9nY&cZVeU=Q|u7ffug=6idVzB-uH(tqewBhk6r zme*HKrcyhKtKmvTcyE mB#HZMy-@I z5ytpijhI~yvb+~|L_YO3VJLV*LRG;Uc1!zFHM=(D7r~hqQQHKM^Y^wF^79(?O-6~e zGM{ fJ5Kks^R3{U5kMnBr@+qcvEuJmqn_#;+|=a-~G0zTIWYm3Jh>Rg(r z$Y{gP+=J)DpqI~ENHT+&a{viVPB|Ou*ezd(HykbFLXr9VN*6)+TYIqQiA|v)%ecW9 z)gEQIY>+c}rHKg7z(U)NC?1lJ+3Jy)sKnlUJ)W(quB8bs;)4*qm$rR%jx7%0l72Ll zvp~9Vh>DYCwClnXmdp9|H(Adp=khzH0S`G&rl?gvW6y3X(Zo@jD1w;Cw-$Br*KH@( zeRq~U4JzNXYpl4aihi(avd6a^3uH>QOkW@bs1Xz;!OZK> AmO3h%c>Pgp)HBmnnfs{2vP`;H>xsi^J4#?j2i{Fht_)2pVw940`$F8cgpGSva zBZanq=GAPZgjG$~g$^TIGrWorAn)foHQDTs8I`7$0LlwqmIDkv!w(^80c!-1x|c{s zr>rW*KAiio(daYHRA=?OmPKFqQs#hEf8um{pv=Fr$AZr&yx)kt )2&BgQ;if1CjHGB{aX{;R3AnxCmo$WT~0p1RcD1eyI#kS*hy=AFk z>4*&<8R*^sL4z)V&F3F%E5|5`%^)d2F5;Y@41`Fw2i)k5@oLbwMgb*_ns>eS @>w~pK%d3^XjIX^aMt6!{%485Rk1k_Kqp%gB)qJ2K6q)vsyWaT!zF&!!A zgrh^m=9SuP06l|%QX){4i&JS+r7Y`_7 JE7JtgjiCvukH%>hZ*IboFH75Fz`As`h*=Y+Na~>9+ z%y6Y&QsUwl9V>6d^!ty!rePNhmHa|Fl{aiHu-YI%*3d9y^LMR*Z>@o!d}s~Cy|S}c ze<8dvwS;bpS`M$eo7crAeVSgD{ZUNZ{)6}G{1H~rM9>7~FJi38z2mK;Gv_K1?HnN> zTbJ|mm+7#L<_HN{5>u#AXsinbR%&0q ttv!6w+`%W~W`NJBaMiJ+zBP#I> zn1o-tBme0so; OKE*jlDpL#9YfEP4H+4|Il;@aaw?JgX0!y;?O zhOLhiwnkl!xaJe@x>kOZS#w!W-dnF+lT4}ytuS(3dafxx1$2kgX {Y;@a9)a@fxsc3tG=lH~;^?yE3>(4Bd_%$xBV= Lm+p;=5#>NVu-0dASK9!&q^f1HB}#^NT29|Lq}lh>%lwzdF*a|TW@Lsd)wlh z|GKFr^TWhEP_2|$j&)87QlvNcJ|!BoICOT*(rrFBPXdSsxq{!M|M9AW0-DKaDnZL$ z%=1~36#tbW&+8&VF~w%8p>x~<0F)q?pZ7Ic#>*Ek@VFKGmAFf(^)aQ8nApp>I$Ei} zXLw_e2$Yb)-5`okLO8weUw%!s5P0$LQ{6eFCaz8-|NRolCo-St2p!i)Wz5C#JBPgd z1yY{Vu#OzuTbaFe@dBzl@gKtJD^2)ZU3}_K;$zy>H)FrPF_(*}h$r40Uj+c^KVL=t zOi3U66Oam5ZHk$f?Ug&!vv|ll)fLFbt^UJRfYDrm(QG;kd3BWd3&cHtY=eyr3fsH? zGY~Nth&hkod!?U06d3xy4kK^4`oI4+3ztD8sPf-$yC{EImXiL@zkOf)L&3=D_oSM5 zq9hLHMK3v`{fG>EsCFS#QXrTi0@kNb{ky4NR80D@0#5MlS3WyuQ}W9VYrMeqAQE!b za0D-KT@sFpWoihFGO_3L#<@Cr$a97RDJ|A3$_6qu%8|L!nbkdp@ALaluASI!TEu>^ zI=BykDx`XbR_+9yBA%D*_Kr?7&CjjI8w=O5@hwk&FDhLp+J7CqlOXAJ<|5H*5jp;7 zwb|*0e}+HS(N>lxK6=m!-!`s6dBK)Un4)Q5nIwsZE5LQw{g6kIRn^iq^{aCiHph#h zi3^$09OE}U>r2lZ#D}j!ewoKZ{;qIi2fQr_d2FJamTuii{{&Di>qB~OFNAy6{xyi| z)|a`VqCeqbzJKRbmyXc1;N_nnUTt@eVR;~r&$UGsLNy}ZW&SQgfrP`g1nS-NbmDP; zI(^T*Jy+Pq%93-$xYSU>=VBAjr22GxH$4#_ z^e+a!6A>T&bfVfMQfv0=t9IJeBxfF5YlrN$p<2F6JNHvHJFrtW8mf)(Q_GI|DnyLz zonMGE9$@8M;eFp?V9)4{b7G5ivf~TXym`%R>N$Gjg7?o}+{jV1q=_oQHAXQ-g=*pp zRgrZ0U(M%P{?ei`vbcHuR_}oeBt2}(^SZk`r$(>7$kV^G8p(7qC+ *o<-)16YkRERc3xDeYyzDu`jrareBexC4Tcd z=D&UH^_U9lvBPoOE8v?!zf@M_e*_l*h7A;SHi11E4R2z40Hvwp{WV!AR0rS|iyzj+ z2Qro5a(>jiBB#FW014M+z+<_OF>k$7dRLY&yNzCUGxh22evTa&A8NCEYB*b-q9Azj zM1 {vVkd2d!Aa1iTSDu{st*Xo#R#) zMqWdIlTD*lON>)oZSdW;gFXAzwe^O9V@ZtFI1h=*lN4uOp~tI>c-I3JOhc~8I(d{D z^SVSY5jhB?zrN_fUi&VA#s|eK5SEY(RAr> jqr0fIFNYV1xAn47FZ1gZsKY zsy3KLDgbvU)=ltSc0FL-=!`3H)x=>d%Y(Ln9aa|rGN#zwe4aH$MngRPE|W_?zQp(B z;Jm9IivwKcA)~-dn1_x(!`1ru>wtj%ApS1ax#!^r=mD9o{N(0xGw~RXhDOe3*qL5- zxKoSgWfyLdB(-lulB5=`;6uhNYnmqgAd#M_>!h*J@d3aQrVSfuJvpDV8?7%&4M2L0 z{SMIinrw9KfN9vXDM@*gK{_&P{Q|yDK5Dti&DKRsCT`tNdrEKKcBi;GEviezb#ka| zkhi>x@sy8=|H!;sMJexkF{ZxdkKm6337T&fn5Q1Ao$8uJRb@RR8RnqB2mmQ0w2YW? ztVCYcf{6TsJWpwWSAppCp$$M#s(j{nS#=)oCF2C+yuJ-dMl(tmE?0evQDU>t`d&H= z9BD JUb_bgZeXXUxqvna6OfbG-lQp`^^XoGcZ zZSR6%wp05Xll;m;1seqC&Z;6$Mjbw5&pq#&-Bx@SftDI)PoM#WLf?u$!dnf$7p(`N zC @WQ@t?U=WGqMsYYm@YD4xMmr@p_sl zC3nC0>yTeU_Wo>pq{TfAN1g2Eu7QHN E331Ud?^-lIz17k za<(M}W8-!Dvg9s#P2Ww#LAabnbu94eK3Fj#(TeD(504W=$9R6Bp~uZ-iOd~jOWpb2 zx-l^8Fo#48H50|@bp+S0I=cBaY94#8j<(yk-^O`e_^B$(ei}cNQ{z6L!8CJr2WXiv zu?T)I32~{I3V~F-ZLSU~>9*z2G634HR5-DV)R;p}luXbupsK2h8u%Ps-Vpxe!)r-y z-&g;IXakVy9?)m&H$2g -{Kb@mx{<1GTw`c__Dy|>yP5^RXb$;$GY@@qJm~&-@eX;9y z`djAviBLP?)M`b~-?;K|RlWLa?(MGW$_}&ikz}HLzhavOqiJ8inb|4#c9-+gq7^PU z4jRv)aQbLvlsCYxy4R+P|kdV3}lV1Pu383!W zSI_&denc0kjr^$WaGKKfIdD&aNkdk1UU6790rg^N=uid*3KV0cP%}O}JD+Cnd07)@ zH8a8e(R!SdBN__;jqD>O3^|* }NLnsd^S(1FgPkQ&?TmV4Mv^TLofr$ag77h|^4rbs8>z*AiPq g&%R4_S`{jDIa`@a1 z9UM|5`xLc_5ql=7XENA$(%8#aaf+!GgB^SfYf9y+8TakXBY((`eE;^;1(n(aAEulO z2+*C=UnQwH&D5<15t`DUpmZ`}!n!FAJ-1Wb1kXb~1&Y6I5^=fH5u&Kh6rJ4PMh}QG zS2|l7=6{Y_S}#fAUA#%4mnq&A KsQZr zg}NKd42d~PI5u4A-gdb3JY%5ZMdq|__U+8 IRf9T_z5hJl*>1R{6&wx-R5d~ zl62CjWl}xkG5am)oJJ!i)VhmUO58i_E0v6`m9wJFC`YZ$?R+osrNochZ|kg-h$x5B z6m`#%@IyizCP)kW6Vr|qD!Nv>c`2*Y$6`zi3Oy@N3|umpU%Ysh^K5V|se6WIqN6I~ zN2-$PSiY7~scV^BNMCC3+H0rv#MMq=!i2CNp^Bo4!dHWQk0$~MeaN ti7M?JcDxn8Mmu%mfNP1T9T@;17mQ8-1gspog=W zgJ*3IcihBLq%Zc)LNgAh73i*)tJQoodr`cIO&4e7KJQT2)9eu(DD*cwL)|vAWg|Nz z*S?g@?=E+^y {dKf7mk5vdx_hMy4WF#9?y z`q|td9<$Bi#+<2V#cBAbjMM!f+mbbQH3f6J6q=0SGyI7&gK}H%pVK=dVSLjzEep@) zK1{Uqdz8gy9}f}k+T4_MpB)yE9e4j6{@~ct0_zX`m(|EJ-N;PSVZAwX*No}EarAnP zVlUhee#S CAZ!9KGJ*T&A!-Ewll%TnDQV&b_H5W#GK{RuSZ zbg9Wc)gGz}QeP_8DOjU;o^6O6v7F5=>zQo2L|*mgCR`m!@1hsYEj#?S oOWK5VQQ-ZPkV_)DZblew?N4v+O{S9oorL@aW2kD*+ fI_PJ%lBKlQ3%f6uo z4|X@>t@Jdba#z`eS=&mp&vnNX$a6wI2zA756W^%be7bk%x$7V*AEg0%ZW!(SG)C=y zSl3Gbq84S(_h+Kvv} r9*0t7Ae1>&&?{%8u9vST 2_+$ pAjk3r?{|6I-V%zcSbScS8KVm%7rik?z(&y{`5)tQ$qTTX5PEdMGm3DY-Cr(z{DT)(r zPhCcMm_?W*X4XBPr^V~^_8Xt~4Hmifn(k5Zt5OP`kjnIgquh1VzLZOb6fKIXJlrW3 zWy*e0;-;(E@u{pW<%GTy+w8 CO$UF!IG#Y)h~< |m$OcX1?f^Nv`_CY~^N;%$I=NY~fyZa4 zn$Y^GKb?ClB&RXDL0agIQc<;uDRc_@xUu@!e0%3_g=z4*%bsY6DSd<6QD^t^+wGe= z2b&Xn-LiP5O%<;y)~8T0A-5CB*jRha4zx2q?TDzDE_cgQn-C{-rGdzHxmQuNADaE; znB`Wh!do+3{>YGCz<`UJI)dWh?P#hXda8AO^s(CczRTIciLCv+qE!z=?)kF>MGvu% zuyFyYEkAC<8=0-LtQ%u6nDOH?hh=V~ X! z#PP6~G52mAOR #Ap#zSQk=9WpM#S3fVrm0Yhc%r;xJwH*Lzf3 dJ%{%j69NT>(z)AXk@A61=x@DFJ<& z)+x9l1gsi`E}@<4EtioQeDkCM|C&dxR3Lo->%{pCUMd4ga 5Jq; z#S+HaZ$EnLxy32)?_4CB+X$w$(5Y4*)^SB_s%(fz!s!R0{ukS_e+#BZ@=6lG-mNJv zXO2Ja!fw!VdzpZ{KAehU<)Or;7Rz)0T-mJV=y~>Er|t?XQqQ7}#Hz8@HzVUAvHaSa zw5YDMI(I>bodmR6+zGC-!r(Y_>jc5T#AuQIdxd3DZS>hW{@HrM#9~lyMCQikvjGe; zTrk(%n+%c6Nfw8pF9l-Rj@)${n-ciCs@y^SI=lCl8?^U;^5_g|+kFWMjX@h}AX9Y{ z`xdD){C3XP3ssKzgDMMB?$ha&u(1@xfa1=r4Q#WEDCgE1UmdWkfOoyf4^D+V4l(s+ z3cEd@xiEPvBPZ)mV6iMw EI!7kd={v_w{@R1ef zV>g2kGF+eAaxp&-8;sn~YF9`c)`VNz*T1u)_X^lZ(3Ouu8j8?DmKGXY*|*P({r$HO zmW%a*R5ZH9%BKnJyE4(wO!RALO;*?NShy;aXwwaIRf@sJIIIi)>_!bQ6xnf~WE+R| zrbK#cJEyez;}k9V93f|5VS+;p2Yr@0f4-87eCN}rGQDY5BH3{(k!GV~K`ach{4A$6 z1eWIq3<>7rhVjVZz4wheLW$3Q@vBhhCZ(`b$7A-D6|jl>BmB(#WqKY7igztW%$l!= z_PU_Tx{55JFMF}|F|CDG;giqk4f3(mStFUAu60k 4XJv3l)%ay**66*QYy0ME3cM>S z*BmX>(_7GXp|nigg~bB9t7(p7$3NSc9*4(9q{BL#&3@BcD(Y6dI?grwA;F~MgNFWD z2iS-g9w iC*@RYh1mDJ>)ktR_iRzo zxjV3xm6H+1rJCS@Y)1^=GGF;tXHZWsea$TXJ-(+-%VWGfQ#X9P`RQuk+-&V}OTSb4 zL7pAWIj=$OzcbUz_6E;eddo$ac@!lZ5;j~?Jxvh$Le*XgUeMf|C(z=bYOAKYm|Gf~ z8Q$jM`}`;JE${B!&ZoF0lAzdmxF~cn9o?M2ENW~1yo6j |DpRBfaZ5*(~ +*%EDXL@&v=8?4kd|3h>lR1+U+G{baYbYtCN*?@EIR*k7M|D(GAq zickCR=9ZQ@WBLt6?5NY8^_vC*&@glr_d*jiLw*dekEznlg~k FEi@OedS_1WLhweV_q`ii=A*^phz9 zsSi-tmwt+xJ?7-5YZ(rknfO!gkd=>uu8@C0v~f>{c*(9heT8R_%&fIy>Nl6mwox@S zG7y0CXIZh7nj}C;3i2f~DN Tz17sU%QWP#vJW!&GqDggT zt9pDZG7rvBi4NZibbmTLu14h_fP6#;B=XQrGtPc4Tut)+e1(Jt-wCtw$|nLnmHi2j z?a;}945 n=~a8F>iAoz7jn;3l@}myrzPIK|S>*gy{DMY|rrUaNBZi`0uHlT)>+j z+4*;Z=v)T+9AZKmh6{~@$O6A5uS55>7&kd wrfOr8pE2qe{FhAOQBD~jxrp1)I)}lBu7yHDuc%k; z`L!Yi8I_9KLf$Ww<%vDh=}p$`A7oj=yPZRlp$o)HJ6Bf`|F@ySH{CxTiBDx@=JaS7 z$Gx(9lCKX64|u_FJnd4q6y+-vnLh1(2Dzy3@G>+q6 O1{jH>Ptrmoei@KW>=*xa2f8YxqWDDYg@ymp}!+c_%i(K*L!|m;v5d7 z+H#hf^<^iIX&M7&uYLP)`IU8IMO3Lhw1~-}O$WIpE!#@8sAtVNh 7e7!9TTGYt(UzXnGR$&pW_Qm=oPi;wj^kXZehmX_8Q{_F54;yypO z4m5mm^tnaw^NslDprFVnJ# R;n-g9teJ2s^kAXzm&F+9V1z7qwO0>@%P@bM2{)50w}K8OXTRs(mec2 z($uKLx_{+coiw8op2po*c}?})iaNVWZ-%KI`&3j^Ug*@qh&sf6?_=#hezU8Dm2D~h z{%JX;9b;5Va ^*O(twNsZdwmL>=|oL67{|*bOo?|DU0zaZYz;}X%qwwlv4xlv zaR+*dXIIS0DC6(wB ~B6;K)zj%Eh5+-cFvwc$p|61{~?j3r1`oDLu6)wY_I)0{=Ga0;&Wr^itRe>jb z{W?{%v_o~h;7agcT7`QjC0Q>F#6N&O(%6ZS^Szh&8%ew?_}5e&NEx*`243P`;ljT* zWr+Jp(}DD8SLu=AV&ctj&lE$II1H74N3i~oa{u-2y(a37B`vQXK|^W^PG6}aB}~~} zWJ^64c>Y^eXs)((h=G>S^bYYySiX6CfpP-9tHOkT2!(haJbcS|xrq#>{)rZCWFUEV z6*;Mc^+AcWB(zMFkj!oqW!>WF%LL0(_3Ra)3c z0`JqLbL-=_+ucbb=9?HPv<+r+YFyOi8VzN|IL0ixBG4_!#nA_!OPbN^H7()KfNc1K zBu$F9jZ^ealK$u?Uf8MMK-!Yn{g{f+Td2tVmhdugIeLzWb(1eu@~kv{Dx@hlY52L^ zTCe%guz;=HIjf+cU=^3)wNkg&@8p2Qt)b>WZ<6~s*f57FZ_Kb&-L+%9EX8m3;=mj0 zq{+WY5>pEAQ^fyb?7QQ+Zr`_2QWPpmvMNeKiI7B5_6!+mSeY4_ku6$?Y)batn~bJP z$yP>4lB7b4jGp7teSd%7-}C(Q^t%7J`}7&t`x@ss&ht7Bf%o!@*M 9ofxCOf@P% Fv!$O@9vBp&`Nh`u%jWb;@Ox=gRlr z&E28dyiyiV{3)rW`1nF5?xsDjo=q@%@wMZ0PW|01o#{Ut$E1B(CMSL<_Dm0NUmP16 z$ia ;^QNq{=DB@ zuVLQ3Z5^Aq0<}lEb#tnDnd@|q#lr44gM)W3#LfLS>G|Go)9>Eo7R+|A?dvUL`pr#A ztv+ b5pA @}D-SanlxIdT;Vx&~J|jQe zL{B|o9@$anAJsf}Wb&G#gk{6n=RWgWZKurTht+o|Nq)7Ocz!yi&uqY=>4n|MRL#tw z=dVxiTQ~Qx8>l1)$&i!q>dh|gXD7ehX2s4YKU=wP?LW^}WsPS8uekiybdF)ep#;m= z r+G7kRmba>jt!`KE7O}Nv>BA?7%RoGsbwTwRG5PQ zi@9s`*{NgUtG&XNdDol^L4p?*!euWiTx9v9`)aRRkakS{**wRdrrq^@ot@X!6>bfD zyS=a!=RHN^^=m7&-(<~#?+hqHuQM?7?GT=RCgF8S(zeP_?fG8zxz}MAx)y6cN{8&I z*VfhDBPjUw*?G??<*E6Fspos^zdidP_;esbTT?UX@#EAu=fwkWHR=}*NY5|$UZ@Vy z4)9WxN<6#f+O_O_m!={6%+k_hW3hQwb#Lf15Dxr7DEeqj+tMMd?NnLhBj#N}?K~O6 zYV^^{7b`zpy`gnkCiz2jHs1>!pl<-&c(~Jeo4<9b?`6*z7u=dcE)4xhuvCL>-+|NL zdL>*gpE)>!6<0xS-@0|qb+yoyX&!NRUcFY?BqK!npb6W?Fw-KNWOl<{QONl5>R=Wj z83?cU6qy8p6I#d6Fc&c}sQ9VxI`5fN-OS>gIBm5sU6tL@rN6U&U~kYP&61bn!i!&j z%|{LjY8so}M kKPv*nrC}%8WcKjVCN{aiez@HO-(%(E5Bjw)BTEN zy}8pRlLf`aC(wWeG7aBfEPoJX yc0J`J92dQ&Rwo+kj9PP*-JnO5hdT2 -dkF<$h_hU`!N|2)N=D;=+k wLuS2M!Nxp0Lrb zo1VMO&E&VQPPwB~pxt4QVsEKs3YrYr3Z!Yc &EVe7aAv$SgUP{MH(3zTp;&g;TACd0-?xCX=)tpSZdIO7RnT z(vxt tvl^1XJ!FLdo8XV5_ zDtt2cC-~6xAf#Q5OUj$vUZw*MuF(ZWK@0BST3@o$(TQBOjx`n6=_8|}KKnCBX&4y| zIoznNGI=IzfpM-ke{wq100U=RLoGZ!|A@MD%lso)ZPAx*eTOcv2)px^+C-#UY(fU& z1lFsZv-MuThdKXb7MV0=gDmVbZk*x9v9Uq-==4~5uWdVSiOwLEc`-a`(O2o<4w|vZ zgoNBi4v&|mOCYDnd-?L^@T_H=7|c8|$6wt$5YO}N*;8`pW{jN7gO`=|=j(}uwm=Z* zM|^E?0F{~r!n{r}2PA_4vuSiX3%A?Dt!T?}d(#@T7xfE#p1L3<>;x$xLfUF25SagN zlwR6a(4B*s=_y_U#gHQJF-BPq8DUo5z5^x6Va88y1qE)Y?a+8sxzF_33fAFCH!5kZ z&H7;)t3wbIZRMd>vq1Wnh{mrhw8|a_+1mcvsJnOb7w3PSdN;i^|7|?^hG5%psB}K; zgc1rPpVL5_pnyADnOWODPr5mQ5)qNtv0whBTu<5eV{gl?xI+8(y65sQJM4P*(&CGw z@71Rrs=O_-4_?GXga!D)b(Y$cw%GScA}jd~S_x}|k1jRNjqI)#V6<3Q=L(exR^jtE z!O~lBcH#YIR!O(Qckbf?U?S24e?p#M-K=p{zpd7OXp1zqeG=s5ZSkX~bHepkn(#H@ zB53o{(bndLZb|79E)c>mL_|h9mvU~MVOeLuXR>@E MmsV6pYxrC38kGs?K zCH8d|Xo8h-ciJ770G;1m8qLD>YG1(w@EyK*{(OxM= jQ1$M>t@oLSbbA%T5d&u6_>-Rp zRay0y;-(H8!qf)`t(K$~<$EjhxoFoEP=@0cy2OoSb%wB7>iV zK5P@&K%3;y{Ro=%@#jr~U?qeDCAkcpJ$UUMEMWN_Y#F5;RcU&x+2}wzejvM{k6Zf@ z+=pj6w1}O38p>IK40aFD5>SP7qBA`QQM3g}3Q3*j!=zgWI9wIm1S iRpiAa_x(c4$K6 zFi2LW+$4LDq}x`FZ0g4qd onEb`8I>v>i$3&Wrr4QaEOE^BB*llD%`UKu2d8uZe-^23qla zz(PL?yce5_C8ea!kgaMqSNrST*4axK;I@kKi&Y>XPj2{z&?1PQoi XJ#krN=JC`G5FC;UTrD(E4aO!kcT z)_d2JQbc5QG))wH(~cd_&(O%rY!f%}wtvUPhQ!iDJaWtCpa%| ``?!N zYTUdrlAX;LzvJ3zc;w6*ekr?dFgwnPz%4%rgUeUoz4v7G==N757soV>5wwRlZ4 z%fL%54uljw_WM30IpA{^A82%cX|`t`Ww;UuPtYuWR@}~DXWg13Ob!_b5$dg!|7S8d zR#?czZa|+%E({McF_whZ{FGcv`1~VGnuV*7+u>J_h`ZUC4u48I_w qr9n^Y{2mT-SLy+Ddr!!JB-` #l4fK`A{?O(@IS~TBm8q6qAp%7KNEWD zJt?DHu5tc|oG}CgQ8I@tk!$hn$ky=+BR#h2NdmA0$ao@w389k#Dqz8a z#(|Yww4Z)=?hBM$+4y&A4hY`WY>LtK3-F6=eWtFcSafj1V~M+X>W|AyrNCRNQflDK zd+x;3<;Anew10PR8%d57iuVQi#cHO5zO#pIjq#mUS*R~m;_261A)(J(UI8E8eSBN^ zJ`5_5*a{DmAsGNmgFMs6o;VvaC&UAiF~vj_8DZZ65K$=9YZWir&sw_nQsH(y=Nf7e zW;`Hyvq^nRh-K{TP72M2)SK%NMYVhq1C(--n`{{3E*=Pdpj176m}z-8{9HbrWX(u? zcNY@`@JE4H4|7idkrXu Lqd%3Y0$qMbmv*Nu8 ztr|o3vyP{9U02+)m7Llah5 QmClF7IQ80DEi^BQcDqo>ZCv32Awx`A`r`bNHz z*TWxCA2vx#ajO+|vd=*hj4VIrd%;-D?$hP{NcHfz3^}k?LLZXMQaWjm`D#Abc)PMu zivye8pE=lIPs$ 7*TwMTNi9NaB$E!Z(K(>TJImMx>tVR0^m zaQ}>mio$(~HCMO=AO5pE1Z-FyJSIa9;6se;gX^9~2s~O~TyXU96)$J$ugL8e!yb7+ zPSaB{N+a-q`9c`$3;l4wxgQ$$#@+3a?}ul)eHP|3ZH_k(vC6BQ=U_#EB^PTgw>Pnc z#dZ^p+cH>!koTbr2+c@c{HwPGG7 z*7@_;<-x@j4sb5mUX{DG(mz3}r2Np$%;9*7W0WuxWH-k|v|g9X0|=oDCgd;lJJQKq zZeuu)l+-1NvE&o`COitUH1;Hz203LJ*i~v|ukk6-anat)odFw48R9g>u3geA=e;vC zWCKcUWxuT(wL^&{slNY>%hnqnxSSN8O0F_~ckFjw@bZ4+Ky&K+{rar=+$`@yZ+^-y zPS_j2t#ZuZwggSLJ8H3UOs=x?l6@?!J%Oi3djT19E5h5gK}e2uu~&ZMqiZgW1LHGR zppszScg|;%fPty2xKLVUr5@ZO0omcmIQ2L_v(TLK${ptzpO?LJJ8X6>xVc)vfxM%x zzk1|MYQ@%9&K0)(e2P7l4k=P#HZtk4EtQg$?OpA1)Fam$GD~N}OCe+i@9QDYtSde) zs{Qk6+rbmwZ!w-9ALH$m!a<>x2Su+&r~A%ZMwLa3-yoLZ-atEZ$EC+I4)8OA3?Nw9 zY)c#Sc&K|p1$P{GD>T*ALi&>)--l9xqW667Ku49M`NX^0-mmtg>Xs=!{ZhCLKMRsz zEzr{x9%5rN2iB;E%Twv3sDe1S8Y7yZ-}Mna8#80=^0 Azp9q2 z+t=2+ZnW&TtNQ1q`;Mb(hw*s6{NAZ1nen@VKQ68N=~!4JH)PxWh7%Wo8#SLWes&b& z2~0U%QS{oAU#QQy`!uqzcF^N(b?UdTXxCWl{Oiu7 5d_doO$*WpF)P2a;ro(FDg1&?%U_`&z^{t?;EOWo{wtx|nu?{MK)ivrBBM z_s@FGrTzZ(jkD7K4O^XbQWt}{N0_*1*z8h3&(|U^?}z=-N$+aF@ut`|_`n~Sf6E6G zFaG&$2`ur& n>dYG9f*Xx2~%TmYHm=awXY$Um96@{)ojV>^(CjxW1TeB8~j z`V<)S6?T%BkL*ZSiA@Gep9UyoPy@`|o lzFw1I|@KU{uzN*+ZJot7R9|6~l`9~B>;gIu|neHHol$M<1YvPc~-XuS^E zZV>WFq7$q<0 dqF8;$3w5(`0MDA3S0Ke!pZ=M|mB{^62_gp7$^N8cZ~){>DYjcc>7W{o z#|Kd0CH4m42R}4Q-Jy#@YOrGCf``cae7?8HQX0K2H1da1LKafahyQCLK?tvSLQXF5 zRTz0Qg)yZp$MXMNE&N{(y!;xMAIXzWyA53dK~dU&kLB5fi*h)Q1bjjD`!Dp%@Amol z;rgC@4KuSeav9c@R}&6ywKAX;uc_OKpMV8)gLlZpRebr)@$l?M2ki%a0EJ{gG^&T4 zmb}ij>K5i&!u4w|Q9O7Q#8B~fu8*ue_iV-T2iGIq->!N`LI>=T*U69$FE0kg)qCnv zbH`vHT2R3wMn>V^xdxNHHu4dYuKqJ^HYMj@oq&c!2hz+M*=3mQ4S=(U_@vlr$O5@T z67Zi5dXD6%Hh>F}nYjclzx67mgA0w%#zye^=EBVM{Ig+7ksZTFpopo4N`lVXOUuLM z@*}*EuM(xtf;heiM+IB$?{h>XCKljAD)2OkK*{Bo7>@!&Ny8np^R6tKjkjn5CQw$_ zMM;L}9sKt=MFE>4p@dcoiWbXTPRJS(t5fc^tOqZql1Y)}U@S*I0GOlZ5&3SPn4c}O z49^kQBV8ya!+^6F*t16&KCJA}TJn~wmXni{FJ8PThCd`$q>E(JCs0V;FD!f^Wcg4S z6APG=n#xTE{ZZq{8*=cVe>x5Yh0?zZ<@4&FdH30g@RocpMT;r-KTC8ARNa=}2Oq#) z8)BVr+w_zwqMNM_djRz%@?J(qsij#H=r=t3x-SIeXcpnvm6oXQ|9 `pe&k zv$>5`L<}$v4TO?I5yJ=t9Xe2;Jph(@QuzJ-T;0p~@0Rx&z8bK+RumTdv8R%kA9^(z z6{8NAC%WvsrnjQz-TYO<=C};ydh*5SSksC=?Xu !r+J=r@mJOn*KaoQcnX`XK)6Z#n*7cJ3%VlKDDrLIZwYt4hR+0b@$ie z{;9-;fx6S^sHd&2y?&jx=_jDiAHezecI=P^E}h=pm8+iucqS9zZ91&fh(X=uD%3Wx znN$lV-W17h6}8a-BOif>+%I5KF=<+01$^}G9nMrKJXo1krxJoe)t 1H%$cTFuR0MP_ =(tgpk%ayk_*6%^2_hA?XE1`SB@40 z3=lRly@{Ebgksl2Lv;-d;>OA#sAYj&soHZ!wvn*fuJfYt^UNR(JaF_t``U~DoXj`O zA~0xkQCr&ysOrc-TkB%Tfzr?@e*I*CQakT##IoDkb7HqEK*KGno8n$Rs7S{FNo(P$ zvepvU0j)eM6Vsw?&0i^6780D=6w?PB9UTv#-(9f{fXe|W4mDWo=;#;}8DBwXh%>}D zl(H?~L`O$k&wd|@y0BNj_!z`DBt{~%RGR2$X`xP)160m{bu099Nz;oO2>6 COH4h2GuQ0DWA4~KwZ7~vv)-kmUbDD&&*Un3|v1ZzJ#j-?qCKcfIHz0 z1_7(Ckx>#Drc?gR*Z 643$b5l$;O7Ht#Glk=Gj0 z1iS=(C{486pn7 7ykcaOk%|zhL zZ8s Y8=2( z{=^DcYeaqF+$j0Ha-ysP^)ABwQ{kj>t^G<}(Q9GY2r~ss%Pd6kdlWx+=0xv~twu8n zySV)k9HJ9X|6*uZ3ewr)J3{8U)bcj>7+_#gPX;l&ceyyrO5tg_`^%&6+{wcr0?TSi zcvD!Yfjg8E6Q%7`O|@qV$gWo`zDz@65cWeZ3gO_Cwo&R@z!rh!)51+}5IVEyojH9v z57$tY!x5L*D4k##*s91XZhvo#O}I{Mroy~~C!Bx4H!x)AI`baHziHrYzJrpx?+9G9 zuTarU=n(WZ%0M`+*yU&g14E$ckwYySmz|}*fjV1dpcNC5m74l^>dr4WNrP&qEN&7+ z;IJs`^$Lf`TUljiea!>}32`PK{rVN_JTpN4$`{&bG8e)+5@LF|QPk$mz2xNWsD{Pa zN_F(h&or^8e7T*9#*mm7*EB|BdMCP|3E=lN1$}-bxC|FL*Fd4Q{o!m#*WO*&Qn+@T z_W84w^S5`Wp|(VK|NP|)pspPt*=~1jSbh^a^k85GDta&MZbX%~44a8m0#L3?ckB}1 zb@Adwl^N~+>XaoZu@Ixe>PNHm9nxQ&$3uRbm1uUEo0>uf(kp#J;B1{C;MAyz&b&ip z|MbX{zHF2j{B7-EO|$d!PXf7AP0T{=6}u-Kh97oCb>0HIkdL2#*$Y(8UzS34aGWEw zvF$FefB?zBM=n-%AVH`y%x|#9jvyu*JyRF5>rt15tKtJv4Nl(J7ulF3v|gzr&>_2O zOqe(#Y+2M;gdzoS5}~cEi5^Ha0`7$DkpgrXG*RT8fnOux0O@>#DKqbR*U0Ie3za-8 zaF>7Xtti+Xhy{Cr ^ zC^I*cJsW71Pk}F=wB4EVec~Pi`Fl&eUEOX)0`PNFZ=eVJTBR+x(Hp7@YJbL&FiEiu z^)aHi*kE1Jcku=>H4xkW42?bp{?|=SbWAo3lHYyCstU>XB4*j4NOJuwO5Eh`wgy`` zIV{LUw&>LX|0bn{@KhMEMMw{ %oP-BEa%1Z7aF=IP{i`FwH%s*r7{_wp)61^5-+ zmk;Gg4|s_6CR41~hEjsHmYI~}$CpQjt8ACKPr>0D#XWXYxOv}c5rNay+5?xTgHz*% ztBjvqZ#W*h4Y&s!^+|*v*ybGwhfvebtgh~fXb7_sRD$(~K &I->B_mwQcXY6I!x7@;~ia%ZHEd((U(KfP0SZL%}h;Kp2?{XMHrKfWT#0;ML|IW zXL@APjX(GayhhXb3=WR|`*DN@2rc;&cMAz=?z-a?4zt9Qm2l^d02;#K$CNLV7vVis z&EmBk1zpFxRK4m4rVOB(J9s&-K9T$YaLgttglG(3Qhpy+L^QObp!1s|Tx1HiThml! zWo1gw8Q2v}n%S7DhFIOX0bh-QELi8J;Yqy^t$xScrGxQs7-;NkDze~THJoHRGqAbY z+{%Kp)B7v}zwGR6{?Xi~5nBBaqDsZzh=Zto`t*f46*-1=(3~hXT Z{OyxzOxCstXx|73+!?jN73z;g4BKQkVU= O|d2TH`4fk2rJ!17Kfgej*e&dtxqCoVafsO z7v2GK?e?Fr)GLI#gNK0{`I?TTgi7HGOUG7XAz|crl86+R;(=?SsPzgKUPkw;uZu0P z2q#2GG-o_;cn{$28&*(n11*Ep?7h@D(b87A$W##iOSaH+0%zQPZL!bs_1OHkdR;^= zs%x$wO*jn6f^aKasx8vW2PRIWs4jv%KPEgJr0(6I7Ik{DJ7Z-&Lu%aCZ9x9QxXHV# zfsw5!SRC2w-HPso?O7iKjr!lo>z?&2gN#l-+K^ZFbe&MGd23OUk)BT4a!$Nj=MR@f z9aWEr^Ygpfn%%7-29ly1%6p2 zn0~JL`UHFQISXWoTb^#;s%tWZ3#d01|5^SQ$u zJl5*lQg*2=zSBQ(p{B~KAQCYELLpTg-|CsJQ>x$QAT?KJ`g{YyXbDuQvK;b5EvrjM z_q3VP_b)wV$_P}82r5`Tv`g{Z{pk>THt~B1fn#j5nVFa@AP^Fs3Xfm~TaN@S*!KRU z+%_~ZQLt?$P^|LaS|$Z w<*FI*Duij2H03 z$5c_{ClvA|X@!eOAp)WS37q&G#gGTqe7PnM&kyPDPFaS-sYH?OYhla7Tlh_8GS^T8 zC(Aib++(Ni*$b`;_~@$_$OD{!-BI7|xcF$D*eA5o6d&X( SZ6Fyz0 zvI^*=&oiOGXr;D|>XJv*(HBDA7tuJ}iZhXmMHmB1eHX;^zR<4$Hld%BpWg+T!x4?8 zN@^KeP>Cp#+(vnI)wrxV 23{6I2 z^>e`pe)^4)sJW6TxQt0J4CX-=8F>d%Ga#h+kboQ#@E-`8mBJBhh