From 2104570889edc43365b120db4d1c6b88af4f97b1 Mon Sep 17 00:00:00 2001 From: softsimon Date: Tue, 23 Aug 2022 17:05:23 +0400 Subject: [PATCH 01/44] Tooling: Eslint force triple equals --- backend/.eslintrc | 3 ++- frontend/.eslintrc | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/backend/.eslintrc b/backend/.eslintrc index 3029ebab6..1b2889e50 100644 --- a/backend/.eslintrc +++ b/backend/.eslintrc @@ -31,6 +31,7 @@ "prefer-const": 1, "prefer-rest-params": 1, "quotes": [1, "single", { "allowTemplateLiterals": true }], - "semi": 1 + "semi": 1, + "eqeqeq": 1 } } diff --git a/frontend/.eslintrc b/frontend/.eslintrc index 4dbcf98d9..9347a2050 100644 --- a/frontend/.eslintrc +++ b/frontend/.eslintrc @@ -32,6 +32,7 @@ "prefer-const": 1, "prefer-rest-params": 1, "quotes": [1, "single", { "allowTemplateLiterals": true }], - "semi": 1 + "semi": 1, + "eqeqeq": 1 } } From f489ec6ceed5df4303ecca49e44d012fdfe015ec Mon Sep 17 00:00:00 2001 From: Stephan Oeste Date: Tue, 30 Aug 2022 15:40:13 +0200 Subject: [PATCH 02/44] Remove the mempool restart script in prod install --- production/install | 1 - production/mempool-restart-all | 8 -------- 2 files changed, 9 deletions(-) delete mode 100755 production/mempool-restart-all diff --git a/production/install b/production/install index 4eac1817b..40f89389f 100755 --- a/production/install +++ b/production/install @@ -1009,7 +1009,6 @@ osSudo "${MEMPOOL_USER}" git clone --branch "${MEMPOOL_REPO_BRANCH}" "${MEMPOOL_ osSudo "${MEMPOOL_USER}" ln -s mempool/production/mempool-build-all upgrade osSudo "${MEMPOOL_USER}" ln -s mempool/production/mempool-kill-all stop osSudo "${MEMPOOL_USER}" ln -s mempool/production/mempool-start-all start -osSudo "${MEMPOOL_USER}" ln -s mempool/production/mempool-restart-all restart case $OS in diff --git a/production/mempool-restart-all b/production/mempool-restart-all deleted file mode 100755 index 13e551066..000000000 --- a/production/mempool-restart-all +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env zsh -HOSTNAME=$(hostname) - -echo restarting mempool backends | wall -echo "${HOSTNAME} restarted mempool backends" | /usr/local/bin/keybase chat send --nonblock --channel general mempool.ops -ps uaxw|grep 'dist/index'|grep -v grep|grep -v services|awk '{print $2}'|xargs -n 1 kill - -exit 0 From 3da76892d5bd64ddc414b0906c8c8da34eae0389 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Wed, 31 Aug 2022 22:49:59 +0000 Subject: [PATCH 03/44] Restyle ln preview titles to match main pages --- .../channel/channel-preview.component.html | 8 ++--- .../channel/channel-preview.component.scss | 23 +++++++++++--- .../node/node-preview.component.html | 8 ++--- .../node/node-preview.component.scss | 30 ++++++++++++++----- 4 files changed, 49 insertions(+), 20 deletions(-) diff --git a/frontend/src/app/lightning/channel/channel-preview.component.html b/frontend/src/app/lightning/channel/channel-preview.component.html index a847975c2..364e8c9fe 100644 --- a/frontend/src/app/lightning/channel/channel-preview.component.html +++ b/frontend/src/app/lightning/channel/channel-preview.component.html @@ -1,9 +1,9 @@
-

- Channel: - {{ channel.short_id }} -

+
+
Lightning channel
+

{{ channel.short_id }}

