From 77c6920a83693e6ae0e512935c38a682c637eaf0 Mon Sep 17 00:00:00 2001 From: Anca Iordache Date: Tue, 24 Mar 2020 00:36:46 +0100 Subject: [PATCH] Fix default port mapping and indentation Signed-off-by: Anca Iordache --- angular/README.md | 10 +++---- angular/docker-compose.yaml | 6 ++-- aspnet-mssql/docker-compose.yaml | 2 +- gitea-postgres/README.md | 8 ++--- gitea-postgres/docker-compose.yaml | 4 +-- nginx-flask-mongo/README.md | 4 +-- nginx-flask-mongo/docker-compose.yaml | 8 ++--- nginx-flask-mysql/docker-compose.yaml | 14 ++++----- nginx-golang-mysql/docker-compose.yaml | 23 ++++++++------- nginx-golang-postgres/docker-compose.yaml | 21 ++++++------- nginx-golang/README.md | 14 ++++----- nginx-golang/docker-compose.yml | 6 ++-- prometheus-grafana/docker-compose.yml | 3 +- react-express-mysql/README.md | 34 ++++++++++++---------- react-express-mysql/docker-compose.yaml | 19 ++++++------ react-express-mysql/output.jpg | Bin 0 -> 35980 bytes sparkjava-mysql/docker-compose.yaml | 17 ++++++----- sparkjava/docker-compose.yaml | 2 +- spring-postgres/docker-compose.yaml | 18 ++++++------ vuejs/docker-compose.yaml | 6 ++-- 20 files changed, 111 insertions(+), 108 deletions(-) create mode 100644 react-express-mysql/output.jpg diff --git a/angular/README.md b/angular/README.md index db94e60..373c14a 100644 --- a/angular/README.md +++ b/angular/README.md @@ -19,14 +19,14 @@ services: web: build: angular ports: - - 80:4200 + - 4200:4200 ... ``` The compose file defines an application with one service `angular`. The image for the service is built with the Dockerfile inside the `angular` directory (build parameter). -When deploying the application, docker-compose maps the container port 4200 to port 80 of the host as specified in the file. -Make sure port 80 is not being used by another container, otherwise the port should be changed. +When deploying the application, docker-compose maps the container port 4200 to the same port on the host as specified in the file. +Make sure port 4200 is not being used by another container, otherwise the port should be changed. ## Deploy with docker-compose @@ -53,11 +53,11 @@ Listing containers must show a container running and the port mapping as below: ``` $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -6884c228388e angular_web "docker-entrypoint.s…" 42 seconds ago Up 36 seconds 0.0.0.0:80->4200/tcp angular_web_1 +6884c228388e angular_web "docker-entrypoint.s…" 42 seconds ago Up 36 seconds 0.0.0.0:4200->4200/tcp angular_web_1 ``` -After the application starts, navigate to `http://localhost:80` in your web browser. +After the application starts, navigate to `http://localhost:4200` in your web browser. ![page](output.jpg) diff --git a/angular/docker-compose.yaml b/angular/docker-compose.yaml index fb02ab4..d13efd9 100644 --- a/angular/docker-compose.yaml +++ b/angular/docker-compose.yaml @@ -3,7 +3,7 @@ services: web: build: angular ports: - - 80:4200 + - 4200:4200 volumes: - - ./angular:/project - - /project/node_modules + - ./angular:/project + - /project/node_modules diff --git a/aspnet-mssql/docker-compose.yaml b/aspnet-mssql/docker-compose.yaml index da40f1b..cfb9702 100644 --- a/aspnet-mssql/docker-compose.yaml +++ b/aspnet-mssql/docker-compose.yaml @@ -3,7 +3,7 @@ services: web: build: app ports: - - 80:80 + - 80:80 db: environment: ACCEPT_EULA: "Y" diff --git a/gitea-postgres/README.md b/gitea-postgres/README.md index 7b9c6d6..a5a5374 100644 --- a/gitea-postgres/README.md +++ b/gitea-postgres/README.md @@ -15,7 +15,7 @@ services: gitea: image: gitea/gitea:latest ports: - - 80:3000 + - 3000:3000 ... db: image: postgres:alpine @@ -24,7 +24,7 @@ services: ``` When deploying this setup, docker-compose maps the nextcloud container port 3000 to -port 80 of the host as specified in the compose file. +the same port of the host as specified in the compose file. ## Deploy with docker-compose @@ -46,11 +46,11 @@ Check containers are running and the port mapping: ``` $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -2f5624043da9 gitea/gitea:latest "/usr/bin/entrypoint…" 56 seconds ago Up 16 seconds 22/tcp, 0.0.0.0:80->3000/tcp gitea-postgres_gitea_1 +2f5624043da9 gitea/gitea:latest "/usr/bin/entrypoint…" 56 seconds ago Up 16 seconds 22/tcp, 0.0.0.0:3000->3000/tcp gitea-postgres_gitea_1 86acc768453e postgres:alpine "docker-entrypoint.s…" 57 seconds ago Up 17 seconds 5432/tcp gitea-postgres_db_1 ``` -Navigate to `http://localhost:80` in your web browser to access the installed +Navigate to `http://localhost:3000` in your web browser to access the installed Gitea service. ![page](output.jpg) diff --git a/gitea-postgres/docker-compose.yaml b/gitea-postgres/docker-compose.yaml index 5d9d818..56ff0a3 100644 --- a/gitea-postgres/docker-compose.yaml +++ b/gitea-postgres/docker-compose.yaml @@ -12,9 +12,7 @@ services: volumes: - git_data:/data ports: - - 80:3000 - depends_on: - - db + - 3000:3000 db: image: postgres:alpine environment: diff --git a/nginx-flask-mongo/README.md b/nginx-flask-mongo/README.md index 12b07c0..fdb2afb 100644 --- a/nginx-flask-mongo/README.md +++ b/nginx-flask-mongo/README.md @@ -53,8 +53,8 @@ Creating nginx-flask-mongo_web_1 ... done Listing containers must show two containers running and the port mapping as below: ``` $ docker ps -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -a0f4ebe686ff nginx "/bin/bash -c 'envsu…" About a minute ago Up About a minute 0.0.0.0:8080->80/tcp nginx-flask-mongo_web_1 +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +a0f4ebe686ff nginx "/bin/bash -c 'envsu…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp nginx-flask-mongo_web_1 dba87a080821 nginx-flask-mongo_backend "./server.py" About a minute ago Up About a minute nginx-flask-mongo_backend_1 d7eea5481c77 mongo "docker-entrypoint.s…" About a minute ago Up About a minute 27017/tcp nginx-flask-mongo_mongo_1 ``` diff --git a/nginx-flask-mongo/docker-compose.yaml b/nginx-flask-mongo/docker-compose.yaml index b9cb462..f673c3d 100644 --- a/nginx-flask-mongo/docker-compose.yaml +++ b/nginx-flask-mongo/docker-compose.yaml @@ -8,15 +8,15 @@ services: - FLASK_SERVER_ADDR=backend:9091 command: /bin/bash -c "envsubst < /tmp/nginx.conf > /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'" ports: - - 8080:80 + - 80:80 depends_on: - - backend + - backend backend: build: flask environment: - - FLASK_SERVER_PORT=9091 + - FLASK_SERVER_PORT=9091 volumes: - - ./flask:/src + - ./flask:/src depends_on: - mongo mongo: diff --git a/nginx-flask-mysql/docker-compose.yaml b/nginx-flask-mysql/docker-compose.yaml index d26721f..3b406ed 100644 --- a/nginx-flask-mysql/docker-compose.yaml +++ b/nginx-flask-mysql/docker-compose.yaml @@ -5,9 +5,9 @@ services: command: '--default-authentication-plugin=mysql_native_password' restart: always secrets: - - db-password + - db-password volumes: - - db-data:/var/lib/mysql + - db-data:/var/lib/mysql networks: - backnet environment: @@ -17,17 +17,17 @@ services: build: backend restart: always secrets: - - db-password + - db-password ports: - - 5000:5000 + - 5000:5000 networks: - - backnet - - frontnet + - backnet + - frontnet proxy: build: proxy restart: always ports: - - 80:80 + - 80:80 networks: - frontnet volumes: diff --git a/nginx-golang-mysql/docker-compose.yaml b/nginx-golang-mysql/docker-compose.yaml index b2aaadf..9423a67 100644 --- a/nginx-golang-mysql/docker-compose.yaml +++ b/nginx-golang-mysql/docker-compose.yaml @@ -3,27 +3,28 @@ services: backend: build: backend secrets: - - db-password + - db-password depends_on: - - db + - db db: - environment: - MYSQL_DATABASE: example - MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db-password - image: mysql:5.7 + image: mysql:8.0.19 + command: '--default-authentication-plugin=mysql_native_password' restart: always secrets: - - db-password + - db-password volumes: - - db-data:/var/lib/mysql + - db-data:/var/lib/mysql + environment: + - MYSQL_DATABASE=example + - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db-password proxy: build: proxy ports: - - 80:80 + - 80:80 depends_on: - - backend + - backend volumes: - db-data: {} + db-data: secrets: db-password: file: db/password.txt diff --git a/nginx-golang-postgres/docker-compose.yaml b/nginx-golang-postgres/docker-compose.yaml index 0d66498..bd5dd42 100644 --- a/nginx-golang-postgres/docker-compose.yaml +++ b/nginx-golang-postgres/docker-compose.yaml @@ -3,27 +3,28 @@ services: backend: build: backend secrets: - - db-password + - db-password depends_on: - - db + - db db: - environment: - POSTGRES_DB: example - POSTGRES_PASSWORD_FILE: /run/secrets/db-password image: postgres restart: always secrets: - - db-password + - db-password volumes: - - db-data:/var/lib/postgresql/data + - db-data:/var/lib/postgresql/data + environment: + - POSTGRES_DB=example + - POSTGRES_PASSWORD_FILE=/run/secrets/db-password + proxy: build: proxy ports: - - 80:80 + - 80:80 depends_on: - - backend + - backend volumes: - db-data: {} + db-data: secrets: db-password: file: db/password.txt diff --git a/nginx-golang/README.md b/nginx-golang/README.md index 2946f1d..3fff798 100644 --- a/nginx-golang/README.md +++ b/nginx-golang/README.md @@ -21,13 +21,13 @@ services: frontend: build: frontend ports: - - 8080:80 + - 80:80 backend: build: backend ``` The compose file defines an application with two services `frontend` and `backend`. -When deploying the application, docker-compose maps port 80 of the frontend service container to port 8080 of the host as specified in the file. -Make sure port 8080 on the host is not already being in use. +When deploying the application, docker-compose maps port 80 of the frontend service container to the same port of the host as specified in the file. +Make sure port 80 on the host is not already being in use. ## Deploy with docker-compose @@ -50,14 +50,14 @@ Creating nginx-golang_frontend_1 ... done Listing containers must show two containers running and the port mapping as below: ``` $ docker ps -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -8bd5b0d78e73 nginx-golang_frontend "nginx -g 'daemon of…" 53 seconds ago Up 52 seconds 0.0.0.0:8080->80/tcp nginx-golang_frontend_1 +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +8bd5b0d78e73 nginx-golang_frontend "nginx -g 'daemon of…" 53 seconds ago Up 52 seconds 0.0.0.0:80->80/tcp nginx-golang_frontend_1 56f929c240a0 nginx-golang_backend "/usr/local/bin/back…" 53 seconds ago Up 53 seconds nginx-golang_backend_1 ``` -After the application starts, navigate to `http://localhost:8080` in your web browser or run: +After the application starts, navigate to `http://localhost:80` in your web browser or run: ``` -$ curl localhost:8080 +$ curl localhost:80 ## . ## ## ## == diff --git a/nginx-golang/docker-compose.yml b/nginx-golang/docker-compose.yml index 177c2ef..c69b486 100644 --- a/nginx-golang/docker-compose.yml +++ b/nginx-golang/docker-compose.yml @@ -1,12 +1,10 @@ - version: "3.7" services: frontend: build: frontend ports: - - 8080:80 + - 80:80 depends_on: - - backend + - backend backend: build: backend - diff --git a/prometheus-grafana/docker-compose.yml b/prometheus-grafana/docker-compose.yml index b7881e8..0978e9c 100644 --- a/prometheus-grafana/docker-compose.yml +++ b/prometheus-grafana/docker-compose.yml @@ -1,4 +1,3 @@ - version: "3.7" services: prometheus: @@ -22,4 +21,4 @@ services: volumes: - ./grafana:/etc/grafana/provisioning/datasources volumes: - prom_data: \ No newline at end of file + prom_data: diff --git a/react-express-mysql/README.md b/react-express-mysql/README.md index f35ac30..0d9f5dc 100644 --- a/react-express-mysql/README.md +++ b/react-express-mysql/README.md @@ -21,19 +21,23 @@ Project structure: services: backend: build: backend + ports: + - 80:80 + - 9229:9229 + - 9230:9230 ... db: - image: mysql:5.7 + image: mysql:8.0.19 ... frontend: build: frontend ports: - - 80:9000 + - 3000:3000 ... ``` The compose file defines an application with three services `frontend`, `backend` and `db`. -When deploying the application, docker-compose maps port 80 of the frontend service container to port 9000 of the host as specified in the file. -Make sure port 80 on the host is not already being in use. +When deploying the application, docker-compose maps port 3000 of the frontend service container to port 3000 of the host as specified in the file. +Make sure port 3000 on the host is not already being in use. ## Deploy with docker-compose @@ -56,21 +60,21 @@ Creating react-express-mysql_frontend_1 ... done Listing containers must show containers running and the port mapping as below: ``` $ docker ps -CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES -5e3ecd0289c0 nginx-golang-postgres_proxy "nginx -g 'daemon of…" 48 seconds ago Up 48 seconds 0.0.0.0:80->80/tcp nginx-golang-postgres_proxy_1 -ffa1410b1c8a nginx-golang-postgres_backend "/server" 49 seconds ago Up 48 seconds 8000/tcp nginx-golang-postgres_backend_1 -e63be7db7cbc postgres "docker-entrypoint.s…" 49 seconds ago Up 49 seconds 5432/tcp nginx-golang-postgres_db_1 +CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES +f3e1183e709e react-express-mysql_frontend "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 0.0.0.0:3000->3000/tcp react-express-mysql_frontend_1 +9422da53da76 react-express-mysql_backend "docker-entrypoint.s…" 8 minutes ago Up 8 minutes (healthy) 0.0.0.0:80->80/tcp, 0.0.0.0:9229-9230->9229-9230/tcp react-express-mysql_backend_1 +a434bce6d2be mysql:8.0.19 "docker-entrypoint.s…" 8 minutes ago Up 8 minutes 3306/tcp, 33060/tcp react-express-mysql_db_1 ``` -After the application starts, navigate to `http://localhost:80` in your web browser to get a colorful message. -``` -My New React App -``` +After the application starts, navigate to `http://localhost:3000` in your web browser. + +![page](output.jpg) + -The backend service container has the port 80 mapped to 8080 on the host. +The backend service container has the port 80 mapped to 80 on the host. ``` -$ curl localhost:8080 -Hello Docker World +$ curl localhost:80 +{"message":"Hello Docker World!"} ``` Stop and remove the containers diff --git a/react-express-mysql/docker-compose.yaml b/react-express-mysql/docker-compose.yaml index 44cde51..ec7e2c8 100644 --- a/react-express-mysql/docker-compose.yaml +++ b/react-express-mysql/docker-compose.yaml @@ -9,7 +9,7 @@ services: environment: - NODE_ENV=development ports: - - 8080:80 + - 80:80 - 9229:9229 - 9230:9230 volumes: @@ -23,10 +23,8 @@ services: depends_on: - db db: - environment: - MYSQL_DATABASE: example - MYSQL_ROOT_PASSWORD_FILE: /run/secrets/db-password image: mysql:8.0.19 + command: '--default-authentication-plugin=mysql_native_password' restart: always secrets: - db-password @@ -34,12 +32,15 @@ services: - db-data:/var/lib/mysql networks: - private + environment: + - MYSQL_DATABASE=example + - MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db-password frontend: build: context: frontend target: development ports: - - 9000:3000 + - 3000:3000 volumes: - ./frontend/src:/code/src - /code/node_modules @@ -48,11 +49,11 @@ services: depends_on: - backend networks: - public: {} - private: {} + public: + private: volumes: - back-notused: {} - db-data: {} + back-notused: + db-data: secrets: db-password: file: db/password.txt diff --git a/react-express-mysql/output.jpg b/react-express-mysql/output.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94573c9460bf5584ebf77e90a5368b0527f61e13 GIT binary patch literal 35980 zcmeEu1z26lvhKp&-6gm~Z~_GP;O-jSNpJ!Lf)iYWySoJm?jGDVcyI{%b}}A7Ngn$Gf1;_yk z04ZPuxBwP_HQ)>|g08lp949~tR4)84`0;=6D}cC+KwK7pF^EGHumfxW!yo*>cOQUg zKk0KoaP~HMSUDrSIj1mB#{v80|&e=*l006K3 zo83TV-^+pQ830fL*-Ca80Fsgcfa)bkw$8t3H!O(Zr``TTn&0jBxB!R%5a8h7|3C>6 z^alkC1qBHS1rGxQ4T}hmh=>4>fPjRIj*5hghKzuKij9hffr*8Mg@}TKi;ankj){f& zT?iNihzAl14hjkm6A1wc^S?Vib^vIw;20335MXEkI2srP8rWkOs4-vwNHwtUmiRqE zK|{iTL%@D7B>;6WP~o3T!Jxn)AfaI%=K(|z7dR>eDkzlCb$SheYm^M4ccduqKsH`= z0w99>Kz<|q1YCQ82##+6flgXdu&x`>9inFBo8Rm5d?(K5_;l)BarQ^Ex4jUps1}u2 z>jr@oeVr`W5Xw)C@^g9y_$t%v_fxII{^0qY_0Jd9A(3~2CNCM^b_eKXZd_=;EFKWG z9%l=eN|gX{5sqg3nfMnN8K#qT+|5|={V&S?DJzjO^S=oH$tpiH{!cRx@wH01v|fgKNys9yN>1>-`^6Hze8%&1$9 zDL|k6nljfoxz}v=+y06T=QHc+xS5-*@`>ZHfc&C**TrurY~MyR-uy*2xIuh?`18MH zLGLx3YBugpVi8yI={*9uS4|1VvkLo11T8ZTo7L5mQ+Vd{`i66?HhU%G>}h=nFcQeu zA5YR=o}~-@MGo)_bD}(7z7Dt1_mNm{fH0r?Ht3_O(|Tm?#jmB7KCRhgbs3lNA#J65 z67QSU&^<0vr_EO53tq?UsW*QS{41UNDl=LxC*4lpErK=JG}leloN0-t%8F)ORy=n5+Dz50-zvV=pdyvgpuRWUs^^AK@Pj7+UB)>~G_tS;WV z+C1fw_P3Gj7y1Kn3&T5)fXHe=GZ)vP3F3 z6No@l-l{r#op!ZQ^`&p&X7A)=R9xwnL|EU|i&}2K;7f`oJ^Xd3i^jaf9B0YmUN7)6wU?9~oMWBeRT-$vQ$W^Q5 zzt-`KeoO$-8fm8S?GfMsyhTv-@}Scvs`!hJzf_xV?3ylt zG8ZRgBem<{fiZYR%x=GUCKaa%)aTXRZciO&Z1#)KvAzb+U|r2M?(T-Iv0v;TAvEw4 zW&B0>uY5{zd1f;x|I}z_bw4cQ{8Giu`tqVH)-=DQt?(mzLE(LiZ`S7Gds$xStsn z22GuC(O=u~&(jZ5n}6(3Jf8aNov+(_0ZYYIL@~H?qCGs$vd;ShyR0&a<<>p7#V@^| zYRrW#ioW7wd2MLZo|E@ivH$EU$a6kZvat27ur!_?St`Dh^dt#xj48xMp%E4*&LPpw zA?Hpcwx_VkI-mX`>DRvd3(0Rc{}&SCZB)6uEZb&6EtBmT0>G8tcd~v023Y~1LUd*u z0L)~N0R+TucM1f^;^Tj`_-_prIGSm2s~0v6pV3pWm?Ee>DD@!awA$}wf>G&tR_^W; zGK$zQ)T0tsIT%;3^^)^r@G@@U0&Ch#9S4?f@*%frs#Ea6Ad$I#m88|6nssi*mE$CLm9F*9lfBY>v4GP##I1}!IzN5VAHVF|-F5VMQW zbey|$3)`A)EsdjL;1EqU-a3aR@!3gYk9Sw^kf}5@m64GWRdzg2;uf9D2oLvGRIC9W zlqEI(KPvpy(D)B+{)GP55Q4>2t0S`QhJ6CJ@*$ZOwm5)z!svSaeM{lb=~rU{xN&(5 zNxE%M)!D^}6`Wl2$^4b!#>Xayfl=Az5$T84gZNg&!e+IG*}n_>#fk+$U-(w$#i36* zgNMlI;W`x2-y_2R43gKF_Y0RNcG{;u>jHWr{KcgBSBl^7{)_OJX89xYzr#GXcT^OA zu>D6@ynN7;KPxH#_G7~W92^V+>N`0U009XG4vmS8!@;S5ih*T-hEDn%hLZIu*%Jyj zcF=wRENGtqv^!A6pP-pnX;GqOg`M1;Yx6tEtJFpwj1Qd3tTngMCwcir#ByxDhO-o@ z_%~22!DaNPj3R-7pGCie0-ld*zp-l(fPmtqs=3V%^j+c~fZ-2dqY_|4f2iuAsyC%x zs|o`2^LNaa#q&j%MJ+|;zkxqh|M$xNMUj}1X~8LNX02o$yR=1$mKD~?L2kHD&-rV5 z9%RFw@)(<|-e9bcW+PY5S%+@*@LcLfNOto!ZTBK!H2rQi{Z~F1F=*QrOLcPhX=Y+G zOT_9E=~Z9w{T9OJSc@0m2pq~*p_jcw${fW=?Q$12yj(1~65Jqr5PwVlk^x1hg5UAe z#URAYU!ck(!1z3CtB*c`v`ojZ(GmXtd06xa#7j(pOhIz@0o*#QzTu&ZpwzUb_mXtU zit$LW5_(_L&fz|YOKZ?0@<6C*T6@vQ2x+=%dE*wENx0#cdr~)Rlr7s&qta896_>m;BcmJ>Ho8i( zOB%YDDSqhNt&O!mWhj|-X?H(sJIj(QsHx=Ta7#HB)=(!Gj)6ynq<4nK*hY>&U;Tu@ zOUI0rip~1-M{ksZl6ovSq7Ulk zwPg-!2OUcs#~%_?mXC2xBg5J5Tyxi)TK7{h0&3nauh3O}8uXDl*jv`z(rAoNy3VUEht? zVI?VjNWOtKIzA&Y^*g2(X@zV<{?Sv`S;mt)c!caiiFR<9yx~h}wgT)MPNRU+?xh_D z_UNNPFhV|S8B4jjt(9oK23ER;5jXhwm9@_A{pL=b5=9b+DZPYs4_U23rqNV9CX|^z^A^b&)XD>@wT2Kg8YtS9 ziOpzdz65oeD&1O$r!025;Aj$iC{>(Pp;k`A2foHm6^*m+upFWYAE1JI1T@CUgF<5o zGTpohe}rh4Q5Rzx#Ww!NDN~QsoZ5+_EzLDUFRG5k`!cnfy0=amQBhAP;cr+eXJW0%Jh`<}R#V`=CBEdFpQ;4@HgW0@n zwL=S!Nf3o}-I3NX#BY%ruNTG~{$n^fnKiT_9Lf+J`1A-S!}Fu>$4vm|9U99W6vDzjCB37KwJjDRf-m1zq=#JLscY#OUfyj zQF#?ddgfyKRVbT;;W`sNe1MqeG=`rntkoKS<|3!WQPxNR_qYCzUeE-j;4>UJiZend z@I3pjc z;@5`pvccvr7Y#Hd>o&62vEH1!f#t9

