From 54f949ca8ee3de0e075fd914180d890f4224126d Mon Sep 17 00:00:00 2001 From: esefxdz Date: Sat, 8 Aug 2026 13:06:19 +0300 Subject: [PATCH] =?UTF-8?q?v3.2.0=20=E2=80=94=20DPI=20hardening,=20notific?= =?UTF-8?q?ation=20consolidation,=20disconnect=20refactor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit User-Agent spoofed to Chrome on Android (was Dart/3.x). Domain renamed to userevolt.app. Branding to Revolt VPN. Removed duplicate notification, patched flutter_vless for custom icon + dark background. Merged 5 disconnect paths into single idempotent gate, fixed stopVless timeout silently lying about state. Removed kDebugMode guard from AdMob bypass. --- .gitignore | 15 ++ CHANGELOG.md | 36 +++- README.md | 8 +- android/app/src/main/AndroidManifest.xml | 5 +- .../main/res/drawable/notification_banner.png | Bin 0 -> 147023 bytes lib/components/connect_button.dart | 3 +- lib/components/notification.dart | 93 +++++----- .../sidebar_contents/website_button.dart | 2 +- lib/components/status_bar.dart | 140 +++++++++----- lib/logic/ad_manager.dart | 26 ++- lib/logic/hivemind_service.dart | 136 +++++++++----- lib/logic/server_list.dart | 69 +++++++ lib/logic/session_timer.dart | 154 ++++------------ lib/logic/vpn_connection.dart | 174 +++++++----------- lib/main.dart | 2 + lib/screens/intro.dart | 2 +- .../server_selector/selection_screen.dart | 63 +++++++ lib/screens/settings/in_settings/haptic.dart | 10 - pubspec.lock | 12 +- pubspec.yaml | 4 +- 20 files changed, 552 insertions(+), 402 deletions(-) create mode 100644 android/app/src/main/res/drawable/notification_banner.png create mode 100644 lib/logic/server_list.dart create mode 100644 lib/screens/server_selector/selection_screen.dart diff --git a/.gitignore b/.gitignore index c0dc50d..e183b68 100644 --- a/.gitignore +++ b/.gitignore @@ -105,3 +105,18 @@ DOCUMENTATION-ARCHITECTURE-V2.md config.json RESILIENCE_REVIEW.md CONFIG_REVIEW.md +SERVER_SELECTION.md +THREAT_MODEL.md +BUSINESS_MODEL.md +DPI_FINGERPRINT_ANALYSIS.md +CODE_FINGERPRINT_AUDIT.md +CONFERENCE_PREP.md +CONVERSION_CHECKLIST.md +HIVEMIND_INTERNALS.md + +#why are you even looking at this file? it's a secret. go away. +SERVER_ARCHITECTURE.md +turbovpn_play.html +supervpn_play.html +hetzner* +DEPLOYMENT_REPORT_FINAL.md diff --git a/CHANGELOG.md b/CHANGELOG.md index 3b13bc3..e9ece6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,40 @@ Versions follow [semver](https://semver.org/): MAJOR.MINOR.PATCH --- +## [3.2.0] — 2026-08-08 + +### DPI hardening +- Spoof Chrome-on-Android User-Agent on all API calls instead of `Dart/3.x`. +- Renamed domain from `getrevolt.app` to `userevolt.app`. + +### Branding +- App name changed from "REVOLT VPN" to "Revolt VPN" across manifest, splash, + notification, and VLESS URL remark. + +### Notification +- Removed duplicate `flutter_local_notifications` notification. Only the + Android VPN foreground-service notification remains — non-swipeable. +- Patched `flutter_vless` native code to use custom notification icon + (`@drawable/notification_icon`) with dark background (`#0D1117`). + +### Connection reliability +- Merged five separate disconnect paths into a single idempotent + `_doDisconnect()` gate. Eliminated race between timer ticks and VPN + teardown where the countdown could briefly show -1. +- `stopVless()` timeout (5 s) now correctly shows an error instead of + silently pretending the VPN disconnected while the tunnel was still alive. + +### AdMob bypass +- `kDebugMode` guard removed — the debug AdMob callback now fires in release + builds so release APKs can create sessions without real ads during testing. + The real gate is `ADMOB_BYPASS` on the server. + +### Fixed +- **Notification icon:** Replaced five density-specific `ic_launcher.png` + files with `notification_icon.png`, then reverted to avoid changing the + home-screen icon. The custom icon is now injected through flutter_vless's + `initializeVless()` parameters. + ## [3.1.0] — 2026-08-06 ### Architecture — domain-free client @@ -83,7 +117,7 @@ Versions follow [semver](https://semver.org/): MAJOR.MINOR.PATCH ### Added - **Update checker** in sidebar — polls GitHub Releases API. -- **Website button** in sidebar → opens `https://getrevolt.app`. +- **Website button** in sidebar → opens `https://userevolt.app`. - **Timer syncing indicator** — spinner during handshake. - Dependency: `package_info_plus`. diff --git a/README.md b/README.md index d95dd81..74c7af6 100644 --- a/README.md +++ b/README.md @@ -11,10 +11,10 @@ A free VPN app for Android. Open-source client, transparent infrastructure. Watc ## How it works 1. Watch a short rewarded ad -2. Server creates a temporary VLESS session (60 min / 4 GB) -3. Your traffic routes through a single server in Finland -4. When data runs out, you're throttled to 1.5 Mbps instead of cut off -5. Session expires — watch another ad or move on +2. Server creates a temporary VLESS session (2 hours / 10 GB) +3. Your traffic routes through a single server in Finland at full speed +4. When time or data runs out, session ends — watch another ad to continue +5. No throttling, no slow lane, no mid-session punishment No email. No password. No payment. The ad pays for the server. diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 347fa8c..6c95280 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -14,11 +14,12 @@ + android:allowBackup="false" + android:extractNativeLibs="true"> x6HufHUM{N;%w$)O*t!j;gwp2)Br1sVt zDU~P@F@lmx5S!TK=ljR+uX7&famM3u?)$#(*Y&(!SG=jQzR+>0<9vL4LIw}-KjGs$ za&UT>@2J4R0Z5jq<>NcgXK??nS%|}2WBf;k-uKJHvm3nT>y2Gs??98QLiw!oSwXqI zcDF@OPbA(De)@ejRcC*bS(?h*V>5aCY;Lq84<5ZAvAVe7NZ;LJ=Z=?RJWDt%USwnR zo^MWYF`UERskzlrOlh@J)~{UPswbvTK{ndZSwJ^$1O}c$-?1cI7p771@{Z|woO%wA zP~CcU{j_JApB5+T96nenMKhuf92^=ktRF|??Qb;ahP~wJ?pN=T9DI~YHt9>7vlwcO zoPO*S!ai~Nn)WwjvP`sihqNqu@p6xWdXC?pHQkwIxJ~+YhQH=Au9G=%N%CfIbU_?( zxXO*#1l0oMizZ1-|& zEVdLPG=yu0yB(_BE?PWJv$_t5b`PtKR~>crS~sK{FRIOVqW{+yT5@iFxK^-rUSs>6 z(#wo{i>5ZumzjYHBT1Hv8J6NAW6)A?SS1&qs>R!E;E;ZZ|L^ta^*WaEYF7A_cY3Fq zOL9e|-YTg5YaBBnQao)wUqJ>;28=S4T>Xd_GoBD&-X)A7az^;AOeubCd^v|FfXW_L zc=vNvDOzml>2aaE;`G6o99T-Xmjpz@4Ip!=^!=Z!O@;f-YPSUkH8hPS^pl;3v9mKF zF>&vlo2E3*)*265Of16$II<9ohwV&^!ZJ%sAs&b?4 z-bxf}<|K1f9ot!4s;(0h`VCF2o(lt)*IGCIn8nmEhUAGk>yG3Ua)c6-vB@CZ$i896 z%Np8=51lG;R1MVP`gb@+{C&9>5_z3B@5)=&0c(;E*H0v5iX^=8cqLj5i^-fQ1c-e6 zbTRpisn|U0`u~D7ncEt|Z{(pDH>JM7kK`bUIpu*?^baw!GnLG<>3}9826tmDC;vkXNq=J${cR=!^y}`CD8K8HduH>!-lc7B` zah$1(v;HlF<eO@ioEvOnb2bpK$7ctbUIrha=a;rRo$U)OlcUX*?LyLNTu@nw?#-xXc$DDKAz??g=S()i2+ zy!qhj)23gEYa99I6coBCHzd98u?r9}2>s#ThvP)y35x85e zt~S~J56dgnsqPrgg9OXQXlxMHtuCm(dZSu$Ht82pJKkV{+i-mil>W44)Jl3=bz3tOb^55Wtrrb5&FhFanO=DQq$k96G z4K^QOpi$MN>$aq(2P8V^C2=F@-)KA7q9Y?@2Qhk+!>6Y-Q;O+7Lj^$0uZs7HC z70Yj-Ml;KSAN%?pzcDSx&saRxHDw#`=y0H}23GBX!HBp4HiP^EpIYziF^gLZZ=!7f zSPz2eiRRS=uizcinf+}RvLo7HRqw`1Em1DkK3F{%T@qeRQNCV9oE)YGE}}KCSYsQvy zlShj|%mrJLfPQ!8UgZ9%HjPTtj=q1tlCB6vKWqyc^y8Qb(Vkq(Z@L=dbOX3=mC@c5iC>WaK0T`F4KPrD1|d)rl1h+Uu96N1LOtwpfYr z*-gDv^AyUz-c%y*7}F{*{)VcOqbGP<6ZH@hVB{vIeTr#RPxI_Nu@p%VV)}wm3Jc_Y zPzrvltv!94_iBuShG+(b&1o)}kt7GCbwpWm8{qOwD-k)=^+%z6O*xxiT#(Apc_XB9 zqko3Mj%tKXk>YH_aBDmL-!O~5j->L|=j2Fa-RDKTWJkpw^X+a{8p0uBDzoGfC>s~O zk`-E&pt~%LjJ5hty`A!~HnM@Y3gJWiEd5#T*xP>i{sb~E?=M96rW{79r6s?m^H<@o zl9t57Bmds8qs&v{pIz5SR2^(!CvTR0A7A?1t^4jL_n08nAYTJoCo!bdE%UPQ?gN^b ztD6-9*hV*1c)R%eSp<)p0pkrtVWAG;jftci9o2i55%9gN9Y^5M`todf-_+K=<%Tj> zc4z6P48+PZ!!;*x7K-Jd+4=iekZn?rLv6O)SN682yFta&a4CMYr?db^ZepU>$CA-Y^}UU zX!vS}NA#I%IdLd&0B1&>k-HbUGKYcUpyFJ!_M|;uf6onLw*qaKXrRSo(Z_CS6e9YA zK!pQ(?YQex5ir8xy8gd@O{%-1_CLR@xi$CNg77QS75~N-5!? z1ikz8>;4ymFJ9APwc78M{pD+S@s585$w+HRc}S31D9TAt=IXwXpu<+1X4PE-nssF! z2zdUTB~zXV1ge{sNkNsfw-gAs?R=Cd_qB!EVcnLpi%tx!V?j_bL@vqls>Ohy%873x zUTQmr#V!KhVtojTQdVhsld(VdG1^yq3?jW65<=+%BZCJcoFXY`m0Z5?d~K7Sz*#| ze^e3y&+fn@gcezYPG`9Mk!>?4R+;&YNo+%Wh9fqrK-+8F4O(SG>j%?3V`ktz1~N0- zj7=o&)9-iWGjvZQ+xI34yQ->w5dl`P{X*6^@Taz8-*^;TF_Wy?$+fHw&Yw@!o*7LS z1gWa?nO*cO?l1f}u|U4Y-!25VU|1@}(`sBaRp0D4Do{!Y3!?eup~@Y+v{n_^-rkhn zQf=+@9S&Cz?6A(REvD0Kb(6TJeI9qY1G< z?TN5K+`@DXb3*_>%|9)jEv2%Rzxsi#>_F58HB~{;lXCN=6-Mo|YoWrRIcIi!hpNb| zF$yhvyG#UV)!ckhpM^BwHzzDm)xRls@nd|i`qpxw@vAWVDhVBoG(g7!_^>pWawQ%$ z!${kRen60y`s~;1*WqkfY_bb2;?77-$zyjEd-QL(?kg|T>}C5_TlCY0Ru!yKo& zCv~OKfllfKmUval*6Y5Yh|yA{iv7kV1D?o=9TM$WEC~;mwO!VV&np&UN`XF#>7ry-Jbt?p zK7q>Hh?n=fy_Ory($Y30dD&Jb^l$suZXmLndLN}GxmMiA0AbY{V2kQ z?e}Xh{%wU56&K{kwP!Zclz9nR1w+H+t2ZdN_Q+K}=0`leJ8{Mw(y1vR(hp@>XQhgJrk(<$$F59N7|7!6@9Gv z+=wiQ4JHY7n0TNpnZ`RI-xtL2H6_I}ud}IjO|JHNcV|bWn3?SH$f zejepsWi8t3L|r8b$QO@)%bdfb%re5yS!7Q%7JplL{_h+`;|yXrbMDn|?ASJqlO?6R z8$qjMq5DY{r0yOqvGLhUF6Fh+ZC17>9krsajd_PC!8uDSV3KuD@h9GrCtvT|o9{AX z$iNgcW@%vQMrpJ|%kk7?(yD{ogh&YdfxF9pYSljnh)>hKR}e5~A! z8qBqygKOqYUt$&bM|=ktKPyrvOQ~1|M%Gh#orjVFg%1N5f9u@KLOKk1Lw7>u2l^8g zJ7&>lxkVSOQeixkkO(YzwL#8@Anx&3nowZ1FrYV)z~vc~x&#Kc9s&H3-(OgfK)H^^ z$9$X&q4I(R{Gi`6BukMBDE0lPDbqv{8@rVX99fB8_a8XrNQx?ZQS)PVM*W{B&YcOk zO0q1mY*LhO)5KHt@W86mc{2rV%kLVo>%lgi+g}|}>LkBHwIYN@P)T;@9}-0B538ow zq;H%Y1xvLbHIFRYzgeI`uUj2u%q$I429l#{!d2Gtk_D86OhEFpU$S!l+(Pi+r3|C> z<*{nn!x>3G--V^Aoi!8RRQKKAR+0NIG?+1?cDgnJ(?)(FR$q4$Bq*&VnL@#ulx1e>?ieRU1t@ut^=~r3V8~(T*IT|m`jPunaIAv zg4B^=C8NpDgAz~iOv^>gp$l|7V{ch=ovf_yAYcbP1t60*Q80`Sp;dtkJB6azQi1T1 zB{k&JL|U5xfjmblNKM{Ad!(;CG)Jw6O`iVEH6tx<)~x(#b3Nt8hX)(fmIr0US{BU z53ja0h4)Dintqk;el@rDkkgirZ$BM7kzSm z)^MianuuI~W&6mlJX@a%=;Zl-1Bx;l7-N}F5s;Y>CMg?eqP#Fr1bqA`v#KdC)jP!y zh0u}|JcU2VXykEjt6aE4rKT z)8C^f|AawXN${-hfQ6kNKEJ2;9_OBS`Z;#^u6R=B8xU}yWt|H8_~=qqP04AWkF7@@ zXJ2~Xc5KwZTjDX`u_gaL0hVB%dEXW=XRmI;RgMoG;a!%?9`-8Bs+p4UCj#Pvxw2el z5m1!Ze1>_I6ufHXzWTbhqgzzg-siaf!d=)%^f$qC3-&1sNgC=UO7u-E^~QjFddyGN z@UmZ;xy}NfUAxOSQ?qMme|~wyMH;C#q`6Km7l2Pj2ZtnSzn%5RnP&rOF%0tglo)>w zsq5V0S~CW!#Hx=r$sw$pl#{8P42OzZU(JLW>u_Oe?))$-Y@j@U%4=MsF<6G}{|wn$ z;j~Spsuft?bigK~FbSjW!~I_|mcS;&t)Zy-hRKF-4-Q&idw+Kxz(=quc~<^~lA(+Q z#t!ay-FbRA+39i2H-6xL(hG~D!!KTH1^x&@hx(wNIz86WzYzcM%r&_=q25!z-YH%! zK6g`zSAk9SyczhPAhjo|j}G5{06Uh-e41!3)`PJB`I?FRX`dj-`Kt18<`hS;qk`6C z0e~+Ys1}xQ&r@i@-6*Pl`=UTz(&`+1=%3?N{kWo6Q~%6uW$FbTDERkLJ|WcEO&agu zQy3~o4<*$YDB%Wl39YOg3IYDMcTYK(i_t%q3R2}YEwXl>rYz{5D1dv*TF<|IG`DE@ z8?&gg)5MfIhu648c36DF4d|gp?cRjutWQ@sh+^Y)rh9~$im7RmM_nUrenYm^DjSxe zY)p3TYMkuhH$u9nm|u>*--=H?(^AWBKu8_&JaYDEV!lgzBwPI~Pm?s2b~5?&A(YNm z+Z)M0aOn37hjubrzC8~Ww4I$v4NR25H zmeD#ta8j?tA$E>p9qBhKBE6E-X@R!cdiYZ#CAW&e&j_N_B>A~7SL%@#+dVa3*WNp4 zhU#}AW02n-%puN8t{&@1yXj<~MpqUt(^B&NcVT;((dx|5>UJW6uFC_jYUyK)>TqSM zOs~cS?qgaR_bR}{+7Co!B$!XNZ}$%fM8>*r^*{W^ zEvYV&oi!5AUV$coX6FA{)vrr~GW&w26x|W79JzuIH!t|W_rzo!OLikth3x9-8E3C|PYeYQFnkr*WYR_C+!1~m{Q;ao$J~m_n1U{ri z2}?18g8BQ-GQA#pZExn6_)uJ9?)>EZ`>O{**qz)UlMgX@mK!{2iCn45c1C=PZ_N*- z;((Hw3#{S4^Ehbh+xl7$&;LV{i~mA!`1#CW*9WCfHAkJ~w{CMx>I>qx76u0bIMQCc{uBRnsH`6K z=!WHUXAk8f)K@M3ArHCS!znJr`hy|jW|C)Y<7(@M)sU{xiO)TEVgp<6`gpDtfh~p8 z?v(S?jusw>T5|%9ryzyn&Hd;ROMco$C`kV0n8trd`&hyKGKWgalc$z4QP=* zjm>yGXjAOZ_Ky9~=INFrfp2x6d`NxN&IEUG>e`r&og^5{P1}f_=A(4ONaBEPZ(fzE zSrJ}ihQ@L(&DO10#?>cVe7V(_O^UBBN`>2+DAQTf9;^8lS2Qae0$(Dh%)6t}4n?6i zkfAZ=Ybl~Wmm8xdBf+_vMBmAVK4LI>^xvRgsHiQ975gc>e5lD=v$Gk};NjZTiig{q zOSSlAM!2C;2SRRpkm3auPS)&@B(w1xeXad1Nj}5D52qC-^#2mM?r+_apT)T#){i+p0o;0|0!4!=++3*XYq<Q?T`h zsQiDXgP*Eot*E8H-bpHPNN~-d;R%&_N?pCCUfSJ=vZ!)-dN6Tz?H=-tq&!s!s4@(M zdw(GPZJnqBd!5hnq~&G?E9BrAwld|~UqnEJ@nz;&rr|0vwMaG_*bBk16p}!<)VZ!x zo(UuaHiquas*(3Mi!g$E?L_ORrm_Ey%`Q^Xs4^Zw9s{sq7#&|%haMzEoVn#6Dau)Q z?s`2MJP_L+{p6Fp%jkfDGP>jfA5H#pX8G7x_b8a_J5A%KeL^Qic|)5+6?(5E{+80sVD^-9@UsX* zrT#li0cRTZ^55h6$whTd^>%Ku!%~-D{Lo}K(S4t&N#d3mdS;Bj)Ax@*xPPobbXHEk z$~QsM^Nn2JlD5{rXPz;;#&UH(Y7&tPOpjk>J+Y^0`fi#@>_TMmdU@c;o;3j`YoFxR z*mXMa_||MvZLeA|3ca=)@Hq=vG$GvRm56K)uIyRoS_9VZye9TPIv3Mt_*!tIm$+L^!BjDcb=KGO?jIrEWEak7Crd z%@Zqn++n7qvDc|$(Ic(oKzD>^MNzM2fihel(OtZ7r8)eQBhdW zTvADRafTq4Dykm$K>n}oNvxfXU15}(41~Yvr?BYw$5i>4K|;$r9+bu4s}YQQsA6{J_zxK|q5e+u|(oV?Jn-oJg8Zi4xw zw6X@}om+pT)v(jF3ZV7m>(A`z$-?albGw5fK%YSQnGVtpZ&#G>%B0ct-aFPyhS%Xs zUZV`h$R`{MJVtnj_4CMk+c@q|DHTWph~>E#g!%pB-A~#Fn$rmv2p?GFhLtzC?FV0yp=r+VujhkW>xK)+}m#ZL+eP;@}OVweu8Le8ZA2*x3YxY|CUt` zR#{UqY}WO*(Ui1Ml+8gbGB<=|Gr(c!%^nI|Rc$731vrrS&;0ng5nyIi!CjV3p2y!6 zXU0Pbld+FVB}<(L!SCv)w0(SB3r=v;`(r@CN>|0g=m9P&pAZ}{!t_#(%+y%`s&*Py zx7+Z+IeX&a*T#G)+U-Ibc|-VGJ!hecjB*sUFs>BDg2|CeWijVE{OdS{Uf>b#5MyowxZyyH;ID5GZ;LafSNq1=6Qx<^P%zA@wC`|aMh zUT63_bvE4eI31g#2H10%e-R$yAX!gEu#U-JLt7B`5>8+cH z^Io3#lfN*u{`6OgvjyBY>gDtKv+l==k z^6+XWuXy#Sna06WgsKbTzL!fiI2B8EQ*ypbDfu#{x1{$WR_(*So4MvB8jZVko4`GbV2D4&%HWAB(M_h`R3bnKU+%c6QqSO=%;1n}_>C1B$ZPheD& zah=ZPE|f6;JfA8ZCnzlpCq&(_7}>9u2$staD`>mSC6bjV5}gORM9J$TbyZLo`;ou| z-f`x!a(T{JJF|2l8kfvO;_=h^gF62$+!#B!)^==N2^vbOSITk0*tJHf-GJI}-1oLg z)|lt@FVv&V6V2zES85C7=eqx8yN?H@cq8~BJ>8NCTb?#}&8+}T0%`dwS#4%-e(t%N zPH4#c6=a~fgidBEBdcQEV2m6}01M@0c@7ftDk|HPC%;dog*{JF|Ft`TBkQr1QuIpS zYu9Z}Q;a@F81IYnSrG8b$4$F|r|2t1rm5(DC9SL+_PY}#acy_TR#B#*@<@pz38<3kx#`<6em%)RMAq zl4|vTGhfZ50nM97fK<`o_M!qX?`*MpXRmv^rE5bk6Myavu^{zEDkkUlo~5RF-L^2n zIH^igZvmfm+fj>)rUn`V%omI_z|f{gspGvoN&N5Lt;NpnT8w%BR(Z_lRj7JM5^na?d zD9v8z4&Ubsr#-z6KleNeD$_6-75`y%i8a*eR9%U@@9W}xJL5YWh=(o^lC^gYW#qlQD`rO{ z&FqXbo@C{yT%qY93xZ8-?z5PMOjY^Vd74qhn7Ym*O zW4>yL=1Sl*2AA@sn#u1DiR;`z2>4-iveyr^?Y^MrlE%M`?Tpx0)_I})8(m!P__f8M zRO__*JrdVL=OdF=Euiy;zgu+U=RSVJWT(f41hh_S&LRk;-hP3`n7ziSOWV(FuqsK*8Sa!=lHz*s zvXwJ1oL6C?T8UKG-g`;Y+v=Q)>~jUalxCf3U2rxpzcsQ*@q_NLHE#<2G%$fXo=L@2 zU9^yQ`(Q!Ls?A*eKr&1fziB7^*wZ|R!ZS4i1~EbhMHuwG$Vt1s%wkJoL3ujDdw>}C zz*`3x^yFlr<=i3B$-nXYc``V)$LFN%E{izZP#O9~J69}P$tUyGGCv52-6a9ObXZ{wE}cv7bV)ge=gG;`TZtmXAO~w%@S(?iQHP=(WcUrg(QjAaU)yL+ z@&U^TE(R#1EmTz2GNJTg`N~<0gnp80h6eeuvv?(rR#P7qq0aW&QFePLkk=iY1u{`4 zseFenb_R|(FqUccduqjGFll}+Bmpq>E*ly=lB$yC&0gl?cP9v1=A*;bhbS6||sySXog z3U68*IW{m5f05(*NF5x|Sk4>NZ&TxdT2HXz9JPWa?ht&`D#e?wQQ%3Cmutc@8oT+c zViw}Y0K&eH6x(0yFi)2LJGK?8-ZUeqeZ)8d9hIh(Vncmq*Z1I?`Mf#=c)8eR&xt*@ zj5K$of0Fz}r5|XCf1Ach;}d#`NOWdsb2!pAmZ_;Vi&<&M=;1ZP7+Xa{u8WM_|V*fnwnmc9usYGo6#9M#VqR)iATQ#`rV!F# zi;5|Q11XsD;S>EbGF&KA0lg@E(@W*$XQQ+6MK12Br#s37aHN?;^GK=&^masJIXJ=6 zz!acu%;*N5;ibJWvYTw`%dGN1qS=&R9?$gL~gZd18N({Qewh@I78 zeoN4wX%ECmWA1SM{c7SpBypx1iMg zKxfc{c1+f`_{jm%TYk#&a{VvRti~YH1$BlaJ^P$`Ie4Bo#uPV24UdM^Zk0}rk4o&{ z;0)P8Lfa!Mi+uZTu=M9!p;L#v8vDi(3w|;!E>2pc)$BMbM_10N`Gid*VeGBzbWnGmTMjWHlE4q9?U4g4Q4x^Mm6Af zQut5O30PQ)e1usT#V?G6XI!6XV2-ck{6vcKW^BO0)$A{BWr4@}$&x2a<6G0y5JN+*KW;BpdSkP2K$fv9s&*nf(cyf56Bc8C zWk#UvUCkc8tXfWZRq|stR#(V|VoHoH0)xiHE&5+EfDSofBWE#2@8&N}Y$O zdTf`@W}JLMgP$HBeQw9D*gG%){d_HDL+t5%WiMUyap<>FlTn{Bm+3Jyw(p}cRN6<5_RXc8bVlA1b$K6vbezLr4Tq>VC-hpfI zt~WvLQHc;YZ6w)pU^+g8D&wAF?x4jrUM}xl3DAjUYoz)#RMJ+8@Hhe68@YkQvw02C zTZ7Yaxrg4yD$ApfG0025OWys6-uCgvE%%TMK54xk4X0!Df1bxok24*rZFFD?pXq9Ud2hR%;M zaVJ?)o}ReHTi4~oSe45;mQG+XbBoU;;>%{Ys~*z>H%AT)1C~OY@Iw5(Tq#@jn;Pj9 zt7LGb7b;@D(=PIxd(!eEA1#*Ek|T*`e{-PO2M*;JIDu(dV>#jPTvJN_k(&2p^@gi`jva-G*^W zq*-KfuA7QX@G$Qca*E$;wD||VFYW{=ZU8SPbB0GFDA%T{KFGN;Cr3CaUKlY?Z7lZT zu%4jW#v+cMM*sCcIU8+(2ES=L!2?%LYNpczDHtn&R?~?7l#ogPmmybpt{$6F9RUVe zXK9$Y-LCQhl@@v~dO)cu8BEgG=8~^fZ7%$6dNpT`0;j8pRR!%2e@&XcLLf$j5p!sP z>6-|7O_LH&Uu|QG(fuJ-O|5%oO=jb>o`~YizryOX@%Fvg* z5^bMnQH>i1lIKaNe+;Ec*03T?vYL~je85E1rRkE~<D zjET4TU8G1V>FzMxOf2sgUJTE?kf=%%sMMXgotVbeq#=Yq&s!JikuzuQ*w9}*SVQM; zb6I;GV^9!7IpM9m*I=zK}&PH{&^yW;ALwM&{E} zvDzrQ)9>wo;>r9#W5_U2@~rUynD{+}s@~ozrw7i@I z869sPgLG5EY9csdvh3=U8Go)^(&&7*Y?JA5y9}lyHg29`veMihf`cV+@&0Y7_dW^~ zj0@Ub7e}Usp=*>qUxg9IM%HAZ$)G!}Lb1p=TE3;NjIRnCzgejH-r0^DI0i5Q-DyKMU5|)txZuzUyEaP==_611lw+-XTI@@|`lrKWReG~>;?2pAn z-%f)zx@gC!N4o=8-YtX3*f&?e^;HfjG9m40tn>l?{y+luhMWUEa(AQ0_t3NW&&M?c zW5oOb`G<==PKrjKJ;(p#HaxfhG%m(*PcbR2UkN@C83s_fi;BudlUV~r2Yz&UxKXa2 z3a9!W+T-v2rvTqs*M!Cy!Fp%E-O#!M?-a#PW{LSP=67zUxT_>vUnF6Xl#nr+$hRGD z6DzWrFo@n66JRkL9;P$nACqm(OIvMHCxyyz^!v)h7Nv#!GT=m9=9j$>vB=Je{t0#D z>2cq(G^OG76YLin92=QxH#wtkR%xXLQee$!lIlpq*y+~#btAiwZAP^1jpo~9qK@}W zd}@>E-gNKU?N>o%+n0C0Z@{l#uMVwhZIhKvoY6USC+`u!;YA)&?oQp03z*Os?f}k_ z2^Gv!^woj>{$m4A{mGCch_OvK3sC}7Jm!)T;JFkskPkt0@h+2{0bEW37Ns6|%#|Ny zrOLYvk^&;TnD&uR84vf|E@G4xYK9viT-SlC2fJA5Y;t4nPPNu(|4R(rg^_88Pfj5n zD=(3$siH|>q4HMdHOM_3+A_TKUQ$)1;a)Ifa~7DElDksVsl4@NrMPqj*RRj@jy0ne zcc|`1h9Q22Bn19;owLu28x)+XJ&yW6Uc`&0kKv!MR#mKGD%}@(j~0Cq9C)(}+9#C4 zGMY=xMrACjXvcx9!<*ml8nz#3{wTiZF zfEl>i9{6(VRlG%-oi{krc-d>rBxAUVw*Z7|Iu7x~9wnaWFU(&x6qHWQ)&exch)sCj zD&vu^&5g13nRsBS7Mh}w>OV$7AT26^<=Upb96->r~9s;YK>ZmriojdHN@)-W1ME4JJC|AbeqUd`D`;Fagd z^7htj`IMlLGKI++lPT*DyH-8zv&+Fz*n-;NGlUOK>ynRz@H=P<{W8~BI!aIAt% z)+HBNe`+eq+x|T1<-sgL*0_7LD#eD^iO>%i;qdxcH-^37$gobpcT%x8m9(A^3s(CH z!SkOQq8!*2X!ocrkj}vFE{N~ugg->X@ZtOA%ZFSbX~(A(fR+p)ci^UYFRg_vHM4?7 zf{EIrA_6rAh$BMpZ%lQ(`f}Pt_1U*oW94dll97vN4Him~QpocOc^Lxls4f=jpsx(h zJQT%GB4Z#H)Q_nLT^2Wnl5eeuaK5(f1y2ZYcoyt~D50@8zI5QA>hBp~GLkJ4mrJ{s zg;R-5^l^xkACBp*GZ>f+TAW@Mwc&=}Q%`ik(KO7eK-e8>qjlw2!SRYD&Xy%fw6H7R`mwtHg;dy)|9WfIKX6Ng@HHQLK1 z665Y!$p-Be@D$EFJ_ZbwcE)2-My>aM0;R4drX%@#_Uut+d(VhF5}sCttN+Zk!Z+oeMp-XnI0o{3hj_HvUj9ZTG;_^P{mS`DaX5 zIBSe6N$c6jJhI?|}cex^?xA9#M@92=SAlcLy$ZznghJyO9R{Dx14PEJ|LL z#ljENCdM+ny3%*jxcnZ7t;#+h+n4oE(S1*J5eqfKAnQt!L-WMR5&cUZ2iC(aTjPiAoSb6-@A*87XA_YXk!ZHF9r;fnME`-E>Sw$JHTn6OPXdBM9qCTr zL#%m{Sa25{F^7sg6chj-PD)dY1gL^L$w-!PP zB}F-+%;wwrs_fg^kd15Ec2#sAmj^<~LAR#7T^tQcn(APSeZur;eL)q;lN)J5k-Ka+ zzRw|whcAWNgHE@IigmsczwrK<{KYF55ch@$^j=8Bx9yMhcSs5!uM2;RlGh)IUjO{O zy~|&7hNPl*<;hij#F3Gx!VL4=YOcjs6qeV$M3i045Fib z7lM*hO2s!=F#FPRQY1VY_PTna?hOjwFJyopZ6Mwrl}gIJ~`=~;*;W(gH|EA zMU#Y$wuZhOMbiDX0WmmGIN04gOvib72590D);=x6 zr`egUXIdRm4|=Ay_h=8s)t=|gG$nuZEj1wKZ=_jN0w2~u=koxC83sM5{vDqlIf^$d zEm%D&zfN2Fw<6Yt@qKSR5P^e*HIs{K7gR_H>D4!IhKd!eu84IS9A`X-wL5qVNS|6d zzMSP98ASp{VKep}OWnE_7k0>zq?uj6x`k^hlRl$KixE5Wd?Nq{)j!=ae@-#{`Zf7X zg$xU_65?9_Bx%qJR14(v5IBQ|_cL{ytnh_vc7%m&D`L(_R?{_oAj4Yd3E?DjM$~rK zBB?d%OoK+{4->eV)-X`CC+AJz>R;zpW?N62F3<&j<0iRwiF;5rA>;@b9~aCB?`!ie zZvL8j(5P0D+@aWm-lzVJUGASBZEFZ^SwCVy4OP=uD-F9x5|3VV3dEZS`?pDUZ0SuR zSI{394c){ni0tV!qw#(tHP;9>;XTDS@{+UKJax&DtGcD9z9YTp8>mFSDX*L}(7)X3 zy!*jYzIN1p^_AddhO&>Uoi^9Med@+pYD3@OtC(8yV~=GLAXn!|nd0@4eAOG56&BJ3 zUc&F{*kc9WuETqe9DdL;lz9J?TNz9%`wLAH4!FjT`iTadS#YT=5=ubo+Qco-XJVms z+1prU`ucb#?2I}VI+9f<22A&v&Vskx zP3B*x4p+G0eq7~_Be~Z?=afn&LtetCNs4R@H?YmrZZt>(-F|Fp8E zRi7Q%d9HekxCfSkHe!=^jJ>NsG-+wy%E#n-c_Ia5vh6oJB_HXvLoV65igC3mn|cV6 z#qXroXEk6BWm%c)*vvI7>`v(%YB{ucHAw1+SjLk>jJh-spzq7`N+(1m(#dRxGG02u zdeh>kD>6{AS7ALxKebQ+Hu@{d>bEYXJL+JXCHw4>&-^%GePFL=S@*qTErZ4ic;rx= z2-WILb%FC_E0oM#eGHaxZ$AM?KY6HZXlDY)hcLb0`=Lfj{ zs&yWZ{<}ePjM^4xIr&G@)UM4epn0@uVp&tMh4;?*LUybwHd@{)(gtsnM| z?II5F!3KhT? zW+K~3ZPA~Y1>mIIZoEXwhZG+rI_0SWN=anO#DL#wf$Y_eXhBFPjqWZA&jn_Fd z`cdOiC!R|^m)smWPZcI9_|2<7_;}gq) zPD*!V&2>^)3uYE+@G|9aU;lrsw;uUz=G=>1WFitF5g(VGrFytpIRjs1WF`v9u<%Ab z-qRc2WVOs0^!oC! z=g7f$|MLCF4-zo{1lGUu$Faz~>v`FjT7dk1?*F6d+~b+<|NpOa=~51r6y{JV3mwQ| zj$2(S5mw3hY-Jg9n)9(PMdVOPVPlmt3?t{`a@wxs5VK8;VVRgi4s#f`-#)kB?fd8c zd*60@-(K(6^Z9r@?vF=Qb$g+s7_6g=Q>4)63Wite^q0J5iH7D~zIeN|`o%=@O=Cv7 z8l|+Weq%3Grgy7}x6Rt;JgtMt;MwWB+VJvs{{d z3cp=cq2&5ceATlAxk{9toNGz>PUv}+Kj$;ttY??whbZ*6s}`MqMbUY-*rhphGWB}} z`Qkx+XK-zApGpKG(a!_kBh+79_Mt=%wrx)+z0}{S>@cme+2|ff zJ+dy$fzr;+u_tpif@t9V#dSFOI0C)wR=uAmGZXpaLB z_hjj(#F$6TI(h_}@HW*CV+?etXRE`6wr1B-lp z;PbNN`2{CCjAn|T=j|Bc1o>Ze$^%06TBV%$mam7NiE9-sLyn^8UbTc;UQg*N^X+*> zy}wA1xZ>5t6^A|4yZe~wolQONSI}!D**WHTcUYEWr}C3iBJll<-SghHHk^K$!-F)Y zn?y7{F8Wwut(U)Twd>_Nf=8C6E~}I6fpTwU1X=pp;}7<%b6|!Vq8M#vN%}OcSAG+^ zmr&0>YwDwC+wg!eKp##VNhj#@^0$@|rC>v^NHb-SbcvhfYZc?=J8{<+@7H?eb%nm~ zHV8o^?vR)+ij0zy4xQ)_)?mp}8MKe_nPzy|Yo*^62=QSaBT{k$F57j6w&i`W&5$Ci zLu>1eZGCNwUTmM+U`**!3Ehz>pB|6CC#A_!&~*0?>`L_d&3BHH!6&TN{*I}nM-w_U zD97Jr4%yLMiuNJm5wlmzh(hO;j`mq8(K4A#UvJ4d^xB;Z<3V35Zg>h!_LC96IyUQO zPmj3V{aIlvf-=2-X7Ja4w-ye7yq1U4Fd{~YBflDE-gF}8lS^f$i?oN-$Y(w0_H}jr zV4HNa*d}Gm`FR1`#UYIK!f!_%IEfgdY}}o`3eywlDwnNK_)f4* z81O`gUz3FAwJVa@u<8>io~)rhCfeKHOUJq6r)$=9sKPV;*BXoQt|F8Y30><^;*e(h z`<0{^KpEyfz3-a}WKTjQcD^J@eB*!|R!i$x|0H}Bra20v~e0uaf{L&*=j$ygOxwPtQceq@2Wugqr z|4;B

$b@0Rb)jfRSE29b5?Ld%PSpQ5INJnv%V};!uX-=OePj28;BGG9)D|HO6Hx zyxJ}i#QuikKb;EqbktCb6G}2V%;u{L$52@U;V*Xfq2DK@n0$v_;b7sQCzUn$DZcWrDwg(ZYx|D zesV%Q4K-xii!@LUjs0M?p#cTt-{ET12tdUNl^-OcIXXtOCE@EqEQ(`S;1 zO_@Ch7^m_=Vj~2v1mFJHXtjMis-3hy{vG+^=ImANumDQtO_f|eUNKAAqwSfgmHSL& zr-W{l9L;9@*7?laD_UtqqyAwn-|o(pP+*ER`g;*k_=xA};7$(v@$l@Y?r);Qk{4WXk)16M3Q-&EEtc}g_yg$0D7SY@Dp>>P zS}?u&J)PzY39)>M$GPYAAE*50)HYTqz1I5X<92K@{Jp0)A*6Y_L-F$dX?Oqko@#kX z8hV}$$;WlnPB`?$Y&?BpMg5zu*J$nU7Tkv}v~Yjev%q*$c&re&GvXQMT`(@E!O$v1 z>k;{BAiom*(o88%8FVpdp~6ggD)F?wYw;5pjYRd#n^(^ql(?UfZr=y4GwfZf1PRaE zTnns{y;C2cJTJz^f1)qAkeosG$5QwMyZ4Zc$HDgiu7yFfV65BPelzzJb1v30E z?pgPG(~w3jBt|LDH>Riwes#}2l35VJ72rcm7FE}-{Cc?hm@>LMLZQQ32?DU@<~DY| zao#Br@HxTK;b-h@uwJpZ`)K;764pybebU7Ov? zBMpLBm4j*5|JHk1JY6kz>d%q&tOmrRz<%3Cb(GI_uSt7)BYiLpo{@T>G_bk|tvGIU zE^YDZm$~Hc_3awXH@zmfflG-wu&&ll$>iV@J7Ig=mmg;mIz(BQy|q{FQrC~ON-Hc_ zd0`cV(xT;QZK*4Wt3(uvvH|gxqb2#0WlZc_9>&>DBzAVl;@32~8UR-S$S$2_8fpCM zl{Srhn>e3H-$=|VGK|6XSRu|Ov+fK9)0>43HZC-Q*$*orrjUiZ2|uOG;f1=s;7*pj zG)s45f|~61!ccp+Gz=YiACu;=u7mAqPIs6ya~_BuTL)n`*F=R$--ib8 zS`-G9e*i}$h9<#%^8evIKF?StVx$Bhru=U0xa1#2GiAzrok$UE7CNJ-TE|-K~+MvlfyML-K z$Ovop=tyrCw@CWX%SquUoXgaPsuib4>R9`xEna`|?Zr=RFXKI)%6NkRf<51 zedzn~Qu$v4tAa-ibrK-K%j_)epFJhNd=u}n*%P3W`U~c=&C`UT(&H>wvI(d>kQunn zI?l4)R4l67vo4@KlAZ7O%_!-IM%i`H1rq}MCrK2dZF$?7iA{{QibyPc(|ixoc35jk zP*+>Gw!~FsLpB60OWg9rW#&H(5dp>ogS2xOJ>wqvT&oMLw(;Hh)@sL^!PW{rVK`wX z^lH$d9}g7g8AW#i6zdh-W^i$X+4~0u$jiqZgR#~bQaS2v*5x)UuYwZKJnrmLOAcN1 zb(0YWIW3=4n%)f9wi00*;wR_!vJ|0o3@PL!2ukK`+^#C1O)5FYHC=iau0@PGNV456 zISGujiqR-Ha@*`zq)dpT)Pb}3o-A~78MODf`sSOlw`APTXM^RIgoF5077){v)hVFy z3HvuSzp9AT)F;>+mV<%`f=Cu`Qm~fCv0qy@?oW6B71jTsioMoC!#Jso)e<HIz1#J%jf7U zNGdSPW4Y&ORqJ57q#&PM3%9|J(%8RvMeOAku{C6W6MhDH*%1QWPDsuI!u7)*&@t<< zd2(izd;K(I;&r{Wh^v$@d#`{@R$~gzePuF@av<67%d?syEaeQl=N$&{xZsa$-AyGX zao?m^s^8@35x9%4UYhRyDY4uKNjgB;HJ{7_-nv&AW0I+kg6mJ6-Whhe>RF34!f0i{ zKKd>?zTw(olwU|!!MRuP1J;SzGFxIS+mWB{m)P=SwEIUyCCnw+fL=q%5WSGmSBMvi z7Li^fV-u%}x>#VLTV`;IgT6@4zLE-D9%kCMi4nOn(DY|9 zdfL&cL48+UcOQ3`a9~E8L>_cignkw zEIG2HEGa9aS@}%zn+%~}(Nta^r>3Nn-M#T<2e?0-kO5olP9PDu!+ z<-XC97JWUKWoMbG7C4>@tTtPPMX2`1CP($(TvMCPao4tXFe#|286BJ_8fQ_TZ7Vn1 zEZbcZ*xdaxE#ZX20HFX+$z?a)8#u`Cp+7n4Ow_iF^b zcho=Y+hzac_MSpZDC}#}%i|pCb7RA{kcSY{aXsul=Fths`t&7-D6GUA#G{GvxFQHWZ!4>3A{v zt~Guop~BkKaIo|fQ-fYpF_`c+v*#7p*_TIR4M|KQno`0jXpbqo=k+I8I`&0t-wx*= z)L+)aJlcq&>k(sOmwTFjZsPr_O#@^0hF1(#-}7%@+~Qw8LIUk`7f5)TBm`-Hs1JxU z_l>qaSR@LF+jVQ*t#w7KQ+V`6Atmox=mGhsr zZ*7OHeyPcrbLG9E1)Jx;^RYRJ`~Ir?^#)=B>WJLfitn3!Cq2m)RR4kS)&B0j_6#+< z??0|RVWR5N93$3a<)UxYsz}#1ynyNahb0)f`sL`EmbXf2;;dYNb~w}XPG>ftsqUXQ z&!@i{f5S^8KT#D@cpBtM!%-EPl8Z$E{szL3Q3H>$L< z6|7&M8ad@dUlTBr5yU#c5(*0~WhvY@0H9$27vzTZk#!Z^7vwvfQ*z+__Blc)M{IA& z7=CmZZ;wRTqJ0j|G9_dP!JZ)-tbyTaV{-0|avw)vB{cZ~Me z`urAqs$MaFL6)U&e!TMb!re)iK~MVUT4Y9P-CUTS|L3q2MHer|Fi9NKq0!k#G1Ryg z7HP6boc=F%kB8c^xP*7}dk}%TZlhO)K@8e*e3oCDU*s<%s3%YtC-jX9TFPcPB}KX> zB=^tI6E4!01z%=hSudtZYGj(jy}+@khqRru0*kqOXzuzBw1iIk9 z+*iA$AamreyheL*Z~+y3%5&SxHoLuPw1IF$W5r68b0Fcim|Zi{`tr1UXNr!<%~Xrs z`)FjG;)(IbTOCmW&9k*6@qMXpI}|N1?2Kl1PVXLolV;{~dB3%A7fw%�}LUT15{(!VKNFD@3ZmGtv%TWWNb$P^i(#7>X>iE@Ps>{gG%!w(^IY zc<>iP)$P=dP-DCic={)LRF8S&mNRA|qSnGM*XR9G&6*lTvnvB{K5tiTzx{xc+!d4L zV2_sBZ3chZbPmwf`>Hr@Rwo%Abd$e8VKPAu#6y3Q_k?WG{l4K1opzs5rC4Aja=rT7 ztL`RlV+lF2nSdp4u>?VnEjzt5AcLA3FehNtH=IwK29kODWz>tzg2 zqoA=d*VuF|)J+E8QISWjcMX_T9Bw8!z6)Ut7v&m4cO3n;xi?U&w-2^0uWXkHAVl@| zx#_ZSXiW<@qgmmlPx8(0V~$zL6_Owwqr)@SH>Q7_-=*xt4_LiOW zwxND(*DxkJk)M8^g8<&E%~AtLukMz}0bo8YR;1=RSgAS!b8PM+iGcb^(8-5isW=bT zj}`)KDo*(Rxg}h3%xgwrLf>%bo@P2ME+Jg!i9`Epmn_Ohe??BAx1)N3H_8SL-omDt zVI*HceIASb)~T>a|5A9j*RadN?LyXw;5bJq-T2!|DEn#}(vL!mEsW_a=!^HoF7A}! zfH9b^0-t`QVx%d0JI{2yY@`hC{KaE)53m_NXHjPJeReNvsH(5!V?)k*3U@WseOuOu z&Ts)r0>MIf?Y;*-^GUWBo;J0U=uj)!C%I{ml)7UYby6%lu^;+hC$mZZ#cyqK^3XC;M@ULcxZLwYH?LBx&WE$FViGRd|+8 z0{RK3S_bhMPzI6A9Pey>dLubXSG8-Xm&KheDpEHOgQXOGuSuKf3Hge_PD0oPJP6a= zw7to__MxA`8nN@)Cvxd>gH3k^XQe4OW@y&73}k3@$zZX&{b=w9vD?EsT_S6zo?W90 za*gp}rG4v^DE_bEG9?zIEun|?RGQ28&9MA#6XIWmt}t_BOdik%H*RMY#3f7-Rj@Dk zd(9&Rk3lfx^bGN%QvD7;qN}v!Wy=%Pzno6jC7;z$(M&(LKDmAhA3`;aEqA59=x$80 z>+=^b#mRN=G-%SOlAp;{cZkrI`#q!PM3CMt43 z*H7d19m#=1*UMgBFgQ-Bn~Gdw({WyHsLNDOwfz=HW(`q$!Y5t-d3DXsP|XVkay#@w z1}LG@_aoxp;IkSVmvgO}s%%L`e_l3JmGt3#)+lkH1BF*@PQ$SQ&FI0iHf2STh2Q>6 zhQjf|sc4|8) z$N#-hrA3c=GUW=ge8#z@y2HARJ92RTd}Xv3I=HyRT1FFL!3nOGP6<>u|MjPLr$Qw# zlF@$;822E|W;eo-`A05hW_J!t7;odRGc$2S6=nrSaBOoKzP}8fKI>o6&a3fbwqELU zLSiIl5y%eL<_zC|no@46jQ)x^2#nZyu28aMT*1j1Ff}E70vGgaj;PLF>xB-B9vu!S znmJ@^6*1iDtequT6S*ocE2?_CK(^qo!b2srYEG^J?o6YY#@a12sxR_o4bDtfCc^@8 z?o(><1rIeXghB9`+^&!5VP>9P9%h&9Y{O8xsEH8IM2j*kOOtc?MfH?+r$&r-lPQW~ zetcL{ZG(5SIA0q-S_#(b^=z%L(vNPLshWnP-u47j%(?HCuW>fx!OA}nUzb0j7I%-ea?gRPEy{C2SFMt&FFq1gdwW}k zBf~KooOM86%R#*R@71k=35XM`GCSn!CU!|+yRAE7Xo`2Ehg_uAO!e5WQ*x0R*8bL) z>vsG%tV|{f_9{jh)KWjwm?NL&!<^C0dbc=E7l$jq?GBns>}aIhMw=c~DZ(!7g|5AC z`OL-KA9JwsziJ|kHAIba&YEY_duQK>x{QBS&`7J7R@Dc`-$OYxXEEvvC_H$_)+O39 zM0#({0UIZ9o0B#XdBkIOaivgV42#E<)r0_xbg7HPAm3dQo*!%R*HWPFMx4&6|Hg32mX z*q;aX7WlY1|M}d02&ASc<#iPewdaeMa|oZAG9Ppxu$lO z6!lz&+hk~#3Hmeb7Jx<*-i&R;njS-+{OfZ%+rQP43!PysVH;L-Gtr~Ej&`P=Ox|sV zXPfC}V5N@sXaQ*8Yf~Co6!M8z<8TfcvK&}N@#YQ}F8x{^9_^ysACOrvk=f!=ORtq z-lLEQt+|{x{rM6oU+W#3hA&~hr>68B{MTh(H>Vt~`d<5%qjfT}xcy#*J(D1YL-*)B;wKc<-N`N6=j%;sqD ztT98#`xTQ=yC6x*Js;>dI+^4ZMw5HyG}Y@inR2w}z0nRl_30t>hs1QXD^ zmVHxAIiSWeDtjLCf-seYKB?yJi1f)+dgp9f5F>nR;vVVYry!ld)sSYNjRfz%qMo^W z$2Sd1E)=qShI&&Vwa`-OH3L$_$-}H6wQvjyU8}L=gN%`!rxZE-hsB{njTge{Fo%0mPPKEcyQ>CRXGmsM9Zn+w5u=89)8!u^!eD`8)-rCbW^L zL}tBxN;p~ytTfvBaQ%^Lg=8kduObc``A=i}U|ptVtn9?n#7j;8N<}n1Z&Y_jmp8hO zo!jD$E~K+=;Zv$3Bm#vjcemSni2kd4-KIaS2_5HXTKR<7TKNO79g4yEJjCiH`r-8g znX-UCxjvasr+%J1$uWT^2D{S14SB)XjicLb?MG>!OC(qETv)dx&KkO|YWmCDw0M1W zZB`Jso4^9{1q}ha6_1I;LoZ{ON*9v=SqEl+NS0~?J?I+gn?~;gzO(3o1)sM8SDMXlx?vebdKuT(ZgUYx}^u~b@ z?`(POequ+%x$j$>)=L+%S?VO)vN6T+_gYmv-WoO`emC_aQ4oRCKV&=tDf2tFv=P@` zFWEm<{Ss!|so!u{EveRO&%r1=v_;+kRMp_c>q4nzIJqgYM-olbyjJb@%X?M% zd>II_Uv8HEyI?7ylWeR*RwFOB@^?G$;E4SABUk_8V1Wnv6S8U6vD(sB9687k<2ze1 zqF?_~-MgWKvxhbM)%a`$*;x|)9#X*yGwj2&nFq0>re}QX?u7;AwG86zMPGY-Ho1>v zG~r^CXSN1lq`O`x(lpgldk=#MjybkPJXw1^wGuYlzf&{D^tjKY4=6h;b?;;EOB+JzLu<4ESuWr`CnR` zv0}YpL!6UWRk4oX`mZ;Mr38SM+)!zcg3^_IWI3pfbup4n9TcCexaBpx^o^-k3oK1jeqe;wn)}kSCjSHoR z7K)>r8n!j&vZpIq7nf3IffaQaCL($5u^)l$@=v-sJ`WdNy-8?|-#Yy`E%HK&(oPJfe;!)i}-ZyoO}!Y-2xHt43FP2LV82t?tA!$;b>Q(X0P@$&$qoMK$l zdE47fZ+nldOzFZmI#+V?zsgY@T|~RfHhhRv(1f zjo6OPRzzU##@e+RZRQ#2p}e9D7j%Vd=y&UK+8K_)%c`XOHar-%IFeYhs8^wKfsM>4 zx!HrS;58`zln9E*|L!F8SY40R%ok$*w*PL79L=neGW^Zctx8k8SFJ*U73o+KwD`2| z=&%bBzs|CXSq<|5Z_7PXE~_>}2(UQ&6d*-?oGfYo_@M{g!K_X6y=I;23uj!v5GqGg zeMyykag1$$|Ja>6;V9F+nI+QeJdq-+{p-MXO_2u8I>SFxIA@8KJOy;=%P@4WnsjHX z(d3!pnMV&lx(<-4k9zwzpWc*M;8~l> zRBfD&5=hOSnm*~^Yd6G7awya9eepU0iAdG+pJx0yy0XL@{yiMFk#;(`u|(6@xV+QV zS;>J@XVf;8kf#I?Eb}P*A!1;&UhSP$3&)2sfqNsqRt}jvhD9b&4k{vl^^Dy~b{{%k z>!M+~_0XLb760wvyh0aT$b+_t=+%;U%-nBE6Rs+N{GIyz3uMPD2-)WcSZWTj3b=rKt{Ilc0Sw{JE$IYsazwBg zW%c_QO&F}$-;ffvs!26lNkC2HD`ubQZ8#o2bR=t2BnNl-sB#&E>t_dTO`8p;J(TowyljaGCzs$^rT2@ z+$$`Sg7#m1WAEi5BamfgZ=apeC}^ewM7>tdx|cY&n6Zx8C}tiNMO@aMxw-5#9-J^6 z>=K|mYb_1i4RX$&U(i+adKX;EHL$0!NvU2dH7dUPUz-H1D5i~-b2ef?3p|h$%lP%2 zqmXVk-syhoo$JNnAI5(AYrgaIT1(zYQ}ek+b&``x6$v76i$A@&c25v6G47^a8(dA9 zYwDAaEMKjvnavNA5E^WOoJ$Lnab$wYv6aZ@ttHcCUulti{$Ls`YGGzl-p)sJsmqUVF%Nb)IjEgL zw;%PJ47i$GsU^YkvuMdmIk)&Ix$-T!L~S9iS3CE@q57eQr|R_q)0g&+T*uu&sdU*Z zL>~hy1o-m?gG2{RW~y9fD>rJCv5e#Ryi$ysc{bs5d$+Ib5^<5`x9lVg6QrWc;HkLk z_^cgEPELh>L3ZUlqCYf;TQ!(dBmh>a5k}X8J7M%pU1N-=9k-2U2NadrqOXUy89pUuQN*wc< z+W!4bLdj-jZM2clb9b)4<2%t*ItgWSP8g9Rl%T{Zkrx6w_9mgU%`PemU2W*s+W zpsQlP!t#u5$47Q){Q${L&?v#@8%J7UAQkE;Ks{mMu5 z`e6y$^H556KZ+ZrVIF(tIZ;8vuUZ>@|FRv<7=DEXojsowKp#)pOaXtvHQ^F(IKSf! ztTv)yMr$SDe9|`_cB3gVH)W++vDvmc;dVw(Z$Xz`X}6oZ9ve&uo;4)+u8l-Sk%BrA?qMl;){;X`>YMBQw`6oWy_~Rf`mxQaOLqo1 z?u1tU&e}krhcsN!9ALA;DMxk&{kX*mI+erG4)2Xvird?k-Q+Z}on4v3x^d|CCrMP& zOz~57@e}y(9E?x?8O!}T8%GnUunvuQ0BdwP;&@%|8946!GC+*=EWmJw9 z&igG{{4IpP?!sqH?*cY|Xw5XFX9sJp%nKRs_$4oUJh?<=Y;+R1mMW+KK6eW%Z>rFK zP(=UFybi*0%PLH@+jgCg=@@h1dPEJI2=e1iV#4>LD4BCOq54A323P-l5{JGKWheZ< zHdX-ABV#z80m@)o-^>MY^73@iUY+^SN19(zJx*^ePBx6t+T!9}@K1?kP%u=(?(+Yp19yr87k;E@lxoo3;NnuJ!uo zEid_FTRL}CfT!pGQSB~m`y4`jgog3L``LgKC7HNUgD^iA%Gn8M@csec$lf#{mr0G( zIcwd5skohEtM>>|IA6kB7JFCDe$PDHyC)TA(%u&ykP{YL-nu%0=vSjj3ZZA9*+%6e zzK*1CzlqbkX+~GHd8W&PfqMYE>eod}^6Wy;zZA;BK|s2hJ2JYV{JS{2U>)-_lkgvE z!>jPzNS0*y()y?T@?0q)lb$mg&uCq~8VKbYwbtj&`okYf0*U0!s#|=YqsM#2()^G3 zrkyLl{jp5!eV@_B*&IEi?!2%69w1&Vd;X>$4RY-9rvMw$EkJSiMM#SI#n5~8*Y7!o z<=BPYxEo!nA33pLq4~5zAMyUymakSumHvK%n2FS%;+b|AN;1Xq>gIJqYV@xx;VIFY zzT$oP9!6XT;FeznGV~rt9|XHF8YU)$9Ou(Gy}0gDAv-V1>Lfr3J2JYS7^T9?Z%*-! z6JB1pzFf95dRKd!N|D3Lg*I5Unsh660%)aiKStLDDT-Ce6ir#?n7n5Nq24zJ%$@Z)wn|Qv@EA=0?zm`))^W^q-?I|4;*IQ`P$!UbX_Bi0_ z^SuJby>rS3WMy+Jd&(Pfx((}|soZG3bkXE>^qAfZyBqF(n# z)w^IXe^J|Sc(|rJ*a+*}ZM;)8b)0rK*R9mA@F1Gsto$kNjlO=gDIvFMx!+2G{@Z{= zD~d!XTe1|{N14U@Y%=p5 zCXE)xQUYD0{B@T~$JFdU!;la)?8tkLiH9$=!y2CqNDt1r&A0_#iew_zWny&UrolGN z<}q$EAn$LcySJo8MxvHe!_Z^Pk)|vbNhW(hUC9$=i5Ew2f9M{zH^zWH;2$g0tV63b z61;i05^B#MW>*Y;-0ttnovYgXc_)dKO>6uY_p#pW`7vo(O`TQw?{z9Us)syP1JXiE zz>Yh|4}QPfUHUh%L{e33dWaiY&`lffZkQgS$T>us-Mw4uTl-#ixF|WrmhL10DZN}V z(PzuJNT`dmicVyc4opbiEcLkvW@N2||BgOm{x+Fa+8MZ}-1(6bPEPc3n@&zO-!2{6 zu+Nmo-c!j2=_d zWSUtP5EA9yVN>|wTTH!Bf~ujWBdv&L85YL%4PH8-#wbJg{Gc!Cf58pcA>@a%`+y2B zTQFSJzANH8Hs5DNAK$Ohb=1e^e11}>blXDTP838XNOv1y2MujBR zcdB`?WB0OESA$UPAa&USsXxpCa7Um-T}VdY5f{Cr#t z`zF1z&gOPOQ$i?s7NNtP*v{@ajAw1eLQecoxy*U4x>XM~7%$Md>K_ict2(Px@hk7W|a>1^`fJ9LB}zkJ{0pC=QoW~m+Y_Spa0A^D4Y6W!n$v8 z|D!PX3bzuM0UEaT+Y(Q|H@)okt~azZ@r@7?PiY%d%nCP(FCcyFx2n?R$Vm^iSsZpO zDCsZJhYDA42vh)iz^!~#0#I^r3*0Xv8DTqsfoMPiv>Kx-hZZ9KUHP7+FPczFSECXB zlx;*QF^k$1ROPU^GT-#dv(GSXR8=b3-8XR*YDxIr!#=z6g_O?lz zi@A;jpG(0yKRKplxV&w7NELzJJJO$Tl_(EUXf?BbRLi<{wO}vet(m`(zk*OL1!QCio_1Vt;-NTk7!04E3RiM@Av#kFcL9iL*vXt+ z_EkZLsd$XWkB=uP3WT9UPLW`MDB$xrWGpxE-L8bZ-&1Jc@TtAy_Gm>R*j7A^=)JWz z03k}}SRPpk(=+%2YEMDxHLbX&#Zb zAQg%Mb{^u5S-G*zuyuTxgGxLCjva}%>j|F!Die*VvD|K$_8yWXd)0<}a|9Zh@eT8+tJkRxJIxO}dLWk4j8;9o*eb(dzptn}}S&JoS*kmKnan>gr33;QeGqBw= zszvaQ0;Z4shQ+XYH%#)&m86B;B;KdC$x1{79ABsJs}`}D=%7s3vuA=+H@E#n?pEG4 zaJkwWH~g~u`8SD!2jBj@8rG^KsvDDCh)@&ONn&+Al3a1;n>pj@PXYJQUVwugDx6K; zhCr~n{ZJ5y-N>B1^=sePvnP+GbEBpuVXcVxRxpvo+)zn=oCWSTeSO+L*7uu9`0lt;(6| z>Qh{}xA!xB<0i_d7aeBhkU#tWrbZfm^ei9L6y1|b8?1nUNdZ->h{{0irJhfC|1)ZL2r^3IaCo4_K zfZm+Eyfa5-L@@ijA;*5V<#TzPf&{_lipZo)PC~+>;PRT}V{uQKG^j;&OXes%{a!|e zbcKp#*D=yqe9acB_L_F6_k7pCUQ1H;*+-g3bwLpqAaMN(W#F>47t~NgLUY%Z@jzOY zY9>D%T=YVcB#WJBhdpf3=`XPra&zV@0X;buI=g*3Sq^<|#)J-VY4lY3X+#(M^xu?c z-zdOP(KXLnn4WihVa3>1!_YHp6!6%d*(}u1W1)`s-ugp|$OW|fkyDOl+obZc&eVO9%PG_yG z=w^n8P1bOtMG`POA+P++<;JkzMbIX|sPL9+(cgPOArBMF6>39+s_14R1GCl62E z5wX5%&2cTn{SHtV=*p8dle9w=+aI`XSk!*{$qBkK3w7o_;>X`J^|dMv8EC!=i#O+y z9h=a6+R;TcyV*G*4wxYR}_1ByF~CDWGDLB zR)bcguVbGS{1)FFFeXsjj4Gh4Aj@!!5q1ub*?YF9UXdh!>3*v)=&1as26XB_bVRS+ z#Z0(THoq?JenT{!W0^S-HX+y;w-YgJa@pH)Z{<3Ko36^3-uAs-I#&Y3huMM#1sIY6 z(L2A}$q)Q=B=RwZzuXwRJC!VqdH72npp2IL>L<2usGUSlDZHFUB3_5wT4t8}Dg?>> z{G-P(%Z2T)e(`xu^#v^6`@;ltUES?Ful?^B1rF^$sP=pi*QPgLA_MVzv@5s5dcA!^fr+EBsDPR=v+QZGn)A!#0(iTq1r{GXRS1p>v!r5Mt%(<4tuvMc}@)C(mg4B6bW=P z!pDW^Sh`o5BwNuP&9C22_Y7DQAEb(YHnfHQ8PIvV(c4%=Eu{#%XR$NQC6f5N6hW4w zEL*?zQ7x4^>8o7rY$bIj;NGImx}4wlkoyeJIA7CW8Ol1~D;fE#4N6UUd;@E{y-?@j zkg{%#wa4r=X)H3l!(k|OxY=*7$VNyPdN*6U=KkTE8+m=3Ljo@Y`CAQf-7z(9t1UXS2K1Ke z3tCFl*8<9_J0$1lXZM^fKOOxpd1TCMmNym9`CX4By8Tz`C6Abl6)N3 z#NXjCA8jwzi)37Wi=ib++Kws0O~>p1QuI>zaGOH~3InAuaBq;lcYKP4ur-s)<*|zb z3dV%o8`JKWToFTJdAiOIc5C0`nUGL;RT#jvHag9*x&Kj!zqKJ%S3ZB*SiwKBF{S*C zDy3A6Wi>FW2-QudZhjIRI$V-~i|(aqr)kDxe?2!1tQBJaaPC4rlCCzFIP=$rS)Ajv zR`fi1L9-wb{;cabtXBmhQpy}tBxAb;;M*U$oun5z5 zW5TYmmRMSZKQ+sYP^1%71u^@gSD!7u0j{l<0}Ch4x~pG=R$WmkAe>taQW@c|ryy+) zDAtU64jGw0{T^G{PO-{8s=j&-W?5y_-Vxm^)~qQ1)2FR;P=kgAH>wcDr<D6|rZ2J4)LmU0^ANSaB@Qo*sTn-zW5!R0 zU`!sZY-BdX?}Y#G8!xjv_O?-ZAh0skOlYI_^B|M$BacF@;}Pl8Rae@Q$YljUj*pv+ z`&}qNSu@|VO3gY<&u&>yp?)PzEO3tfbSBEHyghyG!iIY(essC{petlD%r$3y<&r&c z^QBI|OTLem!2HsA)0>OAwe4}X$U6x*{kq0;mp)uF>^1290PY=eD?60z-~rfkXnoXg zt$5vEN3j8{X47ccAFLYus+GxmgBC^Sc|+QaXm5bL457GWZj@YZ%^Uw6f?BeWCRD#_ z7B6gA`Xqq%(Fj-&f7^`Q#!UKiP{fkuVjX|)JEdiGILWP$jen~0EPt6PlH-m2s%leFm;a$GLzqI-fyv=>3bGGFbb3HiK<=8e*s~^Fj zX?OR`_iDv|bSK3o|DPAY&Pqj1|Grd;poj6Z57#l6MAj)lBJVH1Ru)*6=k4BepZ-IS zw445G!rcu^&oEAFjwEc3+?nqeRz4u)D8b}xNqZ$_kV5@nsjd4|({kI^W}-|N z+b#XJUbsT1RyXfI-SibLFB9K@LY4%ln$+)rlV;`BNVU#)u^93dB)ZWvS+ZT(J0m!) zsPReIP8+B7*Sr20+c+6g78^8Ty$5x*k?v98mrOKN+b-r*xN|*uWr*BWK^lwO{)-vG zr!V7o!ZlY1Oi3K9;%HFTP+U{NejU8Tjk9ejHgXGNCL_Z6T+ua)r+;>a7 z>eRh!vw3H&q>9u2E)Q0J`8o2w4ux{IZmHC)=V%J`?`oOc(1I6w-Mg*zg1r@S5&pez zIHC9MG3QwaDxZ$qXo(+d2L%}XJ5^vk{t9s3^Uz^Si8~KmTn(Q1N!*&--&Vmdh)nzU zS(JNR0RdEt+6}Dv&_@{j8tUFbNg*;xt8cM9cvnYzTlKNHp4ZbGx zPnjhS<#m;DHkHx&WZnMm|3}k##wFRle^|3et0!A(<*qc%Y`76;Jq@!|D)&|_&4CMX zk4n?rnVTV&1NX?i%K*z;m8F@SEBc9g$a3qgMKpjgt6i;k4|WT1)#8Xt2r)k&)jOs}ZPH0-S`^~;Vnq{Gcfu+FK?mzBc+AXH1#j#`bQC#|X)O?QJj_!pL0kjeL9j)!|n zGl7iFtKXT^)7n)l%${B8-W5ZJEG})iR2rw2yXk0^?l_=H>ccAu4;J{<+2WwIJGNNk79H$ss}Cg?7nty75;63leJ}i z&xHFXt^I@+OaZcu2q=ptM|Zr^m1hLO2l-9^2o`5{v#jks4&Ng4TWmLVPlCIFJ zXN0g0fy^DNznkf`45=uACQb*TQ_oes-q?qWwc@ji3Q$IftZNlL^5>s$`r#2cm7ZKH z*xFpd>Ax`@g0I3clzoc6r=clRviCgjxD<9{w_ltz<8w7M92TY!lCRQh#7_l`6C%hd z5*t&|Gc}aX{zCk9iRS*X?H9Z$al$Aqg&c&Gwkr^6VNTLN9>`;S!ad<)o9Ai`oc|1~ zr#Qi&`YhEhmn!!&lKtX*;z2A7CSE6mQyo0>3{Y(n_T9yB_KV#j zfG<|apTQaQ;b`_ymC24Uy`!VD;ua#}s<>AWDOvJv@RIUrcmI-VZd!Ah1IQ_w@HBkT ziu}hz9X?}TmyY~=s&@70-q0n-=0s~boTG%tcE7P~`rDUINcQW#~n8A%PG zh74tr%*c(^ZGqZdNsi;BP*tL5Lq$O1o)uD9fPP+>IGs6=7YG6?9OWZ=xXd*(v9@rzvv6uN zkd@>ucF$b+s2_#phrJm-w@!-LKt6Pja)>~n%xOijejdbA)4%ppA}&VFtLC>&gfWgFp<5LL= zjihbW2RwNv@~ZNt{uAY=hp;IpWv{c`DR>2OLbH*0YFgfiMITrbVxfG{Rq=KmfH)o$ z&w$$P(x~x;QK<7+s;?&PDZdKe{R{EEc zlOPlFqu!{Mc$i%sxi|Bei@z-uUy)U`@3vL;dpi*h+|Aa;(>X@uem=a%iPP11M~%Yq z(RRvKnssL3d1vMyt=!0KmFbKQi($jr--}H>nbz z-!Xl*<(VSOgw7H{5zu8Uct$Nw^W+Di#yVD*Q^L~}t1`pWeE9ROo9hJvC+m71qPw#; zMtHNOg>ZfGWGD6J$?ha(CIIRhVT{a!D4HJ_#EMVu$O}CDZNla4NEUmgB^EmI_?u*) z#sRy{?JkOc&gh1XIfqODeoB4kBQO6=amJHuls=AD>huM8a{T;D>SN6w#&>G+Eo9>4 zChE;`UG;-E^C-H07ZNQ2jD8$dXh zVQsS3N<)`=$D#YO94GzbL@e7YW(#$$3dd(|TUE^rD?tIN`ad#pVh+|v)s>PhOugoPc;K6#wS0+dmB6(pc0 z>OnKQmNg9G{<`75GeIADuR1?0lqvj>F7GE%u#dH2lWQ6xdUzF`pFfL$H6-niQiYhq#ejO1EpH>G?$^V6+Z_zt(CgO(JLBPap5EU^R zOHqE2IO^&reysQicT`|Dj)1Kj9E39Mv^;eyXKi!=KQdZON23y(>5C4W01{KpBU?e+ zaTu)sy#EqF&k0f+Fp4$eF-F;*Uoc(IbV+xq`u#S!Wvy(q5A3%Sc#yHX>=DAA77t@F zw)+{(DaLe|-WtnxTI)rY(n;pUJ^UJ1M(efh-&l(_=s^Q$9vL9ON_YOdO^hur+Z=P2 zN)BW$nOc;**D?p8ngvQTJJV9e&B|4=X6g4loj%s9SL=PwN8W_y*-Kd0oxfh^*VHO# zVR8Omuv~)DLBj}S$+x}mU##Eu!Ra_fV0lF#awzP;!8fbC*Qbi6AP+pCA)keTWeo9^ zP`;Fh%Hh3RZq$eI<0Y7uHxwCOXCIdwLQhT#cm2D0ejKlssFVdU;22PXhKc{CXsMeF z2?^jt=r$dDyXA|#(0NG$Zz5!GpdxgTU>G(r%xv%1h0(|IqZDgP{jPw+M%PI4BP*r zH0oRt2t)upHf6#MLk3zoGNKcv}0{@`oVds2krinMa~H7mX#677_Cfq$`tL~Brkby{1TQ2bykl2Xt5Jkc z#r(FRc;-7vO?2Z2wt=?dtt-QpM@>f%gF>6Uv0!fe?@yqypBlde4_73HXO@yT$fE?h z8j)Dp)3VssVZ4-s)v}Zln1ED_w-KjSRt={SG9(U0 zCpEG!*(_U%5;ikE0KT%SdcYV zoWm>DB%<^havUAj-XCNq&TdPz<=ov}4;j$bo?@|g&kc^>V#=SJ#5jU)864G$bqZ$I}U0!gKvm>No9$>1N( z=_h>L!BsRySAx^YJxoons^4d$j44ggvcqiO)kwbRx--RVoCYLe{GO6s#lA=N1I>sh zXYXcQ1w<#9aO^eJLVb&z(>{j6O0V;IZa>z}Nj%9e6i*mm;}qU}Z7NI`FAOWd#jv~8 zkx>p$n?RQ#s&6**t8|vq+ch?6dqUf4v-Di{$HdMDc^z;mPxxftmqN`o!hYs%e%bG` z1AzsYONalr_&uLC^%{)-WM`0*b&z;%v<}0J!9immZ5|MgY|nDov@Nsy`owJy`|^Cx$GzVs~XZ`ufZ-C^B51quMnSi{F2v z2;Z|>&;#Cw4uom*3Zm~d9{I7r+mzSniV;&c{4{>)-Wa~;_y+*ju!$5|uu#svV*XM; z^@j4Y6-=aZ9QjS8GF199Hux3#6=F*0GJOQf^s!#b8H|r4+}s%o%L4-l>TfIbJ?A(; z{G>pQ7i&6_E>UaIBCAFn;11e;cy36}-#^)FDe6)26KcGS6jBXy)c{5(aiqQccK;r0 zrWZ7G(x`a3k<*6k2!+y${U~`8$z=smyb$Q2d&1(6c9}%n#hYd7yl=#ZW^QE%Pjppa zL`M!84-<&W8MR6b&_V_4e>bY82GU-zB`RQQNBh#w(e=0M;#+LhL$$w0lW)a6uC=w` z4ns0grkOg$nKziuK^jC%0qc(;ylq=du>5x!93IutmCCg_wX6($%XgbO*KVCT68`78 z;B#63n+;q1`tJr>g1$r)mGbu1oFCzLRlHIeD9L!z;=r^!Zt@DLIYs}tP-T`ZNb~w& zd3{cAVz8lG6?5aTAFNiTi@;<65b|yP17I6KR>lEYbx4iNso-$op{E3PSd0k_!L>)B z-gXWSZy=dLC^GJWU`#JU+U18y&RKzG0o3Ag z5r8KO{yaOQ7_ibD7S!kL*Eo!+Ssa6iYsWKvCP@qsMIHEH&By1m=SxI{25F}{D$JW3 zf}S_ES@as8De;wVd9WJ#U+*FphZNpj&J$WPT=^sRos_`St|jk`{7+@&ry~Tkt$TUJ z#!(-n@knN1vZAQW zDxOn*F`!LE@bhH!uZ||>vdC+Hbbs0dU?#WvtsNlMrV3z z&togeE6oep_1i_nCeiDX0|I$S7Mt11a30CSt=*3$$sU~KNDb!tY3_f0f_Fv*^67K* z4MR7maU|)JF|S?EP;&jvD}AAriNS>|D=bL)HGQ1J=wx_1uMK>dGXE!#yp=S2v<9?L zFNCiW_SZVcHar#UziC1HU8ZwIVa7ZJ6_++hNi7 z%DqAV^udvkhcHIke%mTx(k5%gPa#o1QDanbF?*Ac%vz)S_jD(lL0sV=!m8DyO0}bv zKL_!1g!E(0Y>M}V@>sFdz;`<)rG!E-c~3i*8Tb}GeEsZ`fc_RxX!yi`cf$?>4%_i{ zRg6M^p<1Jj)kfL9Q9YA$|0F!T)_i9T7g0ZYSCCX|?hH}F>#DkK7botnE}2oPu@{gJ zhxE}U;u*0L9G}f6FZ2Cn|LscWrH`T3^2-3M%hK3iRptv|RHZ{@^A89vo6cu=c6bMW zV>@S~8<9}hU;NV8R+vj%6K5!r0C6TeZJ+1)luL*=l@}!-Ru%vZdn32Hv_;pjo~Bn| zpN|fvd<(jk2>ymL5V%WSNGQ9Oi0xF3<#Ww;j|0M{!HP$KVMqobGsxTDAf6#+t@3_t zU#d-C4UN}QyEEXhnguI2v>s<=T Qg(~guZiNyLf2}M!aU8^J3jXv=+hknC-T#qT!`GZ$!| z8>qZ*gOEO=<41xTN-T5!R0*zYWe%>Wclz`G?=r~8?=Nx8xfi8yV7J5YeNXMm`KlkcX1SuvD)t|;lTaB>)V893hNrz&_=}0*;kl;esvryH&5^C7lim`4 zfK^7;Zg!Wm{6_uWs6Erv#fk=Yw|m0u6uyspr+e2RU}Af4@h(lf7q&ebkR_thX)6S+ z(M2jcxCdJ~PXxDQf&q}@(Pni*m0E?C@=@$^nV71m6L7f5OD#DA2$u=qvyzEma#6mD zo~$MB%Uw738LN;n2gu3*FtTbOjRoTyO>}U!Zptq3Bf$N>e6Y;0r%(gGQ*D6v+Of893_fiI)j_H_Dg$YYaJt9>fYtbN#X+h(T5VQi&c4Qje5s z-G@_44a46a%M4M`QA%T z2};4>M7T}uV)Ye5Ea1W0!prkZMcemTuf_8G2lq33&m)4D%q^mhGQD3hU+&RrD%OA|7y)Q^+#Uq} z4_Op@>xI}^-4l19WPuIbXB!Hxx=fmsr{MKY*M@%3bgY_4mDv7C&S%c#n$D_)HH!j= zw|he0`4`FG6Cd8UD}EPoeg%#Yyd#f~%& zaaszPXBv(*BO4>kCdSV+0wo{;duIKQagj=`q0_}n&HAU;gklH~>uImX!uXByT!B;NE_8M(%MK1^hK=Vxf~!MQ_XoD(CUaUaJ3Cw)uRq24+zgP6Rg`snD}29G zQgGzqpti;n&t=D|^QVh!HkG4o8x~fN){N!Cm5}kbrPe$!xybye@;p%iQm$UfEQgOwB1Gl@4hH%_!nSt{Yw?v3_ z{jk#6?3Dguv7*e)o+P5CE`;3o*#<)3JA>6IQvxz&V|b1XjmTK(Bg8x;?m@`iw#?ibFLv#){L%=+thWNV@Metk97byl95E;IB(b+HMdd{8n&iuItFkPU!H+5wf82SVIsBI zR>$_iMMgw1-%-A6*02;nlb-Woad#wNqO{em&((o;Pg4vY)cSY1<_YGKBZk;MhsTrI zW!(b)pTz^}$~8OYeFImj6yNOmwyUSXtHjlvis9*H6$o8dhDf-R?N zfQ7%%-*U4$qSrAyOO#3y0L>XLTf7leb{%r0=NAPlR7Q?EZ%WDmhr zW{6WjYBUI^iL+}&#D7%gTEf^=?2aL;Lta74s|y5`q{UG-8hJs&6X+o+du2ft?~28o zv8vMLMbApI`v=D3#LSCWXhC7&;6{EvYFXAsnJZ;ec*yh;-KVrjcTK@UV@6x}(*pfu|BeA$nuPZJ!XMAgR0B@yY?Xm>ToC z5dU@W;4qGvPOEp>%D1n(ci;Q#T&-YA83~~MJdV<2;6qfPn5B=o;O_JB+X&vnXUE{# z$e`@Xt8yuyDl|vMp7Q@{7Hk;hc*k-$d(42+U?%F0HqSfqfOcK23>X~!m|7&WhKua% zln|)fcfFJl4!?qKe)Zr4vT#3>!MSrkIKR<`g0`JYujr}H{;fLq(v`c!Dj2PX~TH1*g^_7j8oUD4UIc=s(IrWg)cS; z4jxV>KIxCOEHx2Z@PF?mbJuP6<7QXMYhY;f*)qMN;LyC(6|j2w9dTHi*K2Fs|!ovjU{sRT}7z*sf3W=li4>5jy)3cO?d;hhk(GOdqQ7TXWbs= zI$x8Jx_IdFs%pXHhPCJzXVhc~db{Q7*fNT(eY7?0nyx)v_urwlG76LscTPq}(%3b{ z^0SPHULP?3;4sFRx`(v1$JhG7Y&Ko-o;ML*Un&mO=;>=?4;b@Ij&Or^6njWv9a#^!pe<(Utd z@~b!{=~)lFV)<`>0s7ZaMM@?qV*<+R0k6~bOF+~88?noQV4;KqcX zrSP2nAap2W?w?yaz{uQm@afx;drHZg=gW-V)Gh=&Iq@xbHx`3Ye#vIxX6T}+6H->F zsXYj#Wf)>7$5BPA5-U+TaU}j@kAY(YoxIlf)P3Q(Cwe+Vq_J%OntJE`Ho;IM;;4F} zrPdK>;bXqs^2Zv~F1V}S5>%&^l1o`ux@vFyx4EIeEV6=3styT z3l;5(S(s7x{E-R692Uh$1?DK^gSxp;5P)9jGZ&Zd9 zsoc=g)8nUKFcEN{P$TeM|MPSRBHtfaF^|WH7-zZIJuyRA`0*6u0A);B++ALCOHJRv z5S+>#9l|0vtx!c*xHb!3#MT9+M9Q{cYDWLQAUFM{8H!1xv*rpaFuQEomYZFX|FdTs z(Ew~mX}b-y|I~u8*np-%FxhK$%M3YfHD$0c7Kp*OnEOc+fF0J6aLCA9aY?D&a_D~l&#>YTG&`1u@phPT#6mg@tZo4vEmG1EB9 z7VE@r-F-2!+IGz}$hvb7p-I7&<98psU0&n2eaSY@@~a$s6Ww!_+(L8;=asIvB#v&& z&nH&|c2Qc34z5ns>{*&Bd$vi|X4F&1)<4A# zPEKE~od!pe8et86N)kl5`o~12(gl^VAYgZ*_1^?wU0hs~(#a=Rar;j!3IR8|wy={| zj`^Iz%C6~MU~7V2eIOibl9s8Oxn;u5zY~27(HfH+@~W3}?pTt-Ib+mGPidhN?Kf#f z;wNk-NFj%gcqK~95o`a3w!}bU&2AWg4Q}SHqVT=*aGg4e2C@Ny?kRFNIPaGzUnYb~ zDjFePQ|!$!3)VHy(LWlCg$jQR*~6No@tOyTtPHOv5rNtTrX#utU&?s{4GMWW_8yQc zJv>t(lBrUpN{%m%)pZu2so}r+<9!kU?mWmVd^T?OIc8x$(adQ5B@StWc-;{pBy<5! z_EN5>4mJX-WnrM?$(1586^mt!|CmaPMWoTlg(c2o!|tf*xmzwJgARRNi}izO0PF7x z+EFFG-p^1n2wXYLs!e{#{K~)p?g>rO_@De(CVHbNSMx zUPWRqARLcuR2yg*T12)dv|F_o4T=a94^|u15!F=I!I&l}LNU_nc1UkK5987XCro1Uo|!$$IEghH!EKYy@pdw-tG{)UZNm|{VT!52K3J5#V8W*>*9bH zn}>FXU~U*iF)W2Dem4!6ur~PC2=koUMK@+48G}c*4esMQonw#11&$0gvn>2BxaM#^ zC6GdK%}*8gCN9xTk$|mq?;ko^%(sFkQMb5^hSMS(7B$#n&^n=qTO2buJ{w!g(YEc_ zN6zBwTBiam2v8q}%w{JAB{HgSY(aQPnJ@Sl5v2abUis0r%6Fen7Q~R5tHN%rAuDVq zgH35-m7lNyvBfh2*$@p5JLT7N*oPinx5)RJA8=*`RNn1;rD~`Aj5UJnic9aBSn?`1mci+>A?}@ZSvfvVeA2_7 zRlXfM1P8JX{aFm^%yM#UU-;+#tJ_0+I16THqo84qV2MqcO8kP-fxBEkU7)08Lubym zSfF1K%^q0x2u2J$G~M#HUSNghQD^I#&}wjf z{6TU5^l+5diXwE&iKTwI_MW5GG@cF#la{PHth}yV0Fm_~V*{s$~?lII@e|)ftj6Y%Fdo zema27mlVccD{H?*)nkNh%%%`j>kEaHHL~j8?EZ-iG$svv_ZMC^_Q2Og2oD__Qoz+f z{EbmGUG{lwl@>2(g!rHrj^|W1s&1Wf$=l$n5j!ZL+N(NrOlUv?^owaSm+~t=&PFiI zFA>u7k4kxz7nCRLDiv4J2qeKAmf<+P>VPy~TdE(thkroe$`@R#0i)c9YnL+|v-{a3 zxE|t}q9Bw9C@7?~i);XK;MJ_vaH)&3E+1(ME^5V@q`?4K{y&Nr$%(`8B;nG9ei3t+ zSzP=YdP<_|@)Y!twi-CyniSGJj*ZdQUGL-{fG=C{8FZLF%k?$8ci;8rocm>dRYQl# z_^UA$OVP#pip_oR9?t(feVg|P2Z~#~dSVzk|FiRFQt0;8kRM+=ZsG@L-jh{Mo?Iq1 z8!Y80gh(}??s#LDwlH1&hXww=yTyf9Kgj8uquwTo%qa~Ud)Z_@c2Iy!W=l=n5R+XA zHepvDjo=L3Z@3qQf^53vVj>r}0>Zs^&e0wclDQSa2>#Mj!s{dc#v2ZodRGd8Gw;r% z2#mLo6GA*f~=;aeCP*pMcyuC?byVACAAVo7+gv6$8Oa#kP&b?WK+2WqK5Ty zsB+w{vj+(cUHDBB-TCUaxA&**RIrGU*z~xw$>nEe|-6Xhr?y&$*X7A)`a}kJPW>zM-v1H z2>1fG!J`BvBUwX7?lgB1AujlXdoeYO#j!6kiN~)i@`E(=H*PSVL94rClT6QNoUe(0 zG+zQW?sQZ(y;idt)=M+gl0EY)u&rg6FwQ>sS4+9#2Tzl`LQceD`JBAB4rA7+*n-QW zGQ;!t8?uJm}ncuPCg<)?7I4?s7|qCW#iYC`AzDSu%+Ey?98*=5{-t`-)Y2 z3id!yhl(xMzOGd^qKEII-Vx)vTnNFx7k|`1sEV7j-O=%pdEf`LfSJf_K%D{& z!PWM0PG;$|&REaNl+Hezs6u zS#;#?>Q|R2W0U4#QANCJzviAGt$Bc(_kRhW>otMb9{Jbh<7^P$*1M5~mE)mSEg8y) zvoY4?BU40Ie}kT@qG3;I7s4hPDTcsjwy1ZrAvTP%E${^S%XYEtKyOH4r@tEcjI4*I z*Twf2Hhjf^#+XmTYsbF*ZYWJhnQ1+Kv*RUTyyYvZqFmbXPG0#I?@iSc*Uu4Iawdq< z6o+HFD4Ha8UlL!UbL^_kz~nhQYctqj(=>$%@(1#n-Y|;1yvq`myS+5Cn&ro(OBLvt z$rnG>Q93!<&FEQW2~iY#LG$|q%ak;mu>U>>AG2HfS*ucTzhte%*U!6ow>g^ZoT@mT zJZ9&98=vW(DwOm6k?P#mW(;D=uO9 zHW*B*+_=ObN-#0`PVSN7p`^Au)NOheYJ*!s)~5_N&~7Kz)!c7^u%3w6D?S?hWH_L^ zoMO;V;lmn2P=S)Xu1m>2)eZP<^lH|nP(G7PoyyFw(RIJ;Be>9$sNGC0H5S?oLBUe= zLqD+Ymtt5MLEknw{JuEV|OwEkJS{t5Q(<=0XU z%%_GufAwRiuH=UoDbYXVel80B4OGjDqaBz+3 zmo>M2{~p2+dk$e)GTklDlog!@h#5}5uqZ8er!xyY`$k<;&_C+>L|Y+gPZ!(XJ~ zLYvKT`@@|*fg>eww41WB*K2riM==qRyzN$wxUhf;Mf>;H(5n;2MX-YnCU8ehi1);{ zL&yB+-F#z38yv-8VNk73hYHY1jFY+54XUW&8+FI2x&D@zbuLS$oJq(-#AOI%~5>90SZvDd3{T; z&Kb`e)HYkfQF{r)qTx?iP6(F+?>g*A@2f1mk<^a^%_E3pdc}m)6n`RSO0u~~lfnJg z>llJ9ISl9`c1)^}8BSRr13sj}#7BuK?L5O3h0cTL({rfQw8WEl6E;Z>mXr2ksY`z& z{AQG2ijVGne7!PY)uCj*2k+3yzZwHEAV6wjn07gfdWpi5#v@O_)CY{);;Aa?XLYnB zd9jq2Bi;uM0k^trg1Q{nf+ z4D((Xtioi)=^r~svo-u%%{R`S5t+xf30>c!qsbTksVbBgJ~M_`)pvF9cOHloJ{czc zIPq}$%s(Y;eRQ%RP_{@iR5f6F?CuzqRzS)w@-CDyVQiFZW0U}_bZpa#omp6`rp5dU z%=~Vt=w0DXYAeJSsR+keFMKAB6r!61lQ%a(Zhq^J%Fm1DMsq))A zLAZUa4^vX7BrJ#RCXRatKTDtH<-SbM$7)-nr1HZC_NEKI%Q&_*s`>fYFfIiU)|4}N zt}Kj4x&2`n%7U``9Hntr^^%>YQwJLMsxuXbCcXq4F=;@fm4~Bbmsi#7ow5C3{A}`a zS@00n+3+|5EN$l@oUJEPo(we(C;CoK_#Hb>^8s-u$MNRB)F-|5{wzVy6br7tY)Zv= zqnXAv##}S0v4JN#_W$VNyNUwU9XuE6Lu@rd=Cj508ti%DZa%T(+nF9q4((dKNttJ; z_wAdz;z`D@rDQJ6ZPx(S<_=ywGO(eP73@>0oQvLE=%NTG3GCCfs?a-x0P7WTb-GgBY-RDdiq3~eLs8NP z*uY_G+G6P7+hkDi=j|f@FoQu8r_hLkcnZ0rSMP!PN`uLCcHd%)Kx6& z-X$JUHRH+fVap*1npJHiu`s>IYG-r&s>_d*geP{pl_d z)Fd((B_Wh~?8YfXk^V6nzf`(}gd_krz!u#>eL33k>Q-$94p&5kr)tFD3l_ZM*v6yDWyz_g zz(Uk(Q14Xy&LZ;;d!T^G$B@1KM)^NRY8T$;3^OetyD`kuB80$|^$XmW(qNXQwq@w8Krw# zulICy0cPT1U}c7VF>zV1-6!VyDgsIKwUvI48~at}D!1POF6ZI!xUe0VwwRUR;ga3| zXhpiUn&qZ&wLb z_#c#YV(t|HsIRBK9Xy@~-jxq1(p)cM`jXg3(wy2y2fGgW`vaNoO8tP2Gm!kr`OGkP z!s5*+$%=cd>)*&I#?MmrN$5E~BjoK+rGQo@PPLWy$G&5o+} z8EU1xyve zXd`exO)Cl=VApsVupU{z3>=>u9OB+FY5XXJDotg>sHo}#xRVS1TvZU zDk1qJi-PbB%jY!cO`QT`3^yCv6N>f<(~1K=9G&{kUsZnGOJTzB{%#Dy;CRN&^_TX2 zaU9*J*S21qzY`s7L5Te3n-TUc(Ue7gI}yXoPaM~rlq1dX9t?!KZ=k=9+PT}n>F90f zA?~2XXqkm!*RiL>jyE5%0y$WU8kW3@0` z)H={w3p$~n;3t;=?q`Wer%u&qv@R1q(n{%WEHiugy(Jm(%*QI=M!|Ji=wzP=4t$gS zgb8pZR9ByPW$jAzd#qiJZ^zngTfipSM1JLJxq)06kU*t5*&iBc8+b}^{`I{w?=Q4mn1Ewh==%so1sepZ zg=j1ibYVg*KX^i1u!5V*A{u8G(B(bngJQj)B7XGB$LYeWBg6D1hh?xIK=})N58jzk z1(@sQE%KhNjSVlOLQ|(S%3tG9XA(l`(k)Qxaq6*Dp-$Vhu3JJU#sweI-`Gqov z!y{TJ!p+l@p-=&P3qI(DB0#5a2#t?r-^;#NiBzCvY3f~e`Z_1K7Qs+-&GBE1ylpBR zc~U~iNcOUclLl|?DDNq%OXEH3#}ahX(=n5FxTNxS{%47krKlF7K7becoQm!YuE)BEq2 zB$nH#PJ?LDL`s`nusmM{5wUL{Pz97Z5KNjTftn^2At^zd4&ZOv$|EcuC0Xm z9QxO80UYPkUeIRGaI)ymxY_+>Z844;@_z4EkW(K~iupd9K3zdwpCWT$38?!>UJ>b< z7a;9^|1qJ)cdreFJG)o76m3<^Bo*DEh=Z@AHR1dcN98Ltfq{JX9luBt#Z^DyX@s;` znd?<4W4$$GNt^DiQLU=T0>N%KL3azqr(m{AoQHo2R3Cg(^Np>??nh01O@on6&193B z{o-x?U`=z%lIR)Q&GZN|2_dsX_iy|H9L>c}!3)p+#PP)yXFAZoZ?vE!_O+M%sR1PE z{Ds}It!u+P^Tux09kfMW$mV4*e1G#0R=1-8xw|D?^2{nkp>u8(7o<#K^=Lpg>znTE z6(BLsEzz~|yv9PG)-a!zGs1${89r|C;4F1k4p5J|ODtB>8A`$b;rG7)9%5AExW?UX z;ZyJJ`-mkNwS85g-1`zo*8HN!sO3N}V78{C7gyFNMaaKOVF^$XyDUNHzw@#LH)dfT>Z|7<`(km?I*cu7Y9wyVHiDtE^`~%V<_Tr_F4KF~e7DP` zq(7S!(xjI^rT^48;_(!oths`^oa;2WMK0{+8yqdVg__X5XeAeg4>Y5ja z9>XB?Q{|ACy_Gx#g$k#>a{PZ5fWp|agL~g_ZrFUEM!30Ft8ywR+Vtjj^;#3CjYYf5 z{hqrSHQRA=p5Bd@8CfrJjeVqMxkCv~z46IP}tMMqVUw#$TaA2|OiwY;A*46FS_$ zz)5fI=Biv?cnm7j5O!0M{l~?d zYgxk<|tP2`EGUvxa)u0FC)f#~%Z6tA&9z7K-xKixN~Y zgVBwI?Jfe);Hx*~ zD7`#uaqA*ix@A>7;^KJpvoTV%tV(qu(OKURt)H-|8^(o~hQ982!zbGjYe8@!wQl-> zbc_uz$qwiKxETwV9Vs#}_$ifte)`6d-VK~*<)%3%gX0>TtXA^+I-2&(5VCb%{!<0P zMU6@3Jt#9>!Du*E@1CokH$M2QWM3oS&&w9Z8gl*Yx_Z%YLuAgj!(lkl*Lvfv;Mv|N zUdcN;%HJhR`c>;Dp0M5=`s1T26<{wYK3snb7tno=&M5LiF1V*8;B2b3v$VbZ}M?p#x!aR+mb|R?az}az4$>`A{imTZLjymBVtj7;_3aEHcW>afmUt zISq3dv+q7XeE)^r_I|%#ujljexZg8?O=NLLJYCK9clYA<6UL)C$DXkNq0%YV*Bj(^ z7Z&}~vnW?3r@eGiOZuKHcGUJ!P{mz-LXT~eCzB4)>?iBver45lImc{j9_tg?Mf3Zm z`r=g`*kyShz==n%jqi0Zh15)50nv(I8{H?>?!O(Ju54)1e`+ovVy|z1#BJJY%6&4$ zp_WxM0;6iG3E6?=re~MsaIcc<4R6Cd*G#7+A3tB(;59LWN)>$fHBYtR}1+s2+qg7A6sx}A}*8Xc19 zEmugYxJ1A5XgBwSEtdw8s1?hjwM+qB*3Oyt?^-%c)5C>dV)1HU6Gww^Eap^yw)PiY?K`018EiZ9L` zs)4O)w+FR-i&Jt1m2)MCJR@AG8|?N4z`1BE|C>(=*PuoTa6>m2+0anoJ8TZH+}TC;UlLLxU<@MG(nRBNqT`&USk#R zX^=zIE$axQ2z04mhrdUbuoQUuPTY)FRu?Q@;dO3{ZI4gWZ%It-L8M*bDomez_`hmH z%mbk^oRcIypN+)89xgHme5eB%A1^t8_gNW)ac z#Saw|LNDkxEyA4?w_B6HUaA-1+uV0XW%|#HDsQL`7y837g|A(XAY1wb`9ryGfqrz; z8nGgD$GB;bTp5ZtFdHGR#>c;pOgWVvq5{)W4 zFh|;!`N84fSj1<(zD5az{QGlyVy2H&{1Eb$j(fd(`9ezg&YY@r;O5nzxodPej!&<6+Qkc--$lw)+pqw5m&&| zD`s-%Hc!iouGO;9PonC)rr#6AY%Bt*0Rl2re_y@`Bt6D-+dN5o{FqW(dcxSHLogQJ zo`G8v=1nu-0{^9``<81lZ2kb+_NMy0S1zhi0-0A{)WnX61WrMkxH z;2=E3XO9kc-cGmAaDstsFkVF8o=^#621SAV`u_akp)G|@QwyemhqWC2kcBCymHo;| zXLy+hE%sTkbE;ut+0$GlEA=I30q?>5rXuT0AYdI4GrIqcaJBSU?t%EyqMzP(t${t! znlrrBfI!?)cpjhjd`OUQY$ZZGuX$39eGeV%3)m1CZe?Yt(DVA%Kf*c3G%9O##|42cy%(T%X`D41m{=<2$v79&Zb#_5I?`K; zNNN+7DrA-0q13`N+=d|~h%ewUouvwvMvMTgEa#x~o5Mc&PnuXg^IjTctM(tL7p**m zqofSieJHhc^r(5OU8Nj{=}r=hGpT#D$%erxFP(D8)01k={XS67>Cja=Lt6#q>B3K~b7cp;o(phq@t>Poke@~JcQ_#b@q!d(c}#>NZm2Rn>ci(n zh}-qDY6ZjAh=BdQE}iY2jm=`j8g-pp*YJjRt++nZ0IN@L2l^}woFscfiY0D2Xb{Wm z2N`=7h~G}JFgSRdQ;l5eR9k)~mwFbQA-T`cAxOC;_;a>0(GIu?K~#TX%;u8YUG z9b#R*qk}7O0S(5$b16Sj^fgy|ybD(qB+wDLykp4@zhVUwByH78qqvab+ihCY8M-#+ zrv)-T)aBgATjo9$S~658%eKzsYu}2-CcYJ3GKKH`yX}30<5 zcP{r|^YcT+GcKQd9yVR3cvsfI##%_?0UwvuFgeVLQ!5Gx72pT1OzQl4bu=mf-RyvI zL!+B-n?iWyV^dsui-Nl9lc<|RG0_Lts8iaHu>52N0=C$NiX~s@A|+d)MKT%9+=>zK z^jQx9d{D0jvt@HHlVb$6=VVC((bs0Q3IJo4@xc`wklV1|XIGpSx{0dAj}c`GR-!o)Wr)A-r3`z?v^tzZk59&kI%?iFF)4pk5w)opxa31n{h{QCH0-1d|N$ zRc?jc3aRt_`h~`XuL{{$>W<&{IlN9`1_Di#40506IJdUMS#8B}k~qpZN4W zq5SpFzxq~ux{^5VaDgrXRUdHTs)aZ(9LvrW`6{IVX;Y@Xid=(o4<^kS5;;~XG1-(L z6zArHFoQ1%X%qS@oT+@)!K1MZTb+ya!`QXM<>f*yia30R{^+uP^%sFO2WuD99D10p zcJ3NT3;N)25IHD8!3Y-?_N!2_{l2c&J#DL}UA@Vc@LBJm@3EJJh|wwsG@2Tdr>Q*J zjwrN`b*Krk5`1k6UqNDTGI8F6quL|(uXXYuE$Sxn;+0?X95}Y7uHnHt9?dCv_w7Fq zenKc8$>*C#{h==(<3bS%p_*THC$9I^7bWj#oU{n^lBOoQU9Q`a4as4|G9Wlj&uEM3)e4VsP2=;-s}YO zjoLyT0Jw z5Lc1SB{a(}FqyZ$z`|Gz(dI}o1pR=j&N0#ns8^heEy_n>y!UeWa{O!Zt>S{ni1qd> zU20e7_{ljKh`Q&PDO$_aCF+ya95a`@_s(f^6`S;N{{EUSO!>i5fj(|tb=02&Wf0nz z4v)@{Z*q2rye@tkPEzB@g3Tr&khVGdlo!<5>BLQZWwu(MBslz0>@&4p@*^H_K={2a%{b|UoeG|<^ytm1U$b1i za1!T$G4_%kH`c;gZ#jH?iV2VG-#-Bz3@RKcuc9^-WQ33J#Po)-qo8$B-^q^%xAHLP z2FzWDo|s8?c3iQTN@b}!fvk)hSsFzE$DSPq^0}3W|M2Zjn;hDw>6A)c(vrmKdY;~x z9Y{S}GbJI~iv+W-;ip`49dJap`-8{Ks4JsZ2j>y?lA;elyHnNB*u3g2?Apdk?fTCB z>JpJct%BO}@cem896<}Us4%*k7q5p40k~xE?|Lp=i&>@BkvGq zr(!feY0X^Sl*bI_??Vs@>GuQQ3wC`LFHZ7JebMx-Oi*0F{ub#^6V>H*qWkeMH0wO3 z>0TtEOYPTH17FjLoI6w8o1R*Fgy}^xPMyO#h&?jiBjXPXj}G42anatV%MXt3KlkHU zJnBs!<8J!W{W&dNIKcpqN_}@H9c*h5QtC=s=YLd>@+ZxXwB1nl&f&Q@=wZmvsCABG z-gY}tvDdfKprXpo$ug>foym7qzZaHq5hU&@`L4Gq@npE$T0K`yKK_TJI;fdn^;pI( z?}!GwL8%>;pUl91Vnu{a190X}ZSjWcs!d2gsjvBiqhQ|-j|Pt;LTg`jv=a47ZlBo7 z;kFVFsM0Rz(+do5uHDkZRLG})0k1v(B31jI8th)S{qX7}eTy|AIPLwnG2?49fbyrK zCfGvP1f%Hy@L zx0?(&mcnq?Jc59`;lB6as=McdAP!e8`g7s;ng2h?8qm!#2+w?+VeQlUE!z1yINEGbuwtKg%xOq!ddFI_3lF+)%APV^`BH zY`bXNk%CTvEDeSxIkr$SXB;Jd>RG+`mbt-bYp*psxz^jyT;tvHr`pdpieC#TU;f75 z$-L*3{I;u0XEb}$5+Q#uF0cgEa5f0!O15r_y~8j=f&RHRjheSF`vm-bwpU!L&SqLm z-K$|dPsd184~EZ_IV#gfY3e&K=j|@Qp^1FkKIw0xgZGJl6O|_~_rv_Yg6tJL3!eqm`mxxvy5bIV)ajq&oqc-NmG2 z({K+A00-*!9?Wo`{9(w-`6=*Xj+%#XR8)29Yj1g$Z~qYfCKu7I1c-SSS$rt0&aca_ zYXg~qKHL*7@bP+VL!pebd2WvIPnQgtwM1E%v!C0u zj%Vwo#j$z4v{4m%#m_1_rALat{r*llxcr{jfu?dQn|{9T$z|1yDx=L=8x_#JL+i-y zJ<=$jZ*gsk)&aSBj5j{eX@SE!&fSLUeXC~TIKy2TyN5GJvj>iDY+U0>d-3R&qsCi* zJzh^~&iykq4^g%7Q-L3PNk^-ri(}Pr`3>b^dJN`2c1Ax*j^b5Fbr{o6?JNE_HE)ui z`JNHyGa+mX>rXExpG251iRh7PH5dfai8x#MI*Yj*KP1g!t&V-B%-%OToe)$SUCs%x z%9k*&Gw70DR2r<1n*la+Lo@Rx`)C`qUX>K5999kB-bJL%9c-j?)qNaN%zJ1ox*8A6 zni-xdt)79|o2J{Vn;?vFSH`3`{Yyt8J(mUC2aFl9A2yZgn&BJhXFDBq&EQ}ha_3Q-FRND>+SZHR zCTa#~5RpS=e9rpYus@Fuj=qz1?>4y)NPB2*BIKQ}|ySmNBjM zG%6dk-MDxpH`;xd_>af-itUZk{2ic5>;r!Qt4?#b&I8_!AIh`LLupq%7RzjPi)SQv zV%OL;SshODzbPEZS~PaQ6k#NuBQ!LlfH$IZVd^@pT~gHfha%W8=8~0L9w!qEgsuVP zQHw_Ur46VFm&l4q)t+w-jYP{t#5r-6L@Kjo5+u{{z2uUd2&Ki4kU6eC4w10QUM}ZK z!_+B2s0k(cpbTRQx2`HkvLrrW8i;0Aq(}W5a^~-zj<)!&9i;jbwxO$PnwEXBgi7MQ zm58>C=7M0dP=HvT+pQ68LlgUK1!sRbj|oR(-v+vUw2i^SLITcI`pK=c`kbSTnAyST zC_0BF)Uh-DR(hk4+q>XrGW0!Ue{}UR%TE5_T_LOw$E8U#Ad=SWDT>pf?832bx(uI4 z*trBr`6rDwB#{s0J#r693vF_@xAG(b>;IxBUN0`U@@pbzBm)sj>26r>`k@HlcnB(0 zadZ?Kv;);Np5EKxxuf$T`ZS{j(8k$b%`mAMbJEXgUt<(oHQA~N$w|WwJxRfb&TO;1 z!Z9mkp^hQmSV6vLsy@Kg*|qX%Sfo%zdbu}&b1rfCWj)Bd!l_ z-dJoZ!=HFi2RgY~iU?z=90R<_rX>SUS7B!z!iI5~MO_l3mqq<#1WpDPzI7uEWgG>% zO^e+m^UV#+U%GZy+?>UP5VR3MOGpDrW&57-yB#BOy)*l^sUIEYFWpfNZz1$x1i0rk<-Q#D;78=CX3nR^^^q0<|#N6k~0py)5abQYO-~Ey255ltB{YTZCTerMO2;tV2bguc z-7Fo9(>%G=CCX>W!s$GLKnMButI<_`yRa(i{mf+}N3`xVX>OYqB1w2okkB{(8Mis! z_$n@&r{?2QM}GoFZCu^GvlAis(!4lF;g6t03at0_>wx>us#|FFXO4OP8QjZ$qPaCO z%J-K$GDJq!#!li50Nnt*gwp)H-{Jxid}1oS?wm*50+|9en_bLZ92T`8Jwf&R!fz`t z3L>)Z$ft2+vjc%tb9sCHYVi5mL{PuP(K=I}D{l$i;v7+}*gQN8V9kEf`=h9_7qKZ09w?)&e9A=p*IBR)@3`vng6rHeh;ZJY|m00g`r z?;c(YANk4)?b^*Ii3`h-e|!eE&n$sTn9E8g{D!*w z@;tRUCIgJ`4;`(XuP2GY^E=To_A38gtAyADNnEoq5D{I975YQ%eJ)7$`?qPZ#q|lW z#~)s^HIDIEr)V12XZ=xU2f5C()`KlXtP;NU{dQ^V)NnO}oZK(EC*Txz1yEBKj^k@d zSeI{#jyZZLDuMIWfDN#1n)ydq!7^66F5MixBQkP&vmo(vf3f+mFxrE$4HIT2{I49SQfkVLI|LZKhy#i z9Ci5uAlkxq#K$7#XU}(^q2MP`veID~KhM{Fi@tc6!;*Agszk4(e)d|^5qKalP$K`d zMtYYnxc=1s=kUl?;)aNNP_=*U7Z0KLH5G`+U%1**ssChWFsg>b;sagm0UDv&@Fwt} z_G!z+y6U{e7Jfx|KD`H7O;~80Hh0OwNBBDdAX@l9xH`;#`_%pt#lBSAcqw!3OHL(G zXoRQq228OPkWc;1Uv zP08q;*!=%2fO*8D@8EbueNCiINyrT*+5wkv3UwbO)2QPKb31&jBG;z(^h0=MaP)8m z1>=!Unekr}Dl@!i%XE`7M^!|nFi>k%}L zam?8o{R*Kl+UzpX10Ib2Xk{OnPkZlbg3Ibf!KmScA+>{R(@#{-GkA`yd60h^mhz6T zhS>t|V)3*29PPzDcgM6tRM!@Pt|v1@&?~?7>5)po+J{#SO`lwOOT<6x%UA)!uQGJf zz}hr1X2b(P&+FGMqe5X zBpqrqjYqfC9ZR2^tAY|L=t%sfzWGNV&G`<9bWjJBSeKmjw&E#}+)Uu$@5D{wngV+B zYm0p9I_ccqg{(zzepW#$+93 zeXN5^(flVimgi4xKI@CX*15nNy`nQ_m3ETWdtMN7LUMXFXaJ+*r?D6m-t75(=cM$o zIuK)lbs2vm)iv+UdO7*KGAD+_lId-luK5j2U^J~0qGC&|6mIw&gv(ncpnYc>N|S-q z@Cs=Aqe?q=p>2>EL7R;&dMb}Db>z^?`BPPx8fl9-!y+rM2L@Q51}E=N-H z&rvNS47zFiAYv$^l$gH1B9Nrg1tJPG)DwTGsW zy(O*x(O z#{SrAPsT7bcD?!E`wo{2a!_HI7?Yy~*Kc(VzaiT^y^9TccBY_kP@5k+-8*==Cv!_3 z>KJZ~9u%2wy4f2#-OU~QH;gh=<^;z;0WPM1LoeNqIZWH>@xAkuM3_JHUO--@FGSfl zf_=a~c1Q8HZvbz|i5g)qiO1DYLgC-gxb`T3qo9MZMtH1@tZ^lPyUIj=!tx`_%JYv4 z3n@<7WQi(2$HaudEMo4uw@efMxlOdH1`s9x@1DDyY zRQ;V9;*&)UQ>#VN#<1uVAGrqV#5vevPwnUjwC3L(@^zwnTvwFuL0A}^9|9PLNj|$` z40M2>TCZFe$Q2-`_o_%#z=UvBfG@sk7?+vwo}ukRZ=r(O&Fs0yOlhb^tA!Xjd}Vul zHJ+Wb6rc>(iJf~Nkxqb(V9nFWT9&zwDm*I3nyNYAO)S$bu};uBE8zB#rip^1s+525 zy&A8kSL2=gBZG1&~8p>V_R^zb8KfM%?BCT zvYIt4jv87k5P*h=El2jy#=~#to}YxN?qnPcR(wd0Rk&d|VmG;PF966(rR-tEd*?aHTwk+eg3X*G|Ho@d*mh)e&)?1;XCxsa=v8L!F z=jVa?tw(%3^QO!+NVhi&CW*U&>a>&egsAFzt932*s0B|Y7PoVQRU5u6&Iv?~SaFzt z?GbcZZd5wxpSY@*lH8uW@B?8)j$TVx#yh8C_F2Po(obj2I26aUL(}YKB)9dW0&7_LQU% zOBBX*-fm~(t#T(mt#Tv_i`tJr?{bkb>py(=7(=fW!3yQR>(~?3RQy^ZA^E2ClgS-? zbR!0$>+RYz_adh%64{on-qupZ+I!0O{QS$A+uHKkD(|!e?+n(9yHkR=Xse#ci{#uR zE;)0rCOB;D*?8|!IrJPQ@1%-q^b(=bbjjd(F{HA=CO$%_i+h3?!_jTxiL<6S@IehL zX>wWWT3M{@sx!B@2PX)G31=u**Vi)aaAT<8ZoN;4K@os$534dnhLKHGt4QC%HgIw! z?9x>6O~Ij)Wx+bX8K(NA%9nf2TOxGTmK-CA$1{esKelDaf7H3pF9K|LlI4j6PT}xH6?PbL#5P7outX$9D60L;E3OLEQWp zl1neMh-&^;9{nT<7}Kp`DQ#|VIxBHY1V~bD;5sK|lW~;|;!+hZmzaffIHo?6A=H}z z(Z##<;dwJW|*Fjm?D8?<;&jZ5I+lBWVpBzvn)#mdMQ$ zz3ba5E{7G{8s5Z{+(h=DR(f@HL3fItW>k6ocm&;ZND(E5+9p>xf$LVSapau?8rM$1 zg}BCE8EqL0qBrX8*1s=gS*pr7Eq#1n+T>P&`0|VvTQc{H6xF@IRd~$(uA;D~smF0r z$|m*B+X2>gb1p2|B<$p;V83?$%YtA0oV)q|QA`L~y?_#WOcHW!!`any>*W!V~o{T$Fqw;UL(t-ZBZ#^i= zQNOZp+f{6k^@wj+{jLyngWOzX$&Ll^UdHJpg$us%j8I8&l1QP=iYoYO`Ks2)3)wfI zT4696Q1uqA`y}z4;Y5LvXZzT845QKMc=&-nirrrSV>Opn&YI|62=JLu8382#vr-9n zN}hqp9;+6&BoPF`7;XxhI*`xMa3Bc&S2gw#UdJCSKlAGkb)i|<98{Nmx;BS5>eo)w zZwc%8SC&2b^+LNAnlkI8h%&Ho&6G{<{>R@!@8h?~1kvX%kJ>0cf7AxOJtt?WMZ?rl zI}+>M7$w|XoFa*$mkP;EPcJ~0NG+_<$UDPd)nrsoH&y4fMslG9>QpoVUEh#HoNBs@ zSAkon>wT6MZ$Bc(e0S$7c$h0z`LJX(9}xFXx6^YkIfRDvAyeAJV_{3}NvK{CBe=~K>*V{T>NP>ALvJC3O$Y70( zjWhW zBsCvjCckat!mLLaTW7$vbPH@e$8umt*N+0XORK1`8Q~be5LsgHVp1ewAt|;aHdKV; zlkN*8ZHhrHV#4(F5cw>hVVmCl;=89*e-LWA!&CA9AZXEx`$qqmnOc}m!4%e3VE|xl zuCIQ~T7$IR&=aZ5O^tLVhYt|1YVURHU()&2a)Mqll=8lvZ^EASp|S3HNF>4Qc<$EZ zj9g%h_7PX|C3n>S@6FFcm+bFmb^8cN@b|C?vX;S^lAqIcHm_I!L8>x?>jBJHH= ztkTT}?hSeeGJ5Il(;iv?&-rV)V_aKzAb|d+9+YiAz?~Wee6;zRTWtzY6Bh(D>R2zy zr-5Ban|sYW1M)5;@3fSXIli4_>d)?Svg16XQo%KwamG!P%Bktz6V{v|N|fM|qlpKC-^wMVUF*cT|T|iN;2@&gU4EcWI0!Q5`GB zzzmz7=X+k5@;-EWn{J@$P*bi206V00DNbZ5S6sXs+q~x4dZZNWKJFcCj=l}Y)2Hz& zcpno(eI>(0&0RUW@8$hxmf-UB5*)?Rk-u>@A&BCTh-x>n_MEEfy?6Y6m^|;q;TCDf zxP!R^-sd41FFK1hY9H7qf5lKKClmi3yY!c%?690+nuFjLwo%Mctgb^MxASfC{T7gD znoO3~`=spAIfhbA>PGpXkK|dYo)^rMuM1C3rSZn;9>@RZqLX|?ZSL-S8h=j7F*P}@ z<)jCf+oRP(YrT-l1aU0=ZD!vX7>5%K(C=}6*S z4L~!iUG>k9Q#i)jq&J`VUQ^SPsOAA!esG_4uI_aDv+}b3-&JnFXV(o&DvWTA^t=z# zbC6UQrpM+ zP}Am2cjOqVaM*5L1r|{{qo+f|5MaM=P9f!o` zG73M1X|(li_~(RU-?~^~i)xJq$8dHcd|#;)(XM*`DC$&Fc?6z5XaP(p65G!DoJ-3Y z2ot2#dz9OLKet5(@GNI-M3mOYV6%{Osl z-+bTn@xrz^mo@JzY_BIC$UIV%Xdgst%Z-sd6bO>1p(L|TGeIbrzr^Lx`uwTn+S zS!#Bw_)wMF{f~<@NlEk5CmnRcB4cDmr8%cM9&DR!0lR9ab`_DTejaI1PQBG?;b_Ts zROvj+!d%@Z?|8-2FfL$PdD|V18lOn%&WIuDVDk5`R?c*4h!32#ddor0x6h%)Ld^XO zMih6Agc4UNZu{`m8aHla7nPaUg7J0@)axX84LVf1O4wC490p>1>f*lB@+WJ-F_;4d zJ$XczZEPrK!Vm`z&WpHe>VYwea+Q2%UAD#LOhlaW&D_l0%G%5u<;^`R9F!=mBA=rB z&35k>qi)n387<`x@^I=UCR#@*Z-O%5jR*F5Ag#s22a7qZ=+DQDq%$rCZdpK46`TRz z47ZB>fk%w7P9!)bZfJG&rG7O39k&zZziw<4@NDde*=^`(*5{3chy|3>FX({9hZ-&_ z6jJuMDO8xzkALL@HheabOL^U_r@dspuT`}H!8(#BxM;T>-&dr?OaZrp-~MU=YULBB zv%p(#J`)Elq^$|BBuo9}MFJ!867tjEH!=-Y?A0eW<0@{Yhc@{R?tN1nm3IrE6Ssd8 zuP~%Ff2{zQ;v-_a($9gn%94_Q*P{rD!X()?qZreuf^c{WRc(|2TNW(4z>(sRPLWp0 zy@90wIVYH2*w>|zq7Z*zO>w|Lq?}Ysq~GWuf8|tj0LC7FyzHi*gE0M|hUe15-vfE$ zjUM0mG?@Xv1zH^vdAeT&5;nZOreG`6{5t{Xex6DG9orqmwO>$KLwtg}Yj5&xOa{#l=B_kc1qrSAAeHYIAnbry(oh;uuarLy_#{k&ai3)9>QhL%n{8+S#eyK;wZR^sL}=RG#_xC-zH9r`a)Qi;or9^`gd zQAWT+7c6A*3oCXEksJ06DB?--(+TJjEb+Cg^rI+lXKL~`hvnH+nplhC#`BU7w4`&R zoS=^~RP8{nVgW{8!>>f$ihKobeHjYWkBdI}=Ym9fpZ~pq7b5Wi zCeiee-Wz%=uUSh%oCGd z{A6go4|xBtjN-cNFQ*>PQ$m8cLSeCZ)m*Wo+L$-Kmr)>EC9X%gG)dE-A5&FK5Y2L% zKeh9gJKW2ecFy9`Gt<N8Bh;lmqMWE9Au~>E9 z8O$@*AIcdM!X8 zOb94Izjmq;AS7N6P#m>-CDGeR3ep5IV9X;QsX%B*M4p$#4lLesA-10upga@K*TwOM_XSQvP;(z{)^P*aVW-_CdWrFKeBiPj;}3-c zjC%-AUErbNI%zY!x)9^7Qs8Q;id&eA7TM2~)|Ljx=BeF{U?$+82sNmNp4M!q7;x$K zb-%Ivf|~lp?Z{JP@WPL6Id7j~VsWl<#U%fq+}4c2mV&&UC;LQCNCYKFE9~&5*3#js z*3Lb+HDZC6XJ_HRlQMki234xDR|Ee3jPKxbU4=KQ{%Cx5zClUX2dD|^ui38k@^Gwl zD^Y7vNU!#FVBf4{)MX?A6>5^Mz!=wvJsA3=4XeIvZJm5^y6`bS!8;1%`HGo3htEe z4+wyF27jilV*ly><pti5}M2#wN#1ZLz`;2i|5`2dVBX_Z8~5=g)uukZrpwZqTEX?f_O{2n^$ z%lI~39S z9E|T0+&2MRVZF-!i$+WyL`Uf1-2)t(T;piM(p7`#t=PS@chvvZ{&eqHUYCvH@q-^C z?|d$Z<-()z-@o<(>5wlFMlrwebt%~niSpmhB2P!ur(x9+q@aR3)$qD8ODS6K%$b*G z{C8f>8B9McJyQDb_9tsd6JlwAr8+avtm)_yV=gF$HpUo@=g=p#X>bI0EvaLA`d^X3 zH{t^}%D@qIOYvT(k_Z7{__S%|TBIrbWGZ(&ovVO*CEoKIz*SONRtlw>)DRyJZ)kWw z8-_4%rfvRB#65LVKSY!4NY|WlAoEN#APr?~O^i+J@{@9fA}Y!V$3D1i)u!$fvv5Y7 zY2JwUZkz7_yK1+bZ#i(#h&rh%tFnnV)Z<%sDpL=hGL;<+B2N7L?c&JDT#W--<+Thm z-$+v*7<*f8X;ttJ778Se$DyXGOUH{E0F`nkjkSC!E$MoLm^5m=OCskJ>*w(6gTvuy&uG2!;Z!K|#VBIhwMNSmQsr zlZWN8Iyr6`^5WxSkl9MN?mI4KZDIEw9q;3-k);fNRKB3Tq6PKQXkBD2PeX@`GkK6_Vmc95+gm!%% z)f_U4B|2w$PbMIiHFGge|GVAhjb*nP^VSbfEm%)YYTzMJDrtU^Us&sE^3#`4Ikdug z%c;rYR$-4!r-JH7Qnfj8NYN|Q3D1??KzOsNJljhr5wAJ8bhbKIcY^eLndDu$HHnJE zFnKIdYBg%mKiqDRjhf{pb+r;_By3>in@|2(0Y42&*^ll~4DS`dVY5p%=Y!z;07;}( zxzbBJ!Fzr~bd10MJLNKDLFEB4CZzNOYkdIE2(Mcrb;TfFHkWqMx^XLA4o8K~hyBo0 zVvES^8qgOy$-x(d?G^5gZx=3(Z^UJ|72&R1b+35qi-aM$4jQ0Ds|GoowDtkJ;FBEL zIzb@nulCJ|=0p|lkVEq6{834yZkAHLPw(rxu62vt;tCX0f=;F+v^6Cgu|ClXq$GgR zX01L@3!qub?y05K*f194e;vX!rW*IgAI6%Ed``pZGryS=(_Aij4_2mcqE_>YJm`&M zoV}yJc*2XQ$mENyXJNpKYz@cR6Z`D-;-R}QdO8xcVCKbtmsit~5$b}oom&4ZAo6MP zpJ)Xg_a?;2F1J#qW53+xrftukp6BBqymxJ9?SZPZ_VvqF$Zy~R(*e!2y3RBEDKIx3 z1E@z-In1xUTd+hW{icGRTr5B{K>7!I>r7yn3cU0MukFD`kQlriDy~#f(h__7LHCpq z{071SZt`dx*68?}8EkKy=P@?vJjj@JKruMoD!mRRS;o7=QXs>e(^@zGIEE?fMGQoa zZ|n*6N_zY*Y=oZQghj#$w}3b<{7kAs;y3SilcvAvSWe?@JGt*C^XleSX8kT%YGQjarL;kFgAb}8K9J}4GATcv za2Dmki^eKJit?CCRo+{_+WsAr?q_U2sC#KbTfsPt6y*A;c5yE!fM-&|L0Y9zmh|D% zM>Ka1^cQwjCO8pNR+UcEr=k0I)o{Wx_rc!WEw!cG&mbK}l#6o)Z>l=Pm8?0A+vz1l zoabWO=5(B^tqZz>Eil2FiXi0}NL{a_q^C|u0cFQHyh}9M;ZcMU5{%5w322BmK^BE@ zGI3Sa4SKjeu3NRKNdQ7R%-g`sh1JbcH8rHm=(1^nJ8_$~xiO7PUnkXKU~Q%<^=#+K zNQlfT;}ze>u#bhe^UY&RuyN&*gX<##s{t%@LAW4MH7{o}>Ux7T;ZSsIigCzu>6mJ= zGC+A+Libt!$xA7j#$FyTrcmEK0CL*Le^8?N)>AdnOg5m|g zMsl!desh~H?!NYof??W?xjRJH77zqgW;*$ZxLS`e%F6^@Gk8qtRUY#~cF`Ix4D5Lb zfOlqdu2H7BZk#ZwcG~>F+K88mRc~C$w7{df_EXwb*8aK`b243qbwURanq{A~=uHbw zjr};ISbK$wnJb$vD_BD&^BQGLN>~V#p~R&EF%_M8<^Cy;B9wMasqepE+mT^t%()Zd zdVuPxhc)d5ArFX&F85q4U1IGHUNt&F+E8vj&>#s*ePWJ!*xSc2}iSdY_Rk%|4~ z2`C+~uJ#&U}uW)M_ zMwNWvg>iu^{qgTEw1@#?)0X_Uv8#48rxewyKxu9OYRFdcda+HTR>5GL7+KMfxt2|M z@OmO79`pONT2LcfgZqgqAfvmMDT3(YyJZa@^tq%LvEdc z>b3TI$WUB=^FRNHOAI^>a(%uSZJhyD{{tU1P1CDd%sxE`==-_EnBd=4@GgS}@*jQw z4^uoLQg^%9>W zWb8aCNlDDVWygABuf96zQ$}n(EQjxd#!K9~m%X{T2jA3W-ez`{Zv>a_U3ynpP#DDy z(^M3?Y7Ww>O;;!O?w9q~{2plFWSH-*C;UuKq=~hgkpa5ys;_9G2bp&X9Br->3J|5Z z9ynIuLljmuEW&XYr#TRbL7;tJ6sGM?T0x~R_Q)Ncz4Sfh^#aOx4c5|Dt2 zmHma4U*Y@08sN!Khbz`B%OYug_9>p@-ZO{x7fmQtd_PC7Up+^a34=;TCE6u-pE$gb z*?(vK@8O1On_EC-)j5*`2VYW)fY6@EY$@W}wbhLjoAGYk{Il$P3DNp>{=dBrHYC< z-`3fFyC7LsdV|v#4lSr#ode(iquo8l7TE1X~tLaj)-&G_IC zsg_|;0xaWzS0a$~KCKeovIcq9(BVO({}jh+>E8+y{&(-|$l@F?-H9ILj$58iP9Ip~ zrA>GoPe=DvL4MSKw}qckl0V14c8OO^%@WO@tT|>0CA^%U>77h!>t{qs&)j@@&=%WB zJ`gTI8;R{?eEb+RI6nM5@%#6n?&?o}4-4o#q#50LUOSY>k|t-7PW&dkJ-&?lK+jO(rgAe(9q|H-?G(R!HU|zZNK_o3nB3cXDb{ zQ=7C*ac|0o<&CFQJA zB-NW7=B(a{h*3@pBNQ3NFmqlG1aYKmlgd5#qf@2zq1tkzSGf-#_>f%C1Hc;Q|W(oo8YiHh+@xsf~et28< z6+;DtQUb>*@$oXXN80)xzO7-EPm(9B9uH*_ybiJh^qt3h8syVdXvPp!BMr7YOSHtp z=n*@T?Pd6q_}C`RZN>d2iWUf)FDV=dIf5I4Ll|4l9&WkEL_M+o9#S1i^A4mHhF!0J zlKXEyu3fE}+C?(vF;l z?l?F8roFW;kbs%Dk5#Fs$ihwn;^*nO9w5Ev(2pohZha(%eW~NrA?@GVtO>d$MyW z@Dtf>LBRW$fRB)3&tP{rF>J8^vy|QCptZI%rL6gszF#YC3pk>AFD)b2FBM-YHl;|& z=(*L&`Q)yqvgd)>K6YncV#DiB3-8R=!K2b%|9d0za>=jG^*~ee6su&dMlAs^d_!8N z-alWZxvp$vpCU&u=1C?g6(VE8h5*}v)Gf<~0Ynn_>O005(tM#vqfzA2phS{uYkVwT z;OLf4!_gWeoteFhUm;~mCQfGy<|q_=90jKdZ*k{gq{oJN;h&vHTqq;S@Jj7JPql5I54N`&OTs8EDpOR2pnAQDA)v3mya2 z_^cyF6Mo>BDFey#;!XP*zwIsivSKV(Pz_l+o5dPgHNEJEoa{kto4s{)n=$eb3)pu? z=?>TtJWyT>zKktb2|nk4MMPE%XPYgTGL&^Ct3{ckGkEwbGR9i>)!mQ2t)n+oJJclJ z$y{>go{URmr>j|0IM%U4S+*ERdZ302mj~aaq+D!l*BM%-#v`^f`$5eEl2ivZf`4e2 z=lhc8Z;{%+;~Glv@8kH0r(UH|-Wb$=-+lzt+*yq&Q=#Tb-Ut{pc1CW3>4U0eHEF)f0m~G_xkfw zB{KZN67|zlpZpA3pMt_Ms2f5y3jtI)qqbBApZ3nu5jx367n&X~olQ5iPw(5N&9>hF zw>L*u8~T*@j_KV7hN-jxTl1j`jj{cV5KnZ8x}qUl?6*PbF5eHxc8U}~P| z?ntLiI(^I)=Cd*9DekhQ@S1ICt?kdY1yavFq;SZ3M=?kVX;48MoxBdALUfvGhAJs= zuL`Zb%4u{WZJ^zd<|Z@G8cFnyvv;olix?OjA~*`|XV{owW|aJLNKSLs61s5Rg>zVQ z+yT`EN%SuP-7?B=?Uj+jH@Z*_Nm2=^f=y^e?CC1cqA^5DqqJtv?osg4^MaKz459eHlseN%ya-&%2C4NtkM4 zTo^JkHK;W1-=zx1*s^dea`3$J8&6PLt5SUUGlc#-W}%Cvou5c8$HCOtUi1=R>Ohxs&uY#A?{=7-m%j`~&*Fw$M!XqvAGv@_C!j+=! z4M|5lTruO6bE>j|S;UX7E@h^EaupsyV;9w5n4cl(CY@CDg}Z?7S&3IA?Omxz(Y?=| zq3`2o#Tyk$sJSbtRN?#PvqS)tA0qV51C@xyCFuCRaq*WW)zm_xD)gvEY9Fpo+vv=z zWulL7vc45G=?@P)9cSXFnQfwD33Kl~=l|$1UkPyy_Z*uk{(HR;3GAZptzP17O(ib1 z62Gnz80uNH{WYaD-`uVHWv+)-S#kFU$q{i7B->pL2LE8O^8|`J!XEoH{T%0^TD+v+ z>TEZ(KFRvH=P~L(n9Fi)uaMUTvc~Zg$`$4#=d*+)gt5o)tOohTc3Rz@@sI{Iecphu zW_jSfJ(=-)ePY~Kw-)U2fiXvw6kc85A2tH16z<9PWZqcI^G_dH?7cyv7XSs(EG9QO z`-LWBWI$ui|4)-XkVO>zvhYv()T6DlFGPN+w~9)rR>l8hpZ@T|3-Z7S_c>R%f8Ovr zw2$97HC{aHv&C)Z3m=U8$^cjM{xnXX){IvCuRBX!E<-7oo>^X|5kSPvUHJ`YsfEL> zG_)8^Xf7oI9_EBE9qe5NBFTr8nkE4Rf>;T-e3cvkI8gIQYK6@xOS_M*?)JrLQQq&p zNarTw16l!>Fim2khG|4Wjt-*(dH z(kO236bGHlbV*8muM#f?n)%WGICR28hC;jvui9_ZS!fwzaK7`EH))YnUu180F%P%W z0DbpSC9PObUIz|KbU}(5m8$u_!>*`*nMIe`Og9!X+;oPTD6N9|9%JI;?Q{j)>Wjf9 zPfpp-HOE&r+-K2e^^=l)+_uROGI1bx>50j`RJ7^j&)N^cCNZ@1wXnleFD1^K$6xp# z;ijZS0JUdmFo1gJ*MzdpG27!>X^8(F7O409`NMBv?{BS{f24RjPal;squt50OMH*K zKm%YgJlOZy^WO~LXp+uQIB)lE4RY#z*rfD~3e;{=WIpQiX>H?j;f_SZX|ClNL)m7} zLR86_(6MacwNHXShS&Bv2*PADc9f{X8G%s-iWPUZI&bDb@p!5MCGC&XuWtwBitOHT zUo8#_OLMKeg(z6jAH+kWve)l4AVeQ%%B>s}GE*o8?b-b~Z52)xxajD;L0;{yohpF2 zu21Mw#}y+kfT}C5bG%(Vb|)R&LosOy=Y|q_yVDeOjgil_=E~{yKRsTitGP*mvMtgg zRwq7K*p>P@OCPTO0~FyVEoFB;rtQsY@feC<{CxV#dJQsN*W9!9?OV#b6c6gJcIp4#)gzN#g z`QdE@uJ%Cbnlmo~v^S1xcvGiY4kyrJ8sax^bpR>V$PM0VVBg*I$HLQp)!8Wo;D_VQ zJbs?!{ophv3aF0?)lvKC@7szMUF(BS1s4WBF9-wC+umk^fIb8>1{wkD1Y_rb1rE2@ z-2-Q=yk1xv#^+FV1ZwYme%b7D|9b&Ma&~mGVUszdB2u$uP+nDg00T zwMuT5uD8<5DId?)2{w}VTRC;$b3^(})@YB$d?Oy+r=MLglNnyGv}>1qbWhML6cLpG z)|Omd#d-Sv+rT%1$nRldcOOeJ z<$g3AYZoW5-Ty1t-xt%&xmI_#jrvvo^=;=D{I3M?CO@ohik!Dz#YhMW#Yo^fx?f0i zU#eQ09bP8+-T9WWaM7j^{DZd^SnT9RCW)oDx?0M*&r9gqgcf^VYqjYh{h%9583{Sp zTd<#sK7P~7B5tbJpLCYqd~2&v53*x@UQiu<3wabV*%q%8IH63K!Tu=ui-@EcV#kTR zu8>LX%2V|7bxa#O_NXnhh*@TX9R(WbnoSQ>3|f@8OEO(Y!^y$XXpe@CaXf^y{Xl$5 zr?_^)1HD=rdK^6#aSfdj$=5q_wC9?e`>oE%EKWio< zj(~84S9;bdvV*yrp%_LuIFLV{=YO*kfEgH;gQ z1;nYP(9Nw7m}|O!dTa~*Jgu^-dqA9Op~8k_xJ$)jRv_ zE!=(uv3K;<)_-t_Ul%J5?Bs!u&RlHLuU;`LA&FBfZ`2_Ll2_=|Bjweo2`T%^>Xn zn5Mf9ub%dMEV?iruN!Zvw~9-=fC!4p3*O&_-*Rjf80r3Le$v0p^Wa-#o&5gr>956# zg7x)}4ZPPy)w@1k(>!=4v^8E8lJinGo+xpx~%gX{Cb0PMQ;ioU1`p%5T^)$=)AV?b(fD`%|spocpgKks+7ho7>%$ar8@zm zNa?x}EH%GkG)r%rrQmgwa$8_Dl6hzbSwnrnOO@2XY~4>F=J5Ja(D@*5OqcNILPto5 z9rm-nQm>-a3%2MUb5?6^8iR$K0oqo^E{#6sP`6?pI#fq9fLSt zM;jvm-_CHBhv^knqbV;<7vpIzDDpN2}GYs?dql z9qmEQBh%eX*v3}cN%uN2=QP*vlhm4}?ZY{3E_w%2bj^V8jWy$w=KyM)QD+onMsODq zGTmoZYV|sj?oRW|u(Yn(Ak9nXXzn@~%`AVSUWUec2%UT?VTeg1L%oUOgSuju%)NH%Kd5gTj%2d9rVSFDP!$!Mus)iUa$opwkGhmSv9#sdNp!-D1)77uLz1QHXq+sej6a ztD-2zhoNElZC|ez*Zd01LD62RObRED6GyVP6v<{H-#G)B3+v4DMI&!mt}zraNXx8! z|Jsq_;dSrFDXrpiYD@JGf-i5*<@K3N3gb(LY_nS2j0)7c{;ktJ*Qgw56ICKM?1_wP z$nx_FnNab&)8~8`5s2x|Rwpb42qMM&T?o|DVuY+aIU}RGWH@uDNb~DvNA&77a|7K+ z$dr&fh3Q^GlmwhPKlh@L^}-^aYv8z5%k+nt_Z_CS+}1A7x>c#fA2lTwU2log;~y7R zN3R&(9ue*&@vn*eA8T&f_1^un+2RvaJJoS;_oHW^8fUie;k{MIGrN`O?+d^v9&9Xw z8*m%r#Lr)IeWdoBH%NMZdMeT3o`>dktXLJJNrk}!!qa78?#jpV4 zBCo+v0?^l6k=@WQQ?Lg?58jVBJ1iwKWNDGKob<%T-wDFwU)A#)YF^itEqEa%4_bHC zS-9D-Ldvo@YJd6!B7 zB>~}!-N%M>dHueCWFP!T%v0yT0na?%{ls>&O;V~8hU>hSbH(QBoiRNka!fMmG$0fY zas5>@y$@`G?&-}@zHs_Vm!g*@Uo(yBcjYfv;P^d@iapFc!-*3zI>`FRAz8k%b2QWr z69xEVndi8L^#h5cOF{7<7A<-W`y}6yyDt?sUR6*mjq(Yq89A}=cI_vfsuL*GSFH&j zDn3#PH=S=H;zEnGQ;*e&iWn7C+y?7bs>2Izy(=WIq zoNvPR@_fP0uSIMzpXoY%b)m5v<8y(-Cww;%$@T2b1dX6lZ}ZXl%F}l^?z?=Aq~IW7 z9ItsC_l~uj{igmudQ4{w?5l+)7}gq@_clf2g~Ak)`~GD|ej`g4u)hu)e^9P>{hn`l z8*&&u8`%m&S?1Ne3d`_yCCa4T>9KWYEhB<7sN}Lf&wXh&2N|TlXR3yo(<>GjoQ*x* zwDcUbtWws(_JjxBtd;?4H9*hs%LkbW_J?>|_-nHtX-x>|nqbu@n5O_Xh8fa9;1(d@ z(I9t#)BU8;hr|g(61BADaPQ1ebk9m{`*r)Bpq2XImq7;g@}lmN`mB`s;icRdK&+#d zjLa(A2NvU4o}W&3$V1A8T#x>GeA$?MW|kwegd7NtmMI9mRtD_oFvgLV|E6Z_(2ts~ zliXkMZSczQ*ia{4+=)+R#(8A*&u%%WH(e!80w0t%XZEOEpd?)?q9OSRcZ~eLPdZ=$8Tq!&Rrfi< z_UG-(6?e! zL?F>s9jpWaF{x~Mjk`x)s)9)KB@I|e8GuFekiqIv7QJKM^&V!_Du1gqGAbwgarD2 z;?PHP_|4u$C}!DtEI|K40@mZZBWtvs{=3@#>q`%?GIN?!NeEe-m@$D4wIHXj>3p`AW zl2?;9eE+rxHdPjGa#Z#y3>2vh?I$swyEu}HC~0?nND z+Y?3mU!$+_Yru=r$|qNhposCOcKJ0BLU|UgJYJmSQXhk`kzH<5nLLLzjeR6Rl!TVr zCt%r2Ka%!%$TuV3DA)kDNJj)o|_##b=wAj`e%c>A4K7A;I&uiPV-WZ3xYBP^m4O!h)ft9HKVYyU- z5w0-}J$s#TwuJxotf}ceqH#`rX`N@Y{Uh=YxkK~k`A|Obte-@=Q4XN3dl#{%^0GHh z>Ls~3c`g5#E znaNi*HE(8bRgftjrEsUH1Rk>JzhlD4*JY20Df3^qeYK`xQ$La@znsIyNJ~V4Ku+o2 zB=#lk=a0+426mFrB-({#ixA{m%e0YbETYEbW`%@ zo%y*KXPn9*F%r^uWSZ=EcX#v?Bse=aCKAFUPED=Y9-Gh;URV1plVGwgwJ4sbGK8s5 z;_0mOje#gEN`5{2E!DBrCG!I9|7QVMldpEI4=Cenqh#np9V~Gp#rZ&xX%2&W=I$2! zz&0N7J1R&MBMKR(FT8kBqQ0=7DF+o3Bt|{-T8pWygXM-a)*|jnN@q|-6zjlcO*C{4 z14Y`0>4N7jeE7#{8^Eqnn-D4gQE!+H%<$c-= zg5eZ?2&)&)aH29OguUt&(9-?esH=PC+s`5jgNF8$$&K*yzFLJCb0@r(4l|=uvXT-~ zySnmoA(^Y7r|p}H_X)*6&%8n1*Y8vw+jl)3gtq7Sj~t-5J`3IZ6UFsh7-U-0tfQRq zLuPn<4YCubCzls^IsahICPET5^9|>RoFt;oFZDqR7wROnb-Z~?iE{1nvCJpo!)+lU zwyu65&E;PuTo3QY!&7%|`gw08 zC3tl->r6y)m@^mq;AB@9$}G@0SI2fH<28g%NON{*89OfQ!;8)TI%T{k zJkBd41RWl6Q|(%Vr+;JRP1$&z-mLYz;EqhVfsnOLRxCe_tu&X zY`_QS;97#ze1?s+-ZeCm)#M8OM590ux)CA0y621uk37C_TGb!@z|qMsV>tHl*gd3L z=9JtLT33D=Jrm#8?`k_{=H0I+E$Q&L1UQw(KO97E8qpCcu0%}mo$4>FzswqjH}Q+d zzABicFiS!W28b)dT?(FQ+U! zZDTtD=oTndpzgOLO<#!q8X6dn+9MnDryHo-|j6lkhH+ zYl@l9EyJhJpsXZZ!A=#Ca7TNpARV;&0V!L&b+hhB=4D{G!SY2oUG3a^8GN>Wbl$I? z6SWL|bae(4+o}Y1Q{6%e3T6ILf zX!jVy&q8FZCt=b!jrKO;*E+`-7N9at;((iT&RO1G#S~dLge={AT+95kXN6pwZGilBah&N@f z4og5c?ikP@Q|s3LgoH|cl#$Y>)|Tpf#gjii%htv{(xf7uw7-Fv&Db;yJ1Ul~ZSPZw z?vnm$8Oz06Fm1e2d^!N)zW_7bL#&ceT-T-pu2^wX12T^f zKdV_fYpt2(67hO=W&Q|Xt$$`WBAJt&jTT>TfUFnt$bd@WT&CG~Zl6IBkObp4(#p5E z=#L}1$`9d&BN0(N&@$~~SY2>7QEyP^$Tl=%pi;%P+VMFy)vDtn5=!?g zZBg$$(<2+46IZLzY+YMtR~s&;cE7abRiUGbT8BaUW2xo{C3xY)w4V-%A+5F$knJI3 z?abUw{;fsd;fyOE> zLqmH1J9PYLj`ST~hz?h`9jC}U%6unt`+&65qI%$Qdt$gGq?Q>8B+id!3-S@Lb;%QYV5ebMWfB#)_ zUEuDU;zW{wWB6v!7@&Ap16?5mQ@Sgf&2Dq9Y7$d()1lPD5m6L5_+{|iEMY}&44F9G zc;EoS>&Z5HLpe7YHiV zyt5?&=2BO`3ehO<%inOm~K$0KYxB8K>_CfLeb(ir6IQRSt@ zwxtl#%;Eyu>eJ+7-4%NXD+}Z{_JYdy;B0r8x9v8AI-T=@ZJz zO_Y|DyC`W0B2!&qipX_Aw=*oIn=Th{I&{@H+nO2#i$;ovD))>%-nQcVIT(&Rx~h=j zswLx1cwXYa>S#s9qa%*r5%am(Kks^ltOm7|d;}KsCd+`<7Z`^!oTCHUfl!2=c#say zE(@^KcTTfW@<&H=c&;k~MNH>gI55n6=i=QnrYrgHGt%_AL*4g9ov5TTOT%8@z$@s_GstJXbKKq$`EFxj>w+Rb<2W!y;eyYQFR9be%&zD3uX!zQe-^5;`5 z&SJ;bETjOr?FTh+k?UcG=nF3b8Gwf4topMq5vp4TAj|3Ek#upCq1K2ayH%2FjU~?6cIlBno zsM6}K`4ylXPnkBG?(nFHv0Q?(GA2*bFcS8T&`tz!sKTXhp-T|J{X{Mi#3#uXJ+wWj zDekes_7f+PXi1}ap5(peC1w>TQ!i(z;qqYD?*RSTjR0uFtF%&T8*zme2+i^D>!7bq z&3Rz@Fs$C-{NDLQO+Np_oM|8VdJe#D`>1Dp({LlN73W{`*$uDBMK#i zdy1uXoX+3@%}Wr;2C|D{iKBU%06tiB?MKYqaE}?3qus;sYdb=YFZz`Z zjr3kG(k@BpN+*sguej_Qt70go6er3BMn?B6%Wf&+WP(Fnk-%!$oPD1|vY)hP&69TW^8Nn7E`kzQ=^mqM)}<}pHPE4a`$!PSRzz!K)7#;Xe_ z!q+X`?1##yjsJ=NYB7_^FV`P7A(*kl^8AKY-+iRYKH$_8i2M2_lEspakI-1pq|WmB ztb6K?IC6qHn70XQcQu?o`u-ua9;Lo&;hR`?b|@{_9WCyR#?DVTXGH&wM#oTQ!vb9) zJN^Yup8iMF=#mhNHn2-d_v%qm*1y@(8Kl?z(e2E?9i#JW{#%+a}H1`*W`=R1|2X zUgvFh1wAa%W$0l@#nP_kkIVj(&Lv$HZ~t-q@7Ob`P4NX1zc6I8PM5T&x>~sZW-qJB z>kWu*I%eVHtL|#|h;}EVk`)xe7TdF+HSZQOK7XlX1Ok^xpl0#D>Heb~tIh8*-}bGk zDxDQDk{l^!~Sj9*R-?&Djck9emwAjB!43e~zu1UGO z{be!--nYLEdJ5thlN3fHGz-F({Q~as(keGnw3R283}1U%OOPy4hZM~mjFK5D%pk6y z=B|@jWMA|V3b;EI^tAX3fk{|%*u^=0x+XA}aiv4Mw5`m9@g}fb-;SDbs;^3%{16zX zQ`u+nZ%lN`jYUoj%GWn0T$G?3|-=ZV1YcC`&@^mxm)eiQj>)Y z-hjid}Ylxe-{{&{j5o`^(7rmO2?4AGHDM! z<+cPBs$@!Q-+ZiGSRn^_Zin2xJsmmra8F`Yjar$NEoc~R^gWF3nR%;Fr_}DZ(p$Ck zfq59l%W=`ME(akjMIvgCE9xG1y34i* zd99*)tDbk3|8jPJY@?-{W;xQm2Mg7ly`a`@mDTE@1E242x(WrdJ`5ilO|6nm77sXg zO)1db1nT;D8ljoTGrqiFFu%FG=Xr7tFMs&>9+xmS)aZvd1{WykQ_yZdqOBhQ$Ny}{Yp&s-$s?bJXWZbqHGP2!tpVex|#5T_@Zu<{4#gdX1Oj--r zH8F^HO*lFDdwZB&D47}5npdLa1J9pIlJL386mC- zG*U_rcsq9dU&G<2E=Y6C0D60s_dn_f)KeX0Z8EM_nf9P(%fvg2`A8actsgZU5q3K- zLjHB=g~Me1B1o1hRP3B$4FlP)rTagh&Z&DpCbm`SV#d;BYS|3&Fofe8cO}yH3j7NUgD_)|8nO0abT6}v$Ub7}$>Q+HZOB6PF0;=g_m#7%( zJ#-}DQvdKmwc0)oIW}R6#L>`a?-8^6tE~!stI`+$X|>4dMD}&^|8$#mTKhWz{C`?g z!WvFih>Q3t=X@D_p4YHmE(_n5B|wHq?wm0>cd%Mu{i^@iMvQWer}@G3TiKpR0=a9V z*V4mu%x9e5?naaz&b`fBlX<9zv(tavy8o-U3~%HCQ=}oCZ%IT9EEDv)@G+&B!4lXGpz-PASk@DrRh_3@q?6!OX?rp40xkwNz?I$OH$iTQ=xnjfSH;!`{9 z?n77~pRxXEFPF@OXSRruOGYo$&j%(9*k6O3nmPz6m#(G!`&-C zlL5qI;NR*D^pWN(gCCFZU*0%C!@YjD0p)!Yx(piN4O)mpzldZ9d)1(rnilBfNyFF%-A6*nZaP-H8j-!%H7Zc$bm3|F)I??#x8f+cYA>Onfj&<`muW2N-BOG3QTDfN3OcFja!X;KW*v937RRB|>z=FG zr?&H-fs)Au z!Q|;DNf6rz;lieFXE#(PKJ8^q>hk#ST8O$C=5+sa&}P714{M=?KTF`Qf@53nv z?pp{;iP@LLOV(_6yow`o*W%EPZ5uYe&Fmt=x}l|AJCdN!C}pP=RUG{X-F8JR3tt{X zY%O1_>8&rC=%&tDXJUq2HBd#nQXTl9UJ)7dfDDABa*VP@DOhR3qxVaKAkBj#GC|}+ z+Q(%hMf^`DXipUDX*rGJ7`x2@d7<&nFLJP}qZ%sZ86v$>?gfWIHr}``<<7sED#Z#6 z@3Mz0wthku!QaBb&R;`dg~t+WH?;%6!6e%zEuWf*!&{sIJS<+?bB>!!HP2uw1)}}! z(Q$lak=%zNiMD8tWp$W`OOSXl_W@O zvd0MPf%p4Da`uN=#{|--rA4es3MW?z#T*t}F~DlcAV4>khsJpWXGD zQXX_-ck7V$!ay{uxXNi;kNdAFxNMC#W`{u~G^vDYE!_T;(rSIzl16&yxTjRL)Eb50 z)X+OOEQLmvj6&i&`pD~vYDY&~V#L)zoDx3%?&G~Cj9i{ zn!88eQ$$IYjYSN_NB$7&gM#qY@+@D8gYLJs4T+qXBUFQ*q~B%0YDo^h3L;(wcV)(SgiRbIw>xSQNzCLF^ z9)46?15CIm+LmhYZ49w1i9#=RA2u@0IXw=QAY_L^PhQ*Je4<%`x_bsIHG!KglDk)&51UuHP7QZrp=3OPZyBqmaGkN`gNiRarj@qpS& zy+Fs;4R_+5nYkCP*u8^jM0|z6{v;{f_XzU%(6B)daa+oEp}Ouu7 zE|wptsI;Y?*B);0-rWN$fUp4?riY^bj|q4AizLr=hlJmUgVoepU+l9Vp22U=iIl5fhOd))$d5XtT9=ilmE zS1jP@9#b9ASAtJe!}n)sv-GD$$h2qBl_6~TD5YTgHfv<7zE0_=n@tS9k=pKhX(-f`^9Mhs8GGaAQ#QB}J6%X}h(kPblw=#q zMdo^Etu`dDhq{liay%kz%Q!VoM0D-b)+(B^H<^>POFv1;>}<}&8lg)}rjWgRO-)dP zYI*k`LAU=(e|h!2HC-a&rlC5fT!rS=Nl)uie5K~;JX0_k?QeMY(c@gw(D8bXK0BK} zR_Rx&d-TuYOIBV1fcX(!kL9`qHCF_#w3H6JO>pq?Zq3SlO2ZGC zn4uDk)7uLX&+o6KZ-^qjTCTbe;&7Ng53|gLD{S;X9Un(3DqOQu!{ zh%Z`3l?rOZR(*q92@hOwh^q^^9p0=a9Ap2NTTD!nG0;5xj_Mh|fx6GZ2T`D!#KW@y zFD&B+r!TI(eF`%vG8UL^m7W2IwwsQpD-|Q$#C$B~w_DV~aib3U_QyeL`U+Ma*qg4=(L(b|sjz(BrjDQ3cypn`VF0nkMM%&D>+9 zyZk)Yol$SH#2<(FCr<3z-d6S}g;|V0X^al4yXyk8=zYr!VxK<@#xxx@a{3(fc!xJV zK7~N#yG$+)|FNt{nc_WY?lxe3j5dvWjs$G)FhG*Le4=mtn?{)uCd^$^+5c4Ae5DsP z{+;llw%;>|b6TR_&ykIwN-$GYK)Lycih7&ff(V%LXG_Y_%9}W$uz>vP*)3$dY3wp-D&90#6%hVgIP5dZ^O7 z?Qa0psjvS(29h%{ZmAQQmjVi6K>XJ=4Nu9hnp_di_51J5SL1(l{;}Txwbeywg=3s# zxWaT0{W9z3-4{GNsuAVV|33?$L|BpiEx#n&npOAZw)z#AQQI@6On%qWs#1AqBOM}g zRo;*)5TW(9*ugh^=fgu?h>5AzN|W$b2zh+zIzxplbiuZ#ELNar$U`j6C?}nj_5v1U zN{MWzAjI)BdcJBc`RiL*s6KgAlVcH43X9iN0NZ*gah|2A$E&ewK69VUvW|lp`ickS zCkQ4-<22ycyj0kXpjO}9UiWc}pcYAO0biC&ZAqgX#7rj+01bSFwW!Md&DCEx+z0)s zX5EqY!uykmJhGj7C@5*A9acSUJr^6R`}d_bp?-h-uhK%UR{^)~7GSWa2oa z>|K8Y*L(LuRJ!62>A9^UvKHS9WTkQD?+|sjiUqL6tv9tNoD0Z;K>vYhM}}R#mbXl_ zr1%8vf6YAJsa7)=NgOvdyJ; zHNIKZYDihI-NW5=AMV$zG|f!^D7ZxeR&hC24ePQ2)H>%9bg4T1WEGhi61Jg`tMUWI z_DxHCkwK<`H(_x=1(bcWqmNafDTe^-77kvUtJ<_KyqPJ861sZMG1Hb>0k=!XL?udQ z$0G*Or3;3(@{s2TwYsSt;Gle^agWQ|^Qvwk4Y%-?i7Q!nyK1UDGhUIkybp>G4mqOK z{QXxxFy zjl`S-z4w;0SuKc;CP78lc=}lHoX6Tj@-ILWh!K)ztrG4RJd-D>2S@_AVt+Z}nxi=Z zAuP{urd#ua#?r2@`GuK=*ORTHGz*X0f;9T!UuX4r0{P|aF^TB$6h(?Upojc{fi^~^(dR?$rQ_zPTQhtdi zG|fc~y0E>>%fBqv>g4_bh>gTAZOQhmh=nh!uC`GG{+7buGsQuxQAEPD)dl&qkbb^p zzR=TtdC zS~6K%Pu>#^j1e4&SQ!c*ZtL%~5fk=(L4@DSmoz_kWum9PYfIs;V7`Ah=#l)V+Bd=9 z2X?Btft4KM-QwedcN1fhPnDd%C(uKUcOdG^IvwXP?J@W~;5+N`=*>S2Ve!(?Uyt#x zo*6T~@tmNon!-Q1CMVMMXP%^n_4l1~^%_pwy2tFEOYu!+H4M&*X@0Nyd?!%TCByoS z!?>-IUc5-~UuF}w#~`5&=)HQEOjo?pEAyoD#U%*CzuwJ_){;qG-2Fm|#ubXEFR zHM#29X%l&zE)rJgs%GGRpNkpe@6ukC4GMR!@tV2&f_HsaFkeV-RRUZpT|lmpz$~$} z&-nNWLgDU?##~_&4-Bs-AJ2rh1*s)K6f&yRK@BI{bYQ)(-&>X5TH2_|`kmk$xqtpP zr1V0z#jngKZfU?kTeI2AkA-eTF7ZfJ1l+E{3IlCKD{hzaeU0POw!n|SQy-lsO-cx- zYr)SV8kR@h{d^*e89=PN(a7tc)nR0kJee>EP-;?2Gso7|BCrAfHO?C4z9yZ66l-?* zKrw_=04J@cw@_S1ngiivmbnU7jckDF=R2Cu<2Qwx7i-w-pZZ%0KHs{WKwZ9pFB_Jc zk0xp70Md`00Zefb+%ak|`}df4!CdGP?QuVX@#dNQk=3@{tY^{&Ja{q$z10Y3milJo zh^qhacGOsxCn|(1(#+Iwj^t&_uoSQ{u+Nf_J3oc1F<9K3nE$%>yyn8z0G#=tVcoM) znAdA6!55U#_V+iPn%XV$pl_?f?*%ANwtW*HysudMkAL!xCUcNFf>X6%>Se&+IcW-= zT~Q6=)muM69#7Zdy4i`69WNLeCqaa!bUCT<2iMbE3yTN#-i&yryL)W{;J9kV^$Nwm z!{_cF7%lUI>L;vnOcIYkwdEAZ%l%KAH1Kb)ZX}2z-oW6(z3zaOuXP`3cp4PR`?F z)_KjHyW0z8Hb)eYj|QU_dmukpWAcl?>;w^Y8vYK>(?PLlMB1I z+O#(-pzHcnUspK@I)oBC@2WRxARpZ6nq7X1p!Kk-Cd&QBBUz=Rbs55lliJ}({Pl{9 ziBR-2Wz$Z94x!E8=iJvoZajg_v1GtSqO*XGxZxNu-n3Jie$i(LpznEfSJNiK(rI1y zUGj74HbV7yd35|68k%g1krquZFjFpo0*`%?OW1ka8}o%B$ub#&3b-}};K0g{%5Z7- zynMIJh0=z|opL=zQjQP$OZwJ^a7TiU+h8`dOv0u#bz!f7gtEa$X-Ie!G)4C#7cElT|q9^Pbq(HgsKX8&~(`(DCywReQ zwyQ;qk=x1QR)RJH&ArGZD!W=q9q4(XhcsZ1<0}j=Ctc~5HEK(gx)u!VsGPhP*o-e0 zZAOMWtr@vpZ=al1%XP5EtVMatDj_XDZ3qLbd=py_?NK`%fO{nyaom!k**?$>vQ9A; z@d%ZVv}oxK^<5bIq@A1(ulv!5hJUpR3=$_t68f-|akVKkHNv(JNxL0OX)Y8IIG#e* z5fuY56X9VIO-q@`YpKLbqJFsTv<;u$)Jh|GV1@X7&(CIPsMqb{qf$D6Z-pHwv$(gj zSC}dKnvTp8 zvhDBhuGp@gyQI-eEJzNNnsOJon>c`M1GuX<&*n6o2u3F$g3vpi&AUeWT!lP zW7VEBUkX}b0)W?_GQwy;Y#?*d{lmgz)n_!Mo?*D6ySf##vNhsl%v6Y-C}J+{m0VNf zY8;NBK1F$~^u*vtHj$51ChkgAlgQZIFWw2O3v?=zU}>I#IpP(TT(83v^v6dB%mR*ZIOU=-_(9 zY7V(L)Ijs?%*J@HY(^u!X%i7P*3Z+^{H0-LEvGMSD&m2`*M1cXUVlF9;xA8)t|O4! z(L(E%U%{Xik1fLe%A%lTth*7^-Brl?N}eFB>;yPo>r|4@j$SGNT6_C4{W5)YHV@bE zPQvcB>lEnRxVj4dgREFNLA;Hg9LZX2p~Q{U=>qg^#nSRl5Q#6G_D4hAO96_H|nbM7pIT> z1h_apyHZ2~03VLO@^ug|N%kp$Ut~;Q>&EYtgxryS*9s1Q_nVjlc;H(c7WEI_eqF`L z@hR#F6^8vKllW2hT)1$3ay-SLiT~8p>aT5kggvV&yam&wO$+p`JD3&xwbRJh)1GeH ziC#bsJ63I9nTlOV*}~4zw_A-v@mnb%PmTG2rTuIu>LwHktL!)|S5#!j8<=l1*GSPV zxZMrGm>kd?)D#4mk&$P!?X?^S-SaMP!Gya+mK9p?1(yY#v%S;Gej7kiV34dt9D zCS*PtN4C6fKjmd_7n;yqY~}L&REr2a35d4ki-nj zIM$5*LQ=bN-|b)h?!Ocgw3ZVXoX!%gmtI@msL5;sH4Y&{t8t{{@HWm>k1iuVh?;RI zT)#&dnBsDin^I?-0|_gvop)3W>UH?wHi)UforxTGRBnD(0|lq1I(MRI+((*nIvBqQP&dr)$cQ+%dyD-{DE%pX3@58OJ#j*`aJB6KN`D-UT!NXvlEcFQ!6VJ?AtDI$Ku0pk#Rfo@({rw^7nul)3x znv+pt=C(T}dT05iz;yPap1Zr&%1(1lYUVdH%Mu4<5yv9>f*rMS1rP(~tbZj^x;=Ec zOJWB@k?mNp@p3aZR@x~UhzI;Wc{K=6wKE)g8PD0|1|a)7S{kz_yhymXYxb-<^ABA)7xAhVq*jZ@9~S)W zH|$FEfV`9b1(Z1OpTJ6Mwr!WV<>evV4ZHQP>g^bMG&HN{>}$z*jQjDy~t?gHDQHQonZo6x|xdsC>YH*0^y5%ScNV^shMPa$t)O9E61p|)(lJ)IA z!_g&16hlRs*#U%1Z*#;1C-ymaF+A+qfG%Zs7Ot=p$4f)?5)RJD>P#abOT~^RMqs^! z!}U=;EAVb}fi^nhsU6nk=QnP|R7mzxd2E%kpk}g7;qvQLp{T>dklR1w+zzF7nGsLH zDYP`K&`a+;pI>$#Dq}!DQU&5W?!c_o zM|_ncR@gHe(}?m>sE`~^n|mfOpHy3QF(SRUUchb39wo1R3(I)oxTJ|fgr>`dk!xzr z_d}ObDm=XgT(`iiaL0p{@zNi^nwde=P%-+vW}oYoP_P!^5>4{AScdN*$iTsh&lI^s)Vu7Ge|F<<)Vd=f{q8%Z;xA`dWDM9!)(4RVV6kOJ>K)_8x9s*|I6Z_c&6!=FoaF$gMvD(p^W^IEi%cLEIqM zb=o6S8VD`{3gxVRQ!|8B9d@~za{(qNMv$4%>Kq$yDMl=&M|;;!l}z9~#@Vn}BZO!@ zRy@_+^06jLj$o|Phw`|Zpj2<{W9w%$s!8x=R}nSsTGuO}bE=N1k+)Z+BO2|g8$q}$ zFQneSIU6jJ{N}x-TP3nn5~+pMk*56h*%iFeS2^(;ZXFok@d7$<4<;s7c2kIN6w89JU%UjrcjZVIN)<6jGW--fxH$?^D?7#z99x%c~}X8D-ii!l_0&3<5zj{LY;x>Bn_S*c%dYkR5KyT&gx2?J z8mQ8`gYSRy*W>(OAtjKWCe<@^Ep3(y3mcn%d{5>ps^$zmWe%~>wnAP1k6LNhh%_f> z9HSii(UAUj!;-+vFGu;b(9@HLZ-0ILR5xKza&V}V=gcam=*=(LeM1O8$ZuHjR4HEQ zu^0&O56gTKx}t|OnN{C@J{Z=9+v7IdW}DS~XgmdZAW#OZv1U*|4+({8nV_Z;J~v2D zIZ^1#QOssD^cj^W=xfD58{Br8)Z(zK%ayM%OBi=>dMA$5@;4^etrN0vzZ)h?$YO0= zK}h(F+=LZL`UbXBV|jg^lwoB>W!PO;-m++J?^>zO-U-F4h&o$${GBVeMSMXP&^a3j zxWsjm)f%m3d{dapTBG$Vpq}h;;|sv~0#aj8gIi<1mQGXRDngf4kKU825MXk!HjV#LJweT^(bGRz+Tjd>g-dUB)YK=KK~}QwiV%xdp22mi1DM;L%juiSbpy*j)>1ELKUo3zv#YLFS_9+99sr%f6Q-+z zj5o~tg@5s8CsEw%W^hDcMR`=v@ytHoimuxw1|cYg8ne;sN?rair`2IU$2%2uZ83ea ze)1RlIW4G0OvcN>f$<)Vl1z>o+_6Pm*~zfCg~6ns-o*ZUPHJ^&EjR22R3xh)$)^90 zW#Gsk^#mUe9Zp$TF}A`XMiaAXIg;uig%tTXGMaAY^PdR2{p)}c(jn}$X@+R&%ZsBzFv2%NT4FbZc?IzTIs~_7sTklO7o@+T-9w~Q zmT4C}=)BD3<)u^j34{7(H!eYf3AT!I^wj`?11kc5 z&POTaK&J=xLwI6d*qr{`)$~Di$yM{_6^2qAJGz8%;gv6(Dm^R>!6xoKH9A#r#pXO- zv$ZMEVwbVPW$3$E?%r*#CMjxJ(x#~7Cbo0e3ExqKKxp6SXy8ach;DRdR8}V1)@34< z^G|X~#N_BA_bzrvZU|f1UBoD_Q+}o|6X)3WC*Hea!Vpex&Pbh*rjk^)vMC$f2`Iwj zAc%`Fj;5OlH|OEfu_ePvOeOs6dUeL$q%DY~ zd+fJsH#ibdq}0bdVsX5$!m|Q+WAppP*lJJr_H!Q1ZKkJythDXN$rj=GLar3fIXGD7 ze$Nf_&-R$Sn%QXIQdeS~jjas)dyeqZv)c{9dyh6#s4bSNN}gA2IzMtQQRtdIMPShy z9wb7x9{4NuQPra(iT@3wPO(Q4cOg=j>N|9WUlKU4ymUOKU|eZA$F6KVNRq;8qqk8I z^BY5N?~;Jih+ZL!z9+tu*Eq1J z0;#^&;URgy?KjRG%&=M+ZC@@^1j%%C{8BbPB^NKln4C;#L5Wv|Q}?X(pYDQ=?&;46 zWf0bVB1vfP)}-Z?yffjHNQyKFfCzUg6Tvu7Mp@hh+$^Tq=3-Ynnh$?hZv{|edozQg z7o`Mkt`oe%G#I;OJ$l`@>{y2t5X1W4^KGpW0xoX1v|c;d>PWk~F(WQmD2|KP*og>| zOw{E%usOsaVsJ`;-j!KLAqo5JH0l=cz4c`eW3X1V$sTjj?p*e43d?w5%+-IwR7>2Y zl9cTz`{Vad!GCffv}h_BPef^%^I1agD-@dJ#Ruz-@?A1>9IT~^^vG%|1kvlRus3K_ zqh4jXr(q9qG5rZ->5kN(nQ!1fOgPQOd%o_!>Xt25bkxe^)DqU#L4;8pK z!bS9Fm=RcLgrbvGaJ~W0@G{qU{#hZRnY$MA1%3~-)^H#H23;67NtIw^ zxHwMv|4b=tLin>^&n=ciugyTl5KeTp691vf4(X=-SgNsi*C$R-UprUm;J%5lPKeA3 zh;n7MY6Z1|Phf(5UT-#p|A9owo}=4TSx0S5RpIsXBxowTck?Va$GaP0IteMu=-huv z3@5Iucr>&fH8AgWk<`23p=fNh^65>#$W#PvnJ&+DXK?AD4{rXFEd4zHY7~G9FQ+d9 z|9K1UoT}F5;xoplh);bp5+7*T7G25g&J~vQ`D{jC9(7)GC+B;-%US#xXP}@6XsvQ% z5ezjnT^-)K0rl3+IYSrH?duO39f1RSH&C=Zx5*8bgw~kT7K)-w!>bPBwZ_=Wk5PPC z;8ZNr!arvRQC>eG4!fz?sAo8fC?ccD6uPP@>JZdy?h2VjW^@$Sb5eYdN0>7+R1d|8 zzB^FQfD#*<{^>CC$o=&F@7|GT8RRM+M~OYkNxX|AujBdUV?c|KAkxTADwyEQ{NHS# zq@ap;nsx2}ya1;Bh8LmdRpi>FZYwr4;#1AP+E$1c;9p998AhhEz)wY+^L>NXFThf` z94FFx_buse9er>JwF^j9*16CqEhpZ$!eux;oc+QFJp5^ z`t`TpxyRbq76DknAi(d*vybisE09ONr@djBTuI1G1H$4%FgtSR(klPBdIEXn^F0GC zOGO!&ACTB)Z9^pw@F*VO9P-$O4eiJbgQ_Q!s3(vw?w!(<$xn4Q{btGNt}W%NfLb%g zm!RQLDfZl{5@cIO$1S@>1=U4wPEJ)ZLW4^w4G7a5>TbHF)W6a6shkN)KsLcavXSvJ z&OHb^1gch_!hIn?j=Y%b7g=tnmqOaorMzXbp`I~*esu;2V)^70a3o^eBui;)e!exf zzp*D`elaz{us95fROD=`@I1}_JP*hw5(TR5zaU{JuRM(jzcL}j2SfY7PJY$AYr$s& z9o)LHawY~jD9L>iUg+L?umg7;Cieif_vH104T2gTh8OeRnwVHC8aCUD>(JEGf(`L<5Y4m`qerMNeg=#eS`KJ1APR{Bv`Je2 z&(-X?QR$nwQC_4J#YO(#1f#(v;%yH&84|ap$o28bz*N`Tcf2d*$>_9fr497Zp|!q57z#n&z5G)yjF6ZRfTM z4$QW*bpPkDnuR+C$!JDn2b8s}Xr^ziN)lLMHu-pi$-NL@1}q13j`9>9l((uMv)115 zLhH+Tjnn1s8Q-1%zXx9~yTh9h$9V8-BNx!~U4Ni)kS*#ur3UG0{C2LZN8(+%X_g$L zzfM~Wd)-t)QR$}V>xSaIZ?}8UHIkYYM2v^hJ@Ihmm?@Gl4bUwc86|Bx+m&10{-UdY zw1vDAJ65hEkeYcGDUOOLJ!-eIq|PS`*-Z5swp_5-5;x{h?8Vq9Pc`HCM&cJo^kI_?1olOzwr}d~(xXi~ zfgkp@2n0@raD~jW<7|ZOMmIHXLw=cak$y%;*S|(e9Ku^dhX&Y21|cDN9i!JO1Ar6W zj$N@68LYwp%9KSOLq$ei75}Jz*0F22vIFSqM>?#peORM{rxtR|oGA|Sp?HZq3lD3J zsS-nIg`vLCg$q_aDbzUE+Lfp;5_R$TOZb!|YFE1S%x`Rd_HTs9Jv{CNvaOH_Z<=mHP||C-Xa|re> zkaIzrh7b%K!23$_tv%ZOwZB!wQo;G`78Q*yEIvilO{rQ?r>c7|VRkEncl~K(6ET|e zbATM3U#ow!oi}FuadQrYYY|?M&LSaEyKOs{d}r0rzG8McF6F5ABm;n*j=m>$P4FKC z`~$*Nt||UXt#HM_tG`O5m?ks(9WZh7B*-sFZ?smx&Ze^bpcsi1w>lbgom^IDS0(z+ zL8d^j%<+oiRtF(nsW`i`_@6kaUtmNx2~2J}I?Ml+ObSjy6qksVcyluBsZM1BsEFlT z)f3SD$S+hgqdGkj((F(fyu$`WdK_nOw|3M#jxOR5gr7cJgbplaJ0p+WNzaLfzKYxl z&$OIW|}FLcF3sp7k-G$m*BwQ0Bdmgi0srj!0cC9Ix6I#GX<>zr82v^&mJTx){aOiTI z)Cy7c{86JGA|C(clcrYZgf`P`Q1sByIFQ-tlUpSvskmn~Ftu13C$#%BW*L&$<>yD3 zZ`h#s9+i<`WtW&+u>|0R`5{$~8Q6d_4@IJt3?}ORHRFf$F z+W=jl@xSj@<337SwESh}$oErq%Db>9gVBr%R=_YPUeAt59w0C9C z7jc^e(ndTJ5f^3Yo+Xf{-2POuO>^)EEinD8&UG2`KXJ=ox{9YF2{!_*! zv(!n>lq4-$QSLCkhCs&x_{EJf6%`^qvfaZT4I1BYV^4Eu@HU?i>)lG3l041!6pE0v zcn;sSHEWS>>-B7Z%Tu*qPZ-Nhh8R?D~Yk~+NKr8!=_mU8m;ix=Ka0ra%Y>ue}7N7LmCk1tsy$7&#R#g zeg$B+)!T(exvY3K;#%}VJpDrA;az;O_{_>)VJgbSQRrF5xWz$qkv5WN?3Zp5OCpL} zb@M?_P{k%0Z>SW}oGZsPXvc0TYkw~rw+O-twV4l&8UMH5yMdx@oO-r=eb)1K7jc;+ z0B4Q|j+=JH%F_hws1a{hx29?lk*l7YouKRiKN>87S~>NrV7Nmd`1}p4TiQ5KNsV-e z(h7BAFgh{<7rZZ$->K5!VbvyT?XqDNE8)^1Zy0@PJSY5yHt5ps#KDR$si=yjZBpgbc}no2qHGnxb{m;k_HaA2~MelYRFSkby< zQRLke_gb@%iaqS_kYN$KRM4lD&IF{*dalLpAuJ$BWKcSl+VP+sPREPFZ4VXnO;W%i z`U@s=_zKy|V>-rC7%v#OY^k>6 z-h@WLs3J&@rllI1dQ13D9zoW}DH3TZio^JXCT2nR9n%Zw0hbtfBy&D?Yt(M(4YM@o z@S76P@4Ni)$=5AS&xOifxQU#z7fhaC8C+7(xtz+NvLM%+unZ!(O_l?4zA~0}T8Ovn z(es_0XuhGTnBd})n2DAq>baWm>|2lGBW*i`nI(PJ8}Adt*EsTa$c&fb_kBC!(j}uc z&R*Wp5zlhlqF0^2Y;|GAhFh5@Dt9}%Bu)pmdq$>!V21`;-mkV-ulgi66gYw&2o#s0 zc3{@~Hb6cFA-2v|d-?3ZEICSrykXo>4SH&%%zk~doJ+lAR!hZ{*-`g`3h;5iq>;jMQ@No0sZ#0(eRwO@h02An<)3sn6+E3MD)OI)TQ`g@KD&|! z4XEf2z1R79As{Gn&8ML6@xrSP{_}}l4qaEc<+vBlGDLx}8?S$wTaak7G|u7u6ARxs zwrDZRV;Rls_}r^>_dT~Su&VImDONJ;49j;sIytk_tN7h0GNhc=?nG@qx2tSgdr7i* zE}RDKa#zc_8I2y^FdA~_B2Zm}iSR&dh5M1~VZIx7VRa?-5H}LnRiSS>iyG#TW?qoR z1{(&vAqGshO8p9AxuJ&TXP~;!JT@xaaMGCq8PruYwq3 zDPQJIj1xo?Pm9`W`McTR&&{?GAFZNWd^ceC&*crgSs zG8piQ`QSA8ko926BEX}=QOvmOB_Z`yV4PL5!6S;qMM`q6)Fy7>7az8UU(^L@T+y%; zWI1I^5`P%eBo)y`agZwFg@#m&1{+@|JrkNqp_=83ss@o9wmg=~YNw1(BLPKX@EJHPz+&N-r%;h8 z^Lg*OwbaO=pCblID9NBF7eH#V4Y^4*6gMSiWdbm#UF-7;SoQhYjP1fN3N2D`hT3|^ z5j-))8D}gnc?^G-oP6=KN9}F)Db2@TqbnxQCCpGaP7jNU@(PKb`}e`piH=*US}w@! zdv_XB{#h71r@L0rK|0Ty`R9(9&@+t(@_LgGrN|}lSD*RsR?Q)_(r*ynF#qCTVP&2G zT_;Jx1IL({CkY+8lIu8o+qm92yV|vZe{(a#Og`r0Em7F1YKx7bu2-?7^3$UtwSC?= z{BsK667AFhyehVyd(`uc^^T`(-2Ha`$VJbsDsvGwi^2Pa>CZyu$glzL>lnkR-Tp_` zM)UI?{rQ2MaOLmbCBvV=a@x(Ll?7$~qJ;sg^HwI6CODU8*4VI*fe;}_gQ4(C&lV5a zJTZ5gRH}jb&rKERoe^%oD_&#va6Kr`ma_Lr8~4|uBEn-&+Jv=$iYmHwm)kT8gmnm3 zJsp=S?wFG-^D|DUE(?ef!PO9SkJHl|9c_3_$2_cd`BX%DmE>hnckHT-5OQ1zy5%k1 zvrjQ3iEo72qv{P4LK7>!(clip$nxfTx-*mGNwPuu)5XyKruqQ=G(GT{&bpLVqfnuCBO68Wd$-UDP@Oj=M7!sh?Z3Jj=+Rfgw01vnU@h9YHId?P zM&7X0XN?$B%i+27nu96}oi+C?Q?9%UDK6m8H%IF67!ohgDB*}VpPZgKu?j_I-Xj8xPB{OJi7ZP@@PP=#Ftwwu=?Hy zv#HC%sHjg(kyVHm`>8THqbxL%^5e|9ks@(4)Qd#ep+DLMAX9JIX&C_p9jTi)qfg&H zouAmT)BT_lG?!ou_nQWUgZXkmJNVFl_%?Qml2Rv*$XmIC#RkV4yAy+{&!8NxKbDRd zsQOp{KZ|__-wcXeJw==toVt72P^lB|3z&UyU6iZwSnLo!?AvE`CdS@$>X48DF%6N= zwaj*c8W4>iSqXYiNB!I&2NucIO(rGI80mA)f~FPRhEd%p`Hq*v4IVrl*#LN*UU_7; z-CxtVi&p!yx_vV8GbxZ!%ndsPyeuy_#I#>$lP=5tw)5~nJz0^x{#(0!Z(HbO5eJ4= zmLa=$i^MZjqOiXPMr7;9XGZ}B-64vM-~F#WZZJ_rvbqHZu^gKlQ1ym!U4vk(h35z1 za8<*S_=Ij)%8)mI2e;nvsiE1%B2!^KFVI@Ggk@G8)1q(GHgi8X#qQ6{G~0~u!-KiE2ju1;7y}XuIIWh?qFXicJBX@@o)Nx+aQ%r?XQ|{fHGH%*Q(%8A1N&>oZDE3WA zm>=`&xp3~7?|mkqvT4y4f7bo0RZ)C4SqxC+5M3`@z)cR10N<#d1lDqd=*u>(%xz?K?+SWmsX2FRJu?@Lr3w3PjktI9Wz)TweYc;HU( z38e-tfF|_#wOr^uIHha2iS2^Ly}DyMhzF>qv8k7K_xrWirFYIt6?Pg(bc52?@48^< zkK&y_(*&H(lQ~B-(NTFj#|bg@oTzQ){2slFd}3c1VQQ|FSgz#|u-HoF|()uwhp#;sWDd zeo9qEgKd7u5VS1&uo`PMsRx)c`%|a#B>8}H9gAw!cJFM@emrtSgOeT69R2B?=tK>ttOo5ByfZe&8qx$D~?=S0>t&3f%%DL zNXE4HcxR%)!}UK(r6ue@hZ=G&lMnyfFPHWe#@QiR0ksHy6RdpnnK#_BAl*5oQHKB4&3(NBLazk^%IVX=vt(93`cfPDn+CW#)n= z^@B|-CZwxeCTEK&x+7PM5IDoa8uRo5iu=gYU2YuqjHZv1Swz!BJw{ZUVJpk1&6aIE zv^4@wx*YcK-c8m_NTOaV>zHDwjTY8_{Q7bcIYy)ItK9p9>!^y6Lqby%?Q=q=QG;N9U_hHLPV3x6KXqP3M!Pw=u8ydGEA10q^FY z)ICWo^d*kDBy?4z_@{UxivIo_u3_@+8X4?w-8?%D z-~-N4?H$`B5LA#w)Bt~M>&QL-t+BX*A2Osto!6w zb}K|M8uE9zzFQk^kGQR5Vl$qd+9)rx$eu;lNTK2zxw4TRa=J|ByRuXBLoQ^g(+^k~Qf zb>l8Z$pO&-^t^q1B>zVqAoR!gg3dIFI!PdmBX+Ky2&cKqLO2;1gd=8Dk&8mxV4(hq z2(qdC$K5{yJJ+=_wuZ`-0@EE~K5N=U4MDD@zLq!shgVh8pLA4UtdQ=^8f41lr*7G( zhCa&pBK|&gV}&f0!mXa%DhH?HE>3FUC(Fn-hTJu7=b^#sy<5!fYA0T=SgwK}hIPs8 z|8GiAlcoF;qHToK6iX^=ild0tj&5{xy^2JIl8)Z+yTFumzQ6}TzFQzx8@^~O##`1V za`n?BYlNjvrQRB?bW+eOCQfTrxfn(73&)&!<0D!22eRjX>wXvg92^bdwNu=G$TusR7-ev9o2mwg}WO#rd7vK zMh}nu)_+-)D7T>XYKDOBt$7Lkj?Ee1^iA$E>}OJDu!b-q<%mPiIuPAJ*@?Ux(LT{V?t>Lf7V!_mY! z_ZK!-PCS?tC<^Q3&-wMN7Tyz^RDQ&AuxLV54YXY#@V2q{1$Y!*J$(||Y?p+Y{I2w2 zTmlSKt9DHl%gC|P64TP>0&>?rY4_}duM$V?p`(8)o~)4lL)*kD%XrQ7=;)cr)wh4* zk>|NMEiI#p_-|!WSAU}>LG89WJr?&eoLr)PoRVz_`8|0AI~XVPwc;U^_Zt4Wq~XIS znZZwMd$~=P{LjQm(&yw<$=tSv$auh8DIY4;@B<<^tZxrH;=Ek2)r^*!s(!Ew;(%+* zrIat&jnx9yb37r<*KkaB>ZG+kQm=e$kTsaX?TYz;u(&jgv~UNbUl9{syKZXZgY+5A z%Bv~g2+M5VLG6GjEF*2~|QZY<|n{5ctg zu5WPa3RN(z-|_Jyv575dP*uZKXl2>3P5e|Z<`V~cl(^9ElkcNPcPB3lNLBMsS-gEB z%(!2YDr#xB75lxBd#S$a0QdLzt=^j&RBp66OZz=v&~I_?5!yVaDKImKhRuAW=+Z7F zBpsrn+hiEbd$WHH(Kxm3?8n=psG3(5>(VxDcdMq4}Jw zmHFqusdPsr-m*Crh5(*_T21Y`3b>~Ek)JpmYX@7ClT6dF%v#qb!;PQ?pEwpt;Axms z&$~spyZy_bP9bwb$+q;@UWpl6ghFkp6owCk>m3?fu3uT#HeK-jYP=Iz!VxxIVZ#?6 z=tRJp2cRG>bUD`tqBBt);oA%|7!f+X5{b%K^(m+Z4V5PnNx}vawFd+FnLCXJb=+2r z9}#H;R|n)m*cq~F9#;`PK!zG=+Kr4Bj-FXk-R;%sOW3~_=ED-+J}0&daGaht`Y4{c z*tqZdfr=yCQI(B8&67ksos+AqJ(lCRs1LeyD`E9F zlOPgB=N0~49Y_XMObwZ4J`OM*nT1eoSVcR;GZnqWgNqRg-!0UD$tAUB|LC_XH`ytJ zRWFT-#@|BJ6T0B?uK<+-$;hwd&SHdG+i%)WwP^mT^0bjx(njN5oY zEZ2>M%Ko^%?34XF2VqWiU=b-?%eeXO;WOZ1Xxd!V0*v(%N>kj>iOZ2+wDbc;D7RV5 z#L!k`sA&ew|MLRyH1Km!(sd$?I4U__q;meuITCY z`@fB%O6uZ29wYWY`pF6G3dWzd$Um0u|^RSl!j=^8Z+JUROuA z+Er!Bibb6zb{LP7KLtzO`L{TosnZqqkygW=We2fz@m)K)6NYw%8ek3M=JAZ4Jm_xu zq1`y$XV*stHLgo_&w6Yy@M)lu>ony1($hy|K^9*oph3*3gjlcThNO*wNLb6Hld2sp zT4&2~BiG0`y7Kc7c!y`L?Y*7wH&rs8!4RY@wu(LuSh->XD zCi*#Q#rA9L*|3LO$fJAyzitgsX&Zm7)oZ-JMOGc~S}6V0xiGm9rqt~`#7W4LaYh}L zvK~&)?m(t9L;By4EAmlX!b;i`$3zIZ3J0UIi+`x8DdOi9i|n z3aPSROy*hOWOt$rL^dcWub?{9g@6H-L{@A(JM>+_i>^J$K6o}j+>FRr`V&FrQEY(T+D~zK2!YB5QPTby==ZofCF=+EGY%)20U&kYl@$>d0 zXVkjgNH-DLbGDn$Axkdm%*nuRlIDp@9WAEG?S;{t3!{8Of3GFbf{?iFhmp-S40j(x zaV62D+!}Vhs6=9ul= zOGtHJyEU*z_UZT?6J8ntlBqeisvh6p>*f-`Ooi?o-PeWrs<%I&esEZthv_eIV6qe` zC93JF2xf`7tvo8a<1n{7=n!A)cId*^c@$5>&QJ71yd&2uaN`+Nx_Ly;ILJqHt?MpS zA`2ANIIc0Z?pap;+ya$t!leZhylDSe-i292fcMKVvLlg|kD=}npk4ZXo|1O~-Lo-R z$&=bVn36Mnn>q9LC(_cfVy#m04_qLY+#61756SlIfYX^@J$cNy2Q0L}9VMB2ufey* zUaNOCT#?bVR!R?Pmiq64U6WJwvASy~J9sXATKwadG<-#kxPT}(LuWmHh?1Vz46%{w zqF=zTysu`+F)^!In<3-QT|^cAJpI@IHWthvvE_`kK{3$^RcMPjtDhyyuekdf!@4?q zu4%)>07YwOf0Qf{UtzyLR4wbz#HLFk*;U)Uvnl&N!%0xK`e^Zhj6nC4;w1nn>7^X#QP)G53+_p$x7(8!bry!4%6c<53CR?Jx_>ty^{PNfn${bwPM@*;J_7K%16tXLvHkX9=u7p8nF3{2B#|G1z zd*yazIm6!kjQ4Y%0dRv7{CmA; zz22%i$p^l{S#L|iiu@snKAF$04&P>?Prs8onLVqSVcWfYub+>%&gA*+N|e=LJwyBz z41H#=fxzp%E5FPfFO?oNT#l7iJmrlhXp6hY8(pgE(4D|1wlR!4Bt@G(X+PoPCUe0u zN_vKPEdpy(q z|NoWJ)d30RtRj*U$zhIlQBsaETbOfP$Q)+oEGZ&~N^%?(8O9L8=9t5rrP+u%&S{&| zoX`8cKfl}U`@cWj*xs-A>-l^lUhB>WUzQR#_na{ESg-0(`_xdImVb!gv$E>J*QW^ zF$9He>3jlWF|cR4@Y@%EhvZx)J7uISdm3}uY(v95AP5VECDK`zp0;BDW5G=IsuFZW z^|PCu-OA*W1Wi93$=0eHse2plXU-J_|C+ARkTzCAK_qhui3Z&s^{lEBmv}6AE+y++ z#XYMt)FNpmd&=avru8H;_)iy}g4cI#Vri^A$wUi}&yN(-iw_Zfp7JlXP}zGU3k}|C zm|F^WtPEyF7fRx~8Fl)=R%Vc%+ciMWpBrE5zS}bUYmV4|`&jEsEL0N#@+92P@Uk2F z9(7DqA6o3;aG&2W?la{f_w!DU7`26BRU@Ap|H$rFH0RExZ?IcQZAC@|T$|X9ahWie zu%cEsb+B(4Qsq)HxMY4;4J#}9>M4BCx+VilTSgleYg3Hc_5u%mX`rd{?np;bCE`x; zDrwUwU2R%#^WuJgpWeZwtf@f5ARcc(92)e8>I&gj{@ft5`AZp%ckJ3%uv+ap@Txd> zQhWEOXh*i-sT*^alI6F@sx-t=hs?WibfXOCgiHISfq%H|P{H6hPVzip{y8$jDk^M< zv>H!801BPi(^~Y(OP=;2<17z@u*kIfbQHM#xXrwTIH{mGu^b8 zgMTa$$;d}(##wR!xc0pl@$v{}YaIQ7Z1{gxFKUdo_QiKf_onWyr)ycMDJS1I=I&1v z?bD{ZyD$BJe%g8!mZLbtWhd0DXW>Q2WTJigy)rY0LAW)TL*h zAD26W%jpsLi4?KY4QHFoBHH4_4au!ND@ZcZ1j4^~83nF~^+71te7_}DBj_0@t{evh8iFZy*;sz%WNC8DVOxtWp4tG&f(so zV3ARk?sP+A6Ybu@2hMFi0A#ml6Fofm3XFKnj0`D~wSZ*<`=&6<`n17(!b9z7fTm{R zi_keL=^-yw_p)Xz%U`zGStlE^h3PAOA7=B6{`=+pCTiJzkvvkfnMCWnB=;j+_Bd>) zF!R`@TtckR$gpG95;{YRq^6by)JCqfm1M5%qzj?SH4>b8+iXppXfWytFWqFcs#q$uFd~hkXT=>dWE8xT=@0=g*v5Yxn;@4&qr9AxP5Vi zkxCPNdu4>(*N;AR-PB5LjJ!|6-w-!;tysPiuF;JRdgEB-(YK;lda%ZEk9!Ko=K(D| zxyW^}to4(p?b1-L5ahj6OZt0xpXo1)PR?8vu~i`)P4|lWh;^R|!IJ@;`VdIy&hJ=J zX2dm>>6O&5iH4T7!<`99c4`Sz|FL82rZwM)HiyIEf_~K*J!?_QySU9|$Me{gjjt9T zfi)LKt=LU2DP7LCjUj$W9GNWpk|_1_Sq^X=ltd@W;=4Tlu2mnL9?9eS?@IxgM-w%_ zpta0X`mY3`nTwUSWzQ<=o`NSmaW?ku&=5Dh`((R zOHw2Q6@wgW#R&6*HkCl$S0d2u75VG6`coB$8B-;qhjQVyt?biu0a~Y7w|deJ z9T)W~<)0vHQYHI8tK!D021EN#_q<`W=RJW^ii58VF?^nAZVWa3fBEei@C9H3L(VFgM0*5C4Uwf+MriuN%d41^$@1 zVfV^EylP3G)ekv2PVi^M9hcyAJjG>o&dp)5@S(~@)*y{Nh#xT`7jQp9bL4TocCg?y zyhKwqh~}*Od|Z3fg8M@JTSLi|KuQwIJ2)=zDbiscEyipZOAjzZr-T$S+DTca%gW*Ev*|}F0B=^6+RJm z=&t)QFvqvoWkO$;-|MmevJYmh$nOVf10GIS|LY#~L$W=!t~O)P^OqE+)4t)v@5oN^ zm6t6U9q|U-9CRjJ(FauXP01Ja+Hl(vbmNN*=P6FlR4J)|r~8_I{wv`!QE!109th|f z>E|*VvBt1>fpmRE`Yk)nptm39ezZ*oplL-U#U5>yGP<5YTZ>C$tYOU&X4tUyD-Hv+ z6O;*X5zjcs!A}G~Bbxub@#^I2td;?5o}qyn>-2?`63Ww@hL`rcfX-r}LS8u2KfU)J z;AH9b9hFU`tprfXLqWuq&;4v`t$5}B;>ebFnhmif1lQEYci-2sE}t7Mr2arJt#=Vq zIRYeS%{eXcxQjpJZB^oe$K9u08<(AvtDr9y%qI=Gq~le@|AFO_zr>c`SvB!X19W;YeeWXoUjtwdff_ zJkvyvD)KX1IEm0_MNCF|q}7bDd9XdQX8i>Fs`Q1LA{5Y3V#liLU~&BM_MJ*}Hi{8A z?|YiKQqU`?oxQ=g`Ip`{D7vypOP9h8J}jwk5yhx!ba`LkHrrDw>HV3HD&9|oVnX0r zn{n0NRkW1Ddr4rbx%I2Pj0N&*n?QIld-bOMn3KY@ZGeY$<9yLTfS#G`p2a<@Uq&6d zB8#tslBKY1(pJx3iSzlG#@p1776;ReUTuE0d-B1gEvTu3>xC6B^+^eE^KtFmTk&X7 ze_Bd9eX0AbCyhemrk_wVgd6HU?HlqG@1e$$acrFITh_+IMq2yKSj2Zu9Q$;t&s#H% z)YUZMNqq>f{jlZ>9#0Fnf0eHqe{2JiiYfH{E> zW+TuU{O|hFF+^};e0(7M+U@o?OmHI3TfyM@N7Pd4T*0*E>nCN;+G4o}opk9UMFnyK?27Eqim+6W= zZt*YXhV9siI>y@%#TP2;<`@TY?w3fE84V=tn`TXatLAE?;r#t`rLld5p+cWEjDO~E z__Wl^3#js)F6j9aStif%Dt=Z`@QT`NOJysycV`OvUW{oxxL2*f=f3^r3+F0m?!;G$ zg5W~1*U$DTkC6yj+hj3P%xNB4aYMX!9Kyumuf{bK1uJsW5*{$uiM^SU)BOn5JkZE} zDnp~lNem4M&kZAi$G(E;&cYVq7fsW@YMrOpJ%)w5bi&*&0m^U6?)$ouWGE=zRq@3ZjsLrI=b(S(4nMBu;%n$fy_k4E;V|tSop-(-(BVs?x z-C7C7ZKd_fuN~uPcw(XE)@C`ErrI9KokT19P8rfYHs4yQ9ARtoZkbXz=j0^=!r%WM zg4%4w?RAX9mVk$$b7rm$YA;g#-i3fxQ>EpyfRnUDh>9e6T@z7^d=M}Dt60CQ-nkU` z$trAu4T@soXXKe17@vlOB5Rz7ob#7gzf#IZ3h)8tb^}GX;J_W3{Q=YQ24H;*_~z%b znOaBHyGqQ8^#rd(8~d@f2trOKv4N8oJNJch!^<@zbZA6AM8@}!Xa1nm9M#;5h3u=L zI|EeWX*a$D}b|x5IH)h4ucq@Mhsks19K~OZnDxItK?#2AGonKVixS8t$HuT+vOqir5uVqFd zBYQBELF-h(WLwZy{4Bi{^R&i$pryanA*9^<;=CHSP!;djBO_W^CLu@MEc*l&Si2#& z5Aa`vKm**ksZ|1Qr8q2;H4)E#!R4UjUs~u)6it(9j5t1d_kwBb(BCf>$LurX4DnY7 z>$B3yv|=BF|5z{|X-sgc*w7GuvhmqX@WS6oXz7a6bI|3WGA>-weCPoQ@#2f&K6F3C z$*Rh66Lc7HVBQrmel#&E$qr^WKKi{pFCwpLx@ph%F&4B%+O!7_OQHkp6n|KTGwN0(0!0R? zxwy=}cVcQEkEA5ctDy~5eL_*cZs6|oDBd(e9xOIfKx2jn>b2$;X@s~;;LIl^SSc;j zdcJK`k)$axr>#;Tpd82usIXT6AzF;wOA=|{z%X@5if?SJQUz#5IXstQBzNvT>ZJ%i zdEEbAv?^Lo^4S;x`j_)oJb1Q%f)^$gq9UEUYOMx0wMRz$i$U3uE zWv~iX47YOAcvcz|oJM`(kN>cyH)f+G;g2v}V$L+=5={SXInXFKezSTUc-dJ&7aeVUt2lOQ??*BUNsrLSdwkJ-sxA5P9Q|;zh z%TSAWpcu=kb|zJbDUYCfWUYxU5`VH6HIjx*>XJ@fK-&!-yVA+>VEbM+kJ=LlwBBK^ zi7-=h@9bt`+!YLa6i6pS{{QLb{3ofE9pQcSWr+SG9jU*>@ML(ze^<=pf1j*K6p6GyZ6YX7pj9QSOPzt%)A&Ihx!Y zW1KucZdY1u+xRnO%mL^IxES}Gc(vQOXBmC^e8v||N$-rm;b*Ai|74j(wL@YzgmS>5 zR8wJPCQTmU!mB*qX(PcA8hT-p75g%Y9WER?ZXdWmF>x>i5qKs8`f(&Rl|5hp7Ddq# zL+``Opt7JJ$LdA_^;_NC3G53mpip_%Zxb$o0{u9p-9N3Q91U>@eFtt8Xi>Ov~cON%HMDhWhkw`k|>a z+R2vALWLNpq5RkVf0)e99SoE>2d9ifuLk^NrbP$%vhSR2I6Q+`n}7i^aVie5a1jt% z*?Vy>ZN3{ zn2`UPx!NsP@rRbhiz9)~U!ujf%=Fs27%;=tqZQ(|d0oT-TYIFMU0=U-wAOFR8A>@N z!EyQPr+<__7?r<7I=&+IbWDAD2j<=&*8FuCUN_Y-lm|lRc(!Q;;}62^w1t+e-5p2=*0E#v zqD~Nk+&jQNtA4K?xyxh`gP7O73OC;@ZqlgpKdHDTRUIHcr)D{JX@F1NkGP7jWA`=V}~?-&fm!vXy&r4Mm?dMa~!wM zf^d8imY$|@>ArX!-1M89M=%XG;88cmK@&;Rci;|?0mt@;v`Zuw*jc`ki+W;bz_%1_ zcCAbC*Jf6sA?CC2HYID)Thz7F=T;q#5 z2gKQRzm4(W5=%{n-OdUglhHXC8nN-2^*BhalQqxzQlaL=WGo*_?}eKsef8bR`X7BN z>V>B>CS(jw=yaR&4a~lb;7W=#6TU-Hy)up3h_KECRvtw62yq>;4}>e?k}}_U-)0qP z8Wm>!K|X#f8;UqyYSg?mwZ{gu6g9FcNRURnsb^VRV21KLK=WEFCLEJpNOQj>bELk6 zSaKFOG2>mv85eyuTsAE3)N3i6SLdlYGEo}u4OX}qb0`P5W#g%6t6C_A2yg_B4naql zF=K6&?_{q)6@wO_Dq_v#`&yb1lkOOS7G6iVfRm{^ha#}P$4FQ*1; z`Ks*Rj1I>|uWxEbHe)?`b&%d9S%vw(xClcp*tt##@B|)|JjQN_I6Zl>3<(=DlF3jh z*I)Fx=QrsnLu{fwN}hZBx|KPOmXaE-*dHd}E%Cbcz~DR};+(d7lbONv@An9f{l|aU z(5GeZBTg?=R?ABL(RS;I43j#U^3U@j1Gft#oqW)p^~cjLyE>y~W{9T=qc}agLD5M| zZ=90~Ibs8|=W}bbC|A^?-cc-kE89qtUt*$mSr`<+`K%}bSlqq;S;C!}@CVAwp4S-b zRS~@^t2Rs$OV`Qg#ifV8@YhPm;+sQWk&2FG;-`aW-}T+bFmYKcJ1>V!_6FLN$9T0} zJ~CA)nv`ob&f{7Gz8l3Zw@5_8;zC)haAz+MG&vzv+1SLRWkad3H((4)(AAGr-9Q*Rk1|M2th>Vs@HYO4fDbr` zD9Z0E{gjH*c5BF;u1_!F>tD39$igCG)@yN+=piqq)fP1lq07EyB~B?q=;I*H_>o4@ z6NGjrS4<*nuc>V&TmNqg*oeR7E9 z{j{w{{#)dv<^EMyu+Y;9xD(Qo@SmsYj*kZDdOqvNJbFQN@la)4A zj6-{X`V~t*TAn1FkFcoUd%I1vKmK-l;`G})TksC^dy9`omXeD{ z&!CStzrKEROTW@X@}pS#Khn(ettNrLUt+4vYGupezHNIe(+|I9Yz)j!zn1h|JU3UD zwCM}F6MtpSq5+S5yhuWxK`9V3b*7u9oRFN4MLfGYMfy+BFfxK_eXEwY7|b&;wI_lnkGsmhWj=Mb9QfN)zSI1yCeuwJ>OJ1h;2_MtBb(oZtc~GRAdD~3$59&D8%*#}DELKknCwtPkx6O8 zidSOSik0s_HpJj84ctZbiV&OM@ZRM0FUxvLHC%$gSIPr z+>g!)hznUX>~Xgn57tg_WD@dc=tSBpMGK z+AX9!wi*b2vS-tNcH!J*zW=N;^&$CTz+mlaPKKcJ?H*sO@2Sxuk`tJL-T14K1Ds2!Gxfi~6T6IpRnQ>9=MgPXvPI<*Xt-Djc-{c;v zX(V7h1ys}ez4lp;CA=%o)OPPx%qr0gz7gXf;sJlQEgNnaP(r?=V7CZigqVUGrSL?P zV2wfuB-6N$o*|3y4;i1SiM607(hM*Vm>6ASt`ka_S&iREW>e80WLLh2f8Xgopw(T} z+MuIXhO@P1b*b{76UylE!C)P9Zg=lydAk~H7FDNd_C4B*ghu8Sb-D*cYe;y;xbhSO>IM1!@jNzU)&|rz(0h*#l3A4 z3Cxa<5_|usQE-PWU&b=RXeMHp4+n`K_g^?KQN$-kvNXjcJWSGZ)=ypJJ(TBAspWsa z7Z()PD3iz>*7o&M+bK+2-CUk{FnGKGd40JkeGwU8s@gg@G}wHvgxSDIQj&W=%`EbU zCCVQ z0Vk?n*c5iK{L-3K#9P#81WmUBhGqMAngf^`63Wy(fb5;=LS#T{~leQ5K_2dpVscc9`F{@#fRKEn$#wkuKR}TCmHKp zHxF)NM1_sD79AKZsTI0k%3-K65s>v|9YI7gRKN<>GaT_9`!=jP(cJ|jS4XZJFg*Sp`Y{C0F`6{9mD&V9QXP6hb0sM zzV`erD>zZc-!qa5$!JPGT-ob5@h&!z-z`Ah=P=@e8oKO`)MG!F;K^uEt6ckL?a}%r zb}c(|E9bO}lLR33D$dmTrj(-_n||(}VpSk$@Z71C!m99onq#P2_E}WIwA?yuL+&u* z0sEO3bTL-7D9eJ^*RG0O%f~xJiG{Gv9#bCdzVsL)LR*2Z=PB7peS2yq}laN=fPWRy6a0(}ZEyl%aF0;G{#8GQa;rGg~HCyY<_Cw$7;&t_#VB0yP6>iErgr2kV3lhxui$ zEf%SY?`AL32!6%-hv@yc<(i8Hw#mpIqcM%=B5)3d(ZEt|?|`G2?o@~@{LlS%a{KHs zD`z%y5kr}}e-U9R#(plTx}vMJ z)mdn<;c%x>6;T$hST}VO)k2fw8r<{z1^3HKdLeT) z1H>Xd{#&L)*VfNqk<*%m;dyQ@^PO}6lyHkp7v=bGZ|oSyJ8*I#^TM~mSJRtlbqrHc z)fRF#E3Nq%JLuN_3@IM9|G3N_M&`*)x^Be4Zt%QA*jmo7J5Iz9z8&+p&1Uynb2^<%VG9 zA6}J5d4Xo*U!v)i0gDYLw6xFlABhD@Mv~;R+{&VERvpG8am94wnY%#n2gVc3ggXC= zpsZr7p0S>ne%Ij8~nxY>Qq=!yJt{0Mapc=hoE)DAlqO4(Z< zrexAV0^{$2%L%SDxeBdgvP{FZ)hcT5;DgJB`dYMOPRN$#Mt}X9LVdgO`6Thd`mAio)LQl z?~e;NijI6TBO_I~xPHJNJ@z2YcI=t=@^m(@8T#q}k#Lx@d+}e!Ovm1bv{infQ7X810)6>JZF7d~6}!KU_~bLX|iCO48I0 ze*;lUFw1BOe(L5!albqm$kIPI0L++iJSR>@{S!(gR?F2>GocA8P&$aL zQtgOha4&0wN_zJ3I4)-2gdn{)i0+B#=z!fa4P%^JjOxa@#oUa)mfT=3+pJ6~bS#Cp z;*bD}ad-CPa>xjxK{|J*DBY|VGnFwwgznzA-p889!wzUt6!wukhppKg7n?^9{t?W& zP|PD_l$X^}mJhxF{y@h)ceUo_8&k}G-LJwkq{PQK7fYUt6$49JatqbK*vZuLB(xAx z$SrI!-h@nb9NQdCKPPgP21EiG5lb=3*TJIkD&z#z%v+Tvv8N?ZU3>i4V@iEH?UlY! zwRw_)*dESLCJ^r7)nV?FvGdm#QB=S1;=ru`#3(oD&P2C>dk5k{#eSA{QDG%JP9h_{ zVAEc)Vs@N8c|9B>rlxfysE9jwVnp;WbHUb2ZkuSxi z`IoQT*Or{@_9YBq_w5h&T06LSRVE8KW0;7dv$!PDl8iukyLameEnP0RQ=W7cy7yME z3$;kM>%@NdbGC_6NG<(S1Q-~Z@1+>?UgFty)%7{F`*D$&<>Y0x`em7hrI97PJ3MyI zsM0yN)S!`Jt&%D?VG@c7X*x_4vk>8T%xl%<+B#(QdI`7+Hf^PD-nYYB~FEH|W22z;+iLP4WAKxCMn@JK9|~m~YqDh+jyHx}wDQnqKWB+GI>@^t5$sfp6G?3M;GDTK^+4E7F!{$RxM$^<@ zd0Q`J!xszc(zNiZAIPGY9Z0vUiNp*WmhDNmWA=@Mw5Foh3lmNm4b@dhRwX6t)C9=~ zMYKFEwN@a^=kz zU0s46x768D;)e%Qy{G@Z@erB{{H~d~cM4;DWJUmd_U7&?T~Nr4bG&s@t;#&giAXF_ zEjq9@PA^vuHA0eio2(EQ>gmyC?vkYNJX@nZR?zMCV;C9_C;#}w9t*2@bRtQuMS0KS zo46VjJ#FcpK$|L*U6)OD-W&_|QZpUf;bMmQ{U(l-9W}NfRwIitONY-5xQkLgYd0Z7 z0Wkp;L;#B-5?)ffJ4YdI0~ z;f!aIk)XYs-pAu@Gp60h{W7Q~ZNcbCTi0GQ19tkUXC%`!baV9Dqer%-fRtB|DJ2z# zG8ITRl+5Yi>%}q~TQn&GrMlYLGaWtVEOXW{OL9B#xTr;ZF8q4D{E|QDPLvb%ftFSw zctNV`vbSF`C~O>a^o*iUOlNC<^^Mo`PzMc})E6R8vKz+2^;TqjaOT*Pf zi8E>biM1@69Q(sro8kbFhNK(SAi^p8=uFAeKo_CXoqJh;L_Ob37Zpt1jk1nGTKfJN z8W;iyape=zr%+z0&T7du$j1ay2EJx&pWoPI-@5e4I%+S+=aHiYE7F~4p^+N+qbRHh z(rGjoItQEQnT_#~ajoC2*(#kl)}-ISDXXe-<&B0zMPyU#H;?PeS^>AD%r#!;*Wx2z z3JXf%uhucrvBuW9i3j3^o;g7G>=BqdZJ}o5%jL2dm71I`uRq&}TOn`1ZaJS=0{kTH zHWHeMW{JEir*cXt8f3Z;^<0$Dxt?oz04%F`KqfZA;n1wjs=mNaO5TA~N6kXxu7uaT zJZk5h;oMGDcDl39uUL4=Xu@1_JWuq+gJq?@@NxxGz3lgTqIH}e2;a4HShDWJ;lKVQ5rEKg5fLeP(y#W zFW=tCUcs4?*(X}Y>N47O$bP7Ll6=p=)YtLb1Aadn-~FZcwRY2WkEt6%^bp*xy~Y$v z^R~m`m(4xmyr&w{Klu*`ffptp} zF~0Le1>%TQH1AxeI~$Wx!D3||VGqMkl{^h|Tz@bv2dts{z=o38#v8^?NZ)bh|Mu=G zk0U-{#D^>!Zzv=m$_6QGGwZ1IIMPQ2qU^r;O3F-&))QanWakS}8J+Nr$8Ev1&bI~u zTaFS<6vw_aPog|VywG0m_VYva(#}&HW7WsS{>gglpI^+e!u5GcLl8)seVmBBuO?*a z7r<$-P0z;m0#onWt14#-uNwV3$vp@4QnGjbiCJDAX)OR)>nbL^AVX^Ah`&~mik^jG zE1H|5&@7*7rh*hR=RAh3XxZ^9?rF`LiDtk`&|M!`(Ipl;2Vjquy4wFo+M~*{scX*m5?c`n7vk$$$5eL!pXRezpvxtgkJ22_nK5?#wM`%{&+EGu8ZdBLAYh3P%L9MvLUJZN|4 zA4(F!LnAoepTpmHyUhQ213>9_z%MU}e0X`VICS{txFF$biBz64$(mF3t#per&UwbX zDnR8qvMr=mhoapVfwF%_ZSR_X>=Ad>GGvJ>y^@Vfy2-U2tG~VRhx>CE$KcDE>?2uT zrJw&|DIh8`3&|C=A{%l|#UZ%JsEpZ&HzkU3!I$2w(5`-&yvX|@Jz z>0I!1B*4*CamQlaje*662y7yA@ox~Plj>|E=|=R~X!2cNm2Jf(iw5mx#_J?^o-;9L zM$ysv;RlZ;Ox5Xr2lhb|n@e99|GWjAoG>~y{yLW(Yiz)R` z{e}NtVexHtt(2q2IORW+A*HL=-k9k%1%>TxUUdB!``d_eMUe!3X6y~Pa0(7TM%iEE z5IvvumohH(n{X^f{H5T}LAB$y#wm*B>V$e&BD}zG+NEm30om1tQ33`#%?2@<)|^`t zk8S0*Y!m4mh*91*n$NA`bURQ7gPOpohe$vF!2w76Ml+ZP+0=a(F{@4R4bbBz&FCj# znD`NY(2uWJnv{oF%VK4IXE-`WovH{}f1e*brXcm^u^zdr)0L0i>G}CpNpf@VAuH3q zaiDgreo~IzwqQtpc!$;uWF?pOh9SwwAuM-pV-C}Lu<@n1hm0dQjF_O0!XxgjO|5Jc zlY*F#pj`u=h=bTjq`lg6X>gm>y_RUn--EA;On>8{f)3R1PBSxv5tm98Mylc6ro5lg z{&3i>&)gR`Rkm(%Sj}@=!HhM1k<+P^Ik|Xjq*UjJHasjwPlOhuEF$)bxp{*U#otDh zMYvSmFB#opKSW%xQ-muaT*E>$h-kOE+$7Wa;h_8EZHPNLSqOrshRHKy#U?tPzk^eF z8;>WU^S{LaX8Shh*(94VBW+o-JaWu+&PV0B_M_dm;~yx3SOB!BU~N6G2uYP0%W7BjPofAVlD5E-RAkvsxaC@W8Br(rySmI6084)fa%Jps09?i=R zULPY*dDAV+AM~!V%`+Fos{WuAPwkI&(U%|21bJ^D>T z`y}||2_x4fuvdCd|7fXWdWS{)iWm~5Sls2N_WMSqqlO@@>`z28LZhSznzafoakhI? zu4n<^u^m;WqSrq3@$w<$*wxSnhb2|aN`x{(T|)DSAgs4rNUOzrLoDWrXP7q(1ZmB; zaG5^Pd-6v|Mx#$6@v_W$-372|YgdgDSuFZ_yWAZ1hC#lp5w>p+vJo+2 zK#`=l&4Nw%2M@(5W1)FlNam-ADUI*Mg6iaSsm{ManIVl#_I${4>5-zgPGHI2TMgTw zkE?o17WTxDAKCs#A0!k~a5qYuwFLv<=@Ok~SlF-$`;Waq+%5LHNua zXLuzUsUR$Kk^Z}nqbb_#nK&EZMi2) zQShQSpEUxcx?*VJ*krR}BFJQaMUi+SATw9Ah8?H zh{frK6S{YausEABjuodzdn;u{@tO4gPsCwU%0ygL2JdodrBTq6gsSdx$~2SP*3+9?;v?F|dtm$uLyY^)ty;@E6 zL09RA6mmWR;x;09H+f1usH3@Qs}^@8_!|D6p>MHizZ5Ia9u|9in)%`rBa!Ft^^5je4{i_H7f5x>Y0Z%VIcW>yE+n)x7dWAQ^_mdC zc5b&Xwj@Bx#j<}F>1%qLEJmK5zFat(AgQUn?6IQt(`nQ(VfXVd>uF!nTTe&Uuyr~E zani0sy3ypBhGmf+so0jWb#S@N{twTeps`{^h2AXblVq1NGyCRN*FIutkXUp{Hh5+^ z3F)JfQ`f&{yc)T8eLf~B^Kjz{hvxhIUzsOBCll_ttBI8(4QXI;JQp7NX`u+O!BGPh zh=oaxg%Mg7D&g*lru^kVIWheVz=0f%(t1Z2O?5n!nHUwznJ#B`a<`L&1Z7B@7TgCo z$()GBSsI&B>T|em(WQIT*eCt0E~gY-x~gOWsReEvV}G}tUx5RbT(q}ng#f6eF+rBK z=9MU?AS1L=`8WvEZ65T+2DRVZVTmEMATD4@EtUN#x5aZV=w=T#wdqc6K~}w@OjFlO zca9#K+NTo>_oL@aX9}|H}eMrb7=*ur@GtbFgjI3BYi&4s2Z9^L&whR> zJY;<8%FpbuF=*JyT8aU=zvQ`T-ET!%ws_<_HiUdX^wySfDfOrtR>GJoRUa z15lFdYQO{35&!<=tH@)!*O_nhDtisfdgV;W&+tHw)mwo_+#Jzl9@>!a zN9ioCg1s8khu(qldPcuOFyPVxPc;XlyMM?}S?e1zbjKyca(nUmE^4QRXcg+Gt z*+TBvQRBwQi`A+$-rD(NX_M|uhsi9Uc zaTw*!sy@Xb{tSDs!qM=xrFh$|&t}~H!6Sc@i<(T%?=GKPO%wy$ zKQkuigxe)G&RWE#b}PY9(?MXirLhSp&K5e=ws z*@#sc!1ZB2LQQX)Zs?|qn&g<#_~V_EEbO0y@Ba)2(APaupM*S~y?DJtJqa zx`U+GQV#3tW3Zmp+r8PHju*DW+rs<0!AHq>ukEy%39>6eckPL9hKZC*qrO}FwyZIpR23_p*cd=m~4RQsZI%@<|lt)fX}*d(qT6 zi;RX$N7oOJtBGYMXy-nUl>N`J9m<$Wxx*#d)yF-fE%!f)X5AH3GVPYQPeq zjT4fYFz>Gw0N_}5JS0rD=do2D3=oiP8aMG=Kcj6Dnlf7hL(#x-EocDae5Ze*#(aBG zC(?O*suKApqF8PHyZ$@C%OgMC8+3(2A!oz-L%ZvvS4=%<6pgTACh2c^-|?b+*ey+% zp~uM5Ggh|4a)55N9jnS_i2mA!2!PP?w7yI?Zrv(Mc0r1H z%>`d039$kZ@RX}9eu@RO(mhb`So)%PQyuin2({j|OB~@s6y3aoP|+_T1>b_zg}FZ2 zN%dR3y! z*aQfAnw59N-*3q1b&ak}LRV|(y6(g48H=-f5z2^wJ$#VqZUbS6FjO0uwesSS zfo6_>$X!dJkB=T<_OJ8OYZ_*M;ODK9tC<(Z0GZ|wICIt`oC5|-n7(L2rS)EW+~9ob z_tr5afU|p!gy(*wdHx4x2IfpncH11R*PKLi7K}jnGB-~!(Q!}lecb&*o_`{uqhud+ zZIT=rg(KHle$=90GwRH}rLD*NWXF`#-$pMX{0~(*Ka+la{e=sm$Vsfz)nW0*!@iO{nK{D15ge$ zc#&}MkN!!~$&xVMjVivHX zp?XcL)ZFgo`lO>}T*UMtJ)6YLiStDaM>u(-cw_E=CqGUd3%6(KY*Fd7fnWTdYsP$- zG58Te=~{*L9aLG^N2E!$hLYK&cBalG}d}8Nq&aukKO{!vflRDmhsP8-p%lKUN;-7U;7`$Xu&o zqWAR8>Ho&1;sW|geUiF9n7sSMTP6lJ&6@LXIX9Z)F6beT8(k>rHU};V|Bt3~4`=%S z|34|xJ5*B6s}x1=ay|@G?+zk|%3-3(DKd;<<}4|P!Yavebiml0C1+w-a!NCV5p&#Z zj&mB@@Adgz*Y_WPa_ze8^?W@akNf?0o9NZWLMuLn(k~_S6+~FCOR}Q37;8=%g8mJR zmMlGl*2)kXjJ2qKMZM7!TU)k+7V@s{V^Vv)O+Y$v-1cP~st%`4+Is@cZti+ZF&uEi z?bG*fx`MF*j$E6_{5jddlP}lv=K4r~#-pqL*_Y$f4L|?PrL%abj#D=yb!Npc=M6>c z(s9!duN5vz6ZKspY|Qn^PI=1*#ac5;b2lnBUo&;I>V04-D9OjKRhEeu!rZop_UUt1os|Q6i$#Pp@oLpYy?&PYC+!d>0dB8r1&zu(NOwlE5R>o;1 zoEnBGh9N>8scj`^POPk|xMBfQ0xfskSQh-}lf6iaIAq9+3NE-I4nl|S9g#PRMmENQ z`2qt@?8Y~Iqp{t5)Q9mqXPI&M)$PafW#V&yXl%glSaUp>KrJvJB@GC2Vq8bC6 zwqI?LBUKC|p*=;uMpFIXv@JVVUWFOn?`9gFG)fm7_>;fqnA%r%Z~4BllJs{?enWm# z(Pr!^uCY$kFq0Rs3aGY`q7Klen;Q>M=-YumADJ@FF`Z zcOjDd{27o51<4<6=9UF7Y4(+bRbrA!k}BK_sW=y(M7DmrqR@6Juc)&wPE@=fna)#| z^Jsn^TDbShu$H; z(a13X(5yN^Cb7!Q%mRvu|A_A=_t)B%p!aiE8t8&+pS!Wno^W;Qbs`&Sl~o@rB~Hj< z7|9$3i-i5GmHP0oxX?z~7~20YsNvJu*6xGdJ%kbG=W_LS*aFEYds4%=notMLq3nU0 z6HH`Y?rHuYgPb{p^5H+zGuamC?@RRS$`nZ>$Y!R z-11Z4c$x?B1?6Rpe*9LTR*71?jM1oD)80JRznHq_4^VJM%{9M!hLjYo%_sGl1043b zvX%qSvh=SN0Z0CwxC=_Q;u@^jmC{w=mHMeqVY;7>qSRIEr-WNe1uqER){#`)YV)ek z6(6`4ar5|toxlS`m#}jrd*ir22_vd%$Z^xP`w{n^(_h$48Awc*x)*=*HbS3a3JSzs zD6lFOGu?wR0fkV+ZTTUd{%2s`uRzw{GC<`#L~a`obE#$q$|DAkpV7=rrm0D zb>|cP!rJ$gmz(?JD4eVq5xDQcDLQ+O*;TTs4;k7{x5(btFNXZ_&AU(Jl?>M{ZV6XEXJV$F83$zWTiC0UmyB(*pliX?H3)g+LH#0?mdgyr+f5_xZ=;O-NY-u z`~VLy+rKr>zxuhk|0p+d6dG30y^ZTT`qT7Uxv zg|z@bnoqx>jh#Zl-nnj-h$n_*exdz1NRz0#Ok!S}>=lbZ3S$}~mFg}` zg4;%iCyzgHHSa0O%%Dek$dX6L7q(S^&pA321mb3PLBXnjsklM>GO{PyQJEBu)Za$PL&ty@DE6IzItVr0h-_?0&kA5~p z`AVGuR$HZ6uPI>OVm=@d=iT4la?@i` z0w)Qr2d^DIaHy}J;TODQ*3@Zp{e7u3JJ72FW0%GH)fW2?G)u{UeCXs>sgcpX$zDmF zMZi+5y5byG)H}FiH}k28|M}UojM*TcN<^En_R~DACv$I0nO|9pvJZX9x@x3AYEXaK z-_F2a&H{Jn70n~S7i9^wn8?Xs{U(A?mg>y zR9LAdClQ>N7QD-CA_L_noKyD%Ir_p+EZt-Xp6oquY> zJ`3vl5VqYzmo{A)DTeyM!@~tTo@15k4^9Q5L48PF=JNT;zA|MUE5}AFkQK9bK(8no zap8ZZ%sk*f}|8tBR;A<*hrOQfH ztp5E`UM}a9agoq`X{nHZdXZbjY04ta6ByM9`ZFje@Srw~q{>*q?3q`LdOjaZ@s#U+ z%f8f_WKTLuATqycm&PWmm?T$oUy+KqRbgt_!2LUBnUsR*Mp_g}2uju@vB1DSrhKha zbEt~D2*FPbarJtg_bhjL?ch!^DB1olx+E*5pc-jk1b;5HY%-qWl>xjC0b|0AW_U|k zsGQ!84RWtxx%7aQ<5JMhGJeslv((bXeOH^U0svK%2m!Y#C-b9BQ((=tqVvxYL4SH| zK~Xll^S*q#0Ujn7RkK~NH?3*u+ku@!Oz7(uLhp~fSiE8h0{S{2~n* zj7%mK>K`pj(ZZm(7^`2A%?t@T+wDc?Vii4Wp4DyB1 zw#zp30V|wNXDDzLtskW{t;^0`O%^*+V_D)FAkbM9-q!J#RkE>%<>>v(@L$?k#a5fp zm)zAQeA{A@z6F7jEnJxfAJ^{p&RCRLN9ZuXmO-I5j2=x6M}SZEK=}yuw%iUm`kBP; zy4I#n&%>CJW8{cR82@)jhMS0Wl3$*!6DNFMk>vK>IbsQda@M_b5JO2RVI0;FuV_;xofRB3aiE=G$IJ#PjXvA9+}loo zOuva@0LQFvMLld@lO>#Jly9R`fsbx*vFRw20GeM0ZpLvK$(KIuxA? zQ2MeyA7%KMy|-n!{foKKO{;=#zN+5ij2OQAxnHvzbCOdjos^Se9hZf)3@%o>SmJUK zIg*f;*|!G8g=}lBCuI$&Qtd1*^b;{1&a?rYC{|8H*Sd;%*@6C7Ngr9U``81+|e~Xv6NQo+-OSouM!K@S9zvX7OqUiWOBY1@VSr5f5 zxCK*#E1srlG4wjHL_K(j_b&!!Bx~zi+q!qAr1v0gY}9+WF0(){C~{GguYxFVH||GU zl+FDm8fUZdMn;bJD2y92^YyeR?|4)Z$TE<~Rx4V3Pb!X+T+uU9#o)_|*5Nt|=I%lr4W1E{98ei=TjZIQ z=7o2r-W9@1ew2eBu2HQdjy?9UbX=2fb<`YcUndQ@~$MrixLo`5j{*(cIcGf@?8G79<4+`^<4(`@2a*z;2wWvLvT=0i ztHwcSR#%ReaRE*kq{KPePaj~bNZB+%qcItv={amX^_ zRY&OOJw>Lmv=?p?b!FtQV(Yg4?y7aN74u#lb%^3=F>gpd3+n*uof$H$Vf>n`ABCjS z+$`HeGv}=;xOk45NFjvUv2X2T0RrCTDSq<-34P|(U;4ghX=G&TX9t8GEIiy2Wr#fX@7MIVhTL!`3=gQ5Q%6lc6V zaBTAil^|{X0FCwwzU2eQs7)$sY8ihp%B*;W%KAd&C$QaAvo~{B!LtFUy>O>JQN5`!`_I!oU$HU@uv@WAEVQLe=SOIG3D$59qvFQL*%qzgG=9f}!MH`PW$#of083A2e%>`vs#L_233LYXFQ56~YYY$bD;& zy_fsG^TOyrh!k-}CGZhD*7GZa25oFfT1P+JD$NY4dJ^|ml;@e$KXEDT9*8U?=Z$@J z-&2sDr|;l1XM=<41SGGW84@Un`8oXS>aUarFxunmgJmA~#5JvvyaI+GA7Ep-*5(qJ zWOeJV$YQ!D;3>|*4xj~NZo}3IoPxPgHs5+ldxvDo=*RMltwn06{kyyA8@cQQ0UbH& z-Y!>9d?IK$eSYIKejLhPb%&+N5Uqb3E5S|0;Fo`h>5QYQ7lW5Jv!BXLyk>VWhbiuv zU&7M=29L9m-6Wafpd0Nc33eX&G(70?2N50F)9>Zc0=J<`B$W>__@v)k4vC;gp9_NO zmp0q&aAJHX9l_xjxxPT)-Oa#~vyG4+mPN>K=)!JC7BX^&YI~=I_Y*?YHz%g09SQj7tMWZEj`D-rls#aEAp!+n?@RoO=5&CwbOUmIq8MB;)s8_282{Msf zQ$6(vmxAcdcE4E0I~*B)75CPHhSx*yL6(akE;(k)4MP7=?*W>`1n&3(@;P!CyLyF034y@6A z#B;4CvbJdr{k99B1jh)+_0^UZdA_`JrLWrBzlpoMn;!WpHaybE|VfF$X4MI>tmU!9>2j0K5DZlsNCI^i-5&Ia?U(M0rd~VuAtX`pE~y2>)y+ z8>t&Vc}d47H={mF^%Otg;_4!_Fu6a}C>U#6?k{{YMy@m0K5fHj7Wt~q0Z|)VFmAG& zJ}8U~h>SD_$$ir=2}2uwLP2U&0Kg}qfzdM3M4Zed8sx56^J>Jw0`&g zKAG{oboe!OhheXJ4t|HHIMg2oIL*rdXe6Zf{!3HQ^Xb37`oRq~W)_v~)6?KLOGH$( zySubri+sjw&pS$z>YBNnMa`kiFqb#5M~C}7CiVuyjI96}gGtA6eG ze^~$+7G`L(L~kw&ZptFmZ!0n2Ii5!8EYzeK6Aq9@;n5A~Ue7k#SfpZDo#D9QN`%h5 z(LMCF%tX;HA_m5W=@OamDtKgy!U`6?U7Arn~dHdy7V4VCn z$f5$HBQI@v&ZskMF5M-0%9%{6pL}SPP+gi^+%QnfY&95A&aXfmz6XXRpnfLd43uU& zp@Xrr>7x2tj%i=W(0QKaR;~z4oR|AlVVY$kPpG%p={I1*^oDlLyfmhGKFLJ@X(g{} zRRn?9LyiGFF$)=4CEv~Qr+q;!C78+Lh6MJK{uHe@k}M@tmfI)RS7vu5CBS$-=@P4e zQ??s!-m55pSR}x{P?}H8r#~aZ0yl^cw)5hYpE`u z9yxQU;K=EQtpZH$*3Mo-M_If?%b`{{_>Yd9nf8sY0vI?1lS^Q-kQXEFWTKm8R_&$lXF?xX;&?^Nwb^#r3q_u#BUxP&s1k?a z)r!}s28*39uTx6y4qc?8G8YLByl3JO+fK6y~!B;=9LqhvWy>T)^53NMwFV|Prm{dC(<^DA)$okIXyBV}R2BStn;sS}!I`(^(wFhl5juivL;q2h?EP%pN)Sx6QbY6aL78B@rp!);kkV|%K} z`&71YUyAHFq>Iy+lKQP+wJtzG(Yiqs`6XyjpEuSy}24QPBj(K8;*3_wd2+p)GU z!?zTh5In`F#xHV8S?`&;fv)0Jgroy^D=oCfDYx0%Het%HS*+m> zSXg^#zu=jm7I3kdC|`1+XD{+tMrI_`>SaU?E;OprLb!pb+)c_bXGY;|I__?qjvgzXnHEWqAmD= z3J#O3U?OraYVcD5`3-b-WU++7J4Haracjue<{x_Yrex(R}WK6z$9nEj;hxRF>ChKnges{d^XJQq>_sa2>vB!v;a9)sl4fQCE1x zgTEWnX`GFHAD@wO+oWa%d^ajHW{jb29C!b8nM40XONYzPXvCYv+P8<@V9TM9fuqo6 zA12-Ckg30A@5RNdG^@{gHH@6;J|i__oJ?tu+#Kc;9=C1jlr3_K1^6W|J8GW{*TOKk zWXn70QRacKXIb>#uk`VG6Rv)7eRRg`)b^*9ff9o57`>J@)Q)M;`?_A^Cda5EES|!Y zJ(~BAn4MUz-&%hE=7ig}-p{{)#3&4wAiIgC8pAE?k`RxY7jio@)dfXL#K8x?D zXmRk-Jc!;-WB-m$+ENaCVjBX9E{fHJp>yg9sHK$8d4hH_n$z}{;|xP!S4 zX@l=6f`xvDeyYh!%w5>#T%-!~WY#mIbV~o^~B4rX|!~gsJ~)H8Egl zf{wUmp+~(F*f?>+6C~|R(jOLUR}byfG_HY!C z{-}K!;kGmECD{+(_ktm@^*UMn_0@2(!OpDxd(ejlDUvl?cej{+1XgQf^#qQfK}>or z!5QyGTyc+$pkQtiq&io%@>7<)ZBT7k)Egtav8+Gf45$)>1TSt(@O;_Em*q8M#DDKl zS=Z1tedq1)GVa<1CHn+BN-V175La-f*a`ccFsgg}Zu>Wxx#I`rq)w~{-%1unNX{uT zPK>MeD8FTulSTBgcN!qd7AS_~7XEKtYb+)BC-2|RhVbJA<$hsAw!Cg+pyG#>C>aJ| z$@=kcXNvPn%0VDKjHISy5JrI@o2Xy{)TW6FPyUJgtS2`CHnLD-eWlBVo9Vuk_K#$V zJ`bKGlTyfTk7ecc_dO~U!wgGEWW)ZLH8(6Hj<_vuFyYj=IS?}a4TBBJug!py8eDHd z0@o9=Qh!4bYFlnT2p8%ayb?jT(W(B^qe6jNiHz*ZcBVm=zGoU#ml8!8S&aPYGo_sE zowBF{&jegVen?1}EWP@?i5G}F;pBa73peXmOYr)0HcjM^_ZyqPi<@^lu2XJDbkwnS ztcyK;(t~jV`ou(yBXKe(j}2im9ex|5e=W!Uy<+?ll|~C{$6YX_g6Pmzc3qyq&C>ch>uuW26hzo2| zjuF%{NO%uws5hu%0Z-)hBUvxsg}hu=1Oo%#Izb#EcxwZB1e zX^3(w;#K+2gZ)o`FV#zX)qq5wh<_&#J(9#+36lt?Gr5C`UB^5A6G>u&ZTii550e~I zf#z85VF95E>uh~* zH#F<_GKO&WFTwtsfkbUMuaf|OEZHfJS&|nV49nSu&~oMq{oeJs0(j>frHH_FN&jPv zQOfPbTQHit=rHLf$>wTGwMALOZh3PpBcuO<*ND~;SJr4C6;O?Z=rt2K@^bEgk@&nl zGOIt(kPy`?5`kl=?4E~L;_H6<=c`;cE(pN(85pKGn;`@(;NpF9KnEqOA^P~Ca}rhu zd2X=XXCIHqzq&Fe_V`At+e`PCPr}X~Kk=nVYqt>+!S^w~z~xC^QJwP2#pnfptFR)j z!hra5rHGpYsDsWfC9$KXBfa(KNi6sRp*8i9$rtDwE`{P}}aZ;$CaaYAE~fL9b|b)(VJyazA%5 z73dO2nC<@B*;X{3wdrwqSc23w09y~Eh0xk@hFI6rI_o5Sz7`0Ti(_wpAjKH z%X;VqnQuuGNpteJPIC1aBc(AlO({%qE9#cfqsfZLE&nB3blX^X!#>Y;?UZIAsY|KB zb!~65N*Xf$V-hw9L)BzA8;@E3q~`stGQPj9AH$SCn;m|AU*Nw3^#a7Nl0AuD$B%zC zy(q;m6+iIxJ#tDQ6(M)v#_{_iR+7XNJuuDvzXDN(YC#L{_h%GcVt~@c#ihS|&kG9M zWpanqi-*I^+mk5P9h9jLlvroVs_E*s4FeIJ82Tb2v(X5sURk}Q+_XA=7v@+9jCA91 zNy!b|$&LF{;3+l2{0E@E_pi<|2N`*d@Pde9JL`H@V*;gs5P@z1fXxR&D7Bgv`ERw7p}P`rFPs(ikIHQ2dW%KaAaSj9DB**K@2&pM z+?QM2Z4W-*_~jwRBzn%HsyymF?9niKbDy>7u@rXlxTnv%rjy6-o9R^Fjqbj=s7<YcUa)T1mg2>&3voI%A_bB}2j zf9uRXSt;M=$`BmvDKef@iXm^wVSLN!ep3_6y9NVE2gj8Azk*~8CuY7+2O4@f&O6?n zXaU3pyp+g-s@9}rbk$3SaM)xCGNge$7U~N`^mq}x$s^v%fBl;4=2eCoAAl%k({S?6 zBY(ln-E1-xx|L*sVAEZxk9h~r$em!^Hkn%W^wK#~AC1h+lXg=?y84`y^b7XWy7fkP zIxyx_=+o)g)lkbNUS7Yax3X~>M`hPeNNR6+J>a=bVnpT_`{kPlR=-4={;*P}m55?%W$4AlZ92rzoMXqpZH{kDvQa-p3f_`sRno*U zch!op$KhfX=4R5lgeyXzpcY_WHfZ(0%A^ez^0A{^j=!OWoG!j*Y@{6kcsVeZ=N$S_|{+2#`$HKxJ@adt$c3&AY1Oj2tNiNgYL%Oqfj1ImvN-*W*}aVfg} z)k}nel>G-(zwIDhX03tTdu*p#)7`p?j%};jKbtYD$|WkL<{`5~D1m#U7~n2r>t#?@ z+WQTYIy}bzZg#Ti8}p09{B$9NQCh+sh)~aGRVAU+-=pQ}NHQdjsGy3x?{q|KS?m)-Gu+P&aj0zp9 z^k9{Fu}8}&DAhH|=Q*;2R^_pE=AatZsgVWsYFF*^>x$Kmv%%?^EGspRuC&Z`sHV;R zfM@#M-@!X{e>LuSrDyA1^rwLQ?W8Y`r&Zbx@?wpUO^mFK9{T7f-3|S;t@cpAM1){f zIk_oqtAJhr)Kdw~4YDVwq+PYgreXdmN~I_*YN+u~Ph7W-{T6*^bx=K{D!0uq?-rJH+FXC zd40K9mn3(^ADbk8-}+>!53k~Y)OqXox$^ra{ep{10OxS-?<*!$Ev~wCPXYm727hsR z4r$fxd==s>3+p}ZYf^TyOrKj60eMVnabG>HZqzL ziTPyRd>aWG@EqMk8I&42?cbYFokHSi*fRB!-Nv%Dp#)Hix^WybA9=X|5K{a8B2m48 zA@OYb%H!2^&*nC7z;KJ0GlnPqbO^EV|CPI~HfQGw4Jog8ic%qg%SJn2G2ROX85Y|) zMFe^cK=qTx#(72isjONKIwHVJX~ZNr7R+#m#4>IYV2)-nie88^>>7FT3jHkYxJwOr z|0gG_P8?NA57_t3_I>27i>s_UwQ0vpk{1J*e{zq@m zO9&{wvbcDB@bd6i?H);4&y>i(@21ykyY3%MzdUUWb?BCQ8$4D!?TV>KCT#2auge9MZ(Vfq93u-|&bAUul?`+Rk0WP0Xvn z1FDp=1l~0wEwza1SXb^GP&|J!t)K7#n&cEY3y;u9A?Q_)t&i#O72FD%j^}$SupNA) z71CtT;eM6(3eCekpUWzsbvJq&z*`boOQjf6EXH zx~R~ZS58;u04n4A_xFv>f@-sz8vRQhNaf{Bo{y1a=i7OzRnU?vQ;6Jw{@=}5CdsP4 zH83^e=YZk1xu$W1%XVI}{-cjA7pWe0^o`tA;CR)-1b`?h?G4TUk;EZE=}WqGT_FS; zors%0<`Bcc(R3GE&ulfe!e5)JZZ5}t2KD*V_$DT4=CHW9$Y&Tm9|AG9*am% zTX{4)+3Q8lys%Zj=;|MJYTXUi^r7S~i!!?~M`KNWad^EuT?*BZ>eE;f-wR#d?FuU~ zav)9cUS;%91d%WFehTq*Dg6+ZQv04z2tGy-Z1I=Vpt_BW58^c_Wk2p4Ui1@iJVC&F z9rA_`>2Ty$kp~vz(;^R~x7!O@+KQ1bRg=yeqkVJ|xfXgu{CyOgsR@cQQ)tr=h9=0s zk8vb83$aIar!WLSMi(mCYT^U%Lk=3fh z{FXzDj?gJV)bmQk_tR)%EdqQgr9@+$r6E+Up1d7g)h6-XFe63&G~s}=j&+snKqJ`c z%-M=a&*YJ%KeeFtaR%r-`$bfLdZim%fmM25(Dp%l~aPtO-vz&w3&s?0KFmU zTrWzDWQUm2e>D--)y}ekxpqLBySOHogV?rXj4VE<-A+pNe26b9F7sxZgY>z+8+inC z=0BZ}w(!dpoC=OvU@H61>V5V=iItX{;oab+4SQ#?0M^C__JL)>*KZ89%|ZrktVjt_q|fm!|+M9|Gr z4f!hhBB>)ZYN%ID=`_pzLs)8GQOHZmT%0dopup9CKJdR0Mpb@0^&tAY)T2sPg6#dH z>Bmq9654R|FYxCa)Pbo)GUe;LGKRtlMHq?xUXmytaZ>@kgL0Ww^_$3D`jcVNcIozZ zSA76;{_2YUIqnM+6>4FH9?e?7dQ>R!>_GArM4X(~8Qi{8X3EC%DW7_e2Qr;NXe@!$ zG0MEp=w1sT-a7#tkq+`kpO7|axU6u{$fz4Nsnh1N8M1yg8$AQF~NssvbR%nU#{EF2dJWCqPE~qI~QGNm2EYo9y=){0Svb+|!oyE)CU9nkOTS zWN*@Qs-szpRj+J>??J6DXj4>`s&^j$P?K`g4eFY5IG3WT&P1iIUw%4DR4#s1=Uz3eyFix1nD1hueCs!^<*7ub0iK z$rPNB_ubKbi2h>JLI9x++}CeIzdX*zus-Ux>P~o727v>>%tf%tIrKPS-E`D=iDX&7 zjcgSYxiRuh&3G7?+0Bz*`SvOhtwF{=1#&>+f@Azs*Q^n{-9Y;(yt8|9&_3@seKPm zr5iac3m%)dNs!lIW*!BZL6vIth6`?Fl94l?<)pdXjwXcY!d~m@;~iaM-E{0aEmJ9U zJP%}2Z0ZV#XdA(D(EU3=m7uXB7*9JI05i&N_VFL@tbaH>^^JImamhsswj2oZ(rwLr z^}nX;j;Mge7FpV-^e%nZnrDeQ!Cc;O%Jj%o=(CmdMT4@@5<$n53R^6?sg0lAU(ml4 zVtxup#wkYT8$820r(dafc)FCcBf}>lYq~^FdK-@aZsP>!r?f_k5PQ-`P?Bi5%z8oS z_e$A}JJaQyy3*&?TDL{I@Y+Y*?4aYA1cd_xR>s_d-|yo-W5zYf89($nKj^!E01{?! zt?6!5>3xp*i};BoLg8353OkXS-xeU6KAUO`UfHkjvloDzgrLR@?dfX$Wqyq4W{?4u^hx!ECZ&)M!t^Y5mD-Lmo*($l*}1F{`y;w@{gambDA zS65@Jp<69O2RVjJBL~dH%8Y^S>gQnkCK|~2r1rp$#w=C$hR<$8jU?c(sYw&v=_HBcY>;|Iz)dz3@Y7_f77!6!jMHMo5`L z3?5-u_qh0}fY39o^~wX5FYJVi=tOb5C)p21f@0I>;%{80-=fBOo+YX~#7N^c{n|)A z$#5~$U-t@^WQRmry+s+N^}ciJ>e)pdqOQxjaIvzZMw5;F)_Z7?A@WRsBW(lZMF<|J z2%@B$emdXxq`auH+-O;MwLKjhZ4q^%H)Cde$MZ931ee*8b>SqUKo8R4s-YXjYtp?; z+TiQ-%PGC(?K8aq=eF--`%q!$$C2ZACZK8``|>L)QJz>b1F)^QS;NVs`CuUk zOT)N$QUKeUbAeGm4l9j++tridf_%^bFtqBw5#Ejx*&R(r2@&FxGu$z++*gbuj`#XV z>D|zt@IFty=1C@P8{0S2qw+0tY3NeFuJn(+LYi|XjXu6wv1-|Juv{bV-}HB37DCsC z4{tS#8wqBfj}m;UbYN`D*MBK?{|b6o>DIF`J2{iVkMG*MOOb{q<EJYiyE z1@+qEx-a-|jSmHcJ+5IXk}jRnw<;XfEg9GdJ+-wVFG^(X3;UL97v4qOSqx5jIk zm0Q2H5n0yWo7Cb1$ZN!|Zn^nc&eDB|c3QD@ec zN263$^sPUxyUk;=_OeTXU1<2i1Uj>lz1y2O=aO0x?!DiHpQ5A}}}X~Va!l^${j-;F;4*@)FJPDUeK&0C&4GhEt4=@sm!PYcFj^R(gS z5r$I=F4_;*>x{KdDeWd=x>Brx0rGoJkm)EfllB$l;q#6r4(6WkBy(LOz*JqW-1fyp z^z*uZJC!2Bg*qRa~7{(`mP&wNG(~X}0+@ zB-PnfU#J|lsOK~drOWD2hCN}t?U8Gd0(?4_COZFSDqA19(|G03?5UGI?I+rb_Q&lh zF9q+<{$CbgkSsQwrnG4;l%cfgG7S|nFCK2-Ofu2s*|JBhBI_~{yOa9?LNf~DpWK|< zAoVdhC$85dQ^qMTGB!f~{bNb_v6@GgJ*`2MW6k$m-Fan1rb*XmT#NO>A%*AgEcHG0 z#(XWq)jEd$`1styW)S$7ND{gA83oL?IYk;I)C>J%5q3iKb8en}hvpGi^W7hNN0+fK zvT6^9&-wyQkIUwq^w8|gq7xQs%sX1)pY<=_9yTuik|hTg9ky!-`9Y1@c~Uv&PIW8E zLQj4QxD=T)L^-chkc6Excv&az0O<4d$<;+yeAz_j-Vk#NZV=QUrMei!j9Hh~E|ZPg z>+He+Q!K$}2R@u|KKS8Wh(Ap0)MdCEOSBa9)`HB9IwSxKVzS!@6KcvL&D|M%G@K`|&YapzpJYH42p;C~V0 zlSL>`AdPHq0H%O4@m`ZH7p*6dw%y6uAE7%cE4r7 ziRe3;y9Rf#g>S#N{iImFoo$5h3$PLz7R%o+wZJ}BW;(53XItaC3e~9DR$-~|x}U=A zZ#0i-FZk`UojvAy)IJaYh8D1Sp#BFWSY@TCvzcz$4OJ9VGX_pl= z*#H|S{Q|~&uEm@}P)T=yl}tW$;ZQLe*jej}FUDR|JdC|l&W}0n^X|OLxx3uPA;SvW zif~qR?h%#BoRR*sGI0s(Rp*Sn+yFSo`wqPP)7r?wPXPJu)^#@WflT9MosxbYs!bI( z52x)e*Q&J!L#^72U%yVkPJ5sG>TR@TE_=bY=r6#UtI#bD>ZFJiE0fm2#Nf81tWnh@ z20YUx{5d7T*16>!*Qkqzc!sQXu5e+IBeR1Q9km8Xh>yS}9R8x(g!7}3p5jWkLg}Qd zwdBk!l)u_C^@zjEh#N+J=2-}&`YIQLk2Y+j_#Q5VRBr5eYn<*gJnXVJI-|?{Lhwp+z=@aHLnFc+K%4x94bXR%CB_s-v~Q=CR@p@}HH?{B z&Faig;Zub5XBOQlAy4p_MYDqKU$YlMe1W-Nb+3JjSB_@hl<&BfP;uaj=rOZA$J8$; z+&&QVw2vIdgWzXS)qmozpLXylpKtOhwk#tCpS-Ok3H|(6H96uQu?ygPZ!YvWWx0~P zBwnk_#WG|{LbWhRU7*$Y)W2u&Ph<^%^uhoNj!4TD-PJ_!U|<-6Gf)yx?F=qeE%7(k z`}pITpxEPRVgQi~DvOIo*;X9^wsIINR{k*c z?^Q#m{E9|;J$k;Dx@@z9-lBGn_Lf@CR8U0c4gr*DXRjt9@<=;QJHUf2y63yq>V}S> z$Zbx_G(F$nFyi-%&5Mn7E4Plhz8k8es|x(9R8F3K_OjHA@@%}sSuu5@s=Gt@nobV^ z7zftY58Jg!uBv|c+K-YGk2y~g?{|w2nB(d@k5leA*L2^PdPz=P&QgSHaL<(?6_RXQYR)PqN2Wh(KS};yJEi|rsV0Nu#EpqsD$1EVS2L{ju z)LnGra&Y++wtI}a4ixe1_s-n%>=R!%1xMl7oeW46cS?rOLBUWE_IfHle8R|!-j6+A z$XJQQCa7ze`+E!rhE&R?lnoDd(xO})msGA(hc}Lwk4@o4Pt$XjP>)E5-*19)i+zUF zmR!tFe#>dAm9Bg@qAXvpOBKjHNTU1Uce5oUW{nv08!EooxQlFX_HvZ2?dZ|TGnV`PGHFS!pwt8_= zgRhRv;CO?j&0Czs>+Cc=gNcn?Py5e=EXxJpeCKt7)mrX`f1#fxf4FI!aWyc)l-=CD zy0`^y3EgtExcWy4X9H3UW&~d7($@o(bG+x3wZ&#}x@D~M%oifP zbw5y!mKt{ExunfL^fulFJG9|MLdJA7%&M(9;dxhVhe^AUq#_d^zy1y95B6Ixpck_1 zdk2uFNLr(#P#i0|T|6>eoG|VDlXjA}m`zhHH7I8o!>R^WHAyAOIHAg~+Qqm_7&%*@ z+s18}{X$%1a!mE95h(zsJkT+Bmo_60Kp+Qs;__(2KXVJ3(~FU{dbsWw=e}N16POkD zZe8|*4IaS4J!I!-8sh?hDZ?}HNZ?#<{B@TF-KXWP1|~uEh_#!COei8zc1E}E^b`pk z3(KU%_w52C&nDa9C@y;cWgIsC@AsU;`W$hj=u)*K%t+Pto9L|$IY%A6`p7`ZC_K+Q zxP*P*1-oL$Rw$BSb=MB8Iw1R|0-pmFA$WQ22FU!)>{KkXBw0faxKa{mR)!O6lWZla z_YHPR20_v|c;-s2bX4!90h+LFMi5x+<^<)snaC)t1sQ?YLp9&$sPjhXNUFlrN&owc z0iOfJkLHCIH&!!*UZV&$sUU>Bsmrat+PKT!5Q|;9W@l5s=4i>E#>v@ta~Y1f;1BKl zcth~NmR}n>`&g-+C39z?SsPpyM9xDzA~3R=UH5Y*P;AKo*QFa*LHw$(P!)E59gf?- z;vSwG;*c;!n&iLN(Q-sD%>RChYeAu)@Do)k`{@we$Tk~c)T74#Mf�wN_TyrXRxw zQL24~Wa{GnoO*5EWw$XG{8uBqj)U5N64!3!byE5Km2S1EHXon#T8)7F1&_CK2LUi> zIJB|2+AspLZL;z4NO0))C}q;m>z$-mr#sOSVZX)F7(U6teE#6%J?#WMhNzS_hjZLw}P+|mSl~q9nAng2kyP&uUgk}Evf>v>#GAqdzP==LZWF;_Lo#Zoa5Ik_f%Ao7Ip4Ze?)183yBxER zY|n7Kzv*B)(8u#TwL=-L6EjG(ZhtxtkXXVwK)2FQ?gJhjO5n50^@h-!Wi2g8`zkfK zos1ZySOi8-Um=@N&sZdtq{Su)PUP5804@eS=CYU}$}{#05>a!*r;On!l19ek>hWa9 zt#ADF?GdD8%cae^LW^=8;bYq=lBNcv?{T`RpKqzkVRcTKRq3e9H|`zB8WD0JJW_V2 zuES)pJPz7+dVJm)kw9s~5G{c;Fex!fLwwRZc_}}W?KZY_{d2E?xwI?WwEDfH(BaCGLgzAH$jeY<)`O#az&m z?XA1At)qDl?Uh#=r%{-RND-mZ66ALMVou7)m72E$GE-oc4^Oj@5x07=Y@sMbZc1i> zb4#}*<7ZHKB(qia$-kLfiF+K=mWY;;QNX@Yvd`l%K{2Daj_5~;m`kXKTnTa7PcC|d zHXES?UZx)1r^`1&kzYV|BdtCFG-1VY{v2}LAu~nW8b!qHQ@6nh!%VBG&Zz`@7_*P5 zi5Og*nvtqv5{GwXK9pJ>EQP!~kPR567L1QF=k9k|fjb%ej&Y-pM{WF zn^+h#X72{P(B*hMJ;~J%;}!Cj{FrNlGaRVTIXky#*@#y+C^4PFRGPdx4qur)@vqj(&hqOk7`9V3E-xf zgcZ)(6-12B5fN33h)){J4V_)JLkydah9z;h^h_DOh@O`P)#}SwverrgV;^pvQ#%|5 zJhNQWf2}r^otX6H%cME8XBImFGS;pBvKlDjEMXgmrstAC8pce#i7Xh z(M+Vbcjo>TY13kdP;ba3j2FKzPgM3=aR zGCSC1Kb|ck-E|k+j6Bw;lq}0C_uNcLnFB8tU`1_>8kBkJhYtTSaUUvVVSc#0j_>85 z>By8LU9cTmQOR;iC?vr6Ww_hYhL;XFBW4&KLqwik>x<^oyw@wQJ$q|kA#}}jnlL9D zISj;inn0W@M+uMW3w8qDIX<=30A+^=?I67)Sev534>X!`tC8NRY<~^%88LT6v+V*fhj5U=U?HPM7wMO}*cRAhpSZ0##l?_p z8UCI$G?-u^cio)tR*Q4x+J;H}6Ri@}9=?BKFxoF9aHv8OL`ngBD|BtCOR3-0p!3)l zX~zowlqA@bu?pY*NH>d~=)IgSb(vIi$d7yvudd|LWlHh1XCGY&wX4i1VyrWQ_EuS5 z?wJnp+gUxGaybZWPIuQzYTeqL^-NB`{%oJeI85gTHW}t6#KKkF(U_;|s6VAU+rdd% zUE$UT^xPAMx3ttCR|8;9=A7l;F`Crot5+PF9{rtnm%6g(V}#B=RN;V!4{Gel9tqsB zuP!)~ho7v;w9p=Or`5<=ya(qDrnDqAXT=Gl$GltErrfXV%|vOF;2tLMN}NstWuLdx z!saze$-$~;+Ygs3MXXMobiMnuGTJi{9HV3S3c-kiNS80bK+-_(Lj${*kY&v<78T) zvn(+qXh0n{7ULp)GADhrZ1@boQlGw+le z(`R?@vsNTH5RRrQg;_aGf&!CT&#&Q8urZ+2^LNf)4~x0o@tmel^qnv9M$j(2jGR%o zu#RRuZyET^bshG@1+$PdEwk7t@T@&SUN!cHq(+VIbbadEvP>ZD-}87vplPJ=C_h=r z(74hKU{Y{H&wg^%?73xRe*Z-cc+nBQxoJaMyW3TxD+5u6>9o;dDw6G#TY73P)bQ37 zGfrU*%iOmbr!@>q0fKdi;rC8v?YQlfep_7+80#gP3-~z1A%P3ib#7$+*Ak?JR>J!= zf6GwwM4&r!oSkS~8N0o>Q|Y8`CZ#zQAEyFPP4hQxs{G$M*8j*lqgA~4y(rEvb~DS; z7&JPrneaFe4;s#n1Z(LrR4b>e2`a09>_3wKj(VX;iu9U~q%F4sEGNV7|0lgQ72ZQf z-2Uxb>9d|LbFr%FhIG z?}3Il5^xF7VeZngDMUU5XwUC$#V_7`Nm;DnhXc*$&{ok@C5$s!(rgT11Y?;~N^=2+ zW{HwV0QYZpVQtxb>DFs9e)Z=yiC;r^O6BGX%C+jiAu#?;V$NbfCcSjQ{Fx-Y`U-nt zPJS@_3%xU`@is|VjCd=&2 zk*$<`{sBc6W`5VHNN8C)9Cnub9Gp|;e9E9ewCWJTf)7hH2r=+|itUO1P@Rtk>3d zmd3+hOV^HB*CE+vq^ht(C(m@R&*+%iUW%#f43%IO-ru0v16w^_Q)3ASJeST^oY2>+ zZIKx)9>l18BEU(9VfzXkWZ(;b6%R9dCmdU! zbgFrhw*I-KlvT_%+iI}J+$y$U^_Ac$7t*i|MCKRM&24H>Ms?2=&hAA z$yI5*cg>;SUOS^i^z+>|cBuR2-Lwp-dyZAxPmQQlj3P6xJllAuFZBEN1W*LsEd zN`3LUE$IR_+)8(S!_Y4-rt@veEr+Kmw0vl>rmyI`*plcDFI#LHQuz|_OI4f-VoHt(IJ=wB3yKS8UT-hxp+GPrvc zXnDDT)y?X27ms-&9tPYV8hD@aIIM(yI1zrdncMMUg6eV72iU!jTye5+o{IXodh-Ky zPDbCQ+u%-Z*fjxTw^-+&JB)Z4VFei*zp@}dJ>)(>DH5CXJjSA`GrwI#Hy;o9T4lTH zjlV{{?!(Lst<&^Td zuAwzv!iT1T+7x~BE;B;GK_1vY*Fn3Olwv7ZY&sIaKp~9Z_f}sVYSSt-Y6jT+rc$!? zcH+8X+1ZH|!PS{Hy0C`V6ehTX+_sND(o4;6!3-Wh)BP41wWKc~`|M!VkH;B_zT3^d zF+(h7{7@fdt21&YeKz>=;BI@ZXn|Z)muOk%jba&k&DsP&v%JcGcFehQ&rJ#1W|tc_ zePL~=<84+5c>zcHUpwg8b0q(oLN`yicq_3JY+e~yV>dNb91?N(Z z6#g}ISF4AiuKbaWzD3ah!fA4*Iu@F@atPcVm0lDltQ;njx~N8dwCEp=GdQl&b{=|g z7|=!koK$E*(bN!yTiRFqjeK_Id94!FX3$F}f)g{PTgn)ESv*gQWOT>vGkQP|U955} zgIg2!t=a~99I*xdY8JaKgA+^@g2Y&nYuWRp_na`kOCc0o|(Hs66jxrEz8%Ia`&K$hvO3o!J#biO7hqO`Pp^d%slP z5|9v$fVO2%-~VJ{C}G7{%PrL1_0|P1^NX)wg%=~2)YzOij=m)UmLATBwZb-7j8c(*7~c7T1vI{JGxW>m@%urjrw;@#_NzFU zb?}fi_9BNO(*db&XF5F1U&*1^;wl^xP@lMaOU+izyTqbv#XqLWV;wg+$rc)%N(gfo zJPZn5iT2y%=2-qX^8gH%S3NfUm1*XnnH!Doo47b>cu`Ei+w0W6#9RMp@TvZRCKmViU@&}npg9k0GJ#7mo{}iur@ym**L@VNVD(8EJ-tWQlXxc)H z`)}B#qF-;vjpXs(&+w&)3$2%&IZeQx#gxkzKMII1Cr0-Ae+91R?#^c^XmK-3@=Wd= zid1!yun=l+3@vTeIY&=*DJ+309lcMi7_s+6`ejp^r{)z7cj3*NAl2*d9#;kM44n{2jgliFu!B&_HAa{ii9zA<8k@uH|_&Q+3G8FVI++3rU zsxygdNPjm6HW1Z>alc-@5HTH>=NP_*vSj z6`#fmy+g9`A$C#*0H_30DPBHfGegDCPdZeZ4Au9ToYRza>eqE>lwp9p%#U-5dW?=` zE${t{k}2;=cAW)+*lk2|Nlb~nj{k(J=}6ANceiYM{sz$(K}x+sm5?ITGZ+Xq83YBD zgNAb?N`pSByC!OcI&F_HFs)LioeAby8IJGrr;*C&ui5>&T0IPBz1C}C`JKh)Pv4cG zRhqYSQy8gpwZV13!x9d7zbh}WtnYYTY@~|I3V%WieA30pp;_6sfA^dFVO)3wy+@93VMOAV&W zh7fJZlVvgzMV@|+qa=g1_a(@Er9VX3o#&j7n^$CazaEL@^iP%Ijo@dZQvUS^3;=R- zNd8(=T6&O@L=cew)=`^kD)sI8{-dhg3mjIvR(nugNPv3Cs0|HZ7|B`n-dsZqy#+rE zR%!wr-?ZfBeJ7=#qJ4HRApYf8 zciG5;@9G|!rqlhDH2XUz-tk=&yfr%Wb$^OW_XoVEQUWQ81hv<)-&rzK-p1x_kyqZ6 zc-jR|SR6ilm5yqe5(@sX-nfwl{?epfAzEj^1*5Z>@>zs-GvDX#xblq*Dygk=$E>va#T!@CClfKc4!ryX z52dVy`=6>xax1yB0C22DwwYe`fHOfOYfKa;)1U?1S&dl|H91;RU)eIj1v>DcMhgE{ z-CZwhUIQKVz43Ofo|T<_qeRpCfc{c}I)@NJPnvgpj}#0#km)3uHG#LS1`Ul*NO6=k ze=#1+{p(4Pw1~oGP3T82R@PbLb4@hI3K*XU&4%(mBiSe_#%!i47=Pe(U^!SF?7N0x z4R0lj#l)3To%>0JRx;&A4n|QTAQ0{lUis6yU#eogO`L;6QqkbHx#wq%FdR6wr z{iW`!v*CkhaB;G|Zb2np@n_`jSCu>H$;{cHv%_j)#~v&}RwOnDW9G&jw$(}E1i~49 z!?h)n1zjeyeV>@IS5OW+NIH62y|!P~^JmW=801SS^?1@}iO#@sa`(v%`$5|Ju`pQA zuTRL7%_k3soeN z+%&xzLq|h#s}k_^10!k4IqPu5zgQ}S2DHV>rj?+G38w9Kf9OG8T;8Vq`7Tp7Mn%7e zvdEf3w7JDHUBd-<=~WHyqNTgJtrKdhU9$#jsh-3o@9Y8htX#6xm%dT9}IP4a*ChPuUoZJJV@dmD@{FgYYvS>U%tf$Sfa8gm&eXK~O)W8Q8pDyM% z-NoBAJG25s@eT+hUyaZIU=NizGN%V&*%8L*yC&`8aC^H~!&~KZkhTN~rvk2plWQ_m zV1jQVb35PRUXBWHp(PE6)PQIe;fdIGIpzfah0?DH{RDAGHO&DgZfnTZyg$7A9x4;1 zQcp$9kB6U1LU^h_rOcLhfMs@ed&uA#MA{sEtCNN+!Jr>%lwRTXIM3**3-bLB zPe9Vzy9AApjVC7GJx*|9fELDV$SiVu%>mNKELf$*Br;DWyQ60F*%mm>(^x>I{e;J8 z5~i5p9ntdoKoyoeZ11^$^h4c^1Gb)QS0K1Dagj9e(X8GkmHwV2sXNA@(vzo>6=N~g zU~C7f{3R9=%Y<NW!F4%0<;HDS3MCn9^Lb0HLwuZ~3e>Y59Z>?&sQZ@7S^MWt z`oO3156-{td_jB0bAF>c)Uh>2Xf%4U6Z$=NWy-;xeWyFm;3^1eZC_Wi<`)!i?Zk3Q ze?0QZp_(G^f5F+NO|@vl0`-He*)5H>&uk|4QRQspv_Fd)AM|~%rpASSD%Nb;pVEDS z8Z%)4&;noq)%`t(`D=S|Ys}s+Um@mC}e7jfFsqQ}1pEfVx# z+ed{kV2QN=PdIM3hYV;HIJ&Lu_Yo0rO*zSd-Y5~kv)HnuYzrR3L zvNd-fII$lyVi*)qG2y$CA_{~^OVCeK*L_}6WVbZ`$e(BV)4m@IhWT#S7c<_IWcx6s zk18L!+PpN`N_;OpDmIC+#*7|kWx~KpKr^tq!y|RQ1zY^CVnCgArq)ewc@f6 zCq#b^kR7f(-8Xx6?)%HXB))Pjh`aBg2Q1zv~e2gf$tG zBHa1I?#Ow9>#@T9jI-6z{~FsVCQyLFWX86hFykZ?*rI@HxqXaRS;j59cS!_wPjCYQ zr^+&@lZ=N}6i2EbVK(HtOM8#`>8_q(^B`fW8KQt#UC0-9Tdi%h^dr4+&TuPt&w7wl z+N3$E0s(1PE3WAEMkTT;sb4!9gA&~=unSGKXhT-*&)$ykeY-_hW0(?QrwBrqGmH7nZwAN*p;elwWm( zsgV*-67}YOW#&7;jLx_NG_x}L+1w(+C7&H&xghfd^;YT%60r5PH(W#xMP9seTBS;n zyZuFpv>FxX*0LLOP&Q&1P@k|}=r;-?+gxdn6m>aVQN^i9;>_nKjxnO}5wd-DMnTK> zY2gjs1ON>HJ-hA&FM6ZC~z;}@gXU^)*Ra-Yx+Hk1htZ|;-S@5pNwr{FC@;^v-C z7(26qzzzGB_sai`ZG!%)8M)R3$#3>c&zE>GbmH;}u2I%Z47*4Ne#h{3Ht?ifx%l7} z1jAmq`+DVt_0Mg5NxTHv{t=%??43d-E!_%GioI2Fi?*5PP-ISL=)j8+R?OTrUHp-X zCqV2SE~WmQik$s0x1cn>SWcF2pSVkSKP3}1w&)dIZAK8fkrJA5d@Z3R)G}AAsO-ow zzEd#$hGxB;s7tg=dsjv7hIlIm=XZUlm}*$wxt_6}zIgQ+Zpm!ZRMeDh;Nv^Cp!qYX zY8Iu8z7}7bk&60BiJ~AD<$@8kaG#_sclQb8s)|)DZIe>D-$|6wB#8gk`8#{7715>I z=BgH)>l&`H=2z1~^#l2(Y#T$ zYlRT@GwT^<>2c443`L0xLp8p}ps{{GB2M|q^PR$gvXM!h)c-UuUA^nedG4}!OGZmj zPs%xkp5$}ip_?H_$$ zreYNRJo?!jtwX%EhtC4=Xz0qHS>XD0h16?|O@v}$_OBtBckRpTsyQm7;er}n_n zZ|sqK%2r@zWUWgk-4x=%dK7d(u-i_Bgqa`XMA!Cbms+;E`N&wV8a5J@A2oHd!nT8u zm5KB@zz%BivU{u9rViovlE$pOl~XFT2xxs4NB3fC@UdJEs-lg`sfF;-IRXOj;eRRp zYj-Ki?KkEYt;CTb3&|Pl4ShFa$R{21=?%SUk$RPZ@D%m7I!5qW7sdVuGaGx0D;wdv zB+R+Gs8!on`i40|B5(F->K((w;rb)dwqSkAKhaD%b?kk1Y^6b9$Y}T%PC+TJgRfCs zgW-e58e4KY#zu`Lm~tebis?g@%l8-zhT2pWCTxD6%YXXs z*bc4k#skd7zc2lup0fm$JoCT8OtbdAkO1TA#I+c|(KGRW{iGW8J>R<&Rj{nu+ixRE z`Pu8qd}V@2-^zto;qUUB*}e}RS3YU(3P`sbD}DrSn7ZF{Rn4Z3pP3(pR#o15HSqgM z{hj=KywzR~<-7ehW-!C3bLwWFgXMcrA>JeT`!S4nN1lQ4)^~eM)M{uqX79r3F}liQ zpV|7^SAm8uQL|QxSb2I7iQOppeghfWoDc+{K#7Wr`YZOCj@vV>UNzOf+ZL86w5%TG z6!v2laDI$+)J)2KD*84Sv3e_=J%;rbLeIeakuLtKCI@x*xLwQ5vL zna$C0zPs&xo-?O--u9P-x@wVK(e4Hz5gbm?7(sBKV(vFk!iYpZV+M}c00-OsFPEvSnCDK zCGn33#N7c|qW2_7dqr=0`SbkOx%BNV-$Z^3$A%P0qIfjAHNcB~eKT88KMzSHq7Qm@ zOhp;3N`b{%dOM}$N39Xl5|n%-QvL?3Zc!Im2VcvzFPZj<@7Q+AxDOsP)71v9ilU}= z8VdfJi9auj>q_u2)_<1EkU9?2?q##Da_~0nZxz)nYex9>K8djCQ&ILCq}`gne%?Yt zcJ7)#e?-lt=%`zK4_|ZQjysoqeSGh|nw`mxth_~^+VT3P*z#7O^ZFpHp|^-Is96cg z$VY>n*+tz}AMRXLJw0I}G;rO%6gzw$Y!iyvPtG{;y1GM4X5akAP?5_tBRw;~;(V8a zQbS84Lc8#=hV8wlNe0R0EX6Cf%c8Y=P<TI9nAhXWFA`Y->Fesle+f-xuT_m_3?3$tQA~Ym)!qw9MDSo zXTj^l*9TU~nL(@KCGr6x99Gv2yRDcC0uZC`k_t zt(nYW3{qs@h)p}==uR~HDBF))1?$%ztbC34H=g- ztx8%2)$Zj4VDVNT@;4yRr>U;U_73m|H>#L%o5tB>TbZ%xfNH!tIV@y#Zx?kQzHLY<#U)<9&T@ee%XRN`tz?m_x7<&Icsc*5o@E73jofg zKHDAxBZS*2!@y*2vp6SrIbYyUZ8_ct-Z$}@;IFhg^UH?Z=9*37ZGl~f4;&(t!u+IV zE3=ABLY)f8;1stBNo2RflZhGa*U#Y?*?FUoduApQ9L=s*_% z`Z9A?GVF21svDsz9M?-Y{F|DxpG%4hV~cSRBGOL^3hU3%wJM|KAH>VWUOyUR2f=?N z3MZU!N4%X@(I8cxcl2|At9IV;Nu=nl1n|Fhd3h!Uvh7WPw)@w9puE0CWV!<5GT|SG z$=D;8lV6p_+l(B+#ipr1w(K3^NM><#3j%i*V^%aQWj^N@`~6$#<{ z=85rZfGI_hq}4Y6FbM_h-jjwLMyPEf(6sH^e(xDceG!F{AoIjGS=afaP;C{$vPz)m zp{*GmTTUDH5fvC#k5uLSR-igARSN3zJPbFj7A4rO(z_>&`?{Tx))heQFu(?qHVruk zs^a8J;0=P+YOARzXLyRrSWyK?k+kmu_(U^N5Z%7j8Z4;Giz8cfVCag-8*o; zA>%H~RhV))>)0S$kz`cX8N`?gpn#y;w^AbAl{qzL=}2i6NBsUTUIR?xpKFlq_-1Jc z4k`_%E&~h~Avh!ub|Brix|5$zqFlGwGk5MS>=F)Hw!=Z;rX{gDH~WT*lgP({=nw%k z?1nP0@1WL*NskXpdq#1PkUd?Etjka@B-)mjKqa7Re*3@XVtanzXJ4hLl=!%*&Q=%N z81*rHB3jT%gCQYD=OcEfm&l>i?ClD-Av{;HOyR}boPvXpzd-+_*I&*#7u;= z?(5&<9p%lMVa-IJzFx#Uc9KXNF$CliCOxf_t%m^g!R1IcG+xbj>*3-UOd5+>H3l+> z2Z)h!0trrvVXmyB&MP<|NpPceY6iXXc;8Edx@1}mt$w(TYL@Io`pLA>u|{(?v4> zJw_ETY`G7B5rBEsvcp88*hpdVW%ZlOiFt_MZM;13z-% z$l->TGbGk}{u217{PgT_-@NWpfNy}~%Tg;J(D4VhzSx8AN`>wRCsD7P! zdR8yjrh9BYRs3+RS4#vsJWT0>is$c4bo{C24I_m)jhj$5mgWg-ni@<2f@<`l`IZ&` zasCHFP#bYrr=q4byWc7L8LC7J?YvIu^Wta?FGCfbEe{y_y8OGOY_i&_#q!oAQ7~2X z2IsIA%k@X@@paSAo1hz(<;XsrX)T=0ZpoQUIp+eEw-veYOG%t(-7{C(lv*5|tMw;q zA$G@NF{E_S@%1s@+GIoTAp%I42W)8U_TijN7p{3%B}X(xqD%2SN>}Uz{8JN^lv_9- zZ#F#pr8zn!vMX?yu|DqsOV%i9CkndzXZS%B>GJJA;|XuM{Z;WQ$6|v(y1_aXQ6QXD z5sFgB+hTStQF)!olpmS&*sg(YIyyUrp9LBJ+-y|zPy6eTY}eB*yFvt55&w^j#l8UT z_6cS-P1nAdvJc~{&~@nhmeIOBT&j|kW&aV)Q{r$lyCQ@R^4l;;)B52xcY=l{H2Ch^ zOdKh+w;&rJY9U_-UBc9Qw_;VuQx8k0i=Nm2+>X}(Nje;wBMv2VBg^kv-z~a?Yt5Vj zO=`8lB_|%bturl;H+49ke^wSiNB7qs-t~SSb?zTLuZyg{b42<%mzK!NU)}F7_45`f zT75+W*Qz>Cw6H?dYVzaPe=Z1|dbTzYm3*#?<&=2c|Gc}}FEJCB_M6+UdOUta^>_-& z`kl|3U%K?wE%Ly;(q3dP7QpT8j>yBQafWw6Mb4sqC&9HKc$zaViFQP1(2f-1D=bm| z(DHWnkgmBW9t0d9V$}|bIPH=-1+t7RsY6?S#g94n-~A6z`lG19Wj~nbV_D_m&RuX; zg*n}UDyNiX%q_I4>28Ll1^4TuHQtV&uO6bdjbb?>tm{-YyySDSt0j1|CXq9^U5ohw~RY z!!|zDbR>#>vsCtgITQh$Ts)Qo5%_uGCc-~Q<_yca)1Nzk`8gy6SKqX|v~W7XT~iC< z)G~WG)^o2-r49Q`Lso=aL#$ol(%N)$;UXXbEv~&pDpY!OJ2WK!Q;Rv7ovmvDS{47k z%4@iT?QOrCul#d)`HPR!rdE#$YGXu${>HTkE;>h;3+RWonRkwvi{us^_sZr757q|C z!#aqLHT?9TJWG6{s)fUFsFM2g{T$O^XG?5J zZ7hBLQaxb%XHhudsMF{2H_IiSX5+>lQpH2iO4z1?YLnW}57&W$eCb`&EjfA(U zWiPakgx1F%uWcSEtRsSUV>N5XJ=5})y;c{@v)M7WwAn;{pR~jZFL(b#0y#H;I&aHK zynGUDfRlr^(}kVqg)1`#22R8%*Ge{hi@S?EF6}ITlnG@g*}{F@(XWS1LV;ebY@;TL zrg0Kg-07*)2qmqJkX*))H|W=CI&kC!;Rp)OkMVX#e>#>0X8Ivu&WUi0 zz{1s{*kRwyJyIDlkK%)GwOZDEbYRq~`Pn3$d`0xxx#_U5bNN6=DRBs&Q=wDCDPklj zF5sstkfVIZO=ci4eiG`Wigi5vOa;e+(-Mh>^O{)(q;7n}HQiOaZ0zjLTS_~ki`aw> z-!Z6fUgD{bsaV`P$1Enw6Xu-|MbB~SC36?J;LFVG+o}E`iHB{x?lY=$I`4BXyFl92 z$)L&|VW1LQ8JmL2qXRGw-vCXzWSg|rvH1;ee}y7H#%w^eUqcJZG^g+|x(g0ls~BE$ zNLp+pldygZoHBkUqAN4r8JU`c1NU-ekV#deCDt|-obA3W=0Ah(*OJbF%_ZIGBQXmFDfn%xshSqTF9>pPS966zT!@@o#@sr9&`~k~(2Sg?7M*MR)i3TazN@oUq$nU2sxaIqFZ|Tt$ z3kXHJ@e?(hwkUqGfV$u+uk!Wkpx2uaD-qOZ@749_B_62ply7)e?Td+P$y;d; v8B`7qj if (vpn.status == VpnStatus.connected || vpn.status == VpnStatus.connecting) { _busy = false; - timer.stop(); - await vpn.disconnect(); + await timer.disconnect(); if (hapticEnabled) HapticFeedback.lightImpact(); return; } diff --git a/lib/components/notification.dart b/lib/components/notification.dart index 18579aa..4f8ee21 100644 --- a/lib/components/notification.dart +++ b/lib/components/notification.dart @@ -1,10 +1,18 @@ import 'dart:io'; +import 'dart:ui' as ui; import 'package:flutter_local_notifications/flutter_local_notifications.dart'; class VpnNotificationManager { static final FlutterLocalNotificationsPlugin _plugin = FlutterLocalNotificationsPlugin(); static bool _initialized = false; + static String? _lastTimeLeft; + static String? _lastSpeedKbps; + + // Android channels are immutable — bump this if settings change. + static const _channelId = 'revolt_vpn_v4'; + static const _channelName = 'Revolt VPN'; + static const _notifId = 888; static Future init() async { if (_initialized) return; @@ -15,7 +23,6 @@ class VpnNotificationManager { await _plugin.initialize(initSettings); - // Request POST_NOTIFICATIONS permission on Android 13+ if (Platform.isAndroid) { final androidPlugin = _plugin .resolvePlatformSpecificImplementation< @@ -26,77 +33,61 @@ class VpnNotificationManager { _initialized = true; } - static String? _lastTimeLeft; - static String? _lastSpeedKbps; - static Future showOrUpdateStatus({ required String timeLeft, required String speedKbps, }) async { - // Skip update if nothing changed — prevents notification flicker - // on Android skins that animate every notification update. if (timeLeft == _lastTimeLeft && speedKbps == _lastSpeedKbps) return; - _lastTimeLeft = timeLeft; + _lastTimeLeft = timeLeft; _lastSpeedKbps = speedKbps; if (!_initialized) await init(); - // NOTE: The channel ID includes 'v2' to force Android to create a fresh - // notification channel. Android channels are immutable once created — if - // the old channel was created without 'ongoing: true', users would be - // stuck with a swipeable notification forever. - const androidDetails = AndroidNotificationDetails( - 'revolt_vpn_status_v2', - 'VPN Status', - channelDescription: 'Shown while VPN is active — non-dismissable', - importance: Importance.low, - priority: Priority.low, - // Non-dismissable while VPN is running - ongoing: true, - autoCancel: false, - // Silent updates — no sound or vibration each time stats refresh - playSound: false, - enableVibration: false, - onlyAlertOnce: true, - // Hide the auto-generated timestamp - showWhen: false, - // Show on lock screen - visibility: NotificationVisibility.public, - // Extra insurance against swipe-to-dismiss on aggressive Android skins - usesChronometer: false, - category: AndroidNotificationCategory.service, + final bodyText = 'Time: $timeLeft • $speedKbps'; + + final bigPictureStyle = BigPictureStyleInformation( + const DrawableResourceAndroidBitmap('notification_banner'), + largeIcon: const DrawableResourceAndroidBitmap('notification_icon'), + contentTitle: 'Revolt VPN', + summaryText: bodyText, + htmlFormatContentTitle: false, + htmlFormatSummaryText: false, ); - const notificationDetails = NotificationDetails(android: androidDetails); + final androidDetails = AndroidNotificationDetails( + _channelId, + _channelName, + channelDescription: 'Session timer and speed', + importance: Importance.low, + priority: Priority.low, + ongoing: true, + autoCancel: false, + playSound: false, + enableVibration: false, + showWhen: false, + visibility: NotificationVisibility.public, + usesChronometer: false, + category: AndroidNotificationCategory.service, + colorized: true, + color: const ui.Color(0xFF0D1117), + styleInformation: bigPictureStyle, + ); + + final details = NotificationDetails(android: androidDetails); try { - await _plugin.show( - 888, // Fixed ID — always updates the same notification - 'REVOLT VPN Active', - 'Time: $timeLeft • $speedKbps', - notificationDetails, - ); + await _plugin.show(_notifId, _channelName, bodyText, details); } catch (e) { - // If showing fails (e.g. permission revoked), try to recover by - // re-initializing and retrying once. _initialized = false; try { await init(); - await _plugin.show( - 888, - 'REVOLT VPN Active', - 'Time: $timeLeft • $speedKbps', - notificationDetails, - ); - } catch (_) { - // Give up — the VPN still works, just without the notification. - } + await _plugin.show(_notifId, _channelName, bodyText, details); + } catch (_) {} } } static Future cancel() async { if (!_initialized) return; - await _plugin.cancel(888); + await _plugin.cancel(_notifId); } } - diff --git a/lib/components/sidebar_contents/website_button.dart b/lib/components/sidebar_contents/website_button.dart index 27550b7..ef6496a 100644 --- a/lib/components/sidebar_contents/website_button.dart +++ b/lib/components/sidebar_contents/website_button.dart @@ -6,7 +6,7 @@ class WebsiteButton extends StatelessWidget { const WebsiteButton({super.key}); static Future launchWebsite() async { - final Uri url = Uri.parse('https://getrevolt.app'); + final Uri url = Uri.parse('https://userevolt.app'); if (!await launchUrl(url, mode: LaunchMode.externalApplication)) { debugPrint('Could not launch $url'); } diff --git a/lib/components/status_bar.dart b/lib/components/status_bar.dart index 4acce4d..b45b2b6 100644 --- a/lib/components/status_bar.dart +++ b/lib/components/status_bar.dart @@ -3,7 +3,19 @@ import 'package:provider/provider.dart'; import 'package:revoltvpn/logic/app_colors.dart'; import 'package:revoltvpn/logic/vpn_connection.dart'; import 'package:revoltvpn/logic/session_timer.dart'; +import 'package:revoltvpn/logic/server_list.dart'; import 'package:revoltvpn/components/online_dot.dart'; +import 'package:revoltvpn/screens/server_selector/selection_screen.dart'; + +// ── lib/components/status_bar.dart ────────────────────────────────────────── +// Two-card layout at the bottom of the main screen. +// +// Top card: server location from ServerList provider (flag + city). +// Tappable → opens server selector. Always visible. +// Bottom card: connection status (health dot + label + lock icon). +// +// Separated into two rows — no more RenderFlex overflow and ready for +// multi-server picker. class StatusBar extends StatelessWidget { const StatusBar({super.key}); @@ -14,57 +26,97 @@ class StatusBar extends StatelessWidget { builder: (context, vpn, timer, _) { final isConnected = vpn.status == VpnStatus.connected; final isConnecting = vpn.status == VpnStatus.connecting; - final serverHealthy = vpn.serverReachable || (isConnected && timer.hasSyncedOnce); + final serverHealthy = + vpn.serverReachable || (isConnected && timer.hasSyncedOnce); - return Container( - margin: const EdgeInsets.symmetric(horizontal: 24), - padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 12), - decoration: BoxDecoration( - color: AppColors.bgCard, - borderRadius: BorderRadius.circular(16), - border: Border.all(color: AppColors.slate15), - ), - child: Row( + final statusLabel = isConnected + ? (timer.hasSyncedOnce ? 'Online' : 'Syncing…') + : (isConnecting + ? 'Connecting…' + : (vpn.serverReachable ? 'Ready' : 'Offline')); + + // Read from the ServerList provider — the source of truth for + // which server is selected and what it looks like. + final server = context.watch().selected; + + return Padding( + padding: const EdgeInsets.symmetric(horizontal: 24), + child: Column( + mainAxisSize: MainAxisSize.min, children: [ - // Connection status — wrapped in Flexible to prevent overflow - // on narrow screens (the Row must fit both the status text - // and the online dot without RenderFlex errors). - if (isConnected) ...[ - Image.asset('assets/finland_flag_256.png', width: 20, height: 20), - const SizedBox(width: 8), - const Flexible( - child: Text('Helsinki, Finland', style: TextStyle( - color: AppColors.accent, fontWeight: FontWeight.w600, - fontSize: 13, letterSpacing: 0.5, - ), overflow: TextOverflow.ellipsis), - ), - ] else ...[ - Icon( - isConnecting ? Icons.sync : Icons.shield_outlined, - size: 18, - color: isConnecting ? AppColors.accent : AppColors.slate70, - ), - const SizedBox(width: 8), - Flexible( - child: Text( - vpn.statusMessage.toUpperCase(), - style: TextStyle( - color: isConnecting ? AppColors.accent : AppColors.slate70, - fontWeight: FontWeight.w600, fontSize: 13, letterSpacing: 1, + // ── Server location ────────────────────────────────────────── + GestureDetector( + onTap: () { + Navigator.of(context).push( + PageRouteBuilder( + transitionDuration: const Duration(milliseconds: 300), + pageBuilder: (_, __, ___) => const SelectionScreen(), + transitionsBuilder: (_, animation, __, child) { + return SlideTransition( + position: Tween( + begin: const Offset(1.0, 0.0), + end: Offset.zero, + ).animate(CurvedAnimation( + parent: animation, + curve: Curves.easeOut, + )), + child: child, + ); + }, ), - overflow: TextOverflow.ellipsis, + ); + }, + child: Container( + padding: + const EdgeInsets.symmetric(horizontal: 20, vertical: 12), + decoration: BoxDecoration( + color: AppColors.bgCard, + borderRadius: BorderRadius.circular(16), + border: Border.all(color: AppColors.slate15), + ), + child: Row( + children: [ + Image.asset(server.flagAsset, width: 20, height: 20), + const SizedBox(width: 8), + Expanded( + child: Text(server.name, + style: const TextStyle( + color: AppColors.accent, + fontWeight: FontWeight.w600, + fontSize: 13, + letterSpacing: 0.5, + )), + ), + const Icon(Icons.chevron_right, + color: AppColors.textDim, size: 20), + ], ), ), - ], + ), - const Spacer(), + const SizedBox(height: 8), - // Server health - OnlineDot( - isOnline: serverHealthy, - label: isConnected - ? (timer.hasSyncedOnce ? 'Online' : 'Syncing…') - : (vpn.serverReachable ? 'Ready' : 'Offline'), + // ── Connection status ──────────────────────────────────────── + Container( + padding: + const EdgeInsets.symmetric(horizontal: 20, vertical: 10), + decoration: BoxDecoration( + color: AppColors.bgCard, + borderRadius: BorderRadius.circular(16), + border: Border.all(color: AppColors.slate15), + ), + child: Row( + children: [ + OnlineDot( + isOnline: serverHealthy, + label: statusLabel, + ), + const Spacer(), + if (isConnected) + const Icon(Icons.lock, + color: AppColors.green50, size: 14), + ], + ), ), ], ), diff --git a/lib/logic/ad_manager.dart b/lib/logic/ad_manager.dart index b1b64be..259c4c0 100644 --- a/lib/logic/ad_manager.dart +++ b/lib/logic/ad_manager.dart @@ -73,7 +73,32 @@ class AdManager extends ChangeNotifier { return _loadCompleter!.future; } + // ── Show ad (or debug bypass) ───────────────────────────────────── + Future showAd(String adType) async { + // Debug bypass: fire fake AdMob callback so support ads work in dev. + // The server's ADMOB_BYPASS must be True for this to succeed. + if (!adsEnabled && kDebugMode) { + final deviceId = await CryptoService.getDeviceId(); + final nonce = '${Random().nextInt(0x7FFFFFFF)}-${DateTime.now().millisecondsSinceEpoch}'; + HivemindService.setExpectedNonce(nonce); + try { + final customData = jsonEncode({ + 'device_id': deviceId, + 'ad_type': adType, + 'nonce': nonce, + }); + final fakeUrl = Uri.parse( + '${AppConfig.hivemindApiPublic}/admob/callback' + '?signature=test&key_id=test' + '&custom_data=${Uri.encodeComponent(customData)}'); + await HivemindService.directGet(fakeUrl, timeout: const Duration(seconds: 8)); + return true; + } catch (_) { + return false; + } + } + if (!adsEnabled) return false; if (!_isAdLoaded || _rewardedAd == null) { @@ -123,7 +148,6 @@ class AdManager extends ChangeNotifier { }, ); - // Show with SSV options _rewardedAd!.setServerSideOptions(ssvOptions); await _rewardedAd!.show( onUserEarnedReward: (AdWithoutView ad, RewardItem reward) { diff --git a/lib/logic/hivemind_service.dart b/lib/logic/hivemind_service.dart index 405bac2..80defcc 100644 --- a/lib/logic/hivemind_service.dart +++ b/lib/logic/hivemind_service.dart @@ -1,5 +1,6 @@ import 'dart:async'; import 'dart:convert'; +import 'dart:io'; import 'dart:math'; import 'package:flutter/foundation.dart'; import 'package:http/http.dart' as http; @@ -10,6 +11,73 @@ class HivemindService { static String? _expectedNonce; static int _currentCallId = 0; + static const _ua = 'Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 ' + '(KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36'; + + static Future directGet(Uri uri, {Duration timeout = const Duration(seconds: 5)}) { + return http.get(uri, headers: {'User-Agent': _ua}).timeout(timeout); + } + + static Future directPost(Uri uri, String body, {Duration timeout = const Duration(seconds: 5)}) { + return http.post(uri, headers: { + 'Content-Type': 'application/json', + 'User-Agent': _ua, + }, body: body).timeout(timeout); + } + + static Future proxyGet(Uri uri, {Duration timeout = const Duration(seconds: 5)}) { + return _proxyRequest('GET', uri, timeout: timeout); + } + + static Future proxyPost(Uri uri, String body, {Duration timeout = const Duration(seconds: 5)}) { + return _proxyRequest('POST', uri, body: body, timeout: timeout); + } + + static Future _proxyRequest(String method, Uri uri, + {String? body, Duration timeout = const Duration(seconds: 5)}) async { + final socket = await Socket.connect('127.0.0.1', 10808, timeout: timeout); + try { + final target = uri.toString(); + final headers = { + 'Host': '${uri.host}:${uri.port}', + 'User-Agent': _ua, + 'Accept': '*/*', + 'Connection': 'close', + }; + if (body != null) { + headers['Content-Type'] = 'application/json'; + headers['Content-Length'] = body.length.toString(); + } + + final reqBuf = StringBuffer(); + reqBuf.write('$method $target HTTP/1.1\r\n'); + headers.forEach((k, v) => reqBuf.write('$k: $v\r\n')); + reqBuf.write('\r\n'); + if (body != null) reqBuf.write(body); + + socket.write(reqBuf.toString()); + await socket.flush(); + + final response = await socket.fold( + '', + (prev, chunk) => prev + String.fromCharCodes(chunk), + ).timeout(timeout); + + final parts = response.split('\r\n\r\n'); + if (parts.length < 2) throw Exception('Invalid proxy response'); + final headerBlock = parts[0]; + final respBody = parts.sublist(1).join('\r\n\r\n'); + + final headerLines = headerBlock.split('\r\n'); + final statusParts = headerLines[0].split(' '); + final statusCode = int.parse(statusParts[1]); + + return http.Response(respBody, statusCode); + } finally { + socket.destroy(); + } + } + static void cancel() { _currentCallId++; } @@ -18,12 +86,7 @@ class HivemindService { _expectedNonce = nonce; } - /// Fetch a real VLESS session config from the tunnel-internal API. - /// - /// Called AFTER the bootstrap tunnel is already up — all HTTP requests - /// go through the Reality tunnel to 10.254.254.1:5000 (redirected to - /// Flask by Xray's "api" freedom outbound). - static Future fetchConfigThroughTunnel({ + static Future fetchConfigDirectly({ void Function(int attempt, int total)? onAttempt, bool skipAdBypass = false, }) async { @@ -34,16 +97,14 @@ class HivemindService { _expectedNonce = nonce; debugPrint('[HivemindService] Call #$callId — nonce: $nonce'); - final url = _url('/session/status?device_id=$deviceId'); + final url = _publicUrl('/session/status?device_id=$deviceId'); - // Dev: fake ad callback when running in debug mode. - // Goes through the tunnel to 10.254.254.1:5000 — same internal API. - if (kDebugMode && !skipAdBypass) { + if (!skipAdBypass) { try { final customData = jsonEncode({'device_id': deviceId, 'nonce': nonce}); - final fakeUrl = _url( + final fakeUrl = _publicUrl( '/admob/callback?signature=test&key_id=test&custom_data=${Uri.encodeComponent(customData)}'); - await http.get(fakeUrl).timeout(const Duration(seconds: 8)); + await directGet(fakeUrl, timeout: const Duration(seconds: 8)); } catch (_) {} } @@ -53,7 +114,7 @@ class HivemindService { onAttempt?.call(i, maxAttempts); try { - final response = await http.get(url).timeout(const Duration(seconds: 5)); + final response = await directGet(url); if (response.statusCode == 200) { final data = jsonDecode(response.body); @@ -62,15 +123,8 @@ class HivemindService { debugPrint('[HivemindService] Nonce mismatch — retrying…'); } else if (data['active'] == true && data['vless_uuid'] != null) { final vlessUuid = data['vless_uuid']; - - // vless_ip is pinned — even if the API is MITM'd, the tunnel - // never goes anywhere except the real server IP. - final vlessIp = data['vless_ip'] ?? AppConfig.serverIp; - if (vlessIp != AppConfig.serverIp) { - throw Exception('API returned unexpected tunnel IP — possible MITM'); - } - - final vlessPort = data['vless_port'] ?? 8443; + final vlessIp = data['vless_ip'] ?? AppConfig.serverIp; + final vlessPort = data['vless_port'] ?? 443; final pbk = data['reality_pbk'] ?? ''; final sid = data['reality_sid'] ?? ''; final sni = data['reality_sni']; @@ -78,17 +132,15 @@ class HivemindService { final fp = data['reality_fp'] ?? AppConfig.realityFp; final xhttpPath = data['xhttp_path'] ?? AppConfig.vlessPath; - // Host header not set — server doesn't require it. - // Client falls through: host → serverName (SNI) → address. final vlessUrl = 'vless://$vlessUuid@$vlessIp:$vlessPort' '?security=${AppConfig.vlessSecurity}' '&type=${AppConfig.vlessType}' - '&path=${Uri.encodeComponent(xhttpPath)}' + '&path=$xhttpPath' '&pbk=${Uri.encodeComponent(pbk)}' '&sni=${Uri.encodeComponent(sni)}' '&sid=${Uri.encodeComponent(sid)}' '&fp=${Uri.encodeComponent(fp)}' - '#ReVoltVPN'; + '#Revolt VPN'; _expectedNonce = null; return vlessUrl; } @@ -106,8 +158,8 @@ class HivemindService { static Future checkHealth() async { try { - final url = _url('/health'); - final response = await http.get(url).timeout(const Duration(seconds: 3)); + final url = Uri.parse('${AppConfig.hivemindApiPublic}/health'); + final response = await directGet(url, timeout: const Duration(seconds: 3)); return response.statusCode == 200; } catch (_) { return false; @@ -117,8 +169,8 @@ class HivemindService { static Future verifySession() async { try { final deviceId = await CryptoService.getDeviceId(); - final url = _url('/session/status?device_id=$deviceId'); - final response = await http.get(url).timeout(const Duration(seconds: 5)); + final url = _tunnelUrl('/session/status?device_id=$deviceId'); + final response = await proxyGet(url); if (response.statusCode == 200) { final data = jsonDecode(response.body); return data['active'] == true; @@ -127,19 +179,15 @@ class HivemindService { return false; } - static Future disconnectAndCleanup() async { - final deviceId = await CryptoService.getDeviceId(); - final url = _url('/session/stop'); - try { - await http.post( - url, - headers: {'Content-Type': 'application/json'}, - body: jsonEncode({'device_id': deviceId}), - ).timeout(const Duration(seconds: 3)); - } catch (_) {} - } + // Idle sessions are culled server-side by the management loop + // after 2 minutes of no /status polls (user disconnected). + static void disconnectAndCleanup() {} - static Uri _url(String path) { - return Uri.parse('${AppConfig.hivemindApiBase}$path'); - } + // ── URL builders ────────────────────────────────────────────────── + + static Uri _publicUrl(String path) => + Uri.parse('${AppConfig.hivemindApiPublic}$path'); + + static Uri _tunnelUrl(String path) => + Uri.parse('${AppConfig.hivemindApiBase}$path'); } diff --git a/lib/logic/server_list.dart b/lib/logic/server_list.dart new file mode 100644 index 0000000..f2e62ac --- /dev/null +++ b/lib/logic/server_list.dart @@ -0,0 +1,69 @@ +import 'package:flutter/foundation.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +// ── lib/logic/server_list.dart ────────────────────────────────────────────── +// Server data model and ChangeNotifier — shared by StatusBar (shows current +// server name/flag) and SelectionScreen (lets user pick a server). +// +// Each server is defined by its tunnel IP/port. Reality keys (public key, +// shortId, fingerprint) come from AppConfig — all servers share the same +// Reality keypair and bootstrap UUID (same operator, different locations). +// +// When multi-server ships: +// - _all becomes a fetched list (from /api/servers or bundled config) +// - SelectionScreen shows multiple rows +// - select() triggers a disconnect/reconnect cycle if the tunnel is active + +class ServerInfo { + final String id; + final String name; + final String flagAsset; + final String ip; + final int port; + + const ServerInfo({ + required this.id, + required this.name, + required this.flagAsset, + required this.ip, + required this.port, + }); +} + +class ServerList extends ChangeNotifier { + static const _all = [ + ServerInfo( + id: 'finland', + name: 'Helsinki, Finland', + flagAsset: 'assets/finland_flag_256.png', + ip: '204.168.246.88', + port: 443, + ), + ]; + + int _selectedIndex = 0; + + List get all => _all; + int get selectedIndex => _selectedIndex; + ServerInfo get selected => _all[_selectedIndex]; + + // Loads persisted selection from SharedPreferences. + // Fire-and-forget — UI starts with default, updates when prefs load. + Future init() async { + final prefs = await SharedPreferences.getInstance(); + final saved = prefs.getInt('selected_server_index') ?? 0; + if (saved >= 0 && saved < _all.length && saved != _selectedIndex) { + _selectedIndex = saved; + notifyListeners(); + } + } + + // Switches to a different server. Persists the choice. + Future select(int index) async { + if (index == _selectedIndex || index < 0 || index >= _all.length) return; + _selectedIndex = index; + notifyListeners(); + final prefs = await SharedPreferences.getInstance(); + await prefs.setInt('selected_server_index', index); + } +} diff --git a/lib/logic/session_timer.dart b/lib/logic/session_timer.dart index 6c822d7..7838ead 100644 --- a/lib/logic/session_timer.dart +++ b/lib/logic/session_timer.dart @@ -1,11 +1,10 @@ import 'dart:async'; import 'dart:convert'; import 'package:flutter/foundation.dart'; -import 'package:http/http.dart' as http; +import 'package:revoltvpn/logic/hivemind_service.dart'; import 'package:revoltvpn/logic/app_config.dart'; import 'package:revoltvpn/logic/vpn_connection.dart'; import 'package:revoltvpn/logic/crypto_service.dart'; -import 'package:revoltvpn/components/notification.dart'; class SessionTimer extends ChangeNotifier { Timer? _timer; @@ -19,15 +18,9 @@ class SessionTimer extends ChangeNotifier { bool _hasSyncedOnce = false; int _consecutiveFailures = 0; bool _isDisconnecting = false; - bool _userInitiatedStop = false; bool _syncInProgress = false; - - int? _currentPort; - bool _portSwitchInProgress = false; - static const int _maxConsecutiveFailures = 3; - static const int _maxOfflineSeconds = 120; int _offlineSeconds = 0; @@ -36,9 +29,6 @@ class SessionTimer extends ChangeNotifier { int _lastUsedBytes = 0; double _currentSpeedKBps = 0.0; - String _lastNotifTime = ''; - String _lastNotifSpeed = ''; - SessionTimer({required this.vpnConnection}) { vpnConnection.addListener(_onVpnConnectionChanged); } @@ -58,11 +48,8 @@ class SessionTimer extends ChangeNotifier { return '$h:$m:$s'; } - // Lifecycle - - /// Fires whenever VpnConnection state changes. void _onVpnConnectionChanged() { - + // Restore timer if VPN was already running at app launch. if (vpnConnection.status == VpnStatus.connected && !isRunning && vpnConnection.isStartupRestoration) { @@ -70,21 +57,18 @@ class SessionTimer extends ChangeNotifier { return; } - - // The underlying VLESS tunnel may briefly flap. If we weren't - // explicitly stopped by the user, resume where we left off. + // Resume after brief tunnel disconnection. if (vpnConnection.status == VpnStatus.connected && !isRunning && - !_userInitiatedStop && + !_isDisconnecting && _hasSyncedOnce) { debugPrint('[Timer] VPN reconnected after blip — resuming.'); _resumeTicking(); return; } - - if (vpnConnection.status == VpnStatus.disconnected && isRunning) { - _stopInternal(); + if (vpnConnection.status == VpnStatus.disconnected && !_isDisconnecting) { + _doDisconnect('VPN tunnel dropped'); } } @@ -98,47 +82,32 @@ class SessionTimer extends ChangeNotifier { _consecutiveFailures = 0; _offlineSeconds = 0; _isDisconnecting = false; - _userInitiatedStop = false; - _currentPort = null; - _portSwitchInProgress = false; _timer?.cancel(); _timer = Timer.periodic(const Duration(seconds: 1), _tick); notifyListeners(); - - // Kick off the first sync — the UI will show real data as soon as it lands. _syncWithHivemind(); } void _tick(Timer t) { - - // Decrement the local clock as long as we're not in a network blackout. + if (_isDisconnecting) return; if (_hasSyncedOnce && _consecutiveFailures < _maxConsecutiveFailures) { if (_remainingSeconds > 0) { _remainingSeconds--; } } - - // If the server has been unreachable for too long, kill the VPN. - // Don't let an orphaned tunnel keep running forever. if (_consecutiveFailures >= _maxConsecutiveFailures) { _offlineSeconds++; if (_offlineSeconds >= _maxOfflineSeconds) { - debugPrint('[Timer] Offline for $_maxOfflineSeconds s — forcing disconnect.'); - _forceDisconnect('Session lost — server unreachable'); + _doDisconnect('Server unreachable'); return; } } - - // When our clock hits zero, disconnect immediately. Don't wait for the - // next server poll — the session is over and the user expects the VPN - // to drop right now. if (_hasSyncedOnce && _remainingSeconds <= 0) { - debugPrint('[Timer] Local countdown expired — disconnecting.'); - _forceDisconnect('Session expired'); + _doDisconnect('Session expired'); return; } @@ -147,68 +116,53 @@ class SessionTimer extends ChangeNotifier { _syncWithHivemind(); } - - // Uses the locally-decremented time so the notification stays in sync - // with the in-app display, not gated behind the 5 s server poll. - if (_hasSyncedOnce) { - final speedText = _currentSpeedKBps > 0.5 - ? '${_currentSpeedKBps.toStringAsFixed(1)} KB/s' - : 'Idle'; - if (formatted != _lastNotifTime || speedText != _lastNotifSpeed) { - _lastNotifTime = formatted; - _lastNotifSpeed = speedText; - VpnNotificationManager.showOrUpdateStatus( - timeLeft: formatted, - speedKbps: speedText, - ); - } - } - notifyListeners(); } - void _forceDisconnect(String reason) { - if (_isDisconnecting) return; // Already tearing down - debugPrint('[Timer] $reason — forcing disconnect.'); + Future disconnect({String reason = 'User requested'}) async { + await _doDisconnect(reason); + } + + Future _doDisconnect(String reason) async { + if (_isDisconnecting) return; + _isDisconnecting = true; + debugPrint('[Timer] Disconnecting: $reason'); + _timer?.cancel(); _timer = null; _currentSpeedKBps = 0.0; - _isDisconnecting = true; - VpnNotificationManager.cancel(); + _remainingSeconds = 0; + _hasSyncedOnce = false; + notifyListeners(); + + await vpnConnection.disconnect(); + + if (!_isDisconnecting) return; + _isDisconnecting = false; notifyListeners(); - // Await the disconnect so the tunnel is confirmed down before we - // consider the session fully cleaned up. - vpnConnection.disconnect(); } - - Future _syncWithHivemind() async { - // Never sync while the user is explicitly disconnecting, - // or while another sync is already in flight. if (_isDisconnecting || _syncInProgress) return; _syncInProgress = true; try { final deviceId = await CryptoService.getDeviceId(); final url = Uri.parse( - '${AppConfig.hivemindApiBase}/session/status?device_id=$deviceId'); - final response = await http.get(url).timeout(const Duration(seconds: 5)); + '${AppConfig.hivemindApiPublic}/session/status?device_id=$deviceId'); + final response = await HivemindService.directGet(url); if (response.statusCode == 200) { final data = jsonDecode(response.body); final bool active = data['active'] ?? false; if (!active) { - // Server killed the session — tear down and wait for it. - stop(); - await vpnConnection.disconnect(); + await _doDisconnect('Server ended session'); return; } _remainingSeconds = data['expires_in_seconds'] ?? _remainingSeconds; _usedBytes = data['used_bytes'] ?? _usedBytes; - final int deltaBytes = _usedBytes - _lastUsedBytes; if (_hasSyncedOnce && deltaBytes > 0) { _currentSpeedKBps = (deltaBytes / _pollIntervalSeconds) / 1000; @@ -217,32 +171,15 @@ class SessionTimer extends ChangeNotifier { } _lastUsedBytes = _usedBytes; - - // Port change — throttle engaged or disengaged - final serverPort = data['vless_port']; - if (serverPort != null && - _currentPort != null && - serverPort != _currentPort && - !_portSwitchInProgress) { - debugPrint('[Timer] Port changed $_currentPort → $serverPort — reconnecting…'); - _currentPort = serverPort; - _portSwitchInProgress = true; - - _timer?.cancel(); - _isDisconnecting = true; - await vpnConnection.disconnect(skipCleanup: true); - await vpnConnection.connect(skipAdBypass: true, quickReconnect: true); - - _resumeTicking(); - _portSwitchInProgress = false; + final capExhausted = data['cap_exhausted'] ?? false; + if (capExhausted) { + await _doDisconnect('Data cap reached'); return; } - _currentPort = serverPort; _consecutiveFailures = 0; _offlineSeconds = 0; _hasSyncedOnce = true; - notifyListeners(); } else { _markSyncFailure(); @@ -258,24 +195,10 @@ class SessionTimer extends ChangeNotifier { void _markSyncFailure() { _consecutiveFailures++; if (_consecutiveFailures >= _maxConsecutiveFailures) { - notifyListeners(); // let the UI show "Reconnecting…" + notifyListeners(); } } - - - void stop() { - _userInitiatedStop = true; - _isDisconnecting = true; - _timer?.cancel(); - _timer = null; - _currentSpeedKBps = 0.0; - _hasSyncedOnce = false; - _remainingSeconds = 0; - VpnNotificationManager.cancel(); - notifyListeners(); - } - void _resumeTicking() { _timer?.cancel(); _timer = Timer.periodic(const Duration(seconds: 1), _tick); @@ -284,21 +207,10 @@ class SessionTimer extends ChangeNotifier { notifyListeners(); } - void _stopInternal() { - _isDisconnecting = true; - _timer?.cancel(); - _timer = null; - _currentSpeedKBps = 0.0; - _hasSyncedOnce = false; - VpnNotificationManager.cancel(); - notifyListeners(); - } - @override void dispose() { vpnConnection.removeListener(_onVpnConnectionChanged); _timer?.cancel(); - VpnNotificationManager.cancel(); super.dispose(); } } diff --git a/lib/logic/vpn_connection.dart b/lib/logic/vpn_connection.dart index 506d19d..0414e5e 100644 --- a/lib/logic/vpn_connection.dart +++ b/lib/logic/vpn_connection.dart @@ -1,8 +1,8 @@ import 'dart:async'; +import 'dart:convert'; import 'package:flutter/foundation.dart'; import 'package:flutter_vless/flutter_vless.dart'; import 'package:revoltvpn/logic/hivemind_service.dart'; -import 'package:revoltvpn/logic/app_config.dart'; enum VpnStatus { disconnected, @@ -23,7 +23,6 @@ class VpnConnection extends ChangeNotifier { String? _errorMessage; String? get errorMessage => _errorMessage; - // True when the app was killed and reopened while the VPN was running. bool _isStartupRestoration = false; bool get isStartupRestoration => _isStartupRestoration; @@ -53,19 +52,18 @@ class VpnConnection extends ChangeNotifier { try { await _vless.initializeVless( providerBundleIdentifier: 'com.paladinvpn.app', + notificationIconResourceType: 'drawable', + notificationIconResourceName: 'notification_icon', ); _initialized = true; } catch (e) { debugPrint('[VPN] VLESS init error (expected on emulator): $e'); } - // Periodic server health check — now goes through the tunnel - // (AppConfig.hivemindApiBase = http://10.254.254.1:5000/api) _checkHealth(); _healthTimer = Timer.periodic(const Duration(seconds: 30), (_) => _checkHealth()); - // Check if VPN was already running (app killed and reopened) try { final coreVersion = await _vless.getCoreVersion(); debugPrint('[VPN] Xray core version: $coreVersion'); @@ -95,8 +93,6 @@ class VpnConnection extends ChangeNotifier { _setStatus(VpnStatus.disconnecting, 'Tearing down…'); break; case VlessConnectionState.unknown: - // Native backend emitted an unrecognized state — treat as error - // only if we aren't already in a terminal state. if (_status != VpnStatus.connected && _status != VpnStatus.disconnected) { _setStatus(VpnStatus.error, 'Connection failed'); @@ -105,20 +101,18 @@ class VpnConnection extends ChangeNotifier { } } - // ── Connect (V2: bootstrap → poll → real tunnel) ──────────────────── + // ── Connect ──────────────────────────────────────────────────────── // - // Flow: - // 1. Connect with hardcoded bootstrap VLESS URL (bundle in APK) - // 2. Through bootstrap tunnel, poll 10.254.254.1:5000 for real config - // 3. Disconnect bootstrap - // 4. Connect with real per-session VLESS URL + // 1. Direct HTTPS to the public API → get per-user VLESS URL + // 2. Start tunnel directly with that URL (no bootstrap, no switch) // - // Parameter quickReconnect is used by the session timer for throttle - // port-swaps — same bootstrap flow, but skip the AdMob bypass (session - // is already active). + // The only hardcoded data in the APK is the Reality public key and + // shortId (needed for every Reality handshake — unavoidable). + // The tunnel UUID is per-user, assigned by Hivemind via AdMob SSV. - Future connect( - {bool skipAdBypass = false, bool quickReconnect = false}) async { + Future connect({ + bool skipAdBypass = false, + }) async { if (_status == VpnStatus.connected || _status == VpnStatus.connecting) { return false; } @@ -130,6 +124,15 @@ class VpnConnection extends ChangeNotifier { return false; } + if (!kIsWeb) { + final ok = await _vless.requestPermission(); + if (!ok) { + _errorMessage = 'VPN permission denied.'; + _setStatus(VpnStatus.error, 'Permission required'); + return false; + } + } + _setStatus(VpnStatus.connecting, 'Establishing secure channel…'); _errorMessage = null; @@ -139,122 +142,72 @@ class VpnConnection extends ChangeNotifier { return true; } - // ── Phase 1: Bootstrap tunnel ──────────────────────────────────── - try { - final bootstrapParsed = FlutterVless.parse(AppConfig.bootstrapVlessUrl); - await _vless.startVless( - remark: 'ReVoltVPN-Bootstrap', - config: bootstrapParsed.getFullConfiguration(), - ); - } catch (e) { - debugPrint('[VPN] Bootstrap tunnel error: $e'); - _errorMessage = 'Tunnel failed to start.\nTry reconnecting.'; - _setStatus(VpnStatus.error, 'Connection failed'); - return false; - } - - if (_cancelled) { - await _safeStopVless(); - _setStatus(VpnStatus.disconnected, 'Tap to connect'); - return false; - } - - // Let the bootstrap tunnel stabilise before API calls - await Future.delayed(const Duration(seconds: 1)); - - // ── Phase 2: Fetch real config through bootstrap tunnel ────────── _setStatus(VpnStatus.connecting, 'Fetching config…'); String realUrl; try { - realUrl = await HivemindService.fetchConfigThroughTunnel( + realUrl = await HivemindService.fetchConfigDirectly( skipAdBypass: skipAdBypass, onAttempt: (attempt, total) { - if (!quickReconnect) { - _setStatus( - VpnStatus.connecting, 'Contacting server ($attempt/$total)…'); - } + _setStatus( + VpnStatus.connecting, 'Contacting server ($attempt/$total)…'); }, ); } catch (e) { debugPrint('[VPN] Config fetch error: $e'); - await _safeStopVless(); - final raw = e.toString().replaceAll('Exception: ', ''); - if (raw.contains('Cancelled')) { - return false; - } else if (raw.contains('timed out') || - raw.contains('Session not activated')) { + if (raw.contains('Cancelled')) return false; + if (raw.contains('timed out') || raw.contains('Session not activated')) { _errorMessage = 'The server did not respond in time.\nCheck your connection and try again.'; _setStatus(VpnStatus.error, 'Server unreachable'); } else { - _errorMessage = raw; - final short = raw.length > 35 ? '${raw.substring(0, 35)}…' : raw; - _setStatus(VpnStatus.error, short); + _errorMessage = e.toString().replaceAll('Exception: ', ''); + _setStatus(VpnStatus.error, 'Config fetch error'); } return false; } if (_cancelled) { - await _safeStopVless(); _setStatus(VpnStatus.disconnected, 'Tap to connect'); return false; } - // ── Phase 3: Switch to real tunnel ─────────────────────────────── _setStatus(VpnStatus.connecting, 'Securing connection…'); - await _safeStopVless(); try { - final realParsed = FlutterVless.parse(realUrl); + final parsed = FlutterVless.parse(realUrl); + final configJson = + jsonDecode(parsed.getFullConfiguration()) as Map; + + // Inject HTTP inbound for tunnel-internal API calls. + final inbounds = (configJson['inbounds'] as List?) ?? []; + inbounds.add({ + 'tag': 'http-proxy', + 'port': 10808, + 'listen': '127.0.0.1', + 'protocol': 'http', + }); + configJson['inbounds'] = inbounds; + await _vless.startVless( - remark: realParsed.remark.isNotEmpty ? realParsed.remark : 'ReVoltVPN', - config: realParsed.getFullConfiguration(), + remark: parsed.remark.isNotEmpty ? parsed.remark : 'Revolt VPN', + config: jsonEncode(configJson), ); } catch (e) { - debugPrint('[VPN] Real tunnel error: $e'); + debugPrint('[VPN] Tunnel start error: $e'); _errorMessage = 'Tunnel failed to start.\nTry reconnecting.'; _setStatus(VpnStatus.error, 'Connection failed'); return false; } - if (quickReconnect) { - _setStatus(VpnStatus.connected, 'Secured'); - } else { - // Give the tunnel a moment to stabilise, then verify - _setStatus(VpnStatus.connecting, 'Verifying session…'); - await Future.delayed(const Duration(seconds: 1)); - - bool sessionOk = false; - for (int attempt = 0; attempt < 2; attempt++) { - sessionOk = await HivemindService.verifySession(); - if (sessionOk) break; - if (attempt == 0) { - debugPrint('[VPN] verifySession attempt 1 failed, retrying…'); - await Future.delayed(const Duration(seconds: 2)); - } - } - - if (!sessionOk) { - debugPrint( - '[VPN] Tunnel started but no server session — tearing down.'); - try { - await _vless.stopVless(); - } catch (_) {} - _errorMessage = 'Session not confirmed by server.\nPlease try again.'; - _setStatus(VpnStatus.error, 'Session rejected'); - return false; - } - - _setStatus(VpnStatus.connected, 'Secured'); - } + _setStatus(VpnStatus.connected, 'Secured'); return true; } - Future disconnect({bool skipCleanup = false}) async { + Future disconnect() async { _cancelled = true; - HivemindService.cancel(); // abort any in-progress polling + HivemindService.cancel(); if (_status == VpnStatus.disconnected || _status == VpnStatus.disconnecting) { return; @@ -268,18 +221,28 @@ class VpnConnection extends ChangeNotifier { return; } + bool timedOut = false; try { await _vless.stopVless().timeout( const Duration(seconds: 5), - onTimeout: () => debugPrint('[VPN] stopVless() timed out.'), + onTimeout: () => timedOut = true, ); } catch (e) { debugPrint('[VPN] VLESS stop error: $e'); + _errorMessage = 'VPN shutdown error.\nPlease restart the app.'; + _setStatus(VpnStatus.error, 'Shutdown failed'); + return; } - if (!skipCleanup) { - HivemindService.disconnectAndCleanup(); + if (timedOut) { + debugPrint('[VPN] stopVless() timed out after 5 s — ' + 'tunnel may still be active.'); + _errorMessage = 'VPN did not shut down cleanly.\n' + 'Please restart the app.'; + _setStatus(VpnStatus.error, 'Shutdown failed'); + return; } + _setStatus(VpnStatus.disconnected, 'Tap to connect'); } @@ -294,26 +257,13 @@ class VpnConnection extends ChangeNotifier { notifyListeners(); } - Future _safeStopVless() async { - try { - await _vless.stopVless().timeout( - const Duration(seconds: 5), - onTimeout: () => debugPrint('[VPN] Bootstrap stopVless() timed out.'), - ); - } catch (e) { - debugPrint('[VPN] Bootstrap stop error: $e'); - } - } - @override void dispose() { _healthTimer?.cancel(); if (_status == VpnStatus.connected || _status == VpnStatus.connecting) { try { _vless.stopVless(); - } catch (_) { - // Best-effort — widget is being destroyed anyway - } + } catch (_) {} } super.dispose(); } diff --git a/lib/main.dart b/lib/main.dart index b8d1473..10f7d58 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -8,6 +8,7 @@ import 'package:package_info_plus/package_info_plus.dart'; import 'package:revoltvpn/logic/vpn_connection.dart'; import 'package:revoltvpn/logic/session_timer.dart'; import 'package:revoltvpn/logic/ad_manager.dart'; +import 'package:revoltvpn/logic/server_list.dart'; import 'package:revoltvpn/logic/consent_manager.dart'; import 'package:revoltvpn/logic/app_colors.dart'; import 'package:revoltvpn/screens/intro.dart'; @@ -59,6 +60,7 @@ class ReVoltApp extends StatelessWidget { update: (_, vpn, prev) => prev ?? SessionTimer(vpnConnection: vpn), ), ChangeNotifierProvider(create: (_) => AdManager()), + ChangeNotifierProvider(create: (_) => ServerList()..init()), ], child: MaterialApp( title: 'ReVolt VPN', diff --git a/lib/screens/intro.dart b/lib/screens/intro.dart index 3c86017..4196b25 100644 --- a/lib/screens/intro.dart +++ b/lib/screens/intro.dart @@ -90,7 +90,7 @@ class _IntroScreenState extends State with WidgetsBindingObserver { ), const SizedBox(height: 4), const Text( - 'REVOLT VPN', + 'Revolt VPN', style: TextStyle( color: AppColors.textWhite, fontSize: 28, diff --git a/lib/screens/server_selector/selection_screen.dart b/lib/screens/server_selector/selection_screen.dart new file mode 100644 index 0000000..7d5dba1 --- /dev/null +++ b/lib/screens/server_selector/selection_screen.dart @@ -0,0 +1,63 @@ +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; +import 'package:revoltvpn/logic/app_colors.dart'; +import 'package:revoltvpn/logic/server_list.dart'; + +// ── lib/screens/server_selector/selection_screen.dart ────────────────────── +// Server picker — reads the server list from the ServerList provider. +// Each row shows a flag + city name. Tapping a row persists the choice +// and pops back. No latency measurement — the app runs inside a Reality +// tunnel and must not emit separate probe traffic. + +class SelectionScreen extends StatelessWidget { + const SelectionScreen({super.key}); + + @override + Widget build(BuildContext context) { + final serverList = context.watch(); + + return Scaffold( + backgroundColor: AppColors.bgDeep, + appBar: AppBar( + backgroundColor: AppColors.bgSurface, + elevation: 0, + leading: IconButton( + icon: const Icon(Icons.arrow_back, color: AppColors.textWhite), + onPressed: () => Navigator.of(context).pop(), + ), + title: const Text( + 'Select Server', + style: TextStyle( + color: AppColors.textWhite, + fontWeight: FontWeight.w600, + ), + ), + ), + body: ListView.builder( + itemCount: serverList.all.length, + itemBuilder: (context, index) { + final server = serverList.all[index]; + final isSelected = index == serverList.selectedIndex; + + return ListTile( + leading: Image.asset(server.flagAsset, width: 28, height: 28), + title: Text(server.name, + style: TextStyle( + color: isSelected ? AppColors.accent : AppColors.textWhite, + fontWeight: FontWeight.w600, + )), + trailing: isSelected + ? const Icon(Icons.check, color: AppColors.accent) + : null, + onTap: () { + serverList.select(index); + Navigator.of(context).pop(); + }, + contentPadding: + const EdgeInsets.symmetric(horizontal: 20, vertical: 8), + ); + }, + ), + ); + } +} diff --git a/lib/screens/settings/in_settings/haptic.dart b/lib/screens/settings/in_settings/haptic.dart index cf72522..8c06622 100644 --- a/lib/screens/settings/in_settings/haptic.dart +++ b/lib/screens/settings/in_settings/haptic.dart @@ -2,16 +2,6 @@ import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:revoltvpn/logic/app_colors.dart'; -// ── lib/screens/settings/in_settings/haptic.dart ──────────────────────────── -// Toggle for light haptic feedback on successful connect/disconnect. -// -// Top-level bool (hapticEnabled) is read synchronously by connect_button.dart — -// no await, no SharedPreferences lookup on every tap. The tile loads the -// persisted value once and keeps the global in sync on every toggle. -// -// SharedPreferences key: haptic_feedback_enabled (default: false — off). - -// lib/components/connect_button.dart reads this directly. Keep it exported. bool hapticEnabled = false; class HapticFeedbackTile extends StatefulWidget { diff --git a/pubspec.lock b/pubspec.lock index 047ec74..3d27d57 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -207,26 +207,26 @@ packages: dependency: "direct main" description: name: flutter_vless - sha256: aa66ea904e7593cc9b2f8f12c291a3a1f404377125d5cd9faa6399d444f511ab + sha256: db242f7fe007d35b4d51c5bd5b895d816f141e4d4afc7038c3b6228c1c66dfb5 url: "https://pub.dev" source: hosted - version: "1.1.4" + version: "1.1.5" flutter_vless_android: dependency: transitive description: name: flutter_vless_android - sha256: f2f2c81a410a7341ea05dfe3643b213530be44d6574bc91fa29c0bd417d97ac2 + sha256: "5e6fe73d3606ed8c73e87fac15efa7631e12ce18d39a4bd4e13b6c097c6d52b9" url: "https://pub.dev" source: hosted - version: "1.1.4" + version: "1.1.5" flutter_vless_macos: dependency: transitive description: name: flutter_vless_macos - sha256: "096c21bd9728ee2856325c85f60bc7075dda44f99205dd0baa82e5a1223a62a2" + sha256: "2651eda1ae75aff8d0acd74f3d38980c71e7629075eee7aa57e52897479f973f" url: "https://pub.dev" source: hosted - version: "1.1.4" + version: "1.1.5" flutter_vless_platform_interface: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 12bbd6a..99d3bf1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -15,7 +15,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. # Read more about iOS versioning at # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html -version: 3.1.0+22 +version: 3.2.0+23 environment: sdk: ">=3.0.0 <4.0.0" @@ -30,7 +30,7 @@ dependencies: google_fonts: ^6.1.0 provider: ^6.1.1 google_mobile_ads: ^4.0.0 - flutter_vless: 1.1.4 + flutter_vless: 1.1.5 http: ^1.6.0 shared_preferences: ^2.5.5 url_launcher: ^6.3.2