From ac4aa3056630d60082d895ae7c2b003b8ddc5e50 Mon Sep 17 00:00:00 2001 From: Vespuchka <150929433+Vespuchka@users.noreply.github.com> Date: Thu, 23 May 2024 23:58:27 +0300 Subject: [PATCH 01/23] Create report.md --- vms/client/simulator/entity/report.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 vms/client/simulator/entity/report.md diff --git a/vms/client/simulator/entity/report.md b/vms/client/simulator/entity/report.md new file mode 100644 index 0000000..676733e --- /dev/null +++ b/vms/client/simulator/entity/report.md @@ -0,0 +1,23 @@ +# *Отчет*: Взаимодействие docker-контейнеров + +**Выполнил** Гавриленко Даниил + +**Группа** 5142704/30801 + +## Симуляция датчиков - генерация данных + +Добавим четвёртый тип датчиков: в файле `sensor.py` создаем четвертый класс *Humidity*, который будет отвечать за датчики влажности. + +```python +class Humidity(Sensor): + step = 0 + + def __init__(self, name): + super().__init__(name) + self.type = "humidity" + + def generate_new_value(self): + import math + self.value = math.sin(self.step) * 1.3 + random.random() * 0.2 + self.step = self.step + 1 +``` From 05ffa16a4a0184a8ff0dc5fbd6f6bda75f5f149f Mon Sep 17 00:00:00 2001 From: Vespuchka <150929433+Vespuchka@users.noreply.github.com> Date: Thu, 23 May 2024 23:59:28 +0300 Subject: [PATCH 02/23] Create report.md --- report.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 report.md diff --git a/report.md b/report.md new file mode 100644 index 0000000..676733e --- /dev/null +++ b/report.md @@ -0,0 +1,23 @@ +# *Отчет*: Взаимодействие docker-контейнеров + +**Выполнил** Гавриленко Даниил + +**Группа** 5142704/30801 + +## Симуляция датчиков - генерация данных + +Добавим четвёртый тип датчиков: в файле `sensor.py` создаем четвертый класс *Humidity*, который будет отвечать за датчики влажности. + +```python +class Humidity(Sensor): + step = 0 + + def __init__(self, name): + super().__init__(name) + self.type = "humidity" + + def generate_new_value(self): + import math + self.value = math.sin(self.step) * 1.3 + random.random() * 0.2 + self.step = self.step + 1 +``` From e577dfd3846601f7d1ec67608ee0d29142eba42b Mon Sep 17 00:00:00 2001 From: Vespuchka <150929433+Vespuchka@users.noreply.github.com> Date: Thu, 23 May 2024 23:59:43 +0300 Subject: [PATCH 03/23] Delete vms/client/simulator/entity/report.md --- vms/client/simulator/entity/report.md | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100644 vms/client/simulator/entity/report.md diff --git a/vms/client/simulator/entity/report.md b/vms/client/simulator/entity/report.md deleted file mode 100644 index 676733e..0000000 --- a/vms/client/simulator/entity/report.md +++ /dev/null @@ -1,23 +0,0 @@ -# *Отчет*: Взаимодействие docker-контейнеров - -**Выполнил** Гавриленко Даниил - -**Группа** 5142704/30801 - -## Симуляция датчиков - генерация данных - -Добавим четвёртый тип датчиков: в файле `sensor.py` создаем четвертый класс *Humidity*, который будет отвечать за датчики влажности. - -```python -class Humidity(Sensor): - step = 0 - - def __init__(self, name): - super().__init__(name) - self.type = "humidity" - - def generate_new_value(self): - import math - self.value = math.sin(self.step) * 1.3 + random.random() * 0.2 - self.step = self.step + 1 -``` From 33ebad8339dcd66671d65e72917daf3309daeaf0 Mon Sep 17 00:00:00 2001 From: Vespuchka <150929433+Vespuchka@users.noreply.github.com> Date: Fri, 24 May 2024 00:00:12 +0300 Subject: [PATCH 04/23] Update sensor.py --- vms/client/simulator/entity/sensor.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/vms/client/simulator/entity/sensor.py b/vms/client/simulator/entity/sensor.py index 922fea5..c3bbd38 100644 --- a/vms/client/simulator/entity/sensor.py +++ b/vms/client/simulator/entity/sensor.py @@ -52,3 +52,16 @@ def generate_new_value(self): import math self.value = math.sin(self.step) self.step = self.step + 1 + + +class Humidity(Sensor): + step = 0 + + def __init__(self, name): + super().__init__(name) + self.type = "humidity" + + def generate_new_value(self): + import math + self.value = math.sin(self.step) * 1.3 + random.random() * 0.2 + self.step = self.step + 1 From 605ac483cee7da9af36b419b7fa892a05b053701 Mon Sep 17 00:00:00 2001 From: Vespuchka <150929433+Vespuchka@users.noreply.github.com> Date: Fri, 24 May 2024 00:07:36 +0300 Subject: [PATCH 05/23] Update report.md --- report.md | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/report.md b/report.md index 676733e..de7577f 100644 --- a/report.md +++ b/report.md @@ -21,3 +21,35 @@ class Humidity(Sensor): self.value = math.sin(self.step) * 1.3 + random.random() * 0.2 self.step = self.step + 1 ``` +Теперь реализуем клиента, который будет подключаться к mqtt брокеру и публиковать сообщения. Для этого создадим файл `main.py` со следующим кодом: + +```python +import paho.mqtt.client as paho +from os import environ +import time + +from entity.sensor import * + +broker = "localhost" if "SIM_HOST" not in environ.keys() else environ["SIM_HOST"] +port = 1883 if "SIM_PORT" not in environ.keys() else int(environ["SIM_PORT"]) +name = "sensor" if "SIM_NAME" not in environ.keys() else environ["SIM_NAME"] +period = 1 if "SIM_PERIOD" not in environ.keys() else int(environ["SIM_PERIOD"]) +type_sim = "temperature" if "SIM_TYPE" not in environ.keys() else environ["SIM_TYPE"] +sensors = {"temperature": Temperature, "pressure": Pressure, "current": Current, "humidity": Humidity} + + +def on_publish(client, userdata, result): # create function for callback + print(f"data published {userdata}") + pass + + +sensor = sensors[type_sim](name=name) +client1 = paho.Client(sensor.name) # create client object +client1.on_publish = on_publish # assign function to callback +client1.connect(broker, port) # establish connection +while True: + sensor.generate_new_value() + ret = client1.publish("sensors/" + sensor.type + "/" + sensor.name, sensor.get_data()) # publish + time.sleep(period) +``` + From 83261477f6636c7014e359cb807e7c6e0dec0622 Mon Sep 17 00:00:00 2001 From: Vespuchka <150929433+Vespuchka@users.noreply.github.com> Date: Fri, 24 May 2024 15:45:09 +0300 Subject: [PATCH 06/23] Update report.md --- report.md | 147 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) diff --git a/report.md b/report.md index de7577f..85af115 100644 --- a/report.md +++ b/report.md @@ -52,4 +52,151 @@ while True: ret = client1.publish("sensors/" + sensor.type + "/" + sensor.name, sensor.get_data()) # publish time.sleep(period) ``` +Приложение будет развёрнуто в docker контейнер с подключением python-alpine 3.19. +Сконфигурирем файл `Dockerfile` следующим образом: + +``` Dockerfile +FROM python:alpine3.19 +WORKDIR /app +COPY requirements.txt . +RUN pip install -r requirements.txt +COPY . . +CMD ["python", "main.py"] +``` +Создадим файл *requirements.txt*: +`paho_mqtt==1.6.1` + +Также, добавил текущего пользователя ВМ в группу *docker*: +`sudo usermod -a -G docker gavrilenko_1` + +Теперь создадим образ при помощи команды: +`docker build -t vespuchka/simulator . ` + +
+
+
+
+
+
+
+
+
+
+
@@ -198,7 +204,7 @@ services:
*telegraf.conf*
```c
-servers = ["tcp://192.168.11.1:1883"] # адрес vm с mqtt-брокером
+servers = ["tcp://192.168.0.104:1883"] # адрес vm с mqtt-брокером
```
### IfluxDB
@@ -206,8 +212,122 @@ servers = ["tcp://192.168.11.1:1883"] # адрес vm с mqtt-брокером
Теперь настроим конфигурационный файл `influxdb-init.iql` для корректной работы influxdb. Укажем в нём какую таблицу создавать - *sensors*:
+*influxdb-init.iql*
```SQL
CREATE database sensors
CREATE USER telegraf WITH PASSWORD 'telegraf' WITH ALL PRIVILEGES
```
### Grafana
+
+Данные для отображения датчиков берутся из InfluxDB. Для настройки в конфигурационном файле `default.yaml` в папке `datasourse` необходимо прописать следующее:
+
+*default.yaml*
+```yaml
+apiVersion: 1
+
+datasources:
+ - name: InfluxDB_v1
+ type: influxdb
+ access: proxy
+ database: sensors
+ user: telegraf
+ url: http://influxdb:8086
+ jsonData:
+ httpMode: GET
+ secureJsonData:
+ password: telegraf
+```
+Теперь запустим все три контейнера при помощи docker-compose, но для начала сконфигурируем `docker-compose.yml`:
+
+*docker-compose.yml*
+```yml
+version: "3"
+services:
+ influxdb:
+ image: influxdb:1.8
+ container_name: influxdb
+ volumes:
+ - ./influxdb/scripts:/docker-entrypoint-initdb.d
+ - influx_data:/var/lib/influxdb
+ networks:
+ - server-net
+ telegraf:
+ image: telegraf
+ container_name: telegraf
+ volumes:
+ - ./telegraf:/etc/telegraf:ro
+ restart: unless-stopped
+ networks:
+ - server-net
+ grafana:
+ image: grafana/grafana
+ container_name: grafana
+ volumes:
+ - grafana_data:/var/lib/grafana
+ - ./grafana/:/etc/grafana/
+
+ environment:
+ - GF_SECURITY_ADMIN_USER=admin
+ - GF_SECURITY_ADMIN_PASSWORD=admin
+ - GF_USERS_ALLOW_SIGN_UP=false
+ restart: unless-stopped
+ ports:
+ - 3000:3000
+ networks:
+ - server-net
+
+
+volumes:
+ influx_data: {}
+ grafana_data: {}
+
+networks:
+ server-net: {}
+```
+
+Теперь можно выполнять команду `docker-compose up`:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+Рисунок 1 - Создание образа
-
+
+Рисунок 2 - Созданный образ
+
+Рисунок 3 - Запущенный контейнер с брокером
+
-
+
+Рисунок 4 - Запуск 6 контейнеров
-
+
+Рисунок 5 - Логи брокера при подключении датчиков
-
+
+Рисунок 6 - Данные в MQTT explorer
-
+
+Рисунок 7 - Запуск контейнеров
-
+
+Рисунок 8 - Подключение telegraf в логах на машине B
-
+
-
+
-
+
-
+
-
+
>BV9@iu~NPFQC}ycHKp^K!6-x2Jyf$@SVG7z0W!uH?-1JUopC)a>nb zFM8EG@6Ns*IoK#a5ewEtBGgW9sX-3jqbjO6e3S25Ruv9v#cibrX#VuoaI3O+9}%s( zNZne-l&-+NSEIWpf-G1a%edkxg17sVQMtk@cfkCOo>w#>rJ)6EPbt>Vw>M{R1xw!A zuYneb%81v{IYieYrbDzmKygFA+c5U%{t!00SV`lo!?bX8=d_x|f93^*ofNndx1}mZ zHt>cX54fIuvX6P8mWJ3Ui?cS^TB7_rLBG2@ufSY)8ot7?l>@6RAgl^MdH8(&MfR|D za09d|yxsagqeNXk7n$p}{kDqEg#fdTOqwfXPoOY>(A+rVxH~}&k9Ta|- zHqp!Ik%vg}W+__cHN5FL-p}_NO&lml*W@u{mS%&RYH;k9A6Y9JOf>5yT)0L~)2$@n zmq9=+mUIR~k3*Nt2g)eZU4-C}d+kQa$(a-=&J_yp<`@5%(aoCR0W()9@cN#`-r20a z yU!vNm3!vi=g_siuf3kT^;v8C}IJvyMO;3zAyY7;%{og?XDOjKai z^&$w|SVI%HpsSIQc`1$07~_%=Gn0-3y{TEctuTT5GVZo2ePEN$j7oZ|yN3-?arvH^ zzuO=aXPukM9qG$Y?*wh@H|W1y$q379Z%^f#@$UR6Rr?2+Vpjtc%T!=a8yC{Y4V7i; z$4p0 WkfV^S%~NVAp)`Sbq0w>iOI4z*ZdY-Oz_YZcr5=k71e|r= zrP$e}l3)V9xYCy`_rXRbEAG;zsDa-NMrs2K##pcIsGX3UA2~!rdg_ `MIL$ IhDL7gNr6-Q zfhPQ6`c{4wQPf?>D^r!|A|~m@7H~)-b}uas0XKUEw$DyM+FnmOZb#_Nfv#5iQ6pu* z)w>ym%F2L>ldx@z_m5O`JOW;*P2Hjq_n82t8_eGxaj#NW$c9umf!R)Gq!B9mZIMO~ z? nfUvS~N_t7zUtp2u&A-uW@U~jV3tO;EIC)Y?6Y3wCn%bovZ!wAmFKi19 zTx=gt1Cf$1+}4sGtSrV6LuSKd48GgSv|_8dwKhx(Ud%2wK<*o6Q0q~3q$}P{LVJ9Z z_1+L*Q*~ZSz^iSBX0W;LA7)OINxGHK;gOm(9*htxwym!5Yh(ZF{xaWp30c{&eA(mk z>AugQzLH4!V#EJD)PJCtewqV1y_ArNFD-S`AbplA`+3=gJn61`U7ezw_B(K(ByHsI z@B-f`I%z?tl;~}v$<+ckt8ZoSz}9AsmNSUd(0Qp-KBMM0MDGvC;wWBw16cvE1~hYA zQrbPVI`52xgOU!0(ewB2$D )B)K|r>{T)Rr z+qxN~_N-S5O#Y?X@|-~ag)zA+h78?ih>)tc&X0RE=~ZmCLs1_%lJ7g(bqmP11utUq zc#7506c-wKH1ze|pICi37Z>`;>+Ix*aQ4qVwbt+D%3c`1Iw%%r5aSE5i22ItL)f+} z)&_|g`_}yzd>}VMS|^ITA4g9)(Sa?EHTmI%QJ3&H9M;iaHOtou!Py3k7;h(%Znd2+ zw^zMM>fkzmCGVt@o=VpKsHb>XvBFY#i;qFItU0-}fChZ%TPlaHXgk^3S))D2zDwf{ zU_VJKpZ_iDZsLr1lJ0SC++A-@Y?!V*xLDWgP~jJ^2?7J=y8X=5M+#T<(@eq=WI?Kn z_7DnWmz{?zqIN3*H+w~l>p#x$4q1eXhoeoS7Wqc(NB*p9@aV7E2|kC(=d+Ky%cVm) zRXODcc`{6P1&0mw>}} Fm9bH#73rXN zw|wq2 RxMauq=W?wHp+E8?Re?05D9wKG)6*?WTvn4c}b&men4tD salju4|SZ6Z2KXo{-}XdT3T` z=a=y1PZVbpEH^+S N~QB@{*22dspMje9InWCF!NPhB%QVFQQYk zNF?0*7b(q*WM5?3jVIv_w;xCDjn0~sG?*w?A7)Hhi3M@FCUodVmAlegtsiXg;~)iN z7}thmaiy=W<-B>_h?YrlL#Lbl z1B#BX`V923(=p2@@%?Kj)e48ZQwg1McKF{>kdfR~cYXr@3EZo`;zHfYo4ZCDFuj*8 zQL|xX`26(`pPxZ#W^dPhIgBlV$(-l*qZ{#tPf^Yi#|tJps*HheGjDv-wJZ@4z*M%z z n6kQH8Ouk>x7K&;WV^Q;zg4Q;tTacP^QC+DBrccz~kkC2^_H+2|H zpmirZ??9!+1?re*EneQZTgycB<4WJ~W$IfkCnXz)N>o}#3)UTARHDe;R9d4k&qi-j zRAhE$vW~HGO3qb_BDe3tJx^ymHaNI0Phq?`*E9NB)ffE`&u55&o-y?z*Oh|vL|GWo zcKe8}fCL`U5D@Aa=!pfBnNNyCjvR>Ug2%{(5uX(Aw-t`s;J4dVA4A?!5FHypWXKk} z#Dor-x=hLt;Afn#+rR8z%T|n`mai2 Z8+6L$#xLJno{Nv z8 cOCNlZ4A8qnW&c zEl$Z=@%bLaqLrZj wf` zzQWTsOm`#}BIoq@Gply{54;198)T^95IuF7y03DQ{+a`=%JsO6Z_4Pbjrg&b%K0K> zz=FOf;cDu_%@j|%a@W?gvM)Xp>b2i>`^prbKdaH%TU5Q?kq?9r=N@Y$I&)y+@<-zJ zzoGNF;Bh)imeRe%K8b;+pKo9LUGsz3jvO%Ka3VdND|K_|iTmoyE2bf|I4@?3X2}a_ zw9pq}UOOmHE$YZJX3S@!e!+t{E30d;VVjXaRkdSHc?uC`w3y0a}zLHEN_AmvZfXIEMSZ0l)_lbEYclI~tGQ1C$ z&kQ_sv8Zk0EHP_u*#Q=>2saCm8oPV@j#LlD%>N@0f9HWVNn8Z*74K9Z2lzke-`DeZ zo^-IsB!9 --_2rm!v4&U6&hG z%q{)+^QZTzNI!BE#8ZZ?Ceha)s&(~_E(=(Q*k<8xaoP5#8_NvK@r4sF;ny;%@uDH^ zw%Fo_i&yz% r7(bGC5r7wWKoVF6AM_)uhTF*%zSkZr^>f%_u;Nu|}Mob*@7 z&Zc_q_)kFBns5il4?JvQn{^R2KVDw2$XK<+Ms6ETTq*7wAmC3&S?dpB4eOB0G)WZx zmR|P(59;?i@VRW}WY4UnllOFP&ZTSB?KV|IHdo`dG7jgAWjHl@^sm*4W?GSqTmIiJ zpRF0A#s >Yzlz7lTg7D8HOcrLc1(_j^x;q~#JT&=ogOoEFvoH^QaI;&`$?_LwQ}Hoh z`r|Y7*!D9zcdgp&wXhYB)hkIjT9VXY|LvIT `Y3}adIgaGw>Hq?_N6~_V;OcbuyIkBCSDUCjRcExyl(h!J_t9 zT#E^VvdZI5$kCci4!+A@`%mOJFwpg4?0s8 Nr>2uyW~jUBAK{d=K5yWea&9pVQ^QDw`F209J=kv^w% zSIXGI4IL-BcakCw!gd J~a0KQ8a1>NB*$^RtSx zcSl{)(zp_b|I+2o?}v)^MFx4EHMbJK$bAz8l{UWT7!+Fk+IcfY;3A(DOkuv^o`ZHB zZTCiUm00O4Jrb&JVU)|3aIbgMRg!5-6v|rFThc4GsN-HTR{wG2oFFu&+hlQP{!w4y z?`DKM4G3tx4c&oTC3s>e^i<*#uW`X-mHV0 mHFf z#9hZKtBHG|Z3_1=#qe(G8megJowp}0(qQ~8;v$vyMGvE`YnKLzz|&&pJ! 0PVn`>ypy s>iE&93d?P@X0h5(jTgT?|9&0Y2@f}<>WfC~l2kSyY8 zn7$7@NvfOLO%>i-50WDb^8V;5iIAb! oIdk_M(=Z)O+xxcuPaVIMdUYS zZc&=qV(}MOpRa$83^1`v$es~n6iu_XFQ>GeqP0bPXWq|;L!hNGbou|X!g4g;{KpDA z^gwQhh$cAh#oRL`e95CeC&03KBu%}3dwSA0Hb=IX1Le4<&NpW|xsDFsbAJ!EX7~Rd z|8oJDHN9oC#-X)vW3;x-GjQ7skETmw_YmvfoY9JT^jK}8=^u$CHhrm67gG-7=N2IX z-!T@6O+96+FLZ^GOV8{#wjZ4aScXnk&m3*2c5QLUw5rYYF~&R?vi1c`KX;1FWTCP; z3Ve7-W>Q=3Y7gCu2{c5}e|kwE1Ew~-e=xhdw=1 OHMaP0Z3oK&Kk6VF%eDp2Jym`jYKb1uY|j&U=Fe{>j8a%$OG$7iXm}Oj zXnxm`) 3?iqw;j1eY8D%6ts2+xH)F>$uR* z&a4H}1n?&x`%FAH*+E(<@;0oUQ$!G-vR_^tkp?bEU)sz2<-IDrS+o%^T|$N3%8SOD z1;9^?@29 bGm_B0^gB0h)q5I*!*i7Xkth{ zR{}1+2pKcj@rgybe^5*`YOgk^e8JdzR6lV2C%4j-kvjutPtM8K{7t=dc>7GqR9Na& zclBuoJpD^^qpx?mW7}@&B6)w8g>^192*@}F+d)|^XiVyp0@R8ZY>4h?8MN!v#f~aq zpciTXt#QvM4q*J`9~zr&h~+2TeK!3)HM%l_u(9a6{YXS iLZJEf?f`{6xv ze+ WcHgu+ v)`?Py|mqcKQ{+vH5+fg zj!Z?#y0M7Hmvx(mss*;V68ehAosA)ut)f@0!Om9tRmMRaElTtwL=P}oE^00YIN$Jb zT*B6G)K2l19?GX=X^T6?cMd>knbZDD=zipEa?|g96{C62D-;K@#n4Kww9Zx*)6YHi zc=2pgEpk6Y;9^_KS8aqEAvIJr7b {WR5)f~O3jP c@j#hjzqyJVI>6qGf92W?pdXixf)L5z&*t3g&yzqMT&$Bb)W^_eL%fna}? zN0)$fqde!R-|JC=S4v^^j$}GF++3N_P|CTu0 z^$s+z1O%Flhkw%@++C2L4SpFAZ$(uXCO#yz=sbpb#+(-C6DIODLytBvfpaww9gW~9 zyhLBpI?ug6wVn7U>PIR}E{=m4b}hDW28^rfFC5=FMfvwohKS49?RQBEdX2M5ve;rk zCjL$Jn(1>@h`l*xItSfUCcX?hkZwNw>gRfR{^!@E?B&3dY;vTU*{HItwc$PVe-L5V zw{Y_f4`KVVn+o#5vR3!J%(#@Vp>-UUU3TGn^xC@Ck|T^lY$m5>;dp-R*hLDYdeZCd z&@(xi7qd}~ulzng;-Q0+kc?RcUxhyOtnbkqOmouN DZ@3aa5 UW-I`2;uHKFYr zv FtIVY z317s{9jKxR(*1{6_rtr~csjnZ! )7E!1(rl+*CfNy=mFR? z^mfSW0fp4Qcb*6OBB;y5sIKBlhRNY*y$BgAX^}{@j6hjZNDoxOy|&?MsOFKgOfgx) zcgwj96 qvSeYns%kP69 z2xFQ2oKH&z@#A0>U8rl8{DTOUrVPoPxEE<*=x|3w-M3ha@6bxk6g)NL``=Zcj^Qm> z1>gJom7twyHmW|}2T1ka>|}G3L#AxsFH^x99i$9Bk-&5gPvl(q`{F;iYvTm-26~_E z#NnK;P4jAgYuk`^v}cYMd1wBH6r)d8IbUJ)+yw!R-w2rZQprZQ5PUP{y-%A?e0}W3 z5LfD vGz8qb+3 {jw6Y|ElKqa-MZveblFFX#J! z+P@Y{dYy-X1ffYr)hf1Gs52X?Q_ftztmV=kspLr6ZB`dfxP0J$dMhPFluKmTFZKIC z8`V1}^qWMQk_BaNPNN_KNg{;4b@Qq-qeyYJVzPHzUQFd067(#xN4@q{3*`)_4!ih) zhc9^??j=Yz(U44gZwH1%V#XLe$msD}afqL2d M(5w;sW?t6x3cf<9xIwSfmGY96@5P0mgOTMjYFnX`99|!ps zEIyOzi(=+Vx~zdN>$$Zb(1FCIAQ$V{3denvRZ6hM)bd2uri+W|_b3|uJ>^_DeV~_O z =yi+O~x!z6S5BfGQr1Y6CKlLEUKwf0J$#3M^-br`lp3H z1XOPcxfL`=f?ejEbKm&J5ceJDuqR!Y*0Net=Z #E2|H2+w44yzhj?~mW zMMfoScQxvxau(x%$SUjwDG{C1Yd=if1Z^O*F?X(aAGPNc{DF`o)u2}>?#g&bZQ{Q_ z9ma?p4su Qh(F#zxnm}Z<@IO#l9^s{yKTQ7zaY# zCZ^UH1g@`r{^|&a)vPXfO#MwyBOIWdENyPWZ3DUI?QzF+mp4d<8-A2wlwW!;Z>(!H zT)uMZh=0^)^QA@Ch_s+NvA0?!@As!E-1K`0H7PAjS70qb4SD$~2jKTl`?{JnhBW)E znA+UUsqUr-Q)o*W4iunbymF!Hj*h`m!qJ1!upw*4=Zbw`cGjYPPDxDa3~% Fav}+63yi3*J1GV7T#x@{{7W zs{JbrE?@OF@vaR%CwRO{G!%=(&dtMR$qea5ciZ@xd-5&Gh6j}do>9If|HR&89VAsC zc5ky2{AGnje)A*i+yGem7mgc-Y}a63qhW5)+u|+*Jm}ube~J@IKoJ5d?6QwQdI|YD z{7!0VXgk>tburYax3K%>Rub!ID_NpKBe#YQd)NM6GM~j_CqTh@@?^50*`2BMjpLP| zH ?X+7YvZ+H7Z4 zi{ffz<1}MzoChEnn OnAU^Zq zFy@PZX$=pRxV6gK*uGz0*?XjdG93Of@{W7oh4Z=&JsS-Z<;@z)9Wi%jdz#ID{52Di z`?Fx(n|fBNm-#*zG5Vj2$7cG3Va(!VX`6AG2S=pGHT= cMV!_1MbRqY>z6BH(m7n lz3yZ z>i`M=I 7u-D%n=0kJ4)e%UmQ)tMLIw>9w9+WY(J8f9FXn_>N6P{2Nezab}r1i@O-|b z{b)k8xi#y+>&Q@eAJu;`V9;2`Nkgog|9=od<4QJI!_lnTOSSj^S2G{Qt)~s6(|iwL zBon7~mvplrRX~ITYm$!V#CJh+;8o>@iTJm@`m%m(bk@ge%1|ZOnZB6++WVL1s~bSW z_etj>`L*zM*PN!d>g}Ru aq~BZr*|!b=ap&d{@T3Htspf07taq+21^z=W1h zA93i{P==&GFGf6Q7D|f%;V+DdDA$uyFOs9t!!^-SN(mTLShLx(}0RUKAFRzl~1Zz0_0;2wN#{WS)6^utvWr=nn^Vx}SQlWtA%rX>IqPsF8 zu;~i*TCnyi-W^GVS%2IO@Y?z08&hm%$9i(3Q#}DR(gOpG(##?0nF^nrd^0^<;&{?u z=!`ZHO>dmyS{PJ!Q;bP;-;D#?6Fyw=cWiWXPHO&Vm4FXS=NLGPJs~c_*BxI|5{ia@ zg{BZKjj6}vwX9o|9ZlnpO1Z9U?K-l4w9xtHQFfjBrvX=3pCuVtOcS>sPU8)w2su~8 zN4PY%CE?KaE~fD2=l9S4?mSZGn#twhh%diWADD98thI?2Z4EYvsq)dsP}$leDJ1M# zIJ@NS=Cpro;ByVM0IAFGGz9XDZ2w(o!z|#V2Da)^b-j&s 5{oawdnqX ze2#^Tc+omZVI_K4h1uo^YJq_OMRM->d5wpY>&r^AC7)Btc%$Z|DjA!qx%qi}j UG386un|uyDuZd9q=I@rDER$GVGh!yU&`ep$KdMbtzj7+ZA5Xur@&4?Jno3y- zwTcHdcj|c55JY5{%!wG013`4eJME+vXoL(wUu*}e8Jti>;y^5M*4$W2l~#&u4oo%G zitSPT1kkDfN*A5YbH #1T68>GHYA*Ot7!F%LMlweV^HGuC ztXZP6b{sIZNC0YcNLP%7oEef9PD^gS@5Uq3l4iGdC2|D^)NW~4({fVwJCA+1-=k8y zxCHjJoC^=Ozw7wAFscJXarLKmJ{UFink#c~v}Dc5{9I^z;B@hdre6 z)1H uFAw2pg z5T$CuYJFIbpYv7>8cPM4qvjLbJv|YgmOrs#^dOCRb))Bx_pdQf>x+(GffBXXK`mJV z8h|)O?AfOu0{R~%MZW*E@Hv%vZuGwaI&`0Hd{NEt{br6@1QkOE#eIsj-k+1i;DSjw z-lrN#EP8v`Qhyz(In3UB@gHg)PRtK`ocG<{HYwMDgiH$Bs^e{`2d7Or5rGH35La** zkKc2|#U%ZJho9+)ON_r`c50s&%oh`-w1OnDEW~CJ?=>SXYOzUaBxf; h$lQ#09)=-7G>~arOdPl!DS_?Zt z>2q(_6wv$t-1Tu3Y8%wfIl0$hCC3e)Q#;iW6&qkuI}Q$et*e^!?EmP<#^5z#(fxAaPRn+2+4&L(;TDe!{1SYUDbV zr`)Kljv4VD{};uq<}qfN@rySzS9c&o#UZ*k5yi5mb<*5=3X9nu?b4@RukyS;X42eV z_sg?B-yT`$2|@C!p3_~8q?dbjqN4et4GmD@2X-hTetu97F^PNKR)wXQP0}ZvFwi@p zCEBmU!Y|+JkK&vj960}WX@wu#BohH=!rj~qR-?l|pw@70|Lpf*~itt{UAw}4Oda5^zr+Kte@Z^O7 z(xZ38yUE8n-`^vBDI ^)Cd# zcZ>I^=puoD ly|GXcxhL&Tzt z6O&nRW1O!pn^Pu)|0o6t@jo7|qfhz2JX+<0K+}pb8z8`K*a&W2i?aL6k`t3=hV5H) zhn@FAuAxmL@j;L#<=%>8Csk06)qa;}xlf}r-#OAswp;Y-n6R0uMiTJ&L0ca6Y9@k* z)JAxy@2y{1j}a_ErlS;Z4)t&?ve5|49zTCCg1aO`zpSj4XEW)JZ!cSf0%Y6o88_#> zaHroo57XY@FO}Y4?t?3PZOCTC^vRA{O=9cHJtMiQwO>8G@A|E7)`)FrBC{Hix>%8$ z&xC$2*PKdpXrtLj>T0mYV1?SgX} $gGwXp?^w z3QOMD0kfT`AZ(6x*EXfvgGwfVcH1( xIoZsVL)`xr5C lrTkQzi=;w|`KTrhH1y*p1W5m#f8G)_uo3r_@i_gj6N&e!dIEZR) qP=|=5 gKw-E=QU}UV{zN6bTHAGhQa^5f!PK~+?1gw4pm}Sba@3$3!N%j0t_8TwL1IH={ z9W0#P^KkRSJz?Y9|Ey#04NUnzYKCJx*I;V(CZ>WZPg+8l5WrDij?9`%`U{PhDM1+i z_;iNvZyLB9D{|gv`_!Lz4IUH1oO2aS$Nmp=Wg-##^lyt2UoFwcK{#LjGn9%bG4 zfZm}uAW#O@M?rIBc0SY|bl6>GJZbdcP4n{lY=~O>m6~pR=tYAM&BT{l=gxen)y?jN zfk>j}SAl!-wiI!qz)SN$RN=7>e?=%0yLRqd8mXu0PY?WB@G1r*{f_d@1rzMwCt>8= z;hLbaX#aywG^2y;(jNZ6KntWR^o#1?kc0S!fNKyYw^9woe|JKyzgVJz6M S2{q$8+Scum+_7FM^%aXB W1JcuS&Q#Od@1)H9hoA0nu% ztFHRr!YXZQOm^M3lby?UHLc=+_gZ1;7Fer3;)l0-AK3V&bjXAwPlu 96iRG^!CC%Pk;XpMG?+Y8z6)0eajggZc&C~xzi{X^JX (t7xS?{nG!*X3M1_8Fr)4hEtzZ zJU> #Z z(Og^6dgOp!8)zCR8iKJ8*RV{nMq}mQk!XH$$%WVbpDq0k+tTX(myLx?T{|>FM%}z= z`3*RsvMKD02l1aL3wm!{BT5Y?sCym|uxZ3w$)8+9wo0vdD8Pg)4vzjY{%^X!(~ZQ3 z r$c5{4jdJyO~_$6mFizJ|4@@Bg^KCNdl0~YzVlt%^B#8fZb#UF!sLg+qP z5RU&nOynJRFL`&rb00{BF<|L3qkfW13X{e}gE$(x9ek~fzb==t zZEQtw)CC@IGn^#2RzPPec#zrc;CGi?an7qt2%!NR3)-`^HY-Hk>QK)RtKh17Z_yFX zVg2Xws9&ojvjh{jhpS4p|1<}!r@o i{3wa zOq%~6b#EP3W!koVE7IK|4T5xcN{Rv^(#-;4(J5WhT`FAy(hZW*Eg&G$-AKox^Su}c zb>`Olp7;5_`}wwS+vdL+b-Y;XI?w&s_x*P)*K}Z3YkU5pU82xTlGn+pCmi&AMo*sK zT-e}#$s3&~CSsA@xb;?%?#*L6u!pF_Wgy6Oz+}W71MRzd8b)D5F`aFg*NPiQ_}uMc z9o9kT3_ZP$88^QT_RA WjXp8;)X!Kx}cQJ}S(!&`m)1GB~rAIUcr8P#kH#wstVpN&l z3kV0@KA!c0@^wjDqqZ6A#H*b_>ItGgO9t*5)xyK`5g&W0f2v31`F3Wsi<%XO60h&} zj4QjHNuvPaFA{1P2H hXECz*}lsON_v) ;pje}cqQu WtsCwSbI%O0gywS?RNfDg`T %p~+BCI4!mLWNqP5rfU@I3j+*2tX70 z_V?~10v<@qCtG5sH`z~ZcF~{B8 ;EYdp&90;}gHior@oR5p)B`A|DZfwku1)r;6|_SeVFR55>vJENA& z@kfwz4}sk&_cWeH8O{oS{v1Gv6~4%NdG~Cz2k!!-Zk2B_LuE$-3Xh-CQ19Ztnjsfk zWu%c_iSY13F&Bl3(pLDf(H283Ck1Mr!&TTb1Ex#v8ZOJ}=Yc4GB`rYH{k>A(rO6U( z4i7rWqRfg#Bk=5O8I*5(OSEQP8~ec^eVG2vXPtAx$4XUo#`(rgpOp<522d<8pnwBj ze>B^E=j#l{)|UBf-*$$9$-+q^a59wpJLIp1t}q5^x@zcel1&XDyGNSOtxn#yXpWg% z8bRG6em`#fAliORN#=P-e)omxVquc)LUb8yvkDUQw2SC-qb|rUDto7 zQ|~|U7)P;GZ&CXkHgC!#I;wgAdTrL2?K9b!{kgyf!@Y6}qqi zj@8Eo#J%POo(2n>@~@d 8)gFFnoWnRtUc+ne!X1J%w+oCn=5AxLXx>Fsre%=bY3%xcAK8L3`)o2V(pq3dln zgT(YnQ3U2j0ZtOfsJ&rC)TL@*%a71*uh7q-UAp`dkoiV&E4!)2!B^%V5-W>H-UD8f z)pkPZ4YmR3%82`mXnH}HYD*#g L5TPGBYvH(iB h)YS2*s)``Wk82m9W8G|LwI#KBJaB7 zU4|@|c~z|HyLu_>!7C@zH`6?_09b@TP4PRa%znI&ScbJsU=c)X4mho+zPw{S98(tP zJ9={SNfY4^|L$9UyLsFd{6*Y0pxw6-0c*Zu;WaPFip#E^Tz5P8cu{MV%r4b!3O w@3)BH}CYpyLTeH z%jK}S++A^b(YnZ)>BYC&UXOAMVoyW01g|0OHf~nQ$AwPaafuVy9;}7)YfpSICagqr zevIN6%kZT?J4 8iFY8y?wVWE|zB@ zd2EwoMAJsld*Gh}$k}&>C}OI%p%Qx(Qup^juIR*}s;e9f+Es-9xV|G3Aq4udnC`!j zX6sCdf(;aS56v$O45{&?frl>W)Jp6fS-eM67(h6k@@}{Z=}R<8dq$#O zC(fiG&Xm|;-wY^Wuv$4VdPjoxRYlf9k&D4o8k`6m!N!6zevA=im*mtwy}sv(rwc+| z&zERA1$^&lG)OMjJrk(iWk2+DHrg;F^%+ElxtwN|H%B@sU-rSFr-)&6O=VhPx%DN+ z&9j@ER8(8u>jM}~zwG&~)*1+r%&tC4L8nrb2O;-%jF`5XA6!hh{+ZNv{B>AN54=p3 zVt!t11tC~G*ShTsn27G3jat1|H5IXIpum%um3i?T%rR53{f%)v%Zm@Ux_Yq1dA<&T zVN6SM+s9Q6iF9Plhg8lvwtZQ*wHuR2(R5p~D|fc@5CKPtnvt)?H1Q792)8E(P)5Pr zK(87C#? p!zZ$_o}t&{*dpCTtexd~bC3l3 zmE{q{me*A_w6f^$2S~*3@Qd!hF{Hb>nSopeDPoFSCXVZ60)?YdD`Odg5~o|XZ3vhw zbwZp{BLnW@dd5atl2=^ijk6U|+6-;e^j)DCTT1A^a^P9MN77ahq?Z^cRGewiks1(( z9-8AVhR*sNF?zcygiV6$5P3DdAdA`c^pt{OPhm1@rm3m(fe#PL%8u{*_4WAHHf{KZ z%Sl!cbVU*;<-8FL#!}ITNOU#~*3{im8xFkOQk~*MyD6Et%YgA%7^f3XBH6^iRrdu} zK^r_KdKq}Yn+knIXesKnja(s{_!2=oH5MN|xXoHVV$`&oWq-_WP~?qbatl{OWbA8a zoX2BMW@xAn=cmm&i?& i6n7GtGrL6qs= z+q@RKT2(Xvfsqzuu*a>UTqPvHZpd$f*OK84Y2IR>+Oj=bGkKaqg|8Q7z`!2L99^-- z>h1_F$Z_}rzRh1nYSGzbXI}9IyA=0$Q^&SJ6@R7w5swQrL4fAetk9E}v!9@lQH; bHYdl16c$Y*O#V26s{y`SX?sckJ$b%t;9-(KpyJoir* T3<{A5u7_)HtwYJ zXmcqtffoF{o@f0?J0u R^fhL6qPqA31Zp~KJT9Odr@CiM z&7lB>a4$_Yl>*KMc6DqiFi=x-Z`zoo-a|ETW-v`14LRvjkdDON+ZQ*QAfZ|PUmt6l za)g<2Sd&}L2oX1CwNJA${CpR(lTwikWXlT05_Pp^*lJ~=-v?+R_um#GjBgZHr3~9W zkgB*K^-?%l3UM}D3Zts@OsKwkN&e>uBTYW_=Qu0qnT3y1q;yjL^mRl2y>!98<0skI z@DnKQU9U5qE)umYBP^iLQ8e*f4e=;svykVTiG^_jX_>%9^+3(n*0b)i8YZ4%k)c|r z<^q|32>gtrFL@s{lC=_{QYe18DjPfAB=xemAADz*Dz*%~%6hM2C lajj-D2#bw#+T=l zF7Vc~VCAT{8=bDl0=+WWNF`ld(FCrkEsr%0aD`8SD2XB~t?t;fMdt>D^M`{0ny!LE z$w_mQZRjyirc4UI2Lj~N#~i173F+(U{n<>Jr;Wh(I=_M#KVsWUD>CzUsbiUN1v;1z z1T#y&Ikt6rAd5LkfqC^QN|-Lc%A!^2 m`qf;3 z$_;-n(T%en_ro>B+Z3{w%m07FHGE|FTi4J+Vdpn;bm7->w5q* 4J?~BiFym&(ku`+BUYCQ=R zGdo6o-YI(!H* Ecb$AzP**wDWsuYhzla&0UTqfPOCVsk&SJ=0dcBVkD}v3 zTh>Ju^@`;R#F?a7+o#S3Lr2Jps(iOqdOLa=5!Nc0;`V(roZlC>3anHfdAvzo9M%$G z;PHa?t}kuG%tO|X`-sP2KBRxX^WMf=ktl$rQjI6Jp!LEH!ZOTzi+swC`I%$8HIaAt z<^0TIPV=U$zATb!1)YARg;g;6gZKfW7Rhq&hgV@%4wiR3+?g2_2>akF{6Az1*6Pbz z3Ruc7&QIJmg Al3PKw!m3ARZm_r7ep~1F{cw^i2l5lOaJ9dTqK=QT$UMqS zLZSe>h3t19Jyp-~daN8W89bv~uJLJ)K1PUj)Scx{CFvWH!lw_E6T@qJAjf8}jwsU} z=pOqY)8@UDu271=n{GX^dz~l2P27yS5Mi^(7xesbXRyV>ydP~mTL` >a%OB~{!Xl+08*J?>l$rbhKjEuPq4d4w(;kL;9^?m;UHVn8 zG*B~w%4CgiZ)ra6*m@fC5YtY+GH3Ka3pI$I!(2 I|#1QQSv?eklC1i%0ro7Vq(rvcI;JNa2iC4`a{0@Pn3l;;;>h0Nj#FrJq)*Z zxhH9^{$F A2S+7;#%zGsdB6(Zztgd*69&4_yNl=*2O>U| z*b82mC0BX~TU((`y50oZH&P89diPwEA|{C&Q>Zpz;)Lx}X+@f*=7}?Nv=cn3C6KCi z%;vtma&*LcBu@^Wl4_~TNoLnPx2MQbyzR8hn0RF+)I5$K<& SW+sW{4Z6)nbmMO>vG8;&F` z$)WkVCE)aH*&nsgau*9*(vzk*D|Y!X0$80vB>Ouh%OPo7M+!(Ln?=#=R{5fy5D2Wu zJBP%aWLQ0LLI;{i@oYay%d>c0#|L YFmFM_7Z%ehtHQ9i&9V2P13yOK}?M>f|muLU~e zRg<*nP)jgXINuFPGA9!DF}GUhhD*_jn(JNOk)&K30ff(uH}P*puW N7kH|cg zuLmL4%3ZpHF)%-K{(1dYT0ex|#(HpA$I#HGWbljbMt+OruGrweI+Wjka2P >-48R5Z6d=(nisGtJ8AqOmS-Xmq~0~3KsK^Uer zKKy6}ghY(WQ)o7}?X(>b)tf!G$v&PiVvsj7mN*= ~PgHE6j&yv@lX@ zQ)C_Oe9-jkp1{-BHoBMQCqZVos1dMvm0QvCZ*Y}46V^0()Z+SUv*_Z;ab8ROOzAR_ zp@L#B5G? hV+ z_!WVp@Fv~!sFB^06a_nt;RXNONpj2?3P6J>jVhHxb$GRqk zRv!j4&oxf+$e< >~cjYEucf>9&(S;mEaSKK)RDZqi4Z35Jr^ zIKYPpc#*{8TV3ntWQ@pQysWeYk($q_Lhj5hQ`LgC9b=T8KtUDu$QlaT5?9ygflC$A zguZUbtpUZ`e*5dnTHy|&SW h56G5hf;ejw=P#Nki}W+ gkkc=b=dNc={QyMrYicY#rc|4>vf@cos$quF5;3 z*{Hb%evH%Us`BhLM?4nrW5p{IruAgAW!B?Ydo; _ge>yBbDZtET#SA3qM~*xC)O~@ zeQr8ago)N%yM}+5* nBlLPBH>Loy#ghV(9A!QR@>D8s)~T zm(@S?;#XB6ytADU>6uWYw}I&>FDiUETF>a0WpjZ11rcO^;v5f(t-RDA{LsW+Nc#>l z(G+KB`)6#hmEBWv(PqMjK?oxcfS*u25_4C=QMBP*)EvkbOFf0lHRVUo(RxC)Mif^5 z!M$-Pu|fWs=F8gr37S{*yWm&CWyQ}zspcBRMc4nYqr14LW@Pmt-`btz52obC9x*J% zydHlF;Om$*-=$b_)q2)>ADE5Sa#L_GK8TC)8^w*+mwUWuV}cRdhvb-I0;U*NUStD< zr^<27I)n9mgNQZ=-hpH8Q`=a7bjfl$z64RZD+HSevb;Dw%62?P!Btl^G(*&Ar3;?9 zF0O``t(1o8-6Nv$6O|9!=RtFnJ-=%(;$URhvpQsqVCrV*e90n!6+52W7dx_|hFL9M zKsGi& B=z8@<#6~zgY??_dCGN;>$@ ZkSae&d%jPF#;tl5du27E}z?j-wY{pmw&w>o&%?enm`A}p5dii-*$0lb1H zcK)?^K)J51R;ce)r@`aK(u~dncdX;^Y>et-XIBCKmg-<~rlgu7&4+*9FvZg)%XVv% zxRqU1Pz{E)Yd`nWd>m>~Z>HXe&em>zT~0k{hPge+hN}}zv%9kQGTx_D;@)Kfy@#Tz z^;AIK9^5E%Ndy^UtE!D6>PcYRkhD)ONXkgUO=T{v7IS6(06MS+aCfT?<=V%dVa=!d z3atk-pLU?M;&~EAlNR~R@AGp?KllX1iKY13%k9j_{qQF`B E$~JM9+frH z ew84vmPCMd5N={B^?2|>;#hUcNT=$1wBkCZB}=sG(w%L_2iHbw7ksoqRDfE z?MXk}S8j*e90wf(0S(fzM{ 9^GR;l8?uY&y} zFuCtoizuKAy9pjLCPP~;`xKB;7j=vK&fo5}lx_El#KNEqm6)HrS39OrNqhY3KIx<7 zU-n4@t(nF1KYEp(qiuu-Hznv#x90`` cnmcD;xt9G10@ad3?7e+% zRB#$|CX-A{?-)D!I#y7??YUSS4}9LeXNf_dHxJTVTvNtcW0K($lfu{xNP6>Qy?Gj} z15jo>k*jlrAPGh@Ub!51t^&g(Cu1G&h3}4xb{N)w4gV@TLe5<0#f(`sO7Lg*6v06- zKoj{eC#utcw!O+FrDpf;BG50m=sJld;1QV`rg~jptQd|P9SbnzF2mX0OagQfn1>O% z{VKR7Sb4bf{%yalyXFU?tOFp_xsw)b;p-_t59D`K0FP{#Z%%cBz&EG5r00Lpscx3z zC-kEQmD!3c=7&eRpO8GJS9 %>9q41z?)IFY2t z?zxL&-#FEQdH>0&9`^gccB;8cwj-*A*n^o-@1R$HZ;&edXpp{B88oM}cZ>0!N0imT z8#di+Nh*tDKEAB|dwJE9N5O*v&mZS(5FlWn>z_Np$+a@@`OFmJr9R8?Dg|1Lni?NO z6G?Y{+nfiBTV2tR@ec^LRFvi}3u$+ gLd$kaK2l`;W;Rfbhu)TewnvbJLgy$AzdzNuHH8PXOFw`q26GoK|W{%$KqA= zj njBB!0GBc&C3hblS!?sIzI zi=t0yE-xR%xTF192k{2oBd#wgw@C3Kz`4O25@o={mC9wAPZ@A3Ht500_L#k7O2I>p z<|d>H@8#$YK%-7f17d42A7Q-4SYn6$oQ|tI5_tA>nm^g3yV|0Pj`ZUEcXp#^(8K+m z#mwD3NNq`RY=(!-)A!oLf@hvAzM&&yuJ?tI_C8c4OlJ%I?AKQ|L%V#VnaRu$f8~c0 z%Zus1pMz{T1pP=1YutdS{=7u~_ZqP}pMGk@ij3YWW#1K8_%8UJcj0bCPkH-4<32TN zQ}^+6ZhNM(-hX-s*to*(cSxwaIXKpG`VRG=1E4ULF#|UnXx15Q)Q(_4NS(bEO$9SV zuI@^H0M3dq^jOyFM-oAtI2$Ojx#7(|Pe#m$L0j RwL8wX!~YZPk-HFY!W2sIh8`0Df3X(2~3+v%F}A;v7?;X6ScD!>?+v zkNyiaSfi|;YOq9dzpKF>|8Lh|ZN~mX4OV8~Q%9E#m8ef#n{``-;PIAb+Yuxq{t$n& zWq>rHRY01kbUg01sdaWcuG=zjWuMkd$7`>3x$WRC@De2*AR`sg0d?fB@4q4!S);;h z&Oi^mF@%>Y7MoS3jO+$NFc06qoLS3+e_|Ze*c$EUVvkVMOxc5Rxy|MMoLxl@$iOh# zwvvq$`t?~BCMM|6Bg@TqWpIe}KXySz*?^Cno}s?^%HQSwD`QE9M&ijYw?JGena7P_ zRIfR_S-J9iUzx`Gk)OyGGkjiIg0)wMR8^sJ;c2T(K>J`5c>q2eOt*ukWE=&di{Jj| z;V=KN=W6}$daefl-}YPu=lJJ5I+YY>4@dZmooyI0VPsl+K1vr`MMx16njL~x!)5i7 zX;IZSdZ5IJ#`F7tGaYPZ1@CNRwuBypRs^&(-p;k 2c&jM^2LEn9$yW0rK0f734yBjm7d1*F3rYRZ0}=&uR9o=eD={oa_Uv1C;T#=? z%SVVUK=u)4#T^kK;@M#U(RYs#J$3-OUPw|8|K^qR$DHNx_|^!v#Ib<*eY04}*8#Zm z{qSFwe6%pFYTo0|Jh2{ &JR)L?~HN-AM?^C|CZtMq|KD9L8 zfbFZwjOew51IK^5In4T???!f;W0f95mxWQp1m8nBQ3CEiOA)poi&1YN_uduBzri92 zTSs>1NMNHb(eHFT6SmV>6QZ}6qfD9R91)D}JV4Yu>+6V7>5^A+Mp_xD&~1a)ag4(} z1V~5U(fDVy{DB$gHqQuyG=Y&~@IF?rA9t}saWYE6k>sKu5e;MjeL~c>2UpY&s3bnO z+C6CDz!UUr4{*k=j@3&hN3}Z`(poGf@vqn@8v>#bT*zeC59^ 1wn zVm8qpR&ZX7kWx!THiX@qsf*s4Nn4I6H@Gvy-}LHvA|od`iTc;F`pyiG$p?#=RiKmI z$23nG6w06nHB(^zswuN)mVz)w9mIU+DUoI^EvhNf-OR{sSle8I4qS9>5mmdj(Ynw& zL`vhmX36aVEHSqj-HBX-fVF`ytxg)zB@aFTOB1RA7u 49cHcB`CDxLff3rUYJ$P5+PUZ1Sm&FCiMQOLP~- zTcz|PdAJcQ4~MBm4qJ+uv|vx7`bwyQS|~{q{&po|7NX3(KISJKDkpTBla0Incp&se#t?>*r-B*p5Rrs~M%jWq(@Pltaj|MjdB9EPfa)a24Jq|f!(BeFC zOy$Vslr$pqekTiACmlXMONkR_VyZ^|jV$#3$Fi{6QOh?Z89v|=)+3M3>MS8iRgm^> z$!#nQ?nCo?;X~7S-=8})WoB$8v@{Vg5Bhc>{95FhmN{LqhkYxBQp +!4#IJ9Z`-8ceFOL!QVsdI)xB+mM;%a5c&+z{ zMcNObI;-lHX}jbdFSuRHDDGaK6JmsRC9Jbwqk?SlUsgqRSW#6HJ;nhi3_wj*zX_X4 z4c}6tTI0g`P~R m|JXMnqmMs1~9_PBl95Ah9Ga;`6x@ zbeO8Q*!{Ad*;FE>#G {uvCYHdd}5 zqV3YGj~_~ L4*V{jhZaPc}K_ao_JDsF}CaH^?EWRXXx_zc4nWXbdk z7z0q3rU|0) bh^Gwgp~yX3(yzP26pH9WU~#D@tx|TzxIzcF|X6-#_-50N=MX z*7W-}7<}S&GfgL5Y(xqDGmAe2&h@_siBPCOM$lQEs9sS}Q+9!o(;hN57GfQx);i$t z5`Ws3le{rluP+1~L_oF?BH8SZXU(sZsWz A*EN%P`t<=q*t<;6zS*fqp|Laz2MWUxZ z4q{>ocXm6T06>Y*I2P6F1>MSIK7)#}6!NJ}gLdd6X*c|ME5L4rH+H_`Zmrx%a&yYa zm84n*;$r|?o6P(2=;D3FXT37j@_B_!wvfwGr4%*YYUVt1)-dKwU>f5df7Bf7z&zU< z4p$5s)Hps;f(g`=dyShk$Ju+^b3Fmb*&yFWu!o;C0R|d&zGnfrI~r5iO|-HYv7-Z4 zeb?)TeR!L%rVJy@me(Gc2fZ~2!(SX9+Bx|YWeYL&oqMEN{e~J|-8ekelbAerY4rR3 zVGaPy_z+LG9~nG8FL_bb_FR5(pTs?;+sf%ouLmhqe6Se4HN+LE~ALT{{fk(3X~frAW;M-R8cG z;DI7j<_phJQ6*t1T8(-9ncr#YjND^76g@sz2}7VP-pnV!=&&FgPLzM}E4VE;WsYzf zm!XKZJIX^WuwKoKqfGduZ#N>ASEPiq{y=*IFctDP$GWfUr9wju+p1@+iG2@Pb%N|> zPi%)y6}3|Q$@1RvJ8j=*_9PSDEs<5+gnR4!te+!`I_xQ8WL-Z`{%*CQZLUSP^Eu1g zgPdPsg&NjuDgu>YQ`k L`P%nf)qa+wrdLO5tm}vdZrNpK;%NYckS{K-_oy zp62h#K`;JJ4q{j>>j(c6u X>{R(}Xjs&) zYlEU*jCeRSSI)Qn*ecp^^B9B-XcXup*AV~#P&^G(8S&fk6f_P9zGWvd{*lGl;rBns z0`2_`3nZ@cU%~>R-C%)&B{tvxGc3?yt2nR$#$#%BeB2+uy+Tz#sx3>odsJ#sZ<8Hq z__Svbx8+z5uwxe >yoxVNfNpqoGA9;~x;Q5yXmU8dU zLf~sF5ZHV5%?eciocb#(Q2E^`U (viD2 z`AbJm5y-Ef>a8_%Y$OWaDG^Eyz()^L+x3s6WNypBpSl$1>p6;h1T41eZX8>sQCObq z3E~Za5c-eq5O+o-tg$!j9x-M=X5UEx2GpT}5BKmrLfy=kgD-)U%(pc@p20~N>?N14 z8Q2N^CnOhhyDl(DKPCBAO16Rywr1pWd)lrfM`}^NP?vNqDnzrHU6#rM$NVb0m OLr0RB)?J7_mlp!0;3Ht=k{&p5yuT)SA=SbsHe2_PhA%%!l>j7l8MvXe@%Ne zj7yMC!8a3*^_)QKB2%FuqwjsFz3k-5^>IS#?W%9%4%)7Q^6eP2|3rHQ$HVI&wgm|` z%-cs2U0;gc=>Yp*SLQ>{^ly72>AeagTX4SpTvO*~KI>&@faKDrgE-m6`7qx9#~E9% zcfgjrKN&nDD>n?Ds`aR{NBO14Z-%y!FH47xOA$>|3d-Bq>P_@hP6K|<(t^kTnx$oD z+!)IZ;RG^ivICgzA3qJA=|AG;7JK^Y4s7rNSHMb_qtE-7SL2xxnOqXHuW<2c2Kf8# z*%)_KpH{T*yfch=XS1YGRT0gn*GPXVP5ym?)$ lb2}wF2E}43 z-#FsHE7x)B- ;fB(<=`2X@J12xp2DvsCZMS!H-0!}sblUVdh;*=f)@3I`o zpT8I+qkoKQ{Jjn;sCWHP(r^d0e}G|qxzS4B g*jrzwqmxljk6AIcZKZ6!O;D1P8 z-vi@k$1G)(l!NPQH3%uWdZpd=R%jFWIr8v_&I9~QHd>pKA+f&bQ}1MizTufAFivTi z`PRn_}{T%{A zZ#fXPO2MDq(tR_hy?*w&vGWh-`J(oPgdEd^Gmaxz)z0K*C)+f99E9F{eJw|ABPHD$ zMR&sfV8|xrXZ~rPff!rJHw5m$F)gK4X$I2yBA=*y*_}~E5P%u482n*WSyR2SxpAt{ zAuHuNPjmmi&!d31$ig2Kl+;LIohL^|31LDc-P?R~gQLZ-Mb(b2*k@r{!WJuhnpXOi zq}1aQb>dy`h6@$22H@i_wA;(IGd+ppH0(zcUv@|8*l6AW83K~o;jyFu(>%dGUD6UT z+mj1xQiD<(?B~hNo&`FT5N%qL>0<&HF+mQU+Kn4j?eL^`H8WTlHgIUPI2FbBZ}=k{ zcgBxmrxW$mVAgn_a^YVugE_2^-RS998&^1noX*hXDT>h2w|-)W+o?}EbY(2YB^*+9 z$yR%BOIll9iN3cGxWkG+LB!nCTxoE^L$;~!I0+@=R-p$T-t7g7Zf*ESW+ad;n8}mf zTU;T|NLTf_j%gm6tJNZXD7O9h?^us}LPY$wBNz@rCF~HJa4vV%suN_J%fgplgjqkg zT#L(gma2K=bHxwG(FH#owrN~3y<}sD!9aCBQ1eVi*q3oMOhz!tUrY`GJSa4U6mwR4 z)y PqLyc=k0yI%E&FU0GEbj-CV^@L3K0jNm6@J#|`CDy>D9B*IL-gxyDKR^T zKHEN5 6FS?CYadHuaal0f?=v?wi%`f4jx*DANgGSuWhY>5DvR73(xQ?6Qc@}> zCoA}e+#JV~)SXac5Bod>`NbNQ`+Elu2iqAsyNl+G=4E7#2*Xz+KUk@ODBu~I^+ xB)#AME|eP>d%;dnKWT(6dMbk)&^BL1BlUuPAAe(kZ;k9RT^}f6MylsgT^E(q zUzXNib8fk%@;m%C&1kMS%h-A}{%bdP$RNLEAm#VgXLbeJ>!k9MT%HeiZ0~fC^DUa2 zoy=1&meP+dO!Q^zMC%5i5aV7LeCquVvD@6mvi-4|q_K8>;L1XvPXx$VRhvIjw~M4I z&KCW)Ekqo!#>hfq`cLuvaT~ }_1zBn3- LaSd;gYjgo>#j zqAwQAXqHWI57@dc%6*HJH27lm2D{|0iO71@DAp;*?B76~o+R6vtAK=1p{e-xd>sZ~ zy{`l`)hozCvwV-v_J}+a<_I#lKvQ%~kmqvX1BpngQgS8=9w!(!CRukgEMW)s%A2gy zw#LTazwC%gCfuK7feRJk gWb m_(}tYO~M5 zc5GM6#!S}7zY6|3Q)j1wy~cPr-lhs;soKa%o&o49b%KddVwC6<1crV`6|sf7&mj&4 zof&b~^6g4*&zkctz3+eUBTn{9(j~Yz+!es*ufJJHYQ?!?`34)0jCq|aXz}rR++q=z z&$V0FxipD~f>b2S#VYl!iV8rI_!6gBsn-JmVp2Vcu$>^&D~`n*$1?7ZpHK&Y$Q>C* z*&xmzQT~a6gdbh$^9!2NsIYA3l~^E+8 uHN;y^wmtQ;gB0u;%XRNI zqajOkUjEx&7<(rf04rC@9$x%K!1byavmr;KoCKfm!bMTw92V)|toxQA7SGo>AlyMX z!R|?W^!z=Vv`2na$ 2INzMwK^efQRhaPn*qf 2cV6aznep&DH5b`VZ; z>WrZ`eL}pXb6+Rk6n3J~-Gys=~QH*)Q4``tU8Ql>XDJs#8r$ zB5wxkPTia0?x)de&v3u5Qy+MBR8ODewY^Fjf)@|CdVg!rcALD_GsRfmtCSK#IwkxX z#+kaGUF7<=Sa6|cS^DG53omD@AmLX|LCEiS%-SvV&~z&Vg#lZZGUCeZU`TyW*I}NM zVIEF v&@@MGRMsPR(kIZiot9bDDJ<3IGHWFpt;$-cw(rr5B z7z&fulu^V4Yim5d?U6y{#)C#yEk#>btm|m{zB8Go%xxbo@Y32_ Yja|a0P^;uW=ukLGmw~u&@sbdmPT5Q@HM*1jl~FP^5&?P{~$=kJv$*_B_&+G zXnPKRXu&Y!8lV$)9suV*)84;@WWBtt6X{+fUbmui@COh0+mi>Hy$3x{Ub|!8oEfr- z9#H-Gu24b-fnwi2@RME*FZAyNWnt%1&? $mRe z!N{OOp2z?ahH2?rhO0Yg3wk@tv6Urs6cKeK{Brl)lf!e b8w5bbgsZ zf6t}*9`vKZ%W}v18&E3Tti~|uw_AFxk}9aqirqZd1AjHOC`D^Xo&M|8qChTAPb?V4 z%;*bTO55fBZ;4#(xYySO^{6vSp?H2I%g}(9wW)@5#kkxxMM2;X#Vw^9zU?Og_y6N|j;fv3*VpIO-NO)Vqtx4VxluK_f zl$#I39~X!STGWCG|4+R&3%K>cHb+8s3!I(6d;Tm6!pd&tRZ}2M?FPyrVZ`0c_k~QH z33olUS!W`_B@*!x(NTK~h7!a|&S>aHuD+k{rh2Mh7gEq3h8qp`k}#_M;s^|nF0OVT zt)ww`%b$GmdiaJn(s|90w?2GWCuI`JbB=UAD<6s};HDTnXKq!n#P&Ptu%K9NP$Pz^ z)z{~^Bm!^JA7?yJo3=aObAMwPs9+Au 2OK^4tl+AI3DJwNeJOjUE_v8w}_rG{}Uvl znUx#s*+CB29cv5hycHwWnqc~?^;|#OThazAH)U>A2A6V|{-WfUvFR@|BLFFmOIeAV zX|B>#BGHZR>6?Q)18Go$mJEXpy%gmkDAJdu7AxBL7h5S2;B5&-`cJIkvvO8N^W6C! zT4!+KFaVgig#C*n*gTI!UuGjJsNv0c<)*SnF7n9dyj6rp&Ac?1b5B(6-d9ELxAjgY zT)uwy?x@}M4w<>gAM+pURqt`fTk7L?q%izUer{g}AN3gLjRCNpetaBfFB{*ygoIOh zBR>-kHslofC@ 51&9ou(#PDp }!GXVZxlMEWF Z>jWW)=`YGmZSXB-sEBwc< zeQ>IaOJ*E`vDtWEt3Ox0Wj)>iRsge8GP(0dDs%~A1zFCW`$I5>+q01cvECmUuZi{f zNWuwXF^DZ_xuj$Y0e5cpYYX_%znJW@*?pncY_Jq1BV;ZnBV-|$2)T7sK`a>nD&8iy z;O%NcaCbX%JHfx*MgJ$_@b%#8hOK-P3jEWM2Owm#J_yzmyB`x-coO(#(2I{GT=$sF zB7{!qG=X3C?VtHEV6EMJb^DKjkDN?4hW!(9=L~x^u`Pv_%EUSr_(;lhjL)mI4Py}6 z+VX A&vqnevMuLQEvvebqd3 zj596=^>4e(p|B@JH{cIZln=oCUvlynQvrXGJsLAoKb!>Ag%u>;su&&E>SuvnuLRyT zY-%X<_QJeg&Ya7VcG!KY>^Z+-d#rb = z*?bq1Qx*%lyx&!qHX~zMBbPotO-oww>!~OM>D#v-#hBpf0@zqsdKMB1&Zj}Ko&@;4 zW0X89Yuu)8!(MZVbw^_jf-VI!eY_oV?#)A`&Q@!Dle`}II* opU(s&onuEI!>BSF^Yc!7s(k@+cDZevF`YY5dOJ7Wu>hC%fT<@RfJSda`vW zK>#-Gq;_)XU@c;2lsd;Aog$v$oIeeMU+nxeJ2LGO-$KAAozUzt&bo3Bm$pIGMU(t` z-%>g%9@#rvTAvz+XXgrl)mUiV0_-!TM 5ouYUkR&|054tFP35pAlUhUsosRY$q;#1raZeC95YRo|_cIhEx?5O_W z9%h<|s8Y$))cn?}2cH nV9-DPsWm!BfyKZGJu@u0`PEl~2mxavv~JcAn1Dh8cBJTay|3N)NSke10Vs)x z#{E!cLh84*T3}p <4g^584g|Q|`++Cq1aYx5%YC3b?n_ZGGys34^t*T|Jy~#=k zx@N7Y$qxDaa%|>U*ACDC?@=MoB3PX6zPp4J?{*R!;i#z&70E$Zks&Qyee=6Eb~~-L z+xr*YkO)5EyX@Y}6xMFIxi1V$bdCK1e*~6%t_tzomlK|)fVKl+ROy{W)TMeI!#Gy+ z9xo@Rrm&v1Lo `JIp z@qY25<>^9AY3I-|JG-@b??P8vB2slq7g0R$as2Eqab3t7+^gbUg;}{JHuvZDE%C zr;G`hvN=1$b}f>Mp0tV{+qVhfv#%p7#s?ptmoIxIyIhGcTH6qz*csdAM--~%&0BAW zR=&HRnlpN5RpB&+lI^YHm7jQ)5dLf(@lp^n!)2a90&%)q&&wdq>(4#8kAOX&%A#`` zb8|y2g1Ldh{NQ=AD#aY_BN01&$`?d%Pf~hfcWU7Jr$+s(7R-gTnOKjj9|THD@G@nX zwFkXq#UIa%z2_{0hf}TE(IaZsBjcvV$kW@HYC_WBvGK)5E6wd>Q-ae2>m%i9MJ+gB z6))p7Hj^xfHIu7M%%-!{9a$A%44=v8owhxNXK9tP!z69!{~#T#xy9^1Tb2ZtS9K<} zvmu}hwn&ZsGVk218f@ DpD*W@PJCEVrVsg`f>$w+cg{B^RS4&D=gG#{6nbPg(tG3#cEQ=6ATK@fIz>-^TRDQz!3 zQpqQW+iY}fC7ioNCgF^JFHSgV!rSH 0=LHbcxvR=^x`? z8E7#?TDee7TbVxk9RC*ewX|uirt*BP*F%d*n(oC8nGgCzuzG5Ku;+101(n!B;*sm1 zj-Is5>+cv9FUOa{BH_>GLd1onaA*vIU7q|U@0R{g0L}z4`+8f>F)O~9zi&}|VO(Pd z4qiw|*Y}kk2k*88g}+4M=Q=H}FB{i-&Qsy|p@M5) PCzsgcU^-*TY-O18qkv1i6;_oVA|SzsQG)y{$?c>1y6<4FADMV6ELf<@nO|Z zI3pr11>5J%M%2h4gboYA+y#eG$|-PK+WM>(@nibHcU~46w3WzQ@gbsp!Vnd*4Y{0c zMJ~26vtSuBLtjkEAxmE_h}=*NPEmlLVrL^d-~%M>E$ZNb&0UZjK0OeA9=@13a4rs( zXi>FiA>J7<4uQQ)4^3}1$oorNuBylFgE5ep-I~OP<=Rc05W1!aTIKK9A1%eK$sb{L zsIMVeW-Gq1t+8fJ5791%PLYd$MMffe@&c@!JhnM8e{wX|W~smx{D?IZLl8RHAMg6C z#%Y u zt77nh?-WB{c~)Z~)Q*whJR9lbw(gt?b>(+ZFH1wL#aLO`vQ`Dw4@=w~24HEL8V?#} zI1=J!_ U8= aS=bfi*^-cS$(UKNj#;cPmgLZu`B|QZ z>$e-gYZR!=K7x(@!z~i|u1XF)hHk=twP^Edw0vHZK_5tBFM)rc|FfoTk%Iy2wHvv; z7>12$#i&(j!PVZvl`p1axPuMF7lt)v;{HkmcK)Xna&>cGmy??NGPK)IimeB8aqC`# z{`18{C9g(hel`xgH@sbe#y4aKel3zgt-n65rVQC@r?s?Wx0o^&DfC3<$F?F@$MG`! z-Ejz{iw_~ExE30%4%&tqROtKK8Q5BgXKKelWS$LrW7vcPsA_CP)z0Y{-10sn8`rAP z`Vo)26DECn9b8E=W<1^e-eCW|xU0@VQhytY^|X&M?qh@yLI@#*5PR$7Gr0(PG~Ax| zN79K}Xqz5VZ6(A2*P77^si?S{l)mj}7Qo z6-g10stJO_j~xheVR_+?hhpJhj3GbvVeO@~zk+}u_5Hbl4%wA_1_605lok_Kb2B)} zbk$Ome7@i8@}UAnmCvJMRR@jEW00@OB@2L|3&X&)hKaz$zl#BaiVp+~E@kD^4%%{{ zVaiP{MZ+j#K+uw9o<4X_a=Bo;+>g~oJ_+Df9e>rgpJ4eq`TgrA`{q}(y%(X3*cE?~ zTqPO|xZppVUrMCn|Jd^&Lsy~N>>Dvf&}q9BOW}i!ijk&nxXysT_VbB0#QMuK{_;c) zFh^3;$Z9jYK4|ogsUHep`PW>d9 fkn9NEQ6G>E@cu_2yA$PVb?$M 1x@DMx^_cs9=2iz=3*tUB)1qsLoUjSJ}Zvjb28hA4*AMcG6;xbMomxF+= zU;}j!O+}wyaz_jb`$q=&Jao`_2sy1Jg1ivtq>G6Ydr|{}&UNVk*g9V*P`}rG%}3Ag zYNlLkS%Z>=`&O)1KfWDe0GarwN$c -?)Ra^{_ zMCQuAx~VV)Xi-QQtaqEuKxR#dqOPr0C! g01 zmvwm1fV7lhHtONN>WK*#EFv5ZEup~-CkIEFGZz5H3WVmo@M-AM^TQ>0#LutWe-??r zr3|~aUz23*&J`)ECBfrKUFt4x;}!r++n*5{Et=rhJ@76qHg^nOpW~lghIT7Tzht89 z_On_=t-c`iilmLdDfp-2r-Yyx6CruJYWxgElywVw4^c5DRneUM)E|c{)vg7jd}*g; zO&c2;RI?aaz#w}=T#E^vGA>%6$wC#Q71PH(qNM5s7GJ4;P3Ffqfj(eg*D3Aqz3(nH z!6@Owge}5JYTEDdifn>FI^aW`@PH(Z=OIt~?p*>~N>!fR 0pdzoaTgC (0ntB?bv7clC3MH z ^?IT>H~Iy;^ua}jx06mq;@ x6M{XA>Q z1P(N(1%1%Sah+_Z#hhP5toBAT_MKU=YT+eG?=Ug);)^RU>MRoL(o>e~Ut=dvbv ! z_jz|*k?RXy6!|RS8NV;8QVo^-`@od|vsZFS$MuLtw}L$E+QU$l(c2$F;h5y)hh~s& zWT^4cT?)#_xO%dv#KyN9-K2c1=m?NhG{}u$4hho@II)sMJvJD6Upg^1iiU-_tZ5R+ zj9UwZ=$!rZZh663sI-B0Bw{%Z=C!a1f69~f;Bn*V)#5Cu!{<~czxF!=)uM?KbUYw* zho4_l%jF0W{@K6gLB}D`7kM;i{(;1YQpdxsx7UoM6OVWtrheYS=Cy+%Iz0|3mN?Fn zIyAseR@ST{#tKeFzlr%k;zFzQqqVQj+pd9-2fZkY#cFy;BP*mo>mEC>_%2Orn2(p8 z_~k+?6eezW?OpOSe1tvKutCSy&!a>ANXn9WT zf)Z1J0vj5{y96ZZs5N;|zEy2>Hd1xJ?AM{~saduc*7@MWgCjUvD~M{Ju%n$-sdTgm zWkGOM-gg2=H`5lbTI_EdaG>SHfxi4moeBP8@RA58zaXfod{>d^?aOttV+PS|$$fid zNs*Z+&c((K?B#G!0!s6-jk6*v+x2ZwS`Ud~=w=-pT_C93 TYZzS{R^(SEvpg@9--`I^PJaEQAvT~)f!**%9_kNlhL ze(Q5fT9f1fm%d0up#h(J Zbfs6jlA}&r|nU z))g~!YqC!PUlc1^)F5q-=nxj}I23gOd-?VSN *LsT)^GjB&6aaYA%>u>e99Do z^=eWM%p^yugUwzsEP<<$shbIp-czLQdj^BOlXKS;A{plg$HfSEulj}vQ6@ @{Z_4oVxTlodKZ7gdK#SZI zwA>GeLz^2G>&j@1O0U(PYP&Cp^PwWp5~L}}v>T5@n|@N#VBy_nDG0gQ*8fMFXvY^f zeQUCd=_W#pI@1h3-82(=5o1cj8pU7?@NyU Fu(GI31Gqq zM{Ln6>LkQ%naM1NQ%tgb6HWx=>Uq9OTy$Vog!r(G)QN+OUcj&KmY=ERhr0O`N7|fq zBd!mB%SkeYNYR9})L~!-;HgmrFP=}qu7uJ=gVF?J%x-hu57-XgH5}TemXH+?v?nO( zse;#j0s)=ffD78;MtQGC?-}z3o_AtDu6<^BRJn7~r>T&z3}SB${VqBGEwkSa! gW{oaDlj=P ZTu+;TUJ1` zh61tLUOiUj_spqnd`ZsE_qwl@(P~nxH4z~6QCisp5L=>QQ;jtSx&TIUhcxQmKJhE} zMHN1i4QW7-X3FRWR!NcO6a&a}R)kVJeZhpDHJ2yDRL3IUnwxs?SU;@&;tJq&`n7H2 z!ty*Si>ur|bW(Jsf#{Z>W8u!2MA`(zQY7LMy7^+1W^^es=#@@HX2soXcQ_36>JXdG z>4fgosc^QijJ;;|D-}~`dq{ukF^ymsi18?K-jkQwDIP4BHNV6z61hxO$QSH7G*1Jo z(=p!}))t)T{9q9Qog>mVEQl{sM+(4tur>q!izu5dqZ!0$zMw?qqble@6cy_~=TBHJ zL-Q@-u`+cNUs~#?(Y30IFLi$$&jOGF$?V$R*Z6&f8#IBF4|+zN=1~!+b^a~eHgWb; z?Mxm0IYj cMGwXN=R9^|*!G(+TDT3_cJ zkqCbq5_0XR7p1U-*WJS7FGrc0IgG^hJyKp2WtlD{f(zC#F46&;ol_oxQ#$F;K;L92 z(g9%XsjI33ASJSxUvyeALrS&q2YzxUL%_pt2eGE 6dW)q1yt9-|Y^hCZ6_ZY&8>$j| z``eTg;Z)oy4WPp#V+lXp+sf_Th$-5zezN-O^;H#6R2B9r3gUAGY+*k&y(#skxQxSK zyeIwmt?e7q;T#(jD&fK2j#KSLORh3`8+{RiFqAXsL%7l0uAdlLEIsKJuU!`7&_Tip zb7?YoV6#q&8K+9^lIOMHr-CB3){5fNfRj8288x1MATb6{k45NjzN@O)a@$&cd$TB> zS$;1MR*S5 Qc_2$9yCZARYh0}|4pZYXAHRg1y>;8h@}r0<&tW(Cl|;W$=Q z3x~5eopy_|zmimYAym6yt7&WAk>9z8$x8HFnzEO(Cyrt1;$3nfgBLJ x-RUrv4~6@drN?F^Dk{C%@44>$89< zc}0>EuP9aJZ>X$pbUR39mU@1bU+slCKuAmY &ekge_%THe{4QO|~<}(kYk~p&3 F9@W;kK}&NenFQ0PTf^h;r$H{ujuYjl{vFr+&5)k z_4 =Y31x|eV|xlWZgkig^BVj4O}^-a9~LY<$kfMUscGoskJD>4kPeWmmb zYPe??1TL7lW>eic-489#OD+?ob&KN6JVlgbYv(rq^U0m&`pya{y2e|?b6T|$Wt?1x zTkt+Db?tn$Vn-ti-zlqePb)_58q_Uu;Z{xW@KW)XW~ap2y4rUGA!3u2g>xyXBk`4x zI!1qXCEKaH{W6gV-aB^)1?+{AxyYV5(4JW&l3QU=x<_Ex4^ubydoW-t-I*Odg6<_u zKt%@*{btXw`;;)og)RAn&L*|vX5ZHfJOafDG38(oP9SO7RrZ#|iPmon;d-JlEg!5{ z$8wTinq=<_xD*ISr6+#TR0R}=OGixp-Db2J7YHw)zMnhIpxl8lGIb7CuNF6IvVD4i zTz&EOcd#-)$Y5j)x6VRXM>qyc+K6zN3UIWnxr*X|_k>_Vlvl323;>Hnp24jp2QV~W z_pkssvl{xne1T^orh%Zo`ZGM@rc{!5sk7JbGB6a2WT!X_cMB|x^EkIa`tnlxJT#`= z?b*dGnU~x=7;Q~OqsVI6SI)xL6VmW&4?WeUPH93!5t(d{+RLUF{jAuBkLmAQF$NeZ za$y>+6dwPl*Ghs6L4 k+CBA7b^PuRq`82 zz7oy*yb|ec%tw*QPrfBY2Ls7>tp}SQ$>O?{sB!7U@=wxhFw24dDLvArdNU$ zdV@KQx{8gb6ZnunHI9A08WT-bUykPe8=*~<_{3De;k8;?>y}~KF*G$!MUyD8^LMa% zx+#8iR*Q~HInYvXap8GIDoKBXj}r>d{Z&cjCv-Ijv7)MPk4)%$r`<1Qn#6mU05_>z zB|Icdm2(&q*wU&@atE@&$hC3*Bk*3czW7A)$0OI*>~!-s*47DVs>VIlNXS-aq=D9; z>z3CRkl%%xwRM#;Mz%-cL2b@mOGA=ZIFF0N;U~49s?WaGzK@BvGyE3T(vQIYQj8+h zt^FDpnvK*Q5QHJ%IS}lp8-ndi(D&qngeMd+Y`|Q{5km4x!rTQ_SZtQxRl4H_9dynB z)^!#tNek6?=b-!3dk@bASKZE1$ GoX{GS@G1=f+A3?pnmv+gt4|e$8`olypm-g!zYoQ<#$XRdAuj3PC zTkzZ?)g0F%YQGSi9IqPeKHekVJ&0} nmDXgHl>4KuG=Nb8W9KVLYDRlrHH;f zSBERCRYq5l*I*2Mtc!jy8rAS>@B--EJE>sv6W{kP3ddV?+9LuY)<3S^&AWlowH9aF zC3@$dNBjpq*s5+v8Y*0d5gRj_jWy56^=(ihWCedr$YY2+%e{ktBT(rJ5OMSk)uPi) z5U|#cNi4xEF$&r-E$uud4V?6hF#ecqzR{nN+&?K> U=0~MIM9ko;;D12^o7Nkof;P>O!U|wU!@B7PJ;6d z$27+D+a-ytW$c%E^)9nvP{Rcc>+F-i8zy)hPKQKQs=5kDXn&zXLOw3L|HfJxw}Z8- z;mB7;L}Aq8v{fW5mBwc@7e(>nAcTymM>JCR)?3O8dUZ|6^2H7o0((E-PJjFMkVCJG zZcy3I9UpZX^ek(d$Agvd(bOvpLN9UOZ0nwPW8{we*gsrWVO!V*5~AJlSK-I{teR-# zdd!HIY>(}%a6h*|Bta4r?p(iLK?vKFKcOH#r~V91%X;Byp&p7-D8?WBTgdgTSAmRJ z<%{I;yEn9X?Av(;M%ch^$PC1L~DLbZ#M+0CCIIz@jKL%b;j#ed8xm|fW4pUE~1AG^k1 zYR^kS(#q9d0ub5lDBc*w4!3FT<2Sp$bIsasH=?9X8~l2Vn=AJ><$WTQ48A~ZTFB&+ zK{@8B46NBVK(%Eg3MpMR6v?6T8?L6+1vpPz)OWtdaBU=a$zExDLdIsbi(ncepf*D+ zFUF89bi};ZF86igeE=q78+Sg^AIPv?#r|)Fw;vPL4fMI-xpc^fiZ1LG2Z77mgWnJK z#~uw%2WlBDquk_E*0NyfkjMkBE>$%rbNE +A*c7D{~b}bSr$ dKdDLd#tnq-UA;K;1Jc$6IPu3GalGFahUB2AES*J=JHCG7zEX*uLCi(+86> z_}S@sOqB%~gIARKf#!G)N{oCDC^E-4-d`6Z_BKFfst!yr4I!v^7XmNJz-X)(oTZ {LMUoQyT49g z qmI@H;9~JGp*Cmo;Uv?AnGK9!1rC@r!%zuQcyJ4yLAS1p%XYNoT(dspg*}d z1{z+F{(^OMU|2#IwSHo6>3P<*(oQcTXmK@;aR{g(mtPHKjaG9dYgj$G{Bd=fSUJuo z@HuEVus=BU6g{f;H2`IgA97p&mqSvw*--9~(!@JF|C%@I56(c`{&kU^oKIt$8IV2S z^kGWb*EOjbIz>;4E$8lCfl;VKa;?UP!Im&*)Ic@* V|0l8O!uFTZAuo&= zjEFc-IxOX^&Wm$C1onJYB?h|Q!%x3Sem2dL=}nA@E7Kx#+6B?bDh_7FziySJr+}e( z;t*8qZ_U6nvF(CQ>pQHC;qw#0Dc_od4K|++Cr(1>j*^_T(gtiLg!qF?Ki3r129>V@ zDXI(tYBvvrOvV0}P*YXW|Np6JgmdzN&>mPs76s`J{LfFR`chvyi+(-UELUiD
%_DQQYF+_!kjp#=+P>4w;erz}vT@&4qfZJBakTcO-J5M?9RMBQ4|xVq zU u5eC>N53Eol`*E%A)dQf7ZCR&7*B?%S`iP4I# zztRiTj;{+@>JP<}^?S1Hj3`ROk*q5C;CZQNdx`tF>k^N;Zx7J{HpTNTLy6zmgrC6- zpw9zoumD3F8)a55E97o{>|s~mP;4h&Djk$qu!bUoA3ST@PUO*q@e*3UEmd?Yk(&M$ z;zabDaguUAu*m#KDcI3nc^mU?)Z!~qpG?6d?97kNKDu)4V4;c8?jG=lx7|10p1Bea z(;i2-acn8^xMAOOA~`on+zI)ik-(jk>=MODh^H;}vF;x64}C?6y3LH#-#73xbVSF` z#I$2x+HOemQ)Py;cM00@549yNJWW4JLarS@`BN{;x~xVdRTc*K<+Kw*KL_2h3~exz zitq4yJf!&F(*<8~O_LU2fYJ0yiO6KdwpUOoqdr(KKyifYMom^G%|a(VR*2J^Q#(Bj zDo3Apo# zEIY*HfbZ@sCc`*~D`m&d7$<^vI&VbcHc%&JcK};!Y*O@edavScU*XR$9;aK|zK-Ln zlzc^sZuG{Hn!)k=2q<5A7+=^%*zU-TyCUKeT(XvV*noasPr-16Z8H4&hfbwO2q!n+ z!y}oiNm=*!WG0zEEnS6{0EpGwBmxjuW2RgB!V=1jSAr}0vleyuud|&Hm?U;Ba#3QF zJ%+0w|9;Y{7Lf!@@Oe_5L>rJuO%p#L9BU9p#<-=3CCcnxQWwyNe(zoaO@(dgC2?*O zmX#u=5hpxwSzyg@sq0SO?=#_~zZ0s=8+wRs<9jjwZzujF&-wmNW7TI2i&D+NQA<_= z=}B=KIRq*L`dO1P@e9hlmWjR?ZcZQ!eYMe}Ys9nUJtyU4F%kur)v4=W0*?H+IuUz< zS!%5Rgqd1)|EU7<4e+H!3KsQ#yj=1C%2?h(I=!2;6>8eiF`~_wq>54<|4C~#gY~96 zad;|X_Aa6$)wiQhA1TJ_Cy6?o$6OT3=ONj}**X5|Pr3lJ!1xC#HU8629u> xs4pi{cjA2gm{sHO`Gxqk9tg5X9(g#He~Wid$w9Gbuc?AL#WFVqR?Xt05q*x zsiHQ9UZjtd_$PmRY+BP#22o`nPKbz7@6GWPh5cc@-TV&u49M-`6Sy@VPeO5O^Pa|2 z0X WBg~#!?U^ SF-BI!yz9f=cc+_ViM3Xcd$7MPvVgy; zKUCCTIn%Y-D_e7+Mkj+q Um+8jjW-(OHMeW5Yi5l+r3-M&2t22fLyaB&czuZ5D2 z*J$4udIb`9=iWdh!{my?lkaRsc#P4`?*8d9AK4xM(QY2(t9r5bTX_gm1nvg|__S za&ezqZU`vwhFMi|2EBs^=gKI-RFQ+;;(Ug3vs0okpimr=tX4E%seoy2k~FEZgXwMW zWAz %GWKr;qEGYP(+QQ1{f?Y`5A^Ifaw6u&dJohz}rHC=Z7+vIc&zuNWCLh zi$mFEH_+bG14GP*&PooofUBnSb0JafJ-QFoIQ5qhe0iWiw63cl%LkfVvQ{Jgh^tS0 zWcJQgmb|8L9LC1rb Bb~SMh?Sp zI0#pne#tgd7y{MJyUp!8U`E)SCB)PS@&ZLssbVK#hf*IH++qqqor}5;F^@Uqf6nfv zFXWLDlV$vTCS3n-fzw%wkBj+?+y5DGD*9J&N-^=@2B(w%>%pn|{} y<5we(_aaGtKlspO)0;uj%8@O<}cO{PB4+Ef#qjQE& z(}kp`L4JwI^fhPVMK)_Mcp|J@2V4RA9z6gmk5`kyEJCeVlCJkl;ZX^|HEoWTOQDE| zQuqLGQPi6xBI4Lr?rEIUSuZx9->?o=O_3X$LkV7eMVs9`dM#;z2{Hh;!bi9CCwL9M zmwWH$*bj*81l$RdUY+Tw9P2iIKSK;lc~{xEqhgSMHtLzygP|h^Zhn#s9KiUGoHlUj zzshMxj4Dg1(asiLfy5vF>n}rc>bfDYj@HS6H+JO9x bjdr}z<9IaPjy zn%kgkQ5H12FeeBe_?8fTiTMn?L;@US^XM;8(5s pUPNt3~rFEH+t!8H@9-FUt*yQv@SHe2^!vRjjnb$-`BJFs6KRP{4&fsEyX0^Zy^ zH}eebRcLIdFL=weLny~)OBu6Oce3`s3vtNiks-LZ(k&-Kr_7q(ZoC73Xt4WwMeM)< zEH~PP5xc;Gk*l{a#z1b=Z`><;9eA!e%OHX6rKtY*eAuxQXFW4#O?1x9L7u;eOWvjT z`G|9EH=yIKn6}Qpv%v&`sbKNl|3AKpw5=;%u&%*AaX=#ToPCJ?1+-5k=ggn5w)L;_3CJ2 zi%Ng%PynN+ r=0 !A_k8 zEYq8H!JO$%&mGc1nk{)D0{=(cj-j|Uw|EC7LU&x#!d2%ioNzg@s8U*t>Q^$B3GswQ zYwIZ8m|8|muJ{7dTV^)v)rp>SN&$hGOPeKKO!7fQlgp+-sb3-yA95RZK2N128LevA zqGVBSHRvu2C+Ym>dA3yM)iC5H>jBBp{d{LdYUkQ(2WBrqjPO19#jX4$MvFRUe!vn= z BwXdO$vX#9lOb*~x`)*n^+ zPJ=>bl^OfuD}7WbiO<%guzrbSTA0QoP+|2-jn5#(k7CPeOIe(MBn%cJn`saj$L8E! zf-C*7>qA7>B9LhMI^YEMPY`?2^+B