From ed19fc177ebbb47a830bd9c67601a9b72ab985a1 Mon Sep 17 00:00:00 2001 From: fengweihao Date: Fri, 5 Jun 2020 19:27:32 +0800 Subject: [PATCH] =?UTF-8?q?TSG-1818=20insert=E5=92=8Chijack=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E6=B3=A8=E5=85=A5=E6=B5=81=E9=87=8F=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugin/business/pangu-http/CMakeLists.txt | 2 +- plugin/business/pangu-http/src/pangu_http.cpp | 20 +++++++++++++++--- vendor/CMakeLists.txt | 2 +- vendor/ratelimiter-1.1.0-x86_64.tar.gz | Bin 18897 -> 5061 bytes 4 files changed, 19 insertions(+), 5 deletions(-) diff --git a/plugin/business/pangu-http/CMakeLists.txt b/plugin/business/pangu-http/CMakeLists.txt index a11a0fe..c8ab3a2 100644 --- a/plugin/business/pangu-http/CMakeLists.txt +++ b/plugin/business/pangu-http/CMakeLists.txt @@ -1,6 +1,6 @@ add_library(pangu-http src/pangu_logger.cpp src/pangu_http.cpp src/pattern_replace.cpp src/pangu_web_cache.cpp) target_link_libraries(pangu-http PUBLIC common http tango-cache-client) -target_link_libraries(pangu-http PUBLIC librdkafka ctemplate-static cjson pcre2-static libdablooms pthread) +target_link_libraries(pangu-http PUBLIC librdkafka ctemplate-static cjson pcre2-static ratelimiter-static libdablooms pthread) target_link_libraries(pangu-http PUBLIC maatframe) add_executable(test_pattern_replace src/test_pattern_replace.cpp src/pattern_replace.cpp) diff --git a/plugin/business/pangu-http/src/pangu_http.cpp b/plugin/business/pangu-http/src/pangu_http.cpp index 4197fb7..b7053a4 100644 --- a/plugin/business/pangu-http/src/pangu_http.cpp +++ b/plugin/business/pangu-http/src/pangu_http.cpp @@ -987,7 +987,7 @@ error_out: Ratelimiter_handle_t ratelimit_handle_create(const char* profile_path, const char* static_section) { - int ret=0; + int ret=0, field_stat=0; int redis_port = 0, interval_sec = 0; char redis_server[TFE_STRING_MAX] = {0}; char token_name[TFE_STRING_MAX] = {0}; @@ -1000,13 +1000,27 @@ Ratelimiter_handle_t ratelimit_handle_create(const char* profile_path, const cha MESA_load_profile_string_def(profile_path, static_section, "token_name", token_name, sizeof(token_name), ""); MESA_load_profile_int_def(profile_path, static_section, "interval_sec", &(interval_sec), 1); - + if (g_pangu_rt->enable_rate != 1) + { + return NULL; + } ratelimit=Ratelimiter_create(token_name, g_pangu_rt->local_logger); - Ratelimiter_set_opt(ratelimit, RATELIMITER_OPT_INTERVAL_SEC, &interval_sec, sizeof(interval_sec)); Ratelimiter_set_opt(ratelimit, RATELIMITER_OPT_REDIS_IP, redis_server, strlen(redis_server) + 1); Ratelimiter_set_opt(ratelimit, RATELIMITER_OPT_REDIS_PORT, &redis_port, sizeof(redis_port)); + /*field stata for debug test**/ + MESA_load_profile_int_def(profile_path, static_section, "field_stat", &(field_stat), 0); + if (field_stat == 1) + { + MESA_load_profile_int_def(profile_path, static_section, "stat_port", &(redis_port), 6379); + MESA_load_profile_string_def(profile_path, static_section, "stat_server", redis_server, sizeof(redis_server), ""); + Ratelimiter_set_opt(ratelimit, RATELIMITER_OPT_FIELD_STAT, &field_stat, sizeof(field_stat)); + Ratelimiter_set_opt(ratelimit, RATELIMITER_OPT_STAT_IP, redis_server, strlen(redis_server)); + Ratelimiter_set_opt(ratelimit, RATELIMITER_OPT_STAT_PORT, &redis_port, sizeof(redis_port)); + Ratelimiter_set_opt(ratelimit, RATELIMITER_OPT_STAT_PATH, token_name, sizeof(token_name)); + Ratelimiter_stat_init(ratelimit); + } ret = Ratelimiter_start(ratelimit); if (ret < 0) { diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt index dd2c413..5e61b95 100644 --- a/vendor/CMakeLists.txt +++ b/vendor/CMakeLists.txt @@ -97,7 +97,7 @@ set_property(TARGET nghttp2-static APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES ### ratelimiter ExternalProject_Add(ratelimiter PREFIX ratelimiter URL ${CMAKE_CURRENT_SOURCE_DIR}/ratelimiter-1.1.0-x86_64.tar.gz - URL_MD5 54cc36713c2aaa8ff378ca342778e57d + URL_MD5 4e5d01586fef4165c4dfd1f1a3595e61 CONFIGURE_COMMAND "" BUILD_COMMAND make BUILD_IN_SOURCE 1) diff --git a/vendor/ratelimiter-1.1.0-x86_64.tar.gz b/vendor/ratelimiter-1.1.0-x86_64.tar.gz index 14356503221b1460e211bf2aedb7110fca5765f6..d127dccf27c358c054ae3a237162c25e4aea5f83 100644 GIT binary patch literal 5061 zcmV;$6FTf4iwFRrCE8v91MOQ2Y#hgV-aC>ab$T3aOOEWw(b|?0QKrbd<3qG$DWs{D zmJmsu`EXpz>S}ejC$4p`-tAGM6FO38Dp_BMvPE1NMN+t^;~Ght3TT*aaxoE@^<(8pYzYmKeID;8P(9@dO|m} zOr!7{DgjiswX~2cD*Tn)2b)@3Tbo0n*5;rP2!?`zZGzbHn{tRPxvZgPL{Z43QpSz= z7Nh?kEg7c$^<*TTi)uH$AN>05-_+6+T5A7KqLgcY25T6)2{v#8w>CGswSTCoImESp zYbewrh=H46d(ra$y!{)u+^phTzDwMr$2GB6O=#OiM<>Fxj+`-+%52BCJ*pnx?h|j8 zll!_yL!3?q&`LV-HR|isqwH+OXd#8gZSidij^N=A_{%UQihCDM)V9`5K? z`lZgD!Fn+8g&{3zD-`vt7@%4cdQwjy_tZoxmn6!Kj2esS5mAlDQ^&MusqvmIEl5tRY5*)XbK8k!Y+#(t6U#jFXeGxtvbSjm0?jRN9rh zM7L%rsdRbm^`h$#5pfvmMe09syk11Av4vbRs~<^fQ8AuM9-$wOnxkBsN}!vV8ZlCt z5f{s)T3jMyC}^m-N9SHG8P#LH-*$%m-(A@GKdv8Uv$lG(Y}|PMZwjEkW zBJot@sDdY1l#e3A0>bYvlcd7Kp+LE06y7(iBbiXJY-$J-eJvR+s`rm1Bb}*40_BHr zFocn8XDVrE$Bpp5$P<{YjetrPF)ApzCAA19={i-?YANZ{)F{q?;eEjXk?7OX@e%Ap z0N01i=1MG+N+^WN8;cNip*CiqDd|iqnv2+Zky>mkoiva?;0>SjDZH&@>Hupu%EIB{ z5uuT9{zXd2YJAlCY|4nF(+w%K9BT|X`Q3U`kR%3l4F#G)pzq64_a3juQ|zH0VVB@3 z*LCl+Z`#_1{RscABb!I zZHpX0va@FHvTP1sGJ9s^DQN+CW@S^F&r6rb7FPJbdde#ZWHA%dCJ)=d?ubg>uLnxogu92x_I^JAme1Y;W>1$Zz# zD^IL+blGN)oF{i(=Jcz0oV`Y<=G3gMuwOoTb%CI-*C1nZew~?Tgc-?IE+SPK{o%{YQI`)+-}0Tb%f(@aSH23X+}2J zO|{pcWFt^X>gQO&gZsc>0SD?_HB*Br=`5}8;8{$2wGvxd#xTeeF9lF-h{e~a`JW?) zeky;Lx;RPNe4+;p_HoSEWnN_bJ;D16T%2Ri5Dfb!IDPY!_~u!Rq0-6VEn)DowZnC& zBK?o?=sd03X{%qN`j|gCSHsIqkiKRsUd}R1jn|?&!RUX>&Ng8KP0)HZ1-v+|ZP>8fXJ z^lHVEXQ*hgqUfGjC5V%lGqoAK9;q9pqg@qB7rhR95f@4imU)Ob5!b5GF7 z)e?F=x(kqcNVO;|q#sR;hlv~GZRF{h%_JNXG%7Tz<`0V%G>J8N>~&%^x4y_i=_YYu zjF|Tnxo#hOod926HTF8D3;yvKRgdY#JQGH<`oNSf7D0Kl|J%kHE~H zXeu0>&F9{c^P{-gWb?e0Ddy3nG%pydadyiK;|2dy-@$~j(ThT^jnaH1kB${8=c=u| z)ia$RM9OlPy6`l-v)Fz#X*}dEhlB<%AurG<-o3FVFHM`38#~OmQTmf7Rxv&1+-Dpr zslt_XuB4G8#JL?TlplnY-y)PG1{1GE(7)aB>{UlCS+O8$UO*Fqar@Xpg;71W;4ymV zewQv{+H2+xz};p!FJQh3V*|MSS|iC()F=&xWy2C68twpKo#h0I%T(by+oELsgVs(n zcmagkZywqc+Hr7(tc1$fZ=N+jw$C7OgX0)opMgQOgX3V($Vki8hCO(ftPLL1=2&{2~Em4dz;cb z#B%-w=9Ur9D(0EY+%px(-HU+Eb6oQlS1pc7fy94@RPc`}9&o^vF5`9SjAy)%yMsto z;kme&6|a1VRtTS>gc+7F{UOdDFQtp~ADsg1`47cwa*_<2%P8w$z7EIq_xX}uKzyzR z*9FooC(?XILNyp0ofV8bp)wb<%kbS?CHlOG$#WsAn!`4wKmOWzr+I-e($iLXrx*4spJEogV`qH_AWLA9a2u*Q)&tf6I%PGa)J0`!|Z+2;xT z^7F1GIa#!F2w8a%F}`T~Tto6txSL$sWt3ZyyHD1b7r;mKqF{bS@D%NlTNLhUngB zC`CX(K*v?IP9QzOxQ!%`D%uf9^UU2sp&1(@01Uew(gI3d1R(E2^j7!?$&1u#hcumi zm?S}~S52R*puH;cAz8A_lT_S;yU27`xml+~F%3buSf{mgg0Xt{^t@b0d-uHEy9vno z;iZ23=%>VwY5r9Ky(V~ap_8KvcoCATbIc;tH7n^`?Z&<#oWoLY;8vRbHX7^)e;~M) zO<8xETd^`R-oHTdo3f3uYzW;o;H{oqR_KF$muxOkypO4RJSucDluid_FnKhYI+jFN z^>CaV@xZQ+NH%Q5td<$pGUBG}_DxYSdU#W`Ueq#~RAxJZa3g&jIf2>360%wxOKpnM zIyMfa5?W(SOCC9<=|gI&kve-g7dfgK?3rw1I<6YAR3_1w%|sfx?H3_~x1+Z1Lb?-L z(l`(}xOErauG+b?N!Tk5h<5aC|MAh*QEf!riKrspx^mP6MY{p}=;ViEu&kDhipO+g zsCaBekFz$#<2kU?t7%c@pbJy#kpYzlMc}v34vGf>c<-Oze}e-Qdkbz$9oK30c6M$T zH}CBotP`6X+8SEKP$1Y6Xbm-qoBNPbSv4rWHQ0(p*MOMki9W$|yw>ySmDM#kv#%HE zKQ4FRkB-%~r@Wo3mJJ{VpgjQe4J`dpoBkNkFL)Vx#hYHtf$3iY`a`U|x0@)yarq|D zf62m{M!`fKqv24r$U3Snri*##~?P-S(<3;@<&|h%S|CG?zA*dbb zPjWtz`UCBtL-vuP?k@p7=Af%Z`Zs}o)ycw;inT$FjG(=Jf zJTirbWXjMQQ1{%5l33&@aB4$JETbkg!L?vlD}@iPm!nmb-zi0Sg$rI;g55%F*tn%p zME_n!{~d5`2Y%7wV_c{Zssz6DgPvb`>GMN?pCWpy1QGBZfER$j&QG6Zz~=$~J;2vG z>Q!B0m*VA*11p3TF8J~i%#Z4KE3#|Ve*;|cHf3!Y9Xnm{eW0feo-aVXzwE+)$_4*@ z7yNsme?K(+FG2rB7ykEL@b_KtDsOpwmkZwQrT%m+qtACiKgqiApLD?|K~D^tSOz`c zcj3R_g8!on{=N(TV;8)#qCCE)g8KRW8v6V+;M-jIB^P`j=xKwl_yXX^0DlkgC!u}+ z*hSBCF8B+e=dqRa`5@ruUHIPy{#SuN2KbB%|NAcZPe9LxRrL8R;J(W8{OeutHWz$v zCDs2U(BBLFp*T7BjOkiDinT0yW+?^l zSCnv{G%)Zx%AUdA&VjD|y^4Y)n}Z6`rANpqs;Y~Y~4 zku;%av?F>JDGm<@w^6InY#Lb^!QW8{wooXd#v_UvKavXXiy*-^thab}`;kts2`~%{ z0<0L49(GX#iUkJR5`eW@msOOob`r;bpuJsC}-cM^Fw*r#df zj<`Oo2{A+=eQf{X$H9k156~4gi(WVk@^&Vm0TGYi>_hc*CSt^eY#h0H!vppR{vuq& z?VKIgO-LI<_!UNZ9F1w$lXr_rHH-}DRZawTo~VYFenYs|*(#|gAL-a$d9=6RXwy?! z<*=I7n!AvR&Y*;1fx1}=nynnuZpsunt|Cvg<2w0bO9P}Yyz;vZ{a=HFiDQ7{)L6r$ zxu;z4w8z%7meKPIkCWfRYrHo9?F=6Gme=!VF8G!TTR)~*?`+K+UJrOzg{|jPjGh$7 z9{|5kF#LBg{I4?nxL($`mj0gMXY2I=gWt*ED=KaL(+pnkg6ow|yPpTUUu5`MyH7JX zYxmDx^j~zruejj8s`B{ys`7Rpbm5P<;D1!*tZx|V`#gtR@7jOG;g17e;P7F<|BJD^ zp0RuDGMk_6SNAQm`R`)*TRDEKzpbpc`8P29^$adD_;(om9tQvSYN!9!IQ$uhe;sgZ zaAH08GJ5W;DX(WIhrb2*ZVvwi;QfsLjg0;ngKuK+5eEM(gMXFNUj^gt8w~$v82;xO z{BsOG&*@nY`QjRfuL1oP%boZEz-yM<`s*0|bqv0R!H;lyhCz?P@U#AZi{pO^_@C!+ zE6y)7de}I>#o(J6{2c~o<5TZ*>bLUME}zZM=8YtSZ)NZwGx#kGKD5HA|1Y3kPpl}f z|4$hFJ_he!Y2ytHevH8b4E~1<&gPlFWN>!Ac#pwD48CrajW@CWF!>+(bdj4{|&@h<#4P2WLMjI*#7g^9RF3&^O}pEe{j*$ z<+u4O8NAnT^WV?lgAD(627k;&PsDG>Z3lxNW%NJ5;MNY77yjoV57cn@AHefU4qpv% zsO9i?;du>*_W}Pp4xa#gJ%?WcT;%Wy@N*-F2La#A;R@jO9R4l9104RZ+&iuZaBClp z_s1&j9B%D@9pZ3nKkEdCTl;;_ak#ZV^%jR)`$U&H+}ii4^f+;ApJgM5Tl*%vIo#Se zImF@CKFA3UxAr@p<8W*LqQK$SzQYWMTl<(+a4p=5|Npdz0&UY}9NrGsQ=A=s#~81< zDj9yO9EXk0X^8V`khR8>)$czGIKSh3!KHq@{d&;J%g=y(J0~D=e651rr_0G7;0U~Y zP$*x283vxUzm4l(C6v~`6KK5u?YGiv4Ttm3yIkxK)j9288`Wj(?-ywO`Cm`SV84OG zJ>2yXp|nkK8NRg)ScW$tl#l;$kYC3U`1%hCVJZX{|ceB{&otAmg_O`fOxmKH7efI(9nqf;`-rxMDgGbd{Cbh6Gx+Z zM%U+a@3!RPh*FJyNy{h#U2 zr_$8WuP1&M`OV9>RaPi{BW6gg-;o^e0`3JNJ zlI0S#ebL`v`26QBxKux5%1Y@PccV+HtZi~Fm0}hV>dFHC2Cr`^vK6)N#-&E-Qnj3C zG+yDZ_td%SB}Y|RwRLTIMR~Qg%3(8J0cCEFE56w1@&uYBZCQC`d9~wud$sW{qXa(~ zm31z^cPuXMX2d+%_0a;0iu!Fg?<(Jy)HrF^Ny<@9>$AeI!ZUvLS&fm>g; z*0Iid)r$OFxq%xSTprb-u7>X{)SPm#=e_+s9Pdudk{eyI$qh)|)uQ z(POu+x~%dltD~~4!kXCRnsV#fs~uogomh_=hrO)Yb^$d;K6YJ*-PpFwX!LJscEPZx zZ1%eA7D!d<0(Ugjdg>Zo4nG(rDvq&r`dlDo!)j^qOU{N`--29;Jmx@cw0SmMwBqJomee?9;I6u-I4Ykkg!mBu_N_LpC@B)_1fps=(^k}OoBrINI` zNZ~f(4x1o5b_*W_EMMwP3%aSO&^!T!)`?x^>9n;fK#Z_G*V3Q9E_&C%@h)&-nu zUgQ=_M;{sxj~q>W(&yrmQAdZ|+J&;Pee)I}FMj$j@+(j#A7)>hGMvrLi@b0h%d^DV zkF}ceDKSV=(c+?#V%gt4*0tB@L@~NTMPa2NCRn-MZ>s!ina&WV2{pFRZ*8Hr5nCuQ zYztdQY~h+=TgbfO2q}VR%(hM|6dZdMs|+9ktKk!h+5&Y4LV?q^P)%Q`qTkkI9g%GY zY$5A#*m^oRGQsq~{W?JiMQoiJ9i;6XhY;55Y|dU;u!+6r`=MH2Sg`GYsv}`*KQO@& zeIVHuY#R}_826or-{7@6az7F}jDdu@dZF^*LN2^$Wh2?uj9^t;s0;fu_=)&GtNW%H zQ+F8a?u9bNe)VSA@JDhX^bJirZ3c7?V`vM#MI$(Px2BpdkdA88i-PGzst~f z88s0czJtk{e)U*i;X$Z*1$8g!v6b-}16$`_3HnGazRb;^gMj{E`zeRmMJu7R0#ZN+ z8kUESYvOH>k5{&e3v4@;VQfNdY~rZc#ETi|V-0kp40PJwVIRiPs?vFujar&YGQ$9jf4Niei3 zY&`?ZI$ZtQZr);V(+Z9m(s0cgoAVu5`rEk$iYBC=9JHPhgKcMYckkz_(Ov>i?a>U{ zwjIUtTjV2T+nHg_UI=a9NYL2;ur}1uOwid101H|&QA*PGY+6~JX6<%;GupurwPp(*phg2Tqb95mQ3ye5UW{5z4IZF^ds2f3P%oG| z>e)T&qp8OZ2WVd?a57ZWYYSBzhiUDXr*~lY{i2{bP~mi}83+eX+QMx(ZMM*1B~1*& zIW;W!Ct<=13mp;DeLq1(uP5s%ml)871vn%8Q-dQ({^a0@=&u~Qjqf$94MVrcT(&JNpk0!GjvVsK z7D`Y>@w-w}fjmr?3o?};U|f14=e09RS0cDh_2Zog=5JV@PkA0|`ss3%xPQYug?NY+ z#Z~D`Jif7cex`OPILhayP*+ARLDks9zY}e7i2UZ{L?U?hXPd;zDFM8f| zk8$2~<89IuyEO2;ZpWKkM}$_0EWtUAsXJsnNiB!l=~xAuRE-MZZ>Y;4J2kz0J|X zkMqBJ_`!H}bcFr~)D5M}h5edBo)81ye+Q`V5J==Rb>)PuC*{xv zpZx0ld3h&D%1)s3_|+~kek0?`4w?C5LFw6H(sVx9B`BW}(MzDZfTPa&JA=K!jAz8; z2W0~(dytxJACXtb46WRWUp?}v^D+aQBNxOW>u$K)8{ z3n6r`AV%9G7KS^Sv)xAC0?Gxz+8uLQ;m+?HQCPV5C^yB!2cv5wWIY?Uo;@@$$Mix3 zyCS>h-4c_C;G_uj@(B%zKpqg;#~HW^&`R*9Q<@mZ3xTF*XfhY|t3?#gGHY+kdP-8t zdg!IA5`^D2gT@I`3k_zME5IK%) zj-xmJb`LjuF;K9rZ3Hg~ft;8u&!H(vSs8KdrT!q+dKH@(_z`Tz4Mzn2Sr!#paxIHW zku1T#A|y+Mc`d@%{we7a-yNX-yq3KBmIB}w;S)`uMQCw({Ekgq{H_*!{SoLNAT)A) zt-G;KBiDHD@Oba^u}Oz_MAqkaVj1&a6i)yz%zufznfb4f&t(2Q@{*og z5>d!zK_tP#f{uhz7LrI<&B8bmY%Gi?!OlW52{*BjBJRx)gpDjr5ch-7z(T5s5jV3i znFK!z>EdtF1fi9MY2u5ZX=fo*ym7K1+{?mr@ep_mvM@`08-xd0m@obw9CWdeC(Z!} zJ6N!gu$zT^5}szEfP`)q3dOk~>|>#bVvDd)BEARh92F>0j9a}BDYE0UkHS=pKLz9@ z{3V~HIW!oOqqCKnEM)5B8Ddt;>t!B;FlczQV9=9~6a%$mIGL-9`lWxfG1Q9aV1glK z9g0EVC+btye;bgpZ^})XQTEngwAqwub-|=;Sc4%5;~xXSKMFqy79xJ?3zPKYU}bYZ zQ*K+Ole?Vq?L8QZjzTe^H?!dcP!oEX+~Ti;E=X`IN;9s0Mu!kCB~U zhu}Lq3BDU4c7u1kwfseMFcx;A^5v?f}MK^cD+IHy$=bV{E}ezY$L*+ zr362yA$aO8f*m>WJ!z8i<;SN<<@U+RnD^ zY~0S)?QGu8_U&AuU8x~g>1Ox^m)<8kfJ`BWb9?aXgrlkWXtz>vtm+!$z3+`}jAql2 z`2hAvCTUZrKuU#OH65kYS-N-96@Ip^6$W_*@zZtUG%%V4f0um>7Q##_o}m*LC`Fgi z_7!H4;{1NdPU39hb)p??MA3xJ%&CLxK;|8;8VhGIj=hLh7U9``qkd%#vx7s?Mh)tUF6kO$l+*ty3}( zTzLcyZ3SiJvHfQ5=V-IMgGZvKBNQSYLZb%rD^h)_sN~XHX%z6BV&CLeI}{yc zfG1ei-uPjfl7uetSj#HZ#kN*Q)dEKC=w_h^;hu^vl%JE;t^`)B{~OXrMn|VLIzUGK zF%fF@jimqFm_YRssqnNNrSj3BhTy8rVAJI4}`z{RCF}BtdO%@=0oPYN|4|#A)}_ z-e_(S$Q18PqXz!4SOvvZQPs_O-!&NM&TcmNqApH|TS2om&Q4EuY%xPbYrKPL;w3ZI zpA>QM4#jxjEN3ui66vo*yg3adFym14@$#Ey9N{~#DBpo~bO%l|=RTrG zSoo}7{(2K9mz)A$xyVmmiZ5TxE>qc6r_&X7HJ0MHp+Hlvc$j65dKiq_E>qcr9&)uF z9IA&CY78eX9K&N;4|`M(Eg4Y{Dx1*5Z7?XpBH4pnyH%~-dg0oKQq_I&y7)N+fPdNz zXx41N55&u%HT=8a2Kz`X2b1!IX7ojB5Dg6U4QtR*U7Gu}61-{WrIkLQCj%N9A{*1` z6NfTm`clkCGQUiHQAsaTUsTesRbN!nZSUo>Q1#ORp)+SI}b$ z^OZPXcIK}~{s!i6K)#Ckb;z${z6SYf=5Iv4hWXo&U(dV)`5T$vg#1m+*CBs1^YzGo zi}?oRZ(-hx{H@G4Bfo)jSb7@2$kyN88bCbx3oK9Vi zJ1QU9(y6PylPyGXpifmnI(;na`pN{5s&99ezB> zn)k7wJgPabYJQD8enarQaN$p}YD=`xg!|frou%h*{Vp2CO#L2wv*TyNA0R99Kg8EN z`C0MD)GG+}J_>lDGG6!!CqI6f4Q&~6>4!>by8Li3qFOYk>~`X6N#o0okY~6`PQFIG>vFF(F~$fh)yLsjc6v(=|pD`y^QEgqO*w3 zCOSv+iZGYx@y`hSIf3sG zc!9uQ5co?1-zD%OfxjZ~5`nV>UMBF@1inY$6$0NU@G61V2)s_<2Lygd;70`BAnWU4KW?Hv$9kfw+kZ3!$&DygzV z<-q-G94ZG-uTc@I?a&)*9L(cCbuk~tFx|m!K?3(e^Lp_m&YtTic7Giju3m$)btEH3 zo_0n)LW3SwJ#RQYn6pC9cT~?$RSz`&?HaX=&u)a`b}aU2ZFhXJ4cvCFT4im&>yZ}6 z=4AsDwLEJ}BWw2#RLT}>n?Mdv3>0%E)|SEYDH@-}@&c9fCt>b0J4AU>L}`sGQ^?aQ z?bbX@zUwI%)FC_W#*R%Ig=(BFLiIhY2?hR?s_U?dpE;{2{$h<(MvuR&`z7Q4in|E^ z=TIKHVAfw1j0{+ImH90bqI@wPWqxwQ`}pb$FPP)O|OU*DC7mmw#{VuS?R@ z&}-gVG*oq5_whwnK-AhdBS&)NmZ|pt&yNp=x`70`04aasbU^6;MVFexfK#ck+*_{y%J|pvam0td`LC=<0Ql ziq1e67PR@PT{Gz-)KECu{GG4@6yI(^Yaf1#zn#lZyMraS4woxGD<#}3W`$R`5-N#h zKYl;r!SW+bVfhfS1ZWWMIc@%stgRHaq^$kDKsX|6h)SD}In>W+Uh0V(#6qU1milm= zzmOdz2Us6-|JL}nVgW}{R!e5lNJ30h9SyNJ?mA$rjWmh#QeE;m=dkt6CFn{k+ zhv5(E82$mV7z^etroHvCSojEa{S9Jin1B8rs=ke+8s?vq)pO`78|F_OrRsbCDF&ao zCs<(GztAFXmnTB(5_WMlYr?bWL434`eh(>}&iXv6#|$=xUIV)%Sxv~(z`Ao{Y{5-V1pvPOLBZjRWW+P@>I2*Walt;f_bH}M=t+Ps_ymC z2AEPj!~_rRo-L4dHutKHz+JjJiK9s9=iEK8U-OcQOT34unh?LSf&EX_l#jN^2vraI zXj?4YL-h$cIz-isz=ay7dREq-cQtO*X}snWv1$HYus*r0lVU)2t-Gu{9MK-#s6=~G z8r~sQZC~V>M(bqxfLsO$PdHZX(YhB1^A3e~9SV>7q+4`Q9;!q6xI#HBcGc68gFDqa zo)r|l9_nR>%E6lym1lkAqE5LII#WmHv?4>*7kv1f4i!LTzbm&`R*`+>0?X8$efxI~ z*;nM^MpTt-V6Vf($8}7+Dw&X`__{Jhs{T+K!R@Zp#b?A>@5)Vz@XsW_#roFiQ!3}J|O8^`bqbr4yhd)uSmkiRC3KCcS;a#`qCg}YT@MisuL3NI{I z%v|H!(9+u6(6XlG8sD{-Ex#UkX!SL;G&kScd|R^*)p8YUXu*ovy1f~HGDFoyszMs4 zdcn8&d}b@oxojOXTe~r3U(cGGcLRE0{%R8yU7NM|4=YW{0mqSCg*Q85UPTu~ifsvAAM~Lmn(KNE+IOzT zwpE%M(%2^kt#+5ZXZ21HYofT_d(+GU^LvP#SUh%w9t)&l`SnEZI zW7?px9UAq;jU5+^Y!pu^RU=}%q2ED{%-!gc#|C6=eWMWB2K)`v#xCaVX6zE@jIr)p9hLPsyveonUSFrJ zzGWW!*t*h(pdWuvvh6xY!2?o^(p+y@DNS;_pxLNq@9LIkVOD+mG z$lg^C4T`1iYIJ63AlKdXGNPdm($GE4KCHtQcQu7`0*!Um!FoD!aIVP*uT22E!@TG+Q4fO?mesfh2A6m zY*^rpVxa`SK>Ur7f{5;Qk##?k_I^HT#PKgT;E%EXtK};A7O&33|GwYihw1VLu;21G z?X0_IxwnXAwruI{@7mtgSJzCHVqv0tGLz|^+djYt`a7$+>{QzBEEY<&IWcEj{qPG= zUUcF_!M2tf|7m@>IeV$DY;K}9S>H*RE?GVkwL&r5J(DYC%hm3wg7~?7=S-m@-U0B` zS$DZ&caIr~fI|r@zX7F8d3w5Bas=nS*@f5aLec7)LbF)>-T@d}p={aJTzVSM!=RZ$ z8AdK+%(AndBBYm425Z}iOR_r)C2^jCo@_2pJ+pY55lzU5G9m#(+=72tVnht3)Oy`D2V^sk@k znHlfZ*G*}+tmxId&pe?YK6di_KWR5#r_X2`TWk8fKCf+S)joqo`cK>5s-M@ktk7$x zPoJrs)NWfY$nI;p>+I?AC$+w7wVPI))_3)2ovlz>&_}Vm0rr))Olx`^D<_&7n%}JT z0;ywP(%%xZ?WS|HRKQ_4s=;p3e||xewqu1He|F}q{?5yzy=V2plcGuQXwu)&SL!#; z_3FEh9oOGGb4=^J?mP_9yN}I$o7SWs7GvK=lrJI5L-^ISOSJwHTi+NRbSF#>th@>m2R)VDP3YZ_b7BYKa1^7z8-=k=b`+U6C&^s$rr?qeV6 zC)f3!1&y|TG<#NW)i$@D17(~)e*D;i-lwlz5Tc)>>GR>Pw*~4vFxK$?7fygxoNCZE z`?~h&;OKcG$de;+BM{<=STr68nL(Z~;s=a4Sg=)@sNT(rV6iidC%83Lo~@MeZ3mpy z#}fy6$T+}e(yXgAb)5f?7iKq#Sad&BpSx1#pBCs~8vL;Xq`VCsHxI z)Qy2WcmMvOR*nIU2*IW8`y6O_|4 z=|Z|VkyG+KkS^AMDoDQS3NLWL2yrt6T=U6Njc4ZOSTSwcoZftsGhyH$j7`Q(;1y9@ znQ9K4zPQ&&-Ec+>!~;Qtn~@PCZYJ4K0w#@z4G>#6H6|5dj0IvN(YTR7qbOyjD{RS2 z?!*LRf66?-gW*6TK>`J*2C@Vdp%BLm;3~m~qVcgnl1+hVS$QT`%_H{^A>jX9TA%^z zGJ&;3%m|u8W)MuNn4Yw}Y9v5J3YPT#*dI0y7~!ov7zmC40`sr|ez#Uag;sNu+)B^n zBpF`L=cOPbc)MZ}QE^@$Avh>GH<_#M1h|{^_BaZ*z08351`Swo0_?~j~gWF77$U}1%-|8H(+}# z3cF1PAz&G%SQRpn0|VR)$F}zI=+MyCK94yh#!0AP4vg@xF&zJ_iTQ z0FGjjTlf~E)bo%T7LrLCV<3bmpRE?8r}4NellDy5jL?=AGCl0<@FlK}lr9zgZbG@g zJ{}tc?=@lsM`KYlk`x{eO}LaUI$mTLyvTHV4t>K?_i4&h1RPNo@=nB(E9a>s_esCp zC$L?kL1jtkkm(5vhk^`^GOyrFgkun`fyzKX*|3b&(YVMDhv2XU0-CI*r}+dJD4U+B zqGs(GUbAEnJtQpQP%u^Jq#<)f!LdLrCbBq3aR&n7lp6r#7on?#4-udESEDAcytEIZIU_fk?r`*Kc&MCF0{mz)4dfRs;j#AZCJ) zSXB#?Q_?U@lWxY27)c&N2Plm$G7R2N>R3pF5*{~Jd-qX1aF9cM8a0xbQWwf1-x60T z2=<9S#VW_q!a$Kwk`bgpGY+}wLg`|uIOa$yr2;PnnI=1GmSh-?Cqb(YLqj1xHatdY z6RhlDG(L(EDH4Tr!H7U7CeV;oMAcDE=4N=(qV)|M$>BJUi_F)}LMTnepn$3mjs`-Z zxErneF31AR=mB@KNDE_B+fWq0FBqix+LQXPzkNPdAPCRj9;1jj7htynN6bTi_Nh(V=9~) z3e)K#mw8seeX_-3(u9KWoiyNdV@3j)gL@9z$zW`WfGAFfWp!+jA&+?zN0d`S+B6ME z7j9M10}qFzgMl!*rU`EH#Sb9K(%?i1#8MHKt5z-PHUl9zC*Z>cGcpvt8p(g zVH*4*yI2%pmAWJm4SAY08j%7-Lc@_%M{vuQ4)J8aqpzoTThBn>){aea$lONKHnn&5 z4s7n|oVIJF+^)%73FQG*yqtR1-1dRaf&Pxp$&Su^%nZVo!;`;A-09|M8-l)7#T?uc zj>t90#?ATN=8HH#Ia{}@S6T}AtpY^DRPMj~Tv%Hrr zxLo|)h9_})`s7$TotkV9noGOX8{|GK?WUc?J%(QCmgVC*aEn%%JI`EU-pF`@6vzIzy)%K1s>u3yhX4u4 zDmy54BD)aCV%TH}Nq|U5LKZgB5Rwiwgd}ET5d{>H#f?!!9Z*CE(Q#!!QE@?3K*WJj z6crT|XK+{4aYL9_ul~2Y-aq|7XXZQKnRDy|r&GUo`&PZGTeogiy~Uops0x8kQtmf5 zb$nW`MCw+*vgZy3{t{V$7@jsflRakbvIbuqq8}|K#%8;-5TQYQoTo;bMf%40+%%8c zWh~IGVY!7Fz6x2s4b;6=yx<&AbvmDAx%L1q&R@@jMq8ntb<*|-Wp}WDl6W&~9LJmb zoXpvhT9LK_`BbAWg9|Bk!xoiQPbsNwtd3W>s0FWD5w>F?D|m{hdIY{+=dujcUh}0j z{8}y;E1Dy$+739C-@1h>8{I*RrFm&iR?@f(ZEndElG9~6sn$##K7KT2e;NLgpiP=u zjYU*Nttmu`y%MX}0<8uQcw}wPNy*8Xc^SFNf$F6;J&zccl%1Vs@8V#U)o3`i+G(|q znhGf^vTQW4LRer&$Ci(=duF9gGEgGDCuQZV*6Qpzfr{X9_W9-lh(k-zxUERuSFER@mZ!2N zRu$&S*;71wJ=&aq3{SE`x8Q_UDN~NXUn>1!bj}FZb!znnBxC-Z=BUi<%wc&sx%QYW zJ9&D`OIey;3=Fziy?msG1U0xi0)H%q>pDu#o{*&mo$`XBSp5~JzvA^*g8n)`grCDa z_LMP}9a_oiLULYqc4|g$z}D?Eu_mLrN#xSRO?&uxh8~P6Rv0alS&8ahDoVE9g0Z>f zVm#&mX@oj~YK509Et}=^gTd+Tf9r{o`Pw*x3(S~@1=g7Z>!W%OV|xf|F6;?07TS9V zRn`DqY9;CmlUTH$`x!mXwkrt_oQPmYK{& z6RRF`F&;}~7g%SlvWC&B8ib|4Wli2+svU}RPuiMMhJFC26qDz-->$Psp*9 zR+kof?Bz09S%H*VkxoxdNgWitg^y$94V@_ zB7mwndcov3t=G%R>DIR6Sl#4$^~xF$mFcO0tDta3b-5m<;1C`2YZ-*pl5fC6D+ABV z2^zf`#RJ=bx>MU5uEqND0@>zOn`hRU*t8O}yV02`sX?a%@9kJa)g38#jlzg*?Tk~$ zXJzMG!%i(<7FsThKqM~4qYzNzoaEdoF z*$XdvyTjZTFgFyeIe;11n~qY=q10F#FqwEBTZ8?_?l$T=li;*1bINpUgdT30q>5`Q zaa}^3vAP(Ho^uN-^{Njh4ED~2o~Pzd@#(F^?9>sd;{$Opc4sYrP-;KFST6LcsInbt zK?Q8z-r-Y$zs!1*#+q|6mE|z&?8H0gn>(zABh)|5)`3lRskS0rV0&vLKil#w2t@4* z8$!iAfvs=nhTpGv=M^?QD)p2#2fjNv)~2V9NJ^eyM5?NnjjA;=$~dYo7qG8bvO9@2 zVmMb09L;TPcpDo+nHlLBh)3;)SI0+Y=Fqx#a%OsZ{^}>ZZaa$n0xR~=XKZ(SJH+>lNKPK$?KUDKulwnj0riEDE#*dxx!Inu+0DW_G>V8+ z58PLe3_T0S?0YSfnlxKnC%JL`TuT7QF2M0~%;OV-$0y;qeSf4J58qZtNvPv;&)69A z_jS^31zroS#&P>DL^(e4s_<}6xGke}JO>&3{=PsSZNnswLpVOtaXdM2TwZ#%%u$A` z1NyxCF8jE;pJ6DD7n$d1mC-(b9J|=@+wlS2^KiV_al9aKT<)jZ>Nx&*;P_S? zk93?{c;MU);`m6%?~?<+KaS(A%;Q)cRPYv4T2|$Yv3fx-z2&Wca-_H0A?sE^JKcW^JYU>PgxxZl?^7Tr7$Z9(BJ%LN3 zpU0vLKp6bo>Ayxa?A8e@UOw;Hs&oZdY*CNFF;RT zBb}D}h7Y;O{{!+HAuo3UpKy^6uN#`HXF4i9ZQ%;!KHqLG@&jD>SQqYt{@0;jZs=X= zB7c|Sb!zj6T;yMJ;kE7z%Ac51mEJFKRZafH^w>D_^7t(CV(K~e@xCE0XtZ!VUp<%} z*C*7qNdCCkkXLyq<)@vFq{j9SxlubYA@*0Va{K+Ky;{L7)W^@Ps65A-jOVIrEAl;B z%97XDv;7n!a>A*&v(-|J~R_5$sL z>Y6$0V61gem8;x}YqDzk2d*KEy<3oxi3o0vp*7RR33#-d^)aCyF-B(4IR}@y2cq&V* zVxDr(tkAxZ&h5f_b#8$LsOe??QrD}r9jjEfXK)b9c#3>ha63(JV9PPNz~t9VD<@{; zRP~chp#-&Zm>ip0L)+K2g;KOo;p_r+tIBLYUe_K2_ogCS^%jcbc)R8-aOFDHklYsO zMJ~KNEU4!!L(h+4PI-yoBI^X@&o<;s>V(#Fw+rtP9@H<#)F**>Pw=$xpq`F~o-&e` zhq25xc%&h}h~yKXf2pD0YslYX@F;`-)zD+Vf){!Y8}erTMAQxPXoE)?{9J<%bK&#r zI`bWed{-FqX1;4(@_pJx|9dX{qzm`f3(e!|h0b@pi~JlHzMx*{_PW|d|0);xdtCHy zH{?})PJ{fb#HC-oMf@7@X7z*mI~n>r*LRjj?0m2x-`S8)BYCm^b0UKBT@Cpm2JdF@ zrw!i2;NL|!%fAZx8$>$!J>V@OgL=+0^z@1httX54LGW?Jo6A~^p}(i0e~!U>8T?v< z#~A!}(l7Iwdky(6hWz6O?``n#22MS)X48~-Pw>{nE5SQ72?2&|}u~n+ES=@P8QGte+tbo%+S^jcFK^H~r5-gP(8kI%foV zTZ3PAhExBGDF1b5gx3G4!Q%~{-YCcu4PI{Wegy=m|P25;Ut$OoF` zF?e@_&o%fUvpfbLZ18))Rr4g6^!!i;O*VK(Lw}0F#lP0Ue|c7(m-q^#I}vY!^X*3b z4WxS#&xU*-;@5#E5I+Fkk9auBc>(cQ^I3le&j(K-z6N|G@%=QHR>i2jnyI-Gm32i7 zNA?TkjOTHA8W~*0hWBCVuQ~Cz&erKx#0O&`FYsJRPhjcO{&Y9w&DFpdgDX7?JLvQP z;t!h7hco!KQ97MXJOX+yA)bwbPbaP)Q}6NA5Wf}v=qlp<5jWgO{E_xLy@vQSoBmL1jeJ1fnUY$ON_<$}t z-IMsAknT_XDa6^siBCqoog^HY3!rB!@pY*Goy2#d9$qE>Hu}-)#1j#>y-mD1?Bo#f z2jJiSPCOdp$Y;cxLH--!#~}X`@go?B!sgO`zt1+%EBK{`y-$?wV^gH5DAm7!*k0HH|cm@2x20kyH^gPP#ivaLx z;&aiC+lfy@zt~0mGXz9`B|ZWhl?RCLLj4>j{-9Tm zpY$cZ5%S5zWq+%P_-u@K3y434IOKZb@1T9}C%y^wwuSgHq<0Wsh;qI`{9&X&BEAHE z?^~`P)LVFjlS`a;Ch=yN4@VJS3cbCFPr>*)i1=3Y_jKZ2AwPlmr)cjI;y1xQ=MujK zaorN)voT)WLcAP)X*==P&|a+~sUBcIQN)+y_kD@K4135SehBU0HhY47>O z2f;2^68`{tHWBZGxaBqCCtq_ExL4Fj--veHMf^?psgH?^KZcYDck4C%1xbWe`mm%ZP zE_^!ir!kJ)PP{ejb3O5T=Y4Z*GCmT&9Dd-aOL@L=DbER) z@-%1`x;!n3OL;mHzZ3S;gY}?1=M$Im3?(k*8Rb%*u`cDAOnfK&Pl-!;X1SE-N|*9n z=Te?qUCOhL_+jLGze{;GyOifSm-6g(DbE`&ib)Gx4^F zZ+j5$f%2piKY)2w4)HqhlM{(gMqE_D`C?vN%=yCaT}FIA%D;fPyb9-9;w?}ww-PUb zpSg$lM(BTpcr?bpt;GL=a_%G^iTZz?xa{{FBHkK);4|WfFpm5{e5dTgo$2H$IIm{J z7or}{BEAUeZp0hPIwA2a#H&MzpN(`n@%P~W#}i+Q_@Rh+H0+_A_%PW2JmME&yk0_l z4(2;I6Ay!bTT6Tz`tO6p??61fgZN(5!vW$m(Ow@CmrLlsAl@DI@FVeX*hAeGPTmrB z*pzr1%v;+NzZ31=h4?b`-#Fs8qazI=o`iZE<)UXC@s6<1BI2K*9?FRClldv}2{_-y z#0wz5&PC5=;xVX)r}%tP|F02`g8X;Hzmg5KmQKC`cHWx!Zp77nh|fShTuA&%*jqmF zBWT|%h{wU-UQPU;7{|x?o4e_3^zx#-fM|^&icq6pS&&0#gFTz?;IiWv-_#+qx z8xy|`@-2uDLjP(g!(^^xa<$b5?>E{?n}H5{Qn^0a-CQ*@f|2< z8u7at>U1XY$6;4_#1|spi->pg>U06|3sC;4#M_{~W)i;=<*y`O4F52Pcogh>KJo6* ze>L&vVdu-a{D@~(5N`=PTt)mwjHhdew?{qSO}rQU)qTVhQJ)VJUk3Z$O#CX$51%4_ zEArh&d<^P;2k{cL?;hfvFy6mLyb$@mMf^JSi}#67M;!7Iak(zyQ?3W}$FGTJqkX?8 zelE)Y3-LVkyYSXdJ{or3fcW1~&rOLhg`QT#_aV;dKzt~IuuSuYqv{Co7fam3~N*Ncg-#W+<+{6g4?pLjdu zTSoi@#?xxzPs0CSM*IutU&!^0adZjsKck#C5KqQ9bqn!0^oupbKi5gmJ;Yx_fB7@( zN59xe{5+KB3F23vzdXnGhV$A%{2TbOSBdY%dc}U?o6x@w5~fuM5A?lK5cg?Ld4d>^YkFB*=Fsz6tsEAwC}M z*q3-0_}jt6D^UNb#BV|TpHBP`+A)Xt-@qplPXI3%Y2D~Tr;ndFt?m-WoPPA5rWDUFe~PKp_WSKy0moK zvZW1$nWvn(#7t+ily-!`O!0sqDxCB12i(_n|8QU5&;9-3!|jv-MC7A|(OwW3N>EXu zfUQ@3j&U#Hxw8Do_x~BdfHy8wqQaX$kphh#$6vSFvq!&8A)>^m7ng$$ow&-n_M?pT zki1_I;VCIK;~`pr<8dg`OJL9-99`u{T{(3lhUadLhw6_3*FjZb`;{P)KjR$EJyj z55}L=faExb$-~Cm4nvC=cV&z%YxYGHD6bK;GkEKsUd$5_t1IvxY9V5!z@a~)KUm%M zacZn!d2aRv>#hd!(8)L--H<5%BBS7lhwOXHH%wmmKq5GIGjdeaTe}?&770AX?y+)r z|Ed+Vl3kG)-fH;CiMdnIqkab+bAKUXY3FA@hbj|kw?S@=?_Du)4u36<=VC*XK>7hr zuc+4^ze$9;Df2eLU*1zih%PArIEFmJRp?Lz> z^mP8JzaqNvU=Z?sgR=*4c>(Re9hvF@Ncfnn@{(R^dMZS|iIj*97b-J6fgMC?u_=IaqjO12Za)HDdRIa=vA!VsP9rhAs9%a((k|-DD6#Spb+&XEERd=bagN zA+v5C>^uP_KNc|j#@uz20b_d_fk1_)Rw-_MuxJO9I~#oisP4MONcf9VQxXKvI0KIO zwB%ei|Ea8ePWjIMAeg^&%4MYV#k6rR)M*BomSU0}R z*#YNJ*cn*BMef72eO9XTgzN`UD#T4h%Rnv1$<)ffnGpiZs&!vMXDEt>AS%xCs4724 zFF0qNn>n~%tX^(U5#^nyamsrQLldJc#>;=H&?JQ!zSDN(C5nLxx3YP=+CF<53IZ3R z1S)N*E~a8!!?vQqAi8-N^*~+T)keW(-sCoLy`S&&F5aevJxoYa9hn6JLcBhX_e;Yt zCe@A0AdrS(R(u8u4YGVZ$6>U5Gf1c$#jU>*{AkXI9n`E@Ut0us-so3+hZb~?6(xd-OR_5 z-~ABJ*?ckWN>~F9_N@~-fm+2gx=0`n#a)T0J$%Sr25&BPPw6_*8SNuGED1f3mrM^%Te5tXl_^4$Man^ zO~ITy!r#FslBj*G5$#%N@(t7C0fd;!b1GTBl#$C;=DnOpNMa9J^>y1hjS{r}#4z3< z&PCj`LJ5ojBE#JRM<_>t*|mTt8*0#;&j3zSd|7sa8krHl|;b zDdJxX5xLMxUGF}V|DlydA(!7~k>e18E zTnAB;$?#k;&_ZI^jlAcCKyucRu&SEkm67<+TPO9#2NUl~4NK=w2a>fDbY7@&1JkzQ zC5M{zwd77|Q)GtORhrF?i#$w>s!vd1^ql_NwiK~?iCr$HqdVdwmyP!ldXlU1>`~o$ zarQyOTg`BdvL#sIWV&w|tys{`Z)=ZdPZv%BfAxOSK9u3@s8$_ryV=+8n85_vi?HO}HshjUgEEfF1DkM=O;dqdrpG@TI?$(IT6@ zY9#Y6m0OICk5*Kq7qN`$3%13}Zg2BqMYj5*M&)vcN0v0)eK=R#Yhb#?BH-ae*AwcD z__I&uxk>CH1`8P?&3CyyR~vmiTWraXH0oT*CwTMd<``uC%@S2J_b$S}N!Q!7i)4~g zO>@>oR|u3t*acfBeb=8J_ZK6p7X^WQb@{4$_WG|}lLTiE2v%N3)IA5~Na=N90sV)T z&jreypN+zea(l>&)aL(Qz9KODl;`P4bG>=)WbJP#`u_RxM)SwY6#7CDDob|cQE zpvX?(>&aU--ys<*p)UVwuhr#Tt`~R9#ka54xVEtYKVor*pgH7FfG$;0_NaKt%#tPl2O03XT>t<8