`3+FRQNo70_)Td~(StFjShO)_pgxXOmz>G;vV!M+FUmVqjrsR> zl16M{8#V$GGBm)oJy9e_o0&#|i?JRzNP=Cqb|gRXFrRkoCS)INzTO!e0!Yr(SMVo;K?`Xv!ffXiH17I%7+!Hi{(Q z=}jG=UZOLTXS0?Gmu?Ux4AH@@GSQ{I8j*_T8Tu3x*6Y4A+9Y-b`@SzH+U(BH^iY0) z8a0xHnT)7F6SEJcF?RHoY!c33%>Ac-HHUlCJ;jQnye#Tm>2e(ywKXqZXWi?1P06?Z z+o+`AT_RJU4^K$TqIH?ngsG9c%KJG!?^dZZ=+c|Y$)<+m+TM5&&(u2P0QQ&?JpC)- z`-jX?%-=@CfT?1tzGx=7ngp2nh&$MmuTgL_vlY%}UX}AyDTJS`%mrq-2K^4h`u#wA zj_;(>R&S)4ojo>PGyavX|JHg#%(o*}!X`r7+Ht`+eu1!VcB`(Jv5v>4a`6AB%z(&G zmUf`04Iwnp(*`&s1n6KC8ve(r?Dum=NHi#PGFA*BMO1P&14B$wVF%x*QJKeBPn3)* z+bLL{D=5Fo$QoZ`H-7))=>v35DG2t^v@Boc$sBr!FJYoGF=B%uC055NILA>RL$f^l z#lo#(;p@0+jSvcA8!L5GtKZGN-4zXPKLyhJStmL|End&Bi1-UKrvyIpY0A&aV$Zk^ zoBrpgwi^<{%gV-7XXOp(%eP*;iCwE#Z|LId=rWg9@)I5CI{B_`jsrvjZ=bJAWvk3S zdqGmfNjn@JFGB>Yg5_73eElxrgf0RS-_}`0_`hBb=wZ zbVWMT=Zqs9m~#h(4GDaT1NSp$@P*v=w7_H-V;;o5K1zZ$E`|iocylG3LGv_T;&L@;n zDYh#L4C2|oa2~+|OE5NGd@lpKj=(eBOl4qC<5_u_QN#T@k53f1qph?3xV?w#4!f5u zt=vo4pygRnaIlpPRi=m6lxo9VvR!(OC80NUm5ea!`k=)^d(*&3H!IxOhBRjuOJm-> zINK?}OUv~i(5RLyY*P&oHq$*DI41a!OoYM`z6PFiDh8o_iZDz5Dj`NM@KzruYBuPSSr7L$-utZ12 zKpAACZsiqge$A!GFV7ABME|g2QQCva#}{& zzDmqI`DHF}T0;KSGrM76huxe*z* z3ksG%kH1SwK|?UW2jIu$o77Pji3Si4l6(wk)L=`7{| zM$yu3rUZeJxiR#IxY*L7NM-@42ru^fZA`Y{Y;>;l*h;MkOdZyb@kDZm7*-XB#T^?d zEyMwq@Oj-iksp~|z3Jc!ECq%xKTk4X z;V)yq6FEAdk=iUBvzygPwx;Yqw11=~(edF>uG1?Edk}6WD;m#YX$4!sD5g96W4l~f z^n&ODCS)!1q>?Hz_N>S0o*K*kXYCA)=e1m*P$PsAP@XbaJsBMwP$n2ycQ5Ep9OEA{ zqnDiHEuqT|3m$quKTwPn6c$y_HEQC~?HyUzpH2=fshbxd5u#G<XQ3QYOLao}kkBN19?KcH@9MXxja z#9ywz-8-o8Tm+_o?|pW=PnXYPMowV*r)T-kKygmtE92j{QpF{KR73)9i>LB6;3;(M z^&)sEtZy2>st)let5HV5Wf0gl|B$dA7GI<;HVF=PZub7xfmTW=3D(ER)r!4xvxJs4 zfo)a+H%O7__RMNs)^Bd!tub>ZlO1XVdJLqocOU8LQe=pY+bDVj^0bi#LRb+XZML?) zWtto?cn_3?NGq3R7loo01~+PLevwhSccDkgyfoYP3HtW-jWg}63;pmZP2sx#!Ghh{ z_`trG2lLWU>SEqf-4$$Qz4>R~xsjy|{TJFyZ20u2Er3 z6FGDpSwzH{m&xD}INnS_D1PM$ww&uk>iEzHdekbhEk)ix;!@jwxQqFu7G&jEALcoF zg0SK9C7Eu1mTGUG@f=~ZG;uZ`{cG|b>hY4T_WmQ_a~znr{DtBWPHr=qF@5Y2pn$f1 zbH*um_kfVh$9Tqpd}49?5M=q3+A?_Z>~r=aC*1m+UyMkcwRKX7HC)q2+Ht*(HEnfw zp8<OZqbO`_3-vTuu0(2Gk$6){Au1+c(W2A>HyYX)4Y*v+H^(e%91= z&mPxBVhRj(8R#Q;#l5|x>sZyaWjeC6#}M4u_y{mnJrnIX>t~&tCz@GK%l6Y+%!!#C z7g3^gFoY!0clc^;Gj!ivss0E=Quh@I^rw@iu%GsJ+gh(2D)T)(AlzRtI~CS6&41To zq-(d1IqX4#DJ)X@t-z^Q!H9_oyS2@+aP$!M_|W_E5uij!HI3Hvl*6vy@F_B>Zt+vw zW_koH3%NYr+IjUJ9AKD5zY-o?;QX>#Og1Qc^o`Hy0xqnN(b3!en_dpjICgDg`Myct zUUqHbq2MI~6Xt64tYn)MRLn+!$8{eNUNNc8@KMznOk!3voU)(dp{i? zuHa}|BARgt%iZ*0vApM;V2@0x_Q_BNEy_h-oGY25?b_cgmFaP{Oxvk6$ckS4dE>I00TLs6h>*L5IH?C`=d>-sy^1oHQU0( zUjHs%8?|o?VnpMEFS2-F;isKE0#JH+yV13C!j(B+DK0}w-)_ef$SV->!46uCwiuH* z9bUQP@>Vg>6Ug7USFnFT%~ZLicTn-5@#EMv&Yl12Sh>6fBMKEB>F8AEAP@lDwwu2& zcdf}=+pUg{uO$>CJ7lg=5||*Xg?1|uLz=dk%td}bod8l35pg+1E^Lf`o~Lw!e@{qM z((i+Ro^wAR#$HhLJG~bksO3N?h3p3bXc!T&oqj#PwM3o zJq6B!=SiQCR!(+SBfLZ2@a~{i4emU;UdS7wO%@`2ag=F%E>>E!c&=j384-%3<)yJ} zoHJQq!Mj@6Qmaiyh}-H$%~O*?X}FJHi&$dcpKlCR3Spz@1Uu&^P-+ZQsv&J_Y`Vb8 z?ZLf}FGEC+;C=Saj4rguY|4M21S_1lgeaDzIS+YJ<{ikZ`hWAC0t12B*Ze9U5pIG<_$PG$Dh8ol657E3Yu;M2X zFmLxf`Qe#b6KU4#?HJsx<`hiQ-{#%3$+in^(8N#JHPFpw-6dtUqo`G;d+ZprFH85_ zuSgM5rlEdV7YKx#n3xL9k?}QGsfd{B!S?maitQ?}>TThJlN$KIDpePtjii)4=yyx0 z!s4QAFPNBDTayyqHNE_ikymn;+cII2Sh@~1#tCO`??HuSN}gg7VfQPHc2UV+XKTO#=o#J)>(DqYeZ!Fbh1~zL$!7~%?d-teW>=F#d)nh%?kgn zlh<_**L`97OHsGseVui-b!|p}_>sH`)k?MkqTfSjob3ZKfgsmo2 zPac*T%|4gO9chvrO8sNzeY}8vs{l1Esz$&H-j?GZW3M-vAea>|(}C1;AAcBxqu z!e8vCBoLi_e~ycS_|uE4Q#9uJVfB5qeHf$1Zyy0c{kwP6jjdmwZ|+=sKlA2HSms(! z$$DKil`G*X5I_PY_=N)7{My8aLl4hkRxV4}n%#{omSpDk5r{j~ii8!=zj#o5Pi^}e z(nW3^Oi%(#nVO?j;x?aX>7*a+9<)8TwH+wIu~xfme*BK>{9ATR={1#!zZj_A43Y4v z!jz0SdCtY^H{ylgREj*u@uW%7g~vAxygr+F@1i$;Oz^j!FhBPk{#Rj9K9 zPOW1NlVhVW9^Uikk-fjo5YA2397N_43@ubj%^0k3=Yx=^=lByF5P1;^0k^9k)@iCz z^bLdVr=BIlL2Q>8>nk&2=rDL362?78;%tUhDP0oy%3S0j0mZrF_Rv3^PnjoBlsK^} zQ2c6M=x7>|4kbAmWmU94Es<9j2f9`2?S|AcXic?Qy!%04@FuS*Mcd{PmylzwW#?Cg?uB=1oFo`(Mon0NY#I-69R{&gICXF1A4 zoYLHyV2yM8PuKoF16Jiq$I+=2D*X?>fL0Vzpd)3__uygSVIiTwVSfB{0}KLyL_=qX z!XRUf${L@*1g$F+4IQ1U+EJgd2`d>m_>vlBRzhP@JbkVl%_3s#-Q*rZQyli%}u$92JWA1|B^E;`jM*z$`DDDwJZwrmNdj#$~ieEq!q=TuCg`8zf zFjV8BHiY9YIqXw;$$Y%?;W* zl`IxgEtjCXXkWLoqcRzk-pZdR!m!Y=>?=Yl*0HY5+6kpu=8M2Wj;)D%hk?=FGe2iX zB}W`6x294hUf!aAL`^}%{|DEy*oJr72CEln7};ADIXmN^Na@Hi#8b!u)%kDuO6ppCD{`SIcPu^$5K^P zESqjAQs!@R65{Y2x~Ld-xUd2W%L)IkDT}PUCe40b( zE&EzcjS>R8{xs9maQN=B@6HX(4SZoOwIMz(-HoPdaUyzUH@N+bXj$tdNB-4at8x3%RyqFv z{LIE?ZEKaGD$*RX7rb??(BA}3_EKH4Zl?K-v@M)?c^Z3RUdK0EU@WyU*-0#s?CHo~ z=8G~kS3QZm?P?6f2mqQ_7-O??wD6yG28)S>giCAO2kh*9LHwf~jSVW%rB8dAX}FYc zi@Q-uXwg3>&=uXVm70z&kZ@ClhAjlEP~2k^8g^y+jk~q|tjxBj$RSNz-&Rr_%{7dA z{~BJZdxI;Mk7e}!!zU@sF-bA?xku;DfdS1x&~fO}bP~lqEN!vHx80`8Ffo~~#kgtk zM!NI|yKi}_)?kkFgdTxKhyKP_F^9;QjkK^>sfCiLFvE>b_*u~MB`R@J?&=dAa7>Jy z&sjGIG0dBNEd&-Pf3}sKhg(XSql#aO5MLKfKUXDTDL{RN%RSi9-Nq9s`V$5+y)8yi zoFu9uUap=DkGd#a>j+u*6{Gr?Fia@rkYrM(p0eiVb@DMz{8XO(?{lLva2Scx1DbrQ!y#-o7*7!ow>fChq0xdMxk%x zu2a@G>M|UcvPx`oh_j9~OIsv|$_Pq|y12@C!KBNQE_Cr7^B@h;TSPz=aVM>tmMKBy z&m8mdN~H%8+Ycp{sa^zZ4RiA~*KSCr9e#5X8pJ=*zw}THv!T1?Q7+|CK9+lyRWPTB z+GLRG{2p+MZhuNsG)b8M6(_4?uwmUfXqw*%nPVQ`9o5Eo?h%l^%gpbliGar<)3N(3 z>nWAwT^X8)K;PFKiZocCT3s&e+|3_|2m8w4{-W;#+@Icx5-=5VCl}Jr{q22rl2}?qgG!kOZJ~Q?Q>he>NOHw%H>;i~{)N-+ z3@O!&M_{S_A?{Q$ z5Baf>`^_$Z5bFMJWQ0M>o3ntF9@->kA{7*8GPAql@jqEq4uh_P zJilDvY3LU0=aeF#V~gS{1S)@LXmm$k60R82(^30{M$%mk^USzS8B2K$LXz<`ZG|o* z$9<*)XC6u>dNA%xLKSVI!S{iynp|ijjx~ZY7xT)PqtX8oVg&9>$U?veFW7Zc^D1s4 zT6lzB)A7Dm`-6{ZV~jl6|FCOsvU?pHD9-y449(A)754VeLzRhJBH}Is*-iosU#Pl1 zO-K1i+>$GFJxQ~BK4;?EdKQ}WBq)Aa-(qSM`HA?uP;JT=iH5xRXLrc`$)K+rgpo)l zB#U0QXu7$bi6ehybe*97=&ds`F&Xx?M8jUuHS7emGME0SRT{!PMYgNia|k40eHxX| zQB43_+mgQ*jxn$5eFWq=gOrjzaOcfX`}IpqE15odWhBKFGdLzRD~O%&7T<~qV0R0G z;Zvh(Ys(;IeNk6R#z|)R>Bl5z*}mC_u@fd24%NwP;sn)!IW76DP861L?lPnRp%*H? zuMD^1@}F4sycJ^zO6oV%TobY2@mgXP7T+e&OJfrruQheoronsFFDYKE`Yw-vDpopH zjG;06*6`taFa)Kr+sw=|9YN{~wlmb=Tnk!H0!dsDi^A<@-Y;_mY!(7|2Wtbd(1`;ex7wBB3pqT&tN_v}yO z;D!btK!OYqt-6 z&LE%kO-d3UDq?lCAI@a9a663x1`RDVGDu~rc+^9H;)BJ2`qRO0`BABgA z&A~h>N;!q#7zI_rL3xpW=Fkff^QlhI4%QmzeZu&QP{s3oP^0C@#i! zXbo-fN?zqY(Hwp3(e*?X8Rl%W==E}#gIy>8kr zK|J^zJt|Nw-XqZmrHIBWc*`IyN3LP5JMaO#5$9Z^L*7r*K3^=}=P+bpN%DcTgK^XJ zGJrCq@nlY2T;sh|BYFqQP*n_M!@3Qi&PMrkJB%h0B8Dxj|F}+RDLPLqKh_5=wx%4y z3bVJkhxYcK9$kuyR72=nJi5ssv0MiHbWrS#WA6!v+HeW6QQQH{)77KXnQ(HC`mLc; z^u2j-X>dPAucA^TC0Xc>!RB&=f<`OkXAcO5FT-i7!Oep8L%J8#4;)y@l%4JBsuV!nfd(Wry2uMoNN{Me$9ByD$P*Sq(QwH}e#Yxqf`C}WD(Kw#x z@X`BkCbthY#X5)vEwb;_=)6Z)j%Jh}tdW+}rUZx5`KBCG#BCE8$Lbn^@^WhZ0p3|O z=W`yStv2d5t1`Yx?v;kOv|+4UEr&z2>cBvmyNk>7Mt*p*0uN#Vn*KV~TX?HqZCS)8{`Z{t6#1!6Z8_Ddp?qnF4I39^-{88C(#1#2ni3BH}0 z#;Z7J!;32H{KA1+SiKiHi*f1nTH!nIkI4Jt=)3E{T-XN+Cx22>? zzh!X(0}t=Igag|dbmJ2Fj`E%Ne-ip_CZnbytfK~r28B(dnB z&~yD|7LVc83@$3II*l15A?|@BwlDqA5z^d_M}5biARTPDqFh_t8jT#lMJbjNEc7AF zgB2CAxN}waM|aR&Qavm_)KcQ#Pv9pRsrwbk(yKXiS;%l~1+ze#55qVyl(abn=|w-0NDF(tII?0nu#>RKyXICvGT*&Y+;Zm=E3*gDl5uS7}J zK&ttSpfg0V+3%&i=@aBk=>e7u2Ge-UZm*XN_@f%tAr$5x5Db_cX{qU6h7oQk%`#c* zD2YpJpy4|v9c~X}IEg1RZ08c$Jg;yy$tpAI3#vFG5Qq5o8glLVRBUCK9%IO>VqA^| zS9YCbaEFdGlhoP-Hbpja(b3Zj;n^-JZ4?F4nCt7`1I6`*yx;@4P&qy`41>e+qfZ2RNrqh!jcg}&HZKBLui zjy8GIReVq;+vfT}Vt8INu{s?rvYt^ic^*bJc+IP%jYj8$#KSZd07Wde8%9LW$Lzac zWHey(0cs7JKFLv??mioC6H+fnhR^XB{4>RiF$rBT=n$1Um?~e(X z`7F3M$KI(7+lfa}Rl`$TTKZEjM4|X~P_S%s@Ws0>w0td}+wf=e zxOAtC*aS(ILHjSQ9ZgCE$mnUAiQ_)_#uG-?HRxAQ>j{I(pi{VwMu(*|_MhTpVg zVs|Bj>s>&YWh1XZ6zPI88^&Bt3VTr~TKV##O%VJ2xsd{-f~F43X59ee zUon&LkSBHoi)_t2N@kP3pq zx7F0cp5ZVL#T7Q#+$x%s%!0+lpC(9=0$EvNDz_^)N+s7x9CHnKNWG|xF21F#A;w5; zVo;8lRo98XWZHXdv$z?m(P4dtiJ$Fd3EPW7$tNa_@K*DJIfgGCB##FQvTcY}Hk`ZK z&Z~x1;rO+kH+3rQFc$>lGOJQ&eojjqbsN=$SOgoH#g^MDI-eySKW`?ZP3Lj59C}%4 z08a2#H+~9o2ZW-MQ9%!ulfzl_m>w`untBCZ6P+}9XBsgNZ_kv{6mE?JUCWW8OQL$A z9-Q`05*MPTYjOlS4AY)W+xUojhC!H=Zx8c^ zKLXYt+PkDlB;Ad_jTQ1oebU5GWUk?0S;n^Ux0@5MaDx}d{5aeclH?#uPm^xC-Ta5S z|1(Ga`%B+{q7*r57|tdisEcR1*{b`m_y2wyP!4HiBKS$x4f158kqY{cQvFiB7y;?+5xs$4QgvY zE=nc$zg7F2K0mei#jR{=ZB{m{Hdn1vvepy$lR}{;iuaUuEjub~)cDt*NsePM;4+ub zcnnvMZKEqZ5=QJtGCshOlUcGbsfiNYJOUqMFrY6C7n=lj)?>{FF7jCtFdCU~hm|lTL1XO&9^w55 z?vL!0{aG8vU+`k_>aJ9p5_%Ns#BAdn{bQfynqEBM-C>uJWTY@^0JE zuG#0E8n^ibo4UnOEmHOyS95sUZd6Maaf)fK8MQNeTHSRbyhjpJkc%oD_U{T@lflr( zMtbMO1)Gl^;DtWjgRcc}QTt$FN3_y!_gYpOW>^tFOH|=TegtYw0dC@91Af0RQVY3~ zUk-L*OI<8=UF-C+LlsVH$*#)%qa@$u`bYem`75^prk(t4M0x*ARpF65L*UHl_)t*=59gdK8>%+WmXr}aXS z9Sgmf-*0#qBE?T!3i`Zx&bm{6tyGIG(00D7#B<9lJZ{9VzxR$x?eLnwn)neo(F?mS z2=>}pVA9gv&6Mp{Gi>~ro=e;_O>GQsAUwO(Jjo?Kbi>V#d2M>+MAtpspY^5xnnEsR zl56K+d@&G1c*V{(?n!!e&hxR*Dw4@_HPW0gw@ABB3f=2{Ng>Z#Xy4>i82jGI16O#F z?w_*NiQ(oOtDz61{W}n7S+b=$Ha=D##nsa`?y;LJ&W)&W4#^lFl^i_0;crp_dFp)( zJT$qI5MS`Q#rDhS*DWNG;D$b8<~A)vCjM_|-cpU4GTa{1`{GJ&FIYkwe20Hk6I+H+uJWQ|Mj9@Ck~!DusP!x7Mo{QblPk=cA>jnM?p4F5 zzpQV1m9Hk+u!A|=WoYeH9xnF?xWSypLuKtD_2vhk2<)Q^JPCM`37C`R4u@}mkg7PdkZaxLP}?UVK}HM{EjW&g%Q|K$|(;IE84M5TW0w6kxK zRWox5fNHprAV{j-VoODu*yEIy1{9@4KkL_@6j{?PO|E!lK~|2o;e5(1*hymPd!<@j zaZ}=n6B9rgo_de(2XLW_=8VeBG1uu9t|gSGF_0Zev|VW6PIFnCs~*zpp(d6q$S16^ zNnjOYtXzq@nk47mNPUlnfNydb>_MK(F&u4d?t7Urh3d$`-|xyp~ML zXy`o6c-7KT)!|oVY!hhY9veIcZAkBsM?m0>mpW{MH|VQra&S@3{>jc+lIWn=eF1EG z&~xK)B&@}(ahrKg-RofcAKa<&D0p8%Y{x>l@LXs$!8{f0s0k*eluX}=G?R8pN~#*x zN3;bXq!B`QEIx_^LZN!03g{0QP{n_fBOC6TNtgQGnOS@h_^pYzXiY*jD&xe6HuRk< z307+IU}hqS_6%1tp>Rndi{oBJ8?Oj_uFh^?_CZ>Le~9zG0|Y5J_@2+%cU*jBhrR#I ze$}?u%F+=L43RJ+SQ}DJSzUkiW2~S)?a*f5g}73x0v`V7Zr6`7;ceE@M#V=;`xHKVF(=vqINg_aHJlJQYq&LYI5ffTc^xE>@*X#f0y1un0y z7?zcqke?jXe2F)ac%sG?*O}L!>V1>NE^;zI4>Bx(v%pb*dY#k$a{ldlTzp1fq8%Db z8G#(X^+0rzT;f%pxyANmi@aqgZnS_h5&w<>?7J+BLzy_*^>_vm?(E%bjH2MZYo2-HOT)Tj}DARLH_~QvFh_I9zd4?4E5bWJ= zDDh6~7B;i$jB5uqKS;x`^8UpExDs}VK59X4WdjBK8O7hhBQTHN&GZFIQ*_gOY(tg; zal^|BRlI5>Ooo3qfRjcl(?L8vC5|E(iW|@0i!39^be_@hE>X5Q{{*@1eJm38$I<-l z_f`=J*U0u8K3x-okg`wbNPM3`cW2^WJOV4AZ~~nGjbzL4n6WdkA8Jz4_K8_oWj=@O zLcBz_;ZcVD0-2n35+7?$23M|!--Ctg(KZYJ#+si_-)5(s5PS)a+R{Aa6|W5eHty0u z278xKmA}bsCQlUR$pL>s#|a|CPGT*O^;^>591N8^vIrKIL9Er(-4q-EEaWuuo z$qrNt9dPDV{nQ@pn*iz6!tNoY&_<=tU^?7#{%CF~OBN{ttw7C?E`7%ke*UMOVG^x4^i%8Q* z!eTiB#oS#8D@HsOp_f(h6|TYH_=B%hJlTZ}5RxfP2}!9n zBn@75WQI4Np(awqYUf~}j9x0SF_7&TL$JEjTd-|;%6kB9n@lrbRs*%16%aDq8 z`1<(Y+WQWurk3vClaPdj8ba>@5)4QQy$T`J(4LXUK=A`EgeZ4~2LWWb?0jhdu_hCs-6&DW>zMiQ!fbrW@YxrWbX9(Ap!09v6E2r>aG4 zrK?e}8GdU52b0+pR;lQ`MzU49VNSxVQ%-$T00U6sIxD|8zQkGorDf{C=oTZle+%R* z?rgzBnER@&y0|iLvy?8p+GWNR)SuK-!s&BX0YbZQhPlL2F0W&Pci!~I`K2@t{|!7m zg=08z9-RGb-{tE0{+&6Jt+uT>^jkswxDcVl=6G(S4z*l38}*8OJf5!7x$IbJp^?}Z zIbP&zNEhAY{ycd0o{yR8afR{^A*vMoEoDY4bN70;%;NDYuBf$C-oE=Qwn1@AzAT?R z-=bnyayo7ZGc~&E8Oc>Hzw3kH?K>jK3`g6#-FWZ1nB6dXRrU3o5+MegC7C|DIW||IC|SYph@ zHi{&b!;iW9*HF3@Wso9Aqn5vf!bqB2zV~4v`LCglNH;Q{QiA=puCUg`{_MJ+lz_?p zNmnFHejN7qBJEfCse}6zj(ov?50x!B^51~Mi2T&M{nI~4^#`0kmFf>7{qKazsmZh}nL=lPQn z{Kut#Dg1AN!kWxuGLAHIM8MGE+j!2G{k zr3kQap=6adc8@!+A<^^e1pKed6#HD-NI*}N4IWDrK_>pKfca!C_$uHKrG?@S{E5Q=lAo^}IuL-WrlD+KorARE!>B5ACF{B7c^qmrS5T84@4Ygch*^_coIB8gsvRDrZeEdTa>n2E~EQ z0dB2W5zn>8)s@PK-4VU(XP7=`v}oupFA>&`AC_5LlB%bCpuyp+_XS46Xq$M3BuR}J zhV%5F%}PRoIlLH?YPNcq=4xmb!RNIJu^i>Lk%pG{Flp~!X@1Iu#WfF<9X;=CuAjQP9JRn;+RbWW$` zGSU8u(}wQ+$xN%_GYMgjXURO@0dxsa$nf!Q*TSndme+k2=wx-u5{h8Nbc|lx|Go)F z8Qu)tt7S1CkSDNPE&2SL@Vm5Utd_^eHrZy3g02-1rnrYYaLX|Y4RnLDNVhZY!BH3V zPBND4^?J?$JlSiD4o9CLZwriAzfO-CN-V5@w>64~#odXpOs}+)3wX-Lg75v}sS7M- z9H!}A_M6k}$>QMf$#}kvTaJ!>vcg(EL)EkyeMwpW#^KDAb&=GqoJ`d#o0&UwwKxV> zwE?;92-lAH?h?|^IKMI9XNb!ns_+SO<#O<(8k9L;j)qeWOp0p?6z&uqK9m!pLoHCm zZw94=I3}`Pz1+-uN_~&zM)Bl}%-ALOnSyY9Sxo!Qf%*6L1!=ueUx;pa=jzl--Le6> z<=`EeRLdoZ=ZaJ#I!l-Gw&Il8=Q0ry2%c$O`!v(_Yvo$1XMXXxlC9ID8dKCzCJ7%1 zi%Yd<;k&ZCrWdA2q< z=s|Or`)BQaJ{%#h4KB&2sx^*8Nu5n$3)p$i2Cz8S#}Sg1D4Gcyq7g-;gbJNN7Xl6) z^n!`ej+N5Yast@lhi@VpAYm*;m?Xp+g?*&KHKOWxXROywWDzWy3~t0;|C_Qd68XXx0>qMxqwZGo|IFke^^7bz`Y2hLPkFh?gf)_3-hIJ@Z#XdGd$GwZ0<{YD1vH`(#|ch` zYuzE&BY?v z{fBZf3C(b#`NrCz{+6pTG-SnWM?Br^kOn5b!O3rs8tp|mXv*^u+;Hf;DgG?vOa7xd z`l~byo=Z;iJCF%B(vN!==+d`Fz8u6?{F;@@p&RBe67lMMBfFAf%uLW0Tx#Y*_LOR| z1@}Dt#r-v!kw+i5n$m}^Q+wqqG>vq{bl+ji zxvm%ZB=An|<%My<2!RXf?nvpL&QIafi-1Dtenhp`$mnj3CQS{34pS7-(0KG3?SrdM zgd+F*XD6>*C5Z5Zuo$e&Xc)U3%y4^|KbKtUP`D`<{WxRq;_T4|?&p5Zqcp&`-H(6X znnZy&`9wLTK1SoerHKYA_~S7CNg96h9Rcf&uw&DZzuC_X*s}VI%{|h zB0`}nxDX9AX=RSOv*KBcsWp~^ZX3p_@=>~SShysCrw2|~ik1EjOfjLB6)H9qO9eH=24{HvMMI&5UC4!QbR9=7D znNtLpNWWu9cMgYsf%0mPCbI_>pI!0*)m;dFA(V-P!F!hI>7rn4 zL;py-^%;n}E&vCb70;qa4`&jNA?&?EBl@%g*tXBFEJr;DY36smSWTbXtL(_wyfG`5 zzx#S`Huh5-Je;LRS}>6=(XS8M)uc|fhzG&~pEG3|brk^bWJB&vIQiqMOua1o~yGc&7XFoPOU=;p3`fbvWWNJc3@r z{4yu<;2QaMZ*&Y4l{)j-1WI1yI0xoN8a@|+BfOF9BKWjgGZ)l`;a#r6^G*uLDXAx) zgFn+l7fK)plW%TpRJShAh^bH7`ozkgLtxHSeQ3~4?dLlZ5C?(jZES|-P(v1eX*af} zAAg{Xu{+UOswZOnZf&o-MjS|H0I$Y>^l@7NGvw{)euEItfck{Z1IF#|eg|eRtbmdS z)`DU9LMHUR+1Qi)&M8|Tm5SDXIrcf1r|X5aJRR?y)fEt7)hS+J|D_>u^deYx^+^f2 zt;sx2M)b}pm%4@!J?r901m@Jxz^eV(&#_eCKw!JJKLEwyZhOEB@p`~8jk9*NhN$CA zT5^ggdRu!0gh=ICAG6<5n`HxdcGpB~8e^La(o1$V=h<9N)8gT({iOS#m-g|iw=#L^ z)m}o`eO0{W(h%o;7z6xrw0CJyMn6)B{irkIl>op9>`xueX&yTA8d*g!TRw=b>s$uy z%^+tmE?7fxxvPD!+xeRaL-K+V$li;+4oA8XLrB!@k66_d(dp&oHm`zF-*YAVnsC&9 zb}@G04P*1vH`c6C3GTDi0H5}{Dx_;n6~Bgs;?r)4RzI#bA5Q-OX=sz@2;sZ~DHt~; zL7BPe>633ES24zQnBi=Ox3kUPUB`&rp(^SKiD2_av@t&=tffB3e<*AJ!=Q&i_TP#A z$)GR&VbLSe&igj~+CL2XACXm%n0`08f)P&z-qinD;XCl*zpCxQoogY;m`VlWnkAuf zUL&6T-+{LYD_@BX4=y~JW#bF_d~kjRU$<}4=dHDW^1FRr0zAH_wLgEBLkT@4o;s)Q zRKk-0T^vc0@)&CE>gx?j1XMw2`jJbZqV^O>G~a>+-XIkaybGOcTWY-fMCDTdNBdbH z{)cYiwSG!z|96toB^R$&G(XCV$R4wDcxQ5mbh1Wj3;P>sR0z*y3Jz{Ua=P>QA;*#& zdi&$+V%d&;G8P?h6TWZE`B{3a&v*Vu5L?TV8JZ6QGZyC&yf^PXwdcR|W`WE9UH`iN z(dVy1!;Tu!6j=x2QcbUe;~R1$N(Z`Xdw)E!qoSoXwi$_+u}PQxajQL zus3`cAn3Iqy~w(7lDNq_D<=X-^9Cb^KF!XakPYH$PLiWY1X_RYMf6&g;gPQwG#Nq;t$_h@ z9D&d7C6%Fu{FMwK$q*);P?7xj47ad~K%P2F18(+}obxT*-{wR7vkq?+;QEM<&hB_i zH?R)#``YlDSKz4>Dl0N?@C!cPK%^PWjrwB1EMofj{)4YQ%kwtC)=<=KvcG4;w^ZNq zb-_$+da5e9^p`%hUY+@qV+)LS#Awfrh6K~0F16^F0Sbb*WjIeFfb3W}sD0g%HWO8r ze3VHXTF!gz{e0|<9(O?0FyihtuU?!Y%v6%zx@83F!fHOWcGP~xuu?}Bt!h?uKo{tsWK@Ru5I^VZ47y2>rA)!6bhyvw)%82(6#SIxvQ4j%{}J*{+Dd zm#+?0`S&WqUP_CNM`K;D9Sn)_p_i~i8$P-%Tpgo!k-3Tx&Vp`0l7XP@d1e1Bz)gfH zTVO2fJ>~q%cJ+{$tO;2F9#U{@WtLWkrVn>!G!pfMsOj)N5S-`Mt*zY-z*`_0TF*p& zF)PA=-E?jbX{CU>M7b;BIs1;#Zw49|=$Cq?||d_hx&vcDtxg9-wnxG=PwBu2~O?lFCVNV-}L&NbS+BwBx~KH&&HK0 z=S{-e?|5d-xmfou&wr|p)=$~(X_7V^i=LP&u(E-)gXTX40D(5fj)mAaYF6TCafjOr zTmeWUDIKrS2Nhvy|9oJ(ry`x{W@(u~BWvSv_-6Nqy^@^QjmKdNj|9I1Ll$&~3v?0e zQ>r2?O6#6eFc*BS7=u0RYuI%uBf$lrACKTJrHl!2_Qx? zr5{{X4OD?#>Ysi;j2B_&4xa5jIR2o!A>+h~OYhTc`&);4j=g8`n!3>l|2T6gI!WQ? zleNqj;!&*E$%Lj?^Ch|AIj4uxToluOdC?;^x0r&bYu?Va2JyFX)Ckux66dwNZ-%E+ zd_;%Ne3nZ@oqEyy8lqirsCWibQmr0J?nUl8Eg%J6lA#wVf;}fykrLPG2VJ&us%<*H z1M-xizED}}tstM`AY`EIsTD~xwkTxE5?D2xan^P^<`IzvOx|o&BlckxBF`Kiga2+y z+^u3uqPq(_1ra4=UL%UvO?vCo!D_N5ABHjdz%;C9!OVB3Zoa6F9CW12a1RvGvhue# zG|NX#o()PZ%B=2fYp*;#G{;V|>t1l9D?l6|=8uSIofwliDu+4O@i7_%JX=7KFE{!) zT_A7k;3ONkeA(YL#8whOb)e5r0c-J=iTUMuL}0IV24T#IlZ)Yvc4(>|r{dr{K}oty z9v6%yKG3tVZ^}E;gRDz!IJmA7n~8AeJtRH&vLZ@&Zr_9Cfjd5fspt5B6WGzLHslT266q2JHpUkp;5rGrPk#GV zRkcT4cb1dV9Hl|JRJLG6s7Bt!S44+zH<_E`wu{|V;)P{6Ryv;C!9fqm+~y3vCIU!i zN@*3JFRg0eWT0d-u@EuQP^g+I@k-5ST<0TJISphFJev+=Uprjq#{~_#(mmr=fny`U zN_?&oVUKlPvW^~bD@Z4U1|b^$4^-_r#W)V@plp>xvyq|&92o?_?%u@}P z`yi@@WJ!qsgURs2iZIag8ZS3U<5T<(fBo41<=_uj`27uEAp4uc{%xP!zq`Vh23R=% zFiIQO3EkuP`L%!e!Xw?^4omJ$o_OlBZFa%?nh``a3nvd~zW;G{b5#j}FX*V(+8UT` z+n%`Qc?`?_#ZEZl<*L*9_Zgi5pMSkl(AtzK^XWIHUw&M*`Vub5{>Ab4Z2JJ*=c+rW z9{yIXZF`@W6{m(wn)(CeK5vN=L&ZNa52AIh9)5cL`n5_u#!|et-!pRuBp7(M?;UyM z$Psz{CrAG&&ab#XH~p(v|0?u;3wac*F}S=}Cauy`b6)~)YGR6r^g?32;v9nQk@4Q7 z4n`!8*xt@?jZdsYJa5_vmq8^U1ui11_$s6&DL%zE5Q&NP^SJP#c(jfQ>arIC*DD^= zniPJcmx;*EesH)0B?Cz+d!Wl|J&BQH%PbYIRG(;Fj)jN#Db$%+dfL}`ds_BA6P@kM z1}X;y+I$&gAItFMBm-tO!^^d(JK5lmAjt8d!xQa~3Pt{NMS(xIEjJ0rH<|MDOC8n0^IVY@x8Ym<#PrZy`3)PELJ`EMVao0YSK zqZej)y>e9x1dtwULXJ{ti^VwMigKMqeZS_U(Uf=A5vzyI7F76Kd);+6C%!g?eGz+` zsZ?ZHrYOd>)~-wpm2|2>3qJQhogJ&VGMRO(m*rZ*BhRhbqW&~+p4kf(gR;6_{R*D= z65#~J?!f&8+ha#|#N&_8QBO>fT6lPLl`A71Uh_S|XL>WSpx9%#5S^jdFziKEAF&IM z&_c02t~Lu$J((=Qv`Yryol3nP`8MFjx`O%BVMn8ZzJWJFg{iq&6p05$ zUx<1v?D$l%J49{0s`EW3fC_+#s@uy^rseLpaB8nzwzz?lgD&VmWU4&zy^U9f44#tb{t%l zbf6O8oWG*WjBG7YD=~6xHeC!jI{adT<=Y~*pn&&bS^Q?f+o8Sh7<>rG7I$u+6yF`78UNMQ&eYNn?j|5c372)aFY2=O~kub(2^a zW$B7|Hc9pItp~MkYufv9Kc0%UtJ*cFYf7*#gw!5cQ$Jc{y>T8z-47v_J#b#=qlWBj zj<3F*MDOWptG2FW-7UJ67)MR{IIqC^x7&_+PzQGnVRE>~FB4T;vzZmQwK%c_`}kDW zU_<X+xfmv5=iBi2@fvUjgA{SvzI>w2Z~PGF71f zKCmcl746?5I-O6~W3((ls+cHU;LM#K{zdv>=;ocy&`RluERfZ#`t3BU740}Bl&;Oa z9dQey%aPd+f^2Qw24>8Zf&S9LHekwaKV;#LaH2E z$_>0;7F_Mbhz!FVmNQM)JehQTL*R=UC(|id}O08eztd>*FQ*#2Pt9 zlg3FI6;j%pJu(ds(`IDX;WtZ|(lYZp=D6*mq35C|sRh^NO^6jP{_*&mfN`MEgz*jB zM6avwft_?m$y|@X7F=SF&ACl&ah~EeQ!B4lUNQJ9;~bDg{<9m&MH11GY;L`*!WVBq zNW$t@Q9H*eVqk9c7Vl$kYwOC?YjKc*KH39gz8l|0hd9rBMo7hssuZU0*%*)83)ddqryXyWy{(V z&bBR(EveKnrpu_-^FoE2g|}qh6;%12Ho3iV{Tibei{0+w35FNgEcRUPMN*dM{pFOc zoo_!Hv-fP_i7ww_kw+ccOHg5Z$|N%HC>>YlYHT3Rd)hX}7LZqZUM-zN zG_**2UHsXQf&yO&mN;~R8kYD4r^SIhY0dRSOX6u8nTox`t^NqU)cpbHoE7J(HJorh zWQzoIRlpzLZ16b6mn6bH>V*e2s&~I-k60xctf={#hLxNQS1hSD4`*l~-eA&Ok{IJS zxM2~-ts{Ik%ubY^3YF0nE@Vy+$*t7Flt3Ssj47iG_oGjP1FbIE=@k`z6~4a;d3Zuz zyk5OZvO#zm$9g&yQ>yNnhwyvr^O&dN4tUnZrmdK6roH@LzpYTv1fGR)Kcbrac}c%x zZzb;~(={4;W?9_M+vvETkr??4w%z(e^V>sQUA-UTP^Vsw(4>>NLd}GH_54$VE>aF- z`q^ZK5-a46l`L=>Ip-GMY%69Tym165Ej4HFa5;f#wF13~h)(X4V> z<$p9MHbX4c4>>W`rSW!LL~-L|yXM8`E?<5S3~BGRDp#nGB)FIz?q-u2r?z=M;;&v| z0-LFT{0lFrTp3@iW#ppO-WUwXHqYC+H)hJfLK~FnZN+~sg-@V|!a0cM4}7E958BJq z2DMXyf`R)W49P=UPr@cfS-cUxEwyX`(W@P(FnixASe(nD`HP(bTS&9chxJkF8=~Ir zWIyFOHzg0Y{q;KnN|w&sn=5bzbgC1Qvva(aDO+|SS5trgKc6RKlAmoY(DCrtZD$aB zt}1v6X=ddj_<-0eK}#iu$PeG0OKuaEYS&lvhKr{?K19Uul9dqo7Ddp3BR>0^GoW$p zkh~7*Fx1h;2!vzq!kkCU)z{>& zttoO&;TXp&%OEtYpi*fWV^kaOq8rp>2@~R5v+1pk>1nj+5gkP}uBcf?be4g);;}0z zW~U~$=xGid%2mc}vMuxeho%j46<%ztfT*9mTGiMhov#eoiLIuqInber$M8~D8a-1} zUf+H7np2vC21FbtMaI5W*~2R(>@^xBs}Sxd53_j*b`h{=liBQ!e)mRi#wo^%Kjonc zWMB_Ej%KsmiaQq9544|jvOR@IKW&sGK#nU}Cuc377*%|T%wEI&PB%pSEv~sTJpuHw-Bk>Z z4COYZ*P{I!p@%Qfyz){k=6%ajYJK{rI#7$IdYG2jKShQf1v-|~1fyzg@rQ}%@1e@p%p?2T&4YHC)z6+yzI z900DPX-{u4@TMxeq}*0*W<`r#OhYG&KqgKCV(;kkT_cjtyLR2s`um zvJxfWTsc?PhL5dL_~0l!_K_7^K97ynf|#fMuzG70Y3)cqQrFniH!{&J49sBSXyfAF zmO%krC?uu@q#;_KQP$^)aqD!W$)VG-m(GZ`6b3pB;?oYsI%mJljl)ArhzXJL16kpg zR_NEvyoG(v`QlP{r7TPZtsdVO_;}R{dx*EdtcE6Vzn*-9iOqB#~e~zA>94^az@B?53>Dr3uaRJD1P^B`#vX88Dg#FwIM;jX# zS$W3o6er#io>QiRPO&hDS34%rCBUC1HB3pt*0^%qJ&Gpoh+g+n!f_(YB$mi3bTDW= zYWT^eAc!a$F+``rsHox-2wref$F@ie%rUDcqKqEEL~f+K3CNbgkjV(pdvAK;YM@M& z6yfGsM68SX4vdF?@=}g#yGOJfM578}(5qB!ML|H&vWhM>-FI#CW$U1PRwa2kT7!Bv}V6>>Tt1b5-cErJ+S_mW7q9uX5TNMfKI z4X^BbX9)Lzt&7OWA+EQ38M}(}NHMf>nBI1EuoRJ#JLS!)8YiBL1|jaw#!H)d_}gO| z_s-6C%%uMFn0S&?TZ*LG=MyV34j5&d${kpCxyUJ^Lc6z!>4-~mAz(4x-;TSdGo=i3 z8Qy2Q`1WGNs%iKXDK7c2(98&9hrB+ev#c9#KSUzKd~YlE6|;Jtb|o0;Lu^&Gi%t7( zNkQbzoVXqui&E_`s;^gDg+Easn6?#kDnGb!SLSs8hJUy2HzhWwj+`_0_w^#5C*4Iz}Fhe9fr*~=A?IC9F7+wO$vzUAil3S(-b23xXlsL_=a z`EZURe)Hh?o1ug=Xm406XQjeP)}i}~=LR7akk}LK$`hA_T%D^d<8>pBFO-gQpY!EP zeQz?Fr1?;T|8}#cHM~9+xmMaNK3y$%r4@}0