+
Inactive Active diff --git a/frontend/src/app/lightning/channel/channel-preview.component.scss b/frontend/src/app/lightning/channel/channel-preview.component.scss index e89733ff3..e8e08d5e2 100644 --- a/frontend/src/app/lightning/channel/channel-preview.component.scss +++ b/frontend/src/app/lightning/channel/channel-preview.component.scss @@ -1,11 +1,24 @@ -.title { - font-size: 52px; - margin: 0; +.title-container { + width: 0; + flex-grow: 1; + flex-shrink: 1; + overflow: hidden; + + h5 { + font-size: 28px; + margin-top: -4px; + } + + h1 { + font-size: 52px; + margin-bottom: 0; + margin-top: -8px; + } } .table { + margin-top: 14px; font-size: 32px; - margin-top: 36px; } .badges { @@ -23,6 +36,7 @@ .full-width-row { padding-left: 15px; padding-right: 15px; + flex-wrap: nowrap; &:nth-child(even) { background: #181b2d; @@ -33,6 +47,7 @@ .nodes { font-size: 36px; align-items: center; + margin-top: 0px; } .between-arrow { diff --git a/frontend/src/app/lightning/node/node-preview.component.html b/frontend/src/app/lightning/node/node-preview.component.html index a94882161..22a8095b1 100644 --- a/frontend/src/app/lightning/node/node-preview.component.html +++ b/frontend/src/app/lightning/node/node-preview.component.html @@ -1,9 +1,9 @@
-

- Node: - {{ node.alias }} -

+
+
Lightning node
+

{{ node.alias }}

+
{{ socketType }}
diff --git a/frontend/src/app/lightning/node/node-preview.component.scss b/frontend/src/app/lightning/node/node-preview.component.scss index c6b2ea9d7..b629bbcae 100644 --- a/frontend/src/app/lightning/node/node-preview.component.scss +++ b/frontend/src/app/lightning/node/node-preview.component.scss @@ -1,10 +1,23 @@ -.title { - font-size: 52px; - margin-bottom: 0; +.title-container { + width: 0; + flex-grow: 1; + flex-shrink: 1; + overflow: hidden; + + h5 { + font-size: 28px; + margin-top: -4px; + } + + h1 { + font-size: 52px; + margin-bottom: 0; + margin-top: -8px; + } } .table { - margin-top: 48px; + margin-top: 26px; font-size: 32px; } @@ -20,14 +33,14 @@ flex-grow: 0; flex-shrink: 0; width: 470px; - height: 390px; + height: 386px; min-width: 470px; - min-height: 390px; - max-height: 390px; + min-height: 386px; + max-height: 386px; padding: 0; background: #181b2d; overflow: hidden; - margin-top: 18px; + margin-top: 0; } .row { @@ -36,6 +49,7 @@ .full-width-row { padding-left: 15px; + flex-wrap: nowrap; } ::ng-deep .symbol { From 4ee5ef336c2ad6c39d201a01e50a17f6e1e5629e Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 1 Sep 2022 14:57:14 +0000 Subject: [PATCH 04/44] Move lightning preview headers to top bar --- .../master-page-preview.component.html | 6 ++-- .../master-page-preview.component.scss | 12 +++++++ .../channel/channel-preview.component.html | 6 ++-- .../channel/channel-preview.component.scss | 29 ++++++++-------- .../node/node-preview.component.html | 6 ++-- .../node/node-preview.component.scss | 34 +++++++++---------- 6 files changed, 50 insertions(+), 43 deletions(-) diff --git a/frontend/src/app/components/master-page-preview/master-page-preview.component.html b/frontend/src/app/components/master-page-preview/master-page-preview.component.html index b08c991de..917a44486 100644 --- a/frontend/src/app/components/master-page-preview/master-page-preview.component.html +++ b/frontend/src/app/components/master-page-preview/master-page-preview.component.html @@ -7,12 +7,12 @@
- Signet Lightning - Testnet Lightning + Signet + Testnet Bisq Liquid Liquid Testnet - Mainnet Lightning + Mainnet
diff --git a/frontend/src/app/components/master-page-preview/master-page-preview.component.scss b/frontend/src/app/components/master-page-preview/master-page-preview.component.scss index 605c4f6d9..4d5f173fa 100644 --- a/frontend/src/app/components/master-page-preview/master-page-preview.component.scss +++ b/frontend/src/app/components/master-page-preview/master-page-preview.component.scss @@ -33,4 +33,16 @@ justify-content: flex-start; align-items: center; } + + ::ng-deep .preview-header { + position: absolute; + top: -80px; + width: 100%; + padding: 0 220px; + text-align: center; + overflow: hidden; + text-overflow: ellipsis; + z-index: 101; + line-height: 80px; + } } diff --git a/frontend/src/app/lightning/channel/channel-preview.component.html b/frontend/src/app/lightning/channel/channel-preview.component.html index 364e8c9fe..bf7d5dab3 100644 --- a/frontend/src/app/lightning/channel/channel-preview.component.html +++ b/frontend/src/app/lightning/channel/channel-preview.component.html @@ -1,9 +1,7 @@
+

Lightning channel

-
-
Lightning channel
-

{{ channel.short_id }}

-
+

{{ channel.short_id }}

Inactive Active diff --git a/frontend/src/app/lightning/channel/channel-preview.component.scss b/frontend/src/app/lightning/channel/channel-preview.component.scss index e8e08d5e2..cee0f1bcb 100644 --- a/frontend/src/app/lightning/channel/channel-preview.component.scss +++ b/frontend/src/app/lightning/channel/channel-preview.component.scss @@ -1,28 +1,28 @@ -.title-container { +.title { + font-size: 52px; + margin: 0; width: 0; flex-grow: 1; flex-shrink: 1; overflow: hidden; - - h5 { - font-size: 28px; - margin-top: -4px; - } - - h1 { - font-size: 52px; - margin-bottom: 0; - margin-top: -8px; - } + text-overflow: ellipsis; + white-space: nowrap; } .table { - margin-top: 14px; font-size: 32px; + margin-top: 36px; } .badges { font-size: 28px; + flex-shrink: 0; + flex-grow: 0; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: baseline; + justify-content: flex-end; ::ng-deep .badge { margin-left: 0.5em; @@ -38,7 +38,7 @@ padding-right: 15px; flex-wrap: nowrap; - &:nth-child(even) { + &:nth-child(odd) { background: #181b2d; margin: 15px 0; } @@ -47,7 +47,6 @@ .nodes { font-size: 36px; align-items: center; - margin-top: 0px; } .between-arrow { diff --git a/frontend/src/app/lightning/node/node-preview.component.html b/frontend/src/app/lightning/node/node-preview.component.html index 22a8095b1..4ebbf5cfd 100644 --- a/frontend/src/app/lightning/node/node-preview.component.html +++ b/frontend/src/app/lightning/node/node-preview.component.html @@ -1,9 +1,7 @@
+

Lightning node

-
-
Lightning node
-

{{ node.alias }}

-
+

{{ node.alias }}

{{ socketType }}
diff --git a/frontend/src/app/lightning/node/node-preview.component.scss b/frontend/src/app/lightning/node/node-preview.component.scss index b629bbcae..c0b86ce42 100644 --- a/frontend/src/app/lightning/node/node-preview.component.scss +++ b/frontend/src/app/lightning/node/node-preview.component.scss @@ -1,28 +1,28 @@ -.title-container { +.title { + font-size: 52px; + margin: 0; width: 0; flex-grow: 1; flex-shrink: 1; overflow: hidden; - - h5 { - font-size: 28px; - margin-top: -4px; - } - - h1 { - font-size: 52px; - margin-bottom: 0; - margin-top: -8px; - } + text-overflow: ellipsis; + white-space: nowrap; } .table { - margin-top: 26px; + margin-top: 48px; font-size: 32px; } .badges { font-size: 28px; + flex-shrink: 0; + flex-grow: 0; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-items: baseline; + justify-content: flex-end; ::ng-deep .badge { margin-left: 0.5em; @@ -33,14 +33,14 @@ flex-grow: 0; flex-shrink: 0; width: 470px; - height: 386px; + height: 390px; min-width: 470px; - min-height: 386px; - max-height: 386px; + min-height: 390px; + max-height: 390px; padding: 0; background: #181b2d; overflow: hidden; - margin-top: 0; + margin-top: 18px; } .row { From 2a28ccc7588403b7651a03e213bc0567583d875f Mon Sep 17 00:00:00 2001 From: Mononaut Date: Thu, 1 Sep 2022 17:01:31 +0000 Subject: [PATCH 05/44] Update block, address & tx preview layouts --- .../address/address-preview.component.html | 10 ++-- .../address/address-preview.component.scss | 27 ++-------- .../block/block-preview.component.html | 23 ++++---- .../block/block-preview.component.scss | 14 ++--- .../master-page-preview.component.scss | 50 +++++++++++++++++ .../transaction-preview.component.html | 12 ++--- .../transaction-preview.component.scss | 53 ++----------------- .../channel/channel-preview.component.html | 26 ++++----- .../channel/channel-preview.component.scss | 23 +++----- .../node/node-preview.component.html | 8 ++- .../node/node-preview.component.scss | 21 ++------ frontend/src/styles.scss | 2 +- 12 files changed, 114 insertions(+), 155 deletions(-) diff --git a/frontend/src/app/components/address/address-preview.component.html b/frontend/src/app/components/address/address-preview.component.html index 30b9c29e6..6a2d1efee 100644 --- a/frontend/src/app/components/address/address-preview.component.html +++ b/frontend/src/app/components/address/address-preview.component.html @@ -1,12 +1,12 @@
+

Address

-
-

Address

+
+
+

{{addressString.slice(0,-4)}}{{addressString.slice(-4)}}

+
- - {{addressString.slice(0,-4)}}{{addressString.slice(-4)}} - diff --git a/frontend/src/app/components/address/address-preview.component.scss b/frontend/src/app/components/address/address-preview.component.scss index 2de368547..afa8cb4b4 100644 --- a/frontend/src/app/components/address/address-preview.component.scss +++ b/frontend/src/app/components/address/address-preview.component.scss @@ -1,6 +1,5 @@ -h1 { - font-size: 52px; - margin: 0; +.title-wrapper { + padding: 0 15px; } .qr-wrapper { @@ -23,27 +22,9 @@ h1 { .table { font-size: 32px; + margin-top: 48px; ::ng-deep .symbol { font-size: 24px; } -} - -.address-link { - font-size: 24px; - margin-bottom: 0.5em; - display: flex; - flex-direction: row; - align-items: baseline; - .truncated-address { - text-overflow: ellipsis; - overflow: hidden; - max-width: calc(640px - 4em); - display: inline-block; - white-space: nowrap; - } - .last-four { - display: inline-block; - white-space: nowrap; - } -} +} \ No newline at end of file diff --git a/frontend/src/app/components/block/block-preview.component.html b/frontend/src/app/components/block/block-preview.component.html index 768bc3da3..38018bbb4 100644 --- a/frontend/src/app/components/block/block-preview.component.html +++ b/frontend/src/app/components/block/block-preview.component.html @@ -1,19 +1,16 @@
+

Block

-

- Genesis - - {{ blockHeight }} - - - Block - - - {{ blockHeight }} - - -

+
+
+

+ Genesis + {{ blockHeight }} +

+
+
+ {{blockHash.slice(0,-4)}}{{blockHash.slice(-4)}}
0q^ojXP$!4dK50kyf%(e|pC zQ+*A-{ufEAz&g=2()LDiz|SLMQ_4*T@Bih-S!?Z<(n&tw2m_Hs85Bhhx)q`#zOE|9MU4k)TWVy}-eeZz0__sfV;v2Cc7 zZ*lfxz`M4W!+KkN#d>DK>23oIuIJw7M~yd$`%|l{4yV7pbodL|YMXr!I#82B;7{Jt z6Sk@ib%7DrAl3#;?ywRr@vtv;!vz#G{u{eQ_WI#lfp=He{?VP@g;me!^<9;cPSg>l zU6e(>ebw~^(&H$OW9#pOGmK>>Kbq^$l0Wmt9`|wEN@yMDcxZrbQ8dA_@L=fbK=vA; z@|9vJ7fUn%nH{XY5ME%mR!7G~W#eG@s!WRWoef%U4VYC z?PCIVO?}t(SH(4!USfcm#E|2~r7zXL)Sz(Sx#(JKU8IXET7`9+%q;c&1>TGYZvs;iy;?DYrFBug`UShy0VPe5qah@+*v>2{8SkwQ6Yfok92!8 zHa8lOT~P=ONnyDoe<=c5>E;cvMrYw$G^x}(`fD`ts^O~?i)E2Ie|s@q^9!29@1cib zU}s%W^guBZdi!OY*GjW97iD*ivQQ(KgN0ypcE z8`DqhlBqBAsXp<9L8ZQ|c3`&~4Cz5vb~Q)=;cZq8sOugSg7%W5qH(dBJg@MXE|pt* zRF`2yX*(C6Ux{pgv1{OpLY0kIImHQa9cC| z7@gxOA@QfYU>K%EDBCgTU4qH&u(c6WhHBaV$qCpwA^8brHh4?WdLDe%mWwUiBXqYJ z%R3r_zL$f`&PWtRAXRaY&tg(cc|fO=^o`NAx?@@oJy!G)M`-q&9AzQ&O}BZ^76fla*;YB@(5QPGe^orHJ0UGMTz!%F??Y)Kk7A zY*G`scH3NciP>QGwGgoDrNwzDtvK=nSUyR5jm4M<@Pp$x4jUra@B6cj3iaSk+A7jV zg|F+S&%iWG8N!bd4}uaD*-t0#w+N$#9>L|&`XmUcBE_)%Q+ZI$z8kUrd@Aq)+#~{% zF_|abKNlp;vqu*Gk@*jm!=j=ag9%v@(O3C~8p2?Ehe;qO=G*tL3Yq5%39v;5f47^_ zWSJJef-8lr9rKf6KWEdI$J9>v@-soaCD&3`w;zo~W@HFyeNi*9m{>0n=_yu?dB`Q}s?oe1qVM|zN& zA9P_PvTB-^h1PY8EWw45YgDWb50xIfr*E59O!Q*Mo#+$4Z6apd@N8G}Vo&3|cw~`J zsUKk*oUYsV6AYk#M-NHfJ8Q?OInwnbQjA%>zqJPpsd+7|vedJ!BI%@JQ127RiYZ=W zC{1yN;)2i*!>=8tWv7X4SYfJ|OvK`P*i>#X4g~IWtcz~#^vUSl>$6>Mo25>0$_=kR z9?FhsY2dtueh>|F>Hv?O=!>4R!0>$aO!B5k7k?19{+ewD1m5{uYvW=QsIousrl4sW zI`k`*@(m~bQh)b$nNRaEwR;ur(Dvw%yyT}#e^eH`)URj^FC+(5Xg$Y}Ow)n?Ul>ZF zc#sT6eRmECsX8%BKYby1%M`Z8G@~vFs$I9a9`Ck;EAD6wo&?Rpo~|~!yqQm9hXeDk z(KMjlpC{drK1I*ANOH$1^hw0}fh^iOR`siJs^na3T-SZ%m^H{Tr6un^T{s9kwIT}b zTqj+AxGiE_CN(z=7X7u4n*2~-(FS{{gdK<&(p8MA?;eXO*8pTMKNZVH;E33syiL08 z6uqQwUE;QM-TH_z8dL}rz#mR2X`&98u^APUr@%J)8A&Gg`j^h}$3|jb!E)(vpE40U z8>fd1IBvT&PPxEO8*E7ju+{xnG(fc4rDW$$gyxAa<{tmT*?v@&2CMg8P+#St8Rag` zck42S-NfTD$aj!;^1eCh1!q_r`(+a4&n4s+@6TMABILTx|5j?I>yHx{SO~d9Kzr?n zQ_@A=*+_acEcJwVctztjhajt@ZIvC!fqaL!Z8n=jv0RfDbxOw8(TWJwA6F)Hp}hQy=Kq-SY#}lZcwjUhyR54Fd(m!p zU>KPs+E|56`-m##$5Dex_e8CrE74`g-#27zE2_d9v9-5P z)6d-$?0oCk{i3VB6xzZ*)O;ER9K(MkxWE%H8gr4J2X9D`%_pUWG2I_XOl;Hr9<}wZ z)ED7%n%ClrENBDSU*!~cFs$77YtBWw=A#t6)SG&^6G(gFU8&J4IC+L1!|Rk1OWe6D zpC;%X%^R$JnW#CN3I)60PkB(V6O;*qkf7fp`p~Bdo>BE5SGVhMjr9YyY|A*R?dv}7 z)?rf(#}AZq5lYWG?mmEQI||?qRM|1kBwj2ZdP7wPC=UdIe6mxdcddB zVzC6j-@ke$YlRW~@^oj|^9ZAxD_@^52{pKa*hlVf3>+hhMd{*ooZ`XI2)Sw@Q!FR? zc1iY{JV*OmAH^-(9gfu&lHiD4W~6>pY2#6qvgh;v%&krxL?%kGG+aZI`7s?2r`dbrHE)?ol2awHc zLVGUgo0SEP197s!sNR7D0gcZm6J#Gj$Y6_OWRvHb42f^#np!`~eLKy(Ycy__ZM}@7 zz}>r7qFIa{N6X$gZQF{#6y^J)yI7ulP)cNi#&nT`58LV~;c}Q2Pi%vh?5EcSNBfyANliorfvq3!`j(pP>1?{aEHB zi1dFP*%3Trwbi~JHhCDbUEfAZfS0gF)+}CC)VNUx7b9V;zrww0mu>S+KYEd-*gnA1 z>^>&ax3tp;%PGx%_`+?=%L#JV_5HJ1B z)3yi1A+GOmj9dC7?A5%I%d-e9c7}81b{p9Ofp@j#TKo^On%ZEffzr>5LlEFp0lID< z{iS_ObRGNeyXGE0vQkrWz=jO@g6>g#RnF3#GT)X6=Ya{wLqhp@jEtqc9rXeJs!^}>nH=3{0TgTnJHJa{+ z^~qTmWG!fj`MiDvkWzPH@_Lx0a_U||Fc7j%U_;EB9Rg;dD{PHn61Cg~Zpx!{JAqxi zQ>v(sydv;U=yncw7D*S4J2iUjGApmUa|Kal)kjP`XR@fGr#{tFV!BRZ(#3X1U6|Qj z`;RwZQ%uL#ouLbIl{kL~-eVr4e(H8g5!NyW{jFMfyNhB_PcCz+d*W(n8Nv6Ah@ zFlR&g!{!bT!25Z1EX0_x8v1GLnu){>gkc|au{lRmG_E;HLE_sYS`0=DqEw^s|4v6h zLg-IgX+Blw$|NLu{L4|L5(?~VnN+J#t&3H**ZowL+=*vcRpp53ACcT>o*r`uLmZ)X zB7^|CLWPbvAA$3Du7e$nK7sE!S>{qbFL`|1K8fx5`BHn6czfYyBDQ9|O zvUmmwq!o#q!utc^7rQ=QzwUI4;Ly?}5OBReS?C0D=^_oQ?1e^Y9_ThUuhu&l&)b(u z1~LR&0Q*fJ_r|BIx9oMFY`?rpg-(j1%tsEqk{RO^X{uQld9zE;KTwAl$4IN%cT9d< z&7(|MUpUtsB?KHNCt%}|O3(JLKk*~*Rr^bQXy+~qi5`CYW=6zFhc+b7#+^f;N^G~w zCs;^ON)BVhW{J%Ay3!6*y66hihq0}{6nh%8+brv%w_|%G?*ILrAkkNpWh3e)9#e6F(1o{*1OUYBnq1 znkK&NQm5a3Bk9>O9lqmnS``LLk3hBTx8Z_nf_@a9f3+ke{l(UqbO9awI`%~);cAqutRl@jVQrn%8nEIxZJ)h<+I8?h5OY7!Kubmytb`Iv7mh|YQPrt5O=w` zZr{?OgmJ9PWHo{7S=F!|~NHqt#Lg<4wx5pn)@6@!#RlC6}jLoSlRx}f#c=$_H@80kT(zaZ&gF>}6h$^`| z(i*|ti|qCkv^|C4E54W{m#L=2LzVJ~R)NUs~NsFu-N6b!}vD@tVs7cQ+wKeO{8!n6qcxUO`=7)e(AqoQt zC+^!~S-&V-A2$16e$XeVu##M>`M9BWVFB)1b&qu$BXV0ye9>tU+Y5aVJ1&gruRHEe zoc$ClT1>*a(tU^~$&*7&dX#?_)JDz3Ih{h!AVohPFcy?~|4gk)s_{lZ+2_D*M@v=| z=4OZViXZ|dmGGqM)=(U+PH?%G!xWn-eqTK4s5X64a~d2D^5hHwulN_yeDL`Fdx8`+;VqiK!8Wt1xKgPJ~RK$J%C;M<(F;*YmPDj=lcD} z&1FjrSXTZal+w3=cT^}KxAT-WP-e#0c`zN%b=KYV8qCN~nbcFuuo2r*Vfd1@(ciCS&FKJ&Gz*kRO8CTcSTk% zG12d6Zna(76#idg>$Xzez&T-!HLsB!5Uj9}e1n%;x#uBfI4{n|E8z>DOYW1OpNMC( z7~T1x=qW$J;~a^lRfC1_oB;r;sU7wICa`W|m`V8059iTL|3X?>nIhTqAWH;emSLY) zLEi=mmt*F;JZZM7-;S*DlVNx%^{+AdPiy=Dth2`ZOuS1W1js$&53A=j&tlXXeU^3hYV#DnGQ%MYczBP(PUrg)B|22h$ zsZ}i15U+R+nGcWANlzR0YX|myL-e39Jg`+^_vxU_i#B6$e(*yU_+NjHHvb$SV_pY) zx>#*n<}EL{h^Y|GYPr1)e}QgGb$;z zHb+QWAPvfNqFbq2&-i!LQ0%0MleneYt=>}Yt?u}-_LP4fli&)SGNu$1@xA50`927i zw;&&v-gGs>3U-OLj2C2Zu+!v==JCC^5h-at4%COCxZ!p)NOV3t2jKQ!Y{A;bn_CDS zTceMRPjqE&x~=hA$(Us0TYjPKE%e*J&d9uLb$@$lFRJirlOb|a_)1QMpxU_C@bY-9 z0$J{y2aems)D-*&=}O)R}E!>JT7#kIQ71)q$U3q74xoD3J{o!NHWL~|KaXp z^hMC=#U?d!;qUZ3htQ+W=}&xn-CXN1>}G4^l&s1?e?QjX>tOezQ{!oKJtdJ44u_UL zC4?<}4JAAl=&bk`;IZBq*U_F z!m$Cdtq3I^3M0F3e7%E3YPcgrl7u2$*;RsWcUqNI(*pe5`Ibw4uS+Mrt--B)FH9eA zXNR2dT*ZuS{*SsWgY2g2T4!xVvUebB$p%fUqaASE;X|~Gs4i>}LIv!Ai(Poj74qgr z;~_Htw7o7B5E#2us%K@qoYL&>_Cdv{G>y;al z?H^a0KhBH`zWgwGGcxj?oc%_EvGp$@fCs#w5e(xO*pEOent;2r%rHk;dvMFxECu*1t0nUEPA6A#8CUWX5sz zNwU!eu9e=smNF=*>%U0zQ;Lo*9%@&JkDwy)?R<gC->nt>_D)N)sd&Hd)3;2Pm9WajpEQ;phe;_0Kc z&3IE~mq~u-;{FU{@yW5hs_6pF@3>Dn9jP-#_O9GM7jpR3$B2C#!>M~9h`CkL>9PGq z9J3^d{pYN^*6D>y7wc{952U_obXQ{t$USJ5A6}Uy9>>}!aM-WPC;1s?bR*RaG92Qoakrg>bh|LU zx9H52tlnEiw%k1EHKeXal6R0C6zTqo|L{SkNb(YiieN2ag}2Kwy9KTsBn1Q$fdQm{ zRX!i(@CJwT*Ze?R{p9F8P63(-b~`@B04~Z~`$Gd{o!Q#@XaZi=8|x79C&U^K<& zzL4IFH1+=nI{s7RA5Z*SP}fXkFG%kyy=I{#Si3yQ)c+Dn2fB9zc@`io>vOp;I}ycS zGri}SkC!~hpJU7^NrahW)KLu@euoNqEP<6s zbHv?1)h~2Ko!7I&e<+D*lE;t1{= z&4caepnUGGbOg<%|QdW>wbjDXV z_ic+ZKd^^yjsI}F+Pvl^%p*6i0y`PDU=g1`#;kD5CvnVFP)!%#f6-U}t7oaPz+n=Q zCZDLZb`v91U@KaV;ZTW(>sETl+<8ihdlh2$AB>IZ+w^qeMpl2C+vPJ)2(VMDbba@M z|3_j`_bYj4L(WC;i!{ojJeNxy;uz2%UvmhAdc!eMf>+-$jleKI_;%@n5)-ZNi#qj4 zTSZMF5gz$Ygni5J67!!+M`ZGz)D0Tk1_m(5y zOQCt0{>43=iRy=9Xe*o??IFb8^GErYv-05~31cihT>XxCd*(-GoCJD75aHzc0E2!Z zxp4^6ziUwEzYi>vyEZb#-WR=F!qp};z>%VnH5Tda1)=o?mEU{Mn6d;VR{b2nmF@1t z3=5a^*QuE`))hVrKUV;>>U2_p6rQ#@Da$~TBy0DyDyL-po3#s7d@P-jF=GnGiDJ;` z+>sS};Q=nh1ODQ?Z|u%cYmT&0CGjT`u~-47^Dd#RmOgz~roBoA8M4F zK5j^60S}sp%wHtH(p1Lh?^U%E8*m0qJpKjvaJAdg7-s87B++9OI>bsnXE6aOdf3x% zu;!Hx)`7nz_nvlqJ>_`o9csTKU@xf}Db$&kU`zVeo^mKSixvuvYcpc+@xjR{GKcAo zrBnaW615++)j)N$_n=X; z$D{q=>^*eOdz8pC%qPousw5B^HwrQzfFaVFvM|0qsr*@%3?u*2GL8Q`b=N<5Oke^v z11oC?uJcAHKE^z9h z6`1tK<)SqM@a#<~uT%}=+hJu!h#x1P{k@`h`P=&SDY2_ezPWNVpYlsL90>YZN@Tje zF^Zc_QWej|HYu{n2foKfTPBr{YN?id=rYa%LCvn8&~bDdIL^-anIxhD%^@HdQ|K52 z_Z6AwZGB*) zv$saetrH#=_C&r1vn|h9M1QYZcD_FEh-tZ(sf%mEEqb|xEnlJaBl>rn9h}f)4`057 z%LCSO#D=pw6P)GxUc77>S&!!fwN3XSOm_A2sdkVDXR%mDRjs+`%}9czW+=I3vF2Qa zG0hRKHA=y|7J5l;q^?E(0=jJ;oSZL4K#xW%GWAEuZYTr zkBM+NU&lS2+`7HnxOExV07gu`mP5+dHp_;s&@xiAV88-7Neq=T|BIYwb&;jxxo8Z> zV4B(tOUY-Uzsi#%u0N1FyIT1xy{^p?-(A`a6|!e1?{$ykw2gx^ry(uln)LqJjMJ8j zRQ*TpLSompc-aYUh|+Y?hq!VfkA9??qOy*2P<|}VH?;JRd;i0t2|W zQvk9|So?x(UVW1!d|(s3+tx;o+dW7STh`gU3j$T^PQaW1I=kPm@n{@p@nG-_nA z-AHrhWU+r}oZIiKW~j$X!d+8VFc3c?+@$6uj>vX}E70@a)^{KrRRu(88J zbjO(U5LCJI2L*?Opbfe8<6?96P-&c6Hn8u1mNt^+sR@i zSc9Oy6=lB;FE`@6cEIiq|K`!LJ`BXXc=>2_3jGZ&s5>zYC=dEO9uP}L(T4wK%!rS- zETYR}FuN?2^S+s)p@c{*Evz<&&(7V8-|JxF!m6Zo>*tf;z?8e)h1vwT?8SMo_xZaeI$ZH@M;%F{98;)}Q@ z@;&)f=UiT`*|I=dc&k21me_E6Oh?%6g3#%<>rcFD$|hXikaz zj8hTU(Al=Lyh-dPs2$`L&MQYoS#~SWB?3I`Qr#``k@CYyM-lhteO{`j5*J)~Lyc}E zN_;*tq)fa3!5{42Kh$w3m^+Ue}X~%`3LLNAJ@X!)DHyVo|*WViPQ5{ zSRe33NA9V@T2}JI&*#mM%(sq}I_gE5N-63&K@ATjM*HI;sJ0h#*Ml5*t!Z~~6@@{6 z<#Qc>pC``_)k^3+q|FmOhrGBsFY3p?b~{^|!=^@Wn6ZAh%8|_^hVI4pmM^~SKYY|U zv^C#NzE9|BbjrQ*lT9yFYcWN3P(lXA$Uy(!D~{w#iA}hqh+RS2^rt^W$u(J{&(PV zycNnr#(@>8|3W&lcf=j9{7}#@sGdB3L0_lM?sOtxpr(WOvsOh?&lGBOa8esr$n$y^ z-Zk77DIY`HeA^Hws?{3N$Q}e0n#eo+&)GBzpF`&Csqk1mZ`BM}d4Rk99Dgh$kMPkt z-W^@&A%Dx(-&l-X@km0B*P0DwoT|XojSt`ydvD}JD1mYXN_x8F?7n4@Tm^YWkNggT z{Q>`+%V{#kP{q(0Lo3LNrN8UasU5l#WarDn$B?hLBlL|D=`lV=tBet=_KE zReA2$_b*?5v5=N{=8vquYZ<)YpBg`SAs1-*qUTv)E~n&blx2EuPjIlQ1IMTG{&+8c zia<_c@}5F*zv@qQUzxwWPgE_a2`(QQ3niI`!S3$QSI>97kve;>Z`Z@^Zs&D(U4u?% z={q=y*?tP)R=5|?4R$m6=4F(2?oauTkEwsY#!Uf?w7;4QAu^uG{O4XxK$N{H&N7S(U12xm>ubH)7rd zsgGO#H$r$2qa{=cV{$ z#h0=3EK$TsdiSrAZw5<;c<|p^gMnsDQ<7T#PUofO^R>IM>&Jma)1Rw5AgAl&3>4>l zQd&^%8p)QxawPd6^3@RhF3PV(tf@tRe?* zMwuf6MF!(7Zn55>pOD#Ug;^iWfnn@5)4X4`b8yv;==AaC_V~JElUgw*w#1z0eelBq zwwJIImA`G~%(uO?ZH8!+KfJ$%WDD`H;j_ZVudt$HGUOvgMe#?Ot1`6LN-^r(X3ep$ zIGzd`0dK7dVq!}ZbdBBt5-w?ggh2+%qCt=^r=<@ORXRnQzj&V68o z#C?>x>+2@0sRA;GgQte~x4Zss5(rMx|1}j#Ic|67-hLmG{Ur6e_T3jEmD>Ir25jnG zjF02;?Y8^~D@aB91PS4NV3?s#qNs9&Q;gWx$7p5C@!U%yn?mE;>CyWwbN?`fd4f6P_E zz>V@hCzJ>oYuwK~8K^nV|J;D4*xdbPhR@vWvx-SZqc0o9Ex31M-G0VdP5AeOW4(}{ zqwVdYid>X`(|JuN?~Mip)Mv>Ju;_F#pt|9C>E|YDkU<9*M{8pf#dSZY@(84L;PDm( z_})z3md7QtEsj{HU>-^YDL{sY2b$YiHku%Di)`}&D-A7KS?Y3oQC>7RiuZN;v*G@3 z_PM-`5H`UjyR*^5L!U8Zf0kGE$lX=dy0l@X5PA8nh=>)O+IP+!kH@FN zlG^v#7Tq}ZkNlb!XO)-Q7C$$wZHc{PB`S25e%W0?aq`YgE7U4OXMv#rs0q-*9;jQi>k+<-8O4k&R&guueQ zbFL9{*DJ)QJ$U`GbUVqXeA`M8AngB<^Tu%{mU!%no&FGzHNElnpeA_L#NoOU!7>ba5cLL zC9*yl62nZa4z`1GJ5r}t4@P&&!A>b*1E_k?yg6X>w>OHB)dCB7Fd&53y%*y&`p z0Iib>tJ4@HU|*RW@SVdnMfcM!q1D{ISjtWfGd<;_>hjb-QKz@L{~1$g`DRDtXtCu{ zPUqN(kupy@4jE9m9*?s|s+?k+a~=wUC;|JaCksIDhf4(`D1dKje}>U2*Y%{%%@ z8VuKYQSgVqU1{AN{9t8x;@34?PHi#9BD&t@sT{ird@E|dANJ4iMVHtb#>)|J-Qbq* z8QH#E`M= z9i?wg;*;cJ(2#5IVBYAsR>~0t=`XJ8Qez#(bp00piD#Zsy4oz!wt_UETW0z}06LM(3#EITXZ-DY6mzkYNE8m%@#TYng5LM}A z@Nb$dDQb^rJVF3q<0uxumfIu6PZ( z=%p733H2%mDy~g7lEI-=m6KSjx>ac8Iv^||bbNyRxY5V&!;g5uw(NX?9b-43GFKUptzhQ~DTIq^}r^~b*Yd>#{a|hJc zR9iPN0m#N@ld&!jSt>T9i}j-q2*ayzsWGjX*Eh}37mK1#()MI0{+Z;4ySr8mmsAK=Z>6o{qSPaCE~*HiMpB_i+$STFL;iOWxSv(AZiR( z%ymb_r_T~+VSzE}8H(0NMCf|6{XgPwh24(t!U8O^2@-gJ;*O4Tbb{qmU;N z0_f^z2X$n4uL@uVPGLdYK~}KNrXJggs=|m^9jJkFHTRj>-yy`6>$rMMcUF6@g!;Y^ zbjpQl$GBAaXI5N}rqcD8-2AGO(|b~Suv+a3S|@$XaPCb|aS5co?)116vT1KLZ)XhT z(w&v-rD5GsXJO4|q>%U#@>r-uGw*wdZO8e~BGnV3D#kC3olBcoaeB1BdrE9T3`MY2 z^^EzOd`XkQ_>Tu*Xp_0`yWz~3pBbs1Xo)`!!YqIl-)|a*Z7hY za<@EL_`^$V_`y||=C#$ZNtu(5GE%*Yl8f?w6b?VI!#DtaU-#N@A0g|~&XYH~1)(Sd zU?RajA`br>QCZMVW?1FH$z)l8@xctMQmk28y4@Y}hO_dgb8oO;L#M5dn~4L}N(nty z@1QLcv>`Z`DmE0-YO#mm!<2dUb>#&9!ILjIr_hS)JAtRwwp!Ec0d~bNME|MmP!8$w zey*r0xBv9(*3yJ_EO`xE9z7&yA?3}PCv{I+ihiXTmYij$R1l0yxbl@j--i%T=_bW*LMxw`xMSn|H>#)S4uA~<6XroO4#C#Z=(+1poY z@tIsz*pNZ6VQSpQ;$dEQhV}~!x<}pirm9=)`BKyD7-YvBVap_|(?U3SqG5B?hG*P0 z^83!6GI6MqF2(Q|fIUvDAc}jtVe^{L=CJb3)Z{B~6p`PVuqOFRrBu+nXXh>3-SYw9 z;@wKZ2G>Bija>L0kO+_3pL2n1a`?9_>$0ipUW?~7bGpkBa7XN;hhxcHFF!>s7}b52 zImv9Y;{hDsMQ7I5rz>S1D>)U$<66hpWHpuMJatzejoEZua!Pk3 zq7G^`!76#5q*UNjN&dzaDkf!Lc$^a$uRQqRUea74Fdm!`@iI%6IK+L zen+rY&hCy-8r|?!X$d`sNrGp24LJ3#wZQugI+s6RtkTTZju5;YOnrl$-JGBDSnqd{_Q&XVp)e4-9HX@x)OGCjya3t(Blq`8~QLiJmod5=LBlb zSjG82x7elziH&krbyh(CyXMNzoec4XHs`ljf1kS$nR!9X>COhY`T3`*)qe%;bAo9; z3es`dX0LGQq^io<0M$zwI-3b9KH3Cb(^2KC4x>f${A&zY;C#%wYYMRXv`Nc}!Z=v* z;xv{o`d9Q_=C2h^4H++*ek;N9G8XvfGw^H3u7QIb%yem2|F#evGLS8nnxX1^%zl%jSL9lh=R-13U&|I;KXsR>z2)rjIDT# z!eJiSzXyJ3B{>J{0DNVoiD!(zlJ@K7o~D^95u z&PuD`S+siXPVm;q^ueKrQiJyafDWv_YBD^BB0s+HjEll8dJerj{V!Yf$ll~=QJ=E#>7{H*|V0PHGxf&WR zbkN@vI|sxFJ4(x#xGx)%qOftZ}zpTrNrwN>g zdVfC5rQB;aFV^pBgQyDRhA!2us((}M3NAw>W318!^fbGNFRJxZpUswt#cS*$vjYSq+K=cte zlJ4^ugKK!?+w5WPnMWvf7!?OU;^H(B+9u;0b&2U-?Vf3o&f{vFR68?DvE9($Fj6#{{sTpSjAMS;Nw(>i24 zxw?62CcCpslu`90*T$uG$GJo-Ib_bKZU+SUp>gP1{>$i=Z1wV6cKM*e49E)oFL834 zT94l8tDJT5m->Wd^CRtf&C5^r%?Ub>e`U_rkw(CL`&maBI|$!G`-|O&XSgF`XLY&9 zZz;cwpSk5{he;Z*GnHS6ji~t#l~%ueb}e*5+W#atN+y3nZQOVL>tsmQZlM$_Q2StV zL^{F5#|Tm#0ld#d z+wdLduMK6Hhg?r+3|P^QM@cDDy6yIYDw2->NQ>^g(reX=Z!s3f-_QU4{+7FV?2+T0 zqsQzWG9GinZ`p|r*i!7_K_&@~ z2{i5PW&~Tc^u`P?U-)Nf)9!wjx6Fj|6}VjLVezy?PS1k9+@bvO z=^*j)CZ?*hplJ`PxRj_rN71_h*)#TguS+AH!NoQT03P2pxx+fKA?RC?^BDkS(R|M( z$4;{%P8d(8)6hSv5VO<;{s%0edmk?i{FZA|-kyJLb$A@Z zrlD;bVR6O-9n|jlbwJTKUT)JDk$*`e?hBR1;UH9iN6V@6pKb*h?Wp!2|Dgnk`3|3P zEJ~BqR7;0I2f$?QF|@FO-?@Jg2to#Qhc1{WQs8QUlJ;k%(EI2<5_L5+K17kxX}1D= zuHz!W$%}F`DNnDT4^YvSWz4=RFV9Tw&4*&j&dU1PIfM90UCsOhwBhACGp#8fWxz@n z3rauxyFvG;CtpFbtm7TEqBZg(cXn}o0@&gS#4;wZy! zUkO%(e9x3GoR%3X(<#=vl*t$pr^w63>NX(DSK(jsVVYbea}ElTZT>3fl>#RB%X~Zo z;)86S_+*hw&|?ax?jyHqU3(oPv%XlJJ;B$4bXU)3@ZuLWCiNyC1hh1QV(Dn-_3K2?&cp%<>XDqu)Sf07Q(;X z$aISsU)vrTq}%bFA??v(DiE4Iz`*Dx{EWW;;yl4vMUrqjmldMkZ#C3;EOv8#nW<44 z`Tp8jgbBQqc~#wOJ;durth9!ePh#mPvzQ9`@F9YuLkO9S31afTO;^c>@=Zpa)mG#` z`w>&ttJN$W2i+a9|cz7EbW@{!EkgsxCWh@?)q@2(bA3c+})8-Rpb8=p(2SJ}vZk@sKal}eN z_k9A9nw^!^AO*WJ|8k-=vOun7;n}B*_$i}X%$8Lm%hIf~owi!xlf-CGYX!ka*{I-1J!|#RuqTB<=!OR2@qDfwVT=nV5&vIc$EF4JWbonHb0sqec;S5 z$sn8F#3{=FF0*o+MO)$WR$0+8S)3df-EM!`xl{Y06Ru`2=@LzualQ`*{K}AIR%ng(Xf6sF5(klL1s>+gGf}ETU`6$P+W~|D1 z5GTcrd9}G{CjM`map#O;ym+<>I-gDuMDMPx%Rj;SexrcLclsHWKpJ|P#;3I~bI(C5 z3_N{H-_Yy{`99<@+59-gCay-jqt@^5bv`Dtu&JD*3U)Gqgc>*rRPA)`lG<*XhR}Sk zV0c1o|EXhXjoanK=gmp(^lB?oI_!?I`I_H!BEyFoB zL1xW*Oe>lupB62C)lzDeQ#;(qp|Ka8;R}OhQ+XF!9e>Ss?~5eslZ5HNyP8*-w57Rq z@VdIXuJf&^Q)=o@%h*l)+-=-k``Hd=lv%;Yn^tEDSQ!HKh#cAsio$uHIZdeSWrx36 zdU0}8EFhrtcI)*cr+d9T$4oEXzOR*EzvL!UT*A$VI6FG@{w18WQ`z{JxFR~zj(6Er z#tiw^8w?<*9>84X{lfyz2MvXMVw7Lc#J|J*Z=tHXHdQ)%eY$xEX?{^(c+zs${y)y3CdO#Yy70hdI;>s}~HpdW1kACV|1F7*+AQXNLnnDyp ziDbIKpK{jocj^h}dp~Oo^D!CJ$xfaTmQ)wPVwAY+>uE82`ixkP)elA|Aq83d?0m?6 zt>#GHSsz+InPaJvny$Q1@c^_-vJ!#i++s-`!N-j27O&u#MzAeQVl^p7VMl`YqSn*c zcDl9Diy?nxJ1R3V&F;yd{vz37H07zBr~!3f>w2tQLR`S+=|R2lU!2?KhORP$TeRamnPHtsIx^DpP#>Lr@1) z^eO%nVMWaC7x-{?h*^9oGUo?ytajn94|!63xoLR~arvElA^1Sbxm?Tfqb8%YZNnSA5P(j;=yllDa zC|tSUS!wIDFQ$KnjG{{^)I+;g<*bp+fEJ^@EWZ19tJSu*9#*Yb9|I6Gk8K|OCuS8w zV%GV;%`mx=Bw9sY@N{Ldc||RYEPnDF3AX)R6}tVbBa3b;08y99rC6@+EP4)8h`IBZ zO;D{pxfGb8>gr&^W=N7M>^3|(nX6ri?_M`@PAxpP4G41l;&H3>iqb?0K2zwT(DV~w zaG2m!fJD^D%a}ux56&}6A68?#DhT)G^UmZjg!_}*7VyF7OeUZ82 zwPR*}_*WQdbEh}M#xqPYN^ZxHncAR{QkU_$kHK?{& zq?t6@Wip(!X=qO~0N(YmNRhVm2Mx0l)G&`|%54eHjbgdI)9?sZ6C79xLRvv-cZBOc zuJ^n9ySMOjZo`#5jom*$pmNy+Rl*Aq|u4vM&jAbf1{X?Z95I2@0c**!8;SG=bFF{Xy z%dC}x1-<2us1T-rt1-ib&cogyX#%;e7%Tp&t@-_#zlr$6WrkNogi)8l=&G5)dH}r7 z9^bGU>n9@L3w;v#;`Tm|O8c5o+7t0%_&|XD7Vioz_uS8-_$UH>@yy;2sRLUtdwxaQ ztxX}WJkWskiA>2(5pQyGU2q*<%!(Xp)f9CrvwcVpm2LdZWVkAbL9TJ}6{+I}BGC%< z1i!OMk}WUZ;jVz)ozjf0?nWIuL{55we%8L&Dx$Hv^U{mCMJ3KEN_vEUZ?(U{Tu>#h z%SGkvMKGV!);Rz2r~4C_|31)PyUP~q`>7)KtBdco`FgQ9xQoEJlp(L^5>Q?$-sax7 zeVa&N=zRzRSY8i~Y z+Op?0>c2}BO0`W;`@jRY!0VGtr0%o{1*q`mIcJyZnr_C2eXM_d{hs;1*Ohs?)1+c? zpE9Xo{0ebRu_2D;SD9zWr21o%SloEf zdH_=dts-lQq_w}xnteyy8=95`dppCVBtCs3S-yhLb85Hnf}pu+n)I;s<{b5Cf_-&t z%QsId)^8Q2-7>)qJlLU|M}HX5WhjcXRZ8^B3gi;6?%l$iJu6Z+s%-;_`U%r?2?;Y3Su_xdl9-GTjnWy4+BJTn4gN3oXe;`&I{X{@T7GdAJ`L zwsfn@B#nBPRNnr@W|<4V>$Rst(a$uKdB4%x$K$(y;zocDCBnPSB{RYL@zlNmyqM_stRTx$x;AtYjay9;dbwv#VJ>)H>iTp4XC>|GO5>MIpn7w4 zG@vvFOfUc@AYpbKXFCqIrL|+|0GgP!i8WGOE^7W`(jNYGv(@(xu4S-XM55$x%$|NK z45pr^UId-r<-8guUO@YZ84dedFyiq+C6R+p65KggoXb6VPl2N$+L43jSqpW58)MkF z6H8uZQUA!G32k}uFzxZ*@NYCdmMV-r{tx#lZBlK5S^asA=YZr%H0oXlF6Nxfqe)Xr zZQOxFL`s@0_)S@mLXp^M#O$ne-HvK-L)ZM>!0kIvvl6g`75U2txM$ayfRw~l$>~530Et0EZ&VFu7<*F#JcSx`vv+s>Oaz`Fv%_VL>dU48aw^w zpEFyo_{>Pb>WSYc2 zOoepYlV=n*;UZ9DZ$psfnhBOmf6_Iy|NCYp|Pad=^} z!i^F4)U5^H<^V^31^#L0pcGGLYKkx2O_0YTP{#UVx=q45qv-p!)&7&ILl+90jeus( zPz#{L1?oOadlJoRJ37k4MA~Qj>jR8OJt%6j***PiD##k3#O|_Z5m*D8EPwLNSuDkH zBWW;ZI*V+p(&Ma>fUpL*d%9_}Ly|Qqm8?l*pLQgrT7H6I>H4|Ts3bAj%w=8O%c1V# zTA-`^^1pMl=_7DOZE(9t&-fcQda{P>=IX65UVmui|TjfVgtR+LI1AB|I#8XSGm+r*( zg*43PZ=k~h%4vQ(bm!wk*zPGmpOb>FOF$F(QAx7$*vL$a0C;~uESkxkVz+9RZQe?RG6_6=b_jT_e>4x}eicFb9*KK!x4dtQMsluD`Aue$_UWN6OKl1zXku;Rq zIxV!nZ|XP4RYn<)1jx`gKo`Df?nC;DEA5`+b5kchI<6CCd~_S~%b#%Fu#)yemLs<$-;I^d`)^ZeO_ zuZOjqQVs07$3dEG?$P>(G^3BrlT{3o|HGnv`L!&iygOGMk2Q>SAb)Q8U5fmbyp2Ys zGl@=o1J^fWow znI@9SvCI2T@BeR-{y(XU#h;KTHY_vsK+v+}rKIF(k#mXNk=VoLL{@0`?Lb1=(`K(# z_*->Mn@p4S`Tm0cqj*`+S~@}CzFx{%2qJxJ+f(|e&1@rx_&2Kf%vqn+YNn6KiDa~V z`Dg3R4~0P`%^ODeR~zWl!yMH8Q~m*1fbt4{W1Vao26~OZ{B`b3PU%}im)B@n--mgT zBAUrVsUWlD@cIkrKI(ja*84QR>yx2wgSchIlsJF49^VKVi(iU8X=e@o#Ys&KWx-eA zxQV;yEqhqcJ(}LY5@P#Tfn^$1u|=^XdUZm*Hpx5upw4L6v=5zoaEnoJo#>v}Hc2bE zv!)~Nlfod6Q&F9)A8FCn6C$p@ATUia`*Y-X&9Y9#g1&(A^?dM;-zukK8?44l#Z$cc zng8Cq+cU^;aqj_aywy9ow1|lxSLPdpaNnRR^qo|mT0xEk0U|!*k!JR2=tV@Ee zO$i8cj!GkiN-{a9m@C^j4#(7_GFcu+T9H#%3%GZCkK5m?uU-7}^JtdI?1sehScCqd z1vq{Eh3T2^B>Xt;?1|D2O#flMX|+^_X?LZ(o1wA1tHt%)63#D_=2})-6Tfo`?8oj( z_x_tZb3>H_Y8pu}gQP_F!A%X%ADtrInRda10$5$@pCe^;vKaS%yEXNr>Oq>V3XV;U z$DWJts=ZYxwR2w|z26H8d!B=2%C?O#QZ_xX96|BR*_V3jpN*{tWI>hI9;PXYSnN3S zl~pU6YGG9^(;*dxqwmxmKCnMDEVJyl-~<1fSya7yMKblBRZy0+H77U3ba1Q^>@8?iHBNijtkyWq!#sB_X~ z^}V*-zIpJDBW^l#>$jRkb6I`tdU>^P)ilia^wqZY7-&d2tas)yrkl^`zXeA1|4#F= z8q78v)gvY&i5XqXRw`4bHs8ya@?kP}-z?(mA4bMJ?}u$4VB~6a_h>?f8ano`9#(C; zJ#zqt{lmz`p^QKr@F_S+XQJJoSFOk3$-YZ}^_#td$A=rV^oYcliXWHxt`7T*0J;fo`~0TU zHc6YV_%<3}bAR8F8$J{PK6P%rYq}dbJXSEJX8}7`>9Nyobvgsq;+y{RoR#8Owez;~ zx7_&2Ly5e%c!LFJ)@5F(cuCFZ>QhK{VUz1sg!1|%M0?+78y1XRtR%1fiiCVz%7EnD z!my@f-jFaRiMOVzE+_4@so<|L@eJQ@+B6u9>Dl2v|67iX{1zLl9Q z=fKLibYjj%(zW#h{0mOfnmYNX!z;t(qQDn+^9wJ_B@!5-L6c10th(Fy&~jSFM=2s~ zh6c^D9t0zmg%NH}w6BTrcEK=I-oU1mL2-s(l55J!TwXuCq24P;>{x1i=(wY9*L7h@!rFRg8Gx2-^_luNon8qjCj_Wx(SE^BAaf{ z4a7%%R%*Lm;y|7iJnWyS#}2$6Blu*JAEHm*!79_dI@A8r$>Qv$s7(Pb6F)p@T{et_ z5}IS2mI%f#mTyQ2PMk6HlTyonj;Z=#HST}Y)j1^8oC zVKwXxj`ka3MLR0P-bSZWe>|l=DrUQy_BmoZ^68`di~J{BR5*Sdem3MBmeGHhrT6tq z?4=6(S4l{f%fsUwN`v3v3%K@8pEp158;mhT-O*u@J0h5D;G*BEF!UaO6zx2+5C4;P z*f)3;O4H|ycUIFtL=e<6s~R$3YEa&8_f28{5IB(EHxV_J;wI|Md~c~Hmn<&eoWKSh zyLtWaa2h_tlI4RpqqATztJ*qw;}j&z2^$)MK1TZ)%8@S5n?613N4W zuiT^wm|R#IV+s7vfIuUof@@wbJE&Jp2OUE_C8pK2Ie{s`mcIx z?x7q@g}SmR14J}FvalxV@f z8dK47>Gtsvl%-fElkvT+5ol;0)0y5Nlx_L4;a;aQ; zxyhY#Dmqdpy#*9sFzi6e>CeIRP1Oms>(4gL)49e&+Y=+5Z&o-czpRd@`iD%GzQ2H1 zRvRJ8U+Ua;RE)TM(^2BfJ-q|e>iE@<$s8}K=c8o(muV$)Z_Mch_%EvT6SP#(u$KIFzF?2VVO>vgL zVRU5S$)!4{Cu$<>Wa~ve8eeeaB(c(ywp%*mW2(Pf;#gLTO? z>b@ymyElM_d1u4{8Ms8L%J@rHw(|Bxs* znY3HC{A#VazVdg%7~vECPAv)j7gsaQi*P|@tSv{$p#9H>(`PaTrF0!K+qO{4cR9cG z-Btiz#|gmo%F;pQsd7prJnzH#)X%)Tn$2$H=(Zmdd`LmDVi_bX&rQa8tG8FKy;@%D zg~K>KgqBL6u(2u8PX>vdOsXx%X>|Ai{yM*Q`AGK5IK=WRX13vn))n`>@*{O;=8f3S zE*k3Iyetf{@mYLBs^b`eT1~U8rh#eUL-+I<%9rkPplb6u?KJEBgts&n=pQQ+Kjvv> zO3E}WLn-49FOE%wSAxQ-^jUG>yy5j44Td-w0N->Hn^5L9s!K@RprikrUnxz>!A&{! zCNSBv{(ZgwnH!)Af;4jjP44*vRw2At5Df?e{jR<-9qXbzs+Kz2e&@y2$Lu3yM2i*A z-0_qZxpz}Tq>jCw?(*UGdfN<>^%J^jS(%`C7SP!+U>;5bUmY8oV>G(P2$Rq_P^vh6&ZDd`O{WF!0KLMoRDyd4WYJ?Kn}r^Kt5#yMTGa0dKt z_+HHa^!0o80FIRjPnVXvFo$&|q`-%I#iXf14lO@F&EKX4r(--#Tm#IMW6mrgVDxhDC*K%-t@n3de}l|_ z*UzciD=}Vbaox`cACG!@3Vi^AL>o_o<*-L+%>&A&>ol5)*)mMCDqrgU;i>y$ZT3*d zo^9jJ@mKh8wOYKVsK~ z-zG!!XsVG^!ASknA~2@7qT4hp-tL7VWZ;&}Pn|s$=nUsC1d-w5pzJ}V^Sj4JvA>E} zv?*S3_vNyV4n&*%CLm+9BF$HqfpT9JRHdGgb=krzY9O{b%IJQ;Cv%BqdJaRm_hK#U z?!?ksKz%07y7Ak_DP4xAzUyz|H4CiSaCQ|ilT%`>H-j?ud{I;LTzt#J)(tM#L;?-*r8oAg_t-+p2 zeHF2{l67;Crd%dA%{5b(cWS+lK^%Nwcy95MT41ug-ar*-Y2DU&E<}SVMeStJcfzmj z;P=@(B}N$&nhsQ4>S*p<#!vgs8ju=Ib3;~|4mrD4Tq8Jdy80L9RCjr?s=jcpcE2Xk zz1UY3W1?HK_k9$;m(Myab`;}F+1(+Oa0R_A?N*pD$bH28DrTu|qc3yHDBrFp^SAK~ zBZTmfB=|F+I<&wX;dc-B6scnUC2D`0knCwVr*mF1%CTw1SjKZT6+-IiJt+9_sLXr$EABpVukcG&sHy5kCh~;0GGT*8 z3m37{l5aa3^ZzI8HO2^MiStJtUtU=1GJlP%a*Iy*em8!=q|BwF#F%Y%^_3wji^36` z`ZCMAh`-wOb2dOWT&9WE0AO=-*6G4kTrmF#qkjI1;d)VjW)_@)Y7d}4ef(YR%ivv# zXNzljSFhBQ(La{_GHKJ%pP4d~sx%czSskH$#1y8+pDoHli^hyZSsLwbqi4LV+qhl* z09GADMDU`OIlecm%q_fe`E6`-10$Cr4sXw1`Ey_G(h%TP!3W~fY|+8L2yCw*^}V&u z$E14AHo*`F+mEk9jf{4FuFx&YoXb4AhTf`12zYsEu=(8-zuvttWw-~Fvq@+c(V zYZ@&C?1Wo?=R6T2?u&q$zdx1#Whg%mN#&rMptv0|1F(l?`dF)-p0Y_TvUX?yXRQ$W zGMtQsv>`i@!)7^V&auqw5Wj@mkCj&S&+SJ*AJn!YywW9)n>n=30wc?{W0{Izm^&SQ zgxT2%bY#Y~u;)`WZz$bl-I?kw)}6dJPt$Wh0|HQsp;^6@X7ov)iW@A(d1Sv>$&yI# z`@WTTgt|EX)SiPf^Zc_K-`Mz(2!k~&;k4km2d3^Eoj4TqqkpvkkMcOVh5ju>^{o zpYU^GN%!Xou@4Nvpcx_QSDraEgTn5x7?2=F(0WYamf7-hG zmK$DYe$=braaFyo-5BZpPl&g}9RHCThL3lC*NSF{hUCt4P@aJX{U#k0q(wvd|qF&K;5(hV!|9aA~p z1xBG#I%_?@ZwoYg_Re@paZ~WAOw*npHB#_i)B!;TuCtX|l&2XV!3?qEh+k3Eh>_^% zY)Y2ZPr*x919fQ$zP&`qDF-Xb)pax#BKI&b53~yfTG48(W~Y zyETpB_1JKdET?=CsPXtgT&Y|bag(2IU<+LVTbzDcILtrcabs6iSFeTd=g)K3UStj4rb0vxm2#*L9PMZ8|N~D^bwUkuILP;Hp+YvS|k0eL`CrJ~zFXx`pWad}M_jmIL6& z803vmHTZfN={uIc26Q-d$hRZ06Lj&3=XLWH=RW$^;bg;<-dHA%=z-DHy>GYM8-1FE zPtR|Uf20*K5L@<3ryVOu&*kb6PlEF9Z-xNFYYyc`GZ2=a6ni&HZeiZwil4fek>%ole-+`I}W6W2D zjz1dEY7^|A4w^Fl^%2eLFxt9<#2XhQcChl5{KEY5(zV7D@zQykz2>{;FZ0Y|I-nU@ zRQTec3qEXG@P)($t7VCK_Cyzsv}B0M_ssuQ*d8#> z)fAls73Lfu1S-%IVDkgHpcp1&D=zgqS2h=VPp)AhEVBZty*pM^noMCjySHU|9orJh zC%sFcp1Dr=dOlQlW9okYID0QjNLJh5A+RKZF3^-AM`C&!S?UK-$h{|z z7SFo*oK4q825FMvAFv`RZN#SROM>n9Twag-0z+n_9-c4gn)rREh4!t z=JZ?$Ybm9*fwz|^eOM~4Wc3}?_9|2Iwk~q&Nt=k zKw>c=kX#6dOUzY$IQeN+N63=}h`X4Zx0)WB>Y!}tX53CZr{!C zQC>1`TKV|$^kV&R?Qq}^jc)7e;is4VYkcHeUhSHT@!2(eWqag%u4eE6>#4hE4mF)H zl6kQ?U3CDW_JU!F`vfC(W-A42S@UDP8J%$NxxPU@LR}5dzExzjvuE9X7*5qZ__;Rk zjFGsL6~5XjNm7fnED)i|QF$2B8tZ$|@_%aqP&QFY=hAZuZB%bm!&d(0#W?{73d{R| z(xZk5B6OefU1fg_EKq|}{>xS$7=syVG{xumKh9^ICnUHAKw$oNAYJ~Whg)L~TM zi{6M-G9@QfdT!uTx=~XHzGflHrxkT@Q~t(3dvtVyosBqOJ$_uW=c5O~#z}!+#XD+t zM!B1C87)*SCQTb8>q5@GDhY48X%bcK5iItT&atg?)S=H7&}1g5f&uKYkw&wD2tj$!PCC`&Geu7ERe<@r;6x&nrtVaXcTZi^VF6Fv@`9tP4E2BM0qGqZSGNh-k{7= zRiFJ175P6fN>rkg^!4W|#S)u)e>jHZTE=r~F=IUVpQxBO0C^Y1|A(fx@N4pY--kgI zR2o!3Vkj!ojP8j_NQj7p)aagcv(Y6nkw!wKBu9tDq&uX$8%F1fXYbGV_xu67Uc2sV zyRY*+&Lgl@Yco>AZ4(Xb+=}Op9n7D|4lEEbY`OEoSomN+8^5^E1v4kg=+J%NG7YoX zJj%fT`JqU%2)ZXml4`ZMLL4Oi#m%f*n}LCv{MUt-tCruWnYnOFz9$cCfD889D&laM z(JHxfsT7_kOLeTmcEUEcd`blp=_n`7EPS@UWTzbG2ASywIonVNX^1P@@%vue75w#b zr1Rf`AcY(b77&+_(P5#-`YDeldf0MLXN%xDok6XWjH;-^fu-wzG;vO4$>>o%bDM%$ zh8~jzDb%}3-OcQK@6CnF3QOy2v7^A(n4lrh8F(#NvS2mbZnc$35duk(cwh7R5Amyi zudaTT4HnCZUbH73heYaH46}AglF<-|+WUr%A=VnT&^f=)I#2?;$T?pNSp3CfOqc49 zqZ6R*)v;xLz0bB*8N>B0{fp=x5?|8Ere54WnLj5iL`k5DS?J@G)NHk}M0aK%f{xLM z7pQeb>QxtbPW-p@iC@dZ5fYYYL32fUQ*_W*72et|_Hx9GgT2Igt-q8ZegF)poenS$ zR0%GtQwzE{c1r7m?*TIaYwb0eFJlLUs5>qs&^pG%KI>Is8Jy7La$NpWV(2Mh zHaR7Q-g(swh1X@+T9@s}|5NQ`q zW1f=5KNH`YZQ3DckcjS%${3;(cv>5hVjmHyb(H}A_QT+qM1B}P*Mk*~%1&gfzQJIN zSpAT47nZXG1)?!>$RB~YAZP)e${k!975N)R*2>NB{7J&S1LCnKRm#yguyV~@X6bYc+{fAEUc@j{ZI^%IMmh3`jtvmeb%KE}xh($rZn8bbe zCnJUJ$39t=a}BQbH%VDZ+;j8}rB#qm*EUr8fbOohA0S?Z?MZSEd!4Y(H!oY(SN6K* ze6lcF5#%AQumX5b3Hsvt+rInHkgUe|g^+g7w>Lbgn*Vf72HWZc(INGc;08wYZo5vn z4~QHtpfASVYs=flXM@xF$%9EB*5QVg%Dg9AVwnv~)!|7EUoe)0%yj#nM^ugZ$+DjH zgStTd)}w86Ez)~P_FJ5!A^M= z=e=WmV346|6`X%jg0y8gs{t<(j@X70nXJ#~&D6X+;Hy-tp0P=5-Wns?l4hZoa$lZG zDP)|SsqMZbh$X2T@pIxgxRv!aq`;DH_FI>U?cr&T8lcZ>4fADbT=2V8_cOl)QNZQW ziPmx44mD5MY5TBEdoJ^2Y1@CFFWBXL+p~oFutpLf_-CRmm}S{*;y<95FwI?@+xOev zXy1{>SDBO^4(5ubt3FdqR~{r6L#vcNfb85#?{B}JHYf05VdLWc0`9_iv2oBQ7;R*k zs5?r}IYAG?HF~Qz@ytO3n4y165A>yu2de*M9(GvAg3dVOnWtdt)`$qW@xeieBrv$g z^yEy=^*%p3_HnaG3CZ+Nnw^pE=|=SCiUamnnt4jT$MrmdQ@=kcPO^%sFVIn|8<rvA(l1u`S zN7h@F+{imFX$JoZ7=7JYNBVSG>Tum_ash$1p)Q41~nK9C;6%h;6evpN8yy@OBOw<)}PXh1thCx%v_#$b0h&4-}%fX;%`q1wS zc4VygYEIJ3&W6Af{jb9$5Yn9qEHWZ<8cn7IiRTGe#5EK5`=8`5n2&PI*}{8@p2;N0ZrwGNv;h1>dr<|lyO9&+!q zdzvFnYq64g9G`_#3k+*_dw8u!YI2&uhm%6VZ*U;n%G z*gtq*&a#2#cT|J-+~z@@1sm)Jljbs8-}wm+K!_+%XjjcT5;q6%*}4li^0V(M#{^Er z9>;apWjAz2QnL^_m~_1JoTqTz2a5Gm`3MP3*LK|0VBNU&MNZt z*Kc0S3j`ZSm5|q^C%#p;kXrQ7MKpKt)--HlxMQ@Fxn`Cp$@Ha-qse|0M^hW^+-VLc;O`BnE-z|X6Rnpr^R%FMfT$j*1nt6~^- zKFlMK_0R> z*s1jDK5baWnaXZIIc1^Za@Z;tGnCwEf-khRcXRo&x_O#DS$D|o-HWK~P z9frI08cIR1)2ZmneHzMJHsnmb$(J=)v1p3}$Sc=O*)9_Bu-`5pNXDUqa}J$O)puw% zq47RC0&4HFLHt(tZ3GDoY2-4`IDF9s=Vb=UXO;J|d%S3q71N-Qrx8TMPYd59cN1TWuB9PMk&yvok z3mXXVWg*($@0379@H~WH>tJD`3ZwD+@Wux^+?g$%Hc1MJo9v13e;$i3d*_I(JysckxF&D%)VfKGnM4)3k5CCEVhi0zTaaGNg|a=pRHi z)`_5!MTxP;1YMVSSp-3!C@m@~LZ{oP)VH_>jyHe1=FWRn-CGn&)ofWie8)j-jTO4Z zGhV!(p$qW$bNXi%dyyN@bth5eG<{#~KGmy3JZ6mor z`zfNRXvrz6DVpo?bZ$q^^}Byk-WHit z_;-2O*ZJD9?-k3Yg&iCjE}Pdl!<*|5UCM4H#=FM*Uqfkj;g~BAFhZ?Mm+0xeF6IpI zk(oLlVmy>E_KSx6&xna2QWj<7Wxx)xBE{2V;i$s%+@ziCp+Hm+WbZqBZ+GbZRQwz< zgB8VY%uQ8srd&F<`i6(C7xZz_j%^U9jK*r}kvbau$GnIRbqN4wv=vMclz|hIcrk?6 zN58}kQEtfmP{;Qu39U*@n4kfTWHsZj<=3>qhlWejps|FlO?c2W+mP+WZWims@R2#+ zEuzQHC%g@%kHfe~o!2|bvYuM}I9}s!dh$)4rCZ1ypdQD}W3~DTNN`P6Stoc&DfRZ> zoM|1Va5|&a?(pBX@w|A}WQ6 z$MuOr7l*&P3YKP@n5rUqjl^huxPSEX&99-eP7;baZYrpQ>CckZgK%Te{AC(qJmazK zMgMXTZQaV>U*e?%{epR?S~_7ULjNIhH|-GC3h&}Hu2pLIr9k^B1fk6Lf^L0PnMTy? zpBrC$#}kn2@ZXv>iHP0bl2*~tHIf|##B%d3+$j=88SIimEY@Wu(P?Sx6VkVdHT$~D zdI5J;M!YanmJXc(STN#Pk2+hj{0S!yXBaR0n3J%993#Z=7KB4lh)7(>wgs|y*Z-_b<5&8@j z-mtYFm1Hwfk2N3cm1ceiP}nEU%J|aht>(_r6g{yevACE8GuC^gs{%lfD(bG31HYpQ zzNFyPKNCPt@FVUSiP($B<=-ZCi48q9fVF&0u7Nsi3*)~DOWQBSl9RGYg(50vYO;Xo zUR{Xo+6^V;`9$DxPVhN~ujzuR>iR!xQWMdMO) zKdUJ4f#Z%K`BUF2XGU|sI|1)*>wSD$oFnm>n?f?2fkZ#P22P;VpUa|ve*SHR;x{AZ zuDi|EQf8w+tvVIUNmjc-q~yO$``)%a=rMNqp~^a}zZ$OgUJhp+HZuqYO`b%SWEqdM zO&NXy_cOEchTnK}Pr6^vA6_gAy5*)Jvh$aV2$i|f-E`Jg%Zp`(^yhWx=CF20u8yel5m^{=O^ zU3wkV#Mdj`E-7MUph`+k1HrW5L5?Mh2;x2kxm5Fr1v2)g`I~%y(fONju;6~vIl~&x zz8~{Ov<}A!-iM3rKK>77C)mIGrf+HO!QcA|zC`Po`89l8>&DGBNh|?T8|cS&)Ad_J zUPMQTF>8@D>^kyaS`@^P#C5SmdMI*dv9A6iPn7Z8{38T0_wwN7DwIg{g`fX83+r4$ z`u|O7K2bEedKfw^%lgQ;e5td7W6>)eTKUrzKlUXVO!k>>IxN+QCCrVU7vPkqCr_`R6ESP#SMTwBQlZ8x}khU7IetU zZXnvkIMRn`L&WO>j?i;Ui_PtY;xI%@hRR;~`m?0_rZfT+c8^Bf*Uenszvr2nuI|kX zfg?@2mEPjFRyxLDVr;SC$YK%#*l*HLC1RLe%~yTGv#gpDvnJj_&A!n+GF@LJfvupyOz18{z) z3~ld@R^08;|IMM`3-=-vyww7ZG!$_fm;E(wB>$%BEc*Dh0zB%ij+m1{iqgtVl58#s zSI=6mU+D6GcUIwT6#P+LA8%Y+H!Nt=kPmLK0gkX*2#_y0&plGvPai|n%jay>qfV05 zRy&B^5!~rs^i(Bnpj!_zd~TdJDM7&b%M%8|Xzi-*m$8e_<`v8-| z@sM9)O0e-lvc1nRihygh(up5SRPsD>s#L5F z$kotRkWsZ-@2`Nz-h+C3MdxT?;S3qQjf3Hm{_kP zo>`WO-A+6tK<^7SQfH4(bT5QmSSd%&Omt_-6o*F)Sh~BZk0noH3AOL4wRKw|HvI5W z6@py$#nmWf%)WE9gX1)=hdHdu5kJ)qMd15Z@X6i6cu$*u7Pw&zWJ{jRj_1- z;G~?M)|K|20l^KCY64?EoB{nuorfff!H7T3MU7p2nDqrcf4}#{aI&|hfRFKu-}2z` z@eDXQ)fG`OwuC+{yP*g$FcP<2lNiv~>HVo3Xs1$r`V~ZS6t>DZ)Y}xI{$=JDTCuZr)NA37wokn@$XUh-i>BXB9+8Ij>3?Dm8%*LZ;p9hzYmpR}tqn z29p0NGs*No9MjV0RI;u1)E%)iA={ zj~_ODw8ZifO1>-Qo4S!NwEKQb>&6rZF+62a$mz^2V&;^}ZhG^|6gc=??+m=E85>o- z(iO5ebuMpk`k%Lpv%zuYcEu8gHlL4kRl3TjJvzFcnBo@WFN?U)TQ`)V`$pbtP8Z%w zPr&!c)vq4r|C0l(sqN{rn}3=y#Y%SRU@*uv zZpVu3wg&k;4()-RJq+@ooX)DqSz2U!mH!mULABIIN_4~56+}uz!MQJ~7axI`?&K8n zJ$CRoTytdgSULr)8em~g66b&{P&y2?1n^kG^E~kdr8{&SuA^|UFIH`)WVgW8AaD3?lCiUgSRQgT@DgTN27w6Z+rSfbawC%uA8^k z`0l_rd~#rq6lT<7k}j_2H8nRzwk^QFMaWWwcf*x%d_=uZU&3kFT0?GgqrAELdwbs$ zkm94|{af&mVmMg~!SJs?lP)VhMxeyR{c{r#7HQ4&JTAkvHJL)|>(fnd`DtA<&Caab za@W#fpZ$0@&wkw4HmP2cR9^JfNG5IM$IcLHwEDieq3TOyAGnECvZZw|mAl{b_C@w? zwVa(!Bm1w94}g{84k`mV$;Xa|i%?Cif+TrU$#<6h!N$qh)^8AhG1Z@2& z%&CuK&GP$uQS;U08~w_w`BOX&5F>sBwU|a;)?T&X4Z^OC4rvzPm#8DC$N`x*n&ICr zWxg3gV&+kw6S(Pxtf=DhsRZk~BWy#xeQ2x0vs>v2MB9c0mB9OOW{E<*Q-s@>oyW_d zTMMXto}^1*;OMVy*k)j>Go)1Ne>mQ_ror>?QWfyI>95_yI8sfb(sqX{oR+oCg+wR{ z@Iacmj<14C@vS8qTSSEqEYm%_Ve#i=lS}tng?CVAb;21dk~#7({2OBv-o&>RuLLst zTMEBziPck@>DM@Y_W7icoZ(n_pkVO~ey-_$;{5((DWfD<$VcDumRmv1xhKrmpVo0_ z284EHBYOJ{Nwv)IorQQ$BI|aMY*SPic#B$%wKmk{h!lQpT9+Q=iGx-lu!l_< zM>gYVbiRH;cXrdg=o?@_$leIVblx}0XiU^peQ8~J`(*%%IQXvFt7pVrPZ=2n2Lgb> zL_f}e(+~6szJ{C-C zJPu8ctjqA-E?A=qod(}Eyi{G6Ha2v7l|NW6(Du?UsOrQ>dQ>bE-Htj!;EGNC&nhqt zry_YRC(St6o})D=qULzd34Xbd`XyZ?mG?$#sOXyg9vf&ZX5j$?1SK)Fo}S2wbUEa# zvxE(fnEi?8e1E(D)Fb_N9sGt>?w!Ak`^q!QC5A)+IdE_tZxX`S;V*?ZP_kaZhbfr< z%98;WP3E~VC+W-6vKmP)#|AOScKCR8CDEonvOjM38LA=u*62Oz-R?40hyzmR^hKMi z7;O~uT|ahQD+GmPsmeWWNRE0&)P?(oY3DJ-=rl%P7&#!F=Iz6uOKuh~w-L%kn3Z`o zd%5bod7)wN{W8!Ie%@BFXZ-KT`%{|m%=awgam(QK0ZBQ=W>{VeRXvn*lD@0SE2-aP zsH;J1!!VJ2Q`Y$K3wUf7>60a3vqydXC|#>;#3v?EBScSiUQs(STk5>M4Wz@N%c7OrN#OT9h;x*rZSLc0yjtQNnZA4xbKI!TDZGzgQjgBl;%CAVd6D;rtwr z4)Ua+l%%kb(*B#UD3LE3cFW@j8=Qe&mH-ViT&-_h*5**(z<7xkd*QtV15ql{1Vo3O z_3HwtI(=a^564ITuvW+>(Ot5gzb@IVFbUYV^{#?tDoaoZy~%t@yCmI+3>Vp6^}wl$ zZ|14ge&bzuZFEKS+|AeSF1e9yq!1JNCu)oS`E|?T+;Y?*?ht3WuW&suM(=+9#?h|$ zO6KnceaqK-Z$4^>q^NYcb;JIt1UFdY+jNZvSTybe&SxN)?3pubB zTM$`WR(IoTyElsxePpNJUK2=yDZ}RVrI`B{hcaMU4KcVu5Ls;n<&NwAbRnerB94`D zBCh$T-^K=VcJhn&=~18ZFG`Du0(n6oGPpxPW?Yn|~VP){mN z5oIc!G{n{m$J+{{NBDhe8k-{lGAc5?RmyWGE+<@)kCZPcVz9xoIuC>d`<&fF{?j=O&LZlZ_ttdG ztUehZWG+jrKB+BbOsrdU+mOOO;0k*rc&T|}cSpQrqEk7Ux$BN}?Jd`)l16t-aRU5Q z$dYRP-PVSdr7ZG-3>3|&Zv9j+NYP?cIc9wNN#gB~6kYVDkQ`1vF*&j&k?AeO9nuGJ zo77!fPR+8G>O&O>xNDi}Sf7^IVXIz(Z%SP$aQaDS%vqSOZ8&oLU;MIZz|GrS#~b!C zVDgF9DEbwrAU zOF!X7?4EndriF*fr5`RocPaxC-51tbswaJzHTV%eEnTKrBm6taYH@aIbQKam206bx zF1lrrT!lxiAtsH8Q@`O0J7<3snI-^%T#3P`#HZSlI!CwvUQ6m;CcRjf9S|5LlmLg~ z8%c2puXMyb#?|?t6Y*@7MJ6PM&TP<1V55If&_;x<@qsHSalo<=nrvUGzweOIx;5NF zvelXVvOr<4anry%aCoL(=Q8;PVHw86f-j3H=E8<^5dT*C0O^DJHTAoF@YNwd`T!GL zFgummUzLm|@?9>E~Z%=tz0;pQ>YmJ@$qaAdE?NzCi?YcwX1bk#^b2AF$3 zloZt0D!ngA?Ryb)oj=$Ilp%*c`XX{%1=;yZ#ziGgBIeY43AcNLH`~ihe8FG(LYT?+^^Fb-MMrl{(rh>ywJ(7K?J#oWl8-9n+Glv2U*i9eXer zF)_Pe*D!BADf`&LJIw(lRUaC=tuV5h7*5!j+Tk53>#;2*`u?8AS_0?3n9`ei_A1vz zA2(p2)JG2|~Ewb^j?G(KLY zyYV=-y=P0*m*3qMgD+~II8uC+`z>6PVSAqEu$VLZ?J&GzU$xnC9pfjlv>vWr(X~(S z`?S{Sr@>j2Ou;j{s>n^-ww8~N6zv6Yy|q4Qu}%w?DadYIl@ES3zBR;V|a9%D9k{4J;v)d_3g&#e*{Jylx9lo z)J)GhYq4b)x;ig=9_Dd!=tMl-;hV`=A?%v$60TBo9!RPW_~iAV(t=6o1{{{>#_LRxo;40&;h zV3i=`%KVdwG5~kwC`o_Y z5%j#>?-d77C}~%W^BwT2lZlpHz35@u`HY zX$|w6LPf;qNlr_L&drwPKUUB(=Z?SlB5B&Mt<191lKw0VH;$t?oHyPDc5zsEURGC7 zU8jC%;C@j|P_Qg%9s2i3E=FAI0JefSi9`ZcmZoW9-&B3Hp16}h4AHtKr(n2Sq_F`p z{_hAHT)K~Vf;f#a=T}^c_-H}b)%$E7c>|Jb?RG+yd90y+8i^c{Q~}>?vOCksUxYoP z!X_Qr2knVN6{N9OOMe%tGU-xmg%#}76YIeLxvGv@wqOZ^9CE5D30{YXyor4YG4@o+ zHi=$M2$%tHsKW8BUaxM`F*G@OAPrn(kO_=sQ z@U+GRR*=;IW|DinJfzPCQs%RkFSV%S2y(8hm`X1lD7PbAzROxgv1+yX*WT(vN&{V z_a+ml*6Zl^Xp(y}i90?sbFD&5M0HPz`?o7jA|kyZFkRW^Xg12foNrC<$fU&kKRGsP zN^5h73~t)_UEXOP(e;5&Gl6%Tp5(zzp2|IF5+bIKQA>noElvj}m|{YB);nFUT*HNg zr?zqQgM7Cxo+J-`!BBh$VOsS47yndu>bOV^Qhsb$Lb^UF-H)}5t6=e$eKhc?vI9g_ z|JtsK0ZiCy*8f0e%h)0Mi+0iG*+J+nB2L^)cNAB6AY+2e4vg-1V2^GVp-t?SV%td4 zhQ(#3Orp{|2ZM|;qL5SmCR8>n3;EO47u0tc67}KaVmcbeBWT*9S044??BTv8AFo)w_vf?Et=^v&7I#vv>a{&26-kb_mZN1 zTh3X3`O;Xhl*hstU!Q+^!ihJ|K{MKKB;MrkH6NZwL{U`61ser57|(vYq(N9biSylr z?_A`75D?kzcW<&#T01mkgc2aeobp(}6&Jl$zmD-DDA8DxOMYB`Xq}Z0s$;3j=I`00 z=zj4$y&_tPJA?nqkQLbRkGP#Nd&bv(F2XbW2DW#JHxa>n%W5l7XVtpsda(dIim%C^ zCwbdHt=~YwM(H-pa@S?;gUAsP-Ob`u-GuH6sd9v=(J-@}3i3A_Tf4ONkqWccfcZef zy75o$6Ea{d%lez=O5;MA=0y;_{Tfkz+YOX3qGiLJ`pX_1)9bNb0V;B}TYvDmc*}|H z^4^O+Ps8H2&6alzXhAXPODpN|?@Z}T9krp2KQsTOJiKp zzb+ZVl3?JV0U4%2U}Fe+tGuR0lu`HRvyo<6(^H}dMCM%u-wXk;T zl1>5e3s7wMJO(%I3(>SMg2U(?}FANkhRwDj%kY4TVB%wHb%CZ&Avn3L$or%5&FM>0U?W} z6d|{6Yp(CzXXS9+iYzz@_7Cj%ZW@#mCc7N+tZ-Vdu+oYGXiD#Q>y_K~W#)v=$;NtW z3PphF=M4m$U%u93qhfL!OY0Pj`;=Y3&V};;0pFcrgwLZM4Hi>-cZrua zOfLyFg8_VBW1k<=1BzL^L^-6){73u9vOED!NBD3ChgC;&FQ`>`JBmgI2%XQn9A&NhzM>lUUhuc z-_O!<`^Yks<6$g3)UttbX5K?J2wb26}@(a;6J^+`>S3Ddw zVfy*a?hS0i4nHJH&;0c3!?LQ4mao5yp1aX}xT~v}BfWvXPka1`;&S?WY(VIwL$I_d zWO_OYV}tW-VFpx6J}er@lC;z}>mgfv%o2P$QW>!RYz}*NXfxM+AQ`WEyTQr8wFDcQ z^u!sTtdGPo#mnp%AJ;scnOh0;8`YI|T5h+xFHp>cCM{o%T!V4zbp1ocaOk3?{7-XP zYQp-$#jrhdSz?&NCH%uGv@yR-*UIdS*L}IGaE0fF_q_==A=*^wT0<*~RpFK9;_c$m zcW<|LF_n66sp#APuA%i<{4F*ym7=|gIH3z)v27o?a%5>WPo2}4Q9#eVFTC~9%t0@Z^p5ap!X8$7mW%rL zuT4$v2kOSG1Dd*1E ze{mt22?2t=_`p}UiNq=^iJ4oy5+Z%HlFRXz=IJZ*ufbbKG3eRl ze;VFj3>v1iXoWmTPB)wuH=lQOd4H2C`ccC_`qD;Fwm(^eh4t}Gtk$d|Ax2tNq8jw!ya|a{$_XLlD zcjv4vzaX#!_`v%2GKO!3exa$;Wep#1&4ytgut9cHDgou;ihm6(&E7EC4?*7+O+3Rn z@QZH#bw$yVa1K5PF9$B8Z}q3#7u$AtQ}RUVNb7v0C6?=d`|ph>B!%e^5&#ZuYkHMgH?)YIh!(c-i6z51{J-WIvXY>?;wmdHmAVa5nC88^u)@twD4(EqQw3aWVm(81g@&&K_h1yW}csu>r0MNIWTMSXBEe zSJ_)FQlzc;2NDb%i8gEe)>}|VIY?^6-J{6A)~yyLp&mmS3Gn9KrOxKNNzT+hoF6f5 zD(Q-EdnD+D?8dpU%H=2)e{B~I;ESCmrNN5LFCpB;GUpuznA0pfRe;Zr0S+CDK?jI{ z<;+N1t^DUwOVfJX?_t{?@T-#5hb6#wJpO^E_ersh*?4cD{rhz$@PjV28%SVs`P>Dh z3-=VdInh-A^wH+dv=DcTdYExPpHqnR0P$Z#A;9Lk(x5Y`^nYinsv_)A^8_@W1+-O5 zRdUp5u&gZ{mm2Mx3$wSv{L`37@ag_~-dQ$Ez5AU6!-xh7T=&M-dYQx^TF#JE=P&=J zs}J@btA`t^>@Q}1ONv|SqHK0}@4ur*6gr^M8~3r}?em0`8mSlO{Z}kRFb+MTz8LG> z`usDXM&I*3SGJqGQX!a20YJ+k4S$*n{QH~y*RTEMycR#cA9c)^jq=$ z4xsH6fX(qZ(FW()haecjo@tllu4BSog66OPg*Sy?EBMT%UR*>grLK*}Hg(JR?)vf7 z8Rd~@5zTwdK@hQ3F3(>N32A4<3hux!y3i zwtiDo{5SO_?v-dQGksz6ky&>SvkU+GL*Hw!*Ce|Si74<0LuaJNwk9E9_BO1FZ|PK+ z{p(9iq0({r=LU4eF^uU>!%MdjGdmR-f$z$<4DyyE+`@>=_rx-Ji<&!pzfgU5q<*_( zId9;Ly1t>}?yzKw`x-&zasHsKM1%3ANr|n~yNATns(zv5{=KLY0Q0)sH#MW;LZJGF zL`6dadP`oQ>y7&FAF}tpav$q9+L`(ihEpCJkrz6+-YBw6AD2Y89*{lP5E*zV z;FQai7{lI z6e~3;G4w8v0 z6<16t-Qa>4?g+i9a~m>{b3xirMz0I!eh*}#lFFdAiTCIWZ=kp%4~*W|ZT*!>N)*xx zL7#ppuwKM+{CUBPI+?PxrG0}Lioa(E8tv1l=li4^-6!DkTWsAGCWY8=U3er%{A$I( ztLc|d15@t*OQM#O@8jbDLwo*%px5ebHq*3ekc+r-*>mlN=apf|DN6y_Oo~wznb~s+1g=N^D=MtCYJg12-Yn>(wbuxSc zXKvvvNXfaI^6GiHiv=%F@7veP&rya35)MnWp46_x+dH!vT8V`AY>`mg7YLA97CU;s zGl1a^72hXlW@pA_Q;L0#aEt8J&&Z;%wGYE}svC;Qoni>O8^1riqs;!AP%Sh8)Cw1= z;$OQ=@Sx@335Ndp&3SyE=fLaOpetB5&C6IkBPdIH=Cj!E2ZL(Yzakw$~uM&f>74DAIpqlF&;6LzR5ZeK-%(y_KYocl{@Z zpvwws9ebecQ=3<5hOpGKeWLN1HcP>~zMVf5zJ89>+H=PDD;-oRI%p`eGnG&-5`D99Q6lDHC7A-Dur0AD_at{}lzC z63%y_3Aib-I;H`*E90rpudJz8y@6Dg8Idq29u2H~-~CYR&S&8*gRF?;%P&5D68+kD zgFz2ZRLM_s{b=UKoz-^C2v_1gPvX=z@z_Fhn+=8I;~m(Gxh z4^fxjV6U|X)KiU10y}W zuA{v6-_p}YLI*#5TrWo31nTY|rE(kqs81KIE880E&jW`Yl(McGB?_RN{Mbt^WOZ2R z>zj@b93+FkRmwRIXvyz_4jp(r92=Z zE>qK#={k7zpRqJ_i=~D8iUc(d^3$E0Y0@GOsW;SR|2ru0z0)o}mghU^6@o0p*klE) zL3EFl?#<6Qke~zN{Chdi-c;>585Anr#(9gn69t(%qc*`Q$X>+nvu}-MES8c63PzrOqgG1iH!Sc*LIZInVkP>V$CZg z+T+#!-c0OZdsp16^7`#|b~#;|tF^RuEZ-#^i6xMPcL39r*g7E~C9>&5C7w}<_)pxBh(eitfz)q%}n7Ya77Wp9<>X5e)j(o5p;oX`h6xD3yL!7oO8 zdE-b|X*eVubR=LG&G-f_{G_TjAtv#|U+P>t<8U1erY7h ziQn8l0=R5K*&lxYJm${`mEHjT%_rfje?eTifXr}S<6#Z4&D@y0T zX$rjET+>O~YZMAl4;K4*!sljj$lHj!GRRWUg_0A`5FD_ZzjTsVeg_o_Z0?F^`J2WsQe)ml1zaulP7@i>p^AYGa<%rdv93uSrzMkdcl{2< zN4P|)ZPeNCDBf&Ol9%sR4rJM8#jb1kDYjM(i`7UMUR+3;o_5@6ww##qk}VZmM-e8U zV(t=Pf`8oahb2G4NMd{#O{6fI8bH(ciiIEMGMNqZa$TYSMTa~st(o)2t{F5`RE#bvP1~PE z%{bwgY0ul$R>l%Y*k}Y!-?sSj%K8czZC&?98q{o_6VitthXo(N(=wpY8f zl!@fgG^4Od;Kk(e)QdLWLfIFGi*YBdrux?kXg0W9!f{1Y)x;$D$cUDsvLNY2-&}&b zrF*vJ;{k=8=$gu*@($hdtgAr?CM=xv?Ph6jNB(fKyJqcgxl6OSmTq&e{>?lynMJ*? zHRX!yUv4y*M)`lQ;nVYXwIkYV2A zbhigvFEVqm!4`qE5VyOgcit+thnQRq%bl?FXU~3*-7=cwgXFWcXxfjzd1=Wc*fvRh z-L&FAb<(~j&MbkRl5jf3@!X6#)^cVtqSl7~>GcPpvNgvoV#j>ya(%@*fDNHwo z2{z10RDJvBLC&5D#eTSDu3v7m%?85`S-S=L7FTVwUku@uMrg{`Sh(}xkO9oh@+QQ8 z^1!Dvd0DK@|EUe1e!_O>LlKW4sAWo&hLA%F2=XvFq0%(4o8{@_hzRvB5%M)`Tw}#I z|GyVNU(ip;9q_gES>NT54=xPP9viLIVEG|25eQyQ^ zaMS6#d7pon^O}YC!>aSP_MHfFbhfj+^l^#&w?ar|5Oa)V?78luN0-)WwWR}hD=DRa z|0?9xCPRY+wbmc1l(r{U%g!o(pbGYUz!P{>4@dz=eyTgV)>SjpQczt@*)MnL4GQC# z-HqmbtlGbg8nHic#h#+$#V)fR^TYL+4ciU-V>PP1a}G}X<|Z3-SpGMguH~Gt_I;1! z91yg|zn>Eg%M#(Y3{f}NhTp01$tu`kal49J%5$Z|w6D~(F%a@k!utD~)l_^RJAd-u zB%50V(ODft)5n&%6Mf@1gUq9?uZnL}kE?pF0)R_q1DH0!`R(qReW%R-wyF*L*#&(5 z-FvieSdqyZDr3jX0S0nw7_lmdFOnc1Kal&PpnF?3>XHUeq>hmbdR#v{5dZmbbNp!u zM;-zqgBX{>TwXM1wz!{NXe+f`dh!`Q8%H^0*;wBke}qh{BC|D=;L zUFQ_|oXj*o1s15Qy?aQ0pG~LwU!^+3E*Y8mhg*x1p?ZszNuUo&y2lf>99PgUv*90n zz6hyoKcke%3!^L?%cDir#h%U)Ot|L8PgE{PCH*gdqvHw)Uqn2Q%AOiYf3$#_Z^ugx ziG=@ttT_JjK0EoJ5RkzHr+(p+ci%mmqZ@p0H2#t`xBMwZo+Kv(8(#E;qrKM-in1!^ znJQ|D2mA_f@^h11a)e_zeY z`t!tuofp2VE4<23(VALgyQsb-_%1;KIdzBU6aJ^i!w#qy_&%fYWL47UHDG@rpAYRI z`wtI8;gLS$m|wQjJ2p!)1-g}nKX4J#Th`2DX-oefS8o~CfoTDmt7 zr3DcQr9lbl&W)6Yfwa;{ODQQadNc?~ch~4#{`dX;pXbeU9DB1D+i`E_eO>o?ed?4) zndy9&^$$E~IQ9h__emv4dnQC(M~ho$w{FfGrtUSpc+E$VS^&gu;2tavee`*fV7;#N zSnEKa;!9b+a6l38Z4Q`{!8bp0P+jDH_Hl-UE1sN{#tSo}YKELSB05;z#j%YrvfTVKt|+k>8+M;Fh4e+--Q^TG@K zy{rEC$e~7p{xajI&q?BAUkCoY;?n_Ba?&9GM!Ns0Uf-#jIrU2miZK%`54vsFafk$* zE6Cc|KzTn^Zbbg86=)FRFR^2t(`&G2oMFLbyz9~W9X`ovhf<^p>uGrOQ&!8VmKlG9BwQet#-9WLAB2_b<|t4Sy|{6DaVHk=uLZpQRxvMB~bx zZ;Um!@B8$=+{&sG*2Jrz>3E#`xjdv2@ZIQPfZt_VE8>6TXv(d7qCtD(dFy+ELyr7!!?3-cUN~<;h7m7kJwsm4e zZer8#h?e{PjcF#K%$QAypgPP_Ti3NUsCOsY$d)s&_SgSiv!UJrL7F=8jTxaH{e#P6 zJZI{zH*B+IGI)#&z75nY+9^6d36`}L&!=Edxs%Q?N^Kg=LV|gA!$hoo1#LJAI~S?f zDVk0)XrDjq{g3@D!H;kQ>!AEg8-F%d%Fg5SzA-%&lBv0j4mm%O@0J_>7r(pz!Ib7Q zO@ASN45N$w!zP5i@1C7#N#oeF^%V}?`0!%kuc-Vcby(4NTz+NiCeKdak04Oo>kobl zc;>hAxXb}@Fe5^3ZCw-kO!(Z8I4Yu9|E>^#4Md{GslKgcSWfP^K%L=+{cWqb`LH2L zY|P*;@Me+V=ooE_)=H%Z4ZBLzK4V`HgLUuB^`}|)RGOVnL_Q0pDX`dsK&&J zY4(3$yw%x@HvD|UJ$vkTT7uccGYW)uzPxK3RQWD!dZa0v4xGe2DUf?X1R6Gj%creT zo8CtXh^ZBf@J(%$Z9U?=(N6u0B=3tFu@JLHBq@F(r+eAt(>qRWKY61?vfj{7`Mu?5 zcNc{0Pex2ZECKhNGw&f}3W~>dtLmN?ee^jOZ|6aK&&4;aDTCI($?{Bg+SBwk;6apF z)a%bVZE&ir1*A(5i`mF1jj)I@+OSQFl_81b-l6U~@_ofwy6M!f^O`Zc@6Z5b`x$2y znsGCCjqxk~(1KX~rp~`|;P=AV)bwBU$P|x^UiJI8_<+H>u}*xO$Mijg#wwF}lBsVo zb{;=E=1SzL{nm9wbw+AqkdA#f7>#Vi|F>Qw4Sp6St zt4r^Eyo9nRN}cBW|GBk7VVA1px-<8_zWT3c`AvAZc)^9P5}4Wu20-y{eEewKxYlz`NRy36yWQbZ{)Md1 z(IS9=)n%;b`>R-b*I$ek)vwE1lkpB%W6%Q_GO?u1ev7xFp{Hb-M@{HwtZzg%3n=tOgg&cCRKLlP!opfkY zSJ#xh#XZPUE7ui!Ce88ky;bQ#`#F`g9al*^&#Q!0G5q0f&dl;$>y*yKw3iFrL z8rAX`sSDG;zJMWr<;F|I^1Nl2D8cJkc2t}32^L3#wg&ibTiFn^WG zy?y*f9?tgI;2{F-Y}rfBVAwiA2?2O2EvCrZA0k)lP}_znjjfRUdrWPNDg%{;N%nG2Uu6eX2O4d(Vm*_>bu!meGTN33{9rIVSm$>- zcYX;%uT47#(Ks?q=|}6|xq9+VC#<6&6uhbISMG5{QO^`v{h1~AdZW`?P8gdfpp^^K zPkZqD%TK3N!|B%$-M~SahkF6?^B-(LlQFLzsix`!>lmHmUw^oz5Zuu$$1}L%*^Ds! zPI|$PzmfZ|fr~qus#V4JBF4!XW!{8mNgt9E7Ttn8MQK?)5Csb>OVilZNNP0WvyDLM z{hit$*5Fbj{Wz9?nQ)q+7uKGm`K=dEq_5l0ZBMjTe_s3)9OfoGRvv5xsPhX)f_I&4KRZs~m&+^s z-L(DDzxK8hx>4V1qtjag!I#P|s^=n(Xf^9|1`nPH1c#&;tF$8%eNKNgh!ufBKYxRJ z@zbs^8g-!hUZ`3gV6Oewbq6BE;`gA^Z2y0Tb@2;06^b-d_n)=a^1-Ed3Rs5=w~h8V zHtkhH$!Vym=Ekc66nQD;COHrHRMUKk$w;R8X!eLK5XHg{2hdw=gXf0ciT&cuRGUXM ziA`g9c2$q(@Q=DWVf(H4x8VNCzPiSez(=6Px+}DcA=Z+yGRnV0RcYAn%^P@w@5{?! zsV7kbwWvfLhwr&3|2l>H4F`W&QnTWBT=mNQvuQ)XS-?M+Tn&DkOD~|lffK*VR>kZ8 zUMO_g@3_F;Qar5N&}MQ=AL(`#*7(IG_)z|aw^o}g+k|JMmWy>a?vc#~a3`yR=gGHm zZ^Z3Nem(Qm8jemE1neKS4xobH%oDe3%^hU870eM%S6V6dZ*$V4Vu=*GUbf|fP}+l* zk!aSG1evwX+NUhnuakBk8bLXR_2&O4RapL&BPYKE|55`TO6SivOx^vU@=HjS z8p#=#!T>}(CIqC!^t2N2oO|SmhmTMTHORrumm5GAUmLtAAS^6WY9HQ#Or?*GFl#!n zT-;aN#%w6~kEVW5LD3QMGwj%fZh^e|Ux7%+g3cR*jxz7fIUH-F1Gw>@*hTIiED*c2 zbey>^vbS-KY>~?aVte}*+P90nk65txK}xaJ<5q;5M^Ja)K*f&gDQ3{a4+a#s&pid~ z%cvZjZtHLS7FN(?m`fepkc?0{_Fu*PnL^H#!SU^$)9oMlhC_E`>epKFwJ&L9f9MMC zuPqWR>r(=!CSL(PyTe`Bh+Z_zDO-9ZH;9X+dD2n>#WlfQgFQP^+rRwQ0SmW2==;EM zHkj@X?CSNFtCX_|Y(JX;ez4_!>=U`aaeX>VKIjUD&^r_SSh!j6pkYfXV;1XD^26ns#H|q(EdV2647b4 zed$uGP^WqOQL1fV-saj}uV_I=tHI3mP~MhVO8*_+sFMxyZ{Ej&l{t3~7q4cV7-4x5 zE?S6cUNBTIC@dW?GPbVQfEh58KfV+6Cb_zz92BtCb3hE%W;%6?RO_M=8X(!B5{Dz zYAF6}A8KOR0!C)vyu*3SZwn$t=TA1vLC!)Qs#Iyb7LBzDDTOQM*|(dX_gpkq$fZja z%#$Lwa#59ft<~gk(MdeREt|k~Nxu%tAClG2XJ+e9`_N3#OS?Pnzw>bq3jP(!# znYd*BkrSc_%y{me$z+8cJ{vOW-&beet_TWGSHmG~g=9fiBPx4G`gdX-+|^QGK0s8AC(C&fU|Y+^`sVmj5`V0(Kkk zgzy?Oy;;UB8Q=z!8axp^b*U^MQmBs8km^yTN#;J@hc{w-rOQMyRY7QB1kik}#`d8l zzeGDonl@bd7*=A=zHom?8{+u>=53YI3V{aU9Y=foj`ujb+virw4F~z7yA8K%4RSUU z7T}KY!-wDf(hAjFWI8zNu&uh)==X4GyPOtYb}1(Z6P-M`bFuPXvCaNYn1{*dkhUQ6 z9wi?&sLvZ55PRROx&$O_z&dpr-63m6XVh}W`OQK9AcY>YA^&`no_X+jDygK&cSoP9 zznR4EhNdG5*2*fcl5nFu9F!lsjXrKFtm-i@mnDNfou>avvF?EDT;MlpXN^9ySEJ?6-X?$H>y|eb+gv&sSnmd1 zKXSUAZj75pziSR#H~ox1WkZ9;(E+VX0rEeyQU2%$ znLera*+X5g?cck0o0csNYzPUx?6U-RpCy^fh6=Q8J#oUwn3s-`{!Q3;drp;tca)|j zfa|b>=FMx#3!=C|b5m#`Q>>ZJ$GtRkM*Wy@ai5JyX zydY)Ts_&_SEbb&byGCtj=eX-WeB+qy&w^dYk(%6`7CJsZ3uA2hBOD=3!L;zzT^ckI z`$*4M4_TJc7UTjm#6oTXOy+(IPK}t)$1Qe{JRSmHid8<6Kcq_2Zba=(LTOsa&}+V$ zCc%$1F;bsEMdlf5B^=sdt{U%+l8px;)lLqE3gQWXO7!}VQSGc?yBrER=wmirw-b11 zNuYG}0Q=Khv+TmX6J_}qRC3}Q%J+WLadRG)*PImwY50sTC5%zGmLnEVKg;v_esZu~ zk(#|8F1ko>H#Q7&o3G71ZmN4^xp7#2`Gc-eU>Ph?@8JHLiyV_PtU&i@3VHkm$ zD;qWf37V$4M7-ZM%U~Uphf1f#hb0%vtFa%2q_AebEjNTk9_Huk(?_VLegg+?hU|&PwG4TC9FsR&O?1SBfmBZ?hh|iV~E>&DA%H5+nXfn zfu^1eQlZwy>te|1=*HD9+&QucIH$Z#@jdXVqy+oxl7tyv6ffqbZ1Vn4G!%I1fZTD* zZsu7gk`{R+Pepw}5)AZZS-rh;A#OHqq{s$V(pQCij=Z?Sw8C*}@PqT6Rv?{G8&=QF zVa>Kqf_2u7WG$*c>_sH^O`bgAt7?6*pMFM>B6n2hsTuaY9!DgcJrX!5wa|iHq@VIW zEVg)IhtG&!3+(?cFl>_(Y|#*ga&uY1^2wXcd7tY2XxRaldMTcVB|vZ|mrddyvh9pMQI zSU}df%oIdlOJY|EbVL>r<1f3 zl&>9!q=kQ)Kq-L2c+2|$NkqnnzkEGib6)Zqdt45JsJZ@{^5*fo2ax_`$dU+WKo0-l z^X(dJ*@4@vLS)4et@Aof#Q8Bs0&O%lbpQL&xe%HdvMs*(-XZTC2w#eyDRJ}J8ZtW# z@iz;GVPSdDmKk)14#9~No`H#^f@F`JCkKNCcV*t2>{Bc>kE3B9{eCPZPa& zv14`z*Jw(x1rKyaUK(7tDds2OofCDlLZLxkBsSBjm@B8T{-%ue(6H#(7ckI88+-TlKORch$U*mkA zxGGbP(ln-D>NvVlD2j$+1_oy-LCR!Dgle-sGSX_ z=!`V0e#?y(>$fPa7_TZv&dKH(ef+%RomroR0rCgE6vg~!765XiAtd0+B{%SQ;v5L* zE3z==dh~;JIhTBi1{MA4`w-jl+tb5i9!+0k?9j;`Ze`X*p-%3Efk6D4$&7S$fgqBO zc2Yi?UI71C;ZYm>d+{2c4Gh>n8ZCjYzzdgYwj1go*2cI}Vf%xd=#j1Z3NF*j zUoFASWA209^gZxA);1cBf1JExj&^WNl0P8P+dJVmvZH}QDdVqQY!oFmaYWhNgsPu< z^)Q$Bc1>G!HRJNFO6#W+Sqycj(9xR+okzuM0+};9kcXd85#)^{L8u*n7sJyKwoHx& z-_ILU{`KE^5_0wGCwZl@u+b6MoIC6(uP8kH4;ak%yrA92ZNBi!khMFn$W75;D zRb9$;m5(KyE3RV<39KG^Xx_DBL&scS;{}CN75U|lHy1OGbObzo^xs_sty+gwfR8lo#%ZAYykAQ?lrJ zd8Z0MWqxNevVHOP@>GZ%+oy-~Sim;f_E0CZ4UcZid)MyAkTMHA9IvqwnEB9e{dneZ zkOJ0HiM<>f2|TGj{(Cfmuh?0qTM`_sWKacp=U})_9H_Y=7)qXN^8HDLC6z4I)8Y+) z#O4|6V*RQJw-zh$yLf}1Re?kIwE8!WLD$)RjH}O78-&pky?wJ+TUpA@!OppUE^@f` zorVz_^w9}PZUZD7frDX}Kv&)Jdj(3S?P#35JfSa=tL4>MtUnQcGChz@DJYg)K&L%c zB}nnwTaWY#+Xk+NE#4?BEA5bvK(8Rr9|p8|V|W@bQ4mYxmQ!`#0D_hC@I`VKrzr;A z(K7;`4Q?q$8k(1~e{ZIu%bi3jgaD%@*AQK zfVwD%CVTf8T=P`Um%gUk@ZM1j4;fz25<%uPm;+wtCp0#PE{K3m^ipD<8;PH){Ugxk z*52iQ0%r+)M`$xj?s@5FzG8qo{UTPZ$1tOe_fe;R@Tfn)1fa~!!2@`js{K0m*De^5J3Lj|IXBwzbnbIg`84SUS~K#kB7wSTSxmZNnMv(Mc}$X2tI zZzmubYVyt>dH4rR@>?JEloJXk*sgV|xlJ;NVRoLndj*cl5IHh7s;smkgio>9^Amn> zkle*Lg-vc@lQ5I2Pa7X1nb)izjSL%`oAiD*&u5?TE5!eb+{oJWpYUU+lJ!e$o5Cgf z2(%?l4rBvh1Iz%{pCP(B1hgl1?NqM!Lw0<8_|77gK>s>`U&7|EvFQ$@^62N=6G$p2 zs_J_`HyT?FsaLqG3*8d?bkke%kEqz66C|ny4*SX{vXJEx{K(z%s#Wh}P$r;qPFWC6 z?TAk%aw2E<<`$w^Bw7!Xkj&b1t3uQFS}i*|joo8@D#lAPp%g%&6FB>y#w?4L%#S*fskW4UTXQ~fWv$c*51k?Tpyx`)k7-mw?6x)w81vjuJbtu zgc?#}14wu8J_sp<-e?1=WTU_WXPY71j?!s(Kd|e4kI?)ucC#M~rzF8A?oXI{JVmOg zU6F#!^NZ;9k?6?cgtJ|x(sJ1(Rosl9x=PmJNH{t{;ykmXwZN14jXgmA`;~wLh z+0Q_}T=wg{EAq<~VIb_x2g{EGEFzAR>ssnP>eEEId|a>oIwUhAw(2OBhlqZ2!PeOt z8@n6V;kFZz3GX}_GbfTA1a$9$m^0E7-Q_3hu6;&CN4!Ls^wd@?neK$neN54m=hWE{ zf3SHE=qY8vBfG5?eRCNdSkDcRu#r#v?Sj-nuwvJDXyAVu(V8proQza68iQ-~&MUka zuEp3?d>nuh0@YfK4p2Z1lJ~i+ZiCQnk;G68c+s6&;OnhmOq<7ch6#ri;eRk(eytkb zzy$97*@_AH;Kb+B@{QPUK4bKE;|kXYygv^GWZzmID3-7B9$gY(H0?S3x%k{N_L6s{ zc1FHz*CJw2WK-o;J6Z<>IQeJhJ^Rf32n6~O#YCXL7)8hPg^(W%Po}xXFvTiGCP#^c zFdBJ|QkX?>C49aw6c|mq@vf0uTBLee_eiU>ok>_nL%cYPgob*pxCiz0{u=iJD#&U9 zG6>TXcC_YOh>mws=Xa4hW|_ddrtsLg3oge1A2eLGt(YTOe13>%j55G8W$n=a@bwaW zWbl4`^X(58mzG(>S`Roz%EAsu-T+psPly0B9Nf>V?bwa0h3qt+uIr@!`yt-nY`EA2 z$xmcY$*9v#`mAP#owz4x@EEaWP2U$`xh$dr7$q0+t#TRNO0In;Ms?cE@}Zxd>?r!( zY+U^~nZX4-tksE_{yHDt7#Mg87<->IU}0=!)MvDuj+aX&;4`%VAAbB;|KC`a|6Oz+ z2cA>#!;de2S%LSg;v1~RUxRwv>*J28c#`N|BqEc_4)|l|Bo3Mp7FrM4_pTtoOCL(h0EK$SKhD3`u*%ZRcY)e zCYw^v^3tSLtvqCfGMsfyghSAb-Ck}F--d36saU8A5 zm$KG&LQtRTUe^p+h-jeP)z!w$6cCuDVK+A^6i6(L`O&M=PGa4_w8kXQL%R@kpa&~L zEM5#KYb!f@TED>K+LnXY6D?J{L7P^OFnE{$Oa@*Tta_}&GN{HMRC|LbQMi$wK}huH z(bN@w7y<>#cLJRnN1E=M4mf|EiJ9tJ(`K77m;y*zAH{tm-Zs&LFT0T|iIXTNym{z8 z$g^sunMiI{6>p+*kr&iNM|++%Iz>L`dl3Q%{Ypdr#Y!+kvt5mh27}6zpW_fsG-n+n2QBlzyFnLt8&TF|%dr&#pFL#`Y)Mu@q^oP$2 z0}*(0%r;|hZWrvG!p5J`K~3or>@etW5=Kd*$osfmu=-rNd3!|)?1@&Lq5Knrc3FFKwRzj37l0{<(+m! zo)N5B1J%!BvYy1UQ46ZeTS6=O^^9v)Ww5nl92c6d92fpz?G9&#J0!|?LVvq-@G~%p zq&O{-`#4?i{&PC_fc#_&n90_#^$DnuKnvZDX3{h){RVW6BmkpmxC8I3Fo6E1oy^WP zQ2-*kmSk>|2lIvkmzcUyOYhu_9H!NqKe_KpP7D6Zo$zs0{`tzct?gVApFyODpD6Yj z#a0zt&wuLo$3YPqeYD=rq#3xH;H#J)7VD{&@y`!>6B?C!0|@LpgFg0Tj3~KZ;fbich#b1r>axS&zz!PvyMB z<6`BTtE&pRJ;D6g!aED8k8FqV5~@G1uIehS2O%2fwf%sp<%8)IrqtZ7-<5kQ3a1J& zW7S69A{PZ9l70&{t4HQ{1Lby!ZzKe$8S@7|E#pb}u-7$*qLJSyc8n5MSeBMaHT1+%%{37Qh>Pk#GO&LA7qS4*W@pET%_kmm#+sc1^e$ga0-3Q zB0a9>y6Y3Y)lHOV8fS@ca%yxi3(_?1_`CO96HIDB zZcZLZy&9C*d#+C)6~Z}^?A}E1Ho;8Ta_$hmJnOjt1&4rY+N?7TeqwrHthaj&`H{zk zVGIurV8|#E&kotLLqGZ{4PtDr0v#XE;Qj;AYn@77i$}tkyCqBC&S#7K@-JVOe7Tdw zwcYXKQ7CqhjUoGG_gmB#gXxeBPo`m+mup2bbzu)KDB%oO4}8b2F1nq^1ILrs-U}mA zqTDTPrd}Opya{I38_TrLZM&{*@c&#`nbrL|CYUFXu%Ayd%Qy)wiY;H-%EnVO{0OZsnq7ZP-FdL-sj3=fP3DYn33v(XKtrT-ap3cZRF+WKFfdbW(wyxjjGZ z*ouMl#Z)lQp0wdfAYt9qR->=0HS@A<=!$4GTbPWCL0J0iZJGaBtLfC)V17eO+;P1y zpo^3>$Z5mDW&Me{%TOX>HQ-p2Kk}4t`d_}JWd3xtV&cnBVXXF_UvEL~nnldk_;E+y z6*=h|Tubc((~VA#KGNR4v|NZDibIq0}eE&g<2N)539u{8dQcwG>NG?M!=jdX7wL9v2^V(~in7O#hJU zS5;%sFh%ToI}WbV4!b^OF^c}%+r$Cdx%-)oR~2fTnKFy7ZNm@pdLOpp2M!=#^7zL7 z97Y`LSjfmLb9A(ux(T*=?oRrbu)dg!rmDT z>Nty^Ossb2zsC1*&yq=jo^;7rj%`GL(Z4u)gBgS}9+9=c$VGFkQOD$tKGxL5)m$Hlqe_wB( zlbXR@qpXIE!8q|OX&U%iMxJv=%%Z*_U8F3MpZ#=6Y?SSZuU4eV2Gi2gvfcNa5TWH# zTNc=&-{AmEAzWM%%q3-|ypN@&#+6q1@jivPgzS`>E>Z+rOD9Ok&Gxky>-jc_ArNrz zX!e8V_kGQ``A?@DA6@EoyS=tIzvac5xtLFeM%H<*;d+;M^6+9KqF@%A=5{2H2_Ao-NDJRY8NqvOLbOc{o{Q^!{?na#L~7&%k3HFxxLvSS0mJ zz-)o+88?U{g5slZkg9y6J-x@^oM!7(tLN2{(+2q183AsJzVEEm>W2UAccJ&)JRO@=$1-K|ZEg_GYoKQctoEyOHwS0IK}P5&iuks1H^ zGiS_9`{srA{i1$5CG!0~OGe~isPk$e=DifU0MZ@LA%>+Lf@1Gk!a}>B)eYUZf~jZ~ zXe^`5wa}c3Bzie<100`xaT-Tf9~lTXAW#XvZHQsLDZ=oItHVxRo85~jzqoItskS6P zTpr09llt2ju^VvmkaFw3z4_B$&p8T>Gsq=vx(Dgl<+o_~Brhkv;DS3idQvUVq8@n> zdL_VyyOp0G(YVp`iriZLMfi%wQD6~4U(A;SWJoq_;l5D3ii__-H=E@PCdz`omqm19 zo^^4AZ1=xyu-3gp6OG{e38BA_vXdxYlN880g(7-GEEL` zgR`IgLi^>Ign9G6uG3{7PvgG;`MWM-KmlqStL|wD5%GFcqP`x(~X*p=Fes+4ddlz)Yrv38s9`6!&Jv=)poF3Hf7XZ^hY9q1ceqQ%KD zB}ugU+WG{IsC z9TMdwx9#b8_NN%-Hl8<4qgHjGJr4;4*MyTc4!I#O?o7)+`%C0@=Z^3Cblh828B{v< z2qhEP;j!_p`xA!PqsE%n;;(8*s}39IyXBb}5;^@5#b%o{*JObNrO~^Wzu4B4DP=}t zwcTSx$?2I%i(Z7Dc!cn3KU40Cp#S=J<)|%-(9djE_Vyv`WYAoLbMF^i56cuFWHVyN zaUHR4GG68XY+}s}DjQX4v~S&?RqYji7x?V8Ujp+e4WE3NSI_JZ*4kq$bD!ewsiv^J z=cvvKe9V-de?*n<_Uiz!y8a>LBmfYE1c*S|XH19DzwjxIVo8i^-N91aykPS1FC#3D zak0hA@uHQ#{IFLN*rN53Slv&fLl=3s`U0pwWMljYztMxd<3Ua!;c90;_iNmo8X$dF zcuJn@vcty4+=z|`mF)p&vH&zS#^FvUji&=mX z*8%s(o;OgAH;cosENUO=)ICyjtKn1#tIlT&IB;8x$7})PpraF;7F?c3&q{1 zvamnG<9n_q%{&Qsz zSE*=8<@#T1@9ej9kYECaW7NiXqR+Hhn-yAOPyN5ei(i)Pa6m$LO7o?e+`>GZl(KA5S3;=d1WyI?cIMvT%Vbs6VCLh-2*S zS^mLw+*W@#Rz0wi@g!hN-TZ)N|G25RPo#3Tq0Eyn$4#rE`nLRg*KcSU4hcsyuCbW6 z{66E_`{YN|F>7pWJl4sU*Z!T9tJy@VR_y&V)%^&zU7L(~l|B#29+3zq!QXzpzeZ1; ztUv$Uw_cL}EH}vxgMXi3fv4cruR9#_?ZRVvgh;JHVgurrrU?d-agjDxS_ZR;+shqF zIIL1GwODwwG+^B|asN~Iq>BSf$@0A93I?B^daGgFwrzbHzIy7kH4k;+znPo-6qu1H zq$Oq=W;mJ@=3e`C^}ef^bTOrLT-DcDP-QlwAN4kWrk&z6E!v>N6xtV%a3o*_>5IUkL8M(+ymr>jpS4GU&rV_*HzGtlpQN3uw@7y$r0|+g>pPTQ#pq$8 zJ4tp2ScS%wtlv*qY8&=%YUebs0nSBoO5X`Mn#d_bE`+bdW-q!+fBD@~X!^aR5iZS@ zDU(c-Hs&roR`ezVAQw!#%P3kuTbYo}1jpskQZ{qsTx7yd|0xH&P;K;vw3vqIU_55E z&q%0t`~NC@b#tDY90r|n)26OHlK(w`{T(s&)jzkN%dP7%;*=u8*auSxY-$9fA2^-g zIMht{IS@i$Pb22Ne#)x6?OUsfx5J7g4n(jUUn-7-E4agsLlFtN_^tJua zp|A4vqpCUOpaP#uru`wb*SD?$+t%i$g$fife;MyIzj5uW=f9C5idTut=MirT1>L5& zG@GZn&E*g*`t4*N_f!xBg+9jdJX~AP{3KX@1}44Ytk1=xD)Z-AGiyf0`nC|^Y->3H zDq~_sQh)kfLS+lDdKG{loXVI_Fa)0lcUq>Eq)8Lp&QN0Eei1y6wB>yXk|Wiu0-xEb zxU~EL1Kl5Bjij7>iRPQn^__@mr~+R(ZheEVpNjat2!{WIIt@A83^I}ZUOUoHuviaI z_jvEgQu(EHfEmRQg)QeJaN^?S*?;1pJ#z0Tpu?Cn*I(L9JtS~fBA~m~&Q^f@YeMbz z+&Cebdc&z@_xW}EFSc6(poMz8JIMx#K(~Aj<#-ZtGi{`ZN2!zyfd7ux9D}ih^p+8Y zJGs^_QT37S^E|0JIC06DG(&D)d`YX#qfh4>`o3`*`GC~G7S0aywAOJGoP%FPU)7Mo_=*X(!j>7Aqk zL^m3Nrxfx0bgsw3@Z{x9+X&t;m3xKewTPGJ;N2)oR`$)4VUgZn-|TvI-{0!^CeM7_ zeBCYM^H;pl;UQenEp#4;)o7);y?1+bDAcHrRzVKd17^}re^?;q;cH@~Gkh+$&r5=7 zwWkOPKV>REO!ZG%%oClxJ?o?a@=A@nLXUPos_@^L(RQxumdbUsJ#ANLNe@{if0AvN z!Yxb7rST86Kv_GX@umfVj#pjS--~bXXKb%n*%FQmMZ8`7WAJv*=x%%rE+^z}-Eic{j@+xQqSayZ&rYqN z3QP@|>hI3!40*;3XgKYd%lTAmlJAehRy~53RS%FtYzZ`c6^5A}j34yi9uS593S+hc z-^F|Ij#n10Z!fS}3pP1bc%rm;T|em9qhDw!5|=gf2~6aQzByg#tRQI2dv02^$f`$P z=?VJtSqxhJE5?*XO$H%w-um`HO|Vfbl-M~deNX-xvuopca`u7M=4WJ-pF3A%t3Au! z`A@EV%8k_@;Ftl&Rn!4f9{@vR0K>dq0_iP2W9Io4G+x+-f;D=mx!&%+cDnr>IJEjr zm9%$(OtYzsvf|O%>Hx_tFU!Ls|Jvw_7h(QSY}oL64#E^$Hrlr@9WTi*PEgu)BNfzp z)dSC26xkBvb%lCT%!A|Hnuzaf>UKlb3HC2ARgQ-1WJ>%jZn@OgR)=(8BXb+7f*pWH zm>(HyB}o}N_3H%NDXW1&5_NC^vedo`1bg!0Fpj~m=KB6oH|W6Z5T=TyV-DG#8vF4U zbU{{txcmfO`dUwkdeK0}0!63^1~8Ep(XjO?2|OG=Sezd?kN5F@NBri#mx{{EkvgHh z?hvf*7_w~ZIUB3xDz=}XHcPJd#uS~M?9yj`i3`@*-Ed<}NSZuOi$7$TTroMF7pWiN zDi2KRXfo(y{|lEckY;QG)>FPJr4XSTi;;Byn!Xd@v^^LiEDL7~2NguC5xsyR+om-o+ zD2W_T-^9@);!LICumB%o7s7GQ$OFm$eW2lb@fh^&?Qw0umBP*58+jlT=wp2>J`oZS za3_cMKS|A{S}XX(Zt;AZkS_^1Y=0qn?^olvxQ5NYed34laSl);e1E&vhGc;Lq4U}5 zu5{3F-Un3O`@=EGLfgenA$JW2hNRsME-h&?p2_@P)f-84n*IPsTI#;`6v@7DhZa8c zhG%0HFj??mDU%$q-uYJKNBqZ6a{UF6EloXCBum>d1lM+ED_9PPVf zU+jY)iD2eDcQpT9?fI;4p_|6ftzhxhyMkNh*FCKJV+7a=9q==MYgxmCNhgl9?{9T) zJ83D$NZD%*-etd13lb1Fc&eGOT%&y@BpVT+zh*EhZzxzlLh+fIVCQ+&|H5(DC+few z#bYC=us*p`Fd!%ic8rdcLtv$5dkpcp>9JYn(>w&jmL4AGB{XcZ7p8U>mXGCr$2@$n zn?0eo{@&o$PjtWJ#9j}c(zcPIJ%?8fp;KTR8T5r`L#@z1I(+iGvrF%b12Z7Zw3P zz%!uH9se!m`N3N9wHK~YuU>KH6;b`AX?Xf}%EZgI@V+5k+WeW{;w~xRMi!HJz!5#k ztjVI|9hZa&dm()&audaz#G7tPyT>~(6Zf5DO+~`6mGK&R-M=gnbWK3_BOY<6MHk_F zM+^!TCwg^Dl%Sr(sMPNF3}S@Vlt{ky0C`{jmI~yDZybU*Y(PhhWmk$<&ozd+l>P&tPfl|a^go-&&y&2D8Y7J8;~0j|RY z)wCYs-GuoRBmH;MVFxubz%mZ)c=+wAFg(Lpdr*mm=DfHKa&JYtSnn#qTK1F6;w#U= z6*sNuWch`Fgqi7AvyA+(L%c~VOWKWPne67tV{Cjq?bF?6`_!b|&*T5WTL9-kxCCOu z*m?e-WPjmg;;+L0%>poO=Sp}DxG%dOMb9IMD*U_q1Q{RXW;gLz$I)W1Jr!@&3;Za$ zZc&cWzZ_kdlKjD%_8p&nR@NAwyY%*$hxkWKZ1R6On5|(nil-M^kB(o%JTI_LTZ55Q zI`<4tFFTRiLd+?9DnrLM3_80EXEate(|M#rK4!-x z5v|jiHLXtJ?zDT2Bza>Oz2!XlwQHEVfwh8eP0II*cuoa;s_n$Kbsitt_GxRd#v%FL zm9_ITYuV63jWG8Y9X~6^%7x2 z_9dr$H@l3)i4C4^nC!<$$#;$Hb71(bposCuvrxNmQ zal$YA*vU7}|KdKm#2N*K+e%vFAAczKq-F2oK3XP8J?z3w`SJc=6xZ{3#1qxm?moY| ztrP4YDhvv_hXR7v8G`@A8|iHLV7zT^ucP1NflJ=DTCISeGf7yeC^p&_8o=I&*WVHh-|2-*GNQtb68;E#^n)Q989C*T1xY zulA!bgBFOzfLY?uzaEZqEX(cE1Gr~8Z=4IHx1@zGY)$O}4;%pkzul&R!ml^$qbMd` z|Ezffs7JeR9WA=e?r}w9YuY@(p8PfS$CGD|JJ)Q92 z=EJ~Egm%XaTDFb1C-x``qlV2PzZE|}N;tTfK`1a!CA`1ce_)2qRO#}K$QMP3O`!P+z=Ojk7G5su`CAY0rOY+c|*}-h; zjYwP0O&zD1_>XXF!D$Iox371ToqA$J2U;ETC)A5Kw8V}fzB-8t1XH4~AY?BhbN40p z<5|h~Ux{}CO1Msc~lh!bmM zpK1C+BJANyb@`WW%`@>g3~3>y}5&l4B^G+(ZjVn%;I zvOZ<;m2%mF0?)0n;Sbol4tSpSlEeF}nNkY9Ibm3OZonDq&8y6f!}u?H0lgN3#GNwN z7m*~O?e90*pcRakqhF54oWxcH>J$=uBlmf%w|+|YGjl4mErvC-blYw7d=L48>xxt9 z>Xsmo_4FGiyV>z1L@M|H-AP^G5Sv>!}_x0}gI_G@h3vJAqwZh|S%dDcY z+4W$93hW|H&Zns)7^3I9XOv%n&5ZU`xLq*aiw~1hR57ksVoa3s2sh*Cy6pF?PVU=z z63?$y__B950yh-i9TEVx~z^GP}lVvq*s=Hr+H0F#!L(c%g|bQSUXi6gDk! zbxq}hb%Wq_xy~hl#ny-lvNiX^H2Vlc0sGk|?PMqUCG;UznmvC0HSs}J)eSw3uCD4O zJKLpOp$mejYau=^wgL2Ky@c;U`X&PcL8DXJBP2$Y2}|9}fF7lQuD4IQb@rrmYhxj{ zu1%#|>y@6Cc0Mt`k=}gq;yVuXSH1aiW_MTJmvnXB6d^Axy5E15Z!ef

v8bqzad$ zXghSEm^Jb~!gW`B4I=jm`ycICpG_aqGRigUqeOQiqd5K4-V1t3KdPj0?HZ%3F8hRi ztvd78zc$NjfC?8=eTYF-(qcw8wGamUXVHFI%}v&Q%8#_FjnN%RBi|_!pH$cyb@@KLi$~6|Qvq2=CChJir8v zn%tsHvvwb}o8)0o8VtkC`ZHfD^oVHw3DtIly-_b|%RY?c=JBU^VWK-)^EkR@E`-5( zFJ+?$(}=BbAgN-1Tja2NY%7ybHreE_$B`7HKFjP!I%)0RI5tq|2p8d<4b&lb&8-@@)+pPfzrb!kyq&CtD|u9-k3}`Kw0gn|GAa7y435Z8z{(0b;$Nm3wRc=KbmJE|O^9 z5%srj2iUYU3vs0qxQ=zoZ8|{R&Sc2&NoCj=^yCi8(mN40M$^$`Wzlx1<+uIq2hxP4 zhVJVe>t#GNIYL_U&+~$^_Mh!nQj6$n%^QsXf5R+kV3)Cb`M~e3Wghm|P4HLBD_K0) z?DgM*0bDA7-U&Qni*F6oY)gP4Dqrb0k)o|V}Z zaJI)2G~fYa1D`gA`oHb9;_-z^PH3NOLf`C@mzu4kZ93>u2wV`>c;ET*-LFpOD&oS5 zUc33x?BclmiOQ-?%8aC81xNs;@3S3;Y_pZywhw-J_579pJnfy=YL*Tr@dFA8`-@s!E;z}JCUvYhUvwBF6dh(tGnKeJ{w0MyJFXCe5rrvMM=qX@-tJH7 zaC}`@LG_&63fsA2aGOo zIPr*o{Dn5W7?bYw4GD6O7ez8Rr1mwDJha3N@KzG-J)~q)lo>v;z3B8nXUf$762%IB zY2VMEan3!pM^Sd$J69S(Rxz&Lmu9&a{9Lu zlV}PSB~Y)Lsn%i_%l@^a`0|Wo{iQ#`bq`RuU#?lgNlL6^Qs8%=3p0}-x=v!k5G8N| z#(q(9T`RP(QOUoRd6_YYu+iA)q(EE{tHzkhp%Q9pkF#sKdWAn!^wuO+Wk)Yq42CcN zO%;|YbAlcmbx*XD^EC03(i7usKcI`5Zx!*<{u5}PudfFCj`dq7-r%XO@A1>4LN5(z z{USOVdqbAL*u`CE5@>P!;8eN!^TNi5*KGJoHvGyDaWf+bcokjMqq;?0A%w+4RG(G2 zp@jL_n4z_HdDVnK=t&y%CR5P(kgxvCXcXUfoICNt$Hc)vgwWuqVmrJ{WQ+57>RH)_ zU-*|aR&Yf|+rj?*=VLvU_*EPQzh)x+Uh@-H7+zzqP7jcDoIl?akWd_dEP{@}q0{ZpDWN=FH0_$5wupN0@S*9}428t%$Z3yV*h)M#Ojn zeGGi7BT&qD+B@mcuI{%>4>4@LeE+z@abrhO)B?C@HKj&~>F|}V4SV;k@MT|@tsx@f;xq7a5%F+1S7oE^n2cp(nu6s)@w|+bLn&0@8RVt1 z>_prKxRJQnMf#=_bKCEyPi%2qC7 zDAv`(fc8s-<+{vZ;)>6g$B~^pV7(C`a+nyghB@_FL1pjA{-fq7MNeHve)3HNqfN0L zS==D$6(TEP7UqC7^Jl#ds%}VK@5pJ}dnFE5WxHK4^VSqosj4U6s_X1QH|aKZ(yiZO zx6v5kQS1K&Iou3-UK*EIaW9{hU?eib{JyY}!%J3AKY1c+uoe8~$H*&Kfy-g(eO-8F zfcWff?-CftuZd#D2gEKV@marEK|TEEwSPnH)}5v7x2OtuR~XymSjg!5Qhs~JZ(+;` zQLt&0tsw8w!miU$`UT=}pH);(en8+A-Q>4@ZaJ(@HE*L76Fj)H!RU<9yKq__GJZ0) zwrC2Yr|6srcKwAp`xwWwqwt3DS_euWidTj8*D&iPIKS#$10VK5v$9o<#MNA>-m6A?RrRIo7t;~pBDF{pJeq1tTgI6 zVD1lX^`}lPX38&0+2Etlyg2bqD;G>oFMW*j-eK)qUGl_*^yrenKH2UV=%;J(d^M5G zvzDdwNe(GmI*aH1%|F+p7me+mP++oX~Vzo4;OkVPTI(x!hVO{U5c?@;dR+T?Zu6^|2kBghbcnQ%G z&S>rD#4^_B)5+98c|4yezl<&Ugz~!s&K#E(>r@@6B$v`OZ~(Dw&VQlzAq2bbl`>#h zjumznrSrhVxR*r@66IF*#?wh%EWl09?HwdlGjUB1eCJEY?BGTvRO(cyLP z?4`FWZqL5bnF=WMd5Z7khgu^oM=^swgicR>g|`926y4XOeAVj3gcUqye7X>ox2Guc zwFNGRZRXlYzt8_k|5VaLu{rO_CjMZ%kG%L&`#1rjtJ(e$o1J1#4PMe|2t6nSFKCP; zX>90}d@E&WZD{4EABc2ofMbf2er->M?s2v}8e&D}^LdGwLeXF!`0Jmr+u=DT)81uX z9XT9@;7x@jjuZqNTG0ikzxj<&PFTeF{An2IZ%|)WRH(LCyVjOX zxx8H!7aC?35mrj#JT&?-JzHEu3E|KUq^6hZYzrU+mM%jzfcm)_Uib!{&NDqRx(*En^ddx;pL6&o9hgeCAhY)hn`So zMz33U#tm=#?vYz4ZMMq$gdFj2uA6u#g!1Bdm4nz>x9Z-ryG1*bVWN{h;erM3rjlpp zj~eOPVu=r$Dkw#zB>p983Um7t@#f)WXEwkHwR3#-<=KC z?=i0{mTA3hkJ0I%qT|rwLSv z&}cYfaLqB=Ah(iF@3Vc3}qF?ZPd3Avpie0K>y z!{;X@`!0J0WzI2)4SgbZJe}6K@Co0ltWNi0UgdWLkP%oZXQM}E5WFw6hW#IID~7Y{ zF(4?-4auv|bIQcO?l1X#Z~{&+E-+Ibev7I^>a5_gZYv*zACF= z21e~$lUsC9(XX&nPrCJS=Zcskr?xe0wDV|sh?I1M&6(3rfI?(IFrg{Dex!u=983T}`&`f5agzyUw^Vzqo*A_+?BO8`Oyj0>GAzvg8pD3Sh zf|7R`#msMXd(OlZqhAau*+TZGZ5AKT>c&_zNUS`3l=!>ScorJ__7~pDXT0#a@mZHE ze$MX8e)cR|dET1OB}Hk6gi(~LcqG)VzYuXPckNM0&aYT7;xW<$KeElJjxkP6l1>t=UN;cIv;vN;%8hbJs>DAyzldAcnRvr=7_Sn4oIo+#)6s zT`>B&A-L~Sa*~*c*tPF`tO={1M-$4A&ai*k?%}4`N6WgCr&AC*W7-LhiM|&~1#o{W zf2Gs=bs80bh;~Nuxp{@9W>ZzaThyj%-tm8f_+GcN9DVq4zvqO@?6o~Mq_4C`WA-Ix z7`LZdaY!;&5RH9o7?vc8bj7X97r7~QDwgUr8kaJhP?)RAIx!H?nrb=<4{w!LTzHe{ z3!DHI%?0W23H8D$0Z+em^aXmgU-ZJYTq(|C!caE)YU}7{jfSs;O!fo{{e;69Zlse! z=_~1&-*eVoyrbEs!Q?d`!!F^fJFmigHqS>kw1r6>5wVMOgF--bpP>91*o#{&-7cScw@Lk_dn&}BJ4EQkYr&AC#rt2SELa<~ zIuH@dds>%zJZ{eLuToKDWsIbDro!(zEg|lFQwZ&$-Y#*_Tz)tanlybKBL#GuQK2TK zJ>2mow_tdruP2P#Ds81t)A{K(W97bI-NR5cqjX5iVio?X=~(-0DOKhIP0J%ROJ;{8 zbBrN#kahm*vSSBWX`iKqzheIaePiAkJ2jj)V>{$B0sV2F)3>?pDvZM108flMdmCT( zTvb1AfR^zJhm|Iffuo|VVffWuzB(WK=nz5WhG5`x1m!EW_b4>Lc5iYJMp~Nw#O-Lc z7k4YG{^M5CYqTj_4Ujlqr3AE({ju55)TyPNvd^ASfqSQd+UI9N6FGgN;xV+`-D04L zJ+d{MkNb6uLTTg|gti`0hW{+~E1}#lxNvx)-wd~_dTQ0u>px#^XIN6MD743ZvHhrD z{0C7-xD0&;vVs4uuT_X$NfV2Sj&n>Q^t)8_dGsnY#Iz!!k-iJ!N#n1`p|IkcpqIDa z-%;CrPu2v7XC~Aq!YP>AoYMq`r`f+C4}0M$A}{H|X(!r|?VQ++$Y~2>L*x#Ihih%skUg$q8X!N^GSv71nC~N$3 zMw&{@eIUfW`$2t5;xW-&ZzT98Zl(0wKuoNreq8kI;c{jp-s)%yp(mBzfaq0!`oK(& zQ2-EAe4{{6pA<0R9i`{#0WL6O8(|ZM4Ies2m26>c{%nKNcd00TSU0X53vwsvF4g_K z^Fr!lE(qZB!R^d-(C{R9ExB#?j|Fdr5A#HHRphth!c+SO@~hfbag?NIl*LUVXu$mO zkem;x*iBS^-37!w8C?Q3hNgo3IsvMDmD+|a9jrZQe`*IpQYDpiw%$w?MM5r)Uueh~ zh5pi1zZA|B)-&v%zGnnv%P++Ht&?ZH4sf*z${N z@SJ<}HqY=o=@qoXr{6&O_H)1M&1wB(W&G%&o&t^`f1-+K_qgS8`&bsq|kw|v4};xN=xbz zRyMPLt53hgjT&J}+*{NP9UxQo1FlELi@trDJ5puSXN*=EgV8;WMYK?xS?6?5O=s4; zN??kFh#hqYCu_6O!udxkKebsD`RFMOXowGb2@%QJ;mHJj>TA)>bo0wVOJd+lgG#+J z>vGIs`-R{HR%*O>=VQFY&h^#(j;p{~%Ur!N4*7wYnOGRevyPoB_Bf9UO`)GmkE zRKVJtL68lLcJ&~$ck5litpm$SU-5Oc>mFAYTeoOmVMEZ=XIkSvf4h^Ej1H~)AbZBo zYdUHy93!WADjOjM>T6JV;DXw=+) z!)IPIau163Kg@0&H+U5=^|MEe{rlQW@8l4VzcpQZj@fEFYEGR`e{m?U$T@{Rxlt@q z*=N=vD&8pT{!|QDH}Wg;q*;9IK}y|X!U#c3au4-rn;~cBTyS8Y5|Ep?kmGe7702n% za<#|cZWU?8u{S#4vwMw^wZV6DuRC9R_#lBcE!Rn<#Ch+{$Vsmpp|4b_&hjx)YFTP& zrwUh=<8XQ9OFToXnsm|;{Q63ms=VkKM=V6 zZEv!RZHc>Ui|zTM+{ns$v(;&(&?r2eztd~swyM&~Uaz%JGRBBnP5XqTW6@BNIHyZEt?T1O>#j7YmG8b0 zHHBabmD_=Zik6%+0jj5K(exXkB=-V<5H_wlEH6<_PIWQ?^j`X$-hbgqppCT0X1CM9 zhvTel8~SG80kMmqQkK1v0$7u2V)`#C3akyt`&cTKv{CRnvS`fVkw(emiuLOT@LQB! zZPziR*oMQpHSs;OfduW?K*x1-O``ye@ve3hKT~&|L=($nHN43d-5s2gL!T`{4SUXvf z6WAnh$Lnn2l1mV{%F0@|+=4p`vkGwDIO>`54T8~&zRBPsyeZ~SgM33&j2ckVd4RPL zP4*c`!-jLd(|UVf7@Rq_;xlM+$5-vh6C-} z>+MP=w(QQ|rQc6`?%liWQzpdsIA`;@wz_&5R=Se9owna``a$qt27AC<g&VRw9d}18Ty5TUS zx6+YZk}#^+ZFU;jx4%oa*YcXaYlpk8Q5|1{h!;f_b9cF)4ejjD*(F5@!!mM8n6W!y zV=jx|662TKUSKoCHwt@4zZ?P^GqT7l)8`tzE|LRk{R;L{cb9`-G|tseAX&8 z0NP1U&=vj)WBZ>0So6=C-veqLu^5*xqT}9lhKbh-X@9;~$z^I?xMa8?NT(~g0uWqP zEq@b&Ly`P)47B2Q^+zPA^eygHM&?*HiVW$hckLJr`;0oEqIlro`r-Hu_gUs$dMz_Q zUbYZMOe?6=b@~63*Fw`9E&KY_O-C)M+jcxp@HJ#fZjv7Vn2db!IP0VVz)tGZ~Y&Nxmt|dsXJRDb}i|k?1b&w zlLQC&`ud1is*kOibhn!ku9^o-iEKYC12%mOQ-VUzzQSCa%8q(ScJwFPFFEl+i9eUI z9(&)PO^0f=8wxt=4|-o?%9fH|`Py5}=}%kuqt&4nFT8VP6g19%YABSsH0<*CG3)xz zzQPgB(nkV2d+o81;@$iSVSj4yIB4{rotFu-MmOu-&**-oZ`g-($JIP_KCqIXJD<>j z-;VZ0`B-6NLJJ*S-@ld7`IIY3Gg-5J|BIk!J_btGs9&);;t82$0P32tpo&u&MwSy8 zXHCV0Tdc@%+RJ8HtsZI8|H9XYv*DqFb-0_d5?C-?} zAF6ZSu9Fa(YVU-HV`kS2(55P=dJl3MuUP*{)yT&9tFrRY%(kZQDlMrsWscda_rTjmaIes)*1R@ zve+yYb_wPWM!OkZ-4_PWs6ufsu~>M zI4cf3hAfxSTrZ2WrT0cb%2GG$gF%B;`&gx0F8!!3zISKaX&7ae@a)M9tFach&rP z|7j$&Q{QD=XRA913nAldy!wtWKkocSqYJk8`rG-VH3oz58W>I7{~|2(3V9Rll@?FQrkLN=S&w*FmsuO{U8l8o6 z%Q4ZjlS6kqmX(t=vprt)6_v*rQsj=mBw#+XM}B|#Q2PMGHQ+HXMdww{T#^0#JNulz z#xU!2SlZd^^HHqO%+g^Bdt37DNc0nl566wt#}*ZF6ivUjI#<)x%&aciIvHIzk9GV6 z{BrqjLx-Nnz@~e>3v3z{KKCbJvMEj=%!cA z4M!B4hlI*Qhm97unKta;M9e(VPvYKU80zRB%^6aQ4SBEe*9YO)lHj$B!=U`Uqj0JZ zmwJdFEX0#erJ9!wNfi8&3woA--Dm?S-orM;89;7XsFLZN-UtU)&i~t^Qo}tXPbDCUpDL za{cYEA%O;^HrDLVcoZ7u4Wn{Q3|cE?BggyJGh6{1puCTJ4Jt>_$=i`BL>$O)(9V}qWQ(j~C01$&<PB6VqJ)ZEVHu|Ms8)qJL6DT?(BX!dw8Z!@!nljAak4Qm&Zvti#kbY@tvm=&JI4yx zQV}S@(zI9D(A`3XNo%tzf$q8k!C@20^KZW%P4_ZRG_3q#Vk_^OzOxW8X5zu_Bap$-2y;&2-B#obAs74w64im&4qE*JgEoo@|KHEzv2;v zxz5uw>n{YpyhY|0j=^e^ca}c?&R^|67fXS{-eQ@p>+=6iKHpTje#_!?6FiLXe_3iF zuWd3ah~2)uM0!PrFBm!ZRZ-F#Zzq}{XOVB0JR7c6KyrI zA>Fe7!2?3CMs__<)rct*c5PIb1^}y}4b>1tD;woy!WGeAAnvzzGO-iz@z5Hj_zx6= zP8?U&!JF)TQ)rprH?|Lety6=@h8~T_sbVCvHw*dD{RIxIJC;z(M*dG$F>bnXm zL(vR+P~O3btFR+msOJS!BL-RN<eW};96nn)nxdp&B=p!RS%L1F&FGX2|FcxR3ZSIxQj^a<0>C7T;T%o2CjN__@yCb2 zQn`$1aCDN=^07mK1)doP#KUrfn>&;OJ}VC@!P6XPAP=_sm* zBMQjOho)wrj+{`XMfwY6shi49o1j;FW9tmkjdI|PXbsqoWz*-smSyU59$)Y1x9@oh z!Z}{dvgD?{d#a#|F&=`|H0C~QtGQ82oZz_uUlx873FB%;@w|20LJ^@b6=N%7ZgJg|-x z(-ITD+p(Ee-krz`A7EnnX}v3A-XLSUu9xuZ^Qt?oKCwl8an_5rX0h=x4ivqtXmgf!ihuh5w6n zPMm8f?LS;QD)*_l-?S}uS5hV=S%QaqV|IP%q+)1p?liCdAc`4O32BcSvWBUlU}wvX zFR({MZw|X zpohDAObOBf04rr5OOdZgW~FnEH-4Eja`pNQh~lL}B^Q;psXW7CRYq8cImT60rASWh zRJ%=3EgDIF+0tQX+DI?%ShFsOX}<&7s9;1ZCUfL zH~u{tqSEkf@gC=y;BZg&EEUZvO6tgjbpXdmJ-(h=F_Mqoz%U`AAMaM7_;5sUi%mGU z(X`+VK&M2(;$VOF7Reet;&tL{#ltH{sZ%{p0{cfbclOdQa{7ziJ5yy}!evQ+*;k)^ z^T2?6SkKqmaqsVAMKvSkF}pWyUFYvRfhosoCy;~J@O;KV=Wn#Z`J)LtE;iZ}e=x}z z-zZ+i^mWePYL69bQ*v+g4;;j~On*dqBww zZM&TL4HwM=r*5UzIGt)PHLuI+!O{jEEiN&IVh(zI*45iy-&d+qSn1KAvWX;64_Sgg z9{IAGh{Cp|bnGj>wEw%*{BNc>H%=0!RNC7XTZsx}lcxG;_7l=cm1KNm=N0jIg~{h_ ztXSPyQOx4L4cIgs_8iii?I0Bwc>~;z@AlE46D2@|v67Ja4oJ0L0&!>k+dto2s9zCn z+lMkqdq-b7d1e?;xvyvcnId?Xz035=3JSf(^ZebOvY&`=9` zCmyc{@hZ(B9n*K(H#zZlm;B#vu2E6&|A6g!6F9S=LQQ||C=UdA!}|hkXF?QfBRiq= zL#nb5ptbXqtiSpoi8gRvv$m#1f3K>BI$MPt&NB<7@6*i7<~R|Y--joQDyTF!yU;oL z_AW1El8*iC5B5;fG7GX#R15_Ov$rtS9Y0#R&pW>CAX@-jqJUeUNbfbdchmS4KzVIjSe*y`XQ7N{M*L8dJ)`^r+fpau_61ia3 zLBR?IF2%ljfs1lVWNA|X?uL(S3uxAU;6$NThV{VroCkpYs^62NQt=AmbotSsi()Q;2*HN;)kdf)cV51 z%Wkd8=gH5ShUC%oQ_dcaRIN+j;G&H(nR;SsoWSDUr=N;+0a_{i3 zp2FQht-gkKK54}8H?-~F$Kt|H+k6Tv=Q-u|c+3DGixqOnA;NY`rIQG$DA$sO(V!AP z%B@iY_oWvJ+>6Su>wlQkAL$p$2G=7MNCX@FeX^{vk~GHnSNhqeMuuUR@)-ysuVRTQ z`N+O=HP#ptns(8ePmi+*yTv!i(DD!cB9oUBBFs`U*#y4#7c)D3qyKWXv%U_M{*-~w zzQrR&X&nDVFW73@KE$+F6vv;8e^MILbM!$g8K@_e`kvvKmW`Tr7bixIiYE9Eg-?o< z)EWzmA}RpCZIM}*>RzP=j$I7A!~=-8Bm*23+USuu;Oo5w@>`odKJzVYT=y1$9Qczj z1l-%A4Llp@SWUVVh~btNl}=JC5mgZfe|J5#;C_PzieEng^0N9Z5L>9y?`*~q^`u6v zcAeK*resl7uBbNJR*zBwI^6^P%7t8=@!m2><@In(O_TSbXm=4DFcDRfuL!)sG75Lk zF;aJhG*`wnlq6J+jhersEp*Oyu71y@{_?_As=qkNiDk?FT`pk@5yEE>Z<#vD?kK}U zG?3n!b7KJf<^g1XhntGNmc259!C<;h1V0(PkK5h;s&=I`IcLpjJN^uJ86EN{527(3 z+@7ckW;B3X!u_+(U_heNpUJG1Ju5HUvB}qn;=Z}jb(N}tDNpL%jInwMlSq{0!f5V< zHKr3*r5waE?FhWeq~cDT25?Q$_8V~Xo*5|T4`o1o*g^o~N%gHkp%kOgREK=qN8@eU z$4oKGonno7jdi)=jeG+SUleei9e1Rra#ZITwO>twy@R`5NCbn~Hp1+mkS8hTZxbb& zJi3<-`ZSK~!HD5Q~+d|uyUe%VWt(&S0%Lru)~ki&1ME?8h8}#j;Y0#}2au57yNdOA zRNHY)ZY(DFP<;J__f9~UH8;#$>s`IAsw@#J{uK$xmlDJdQY>is;uauqTvj6XDAY8} zS3sGXxMr*waM7$DPj1`Y6`@A{cF?;1JlbY%lSkK|(cFG1O$;17I`#j~B)4CyokLeh zmnvXRl((4M>%_X!)Gd9@Zl&P&C`LD zNT+H_SrL~b!XD5H7MEDM=KMbXyTB1Xda?+t+ShFv5$5}`Tbn<+1z86@?S4+bJB56b zk!3YQne)$NYshN$*5r2ID75Sl7_1jV3=ge%Q?DWnkB(0Lkc~Ty?>Bl_T4XtUlF;}TMrg#13Nn>_`k_j>6>DbP(fW1AY1kG%*zUhl z^g2_fL)H#H4@JfcCKPrb$*c$?R9*q+&$uOc^gv6`H0#w5kvq@E`3@=G?an=hAC!YL z@oLUQ^hJB4ncXZkpve%VlVmscA^cGyGW?qZg#kDAZV>!*4%`;@w*7%fGUV@~No#J# z*RI0Rm_Qll(cXIRd`<-emlp&kjK`Ot^Sa@@s=XTj7JmUf_F_EDauhJ^8MiITC&4Om+4Jyk`s2T+gSOUJ{t4C~@-q=rtg#(a zNO9%ETRY7erbXXY%#~C;1Z~cZgKPj}D`Uin&Xq8J0S#=jA(t{&jS=TM&3G5eQn^fc zyxeCz>_gDX?MG*I^*uj@WRDh4sn0muomag%m?l58+h%5YIlmNgh6>yZV(vX%;O-=S z9q(lNkB7JH|M2iil<1f2X~M`0673qLEj@+`HCJ^RwfBgnRFQZ>ZV` z8*UX3iIB0=l9Anskk{}2Mfi0h1wQB!#lcEPnA@G}MjA<%x7*@zgwlIxKQVew9(>L zadB-zWxzt$;MyDydR9qnTjMwNAam9sS|-zKuW7!q)pg3Jy0d4( zJ7O@7y4IFW`V+J?<+4pk_ez8K*5!8-K!6%(pJNcP|6cWr z(1Ba@KW#q5edfuh<~fHFzudsF-K|9HSqQ(w zq8K6Ncp>*}K-F``Dyx8_5`8hY*d$fLgx;%_oR&byA$1r7?pngTsY)aU{7$DCtH+kJ zL>a(HdO(COyGr_bz%H^mM0US@$fkU&!C6GkTG_{`Lfq(VYvFg22n?PbpT3JzHk`Nw zosNwAQ}=-zfn~v|6cXBg(uCho-yGPf-3qGpWpG6Ifw9H8>Fa|pu_eRMeqYJRYdm>1 zVGprh_8X|hIzF$BGULG=Keut8KD19nmen0+?TS%sg+$uC1ojs6Q@vNUa-Q1xhBZkbmtwPB z*M3eQh97$j*8!>_Fhz#Qvk3xybQ`i|6)8@QJnTDNDz~I=F{F?9@WXI&ysf7G;=626 znIp~>*PYzUD_RJPa6K$M)5i*<#-it6IrO?`q}Wn{hyMF401W2P%o=3{TaS7LH0ffK zs5j956g0(DZkbL*Q=W=9AT`Re4L0?c8f8 zX<)xIdj~7UN>K7&xl4Ojo-p1GIMkboqv0zyy_?a?XSJ=yttNOb%L5Ry9dg-J$({6 zwOCd%TTRN8#0nQ&CG!PVKSP32)Y`1gd{X)XN(0ZWPcENqQ+udq+mwZXTD@>~_r@SH z0aqf=!wrFQ4t5=6r5z@z-&TAn39P`kb=FmnG7k z;~@T!^7+I~QO_4+9>0%tS4;|f)JiN*eO`XLHR#JJwuyCZY~xLocS{Zx>F@DppDf3z zp9lI(DEvP)T^!KN7&I`_(nqYw>CI(;>2aFQQj~e6QdK{!amIv*`btM0`smZl z0*4y0!kwz3*pxQgm1_Zt9WrVXik1Fx&VJAS%dSM3H5Iw-21&wq93uUh$CKD8dIm+Eb#44$FF-`4tB!@_-c`NxxNPR`PKnX3e9ghac`p zf0%t;|`>{VDjp(HK6l$wf zP`QI*-=)NmN>2Jbx=1D1q?I&+6-IcpXT^DiG%=3Su_)}*jj*rs29I5#`Myz$2L0po z1bLO7B5#>b^vr4%jLV}h8=Y9HK6(-S$}8W3+ToMy_zCKK&Zg zPakH3YHJwvYZ+YvXE@K)b?2?HFq#QwaQDG4j+{KzryC+dJrUGDCXsz~E!C;|+%!^c2*oy_h@P0tr!RDjr4du{OXy zsKZbbv134m_>aNX%GDiJLpbH!R(u0o`IAGUq)@H&Hg6cYy?@P7`zYkGL@YMKf$I}q zQUeeeh{YYdf+@cLWkVcS^9{$(+fbz!KnzD*Pk179vwIAkU=Mi|#r_ytPh1cHl%FyeoWOigPT*55vFYHCOdo zVmRlS!cmQxoPTUn{0_k>tA|Vq?f&CFq#V)Gk-wl4=W0iu1J>ggQp0p9zH22(S{wWu zfHX!}R4&y&w~}^yyvWErb`14=Q333$`)ei4c3eIQmfDml{*g+(^K<0o(;I>#^kSFE ztlNEKQOajaqxU-HOMq>yQ&hxaA}rq?Wp%_I-Y4J5F0y&cd-9+$HKP2m6R$@^DkGA^-0nby%aU2NB)5Frf5kBqTo z7Ev)+F3h=Zk*LPKDW}>(It;?l3M$j@ncp3)pn)}C}3yS z?tL0kGWeWSE*p#fZlPbU&2EIPFwPJcl@!8S4}-SFzGt=4bPC!F+=+j4jkjxna*v2u zz5?$)rbrR}n6$%zL@=bb6fR_0m5n92qt`^i_f;#Cfn?YdB|Qtp4Mxt)F?UYTF?ILH zo^O!Bl3;wx`uX0lOryMz=LF=t!*Gt!0Wa5wj5c0{jaAeMXP> zDy~Q^3AcAZqvHsXfriktw1Ak#pFQN+m4xvD<&k=p8IQC7hpqPvYU+==MkxX!O+^8v zL_`6lBVBrt-b4&N^di0Y1O(|-x*%0RKzgqMrS~QsLJc+a7Lt$~|Ic&poq6Z|#0O?F zCpl-I-`Z=hwRQ;%3_EI{CEyLc(iZ_ek8qI3(s~51{jOL$5#b{+B_-VJP;%!dq;P^qrOD=yX0D|kz!&PC()8$XWxdkWV!|_}Z zdDa}M=-?y=oWZf#Ask%}y3!beNscS9eexc?dF8lWIWj^Jv93tAJmz%lL{E9Sd^^-C zc9*S1H+wR6i({$OgGoe?4-wZQ{Rd$}Pl#@PFb^j$)&1r5-H@7Dj)N^xk^I+24x$WdhcC=Lb zv;lmnTKu1e4BQX=hcHH{_mGAa`Kvvu@r>wF7F-@c=_MCVCmj$y<%;{i-w08Q*V=}~ zh$?Ae-yZZ+Xx43O&7K8cuIuvf4C8D*jz7g;y2Z_7&R~n!)=d9eQwxeaI7R$_cQsnC z?50m~#f|)Wp!dS+avoZ1WPb;IQ}%0LRCZO@v|5#vy1$A7jQFfLC)~X}x?O?0RT(%{ z|EN7hZdNTtTL5Aj{n$GK&af8A@y$K)zaD%B;5NV?k2AZR|C7`4g{J)LBK#qDn{EiL zZo{x;$sw2bO@*;Lmb1&(M&9;~n}P|9v$vT+f}M$0h)*l<%>_LMZfaSPor7^tt4l@L zd)8FKW?OdWI6<~+-29`!;w}en6dgk!b6^1JmM2C;<7Rij^chg*7*5?Yj81@{x5{JL zTA3H%a%z@IQ`~h^=tL)YVA0~roUQn;ZCVv$NgA_Zl7dpiQ;!l*G_Kou;T~YDc`aFT z28hUUe>f)5?NfB)ezEfVgA<>H>&%LI(dH4(nQ7=lJ0${Dq7*QSrvB!e@_cAjpCrGU zm4;T(0XMljot@;vF_nfm`;jo{EG;#Ov3j2WqDl2k=A))Oe6`q7!gHk8ala5EwhX*n z-W_mj|3Ho7wVlEGsmM{YKL_3D+95uOX$oyXG;Zn_V)5tW2k^f(?H^jR-LOc)32WIU zH-YHQI`=^wGH6soc(-H?R{%S_4u+mz!0zYrUcpi7(29_8JxX-+mpr0}dRg->_WqEr zh0Ud!%Up=FaI(92g&X~#@Gn~bo*>-eeVSO(XU#_y!w12&B#OA!Cb2p(nq6E@;A~KI zXmv49PwpQ_jbdyGK zr4k+S8XM8!EA?>Kp%Km7Z){#HB z@=%)DR*fcEXf$KN3Bei5AO~>^1B$7FfA^%E&X_{JQ_Q{{r$i6eCp~FC%FA2w?yIB{ zY>|+JyqC)Mn<=6C+AfJjBClTAYl0p1TX&R=E8BdHYb`#l94_oU0}Ea$A<1l$uTG!`!u}qtM7rcHD1Aiz<@ElKQ0dIM2=@uZ3;N! zs}!6{jp;u>cKGQ)Ltwx@Rg7ieb#;Ih8Dh}@YjL~4kcx((V5#+$n09{AE2oc2a+6ff znwVFA70z2IXSqIcS1$&aXBKu$)5iVr_B4eU^IpVLABxWjtE{xEfNxbo2gd~&!oiu&!tL4?b z+*r#vhWXM0W8S&vNwArm0IFR>$Q;hgt+TJG2YK9is`r#(c4_?DZ0QDZ-XL0#6fCzt z)iH1hL)uMpYWIZHB*xp0s=xcM55(bMYSyU(LX-bY;1xJMW@F5NYnTu6V_TM7+)LE| z&nv!?gri0|w-Tj*Me#m~?Zl9G0y7j}>RNm(bOO~11y^I9I^S~U(zh^G?5)rF4bzk9 z3s0x#pdHV)lB%kvFg6AnJe*tFQnaGqIB`ar)hFM|P#>96h|PU-0y`~mUaEo8|4$71 z&xwCJf0J~?9Jo*AKX7wui`inp`K{cw19ooTLM*0-3CFP!)AL)mnHqe?N9{7ULKU@* z->1{CU#S1R?2e;IM{vwNGfYd!K^}Er*mfWv$*dM<)6sUX$e;2m;a6+n$hZG0I!U-N9TV%^ zSsM=Y2r#Y$t7(vMHy+_%Q(3unc2s?$FDSp#nDwSF5vdy~u7~ZS7ku6#Abyt$TQNL= zDSo9(2NJ4<}uC6rDfjUPzBgzFf5qlltrssHf}>-nZ`?3(in2{ zGzw#oRPhp3hA}%dn0rAjmd>l!GWI*IqIr9&Z!65Z_;NFFa)iz||7&oz%85#R#rnIm z@noDiNj*9Zaj*)TA94YDT(+EtfXLyte5IX^fwxKy8&Jm&p_#pQ-nG=IM;TBYA5~QP zw5w50Y(6iI99%gJgWSdDA62K#Ln_s9+PhiD{bKB2#q;=f;Ro+gPiuDUBOE0}b+&g! z?g*)^osIBs{(1sN+0_|x>oO5g^2WR0SvnWG;JRW{u)|*I{Zp`P1GE(;J_L zjD_Sp8v13o*=5Gd#{VlzJrcd4M-RIJGHCZOox&CxeRea(5;ZZ(S-e39cj^h7;@qP4jSfX} zpf0AK9g8s1vkW|&_1P)??Pf zh*mY03);nZKmc;YO#HDE)klIqep!2Nj-XAnAk_ZoK~wmZ%oz;@t+5aTH$@Iq`G1}0 z;D$?!>%z^CBDNR~9&Mw$Q`;IX%>Sg10%OHlzE?HaOOQ6|u^{M!+=byWo1^V{+|lhsv=kUd-bQ6W2HChBr;R;&|iT zAtY2Ljw69z9ZBk>7vOLr{4w(fUu+^88uUrtiA+caa8P^ogOxPngh3b^nkmUg{aH7n zTid!>Mm0KdS%(!TqMq@D(H_J2Jk;4wHXbWrq)v6o& zr>jF%1=ipm%+i*zH-qQ)*jzR40BLW9OI1%!h3Lf78T@4VWEhchmOs;>)~VV3LUk^hj1phAun-bBMZe(*_~&a)ZNSLm#z`Y$ zynC(x7ox5Neoq3ybP{FaQ7QE54Y9+u6Y8T4~GIIK5#wLWoCEm*#mp`gEj^2=KQIuU}uyVf}lx zv5A0ZaFfH`f0k|wOOtCMrvC+-DE5jP@JQ=Yie^tSwfi3LDed}k*V3QYqkeB!3#}|s zl1F6+#_%h52FZT?Iv$93Z4Wn2p~*T({S9YP#Q{~E$q@&sT|`N6uH8VNd5Q@f?XdQ^ zGAnSq=BNzZ`YUiZegS5m^Muwm+L=@YKx;V@ra$@9)^vK9_ck&}q+G15h_U;NxOpi4 zWL3Qd3Ls+PlM{pW>+0@jyxU}czs2a@Xb#cnc35uQZbz*Hx75cX(8(ab)V_vEUpZVe zuJj9gMfZOubB_4`be8rT!7{}ECl~oY6d(G0iH8#t6d5cJ8ue$jMW>|3oA> zQ#$hdq(Apnz&DI9Y=3Bzk_vINqkguchiO+>8n$n}pAjedZj_I9?A5~K&L}=D;n^xO z!7j9FDEbQ1@tTJF?ne@bVTn)jcQr@s@O0@lABx6cK&=~p0-UCzJM8SZo^&g2#zSv! z;&&g@;u>$PX&bTsPwZw((%H6P*3=QIp#IKExd<+jx3O#{x0h(`0yjm@hkPtr*!L?} z_9RZT&-QH|#1UFjGcdk?7mND@hqKpo@cE0CXV>MQSN53jc1qh@&l+Rf#=pS=jd(C2Y{A0fsI-a_XZgHmS#`v`x1xeBdxki#8#Z?oE)gK;6$VG;jeuk%QA z{a@&g!;AgeZ4&9T9s+RQGBucFxZH8+H2}}HMgq}}LwIF+cz!RXqls`~Q3?<2*=VeB zaS#89pN8Q7q`cp4dpj%jg{iP-WgEYTMU5&);?9yv4ZbaU?jOPk=oUS`u+#}oGq@Pv{ zJ)bzQL<4br21tCY(|7c|BQtcItBkPkFN1wfwQ=j2g~KT1!yqj<2b17uFza2ZJQ5vI zYA6p{Q6;$$AFlq1j<7zcN$b(>wFC$2!P`bzKUho zh-{dleZ(+ly>GnzvQf6|k?r?(e2ci_ z_1-$iuky+rp+WV=z_^7_F}+qrqJyIaZ^c@k|Iv)yb?L8S#Kq8A*}$-KQ;kC#)<(7Y z=DSK|TEhh}(96EPUb*hX5aYBx)eDIB?jiEi8=74R^z4d=CATV7)2j$EW3Ut80Rt^Dx4>GQ3ONF2ohF z6rZo4VKOqIqNkcyrif?Ahh&tZFhB>EtRt2szJ!7Q;yO&X!*op$_cH$%TiPvKl)kzu zXdwPS*(|njT!2Va;WbweNewf^IOdHLs3;!YQ*(5Jm2kSflZR%CVJh;?kV=~sn_*Ej zcvf604ZL@yz=S_^DHyS3$FpT}V`zm@AB#au!n`tO)EGYaGk8>U627I($@320XWUV# z)Qzfaw!kl~Wdou_EI!Go4`$>5zjON)`;|77wxae}+n>Zs_8}O6@5GRRKd3D7AGnL5 z!d=W_?CkoMq3Zyx3CqUS@&%R~#T}rg+hd^jY`JPENl>9o47l>lYeKrQ3?p$GDOHto z8-FQSNPtC6o7X3yap;1(we)8L(@N zxmCWOm6l|Ueha%xVtQqo93Vg=WBK?&mZN`G1kyQWS`W>K`Pc!R7&#b8w!aFr&Hzui zA9%0XC^-KDl?n&;hihY-L^eQamPa~9HR|^U-yzQ4gNzRsG{z>-JL*;#V=3doEoTp_ z*(-m^!UO+JGW6AX#j^~ty@$J}XCSicn@Ez>AUguD&7y+@?CNZ)y1=719l2%b7)(i`t^zFd+l`1&T#&}Cec7zNA6P|;SW6lXSV!xvGFpBztH&5U7 z5}`C=6uF&)#VMe!$qZjKuHj2Z3kW+q;K%RQR!Vl%JM)!g^KL?VC9;7U(0ynbo3F&Y zM{Oq`o3Zywmy2D6oYg41`oy{c^TZ(+`V9(QxOJiKDXkU+N zK-S+jOv6t2tPuE8mVgcaql!Z_K>5xmP2M9i;oBaCg=!UfI=`CpZc`f8vhvc>y}r=y zbmOxtD~w}mpH1cQ?O(EdT>Kw)Nz%s_wgIxPyj~g`!(V=p+wpKXvXW%$EA{M`cKCLQ znH4$GUv{Td{eo`F6PhP2`S!TF=434`1qp25EIl{R{|w15~!!-ArxO!jO58n`O7nC{VPC*zioU zpMBqYUQEiVr{#eG>WAB<54w7Ep0oGD>kJ!Zcw>WZtfv>d#r?jeG3|g=?FJ=op^5o_ z#}s9{&yGfnR~MiXf;=Nh-xb|z3%|{4hwioY8_^FSpHpiTQqd>1o_5Bb!OX2re`1SoKKHfxE8$h$Ckq!_>+&h zv~HV8f{IEmdt^X%WZRl*0bwwuvw?Bb#Xnv$jecB8JJm5W*pIjUfmlXpbC%~3AdcFI zIdUWm-E{A5hvY+csZC-E2P@I81K5q=5m&fW%u!Ef@B$7rIi)y9Bi=e;j_e@Y#vd-1 zVUitJ-0_ViddvtZ&*&@*ua$ds^()B>iomNlS63U5*`DfbZWMob@NqiLRX>H*#&;=g zIMDc@IwH+p(fCQfo-ldk1+93V8sOs1rMOGBFi5q_GwwY&F<9eq+CuP{s;u{?R;`b{ z5uyr@{#ZA8IJ|FcY?DOJ)HqQQB#oIIHV2Qn-$fx1-u@Ex^9R-)mkKLe!z8y~+uhEN z4a}Fv3mT_0%uyU-^=#2Ct*uNof3 z&w}lbGV9B_Gjn|VYAzL|w2DB-mK;fsd-wIqetrA4|Fd{6$6Obk&o+VQX=g@T(Yjx6 zlpdH?JYb#E@x!5Q1L;MC4J~{q4Bq)j=4oFk_A zf}(eVb${k50jqV$^!Y78xpr~Uc0q*=5TiWbgiA0C+|luBJCM8Wh0`WBKw-N+efyf1 z;UNJFy$K(vHMpIu$Sk5CUPXX zDQ2U*@l@&~#Nu+ZZv^I|h!DH2v#)GV1sq5UzbBHs!b^xs)JJ)CHqH_F)jQfFnV(to z(yZb}1_obX6;h|!+1P%!Lqd~1Hh#Xn5=I*@%1>-$jjy0|&$frJg1_K44C$wZN5+{1 zx{9K`dFs5ADx6!Mc{C+?blGm8JSLqKc}#5rO!QmFyp!vr53JsI)D@==7iWJ`yyoWF zXywPL%Vr4J3${xHWo=DSJ3u4!VirN3E(NUYRcQgwAd92|-SA3QBzr zdn)8w&E=P|)22jQpVMnW#j%utm^Icv5zS)sFopZS(?5ilz3Gyfi56b4a!Q!LNvv^2 z9;G4sz{SG|iC2iWrEo-x*ihx8l(-RSu(Oy0rt!A-Jd+{r?hSfm&_HwpEM=_Gx-rW+ z6EZ89#pn5Vw1hDnP(YkGJW;Bnd)%dAN_C4k8|n@AMm-&Tb-BgzMC3&4Ure}@MI$4m zyHprUQH%QMKaag?e6aVC5VJ(sNmJecA_)jD0hvYH{XTkEpJ3(IMrHt(Z>;UKdh>1o z^$Uen5k-6s=c%}3z1iIAirJm!CIWw3cr0_~=GkGFUSUFyr)!TQUF!@VOpKrFi(Q~6 zjJG-HMSJt-%+Pwi-d-tFJ32#HABZ#-cZ~Gx3_Yg;x(D+4~P&(9-+HRGmq!;tdCo^XQ??m_>sYzBF#g(mekA zoSc)LfYKM`Ys8xt1WBkp!anB9(%22lM{^=7RJ6Fr@2Jkq!5c-$B3SS^p0w@FuTyPC zgUXfSEO)XwxGTN$G`3?gc?xiBj{Ob=CK!oZ1DBHV)p>o(%Wk$Mb`A*QxZw^tNC?7z zs4HH)^4QTAK{rwDSbaQ^zG4DC{r8z=Vy>k%5* z_q&fp?ydxz#df%)8I;looB{K&N_%GmdAME4(DLIU3uE%cjIfMwb<*PEk--sWxaKG> zzM_TwS$!8(L8ZwAo*X`3&|YJeYgy2fJ3u9+iT0Kw1rnM|;+pE)NGSLI5nA&y6#+qj z_tK7}IWHG8piBhUZ!z_X7zh1UoSZz<)sg|cTwMFYBx&Z3+9C3jL~e!WUHiq>QJcZw z5mCGqmcD)XCQfYYwV`uVC&h>^=f|G=AFzj+Bf8OB?r-bLo$dX_k?IGtem3IcU_sm_ z`hY->$F(<+ifj9Qw$mws$$PVZ8?A{)+k3tnu=TfVoyq0nVU0OzttPIx5nGSbI zx%t|<-{;)9ggqIo#Xf6WudzIZkg{ThD@6!_=`vRMA`9=_4TTU>Gk zd0iQO$;tdO`^78Mr9ZpK2yOnj=~HmY zYC-%TA8o@gs#OaekA06_b9lKnf;)(e_HwYZKoRdWDV+i+>Y{nCV(_mdT&;VWD5!3& z5nc}JuDqjxc}WNN6{mDi-)FQU7=Tt?oA|y;S@ZbYES+GYL(U0alfJ{H+A1AHmG*I` z^ov}R@^P4E^OyaTssg!LBBBfaE|T=~$N2})23_V?MDO7 zDAoL@>JBBP67KVl{Ka(6BZ17{j)OL>uZ);snBuhCcpt1;!9wTgrwre@^DW8Bo->TA zbaL{U^p<=owb;kqriaG{jJdzIcQ&7}Ui@ZrbTyA&M3X^| zdXJZxcm)>TVax+%)4)H?9*WEf3%qd4_s0o@lP>>HXcN+}&L9DmQIk~}fb*0}s2W%sq)3qR_T zLwOUwF~a69=SmQWYUx^ExWPqffYHa{*A({k?R1CCPI8G#x8rv-UE?LExTd*V?VNhY zwA4y*N1-#8`p0ibv^&am7CW_c{TmED>JJxiz`C89sA4n^g&q9nv7RDl5Z}OL3!QvU zyibSToCGGHyDr~Foj62>u(SgtIP{+zM?I*MTiQQ6&Hr*5p zyyu<9?TYgBR{OKz_xN1LexeJraO%Z}zOJcvQB*wCHws+cX}z7HVTD9!zf~JhcWem2 zo2+r8!mH~_k{P&sOS0L^Uj~@HHs0@6TyxB78t}kW{Or5>3)H^^PgT>*eTGDq44mD3 z1L;-AeB2`aH6;~5YI23LYCgw}5_;L){}u{ey^*wwHz^ESQsqNJ?UIF<9Ota?c{`c5 zVuSDdlMwIF(c=5*PgBk@csO-#Z*ob5D~dUOU$`J~+Vfai3b6o<_6vMd30>WUhZJ`c zow__P;1^Q*pul%r#dPshG)jqJ?D-0_r1vt)RbiF-T68W;K(YCL(B2JCZlA-mHo>NX zKoV9AH4~f-TQBnGUc{tgszr`m^tJL`*?g0&NcTrRkJxU;{JC@fl zVShXujI*2StO>V>_y(Kglr)BRpiA;Y4ijOWg~Keh(f;qWrjrsba2uY%Rhd}mOzAJ% z)HpwS@sZYd=%<^am)$&;gh~BFI~QBen7OjUywFGm63d5-p?bfQ5V%ty%&-M=QB6jJYISD5VJlumM zK8W|XTOC_E1`E3*K-~&f_w0w34}h(l&~hpcO^LNAT8T5*AO&RR57JK`Z!_@2K(IpR z(dT0)^54NZ)TY7vO!q}^U$;=rs5ad@rdgs2I&#XOBXr??1+BAt>&9gKP(E4uHX*t9 zH6eGG2%vgX=Ps{9e)_=IV?i!w*vn7yyNf--j}V>%pp*1B6#JU^yQeaYEuw9RstdBpZXkQS zJWv+sBX3Z#h0K=o0{wHicPtG z*#%sF*nu*cLlMp|i$b(@D_?lY@wgY6_|T>JSoab6q>u4z{K5jOiRV_rXnZ|XZk`%F zyF_XDr1?m^*SO(APP$;EVG=BNa~nFol^8Mye-jgx&W{j&Ghk2|Pe&S2iOTp`VZJ zpuzhKBq{GRW)V{5PhnL59Oui8~}Wijlb4c5qs2uCifD!nfT9P@M#SM~>K@NuD35~##wNeJD+ zS}Q;TkwuH=6^cpVJc+@vl}He^(N=1eGI%?FdHuZJv{Um_@O&9|ui$495TEDp3GC8T z-0DH)!b)7GyDJbP&|Hk!xqDj(G50>!J^*D_G}IJNN-g~P{G$O2r!w9sf}R-}eb0;} zTkm}I29at0PL}62OWTt&?aM-?VWVOC{=D?Vwhc6rzL4V5nc8EaUqH z%@N9yxCplhS|y_&{$$g1$>eS!x1sOz|NAuX1$Wr$-Kg`B2W+W@J5tYicF5y`UuX^X zdQsRuj1-pvlf~!X*qvm*-4rE=ZnDoDqt;tpUi9hcocz5U(SE&vr%CUjEIDIvbR5be z+~GxkT0Y90cDlgm6fmXl#6Y#{dd&nnu>*bJ@oJ3KMJ-&`^5hj=CVgj2GBS5zCpIZ0 zYPnAsZte?ec!hXE;g~$Ts`lN-@n|Upf`DT;oVV<$i6vM^3cm()OWq+z2%nXHNQ2&E zanxz^cu*B#Gp(78YW0a)J#!(Xzobo?Q_P%R>_~5j=#hn!1azIS6w0fhl*Mir_)VvO zw4{dwi|5htDnyl=Jh%MaN5ktr%{jUptI+w^DUyoe_hY&^-9ASzovFw>v~bzgI}XK{1&hDP6K54O`cOV>Bw!M|jQPW>Hb!4IahDpStL7@(l>_m4HN{ z_{ywbxk)=G-X5~-D?Nzhm`E1={^QE?pCmz66;H<(tbG-=fyTq0^e~r-MVH&RRd+j` zqeORuitwdBlPsFXgvLp;0py~$(}puM`%(9EKWAsHD<0g{V5o#`L=$uQJ?rH}+jXi% z1nz`adHi1F>e4({*cs1}regJf^06(T6t=jp{M+mR2uOtM+&wqOJlYu-ge$Ux(Gq?={<%3r#N$@}2EYNH8Bin!;=vEK>6MBz zTv9YwEZsWag0s3^gFc$GFO^^#HFg&&K=?1Us zXjDC7-n{qZ+(o?PFhZ4rwBq@X^Pk}&vUs%aChFR)bxQB^g(nB%wiS<+A<(E z5ZUxq8|`Q6a)CP?R-+$iL5PqYW>azeGz?ZhXt1x7iJdGc*m(9;KakWS2>f)>npncg zlcY&PT1;?S%9Jy^KHOtLv|~-YaqSio_ogn^#LBNTT<=AVEJb3dIJwAIy#y_|y^M(n zp=R=S7mwrhT>%>L(k|;1@nPQ~FLo7t0FzDzf$rQwn}C9dRzlN;GL!6q!;n2y1pRn^ zEVxFS5&wnxE2-*)&uu&#xShiHI#ifcUMasgsjfOw5xzpqZnW+k`M93G%skX#ww6pz z6HU4%vqFI01w0WA2P(`GN!OVzeyO+!lIjYi+s?z9eJ1_(Jl-cPcE!nhkHbv;hMG;~ zIAJmVN0o&~xN43>mSQMX=#v2ap^d@ffC$OK2YiWF45hrDLvlGJeq<^eCheYF8rE?6*cvO7?eZ#77AoJnOi?oa<{Cd+cbczJjV9$GZ zEnWO!vAFw>+P(UXH~m#3`!D$HXj^i!m1j4%Udi7kkcc(^brP!gT|Di6z&ELVUpv5O ztSx@EfXtN4oJ%C+N{8|@aQ_@jed&&<;esOxJIPe z)5+;@9fP`p_}{Hp5IB+6$9pkqo8RQQKl8nbEeJ?3+JguBz4 zbjh6aX)uIH(&ArB8b8nEJ}j>+Y_Z@HXBU`mEB}B>BI(UrJc`N z>wbjpmk+xnSEyk#vyFT$>fFj({*%=;q`!2 z6OscKsmRWh{H&}?fC*(g<~lR>qe8n^Dkb1lW@u2F0^`jZ*>Ox9pa(Wi z&1@cGlVI7G)I)a%kOY-n-Iltq%Cpkw40DP$+zau~<-{YtG6pJh5;T}TIMyb=R$R@E z(4?p%xC|=s4|jDepGN|m(p{syL4Z_41fqz zj_;^H1=5+y^46U05fZ{#vayPDv-{_sikX3i2?_o!1m`iGPqdY;97qZt1-a<_z zo(h!2>$RP}5UQMq8*EE1s;}$fjv^f}%k(uWnZsPa$fmk~9oy>?f=A`ThEuD6^lvcC=sPfCX#mVIFSAw z+(djubS#Pw4GCtV#TVOon~wVRlhd75bWYpaB!v^YReidd_C`S5JpdC3TV-uDp`)6- z{~a&bG=CyAs5Fx`)GH?sA8XFxlRRRW-TxpYvQ086i-17c>XCI1WSk)R{!h8u{@}iF z(NkukFMEU>JbIsZ=f5zKYl*)XLuh*5G3zm{IAsQ6OSz`2>v;F!;2X0>m%pv+6yVJ% zEP3%lf5sU?z2Q)A_Hv8AWc2QxnKNBv=#tmo zA}G7mCH+KQ9(|gyTP4;1x^j&9!JYT0?c;?*J732u$qe)#?>+vw=}@ue#)5X!(pGHi z?sG~Zi8F{)#}S0mW5jEN2l4+tm!Pjck>h2Z*DCz(Zd)=_Tw9bso!rzLriiPlsaQo1 zS9siXiZRwCZF=#mzeAE=U6Oc`2266B_4k?CQQc=|SLW(}Gxs2gncG}d^!n8)sScjG z=mbv>Ufi&S?oc@0vK=Jh%8T8rilZJ>Uq(5IueBLE#xh=)yS%8(gbr{8U-h~4#;any zVXu{#$35qM3tg0?{+%tob=mR~H)vO%SCm*1IlMy+rArsTx-z!krpCzP2^6h54FnR! zCQ}G-_21HFRB8R--Ai_6lR10)dX*#glu1}${H|sKe!;PH9+0r33f4x+Q|a@S?KCl* z_zWP>!{WSnJHFjnywEOA*Tcmm=MhSkr|RBGbUUmL@bU(o*>sxhpoXz72uS_+n-JImuJ?4qAHhU1`&fF8OE29BB$I;pY_Pj4|$XSYUHz&k=HY zS&HoSZuq5UgAf>)y~)z=gXx%W+;6({YGAXiW=W()X@i`k98ZoXz;i4pI>ZFnN1S&TC3Tw+&b2eV4|uJ^+0$t1g>_%2at!z=l5=<^$)U41;`i?-y|4ia7?JwCpbU*S z4RT(?&x;PKAfUK^fNx7BQuh0_>^n96sMr1|5>Qcp!oZWSO)40xAmSFtb>~B`5{+`P z3G3EhFT2g~gd|c>X!2?>f#0TXoe=9*$fy^KL7Vu*i^7)i++P#7_uW`%eBPr%d<;hm zqSkk$>bO?i@p!%?(=$;6unoa>VKQ1*51ndl_yp4-`HQ`ohS%*X7AsVc$M2{erz*O^str(x&bNz?+-hVU^P+8tj3w&6ZueHit>3nvb|5{*;iEL@p zdses7ooouX;rf_~x@+pzhj6`kGX0GL)^jcXGsUB?0}!cm$tO0qAP2k#X-jb}8oVbY zg37%T_}gYKkb8?7OqN~`65isupR+o?OeH2*`Sm5*{jli`xUYN}=^(yF?mS@8cJJOx ztsjF=VqYlhMV+XJ{s{BZJZ+}njck*0C(+x?`^W=Ok<~H$IkQ;sA-+?nNQ+t|(mj-b zD<%F!h_0mWQJRZ3Q^2R~-(6+POM(EGv)K*7{_BOWlGCe2LJ`c50nM1q0-!YI-w!~L zG1xvUg-t@@9Zlcy*Q_@uUm3WGgrOyF|HZSyLDfdbZF88_`gX`rGA!sLu_%82T z;Op|uf(sndiJ5^8jSD->xvWo5Pxrap$2=$YZxeNSvVlht6ixD~CsWKcawxXThasMC z>u=Bi7p+QN;%YbP2hZqbW=rO$ufC5kis$xp#yP4hrWW}?b^%nujij7O@ZNjMycd*adn$kZ%2OsRxINg5E#0-#REutKE+05wX zCdC(&w0l@SBkbTu5#aP%`-KLjL)nx5;*taAEPWcx(7pw5Al=VnwFFPSuggg5Z$eILU5zQ zP)$j)MyE+7@%b`uSUxC4*gQ1-5#i?jtpiENf^rry%)+=8e?)xlnJPVga3dbpR*3s~Rz+4o zT=pM8YWCFFiDJ%<$Rq4(J5^F^b`(PRM2op?LGyRJnZ^#rHwc;xdwY8^*MoJv7y%FSl4ms0k`&0qrm=R(6*Eu+0%~)3`D;G(He6~jrS#Zvvs%2%hfr+OULy<3CicQGgGdcDo#|Jz+ z`fV2+PPav4%}B$J&phwo7N&oLROxS&)sHHRPTT_NKEilUlmEtgamT8+oKT;9Y}bKM zAbDCz+kBLcm1E@Y_$R#OQ|8wQD&(x$UJp7R9^Clyr-Oo@)Q3Lvl!5TG93?2ug7T)o zF}R5M{_@nhNN#o1;~34GDgp1#k%NxmW%sFYUJ;v(A7gy%eFTUDck%Z+-(PqUWQyuQ zZ+>S;DOle>%Z^vQO{;!CxpsvsJ_c}(x9#Reh+#R6Go?5+$=86F<45=kk`g<2OReB) zqAk2H0iM?bLqyRp+7J#S1DYQ88vdo3ofL)-c^?CxKYeXZO`z~F#+-qLYEkZ)vai6U zGK{Xht2m)l_USnHWo_b?bW9cJ9i;Tvm;hOV2oP`8N-Epb!|WMh$Rc!=ADVOCM|1Q* zADjSeoTIzviB?W5LT2{XVut=Imgiin?f%wZaEVvhf5Azh;hSv#{aW?Zh1t36!0`z; z!@U}4A_@~P2FR5wC4U^x5^S5Q6)ln-Yj+tk<+ zZ#C?UEqo&k9v@jo^NAa-bG!8v-?)nN$1Y&=fAlG)fYomO2CywiB$6$y@8;5F)$Cac zQKy-Un?_HOdS*kpel46(#0BsrB&@^@n!Bv2!7OqtJ=>5K$GTG*ElTaaEPmURxpcze zgxJ;eEa#%FW8sL5P=31d;yAye>*H#`@F{Xi7ltj@ z+$V{JRECW=I)QuCa08k^y)2EabC=oQ=BDO-a=*>-ZvQ~$Qux7^m6MfX_rE@ORieeP zBPVtjH{Tq@^AZfOm$t{868ZMfQcnKnQwu=beYbShF|{OKLK4E<-^^O9LlHTy4M%(z zF$R5>&nIlPZ>Ugj(V4bNSBjII3X@g4o7m?0`T1f-ai9A~I^4TTez|V>qF;#_%UWDr zVm5#Tl?qtwoh`oXzb(7X(V)%KIK6UGqO-g?K-((FW_-XplS3>< z@GYIoO#8K@+Kty_U^kh8ETHhobCoo_jCam8BuXh){P{6id_`m&7`rVQJ)_@&blxTi z_!Tw?eMw^0+OO{5pG&{!Lu11K1R%DdV43Tx^u_fv{)<1Vi=y0e`oy$_9_Z>{0eOkK zDe)V<{TwflA0#Oa`gxWD3o_f0I!=c(W2^9vOtD@wF>aCz+O716Lb^$wMMR^oLzkuuSdH`9ufysL`T zw~Si#5nJcmJAZbH4t}1L9TaH%Esw@`q&KV`h~03VEk{tv-{QrLxSxD8C4WxI!4s+p zvJ!ey<%H~)?GlD#Eq@Chj z#^{ikzAUW!xvhNcXOr)EmogC&gj83}ZDBrUjMccwfoV4-(;X%d=@JQu^tdAkwcZ(t zYcz9bL+SuVTR4&rxU$#3R_O7!L`K-WUTDye1nH7@qHZ(v=S%Nw4(Xyx*t2(GQ~(M) zkMw>C*@rxVkmoM!S{e_x(4TG0E`tokJS0ql+`b!%)GczEuY;DZmgC+8MA>T9H}_c# zU-~Qv?~magla{TIE2sK_sZRSel@$TTZDtqxzGct~jINKvRB~!zdA$kE9qP=nUfr@c z-wnNsHgU5D%$$-XCO7oa>biJEpT1USDY@dS+~mO!#Z8|=stvc>(K1V!7Lizm-L5iT zp(Ap3NekE%ksV33YR@IK0?X+@$x}$;fAJNY(zJsPp{Cyndb)TFpmkU>`BK)?goltoyd6f0_Xe`(TqcH@=pY)dtg zFu!##$gfP$q-#{<2D9JT!kOWNM>(kbaC|5dDDCHOXVTe z@(~|ZxQ1}GSuwpKgqVh?`0eaM5Q#Zs_>ep<3pYdJ7 ziy4n*K;K%aHy+auMl)ol@6Z-kc41iQph~;flYG5KL%*jtSQhBx>K|3AaQ5XC0L^OD z$8PkAdts|zr6B9GxBpLJXC4pb{x5J#q0rRHcCwa}k}V~SjHQ#D60#22`8kL|X=-dU zBpeAz$dXY)3y{ zyg%DKUxTE_&+Q*`O~zy;ZuJ^a(vb$X@=2f~WUkWg@SMIUhR=w(GW^nl zwNBbx2CkIwm!wz{u4twh5%Jma6*~=@riKxPuZyXCEjP3|(Pci3z286{M2%p)jA1x9 z4BHv|Fn~{(uc1#$CpGy8zFX0Sf2@MwY|!5Sj)z@0ZW)fT`~f1u(PqKHjYnE8=}W;+5@WFE zzVi>#Z&`$@mZR~V7ksJ_;4niyYq^iQl}u~bjB=zIsly5BgkwkmJqkp9n2UZFFvHcD zk%w`LNX#slUsr2X&zr>|23^faWHrK6;XS{cj4aS|{Ni$)&u;m*qLp4Vc8`v5cc#Y_ zN~Logx;psG+R&4GNs4pKPhvsi_^m4qA#-!rpYaoh7tgK}Mznn-)Me#Ri%d3?lcxA_Y;b07QJ ztU0ePNFHfn(^pC(wkxIBO-I}Lp5<%S8mA)zXEX4(zUFInLf}CP_Uq|HgbB1gi6)Aor;9IJ{XT9Fgz!*+EuGQpE-|2@JRV z*!ql0h@oE(m^XHYUs6b4#En@R{ZX|Q8n z(@4E)6O~(d<`Ug$?;ahDZ;`GG-1>nr1;18M_myv14o9a9?Mz%K%R7ad;gZPo+fLG* zInu$qj;pdfkY5Fh_nn^|-c+ctF4CI2+3b3<9Y}oavW`TEQAn}H(z}Kdv zMN$W}ck3gv2l1T)LBvqxr>`}!z%H=_J?@GyUWVlAUv>oa`S{kpJdgl6zfE27nQX-f zXg%{eJklDbt_*a-@pOqMKmEj@<>n=6dxBrMs%wQo8LPR|X)n9=J)_Q`jNmbwQ+K9i zy6P|UrserAp}hDtX44D$3;NOy@eidq@>&L&!Y|Wc!?-<}zR+>{EKVu_amgsg!VUzC z|0Eb2jg~S(VCP0PT>JOUr)Qb|iv@$|W>Rl_?NH|^^WE0`ddQ{+wU%CIaEArnmubvt z>~J)c_h#6S{ovej-<=nCdTs4S<~~1mjeGRgY5!>9^;+V`Poc-^;m4k3I)C%ve=;le z;FCKoV0=lwmXM1yldpvoa++Q4R_|c~$C;E)>^94C54;<{sphu8U%omcvlHyL?!S%7Gu;9oTZ=(hHS-T9OgO;@~4Z7fj96TI3+-UAG9+C3&<3&>=H zJNtO%mNlw+k|X#fMsoT&M-*Ik#qg)5P1}%VWMS0MDujETRs7C?G zdT{M{r~k(}5!=oJSmV9Fg9uN+XzwTbEZa}?Esq4zmO7nS;0BrTsqgr7+$Mh8sR2*7 z=NdTy%k&`2NZKa%p^$)=gOL95@5`Tl zBONh1`j?yVtx71*;$i2Q9xdcgZn_p=(#y=Jhg!O5^9$*(N_&U@=ZT$|HWME0#xW9Q zlcTJ}-Z`~{nYm$RHr>0#4FYcO1fW@0&JRb$649qn$F2@uII1A3rLG`Js>TdlWSq4W zhYS@}cW2q_VxwpCK!NbOHr+8|U4cQEzlc-ksk{n+~l(g~7$5^KR^ zzXEl>cQ#$!7;6{yxu@v^_BccMF4Wo$6Y!HCc6upSbFvsgaiZ9^UpXIp(BBn3EPLz2 ze!4mzH`%*pns+UJJRzb?h@r|)!O;SmzDwfK9{j!*2BtwH#_%ojEN**_JB<2&Ap^IW zkZ{OxKp=NCScY)SXCHNtKp#Uck6B|kfor$L7iw+Oc_jFjfvGdlr;WC=L5dnNHu$6N z(xjS8zRD?ecD>)VZ(6%_XW2?_ln(q&iRvl~Czt)A-4Gzqctxm*MSo71p%Xxev_we4lBEPE} z%`FH7I$i>hpur#T;Ut#=S!n?5LKw|`A%LgIW&gYOG+|~aS%tR(A$B}JiX}#y-Sy$T zYF<*Ow-o^~ zP^PJ*4-$%Ks)TY7Cdgs8h+2iHXI5_SD9S5EMn-|mr(9T>Q%^ZT&oVEv$1Kim=5bwK z-m3B!JvpPwY$Alu@(S`$9p|d!0p%jbUmh>K-(Wx6od{79Foa1zcJt2pjH!MN9sP-d z`~KlBNR^;vI4yfF=mcq711f(F^`Tq-4APyYQiuC-nVq7b5wzF^ZtB^i13KB9E&6Ob z#1Hr$5#yC#+95}d@9I91@PRuD4YXJzuPnTYg5CZTsr#H91Wz83!=MJ30i3d*gs|tl z+xpISWMxb|hU79*|1}kFzz*abXJk{$Uox8RY^8_Mh?U%hct9Lx!o%D*=DzxvTUZc; zKGCw=^^?0r-Y$y9h~(OJ2#h&L$zDRGC;2%6UOUgTs-cfj9$A<7UdI%h`0&GSxq%aD z3o8xDr4~b5R|VF>=jZ0wE5vAis1u~nRlny2cV0}{QX)4`Zn(y;|AFd(ycG8xLH7al z(No{H2$uP0e9b*^JY~YqWEzX`-YW&IZbdy>TwVxNJb(j$i1{}l0%^@(9)G_T$4;_C;}vF)91nM z*vm-hNS?Nn8^*(zE%du*!1)kiV=MIe_LsUnA09jB&XlA?+mDuRsw9Pqqmo@?9gEBT z_VEZXTc**%4TIq3SD8R=hhYwstKDSM0_2AyJSpCYia)KmWlID`~s+ z6g7~7u0;Ta!16p`;wt{(B|I#O*8$i^_U$)3H!%OJT&jThUc00s{Z3H-w(K&i*l=qv zlF2s>G@RwSTIe^9@J5tsHDRq2Wki&w77J66ApO$zD>k%z4Yvk`$v)E9P<%Z`c$+cmFrad z!t)ofn>>#ebXUbEA$-7Vp{7%Vep7s;339=JYjVH;r^^$!{)8)DxKW;^34NN z&7w|zp#d92-y~L%qt+vz2!re%we{8{c1wOAaXwXK@r&I%pq+HJ8b~Uz{ssSl#@qdx zuNKVwjgAQP<1xdj>yhYduCASFdgU*mx!i2Ch5Fp{mIg>+y`niix=n$j79be|MXMdf zikuI=sQHKg(M*Aj*EPu9Bt+dES~;w25f7&J-R<5A>jz*ZR)X?m=UqGh?{{IME7S^Vy%!cl>WP~>XRxa}EV zXPyYbUrC#WF&A0b0%v4h@sV@8RzJAbbnb!I;#Cb$z;NY{FC`@~jYG5V3+q8)j&YbJa1#GUUzAB6<;Q7GBX zs+&{MOVXeBp&25_&FDSPR_MW*$Mg>ICkxd}Z5dS_^1k^4&yZVF(!H zu37o(abiprM63a1!d94}U;I6N_G-%)=dK&e>1mP(t83gafSWPceILWX2AG(2KTAev z9%Ewoq0j}&)lu>G`bgO{HgB^{X$ybbQ?BTj-^qmqECf$lh_Iz%0}o}-KFqqdazCr84(}O zgu1)AMi;L~O2RhYrrYY@(vR|r7qq+H!r#I_4k2br)ZSKe5z&`w>kfVCFz9forY$yF z4%!WW(^uU$Tmh3vgcp{JvCm2O*X1^X!=AKM)8F58J7}n$v%tTmx&Xa0x7>~;nmwo> zCWU{zu2O=?N92zHPwy>iX5Vf79y0$+ccrScy3#=x8Vr?kH>`Y+sF`BBLw8SkRoB-U zTPzf?^N~x|mut!Z;CoP)W3k$|;xjJc!lFYIeJQ5w$QeTi2M30M(w_Wl1D{Z{My~vi zz&*Cxy8=Wll z(@z3=20g!rXj~}y_SQL68$GNo+AaTxBiP-Vl}ImK!sfzA337(*`<ydDjuZ24;fHa@d`2Y;ZS^ZXAyFM6hoQgJ zdGU?MVWsN4rpDs5zt$TKC&M5kgHd(bX;|J!HO9=fYcG7P2xn#*vXV*owd~(Pl&~|$ zFC*4?*5u|sTx}9e+mqD|IaA(n2xM`t1mS) From 22def9b01c8c123271cde53b0e4ce7d76a0f5416 Mon Sep 17 00:00:00 2001 From: Erik Arvstedt Date: Mon, 11 Jul 2022 20:18:10 +0200 Subject: [PATCH 37/44] frontend: Don't copy resources to language dirs Since 355e89ce5, the frontend references resources via root-relative URLs. This means that `resources` dirs in the language dirs are no longer accessed and can be removed. Achieve this by defining a specific `assets` production config that doesn't include `src/resources`. As of fd35c8f4a, this shrinks the frontend size by 55% (279M -> 124M). Also, the nginx location configs now can be simplified. --- frontend/angular.json | 4 ++++ frontend/package.json | 2 +- frontend/sync-assets.js | 2 +- nginx-mempool.conf | 6 +----- production/mempool.crontab | 2 +- production/nginx/server-common.conf | 8 +------- 6 files changed, 9 insertions(+), 15 deletions(-) diff --git a/frontend/angular.json b/frontend/angular.json index 4eb697071..1ed29cad9 100644 --- a/frontend/angular.json +++ b/frontend/angular.json @@ -170,6 +170,10 @@ }, "configurations": { "production": { + "assets": [ + "src/favicon.ico", + "src/robots.txt" + ], "fileReplacements": [ { "replace": "src/environments/environment.ts", diff --git a/frontend/package.json b/frontend/package.json index d2f7f2f6c..b5055a5de 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -34,7 +34,7 @@ "start:local-staging": "npm run generate-config && npm run sync-assets-dev && npm run ng -- serve -c local-staging", "start:mixed": "npm run generate-config && npm run sync-assets-dev && npm run ng -- serve -c mixed", "build": "npm run generate-config && npm run ng -- build --configuration production --localize && npm run sync-assets && npm run build-mempool.js", - "sync-assets": "node sync-assets.js && rsync -av ./dist/mempool/browser/en-US/resources ./dist/mempool/browser/resources", + "sync-assets": "rsync -av ./src/resources ./dist/mempool/browser && node sync-assets.js", "sync-assets-dev": "node sync-assets.js dev", "generate-config": "node generate-config.js", "build-mempool.js": "npm run build-mempool-js && npm run build-mempool-liquid-js && npm run build-mempool-bisq-js", diff --git a/frontend/sync-assets.js b/frontend/sync-assets.js index a6b59bdb1..8937e2abb 100644 --- a/frontend/sync-assets.js +++ b/frontend/sync-assets.js @@ -4,7 +4,7 @@ var fs = require('fs'); const CONFIG_FILE_NAME = 'mempool-frontend-config.json'; let configContent = {}; -var PATH = 'dist/mempool/browser/en-US/resources/'; +var PATH = 'dist/mempool/browser/resources/'; if (process.argv[2] && process.argv[2] === 'dev') { PATH = 'src/resources/'; } diff --git a/nginx-mempool.conf b/nginx-mempool.conf index 58d45f3cc..a6f701478 100644 --- a/nginx-mempool.conf +++ b/nginx-mempool.conf @@ -18,7 +18,7 @@ expires 10m; } location /resources { - try_files /$lang/$uri /$lang/$uri/ $uri $uri/ /en-US/$uri @index-redirect; + try_files $uri @index-redirect; expires 1h; } location @index-redirect { @@ -27,10 +27,6 @@ # location block using regex are matched in order - # used to rewrite resources from // to /en-US/ - location ~ ^/(ar|bg|bs|ca|cs|da|de|et|el|es|eo|eu|fa|fr|gl|ko|hr|id|it|he|ka|lv|lt|hu|mk|ms|nl|ja|nb|nn|pl|pt|pt-BR|ro|ru|sk|sl|sr|sh|fi|sv|th|tr|uk|vi|zh|hi)/resources/ { - rewrite ^/[a-zA-Z-]*/resources/(.*) /en-US/resources/$1; - } # used for cookie override location ~ ^/(ar|bg|bs|ca|cs|da|de|et|el|es|eo|eu|fa|fr|gl|ko|hr|id|it|he|ka|lv|lt|hu|mk|ms|nl|ja|nb|nn|pl|pt|pt-BR|ro|ru|sk|sl|sr|sh|fi|sv|th|tr|uk|vi|zh|hi)/ { try_files $uri $uri/ /$1/index.html =404; diff --git a/production/mempool.crontab b/production/mempool.crontab index cc1bcd878..0e7b6af6b 100644 --- a/production/mempool.crontab +++ b/production/mempool.crontab @@ -5,5 +5,5 @@ 37 13 * * * sleep 30 ; /mempool/mempool.space/backup >/dev/null 2>&1 & # hourly liquid asset update -6 * * * * cd $HOME/liquid/frontend && npm run sync-assets && rsync -av $HOME/liquid/frontend/dist/mempool/browser/en-US/resources/assets* $HOME/public_html/liquid/en-US/resources/ >/dev/null 2>&1 +6 * * * * cd $HOME/liquid/frontend && npm run sync-assets && rsync -av $HOME/liquid/frontend/dist/mempool/browser/resources/assets* $HOME/public_html/liquid/resources/ >/dev/null 2>&1 diff --git a/production/nginx/server-common.conf b/production/nginx/server-common.conf index 26e81f7fa..dedd36411 100644 --- a/production/nginx/server-common.conf +++ b/production/nginx/server-common.conf @@ -58,12 +58,6 @@ location = / { expires 5m; } -# used to rewrite resources from // to /en-US/ -# cache /resources/** for 1 week since they don't change often -location ~ ^/[a-z][a-z]/resources/(.*) { - try_files $uri /en-US/resources/$1 =404; - expires 1w; -} # cache //main.f40e91d908a068a2.js forever since they never change location ~ ^/([a-z][a-z])/(.+\..+\.(js|css)) { try_files $uri =404; @@ -84,7 +78,7 @@ location ~ ^/([a-z][a-z])/ { # cache /resources/** for 1 week since they don't change often location /resources { - try_files $uri /en-US/$uri /en-US/index.html; + try_files $uri /en-US/index.html; expires 1w; } # cache /main.f40e91d908a068a2.js forever since they never change From 004768132bb74f476f1873d12d20fbda87f81b56 Mon Sep 17 00:00:00 2001 From: nymkappa Date: Tue, 6 Sep 2022 21:17:15 +0200 Subject: [PATCH 38/44] Show clearnet nodes on world map --- frontend/src/app/lightning/nodes-map/nodes-map.component.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/frontend/src/app/lightning/nodes-map/nodes-map.component.ts b/frontend/src/app/lightning/nodes-map/nodes-map.component.ts index 6c809916e..c2cf385ca 100644 --- a/frontend/src/app/lightning/nodes-map/nodes-map.component.ts +++ b/frontend/src/app/lightning/nodes-map/nodes-map.component.ts @@ -122,10 +122,13 @@ export class NodesMap implements OnInit { return 10 * Math.pow(params[2] / maxLiquidity, 0.2) + 3; }, tooltip: { + position: function(point, params, dom, rect, size) { + return point; + }, trigger: 'item', show: true, backgroundColor: 'rgba(17, 19, 31, 1)', - borderRadius: 4, + borderRadius: 0, shadowColor: 'rgba(0, 0, 0, 0.5)', textStyle: { color: '#b1b1b1', @@ -155,7 +158,6 @@ export class NodesMap implements OnInit { borderColor: 'black', borderWidth: 0, }, - blendMode: 'lighter', zlevel: 2, }, ] From dcfcac2cc65be0cd5a74d7fc3995e1a2c22b3dc5 Mon Sep 17 00:00:00 2001 From: nymkappa Date: Fri, 9 Sep 2022 14:56:18 +0200 Subject: [PATCH 39/44] Show summary stats and world map in isp and country node list page --- backend/src/api/explorer/nodes.api.ts | 8 +- .../lightning/channel/channel.component.html | 86 ++++++++++++------- .../nodes-map/nodes-map.component.html | 6 +- .../nodes-map/nodes-map.component.scss | 8 ++ .../nodes-map/nodes-map.component.ts | 56 ++++++++++-- .../nodes-per-country.component.html | 56 +++++++++++- .../nodes-per-country.component.ts | 50 +++++++++-- .../nodes-per-isp.component.html | 56 +++++++++++- .../nodes-per-isp.component.scss | 2 +- .../nodes-per-isp/nodes-per-isp.component.ts | 39 +++++++-- 10 files changed, 301 insertions(+), 66 deletions(-) diff --git a/backend/src/api/explorer/nodes.api.ts b/backend/src/api/explorer/nodes.api.ts index 9d82dc83d..cbd70a34f 100644 --- a/backend/src/api/explorer/nodes.api.ts +++ b/backend/src/api/explorer/nodes.api.ts @@ -434,12 +434,14 @@ class NodesApi { SELECT nodes.public_key, CAST(COALESCE(nodes.capacity, 0) as INT) as capacity, CAST(COALESCE(nodes.channels, 0) as INT) as channels, nodes.alias, UNIX_TIMESTAMP(nodes.first_seen) as first_seen, UNIX_TIMESTAMP(nodes.updated_at) as updated_at, geo_names_city.names as city, geo_names_country.names as country, - geo_names_iso.names as iso_code, geo_names_subdivision.names as subdivision + geo_names_iso.names as iso_code, geo_names_subdivision.names as subdivision, + nodes.longitude, nodes.latitude, nodes.as_number, geo_names_isp.names as isp FROM nodes LEFT JOIN geo_names geo_names_country ON geo_names_country.id = nodes.country_id AND geo_names_country.type = 'country' LEFT JOIN geo_names geo_names_city ON geo_names_city.id = nodes.city_id AND geo_names_city.type = 'city' LEFT JOIN geo_names geo_names_iso ON geo_names_iso.id = nodes.country_id AND geo_names_iso.type = 'country_iso_code' LEFT JOIN geo_names geo_names_subdivision on geo_names_subdivision.id = nodes.subdivision_id AND geo_names_subdivision.type = 'division' + LEFT JOIN geo_names geo_names_isp on geo_names_isp.id = nodes.as_number AND geo_names_isp.type = 'as_organization' WHERE geo_names_country.id = ? ORDER BY capacity DESC `; @@ -449,6 +451,7 @@ class NodesApi { rows[i].country = JSON.parse(rows[i].country); rows[i].city = JSON.parse(rows[i].city); rows[i].subdivision = JSON.parse(rows[i].subdivision); + rows[i].isp = JSON.parse(rows[i].isp); } return rows; } catch (e) { @@ -463,7 +466,8 @@ class NodesApi { SELECT nodes.public_key, CAST(COALESCE(nodes.capacity, 0) as INT) as capacity, CAST(COALESCE(nodes.channels, 0) as INT) as channels, nodes.alias, UNIX_TIMESTAMP(nodes.first_seen) as first_seen, UNIX_TIMESTAMP(nodes.updated_at) as updated_at, geo_names_city.names as city, geo_names_country.names as country, - geo_names_iso.names as iso_code, geo_names_subdivision.names as subdivision + geo_names_iso.names as iso_code, geo_names_subdivision.names as subdivision, + nodes.longitude, nodes.latitude FROM nodes LEFT JOIN geo_names geo_names_country ON geo_names_country.id = nodes.country_id AND geo_names_country.type = 'country' LEFT JOIN geo_names geo_names_city ON geo_names_city.id = nodes.city_id AND geo_names_city.type = 'city' diff --git a/frontend/src/app/lightning/channel/channel.component.html b/frontend/src/app/lightning/channel/channel.component.html index 9a0c424fb..3942cda6e 100644 --- a/frontend/src/app/lightning/channel/channel.component.html +++ b/frontend/src/app/lightning/channel/channel.component.html @@ -16,7 +16,8 @@

- +
@@ -51,38 +52,57 @@
- -
- -
- -
-
- +
+
+ + + + + + + +
Capacity + + +
-
- -
-
- -
- - -
-

Opening transaction

- -
- -
- -
-

Closing transaction

   - -
- -
-
+
+ +
+ +
+
+ +
+
+ +
+
+ +
+ + + +
+

Opening transaction

+ +
+ + +
+ +
+

Closing transaction

   + + +
+ + +
+
@@ -108,7 +128,7 @@
- +
@@ -152,4 +172,4 @@
- \ No newline at end of file + diff --git a/frontend/src/app/lightning/nodes-map/nodes-map.component.html b/frontend/src/app/lightning/nodes-map/nodes-map.component.html index 75f8aeb08..d739dd2c9 100644 --- a/frontend/src/app/lightning/nodes-map/nodes-map.component.html +++ b/frontend/src/app/lightning/nodes-map/nodes-map.component.html @@ -1,13 +1,13 @@ -
+
-
+
Lightning nodes world map
(Tor nodes excluded)
-
diff --git a/frontend/src/app/lightning/nodes-map/nodes-map.component.scss b/frontend/src/app/lightning/nodes-map/nodes-map.component.scss index 4e363a534..d7ad42b46 100644 --- a/frontend/src/app/lightning/nodes-map/nodes-map.component.scss +++ b/frontend/src/app/lightning/nodes-map/nodes-map.component.scss @@ -16,6 +16,11 @@ padding-bottom: 100px; }; } +.full-container.widget { + min-height: 240px; + height: 240px; + padding: 0px; +} .chart { width: 100%; @@ -38,3 +43,6 @@ padding-bottom: 55px; } } +.chart.widget { + padding: 0px; +} diff --git a/frontend/src/app/lightning/nodes-map/nodes-map.component.ts b/frontend/src/app/lightning/nodes-map/nodes-map.component.ts index c2cf385ca..b783e225a 100644 --- a/frontend/src/app/lightning/nodes-map/nodes-map.component.ts +++ b/frontend/src/app/lightning/nodes-map/nodes-map.component.ts @@ -1,4 +1,4 @@ -import { ChangeDetectionStrategy, Component, Inject, LOCALE_ID, NgZone, OnDestroy, OnInit } from '@angular/core'; +import { ChangeDetectionStrategy, Component, Inject, Input, LOCALE_ID, NgZone, OnDestroy, OnInit } from '@angular/core'; import { SeoService } from 'src/app/services/seo.service'; import { ApiService } from 'src/app/services/api.service'; import { Observable, tap, zip } from 'rxjs'; @@ -18,6 +18,10 @@ import { getFlagEmoji } from 'src/app/shared/common.utils'; changeDetection: ChangeDetectionStrategy.OnPush, }) export class NodesMap implements OnInit { + @Input() widget: boolean = false; + @Input() nodes: any[] | undefined = undefined; + @Input() type: 'none' | 'isp' | 'country' = 'none'; + observable$: Observable; chartInstance = undefined; @@ -43,13 +47,48 @@ export class NodesMap implements OnInit { this.observable$ = zip( this.assetsService.getWorldMapJson$, - this.apiService.getWorldNodes$() + this.nodes ? [this.nodes] : this.apiService.getWorldNodes$() ).pipe(tap((data) => { registerMap('world', data[0]); + let maxLiquidity = data[1].maxLiquidity; + let inputNodes: any[] = data[1].nodes; + let mapCenter: number[] = [0, 5]; + if (this.type === 'country') { + mapCenter = [0, 0]; + } else if (this.type === 'isp') { + mapCenter = [0, 10]; + } + + let mapZoom = 1.3; + if (!inputNodes) { + inputNodes = []; + for (const node of data[1]) { + if (this.type === 'country') { + mapCenter[0] += node.longitude; + mapCenter[1] += node.latitude; + } + inputNodes.push([ + node.longitude, + node.latitude, + node.public_key, + node.alias, + node.capacity, + node.channels, + node.country, + node.iso_code, + ]); + maxLiquidity = Math.max(maxLiquidity ?? 0, node.capacity); + } + if (this.type === 'country') { + mapCenter[0] /= data[1].length; + mapCenter[1] /= data[1].length; + mapZoom = 6; + } + } + const nodes: any[] = []; - console.log(data[1].nodes[0]); - for (const node of data[1].nodes) { + for (const node of inputNodes) { // We add a bit of noise so nodes at the same location are not all // on top of each other const random = Math.random() * 2 * Math.PI; @@ -66,11 +105,12 @@ export class NodesMap implements OnInit { ]); } - this.prepareChartOptions(nodes, data[1].maxLiquidity); + maxLiquidity = Math.max(1, maxLiquidity); + this.prepareChartOptions(nodes, maxLiquidity, mapCenter, mapZoom); })); } - prepareChartOptions(nodes, maxLiquidity) { + prepareChartOptions(nodes, maxLiquidity, mapCenter, mapZoom) { let title: object; if (nodes.length === 0) { title = { @@ -91,8 +131,8 @@ export class NodesMap implements OnInit { geo: { animation: false, silent: true, - center: [0, 5], - zoom: 1.3, + center: mapCenter, + zoom: mapZoom, tooltip: { show: false }, diff --git a/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.html b/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.html index 190cf6219..543cf951c 100644 --- a/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.html +++ b/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.html @@ -1,9 +1,58 @@
-

+

Lightning nodes in {{ country?.name }} {{ country?.flag }}

+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + +
Nodes{{ countryNodes.nodes.length }}
Liquidity + + + {{ countryNodes.sumLiquidity | amountShortener: 1 }} + sats + +   + + +
Channels{{ countryNodes.sumChannels }}
ISP Count{{ countryNodes.ispCount }}
Top ISP + + {{ countryNodes.topIsp.name }} [ASN {{ countryNodes.topIsp.id }}] + +
+
+
+
+ +
+
+
+
+
@@ -15,9 +64,8 @@ - - - + + diff --git a/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.ts b/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.ts index e0bf5eb66..19394a828 100644 --- a/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.ts +++ b/frontend/src/app/lightning/nodes-per-country/nodes-per-country.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectionStrategy, Component, Input, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { map, Observable } from 'rxjs'; +import { map, Observable, share } from 'rxjs'; import { ApiService } from 'src/app/services/api.service'; import { SeoService } from 'src/app/services/seo.service'; import { getFlagEmoji } from 'src/app/shared/common.utils'; @@ -32,6 +32,8 @@ export class NodesPerCountry implements OnInit { this.nodes$ = this.apiService.getNodeForCountry$(this.route.snapshot.params.country) .pipe( map(response => { + this.seoService.setTitle($localize`Lightning nodes in ${response.country.en}`); + this.country = { name: response.country.en, flag: getFlagEmoji(this.route.snapshot.params.country) @@ -45,14 +47,50 @@ export class NodesPerCountry implements OnInit { iso: response.nodes[i].iso_code, }; } - - this.seoService.setTitle($localize`Lightning nodes in ${this.country.name}`); - return response.nodes; - }) + + const sumLiquidity = response.nodes.reduce((partialSum, a) => partialSum + a.capacity, 0); + const sumChannels = response.nodes.reduce((partialSum, a) => partialSum + a.channels, 0); + const isps = {}; + const topIsp = { + count: 0, + id: '', + name: '', + }; + for (const node of response.nodes) { + if (!node.isp) { + continue; + } + if (!isps[node.isp]) { + isps[node.isp] = { + count: 0, + asns: [], + }; + } + if (isps[node.isp].asns.indexOf(node.as_number) === -1) { + isps[node.isp].asns.push(node.as_number); + } + isps[node.isp].count++; + + if (isps[node.isp].count > topIsp.count) { + topIsp.count = isps[node.isp].count; + topIsp.id = isps[node.isp].asns.join(','); + topIsp.name = node.isp; + } + } + + return { + nodes: response.nodes, + sumLiquidity: sumLiquidity, + sumChannels: sumChannels, + topIsp: topIsp, + ispCount: Object.keys(isps).length + }; + }), + share() ); } - trackByPublicKey(index: number, node: any) { + trackByPublicKey(index: number, node: any): string { return node.public_key; } } diff --git a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.html b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.html index 4ea3c2d11..441dc429e 100644 --- a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.html +++ b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.html @@ -1,5 +1,54 @@
-

Lightning nodes on ISP: {{ isp?.name }} [AS {{isp?.id}}]

+

Lightning nodes on ISP: {{ isp?.name }}

+ +
+
+
+
Channels Location
{{ node.alias }}
+ + + + + + + + + + + + + + + + + + + + + + +
ASN{{ isp?.id }}
Nodes{{ ispNodes.nodes.length }}
Liquidity + + + {{ ispNodes.sumLiquidity | amountShortener: 1 }} + sats + +   + + +
Channels{{ ispNodes.sumChannels }}
Top country + + {{ ispNodes.topCountry.country }} {{ ispNodes.topCountry.flag }} + +
+
+
+
+ +
+
+
+
@@ -12,9 +61,8 @@ - - - + + diff --git a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.scss b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.scss index 02b47e8be..b829c5b59 100644 --- a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.scss +++ b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.scss @@ -59,4 +59,4 @@ @media (max-width: 576px) { display: none } -} \ No newline at end of file +} diff --git a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts index f7edf783a..24664aab0 100644 --- a/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts +++ b/frontend/src/app/lightning/nodes-per-isp/nodes-per-isp.component.ts @@ -1,8 +1,9 @@ import { ChangeDetectionStrategy, Component, OnInit } from '@angular/core'; import { ActivatedRoute } from '@angular/router'; -import { map, Observable } from 'rxjs'; +import { map, Observable, share } from 'rxjs'; import { ApiService } from 'src/app/services/api.service'; import { SeoService } from 'src/app/services/seo.service'; +import { getFlagEmoji } from 'src/app/shared/common.utils'; import { GeolocationData } from 'src/app/shared/components/geolocation/geolocation.component'; @Component({ @@ -33,7 +34,7 @@ export class NodesPerISP implements OnInit { map(response => { this.isp = { name: response.isp, - id: this.route.snapshot.params.isp + id: this.route.snapshot.params.isp.split(',').join(', ') }; this.seoService.setTitle($localize`Lightning nodes on ISP: ${response.isp} [AS${this.route.snapshot.params.isp}]`); @@ -46,12 +47,40 @@ export class NodesPerISP implements OnInit { }; } - return response.nodes; - }) + const sumLiquidity = response.nodes.reduce((partialSum, a) => partialSum + a.capacity, 0); + const sumChannels = response.nodes.reduce((partialSum, a) => partialSum + a.channels, 0); + const countries = {}; + const topCountry = { + count: 0, + country: '', + iso: '', + flag: '', + }; + for (const node of response.nodes) { + if (!node.geolocation.iso) { + continue; + } + countries[node.geolocation.iso] = countries[node.geolocation.iso] ?? 0 + 1; + if (countries[node.geolocation.iso] > topCountry.count) { + topCountry.count = countries[node.geolocation.iso]; + topCountry.country = node.geolocation.country; + topCountry.iso = node.geolocation.iso; + } + } + topCountry.flag = getFlagEmoji(topCountry.iso); + + return { + nodes: response.nodes, + sumLiquidity: sumLiquidity, + sumChannels: sumChannels, + topCountry: topCountry, + }; + }), + share() ); } - trackByPublicKey(index: number, node: any) { + trackByPublicKey(index: number, node: any): string { return node.public_key; } } From 1a2e336c1874c8faf7354e1a231b75e7ba146ed3 Mon Sep 17 00:00:00 2001 From: wiz Date: Sat, 10 Sep 2022 02:16:06 +0900 Subject: [PATCH 40/44] Change "Running on Tor" to "Exclusively on Tor" --- frontend/src/app/lightning/node/node.component.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/src/app/lightning/node/node.component.html b/frontend/src/app/lightning/node/node.component.html index 6f9b86c1e..0c8451d44 100644 --- a/frontend/src/app/lightning/node/node.component.html +++ b/frontend/src/app/lightning/node/node.component.html @@ -86,7 +86,7 @@ From a8188a3536e28136f60861b968bac5d01f4f94a0 Mon Sep 17 00:00:00 2001 From: softsimon Date: Fri, 9 Sep 2022 19:42:44 +0200 Subject: [PATCH 41/44] Removing extra capacity row --- .../app/lightning/channel/channel.component.html | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/frontend/src/app/lightning/channel/channel.component.html b/frontend/src/app/lightning/channel/channel.component.html index 3942cda6e..3fceab483 100644 --- a/frontend/src/app/lightning/channel/channel.component.html +++ b/frontend/src/app/lightning/channel/channel.component.html @@ -52,21 +52,6 @@
Channels Location
{{ node.alias }} - Running on Tor + Exclusively on Tor
-
-
- - - - - - - -
Capacity - - -
-
-

From 4fb77a9a458c46b0b8b06ad19d44bacf91bd23c9 Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 9 Sep 2022 18:14:16 +0000 Subject: [PATCH 42/44] Add network to preview headers & inc font size --- .../address/address-preview.component.html | 4 +++- .../block/block-preview.component.html | 4 +++- .../master-page-preview.component.html | 4 ++-- .../master-page-preview.component.scss | 1 + .../preview-title.component.html | 11 ++++++++++ .../preview-title.component.ts | 20 +++++++++++++++++++ .../transaction-preview.component.html | 4 +++- .../channel/channel-preview.component.html | 4 +++- .../node/node-preview.component.html | 4 +++- frontend/src/app/shared/shared.module.ts | 3 +++ 10 files changed, 52 insertions(+), 7 deletions(-) create mode 100644 frontend/src/app/components/master-page-preview/preview-title.component.html create mode 100644 frontend/src/app/components/master-page-preview/preview-title.component.ts diff --git a/frontend/src/app/components/address/address-preview.component.html b/frontend/src/app/components/address/address-preview.component.html index 6a2d1efee..ede06247c 100644 --- a/frontend/src/app/components/address/address-preview.component.html +++ b/frontend/src/app/components/address/address-preview.component.html @@ -1,5 +1,7 @@
-

Address

+ + Address +
diff --git a/frontend/src/app/components/block/block-preview.component.html b/frontend/src/app/components/block/block-preview.component.html index 38018bbb4..fa6d3c36e 100644 --- a/frontend/src/app/components/block/block-preview.component.html +++ b/frontend/src/app/components/block/block-preview.component.html @@ -1,5 +1,7 @@
-

Block

+ + Block +
diff --git a/frontend/src/app/components/master-page-preview/master-page-preview.component.html b/frontend/src/app/components/master-page-preview/master-page-preview.component.html index 917a44486..17182624b 100644 --- a/frontend/src/app/components/master-page-preview/master-page-preview.component.html +++ b/frontend/src/app/components/master-page-preview/master-page-preview.component.html @@ -10,8 +10,8 @@ Signet Testnet Bisq - Liquid - Liquid Testnet + Mainnet + Testnet Mainnet
diff --git a/frontend/src/app/components/master-page-preview/master-page-preview.component.scss b/frontend/src/app/components/master-page-preview/master-page-preview.component.scss index 4dffc1699..7f44ade2c 100644 --- a/frontend/src/app/components/master-page-preview/master-page-preview.component.scss +++ b/frontend/src/app/components/master-page-preview/master-page-preview.component.scss @@ -47,6 +47,7 @@ z-index: 101; line-height: 80px; text-transform: capitalize; + font-size: 2.4rem; } ::ng-deep .title { diff --git a/frontend/src/app/components/master-page-preview/preview-title.component.html b/frontend/src/app/components/master-page-preview/preview-title.component.html new file mode 100644 index 000000000..1aebda6c6 --- /dev/null +++ b/frontend/src/app/components/master-page-preview/preview-title.component.html @@ -0,0 +1,11 @@ +

+ + + Bisq + Liquid + Liquid + Bitcoin + + + +

\ No newline at end of file diff --git a/frontend/src/app/components/master-page-preview/preview-title.component.ts b/frontend/src/app/components/master-page-preview/preview-title.component.ts new file mode 100644 index 000000000..a26368c89 --- /dev/null +++ b/frontend/src/app/components/master-page-preview/preview-title.component.ts @@ -0,0 +1,20 @@ +import { Component, OnInit } from '@angular/core'; +import { StateService } from '../../services/state.service'; +import { Observable, merge, of } from 'rxjs'; + +@Component({ + selector: 'app-preview-title', + templateUrl: './preview-title.component.html', + styleUrls: [], +}) +export class PreviewTitleComponent implements OnInit { + network$: Observable; + + constructor( + public stateService: StateService, + ) { } + + ngOnInit() { + this.network$ = merge(of(''), this.stateService.networkChanged$); + } +} diff --git a/frontend/src/app/components/transaction/transaction-preview.component.html b/frontend/src/app/components/transaction/transaction-preview.component.html index 83dd8001e..76ef972c3 100644 --- a/frontend/src/app/components/transaction/transaction-preview.component.html +++ b/frontend/src/app/components/transaction/transaction-preview.component.html @@ -1,5 +1,7 @@
-

Transaction

+ + Transaction +

{{txId.slice(0,-4)}}{{txId.slice(-4)}}

diff --git a/frontend/src/app/lightning/channel/channel-preview.component.html b/frontend/src/app/lightning/channel/channel-preview.component.html index 2c4fd42c4..1f33b5b6a 100644 --- a/frontend/src/app/lightning/channel/channel-preview.component.html +++ b/frontend/src/app/lightning/channel/channel-preview.component.html @@ -1,5 +1,7 @@
-

lightning channel

+ + lightning channel +

{{ channel.short_id }}

diff --git a/frontend/src/app/lightning/node/node-preview.component.html b/frontend/src/app/lightning/node/node-preview.component.html index b3a7141b3..e0a5b02b6 100644 --- a/frontend/src/app/lightning/node/node-preview.component.html +++ b/frontend/src/app/lightning/node/node-preview.component.html @@ -1,5 +1,7 @@
-

lightning node

+ + lightning node +

diff --git a/frontend/src/app/shared/shared.module.ts b/frontend/src/app/shared/shared.module.ts index c340fb50b..8c2c9e803 100644 --- a/frontend/src/app/shared/shared.module.ts +++ b/frontend/src/app/shared/shared.module.ts @@ -8,6 +8,7 @@ import { faFilter, faAngleDown, faAngleUp, faAngleRight, faAngleLeft, faBolt, fa import { InfiniteScrollModule } from 'ngx-infinite-scroll'; import { MasterPageComponent } from '../components/master-page/master-page.component'; import { MasterPagePreviewComponent } from '../components/master-page-preview/master-page-preview.component'; +import { PreviewTitleComponent } from '../components/master-page-preview/preview-title.component'; import { BisqMasterPageComponent } from '../components/bisq-master-page/bisq-master-page.component'; import { LiquidMasterPageComponent } from '../components/liquid-master-page/liquid-master-page.component'; import { AboutComponent } from '../components/about/about.component'; @@ -117,6 +118,7 @@ import { GeolocationComponent } from '../shared/components/geolocation/geolocati AboutComponent, MasterPageComponent, MasterPagePreviewComponent, + PreviewTitleComponent, BisqMasterPageComponent, LiquidMasterPageComponent, StartComponent, @@ -267,6 +269,7 @@ import { GeolocationComponent } from '../shared/components/geolocation/geolocati TimestampComponent, ToggleComponent, GeolocationComponent, + PreviewTitleComponent, ] }) export class SharedModule { From f8fbef78bf79afff6c2cd8863c3b6a5605ca1baa Mon Sep 17 00:00:00 2001 From: Mononaut Date: Fri, 9 Sep 2022 19:01:32 +0000 Subject: [PATCH 43/44] Disable block viz/map loading spinners on previews --- .../block-overview-graph/block-overview-graph.component.html | 2 +- .../block-overview-graph/block-overview-graph.component.ts | 1 + frontend/src/app/components/block/block-preview.component.html | 3 ++- .../src/app/lightning/channel/channel-preview.component.html | 2 +- frontend/src/app/lightning/node/node-preview.component.html | 2 +- .../nodes-channels-map/nodes-channels-map.component.html | 2 +- .../nodes-channels-map/nodes-channels-map.component.ts | 1 + 7 files changed, 8 insertions(+), 5 deletions(-) diff --git a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.html b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.html index 517eab653..782cbe25e 100644 --- a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.html +++ b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.html @@ -1,6 +1,6 @@
-
+
diff --git a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts index 7309a0a85..4cc465ad7 100644 --- a/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts +++ b/frontend/src/app/components/block-overview-graph/block-overview-graph.component.ts @@ -17,6 +17,7 @@ export class BlockOverviewGraphComponent implements AfterViewInit, OnDestroy { @Input() blockLimit: number; @Input() orientation = 'left'; @Input() flip = true; + @Input() disableSpinner = false; @Output() txClickEvent = new EventEmitter(); @Output() readyEvent = new EventEmitter(); diff --git a/frontend/src/app/components/block/block-preview.component.html b/frontend/src/app/components/block/block-preview.component.html index 38018bbb4..8d7852769 100644 --- a/frontend/src/app/components/block/block-preview.component.html +++ b/frontend/src/app/components/block/block-preview.component.html @@ -10,7 +10,7 @@
- {{blockHash.slice(0,-4)}}{{blockHash.slice(-4)}} + {{blockHash.slice(0,-4)}}{{blockHash.slice(-4)}}