From cc7cae60a992e505429b2fbb39a7cd40d5a4c198 Mon Sep 17 00:00:00 2001 From: Savinda Senevirathne Date: Mon, 21 Dec 2020 16:43:39 +0530 Subject: [PATCH] Provide error message when cannot bind to listening ports at startup. (#199) --- src/comm/hpws.hpp | 29 +++++++++++++++++++++++++---- test/bin/hpws | Bin 31336 -> 35464 bytes 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/comm/hpws.hpp b/src/comm/hpws.hpp index 728c0b76..fb9e84dd 100644 --- a/src/comm/hpws.hpp +++ b/src/comm/hpws.hpp @@ -589,12 +589,12 @@ namespace hpws std::variant accept(const bool no_block = false) { -#define HPWS_ACCEPT_ERROR(code, msg) \ - { \ +#define HPWS_ACCEPT_ERROR(code, msg) \ + { \ accept_cleanup(mapping, child_fd, buffer_fd, pid); \ - return error{code, msg}; \ + return error{code, msg}; \ } - + int child_fd[2] = {-1, -1}; int buffer_fd[4] = {-1, -1, -1, -1}; void *mapping[4] = {NULL, NULL, NULL, NULL}; @@ -845,7 +845,28 @@ namespace hpws char buf[1024]; int bytes_read = recv(fd[0], buf, sizeof(buf) - 1, 0); if (bytes_read < 1) + { + int status; + // Wait and obtain exit status code of hpws. + if (waitpid(pid, &status, 0) > 0) + { + switch (WEXITSTATUS(status)) + { + case 70: + HPWS_SERVER_ERROR(31, "Could not create listen socket."); + + case 72: + HPWS_SERVER_ERROR(32, "Could not bind socket for listen."); + + case 74: + HPWS_SERVER_ERROR(33, "Listen() failed."); + + default: + break; + } + } HPWS_SERVER_ERROR(2, "nil message sent by hpws on startup"); + } buf[bytes_read] = '\0'; if (strncmp(buf, "startup", 7) != 0) diff --git a/test/bin/hpws b/test/bin/hpws index 3776bcdc23ad9832b95ccafc35c846fc2d9b025e..4a51c2243633fd9109d576d4b1f6aa96b4237106 100755 GIT binary patch literal 35464 zcmeHwe_&MAmH$gfAX35vHHsGXX#qhYBuEetl<>w%u*1trV$9Kqct*N3g9@TP<~~ohRC+>T3M4=KJ}ad+(c@n1R~e zKfez$_nmXkIrrRi&pr3t_ukCgGJny6+?*W89D|%I9YRH;6lS)r*dEg-C}um;oYU|* z%K5l67;v88RQ+sKpjI6{TC^z(G=30D@=eQCi2kK+9&M<@Xvi{O;|3~L-m0*sbR1U@ ziB!&DXB^Oj)G$H>K$x`^LXzy1suo4|P0DNm?G2 zFGXv4{`f`#KU6MKXvdU>?|Sg*E@+CA7e%`I2HjpZyR_>DOlihpQe(rKsZ%C3)=q3} zXl~m$apSb96Q@ooX$_Z5mVQ${X|KL+xwORb)~1m9GXWFF`pr$1Z~yY~k!Np=w@v%r zjQ4;4WPL|2>#o6{88;`NXQOh7yB2@!fBBqf+w|9yqb5K8_US+T`rD@imG!s=>;n;e z0ZI*o4?=-~@NZ_JFU%sJGTZ^Qx;%^gXS2xpX%_t5S@ap3h5irFWuShI$)eB0S>!*S zMa~mh=o_=(FN7QyfBlbdWYPcoS@5$U!0j&t@I_hZzlyqn>~KRCJ%__S7Y!hPeHQui zv&eZcOS@fJ=wHf$|4|lvYZm-1S=#;QEcDe`@ZZjY&&`5&v*7Q_Vz=|M_~D~j=)ao< zzdB2QmuI1$l10xOv&e~Oq2Hc`{?aV%K9L1~OBVdaS=!|iK9E0uF^fLYEcjQl$T^XP zeo_{FHfO=#p9TL~7W~mH`g}4A{d-yHpU;Bt%_8TeEd8CCMb3~cetT9H`HyD7zncZW zF$;bu@E1D8&Q_h5n05UH;72&;I9u;<(G$lpdC8m5pZL`pZ}Nv{HGO?QdI#%#O=MF` zG|aWVtfb7Ts#@C=Zmw#LR!5>$RZi8yWs9q7Ly^$hhSq2(vTX6(#&C0JS@oL6kg6N7 zX3oMTRgqA2t;3TIk%nkU&RVOQLQT&68*Zp-i8M4vt3r`TIMP~G*CMsiP;0cRuCaP; ztFts%Q6{+N&<3j5+S+LJTefIvRck1+J`{nlXnnZWS-Nyl)!bz(tJ+#aRW+eVw4tt{ zraBs`s%wCbtW*l{tThy^stGqYhianiA=EO=Y>4L#tyK-p4bTIht@R-#UAnTQa{hHf z!D=WZa>Py)`g-@Ycx{RvdIZ;Y=}Db(QtF4e6~7ks~gbEh|;ev8fj~$ zU7T=Bw4u4yX;FA>4yU1cYISXGq^i1k6V9P%b2QxIv^K15u5M%t&1|AB99ahsf$3`2 zRn^q5tE#JRXml{Bb+uJBuo9#<(odQl0F8~|8m(eWbwk8~ty&stoplY3U}>su5d<-< zA*h2|w%^cP7p6d%iml?mvxeHDn!SbYPD>a9BB7e~q@z}#HFd46HPy{^>|%9fEd;=G zBO<@4b*)pU9HFK$+)67z%R2GHI!BEZdRDWsnnPdR*l=rz;+w+j;pbJHC3;FURW~$K z8#Gacsj#*R_J#`0T9WaSvZ}JGQs?SL3+K$Onp{#g#XrrQO}^YmPA)0uEY3yF%zv1y z`bcze=f@l zny?+obFN2RhqnbhTG0*i%?gt-vd8qbs{r1eh&cwZ<^Az1i9VZRGOK&g>wz@)K@CM%14?jWg%R2huFVpzr z{qQq1-uX;l`4t-P_QNmG_}TsN*J}Lge)uICzqKEJg~spdhhL@f9sTfi8h^YWex1fU zceoA@W1kj{cl+U^8h>nyqUWB}-j^P?@ECCaNLzS2kLkAX#Xhy;^jP?FEWB98Ratsn>hlS_tG{+GOuU%KFx-5L2 zAx3%3!n1929JlcPB??rgExZ{U@^o8xOdS8{vG7BEEKY8B1)}Va$(i~nu<*kye36A8 zZsA8-_<)6XExehttR83KM_BZw7XAziKh47P8iF}yTlljK5@pcBpKakQE&NCeztX~= zYvEU0_>WuodJ8|w!nas>9eSj8qlG`;qTg!aFR<|2Exc>t+b#Ts7JjFNzsSPxvhbg< z@DEt{(H4HUg&$+#_geU|7QVy6Uu@xzSom=kzRSXoxA4a-{3RCtxP`ye!ly0#1PkA7 z;U`-79t&S$;T;`M=>L-}e1U~8weUq2zRbdpwD6NHyldevv+(0A{1gjcYT;$+*LBk@ z{8Wp6wuQgk!UrwfuABghH$&UhX^y&ds_wGN0=erYZ3TC!VK-+YJtB)cs$`sfxk|e zq1>A-@RtcQgnOj|{}W+`ZqF6?Zo&-NUXj3e5N4?M9D#2o%nzt-4Pk~{uU+6dgc)kRtpd*=%n<9f2t1iE zL#wx1;7bTIqxa~ zyK>p0RQ}NGkVT~mKacD;o4l>FegHX6+oWJ@*4bcyNa!;xn4EPkpmZTDmJZ_MaDD=GIaFsW z6?@|`h@7X$S9x`yAY_qBfY!8$*8&Cg%5)b@0NpbAa(C zO@B!L1WuaBe_{>#)EV#iV{b2Nc-oUW-J3bxojH9Vb9%&_rsCayLcKoibOerpAp)1u7jNPXHFpJH0*jPJzhR_d7C!Bfa?dAYau zQBgb5nf~rOy}h0BpQ7VDI^zYXRA<9*#)#Az-|N>tg0r8%BIr8Ka2)|>kNdSpaF!3j zo$+aCiH7Tpcacucex>OS$2-tz=Wx8+Q^hO2y^{{d|B8Z!?8>O_X1aDPgWaW0b2{V4 zeA&PA&t_`E&iHX3H`~X}^Uwb1*QWimSN*eY|Ljfwtj9ll-#>GFd9H7_(f-*u|7?PP zR)jNUk2Ccd`g~lA!QhkvyN}C_KSHPVa18SNmb%O+=l>(TkXH8I!9XPAtcdjt3*6-a zOmqZOXU5qQrtYB|QJjq`Z=f*>&b~u0NMFMR@}P~^{MjFHrXHqp94e5@a?xDBpDZ3v5w)vgq(W3 zg9Z_gRZB~BEQt6IN-{0AsFniT&Q+wlg|zsnYHg2Ay5n8b+7;4TVWZH>^x8)o1rtAq z+;j@w?)@j>WZ^9GkQU z5|t_b^b{}-#J&zwRK`*6_e^KC{fZ}5Wj5g{#}rNkbxN&nRsd$kg~QHkX&gxEDU z?HD8W7mkPxDY0iMvFmKoYkaZY|4nTRFBDptt+t)!V065#5U1vN4$e+QLH>FbI~VW9 zbhgRQ0Qre!=+V^EznQ4nL*m z2a^)MlX1rKg$a0i;n!ACmEsg+VC-{19P8-~#GghSkL{NUwS`{1QZ?0}n)S;@~aV(BZ@#JN%V$uSOMs(jUa z%kVQnaR4@P(l5TwFicOQt81rAioO+l^N30u-4{S9T|(DKKqXEDQTU*u+_zN-e~#)q z&|N)*&))3PPdBRepGTVF5BwvbI)I^d(reJZ5@H%CLIYaD4kclwlJFHT7XJY1B;rAgNNhhpdpDnjaiQC%zlEj`(9G#Zip*c} zNms3hV7nV^NIOg58DG1Jb}Rf5eKu8mP>S-yEX)$J8G^h~S7LpWCY->w%0VQS94MGL zh+*7`rj=c>MnL|p;x0^xV*B~&Y@%8zsul3n`gOOAZKWDp<#Eh>l+tI5ifv=jj!?up z3eZ-6s=uOZ=*VPr>vNLGrqEYX2Tnm*Sf|#erbUwg5 zB6FI~oOWkUdorgEbf<)5d>PIX@sapU#&4GMQTU|moh_nV)E zO7D9RrbneSeJL<{SUS_^3qYSjK*MJ;zEaMasw*Fcg73VBZAzZfWvB|eW5JjH96k~f zz(5KH%z2ti&3Ohe@SaD5#d-#9pjXab35%tQD>&Ix2$Yn!@05hV8|AQ(DlLX0g3JBrxPtt3W&O~G)v+TY%)RgDxYpEG?EJ4M1>w@Ln;wZ&Mum@6}a_Wqu=7% zl`6hk_2zxVBVV`QBJ3WxnarQ*!_3xXu!70pNIzgn659ioOe;wA6SB$kQF*bRp%Q!; z($Vi08SF^G!%PLx4V6269hE0W(-3{A@_Z^;ly9@!%2OeXlM+VxoEVHD5-l@|LS;X& zDvwsPa2yB`=(y@`n1hZUfg{2we^@R?*#Z>Y>rb;RqZ|gsfmJk0BL+)t^tcr@-t$R{ zDTBQdaqhbe`g)?z6*M~gM^ZqUxNHJJ zgv-Dv@)SV3y)=TiVH%XyTbsn8ek{SnGqBQ4s`F%iy8_IdFN%2vn0=P}q$65Zh0Mu{ zMAyS?Wgk{74BO!YD4g`iX}m;yFN0=mKa1Wr3V(>gn|X(}`@dY7TquWrpJZh!rIC|y7MYbvL1twVl1@j<5-1hq%0#Du;puR} zL{2bqeSxuR|3&Icw2#i?es+Txv}Cpz^p`U%gFXn;AE<-Q>6O^AiW48mMZ@U?c3KKV zrIWrDpib4JL(-!l{6v2GAzo&}=0kNz3XJBxAO*GuLk?eJ;j~>1U-~VgTlyjnbu#}7 zY6RLCX%YXFg3mDirOGGU3XY(H%~avXXwBa(FlJz7mJ405HX7NNLzLQ({|=<_jxAR} z^wH~8OXsMT4iQWhCsa#Erjtcqg7`O390;?e#q1Y^^J>|Lh5rI*Ej+4)KSE>_89F#cU9`%?eipyQXtAu0i2Oimi93B1H;lNM_yh z*Fm1SP^VMn=}1(kaU7y&`qZ828$s&LgVikD8PX9gurqxo8coD2DL$EhSEaHf`=8vQ zkV2VwhDvV-Ya+gkw4L$UPz;@wAyToP8t>zSH(Jqm*q@#76OzJDgyVLkR67Kbj6Xn0 zIb5&y@=P`IOR6AK`c+B{l71)=#pP$k~c z#@zoKOVGzu;r(1Tko!wf{*>*HpP|)Uta(P~z`bW9)ahJHHY93FVqRdRk?G+Ry~JnW z$FgyW9e)pdS8ic2JTp<`I5?RnClJbhJJAt__(+~6M!!lyvrl$ADtLFMA45M9@s(h~ z_$9`6Xm|5ytCWd5~E+E#*Rga;}6a@Ny3i%$_uHV2@CB|22}~EDwL{J@p-BTySY*u!nGi5_wrR2uFQ1dLO(=v>RVkH zthykZ&P$Z|UtU4Qi~lG^`SrGVCfDA-O%ekw=p&sTMlRG&=il z$3Q+z_I<g6vK5QTcxw1lDDS>9o`eCP+aJW z_0&Yqi1ma6+kOq%v7YMaW!^UigEg7&T`OJuKm-*RsxB7U@;cGBR|k1Yjoh}gAoz0- zJhL=9-JF)mXna)(`?V7Go>J~H+|Kjubt{FPqm-izDwi%z#P0(>DWAceo!jC?7!%q8 z^O`A;6Nq06bqzrogjIWP^Xj|Y%5otQEml#+ItOqnxaXPJ7`cCZXH!Lj`)Hk z&-u>^UExmEiK(g+AK)IPPxufBy=4={!hR=867hBl?TkO5=M9`?4xx~xsRr&N7Hp5dt`s3+d;E<)TIKcCYT8M(!o>-&`a0!#Z}w4Pi&6m^d`N|9 zeN=!>rM?A&Tt;3xTqq9odR9LE3wu^O?sQIr_HeS1iBde7x7goWL zELV=18`!p;W=iHqRm=a(pqeWFrE2*rOnHoR-oTdsda+P15bC~x`))fPkD+;S|5Hi* zS0#0`k~-g(`aTqC_r46V?I&{DW3oiU!MIZA1nyagJ4Kl+DvwL`^VC=8mVs@*5bbx! zV5yO?FRXl@y~H&(HN-5`ihb8Smu4QP)cPh<;8gkdkTLk34T00klg=vk>EaOUr(iHe z99*1EFdkWbN+DD#pK}lt;vZ`NcH3`h2*opAIhAHLWU}RW;&-Ac88iJwYSLDSeJ9p7 zT$msI2}zjjw1r>x(k^bY$|81xS!L^QM53em&O-G)IoD<1SIAftU!eN_AeMi>?+wt! zD;Nt*QXZ*D;IfsOMnx2-diL~lIOPobka@?cCPt_x7SMfDC>*ouwZX&*#=+1bMeWXA5+VEEevIU?`U|5C+gb9SW4UF0(U zh&&6uz4fDk(K@S1uT256bosMlylt<$LL?blTL5<$;5%><$9owSvHiyYeh`R%5m5kE zlDtbTS#TTeH&;LsmaHOKvOZnmQnk;BmlS_NIZK@3+(d<$RPDELP3%r&JxNK1`|!CC z_^6WFnZA>%>)w7$iL6y3=PHqtZIK>K<82p_4=Ir;xfY$;!F%Rcc-G1C|puqJ8*kzzum+r1xL2$WVjaPL{Y=HfL@dc8U48z03(2)T@HNNG5R=^VtMWQtx5 zR0j(cgNFZ_c_q$Mu{(66LDW8JNvM;Z1K`#+Z+nl2W-=PF=RDx&Qg5QQ7?cNSZR+sWQ zW81yU&=WOfvDxaSd!Nc2y}zV6Hi|j;33L2u6y28qoF-LC`-vHIx(`+s4zRkL_pS$kn9fvrwNZd`-ou6k~a+{5GZ`W_&M0AH1h804Ax}Q{~T-8bU`Z zq1{R-3nkQ1LU$^m)0EJQZJ{r~j^1V^lzh}VCgM*&QJ~Lqbc2CC&P+Et+=5PP8;vY& z7n}8a9h@%gkwfJF56UDz%M8DPPHW?ZYC^#)glof30V{baK__>J{l*^+CY}n8$D`^! zV>a-Tz}T5C&GmcfQt_wNkS}IBVa%1so_zxjZ(2x|ADs>+n9IW`LT}Z8vgP$liL6JObe(Dsk7Mnl;bya5(1*NU&(PZ?h?eHzjkUrCBNARH231(6&$ zN61$S?xkwU9g6a#@pTy)lB$tx@wMZqJsu_hJLhp9( zdQ5ktw2H5XWj#hLUc7rziC zKhQ}=FxHWWj(4l9AiWE!`E*%xfp^(o<*PPve`i%!7j!bPz?R&h(*fLjKsR1N!U6~Q z)#WaSA|!?@zf)pXe*flTPA$$$&elx_hd) zM2hmuFSJJJ&(PaT!Pkw>D$)1OEH)mW6NpbMAV81L*@6_Gk8yJjdv7A%!{azuyoP(c zh1=zm&xfMFYd$Pixl6ho+S)Fz6J6fu+RZ?y_Gqub03UTeOtmEsI3FILLR%IeQW0c5 z3lj;y%?6YCUl)o(Nm5e9cPYXrxfB}0tswL+INP^cM|y}DE+-NH9gJ$*GLVSRM3-Xw z`H9F$vi#h*}wA?6Oo#-l*!{RHldreg3+W#dHL5o=BpYi?84BnqZIxiv5O zyR3Ow11I2GR zsCbX$7W|t>AgM%&M_lmf{R&b#h=)&2BhbjWwY ztON3IPk!_Pc>_GY#LhU_l#q05fI2)SpN#d1I!?UpFOkZ@Wcz7>3E zkl`2i7`LkvWwy4p%CslRa34o=+UG3V4<`+>6ss!;BhW)lYckwS%9L3bI%QRba`*zB z=$maMhxZxDzco4f3NO^aUNLmQw|CZ&e7@7~rcM0ee#&M>^>e%}x$j8oWSQzs9`5gp~WCfj1Wy;Ec{H zlQ3y>d}to0x64V516zH}`P&2WeF8`%jt<$2L<4s;<>7riNC;XJFL=&)!BWSI^~1#d zx553HL?1kkN4j}OHLejkT`))&=wtgud|(@Y8mu!u8Yrr8VoFlZzjW}G^K-gl#|Mo^ zN}8u`RMF{GZEz>pZ6Jp#cApgg1f6O}~zRhlI3B+9iq#bl)xatOP{8 zd^Q>P3V;6?P89}U?f`KnHmb0Ig@IwA9xUue_B#prhaibzfuxvX!XaTn5Lv>)@5$wd z1x0z%uu!5D7RqcJj4vPb!@~E+y9^7vkYLaI2f5a?8U z^a+30GBi`AN$K}t4SQu7cu%qdR8Wq)6r1>@%h1M+;veuDOsf1vMr9L@ zi`if@f4EQ-rd8a2L&fcKBpE*8s~s4iBqkaBlxFU;C)f6syV912cc2^op8UQ249WfW zYC|fh|zubsDaq_~SK`4dVWX zP!tAOl`1}0it?M0Z}@~~fY5soD{4|~Cf8WFhY!{q@u!*GJeJ8NXEMY%(-&aW#omug zgUUB#n3X(yWe~#b>nO<`96u!+>j{I^F$|L)K{KoyM%!UiwaqC`QWX=CD40M{(~XG8 z)fWyx0{E!tnCMIo!@8-Gi@azd@T^X#fZQ412xoy5n8w^k9tn*74DCaYKpIsfDPogw zNIVrpmUwzEd>uS{MU@?j@}%+f1v21v2ph>3Pp^S0`hrc>Xcsycu0CBxb+Z)ZcLuCc zodtp3?=Y>5&UQS_3&i;)?$~~PonQtg5L&OqlXRF=v|M0E2a+YMBFdP`XpI2W_9UE? znpg)OmEwg;HG!~q;p1B<__P!XJ|l%8A|C=SK9ll!FpbBh_|%sH@vsyb4TwjjC_sVg zNvi?2Lre}ZzN3FaO3~9i4T#>LRiaXrIf<@=Jr^8IUyySs_F@jNCnn-i(S)D!P$eHA z#DlzrSYO$7`ooE{lR|}&@B92Ur4rsKSd}dem?x=BeUKr6`|L2*|7yC!n`?Hzu9YxsOL} z!Sf*MCVr|I4?bnzmiOJvc{;wGYFplhi?+}ty$4G8Au;P_u81c7h^y$$w&cFS)`|ZYR7PN z(CN^R^Y_s5fo&y1EAnOCNbq(tSAU;YzBsl7@;(1b(FJ@L_ z#xM^8J^skO(OJ1U?w!%p_A@^3LM*;y0Ca3WKar)rrGmh&Q(EWK7*MeeNzsyUh;;;! z#X8eyQ-4`elqa>$U1Y$W;gebCjfZ^e6r3;CIgLJ@Djq9E`J~e<>%0uTy*PWRbyn6n zakVx<^h$M-8!cBSj(pwh`{#+^F123$3`;Vm&NIk4e6yz@xcx+lcJJr~kWZJ!g}oQw zN0Xy*-M!sAUp`05=jr%V&z5029e9ucpNfchJ;8}W1xzZwhdD9Dsc zKEdSTp4#AL!{n!mqWS5$5ccF_@}owH&Bua?He@-=@g0iA9l_-Mj^GvZyIO||qjwe7 z>|k>FG2pv!l{AQ-Il?Je=69n6%lx$WCyq^Wem5Q(=t$=V_F&%6Pvg!ZzR0#b9jtj0 z<9ZQBA+YDn5!;J2Ay)c>$Ma&xOB0AbkcF#+!k)(z;OJ?1aIn9K-y?y{h|mloCO39` zrY{EVLyN&##q8`ah76#N9lt6uK&uTI^4R?DK`;gT->r9lcw8oMZ%!|VLgS|&3T%^~ zkU6>kN03eu|?KiMOb-SH=MC25F3i%cw(A%#55c+u&0zw z;L;c`XV7Vh!>=WZtCFJZ=ZV+hZn63498y9~cjQscvwi-bPT))HK5Z~r5ZJT)Pg+he z2`_D<%R^3guMw>KcCiKabv}bg^6b? zmRI1n+Q$6L2>B_ti7b~^B>rb%;;lvFUy|RHJorC@(qH=zxNZEks9W}1^ZRLw67Mcb zyfrWJmx|sqe;15BmJ^)*eA_Gh&B>cqRoq;$s^ZfXRgbl28hqn1j4*$rQvWJt4u9k8 zB*&OqRmtCh57oNSu-j4{X$`sfb^p-XP{hTru(vgZnxig$Io@rm-pHR}zbROGvvaII*U&fwqFFCQelEI1pvO;*KsP*A>4b5xa>Q=Yf7pe7YYiWU)Y8O_C zM#7Emf_bD6tGYAmYOf>{8gW}2YC~?g4wOrm%)Pd1>HO;}E9PE1f0@f4*@s(fKnGp* zvI2P%K)?PQnUj@J(W|YMO6ivqxJ}{O&;&PH-_YvfKdj}}x736qp@~=4w`^#2@s6sH zv%HxvrJxI{HxcLtl?7_TZH=`qO{go?YYKdtOg-N=;I>BP%?jeR`h^Cn7&qQkL#+*) z;p0mTz=yYHw6(Z!bGJ6Uq1m?_+^|C42H`e_!!547!T>Xcqumk-*MwSI-P#7cZ9?Iy zgBMA-ieZAw_aInCZU{FI zb^7(k3_K0&*3}vja0)##7+meN(%q(Nz9hu&wTz2s)=w_p`q0-tLOH26w0=@s1nwMe zvNWL+xqa#!yqDru@i?u$GRn`}r47Gqotx%Qq1t(i!K$~A)jbWSBe+`GLt1=_TcVZZ9KYJ+~ zSFuat;Cepl;06o#qgQ>#h{3IFHyn7P;H@U?eKfQ&Y6&t9)Y>>eC0@DV;vFb1f4S0? z7p>SDs5<<5rK*B{LhH}LQ1d^uh1xKHZP5+Yky>}nCcOKFH2PgCoE~l@6m5$zdNhaD zR!1A~9uA^41?Bm#PjRCSO`wCc%qXj9<`o#P^b5p{&7sY!u0d+qt;rV)%$^qb?F|@*9RPXdSePWZwBP#ON9Jx&1DP znEI9(6L}0BQ*ue`P&rkwh#5eSaCSZV_#@w)<4#dS>`GI8rZN+S2;R4%mA1VI@f5F_ z8Q9M@s;w5}fNWFb`DL#)aB~e-|EsYGk7;#-%a&D6!rPq+hX%3oa|J0Jy1Zp=q`EdV!}TXd;n2B$ zcV@V{zHsQ$P|d^}Lu;1Gk~k6XB~tu-(JMlcR#;(%TXtFD&_dpemcy6rwyEYYtugnJ zeem5mSSq6En5)9o1X$BwrFAgQV6;8qO`Cid=31{OW?k(~rK@avoSMFDl@$}}AsFf~ zL#Pc!F{GHF=tjmb&`@<0DeT&Y8Z7g8PZ3u5HYt#R_@m?W8HP-*UF|vuu_fG$j9gC)Juc_~oCNk0XIm566vk{TGt(5Q zoU%tIp5C~$s`3WpA#;~3s**IsT|I`=3Y|v+Bb`ve78tzUOJTIHMq1aGO}xyN927s- zUh3ctOYWKmtP)s7!U&1T<&Z#@LN_E3l8y2;U~Y3mBU}R{k{&a^Lh^@fRI+4e&Zf|X z&O#l2l?ZC%2Rad|yNkSPQ)3u`$b<)#B)|m7`5T(rnoI@r3i4#^xCSw3B0p-vEt|Ai z>}XaS66K8xYd($>4DzfoAFnV zzo+px{@cC1i|`l5-(mcn_nqF}DE_{Pzi;60G5mGoyL#sDug~@N_W%3fSa0t|!1GV< zIJ9~7W=-~7T;&}s=Z@Y{>5Y;qu>aw9!f9w(Kb0@W(nPY&aVqA_oi~5M)xm|=T)SxT zbxSI*zhUXJaJuc@gG)vc{>xMf{qQ**fGAMmcPw)Gn}Zo0L!Z1QDO%BNmF zZTh8?I2Jh{A9O_!B`)+iul`GK?|mp|extYd5tNHia)-C#{@&hSp}h39-rhG+-iNP6 zpNT6B?|1k1PC?1vk-QD%nW*EDbL$OG&c>pgj}IGC(4I4-hbxw?hA4 zvvU>0i|)*wTR3=7R}dWM|J>WV3jNB|ugqaR+k6Cn z9k7Eq^qk>E_vX$SKJuPH^M|{syg9?ieKtQhy!6h&!Qs25luxSGnt;E(YkHylRq zm0A$)D#&5l$FtdT7`pcm9*KZC1@(c3gIXRg^h&+a6X8POf7gb7N5e%*?Em?vdCz!% z!H2aWp3&vYx_nEQgLQ|`(&boPPSxcCU9Qk&oi5kw@=jfTL6_gs2k1kyt8yUR+m$Cxj>gIbXlj%^}4)MmtWB3w{*Ejmxp!vj4of+2kd;@6_cNbonh^?$PC8T|T4Bmv#A;E(hz0c9t&3>T;?s7wB?@F6(r; zUYB?3@(a5BmM-_`@~|$S(dEm!d`p-8{pD1!dEa4wI{3fb(lYqINj-CYQ!{WmxqRCE ziUk$r6X#Dan=*0A!8r#hlW4bElQhDJvV8Q(-4;9JtoRNAupr{#2&k zynoTahR(p|J&XqKU%x=NpRL}!moZztc|T*edh?#fZ1v`SjoIq!PNARw{zlU=T^f1j zJ&p!8WCk|xb2M=OdIM)Gubw-1hC6QgnzrU>n|palc}eNS%i07gyS;2$N$HgF3hOu} zt@YS8MXT31C6fELI3?I@g-R;sESwmvUaO(C&21%X+8P>bC*r-ZC4_M4q~0m1-PGK= zsY#W1C9Kro6~Nqb_5rF;7YQ|1lR=-gG)CDZ-i=#=(~`AeoXDlF629XXMB&=%Xth%k zs;{bxR5yjH>T4myK#H}hIufbgz?5Ird`5pmXUdyU&)mbnCjT&HyXL3<)YIs%(GJr++SKry ze8`k5b%kl)@SFbA3&}qRe>_ZnWlEEek)J6>fBxHnqfK<$=9qlclsYW|g*y6=|0bYq zem=v^!<4dzQYiT}`IafS0c-Qi28oo~@r}O1j1L2wG6kH?U!?g=c@YQLI!wC;^?97w z{3ic4rO87LegFP{N%NcWo2~PAQ+`J0qlVu#C%XJslx*MdKd#pWQ!eU9-@pCu_v0_( zfZ#A?kixCQ*v+6G#tBt4d9vAWwEUx@=udB8Q$7K*fW>e2BOCul{-fZfil%+@9^kE- zzyEl-ptX+|0GPQ&yve)U4Zk+5@o%HIk-Hr{cKc>OvuiV@InHV`Fbe#T|NRMgo8Q^$ zD$1>@=+CcfRV6-O!yk1r{WtGBUVVomDOH94>H25tpluatt5&N9s`MQ2kxIo#G5LMJ`!P90=C=2K zet&v2?7h}rd+oK?UVE*z_e@T{HYYGQGb6*$PnPi|gHYsZi78VJ4Q;A|qRg0OjK;s` z8s``z0cQ)GY%h}qTIJKPSnD!J;j>V(->giD7+#*M=ya(iWH~~$ovg5HBvzM(VF?8L zQP#+E0iv`-MVEWo$Y+!+bU%v6rgf^{I@M2?`AU9W>iKbQ{8_BphnE#-UFrZsd4Gd>6bRu6*e`t zw67{$HEU+!%;`mK;i9Qx-sDf(tFBohM&f!aRfzV}0Taje4dbUyyYS%r|Ejt&FsHC3 zdN6T!GY>yA%A@TiA9SBP^_h=O``N=Eod#6eXCAtrjNlXu zbTWKy8u~{uiIdS2XPsp9xoP^v4WHF%=)2O;e<97dzf6O_B@O&O=;){AkPKH zIHN=589Gk?0raODXBjoE7G`1?I?r%GPkfoe>wI9JqPK_98;IM%*42?{n6cVde6Ba7$=$?b4=@Y&&U7dF6uY)=+Jo z!OF_k#%M^?+NzsF&BmOC3#%iojV;mYP-|;u zC8IWG8g1d=@=(-hi?#+MtBugA#;CEZwh=RHl`_>wTiaWx3nLtfHn!9m5s6nSFdAEC z*4EXvR@b(yMjgVnM8grIt#MgPZ4IyEe4mK>WuCHxuGO&>Kb=5&= z2Hcxy8!ZNarlxREi501BY&D>tNMoI`ys-&gnrkBhK}=f+;-Hn|H@4J=IUN2smQqaM zIW-7vM8fD<4HKck)N_0c6I{XZDI7GaDcjnDwJr6WX>IE=u!GUIQtlQ{SB~1;w#=xP zCQ(g$1RKFN*c5J~qA(G;aOfOdRZB~#ZECzN#37r*D`583+%#&3G}kt^P+kmMjh(Tq zI^5E<+R(P*tM*kF8&?G?%V$?lE%HrIRflR*FH0e(6?xD_Gq|rakrii(3^@xm{zr_& zv6K}2cZ9-^R1|ELIM#;xjX?V-(ZZU4x#;JZZoNaHpIN6%^;%@b3ng4@p~ zoMqexm=8yP1f}+ea{SEH`1%~D{bEENkX9)_s`14NpA)gjHswb(+%XLQ(?x>JSU(KE zQQ>=r;h$3Y-eLG>6yCVi5)8FG&nmn%4F9~smkq=3Q}~);_&+Fo$1r@a!ml5OcNM;8 z82&wl?;VCeqVPuRiSmD>@O#1%&oij^e7@I%KSj)3{_~0lf2s%H>%sGks2|6JAFq)p zb)4jwwg<1{A@Mvb>PN>z;;+_7lsc{w&-0~zHZ@zK%4-4IzkYf=c!b*2v&Vy1rYqX^ zdhj|%v*8sF-g|!U_25%i5}99=tb?E%x9)=b@kF!H@Ic%RKlqJb2rKKhuM+^5D<% z;IH@K&-UPJJos}w_y!MN-%YVO;=zC3L%+&{KhJ~j@Zit);JZ9{%Y$F%!C&CPKj^_< z=)te|;4kvvAM@Y~JopVB`~(kvlLvpX2jAntU*f^<@!%(V@OwS@Ngn(w9{gkvzSo2Q zf(P$-@KZeaJ`cXogYWm?i#&Kk`4igzr5=2a2Vd;L=X>xz4}QD{Kh=Y`JosrI{6r6a zx(8qE!HYydwaxP2XL{(%Jow8zc-w=Y<-u2Z@FgDn^&b4?9(;`l|3weJ!GpiTgO7Od zyra?2Di8ik8i}&QgTK;)@ABZwJot4Uyx)U=(1S1c;MaTbvpx97JopL^euD=;$AjPG z!O!*Jdp!87Ja{|yPLAC@qWOBuuseIAnS*=n*fTjhQxt5aad;_-w)qE$#*ZpGKG=#a%DpF@zb$+;sxZB+Ss_b_n>` z62LTjHzME<2s4zpH3B|Fm?6Zi67T`S3>|KnfL|rdQ0^8BcpqVg5Z4m$bA%Z>+9vVfWJ+cA;R4t;BOE5csbop-IC!GIO!WQ9P0Z%4O7w_&B@P&lw+T9)j zpG}x9-Q6JI(+Ja*yXyr!hA>^YyH3EFgz3874gnuq445w4jR^Py!gSScjerjkri*r~ z1bl!nU9(#z;8zLLCA-A}-ba|O*tG=w9AUa(H($Uz2p17H1iXbXU9Q`AT&zD~x>~na zz&|2P7whg7@WX`ZTHPK2f15B}s=GnJ-yl4l@OlB?O?U?3bppPVFkPqHA>i8xUq(10 z;8wzPm2QoIZy`(<=~fANDPg)sw@kn{5T;9Xiv_%pFkPW*33wi1x zlb?S9-R!TwGZEHVXLn~$;Huh*c)@red_7JF^zXa|Bdj-9^dv@vz}Viz3zVWrsM$_# zE$9KC&D@IYln)N_aN z71cgee}NWM|B5OOudI@tA~=pJ9Ur)plTlxhxL*zrx*YVxlR^H%y#io;oy3zBCFZkx z1os?)-4zA&tSspvF^`IZeDnMY&Lr2r$U-shzzoBfpK$ENdliX4J59$12V?z%W_%jN zi)|G=$F6*_TXMI9*)cogmBHS6^ZYm&8g}=L?O2B`94?Uf$k_@TIs9;ak#6V6l;rSQ zbm6$&Gw$QMb>Ci)FFHAQqleoJ6{z;oTiKqxzkuqnlQRaem$3LpgkTwFyd0#EekZns z`x;0z-_jD*kIF^AU9#UVbiXmO-;M0|eQ&=E)sIVsersjFnC`a^27&R8%)lgC)_L??9ELC5kWg&H1AXsDJS>7c|4{95n&xm^7q3 z_c-&Ku4iaSG? z;;n=O1(uyG{cx&bU@z8TioT=1p2R(3TRJPCVA1<}GyWYg6q^w_LPhsILd}8Xh@WHs zZ>H9^&>Wv;&Bm@x?Bt%91w}2z0?>(2F5kXD!nG4`IRE?+8JnHwkZJcrVmoxt&M)mi zck`}S5!USPw(+#)@rfOqiFLk>E+C2hQ}!5IaXwNFJF&Q6B7F#ViQQcR&lCR$64=Q| z_GZk;*oMt!IO`~Z+G)OhV!69lWsCLhzF+l?VxZmJ#m-VJerFH%mk8@-=Muz3Xy^&d z(|6QPJ|sNb9N$~cw;&K29uo}^f*#L_OXR~E86`3-kq>F)Dk5(H61{Fmy}WzM_dDM; zyOxjTG@cYYJMq4g1AFM~@h5hfon4-mIlgCogZ_lG89j|H*bIjA1}JT@rj;O^mx#Z$ z9*vc;XEG{d$FtkN%h?lScVnKuXQ5VWO9whuB%%d3aiOZ5Q!s5i*3)5jzGlHJDhh52 zB;Mc5{7gITdNV91>DxyKIUf8d0qbSZGkO_E9_K1dB>zC-J+{p9P}!)Hir&2nJw((1 zPFNL7sG|q%EQ=MMoGGA9WEqj0@Q)lA7#qz_*-?lNYw8METq7*HWjHrNy)flLXCW%w zEZ8A**3QF!1$AP#a~l^0z2ZJ@;KXjc$u;q2J*FOqpe2SF9~kEbGVd| zd4Zj}Zz`A=NHoEQr9Z#DAZH7&HMw2BiZMHT?wA}1I_NS#SyzalaL~Dq{gPLp+aXXv z$Ux$4=LsMW_i*dvJk8(~=mt;c3cRyh zz!Ed>z+BMHin$r){qcf5q(Y2jD;`wumo-*5s4BX3v72-&U>acqjp8vy!FpG!j_u1j zx-s@{V(_j=Y%TaTaAw7hEq9>oiWmF}#U{A&LE=y+?m6N*Bn~?hm}h~ZSyAr!iMP2t z7U5oHb{(pHmx9*=Hh(VHOgM;b=xEd@o-DWrm3oMAKgw9|-|WtJ>mec6HhM~IPqqfA zZ)?k6fqq)-$gM}+ML~^C zvo1ec(VvG{z8*2EGWI@dN0FV#;bowPkrf}Au^ zP-EWt1w?XotC7n(8VgO8zyXyZ!OBM?J=C9_Ug!_ftu??!d!XCtfd-u4(*d&3GL(yyjsBLQVvJG0eNT>gs*DWWoaMke&qE!Fo!oeb zEyM6{!bBjxyTwE)wtM1DFtD)J_}_4@e4n$D97UX@gBQ}-&Q7U}u9aY3VzI{&7dsslO z$bZ6KoIW|%_zmcXa9iGe`+sAX@5*p~_zpsQY#_V+9pOzM1n344Tb$?LMSsNpYta*Y zkQ12kG2E?5oLj+C5J{5H%lf0 zo7^B!eg#|cI1gjk#7_4G93K(08;Emn!#O~nV`NGJr*If#m|UD+z+#F~gS?f_Mmnoc zAXBVA%Z$Gcw#ll2*s+WiIUw(hpNcKLRZt=Teu)RTI7RQyJv7IH3QOA%<+kt|L~Jgn z4vfU&{Ou4(cR{G~?yXyExa=6P19WgFV^KIa9Hu~t?dIBCjA3rPUj+M(V?i@s10(G? z7B=Jiu{<5eYR&kI5Gw#9BLf857BTj?Z3whtSR7j($9Rau4^03;GIte=?$WuEZrVjd zbTP^m#uTs%XtGSH%bfYZ0>NG4_*s|vcj8U#NDE5m1b}-C1t1ad&IXw?M``skG$41K z3mk@hp~6BIK4Jq@16j^1U@`6|7it|Dq{3Qp?-=f%kpJmb5)0#$Nh9ry!?eMs5p3M= zh}5xkJZ8eX6T>+NBfHZu55I5_?pwm3N++iXj&XOKCb1u5Y}xHCVvmzqcj-ha=7$#u zF*88}F-K`JeLXba#V)hD+Y7Ew3Cv2dkbIJ0le>Smg^r~^ng~N!hz7AD?0Y@N61MQZ zLo?93ct0Syi`_?Y(sS;^5FoQ)7+7w&ulJy03zKv%fr%ipWC;PxyDk<8d}>Qg7da2@Nk|&O+-mM@tmEUKFVo=&fRU$22=JLZ?t>@E!_31sO@0C$k(S_ z3Mrh&IJ^j!$8@^>u9JmH9p1)i*@;8g?#>gWA_IFI1WFvXC+)OL9P`d4h?QW5o_6AO z=O$3WY3LNi4MBIY{>=8%&5iMb{h8c!dpnM0m}{4j!X3I$&B@nT+vN2YMAHD zvNz#tKcQB914k?a92O%_S6&vb6XFG@qh6Ve7Ub=oJ=Vh4eVkHm3Fb0^j9zhwg|lWh zlN`|l4IFs{+vpamVj>)hKQ@?a-gN+1`?%Fu2WhwP)LR++NVu}{WOm7<9d>ZLow3W# zl0MG)>YwErH(^|OGj@VEYXRiX*gdD@6LW17=2rpJh|tzndF|sHFeQ1GqitN1Y$~OR zI^D3^PZ`HSAP?`*yIHJ^SR3KH4I|tUzWE3`d zz1X-;!`tW*>(4ejPl3#VQPAfToP!TySFDEd*5`Y#gvP!=C6><1D&DvM(Zdqjf#dMY^l4TZBB9|kd|Pen z42;z{<+%sw2a_X;dE!gvUP%Uk9_~E% zpn?s!AADoIU+egIjJdH7XLnvon0NgE|013Yzyq2a|6&KH|J=?P7(57)ijo0FYxCY0 zVSF7Qk2d3eqz*V4A|x>x70G+VyLo^AmfZLo(I}5X*Cf?Z=s9ZW#AW!znE-9$C?xMk zDoXmzwcU^rj;V}(A#(Wp^bxB5O|Q4BY*~RX8`fFEh=#l!?s-o1cHu}c>@2|0l^M?{ zN5?ap^nLJl(7*6@x1-`-jvz7QOfbGPLCz=sHp2%lIWVm|%=mTKn+p1x8SlWx21I4U zU|vESR&j*6_Fc@x#-?K@iq(aZ9{}yJ;YZg4h#knnDxdy4XtL|{3|ubar+;kw>;9*} z(SV!O`Q<-Pwu4*6y-{WGL+xbkECig2M1RF3#}4j=${L)PA+2{cuKLr78$zu_8OT1h z68{F|kSlejh_0}I+>6n#mhnCyxVWH!SEV`F8kNBp0>OKPP~5YeoIPoeJ!$WJ{2Oy} zDoc9IyGBz52v}8i#&cY$;sC676_3}E02djlLVg8K{6+gIXn>)Oz6jwJWC#*69yTy` zpo(b*N_MPRR57V1)}IHBGOn2S9>WfpmzXU;t7+MmpLIa~)#JN{6G2;txc+ocE z{z00kjJ5GIk%stsFek$98j*+{u(uz|@qZm55fi)XoAhrR?-7@S2uLz^blqQY8VtCi z>yd)bp+rj1b&rfsr%*x_pD<&FCq^gtW;n<|x4a{zo_aW8>H(7Gi`1066Jzl~m5C;s z@zI|%3M+vw^3Yp4y2N6F`Tg-j3Fh24gqM6AC^*hvpl~1HEsWYgTn{Q(uLn)aIqh_r zBZ+n3qQG*bqr!4*K;3OZ62LH0%xmXAVF;9oT}~skN*6zID5^LkAR&^GDRQ~yC2uOF zPMiUtC8e6T{}<;rl8&O%kK5bh}K?e2I$X8vq2m~A_+y$;Om_gd7gVprY) z=iyGn#Sl%k~HakmUY{Td(67OS2@x<+OcBcq4KuGH? zt4zG^UV+03l$&L)<*8w~vHG84xR48oP_1E!=^4D+4 zhw#I;t@G2DMaO)z^XIUY0B)su5TiABfO<1b(RiBu0*QUj=crO%B-V02EQDQVpnWrA zsQg9&YrIS!KLWo6&!x0|J%Qvs1s2xV8G*_86VD{e25%_k?ZQ{gyGDXfW$=$8t^_g; zGn`$@DZ@?THo(DoHOGwIi_!f@pTW^`D{6B(--@12)0zcbrn&LdE{JYYbPVSSm$c~L z3Pm%)>6OR#37E!v&abH}5iAdY3JyGwc-OfE;~xHn$NVrh zS$1+&jvf1RzukR?oj~e%08*XNk0_DfZ%;zG-JZ0oB4ht{H|vP~1NUZpS}4SxlX$E9 z)I@%H_u>nVmnRlm$6bD#2fCbrTMg{-i*T%QuRw4D>P{vb-KGCjY_VlDT9A~~;>tr_ zxc=<-2!Y>4W(Lx|SR~NAjlvz^jS5wSvC7S#FTP*^r}xFyfcpykxAN97M1+F~9TF20 zthwP{iL=Rx%{2E^v&B#AT85JY?V!FNb&P7@N(qwP0Dq+KWY2_b+rsGX6ru*w zjqLU!t*yKCN3z@7d7|4zo^HLrL$?UK9YqbKUsEH9Ol4d@EKrZ|-z2Rg>8~W|Vo5qe zlK#d+dN)byNxEK=PLiYxk*-7Thdrd#B%Mgoc1b!=B&K*39bIzVN)PFDlHNqpd8ok& z{)?R5uSJh>0g%E9w74TleIu#Qm5hHN8TXJZIqp0U^4hwt3B*yk{!Qe>ICG-zb_PuDw3qvct}qn=~R+lfEq@-1xw^kL5LmZjohb@ z*`xhzwvYXEJ57-(wEM4;Zj6+=k5Z2o*GwL;1ESQi$q+5^av-@? zcsJ)5SAhE-C!9C!NpIM(T?NhrG2_Jrvo<5x8c$PG2z}0Z@UOz@JwXI_6@4lLD+K)t zGH3b>#JOjYSqLxaoC`)sAzP8C3(t0S^4v@5+7^oe5FqBsOkKD+=O+s5@m z*o?CXmJcxj7bmzdfzu{UY26nr?wlm2l=y?*5#QM>COQEFK@Y{8=zGF(;VW(sz~>Pl z9|FLFQUV}Z8zw-$^Icf1_%;LZ>Q77F}OygS5QPmxX|M`3IJ#TSHrzd zCU0BCj>vrv7v^pdqG0~(*pA0t3#;{fxOE>5H977y^w9Hp{sl3gt0a?uBa`!_Bd!y~ zx$R;TjC&pO=|0~^pKVuwzq0`~T&PXJG0J&spKvCH=;qk6et~3h5t=dVw>>PbBa0TY zXqGIdBUCuwlidzYqL{f?0EKQrPdAI*Zf3WcsOeSbIasgyWGEezNGV;f`VUg8KG~U! zVKz?&kzRFogos??69#z(<#KdoXE`*JZ0F+_xuNBaHG;KRE8dW*^h)eYb(jj`s^9|O zv(7HqiM#ZVpYlQ4rd=P7Z&2NK<}UvM{_?~4>gR3P_NAf4$UJ@Oln+9VxK(qw5N$13Gqx=Yu{Zo7pYj~hfrrAOGxZgbgfA8P2< z#BL)~BC`EN(?t7F82<`RgL+~90|8Jk%oHpPb)J4ZPI2yo(s+A$3h5F9`u6h358Ni4 z&NbJVhwC-qic`y{xDGA%HO?2ob@MeKN-g&p9&Vkmd@bW8;D*cWPjMS^8J9Tk!tgd< z;^nr7zVB0eHMP(-i~z22g3O>wU|8-}+@1h+01*;)elb!10hIh)-S=)~;>EApNcduJ z^;Inf-8_-^=Khu!gUQl!F`dD2GYc%^uk!nW$9$H+?(-r^3?amZ{Epo^$fva`4#p{&R8heOd3Fcd;36^o#?Z-J6H14t``TQUOocYk7V`B=tMvMks2D^7aoyL)! za{eU0*{uhKgzb{Qn0KDfNE;i-w3FGFRVMbDYwtmiKr*))tEc*#8%;a5JF602w#Utk z?Z47*ZX7$>-(?>+H!k?Z+_-XJ`~GZvYLFe*G=tmsXM$#A zZ2uLC250XfGLS47v?mRKJEhUR2fubF)E@ncxp5TM^H*5u9w#%_d!@NCJHy|FbKa=! zz1irH5iQ3U8L{4C${_~mvmcaH_*8V`RTfzRJWtJJ#D@89UIAppz3Q+1onFE_um}bx@6ozF04A5wbIivoAwx zl3|y8(0=F$I>)&TFrZya7PVcNTHne8z;Z^o0C`xBV+5yuQz{(Pte~$@m%XG^YI0d)7;9~{(<==d+KfT zj`!vzD}G}{$MMTE0pGc!0wpiCv2qy@`B2h|bF_X>qQ4tcb}V|tcHv`z4^}+u0ahM7 zyoEatcAnacg!%hAm5G=6D?5SYgn@I!RxV_@$e;M6GI2C8>22{lgWEsJa<=V;OYVF( zYWZH%>xDEEUlzdSgMaY!Kk}NxE_uEEkR5v_$Ma>&bwgtw*@-pg?;wH#RU^a5G$zy; zH`-O#Eh?IQv*jAm3_Y zHHE_wOT3*UQrjA8iCU4?a4^)?X4N%9|} z!|hFVR!cZ)@l_nwrFEedm$tXow$z22hs5^CD&OW};N2gWL@oVdlZMF3w(4jY?|Nws zRr`z+z^NDlShNbX??iB_A*bolgLu`+7>{77*Q!{mX{Za|aiXyvA;oJ_EWAC25=KL- zq8@Hq+iguJX~g?YEWB&R;;&^{;)OOt`q6Fpoh;b|LiI8lu8Y+ginh15grLmOvf5}P z-dsYoq9D`M`)90ZV>9T&?a?6>%hl(%D#EQ;s=6`8%Fxmwq}9+KvG`%75o~J2@>h%3 zr_^CyEz#C+lT}~Gt{y6hA5Io-<-3LIEcx;kylN(hclhu{EGbS(Ui~!?1-7>=Zwaq# z5gOxg&9J=MWg#VuWCyO&I2yw(kV~5tU*>b7S;1CPs!;rg=Gp-AP^&P=x=<7^4uWX8 zV~nM>ZK0Xdtx!uaTo=+?V`Uq6K{OnML_%=}SZj>p+}gInS2)dTZf}cPOG8$%f%nT; zOB=DwSn6;KtX^;|Mpvs*eHtur5+lD2qu9$AA*op#&9$rea+^rF74`*#F<==+uqE15 zU&l6RLlun?qaoZDH5wx;X7c4ViU`N*Axp*%ZVN$zXlNOxk5}rnH*=R`i7Yh^+{r&i zF9ag>KS-}c{)g$+-2RvJP{RL89%#of#Im(TLczxR)mEr6+5p`Y7RoJPK{bViYDq|p z2X2Y3O!rtCjy4R@!>Oe@OtB)3!R0W3rq%c-Bzq4VudtA-X02?1UxaCdmp8U7vufL{ z+7wGAUwb41HnpkUF}H#g!Vs)0>g&G5P8h^$YlQ8F>p{6_!R)K67tQ%{m4Eita~2EN zi(R=A6I5Y9yv^xT@<^UjB~u|+dmDvP8_#OS=9pqd8yaEDZ74%l1I)WMRQM(OUJLIE zRWlvho_s}>hmi)V;lxlb9TbjcfL>x{KT8Gg!QVIRY^WW_O9Kq zAmnTXF`BJsiI;GVI z-k5cw9yDbeUQERmRO|~8z4=Bh#^KPaU?@}v>rn90_WJrzt1_%1{Ykl{4=1Szd?_cc z$UXWL^pY25h;Z*+9xaw3VphuKhFWfI54A(k_UOvm);eqHYP{=Bu*SQ*LWoRtDOaa8 zs2n=?ltw|H4KUoLt>NX^0Bn$ff{Z@J=aS$hIw)B6t>I=57t*J4l9Y>0QKwjmZVi#k z3;B$hP&B!1jHpVOTuwG__W5}uIiNcO|^j#sdqe0@^$NfQ{63@Am{ zOqg8MR>NBpKJBTbPrMP0@r-W+#Da)5;$SKbl=MULOZwK@l|z(F*tqaQagB(K&D<_& z`kxR$neep);R~*U^O?|Q*^3ufU5d96=8m!9@t7&*j#&~}){0Pkxs{5|xnpLh0{rEc zYR?_BC=@KbF0^!!*vW->kDly*BKq1;Ya4d(<(6++?ij>#^`v-P?Q%FM4z>%g%a^-h zt45J2SknCA5mFYe_Md0HlzxystWKF0b8D3c)z{rvjJvHN4u7BC2l}D)0;Ad}Lh-W3 zAlw_?jt5WKE($o-R63*Qr4?%Vihb51`1N1|dsL}x<^Qf;c^Z%!h8lmcQ6$`g zOhRX9QX&Wp8-qT?Hdq>39fp_o>FofACeyB=eR|!Z>Z*k}Kg?bbs20Zut7gKG86&T0 z6VZ^bkF;7Eo3KR4rbKvVJVEe5G!#xwjvuLA-4sS1sNIZomJkWKL}PP%vu>b&WsjkG zEyW%zFXIB+>4*}_-VjTF@Ey#W8kNE+u&diXzs^HN&06!>cf9l1DB_M{N=MN z=FGjyuAFyuVE#1=s=mB%(c&f7UU&UhZm3-vtP9mIYiPV>c~f&sIC3jq*Vw*d<*L=U z75k=6n?7UaWwT1YaOrS)aXTU&UE-EkJi5#{C+mv=U{_<80jD|0%GE6@JoZGP=SomrHAC2F`?_%N6a$m0)DKS&y^Xra$G#$R(A?62l3KYI7B;bjP zAHJv{U@a$(paNd26pim03Rs_aCHMb-|LVUpHk>1W$A-@Xs(e(H8&$bWl`pCCpem25 za->?2GgNu8Drc&4t}3rpWxXm_sB(=eA5i6^s@$l`U8;OZl?PRMRFxx@VVRqj&dOR7Am%A=|rsSN)NRbH&hnW~(t%4=0wugVpw zT%*bdRQaeXH>z@%Dqm9NK~)}Ac4+5oWs-^v*!5c`ezi*De+A&oPJq_zp!M+Y=7bG8UFI(irKSfl>2<%J||wf@-9}s zp3_U?t?R$9;Ki}7{ht0i3+dYR-&@f1noh&dERq-v4{v|=@3cSvciQ#eV@Ste|6PW3 z?fUOCq-%Ho&iL=Cc0Dg$YJU3fHfVTwyZ-wP>Do1Yy7H>ovoE(ME?L^%5^c9GE1FSM zTsW;=K)ySCvx!ZVI?jdXmRr7F7Aaa%JTzMh{$17oG`zgSgtY3Yut zwH6( zmP!PeHgN8`zX~_TT;LePb$^||=u+n^AQ8`S{qY;7%ms9R9shOtpz5dP*L1qP5$((^ zG_3OrU9MOCDL>`Z@+-7)3o6v9?yvJ5U0$ym^!U2JoP~{ViQl<@Zoh zf4cwhzYiN2Mn8P~pAPHa^HteFmtAD;d9>a%YBMSnQRl(>JfZ)d?r?ey>++ZAYkKK;qGK5*mUv{zWuUL_NO#yFVSO|M2y)G$U2Mfl}`+qI6!Z|E_PoQmnRbJ+9{4 zg+AW#^?7A|Gr8e67WKkNFf|{|=g+`<`x_BUQbuG^HmtvDm5uoKUHp)jp1=P4MrG;? u9>pn2S+Rz}9{}d~!|8PYNyF$#%g0;lv1N<=7k~0iJb&{dQP=%6`u_pghR{F&