From a01f570f97287295e960633feab4c3908ea318d7 Mon Sep 17 00:00:00 2001 From: Larry Knox Date: Fri, 17 Mar 2023 20:25:04 -0500 Subject: [PATCH] Minor merges to 1.10 (#2579) * Elaborate how cd_values get stored (#2522) * Enclose MESG in do...while loop (#2576) Enclose MSG macro in a do...while loop * Add a clang-format comment about permissions (#2577) * Check for overflow when calculating on-disk attribute data size (#2459) * Remove duplicate code Signed-off-by: Egbert Eich * Add test case for CVE-2021-37501 Bogus sizes in this test case causes the on-disk data size calculation in H5O__attr_decode() to overflow so that the calculated size becomes 0. This causes the read to overflow and h5dump to segfault. This test case was crafted, the test file was not directly generated by HDF5. Test case from: https://github.com/ST4RF4LL/Something_Found/blob/main/HDF5_v1.13.0_h5dump_heap_overflow.md --------- Co-authored-by: Mark (he/his) C. Miller Co-authored-by: glennsong09 <43005495+glennsong09@users.noreply.github.com> Co-authored-by: Dana Robinson <43805+derobins@users.noreply.github.com> Co-authored-by: Egbert Eich --- .github/workflows/clang-format-fix.yml | 9 +++++++++ release_docs/RELEASE.txt | 13 +++++++++++++ src/H5Oattr.c | 7 +++---- src/H5Ppublic.h | 11 +++++++---- testpar/testpar.h | 7 +++++-- tools/test/h5dump/CMakeTests.cmake | 4 ++++ tools/test/h5dump/testh5dump.sh.in | 5 +++++ tools/testfiles/tCVE-2021-37501_attr_decode.h5 | Bin 0 -> 48544 bytes 8 files changed, 46 insertions(+), 10 deletions(-) create mode 100644 tools/testfiles/tCVE-2021-37501_attr_decode.h5 diff --git a/.github/workflows/clang-format-fix.yml b/.github/workflows/clang-format-fix.yml index bb4d685480b..feaa3d0014e 100644 --- a/.github/workflows/clang-format-fix.yml +++ b/.github/workflows/clang-format-fix.yml @@ -1,3 +1,12 @@ +# NOTE: This action requires write permissions to be set in your GitHub +# repo/fork for it to be able to commit changes. +# +# This is currently enabled via: +# +# settings > Actions > General > Workflow permissions +# +# which you will need to set to "Read and write permissions" +# name: clang-format Commit Changes on: workflow_dispatch: diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt index e0ecfac8c7a..f08a7a31433 100644 --- a/release_docs/RELEASE.txt +++ b/release_docs/RELEASE.txt @@ -198,6 +198,19 @@ Bug Fixes since HDF5-1.10.9 release =================================== Library ------- + - Fix CVE-2021-37501 / GHSA-rfgw-5vq3-wrjf + + Check for overflow when calculating on-disk attribute data size. + + A bogus hdf5 file may contain dataspace messages with sizes + which lead to the on-disk data sizes to exceed what is addressable. + When calculating the size, make sure, the multiplication does not + overflow. + The test case was crafted in a way that the overflow caused the + size to be 0. + + (EFE - 2023/02/11 GH-2458) + - Fixed an issue with variable length attributes Previously, if a variable length attribute was held open while its file diff --git a/src/H5Oattr.c b/src/H5Oattr.c index d5adb81d48d..1523572f77a 100644 --- a/src/H5Oattr.c +++ b/src/H5Oattr.c @@ -221,10 +221,6 @@ H5O_attr_decode(H5F_t *f, H5O_t *open_oh, unsigned H5_ATTR_UNUSED mesg_flags, un else p += attr->shared->ds_size; - /* Get the datatype's size */ - if (0 == (dt_size = H5T_get_size(attr->shared->dt))) - HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, NULL, "unable to get datatype size") - /* Get the datatype & dataspace sizes */ if (0 == (dt_size = H5T_get_size(attr->shared->dt))) HGOTO_ERROR(H5E_ATTR, H5E_CANTGET, NULL, "unable to get datatype size") @@ -234,6 +230,9 @@ H5O_attr_decode(H5F_t *f, H5O_t *open_oh, unsigned H5_ATTR_UNUSED mesg_flags, un /* Compute the size of the data */ H5_CHECKED_ASSIGN(attr->shared->data_size, size_t, ds_size * (hsize_t)dt_size, hsize_t); + /* Check if multiplication has overflown */ + if ((attr->shared->data_size / dt_size) != ds_size) + HGOTO_ERROR(H5E_RESOURCE, H5E_OVERFLOW, NULL, "data size exceeds addressable range") /* Go get the data */ if (attr->shared->data_size) { diff --git a/src/H5Ppublic.h b/src/H5Ppublic.h index a99894d03c6..49483b5c2d6 100644 --- a/src/H5Ppublic.h +++ b/src/H5Ppublic.h @@ -2257,10 +2257,13 @@ H5_DLL herr_t H5Pset_deflate(hid_t plist_id, unsigned level); * (#H5Z_FILTER_DEFLATE) and the Fletcher32 error detection filter * (#H5Z_FILTER_FLETCHER32). * - * The array \p c_values contains \p cd_nelmts integers which are - * auxiliary data for the filter. The integer values will be - * stored in the dataset object header as part of the filter - * information. + * The array \p cd_values contains \p cd_nelmts unsigned integers + * which are auxiliary data for the filter. The values are typically + * used as parameters to control the filter. In a filter's + * \p set_local method (called from \p H5Dcreate), the values are + * interpreted and possibly modified before they are used to control + * the filter. These, possibly modified values, are then stored in + * the dataset object header as auxiliary data for the filter. * * The \p flags argument is a bit vector with the following * fields specifying certain general properties of the filter: diff --git a/testpar/testpar.h b/testpar/testpar.h index 6c380a989c4..58bcab469e9 100644 --- a/testpar/testpar.h +++ b/testpar/testpar.h @@ -30,8 +30,11 @@ * mesg is not an empty string. */ #define MESG(mesg) \ - if (VERBOSE_MED && *mesg != '\0') \ - HDprintf("%s\n", mesg) + do { \ + if (VERBOSE_MED && *mesg != '\0') { \ + HDprintf("%s\n", mesg); \ + } \ + } while (0) /* * VRFY: Verify if the condition val is true. diff --git a/tools/test/h5dump/CMakeTests.cmake b/tools/test/h5dump/CMakeTests.cmake index 8dc815a72a4..509d29af40d 100644 --- a/tools/test/h5dump/CMakeTests.cmake +++ b/tools/test/h5dump/CMakeTests.cmake @@ -327,6 +327,7 @@ ${HDF5_TOOLS_DIR}/testfiles/tCVE_2018_11206_fill_old.h5 ${HDF5_TOOLS_DIR}/testfiles/tCVE_2018_11206_fill_new.h5 ${HDF5_TOOLS_DIR}/testfiles/zerodim.h5 + ${HDF5_TOOLS_DIR}/testfiles/tCVE-2021-37501_attr_decode.h5 ) set (HDF5_ERROR_REFERENCE_TEST_FILES ${PROJECT_SOURCE_DIR}/errfiles/filter_fail.err @@ -1145,6 +1146,9 @@ # test to verify HDFFV-10480: out of bounds read in H5O_fill_new[old]_decode ADD_H5_TEST (tCVE_2018_11206_fill_old 1 tCVE_2018_11206_fill_old.h5) ADD_H5_TEST (tCVE_2018_11206_fill_new 1 tCVE_2018_11206_fill_new.h5) + # test to verify fix for CVE-2021-37501: multiplication overflow in H5O__attr_decode() + # https://github.com/ST4RF4LL/Something_Found/blob/main/HDF5_v1.13.0_h5dump_heap_overflow.assets/poc + ADD_H5_TEST (tCVE-2021-37501_attr_decode 1 tCVE-2021-37501_attr_decode.h5) ############################################################################## ### P L U G I N T E S T S diff --git a/tools/test/h5dump/testh5dump.sh.in b/tools/test/h5dump/testh5dump.sh.in index cf1b92d89d6..8d0e03f52a3 100644 --- a/tools/test/h5dump/testh5dump.sh.in +++ b/tools/test/h5dump/testh5dump.sh.in @@ -180,6 +180,7 @@ $SRC_H5DUMP_TESTFILES/tvlstr.h5 $SRC_H5DUMP_TESTFILES/tvms.h5 $SRC_H5DUMP_TESTFILES/tCVE_2018_11206_fill_old.h5 $SRC_H5DUMP_TESTFILES/tCVE_2018_11206_fill_new.h5 +$SRC_H5DUMP_TESTFILES/tCVE-2021-37501_attr_decode.h5 " LIST_OTHER_TEST_FILES=" @@ -1475,6 +1476,10 @@ TOOLTEST3 non_existing.ddl --enable-error-stack tgroup.h5 non_existing.h5 TOOLTEST_FAIL tCVE_2018_11206_fill_old.h5 TOOLTEST_FAIL tCVE_2018_11206_fill_new.h5 +# test to verify fix for CVE-2021-37501: multiplication overflow in H5O__attr_decode() +# https://github.com/ST4RF4LL/Something_Found/blob/main/HDF5_v1.13.0_h5dump_heap_overflow.assets/poc +TOOLTEST_FAIL tCVE-2021-37501_attr_decode.h5 + # Clean up temporary files/directories CLEAN_TESTFILES_AND_TESTDIR diff --git a/tools/testfiles/tCVE-2021-37501_attr_decode.h5 b/tools/testfiles/tCVE-2021-37501_attr_decode.h5 new file mode 100644 index 0000000000000000000000000000000000000000..331b05b59362a661b81364da3d7357312ad1e57c GIT binary patch literal 48544 zcmeFZ30#g{w=mwMNrRFmMIwjkR(7IpC9Bqu$U3BOE#tqJo+G zznW*Wrgh@CchUbnx>e4d1V_5)gg~ilzWzF|3^G&)+7p?GiTW&Jn&3olKK~Yz3mACf_VQ%T(ib~rLY!v4{sm$`M%yBYrGb2Smoos*wbx|r}xUAJ(3f#?&`0!h>D=c zix#>qcVD?!L_^TMpA!G`@6SE$OpA#8R16EcI{mXuPQg!YyKU@CW=kNVav!ps{w|BkLsW(J^>y5u<;qMXw2ZVZKRu?yf@+Z%hmww!KstXu)*`0e zMNEHmeJ6!_q_Y+Q^535SnEY64b-s9{>wQsy)c+j2@cS(6ce{2cK@Xiy`1j&Q1HU=&n*+Z&@S6j_Iq;hUzd7)m1HU=&n*+Z&@S6j_Iq-i42c}JN7$YjM zXb9~u?Ohvup&g*6%Rc*YMrU`0){L4i`;3q-O`{WE(Yq7sbOI6mKiMXK7U>&xBJ8^C z62@J0*26jz!upnWAIkNhK{I-PXFb~|&w|NpCS;8#1R(4N=aB`-og{MFMS zwE6$EHvV&u&|dhfe9DO|?eY`I3#9*V?VLaTBfSJo3hkOgyPpvLxu3%XPKK54D=dxw zQn<)-p|7P-yahG&_+Jh{=zr{TZU}(gA9SJ;of0XuGYX+lPP@eR-|Uco4=*kl+s}8D zbo%}=UJ(%;5jANMwQXI!=_VNcPrR6z*dJB@m+2qj^<#Bz=c|6~LH$W?)zPzXUpkdj*l5L$T~p!?dq;6W zI(^8=X_;8}?KytaUB&hDL*};=$bPn*>w6=F%NcwejKT_Vu1hAj!t^ebuQ%niTGR08 zz$skXoMt*cCFP)w{y?m>OfSz8ndM~*sr9BYc6U=1(Wma?I>*))!{x9%?rO!>3bVEt-5+HId%uW zw0_7L1n=giceHSQy{2%Aw>7QwyhqU((BtnLo|t>^6QTwUg&?IV)sAX_P&PjXXrv#*ctX-*{@{aD+TMQ$l37ab#C@4y=5h zf>)QHr~V6)EVmjD1f3ZT(-3utoq}~PWX@XO`%yQ-EV#K zpZ-bypRC|leWTMg3iYn>9ee7tq>&sj`w`duhdUu~hWqIPw=oo(RtT?`yuQODcEQYq#R#4sd z6g<#07T8Kd@yqENJYA*9de^=sdKZ>4=ZKAv+;buKEYK0=alNp=*m=B>myMfGyo900 zpP*EeGK^3u0EunMcp`ofoVxi5tcJdz_lm!R4*v*qoEJ;ApNnuMpWJEMr4KOS$5Zk& zScS#!Q6#(O^kQ4(Ge~o64b5`u%XMt9MWz03tUl`o@6G!r`Z;?tds1M;X52z7J5@~z zZ1*5$igTv!1KGD3$;EfbbzKE0cwGeh zjJvaOp}CN>IFpu3y(CBZwQ%Qp19-U%VSYCHsO@Hl*Q}~>O>P#Ztu$wmKN$DCuL>7o z){3e#mDzxzZ2qXL{bBFHK=9f90CkTqVB^m}r9TGSu%Z6DQOfT<x z`_1=oFS!mkOngDidfdjFZAw_vp}=}82BDbFV|W!fmfdnKg!r-us*~7*E#yBW)>U%EL4a(u~t3A z)BPv1jgj*3L1!xSIEOgPWf>=<+k5G6?*J=-+g%CtSa|lq$x~V7Q)C4QLe3E1S~%A z2`f}g*zD&!L4NUcc8V8@sgh>J{g!9KePhCvkADo63UBfC?d_bo%~5(&{VLuc0^Dd> z4K7}W!JzUU>`DIzu*k**B@f*sIhXmwLgWlIl_sFX#-6a)@Bu%uuNfSje2VfMfL$3P z!$K!5;0{H$6X)$QppkJ1%YyXjRU1qGa+k;OTxJYe_M!l`)Ya4IixS*Yul02M!)aXq zALSS^azA(MY7yiHzegi45i}X`7U%h%z+FYN=&VW!Y#eCE7PQZT1BO1}JZTDq5Ap%= z8P8!|qY^hNpTgHUyUFAY^^my8ftyxT35ygSfmgC2Hn_In;I~sCWn(fHcC&-T;W4mC zL>(swOOOi#RN1UI(=p%IiG0C>67)Q7#=VhQ&GCo^YggL=*|!&!G17HVmJ< zAHNwdWFPMK;ygacaD7s*fYh$uY|%n3?vT+*tO%>XtWrBrxV4vd-=xKL>{rBRnj@U4%r z=bJse?K&#>tm89oNM_)ZKLXB)j%1l(VHo##1dHaYa&Ff`!04qjbd0xQ)rA&Z_rzp) zD7zgG`pa?-^&)J&)d>i$KMcFiUPp@&irnx`0i4Mm8??*l!%?!*)0?dA5NvQTkyzwmnt6Jo_ zYG!~dFO1<%&NL^(52#{eV@&S zBL9%S>lX#PCQjs5|FGwzE5q4)CI`GDrrgmnAmiANI5-a4A=JvA75H%PDt zVhqMSplxb>QJOy~*2#u{-cYbP-G)rA;XR}XuQ z$1&@hzC43V$WM}TC-sJ2@NHiLmW)|~j~<$EN-@=Vr*$u0R0r1dNYP4m`8r$|x{)=$ zD1@AWL0DuR3Cim^QWv7e`EHWurf#x_F@?eWlO2+r{@lyd<=j=8UgeCpckhM?a%-W( zA`H)+kmSfTIc`y}-i(cU2NQ}WaboSm&{p9q`qj>4ZvKvN=d?DlY>C7=m0+^u#~}zT z$;bAr4EnOU0G^46a9>l+xPv!V0Kf5vhXhH?QNj_L0mp!Ev+IRDWw95|pCmt3XE^^mIqeUAa0ef&r= z_JlNN9NV8|$GW2FZHHphSF+r7xhCF}y~ZqWz7vG(>CJ`B&}DO-?n34CI~D`?rt{6! z;>k?uYjl-L6tPyU<(<;5g`3j)Oe&K{+xmo}?a(6F4 zo4)a_zXX6{Z+$Mp+*r_`AuMEvGS|l|3bx;RZqaST8o0NA81r^@1kGpffm`woueaRd zt@Sm6r&kX_^hz0S!eUX*Xn;KHo-!LYT3Ai$k-KR88A2bLu+=R~S!}?3)DlaDJ9$xfe!wAYxS-FarOSiFoK_UQ9uH?XJVLPS z1(iFGlE~MROxoR@hAmpoJ)Ha$&n&o)J4`=exzlGzcz>6OT=VCg3_fFpvmET7-j6e- za@?DX*ICeegyIm3QaVgLa_uYDKoBMUK<`eilaDPlTfj zAHWMsL*TvAV3Vpn@x~5&)=}7>D$P|O>%+6ihfQHHW9(JfZ8(`FwmgK#{wCa`gzdys z)_~2u+78!zH{sm?CC*5+8T6f}v03eRaL}q&qGfK63yx}{g>(##v+U1q`l@ql`@ZHM ztCfQW+g_acn~iWcU0OT1+YWA`#sj49f?c2gSxJ zw0k)PDiaLYj<8IunY@ie49Ktc-Pw*!&*{94 zZ}F@&!#xjkU^SV|o_kHD!5PCj?=#nMNTdYmrZpQLzBU7kQMGvaP#bAkSkf*rpn1K)bIg^vKz6o1k z8unkOkLF_c$c?RTsH&leE&-v?bHf~PyA?pXY1hyy^%Pd^x&=>fOGgQ*Y%sKH;YGS3 z?6Mln4SJS`(?aec(do~f32mc0)9r|3Q4$+cXo#O25LWCBc>p_gw|kms+T>^Cc-xKFKS2W{)}bugHvJ zk}Q9>HLG8r&T?J6vB6i|YPWA4F@N@zj?vO%CpH}<;U#r&)gM5$?L17YGQyd@itOST z73^pA1!o>r!S1WHn9RKmAe%7{-#i-)_vCugGmXh~%re0Eyh~7EJ`xumP{-q+hH__8 zm$DJ56MimxiClJV3sE$;{1?;l8ykNkpS{c>SR zr77L@+aU}MTo`nr1)riNIO$eAzE$G96i)JL%B zze6$Y?tOTWGl*|^;}CR6-=@mzx3gF4lVM`yDf%j?5PInE=3E-L!_)kFa_^-jSo>Xp zGdgbYFgq8%hwGrt>B+d)FBY!TZcO`HCQYIOD-IP z#k`SR)9b?^uKFGdhLsbg@3&|kR}NcNuVCkQNZ?^n$~z*m%uJ>u8hJ@8QTd28sJd0) z`>FAGU0#CdXZ2!Q4;8tV;cEo@t$x@y9q{1~S2#c99G=R4L&}t9!M4SRS*zg-SaSav z*_N)x4u=+jLdIgyiK67$_j5E}z7Ync?}y^02=$qMuk_S{8Zs=Sp8>!Rn(1Y`qJggyqe|=|^O_ zljhd&QL-6Q#AUfSaSk1#f5Q zUjpwc)}miS47PpLWHM3G+?vE&`0V=`qF{Qm*l=|sH23*HD~gY!zj6gGX*TB4CX^P7 zQw1=1HI_LkOyU|mB-o(I*)V;01TiTHfcv*YvHI=+&a1f!S~tvNs<%RUM(x!QZD+xh zwTE(w9eTX8(~MZTRwGi|8BkA4f;peJ;@iO8fFCue;xkZf zxmF3 z&x#;=f&@2AJ_9c%cEc(yY1-c=1DX$2!!6k#M0)KuSY*|V)*+=3c>OYz&A7`OSnXB( zvB()#uPDKBjYjN_Twk0V^pu_oZbp%7*LkDIgoBPp7`YUggw@+mK$Y@Hl-$$8H(OLs z!+ip9+S6KaG5LzENsD;(UXC#4vp39FQ|4ZdGs4#zav(RfzlxdVON0xw%gyqNu#v5fuRRMbnPX` zsfxzT6%Q%l@##N`QxN(=gz%sDcNBKTDH#97RQR|4j{n&>g}>*IweE5_Z|~~;KZ|c!h@5!-9*SS+6 zJN~QXSST02o(ugyD;IzNKFx;Nog)|OH6b5J?K-~T)DMrwk#gz>k+bD~1{*M9zc#L-_qd&B-5bM(I(Z>0an2t_-OZ;DLn zYEXE8-LLt7eto@aZYL`nT>s3{zg=H1{WJQ%J^lCMjqGN1HodeKmP|UWRtfA7Q8eyW@>?y5_A=kNrB2h5h&q|H^@18BAFEA@#hQZOh=%MN%SUTPZme=gVt!B303{V>-~O)%b*jzCNa&)CM7K?hOHGJF?M-KB z*wfSKqL2h%JVof!{0T6p=sHc2xd-Q(T!Ho6#(TayvDj>RCPuXOqLO!Av0XVCBg)gz z)>+leL%$r$_3L2JvwGq_s0JVL!eP|iCaRM33JXMJ(a^{mh*uR@sf3G}10Q?tg_xIf;Ky1AOm(tCnOV6!(*^o4J!>+AUk^dCQ#Y~h_+=W< z;Y92%OEBNWWPDN!yiYQ((M4?|9MbHd`6*jTR@povzq$i`c0`l2Xa!ky!@#fk8Q8Y_ zL&>v8q<6JH7L3`1y)5!EF~|<5cqriw_w%l`-OB0Dt2XQ`omx74%Dof=+R7 z@bEo_^+~c=6SNz2^3%v2FL`vT9D`9A_bvBJ@4Na8*EHgSqCMf08JsAe047DZ=C#K|a_cr&__+kF8c*<--;)EoglW*^>;W;?<8XRN3Es<8hUh{q+;AWm3=^|a zL0ShtXhq}PF@ku8q=iIbP$}%wiRST{0v9}18r@7L!Z^+Q__f&=l6Q(QH*F`7pRylk zWY$8*os;Oqdk$N-Uxh6Oil8uQBXyBF3Ulg|a9vMTv@!Yys@Ah1Z*?ud^-?_P?iPvX zJsn_nV1?jZ^&lAPH5FRJ??Kd)yYOJkal(y~PO z;y%GiA2m36N1IJuIfjKF83SUuEoA1rb}~NlBx*^o0uoX{3b(K27o2?y_AXm7D0?0= z=pn-v_qu`(IWsvIsr%q_c``1ad>&(a*x^>6EqLR=cl_FdkWuvbHxqf1=!vujg{jPpm4k%Ne;BZgHMj)9*NPM#zYzB z5+cUkk4h!u7mKm?ONwaR(xE){Ys2sWw+|feDWj^RJ>`8i!F0(YqBO#es?4&(sp6q% zH)00Nw5%asr#C=?pB`0xQAkT>eIsS2Vq{*$R&EXdk7m{Yn@i-+Q6Xn(_F)LGvOXS`_QO=9OT{=xuEQ=foA z{o63)at_oEv_dlt4aS!#B8EEMSytV2Zj-|?oO_f{dxX`%Ch^6%FgP4!&TYeqB~~md z$N@GF8i5CQ>2o=IL)j_Th|Zt7v(#gadQ&Fz`I_I=lRHhYJ%+s{H_yXbIkM8hCf(li71 z3?Bm_*FK=cv!QUdUmq~4dB&e3y#S7H$bi$AZDHcu{g^1RkZAPWjwwU0py#bnn67f3 zPNNOvcJEwX=%^zkY=RR!_;eVj=p+!Ohk^LOJ&Pz!x&$ANhEo4}Cwy3WmHsH&3?o}U z@#oDsPx;ZOFs7=SCTK`7^>j_}pOwhl`)LK7RZ}1hA4OpL**U!2n>=(EaRCG2DzyaYESSpyi z`p1Ld6M928CduiH&&IH{TI#Pf3hxG;rjG>oKWv(I77M$}b3>YLU_jDSypVSoRr7~I z)vH*(?Uh~BW7|A>b%qIxzP%XteVxzMqG`m5=q4jYW~e+_%B=5K> zCG(29p8@-nO5*Y|noRc}j;0sWQSnVCX0h-1J)k#tx94uCGn2$o-o|kIUJ%R{#Dg@c zRMU*=cHT+W!9$;s8>?p*HoEQLoyDzaIA#*Gu9oB-vVH{%51Bx# z({ZY>!2=z4Y0$jd{n)r78>iUu;7a;ldi&&H+ygrxZq*s;nHWoZZE?fC5+VZM^J;SJ zUJy2j-sO#POu**r$tZHp5FeDeL(`WJa4b=oZm-#a%Q^;FUQ{S2J{n~>$YTi%i<4lb zCN1QZiazsH(k{B`zm0_NItkaU?qS;WHjuB9r^j^;kk3t7ML6kDiDl9|5iV%dJQO!70=2?adU1m}z6%ILULOtiNV&Tp?(!oBnN`EK z2UAJ6uV+wAZyMgHk0!G20etY;1Lm`O;e+N}&>MJ|?wOR!7th^93jNe@l-pG3P+h@S zaU6+<3KLLsuL+kOAH+XgaFj$Fhu{}k4r1M9@PLU06;q!LSs|6M8pGYvrC8<9bgGe~cZKy*-t2X>-I2$&~y+resfL>94 zMEiIQcScjBNm=R>Az7{Q)C2 zQt|1h1t9k^9@e)O&^0$sQ=56R+@N|nRvzGqg|8&><3L52o;r@5?%Tv4SlJDN=Fh|q z>1DXdrwO8zZedY?CRz_Yjm3-Zkd4w7G;c^bJ(O|+w71;BFYYPcXF*!FH>Qu-j|UUV$k@?G!QdqagU8k5hOeSyz`DwjWa8Q#0J6RzhP;=G;{@cCn1_QrNQq)17@x$9Y&@3IHKaq-YQ zwVk%rlt9pW6^64I#D_{UW3kQHw0;Kk+^)SEyi^%U()Uk~&xo?X5AAcoFyvM_b znkCRvl*6Ns>L6m^L!OO!Tb6&4uyw$B!?hTfkC$wRjJ18y|-X zch=zJp&_{H#ZJ(3w}HuyJK#;}EtKyY4%5jD@N)^oXM@+#BTwSN;Pgi_rY!<5`Bjs` zj2STIA;Q3kP4wu;@nEkq1Pue4kvLUIvpm|;k@1fBnlzcvhB_uz_<_*Vi*x^+0kA6ut8Vw+= zERLQye-PWwYH&p%a`-joJF0HWCxv#wu<3dNzi6)>_PMzh%LOq=HF3J|JXi-N6^P>H z`!1Msb3N?Hl4HXT*5C_;4M4q*p=EJ4_9_{JKc*O4j%q)NuWwol`jAvCqBjtn#bse= zT^4nGu#F#;VhuJ%-Vl`02woH9iF5M}RFob>+*fr#6WYQ1CEdAWA`fV^eo-+taqMj% za2xH#;hK>j8xbMl|bnINaa&fP|P&<2_z+4bF-UC25Oec-x;o;gyf8Kwm+upoiiRn41*@ ziI1nl`W8=kSRg_}3zK*?IVU0I$rEI1*>p-z6}I2zESi1RzMo4kLDBq8}Gq(ix@X5XgIUQhbSp`h4hJEA$7*nU;X{&^?Szev;VeJffsRl6fgSv8e7Q!Cv^{UemM?wqY>!0v zYII4)@fIB`1wP&`b$w@b&G7i8hx|FMB)xyJtH}IP2h# zi_gJeUIx#={2-iFd`w$nv#@u-Vis7ki0obGPvpLovpcP`aLJ%2r0&*0{1EjVYh8Vc zpT3JA(Q_4HprbWLng_#+oMc#gs}eKcJjIC)Z=f-66O^@fgDGq%7O!i;CT$T;)X)Ti zul#^}kp{SGO9Q@(ybZ+?A0XRbjWzT!#Vb**7@Tv1T#nH}mDC52v{4GXKYvXM4UVFb z+HN}W;~{7>9|sc^L--Y2jzF%2HET_@VVj=XL%8F8tclx)?`Fzz8PV;?hMYj@J_=0y z-6=tw?kHT-><^~9w4hO81YO*51tkW@kWq?S478`fi&lLsI`|n^U*ceOr4~J47*A-4 zJ~zC-DzAC@F7S60oIS`)#>?{e>AXZ!+_X&x{hVg8Z{`C@n71WM4jRj?ESKdrEKFl- zGIY4`VNTRfq6$QJK1bcw1k6xTPOe)PC~2(&YI!P6dtz+|@zH_e5x z5-I^o>rR0FY;$t|hB#L_#sxkXt-}4j`s_im8to3vR{_}yG@w($4 zc4y>p*qHMK<0h0sK+!#zr5{3lM|uiuE25mZ@)I&NAsu#@-6uhOc_!`klpnV)8{+G4 zBX87tzCp}%?6vGNtvlMt&)aYiw8y-_=3Wx4M=ik_y+-5LY9lzXe>F@{?1>)AmAso5 zeQ}^{Hg%o4A2-D&fzpvON(|GAbK^(T0V(p_%qTwa)y{yZMjMPfKAiOPI!=sVsS3_$ z^kY2Ta%yK9iTz@ocx7oR=&o~;ZA+{MFa60ZGGi?}`oa%*FSc-YpN!e@>`6={We09) zc7i1N51=vb9?GBkPCrch1}mP#qvqf|+*09;Uo3uL#2ZWKr9p7p$eDuJy*hf=Z5xJr zWb<qGB7)54)cpF!_(?_v2|7v@;}tkRa;g{p9&5meBfTxZaD2!2K7OE@KnZH+_tv|SdZXMWZ9M#{VMPeol z3VDiGW_rVkgz+d_f19qgW_Wksa>$K2hA%YYp?h8cTYpW1+ji{=)Qw1mgx7+&^0)vC ziTx%dRihuQww;8F65Bv;<}&zETaEM6^5~6;+2FKEl1nRAfc+zO^QUdIgp+m^yvkB3 z`rwW-JT9{YU4u8&OAr_D5cC#K8W_Xsjx?AjI-B=aDwODMO$WmOBb={SLM+3q_&bi~ z!=-DY+))>IA~oeLB-d1s+0jdI&8vA9dWOr0ugDoZw@eHAm4}i;^Kz)!t|k~fDui|O z*a_a@<5~9dDeP2kFXkMwg(H>UIPKo+aKkNuEw$w?Ry7@hey0rS!EYY0VsbY9;ra>Q zmD!;cdf}_?WneTb3|j0OVCA@X)LeHT=zLlY-Cv~9hUdLWT2TT@EqM$sAC8gK*`fI0 z_%+%v`U86GjfMLzBhc^B9P(x4Fm9Ta67Pog4rm@w3^VF37Y$bJ%lh;=3E@Zju(sM6 zWcZMqL_}MQ)zo(5KE`IjqI-Msb?J3j-yjO({2M__bvH^z3f6yOTBIg;4P+)h8S5w#ahEeSYvA7Y>B?_U0feIOE!{c?>um8x8}_Q}D%&mw0m4 zU`$vSi2FB8qlWA4;mXHVkZU`NBxzE5qSsq&l`5ca>K>#I9DuF&+UUDwfmCmP0bXcz zC#w^;@NO#}g;9dJt9+q@s{5YjU6}n5v@;D4)egd!^UE1SqzZ* z`n;fgfoyEGp}`Bo@qvXMoU2U0^`~;_oJEfKbu6D5#}2T3eJcX}225ezMm@M5>FHoL zVJtUoZy;XUp~J+BD+Ky!9$7Q|BtE^d0o%UZ!@F}-U{!4)Uq$mP^2%F@(zg}hU-g5Q zZ;uAY*A4XT$QsN%6vcl!*b#b|=`G{X_UsXu_i`)m+#qo_In{`6-d;<~Z>)p|QZjV5f(Dqm>jGTShK%ny znCDS|-__*toBs@)_C*3$c?$01tXKf;OquoK{K*=Xd%W&ub!5hs)3E;X5Dc#7L7y*b zxM{ID==$}81KW)XuU9;zA>ZQYl*dwJ-@=!elU$7cS_N37Je>4WdP*t`O{hz394J=l zFqO&4;TrU}k}URX;s+^(RS`!*b4x)V2iw4hZceIemZ z7Ur6Jpqx%r@mSa0v~RZ~)PAP{3r)zx=OU+R%%umQXA;c6zu$oDim4^H7S&^b$8{Pk zu-o{be@W}_Ohbp-{ zPwftRO_S+Z-8aPkb{oDtmcp~Do`hL*YAhezxs4VU;yf7%WtLfHgl5rUSgw1JhSW1u zyO4@4lC~sP@f?0$#OF;EY?E#6H3ethv~j{758j0pr!Zii87vNR=EV%03AqbC(C3ARW-fkPvt zV8xFw=wls?{;$^K8Zif$IAo8R{Pe~2z|=NK8=He^Cmq1`(Q8x;8DU5w_hSc0& z06Vkn@$K00V8!D&XV+}V*!Gw_%f7(N9cTixD|*8k>nw09ECj<czFBx2U=WlB`r5MW13O~8Jl{Ow=+QlmK|;4WxrR# zy(#h-sV$HJ>pn0(e<+useTazLq`AEQK>YF)k+_D-O;ERhP%8R1z&%OzvV=L=Exjni6=Sd62L9 zu^#U#*}?MN$yD6)AxWMfj+MztpdBBESbi1{)aTJbJOl1n){z9aQaV7Y8tf_( zp`mFF9FfU~_vtUOmqIOFfAb`L7kU^htTV8EM>_PLcMpRCwt<+~L68se$Fg(1saZd1 z?!c+@G&??%>fXKwA0n#pqf9y0^7i7YC09VTbRkZ=)QU6a*wT?N_OJueBe>dEm7ugL z9gjp-5)ZfWZ2sWI?1KON+LlPht@I;#2Nsjs842j8 zQB3QL5E{;%N34o~T7jLkHewepp5_d8R;yuXavzkPgtS1p4@=hl4n28+5c(~Grq~rw zrPq|+aY@0#k@M*u=SBFaA%}cg>5P{1hOtLx!5DXaD{D{}<aK*QC zv}og1>@B7M#&?vc$^du%p6~}ScHJP*(B4Y}J9x0-%neM}4I*0h1?Y7n5+WxRf|Ouy zJ*(duXwcF?vA2{Yy_4l8zHFo|74vCa!bLE!^~2stZ73&ikEZXIldRM-G>}x|Ru7hB zKHs*$gR%}fa@1~Sl$eQcro}O_frmNYkHPG?$SyMbt0+lz7o0H{*tK?rzruu#2O-lz z0WHcL!Fyi}-};gQy|E(|lhsauSf)8#^<4qeHwKZ7p(FTO`N5cM=#PhEZi0tk|6=3U zhNJUu5xxEzT+L-!99>gN=h`L1vL!#zYIOm5c)l;U*G8QUw`#-$wX>i+B^+(?8sW3F z4n)3^WT)%wvERFStXFTs^|37=>g@;N+lge<+kFr`hZmBB?_=PsmM%n0PsbIDuk#90 zqi}kqJ}wiJ!0jgrU{psvh?>RXpcjkqyTL_jY!Co%Ri&U??mohq+`@_353t~K2YD0v z+H!^4F1YSA29?z+Fv9Qx1ip}E+qS<0gOA(c#g{j9)t&vkmsz5mhQ}P@_0}I<6bU}5 zzC%g|>>##d1Nh5ony?}-9tO;C#M8U;>8iAqsD9ZWjdzH$;MzLSk1c`*#ZzEBsT`uK z%1HXtJy=$F1nl0a(dqN9VcioMHYRQ(n5p_ukI_*ucg+bHbS|BGI>plwL*zN5smH*q zh2veU(qJm73)!pHy;$10L8R=C0b4Wko_R)K0Fc&&c=>t>JQ8<;xQS1h6gvVV3~M9jCDhfmjjp|vOk9)N=mCjTIMHIsGFz3{bj`=$TbGBUW*xwi`4Po& zI%{!Sc>wJ;pb^Tnbg}2zb`-B^=l6NA5(;mxXr%x)=2~20>k;A1rOzO`KwkFjA`!lsl?X zsvlRJp&E!S1Fys72^Zm1gCCx5K0zSHi(KOCz!EYWn_Pq)l?*A^z>7So&XwD2WQ z?QJn`N%X~yy`oU9cR4IzJ5c{oA;?)iAR6Bn0(U46m*?eTfn+lse6yead2<-9tB($dVqO*^9k+Ay@z_#9iH=r~Qzolmje4^^?$>dw8E%5VS zZHk4_uGY|AcN`9nibS=ssVF;r5NE%Q5VzQBa9h|Pdnvu62M#Nch{PD;l<3c^KG6s3 z3@l*6#3RM)7tX@l(NgR{fC^VL`zzKey@Ge?Eo9TxKunJx19M$RFw>QiFjdxr7Ef#^ zJ7t&hAMc8V+hHo~aKDXk!uk;`>m$l!Ko+D&6yw12uSs5W0+E+`Lqm68qut&a;AEvx z)Cu&*BQc(6IxG)HE>pwHZvw!3^9%ydTfj#43^-T~U_Fb(S)%GI;%Jsb&J9&$6`v&p z-_)5*Lvk!zjM;ccFB?VUEV(TU?!$10X_zN#kAo-j@od})P%)9m#>DnH+VYvaXj= zDyJ3aS??pUeXgU{Cm9Ut`;zB%{RB+ybC}#+AHj?J5<(ux6;p?7efpaJ7*vys_^@G# zU_FvdkMqSrRsJzn?)VB@1#40l*9dZZP63e+tihete$a;f`XJ??jZYh=;IYN-VDMoz zte5aWhlZXw>GEmPTcZq$WFpDU6>sUjZzU*xYd4vhdKB7u{`@0fPl8onf2fY14c>*j z`P#ED;M&~XsOuAlL49&DS|%J^4;MhdtUNH@QVxl0^stB8BIa9Zf-KpVwIAM8tl!p1 zD`x0$`C&Qe5mAn9QqQ5EyEsdakE6TyzC=Z>^%$bZW8$J!c74Ddx|>!S5`&ZJ&!yS|O;JkW8K#ouoUBAd(C!x5E%1@IP9=;p6rW3sirOxY0-q zMm9LIwf5q?B}F>SB1DgsZd2tnmQUgm^A_Q8Jwuu%HisUI?#_%oPNQ>#Cpl@p3?myo ziY>35r56rNL5r$=FvD3L8zQ6eO;t3%xJi#{XI&+YwX-4jxINnIzoT3O$t{_$)qNyx%$4M|{a z9zu?-x`$eVJ8I&imf-7WN%Ta$BBzpE2{%>E*>%C4KHo+?1vME0xerFtnY|o=2<$YE zXLry>?R{iIM-1flpNJn8$YAIOZ;*eu3|;S!#FX0O7Pnk?BB z6;xESCk_t-=$`+tz4r==Dtfyq@nhzLlM)cZMr0TdJzGbSVmA|fV0QT)!-`~ELxrl!8Csj2zqVy^n4FV3#+KE2Og z&u^`DE(k@IoWg&*O|e^pkmWU{Ah|^!AD3@Hjf(qxMMqccH#?7hgUUGjvnW2fm%#aE zA7bAD1?nO228nJmzNniHek+5)W1c_Ij2LRIz6RfRB-5IWo&4c*n?bbg0n9M+qSCL< z!^L8Kh@2wEcd|_<)l%Py-c~D+-tJBk$q+A7JP)S#J|IVPV`%(GdGgP=lccm<;APyO zP~GBhLi4|L)1IqQRW?i@6spgL0v`>cZ(k07bDp3;@ozZyhmf;n+%(@P#2~-zro8j)4+2fLpGZ_(lZC1LxG1A6lr}S zTX#H$MfZ~66i!BA^yU1vFUWA90kd-A2mYSpFV0V%$_7}Ok^aNWajTgPT{HO^ zVGnhn?WvEbAvhZfuP?%B$zQ;Br3v^xG$1!EH^6|74Aa27je?il*@4dwuqi@_L@s#; zQYW{-%ij}N!!arNC-{rj_9}zylg)4~Lj>g{O<8tA6#a5qkl9iD1ns0%n7Cs-^m0rx zD)udA*6l8UAM3-RvgH%~lYNOk6|^E6&mN<$$ubPx(?UMps)K)%CzG3*4)8`R4!5aF z!no7oZ0EWzPKUZf(pS6y+3am(woN=<(9%GMt6Yu@mk$*YGKW1Iwu72TD}mTOGjidC z3>%Dbct80YJ>ne#)kD+qeMLR)vc%aEIpo_`fc$CnP~Sf4mOY53_1s=5dS^Fcxn7J zyn9|B0?9YrEm?vi94XUy-vw7B*1_5N85lL!4b7&V$GhvNFh>e@lWo#-aPRCmD3QEM zJ_N6$e`=HP&>aq)(5@h&8W}b7o7~$NUeWuG9`giSf7!WmN zf}ERhw|G2`s_C)Hz{_x$X;sS z#m$~qNU*_1$+Yp|WY(%a47Sl%kg~6t@20Vy&8{5678!Yl`K!ph`>D@&zIYyew<@yv z({iboRW1KX*gR5yAQW4B1tEG)IT-!C1l$%6{Qo|B@7UStCtevSeDl4v3mLE3w_ z!-}9GVyW)JS2>pi^Cf&p@&Ykja{U-}Fc)Do6)MrD=Pj1S{^HIhZ=m+62UZ2N!S!jU zk$0^NKFE(}?=OjlC$CEIQSnXuvAf#jLD4O0QWF8Ud7Y%faxnzO$}v)Rbg{~67dC!U zBI9x@`GMphR9IG*B4d2WA zAc!nY1?NZE7;&Z)Tz`F{U0)5MNzRt8@6N&{j;ZjocNM+0@Gg!V)xdgA8|XOYiFt*; zcqe!f)OJHS%6MNVPtH}+NNXjWdT9dlJfQ$5q@STRtO?FE`GEGHCD?I)#27#GN)qXo z1skUbnf@(K!K{ECxC`FH9a4zu2a(^Dj}miULD;gh{22cQq;QcV z-kk2m&UF{SweC^$Z=NDEuX!pvZg7Y^2#$xznSp4S;9A{Rx0a{vI~&&jnT3Wo6Yx-8 z5#7?ILDO?QVBV!1+~;>0WuNHds`gW`{;52i8%xL7E!h;>2YHKjc;V^g383IILhq^8 zV|u74Q`Y*$boO~4lI3H{Mkl9G+sJru-uDq(tp*_IZ$1QAXkq(F0e<9;0+8AN3%!@$ zAm&fnP`5Z4N@tb8mTYd`l#vR#Lt!}kTL!$gnuZ>e){-JV3aHnjmYmp{jE)r}yi>4ewMy@HO`M(Wml8Ip@lXqcBj zfBv+5=-yS2gG_yw*h@StFJ`c_$NbT*_~L zlkg5y4iLcHYf{*B&XSF;+-{oC!$ZHo`Bc$q1+zVE5Wn55aOO&M1H;kt+Uslym=f^e9Q3~Hfb2rCQUz&WnzqL3xL z12YRpYLsNnd?|PcMn{_AFu#*`B4i!AWT_cWh#5rF`WSS%SxiE1he1}X0Q=%i08M+- zM^euHg>gZ5$u(trvZ_u1>PD_$&2=9<{W>2R>oh2(e<0Z-4nnL>X`J-l=D2k}&k;IXDkp4NB7{p(|{KC7Yi4tZYU7=4b zour|$dlMdeZ~+YbpTODWugH?BGpKm3iX?<20V7^P!+Oootg#l3CF{e&T_zdwj~i;-tbdOJb% z%6=TQDtywL!DpQz!75xihr#;RZ`yl55sEGfgMiOjR5ee5S&^K^b^8-pzh4v$mj5A+;_IP*QxwkO&ijvF zMS}47K=9!5RQqdgk^~F_`4Cy$7p0C=bRn{t1b+ z^iefGptGJVf7Ofm5#{*vdlQ3uD6#;6tVX>ime}vi)S)PY-J8 zq)mWbl4r0%KZ(|=7_lxE*!sNXXK&%Zn!Rx2uRXczAPTR(%wV)P+kr~+ zELKj)0?#z+v1W7o=)x73cunIX$nf_J=+k0O89if30$==((U7~QLBnX*f!@3 z5l_F1#cK|eJRJ#;TgUBth1MVxevdpJcL9tFcH-dsP1|nn~VK_c0scD zKQf^ImoD-&z{*NXe5@mf+HG5biMT_or+bkHI@ciZqc)7Hmt#Rk4aBZ|j~(msd8@7( zW6+``I(c3Kt+{=V?@!M1UtF<;6`=^3Kjy=cu2_7?7sG~iO03#xmZWW;41GfHP^ zfz9qym}mJ09@kFCYEOGmD^}t)CK;iB_Xvnd)Y8?_c67VAG3YkiV*87XYX5D>zi@OW zuIkr8<(NmX#Pk&GIN$+M=I79{W)yq4j91wfSvI6=1s#l?fPV&G!O0a-^#147lxYv7 zQxAWDs{G}2)cPt8+)sg$$@aK*?jfWuoR0TAkL-33WIfkOGg-6$LXG!0R&()EeD26a zX*G*7y2nQ#&h-?1|7j*BP7J}G%0?0;ITf!xoq~2(exOyQH;UNh;Tyk8yjd$+;rp;9 z^v!Yu5-dY~NhdvAMCgKPFL+8`6IdtnFlb$>fOneD5K(VI=ExaUw2m&IS7ocH7lfhZ zF@OV`E#R>4S!`MN-Spwz8XlMkvJ>rWiAT*J+`p%v)au^C>3AJ=#)`;tCrRj(R7Qu- zRb;8+Cp0u}#*i7c;HqVcdTm*F%j+Bz%Zagz?w^H#buGARmpJ^mu?v4aXu-v0`b1Pg z4eQ%YsLT#Q_MMF%t{k|?|I#6cQ~KVL_umX*-rp=t3J3PnBRur672J}QjBOz5YO&BN4_$Q82p4qlY+rz$!T=m`U|(@ttMJi1eso+Xma+bIZS&L%zG@8iB&NL(7fV0 zPA==9&9@pbiRTX8IVBjrSci4sAEN#T8z4351h$^IhR>ScLBt&qs&n`NOs~HMvU7$| z%vhJUZa1W=3BJUWW7!{$>m%7h&G<=n7q#^cCdXVXz(VvPDG-!~dFqknDPMgI6Qv4Ss`itlPb1_;W0d_$L)YPT76%VDFo5Zz)FI zO$(@8(hTg4U5Ra*y~$P27`U6p`2_3jd9$C_;Y`lUAho`gsBjw8&qZ8rphFW`H|$D? zI>J{%@|jDoK_#PNB2F|}drdB(mX_;#EKbM_yXeY`Ihob7J&+r__;&Q>W#c2OYh zeH~6@UWTH1ksQptG>N&RyN3Oo(*b)r{y~6h2>ZGB5^O5hMO%*y-qeA$yjuALZV#0} zv&?D~o?`{}?+j?cKq_YP4Qb4g-?(^o8vL-Bgn_wI%%1nYq%QRid8wfVon__t%vqWB zFZ~XCF6~DNu{zE-mj{;D-{2npI(Ysp2bD4;*^l0xP$n^rS?1me^->F9$aDs3HO62_ zbqH!o8ZdX}VTj3Uj%b&wI@5R`^lcLIw zYnZb~g{^yH08b2~KsZ5+b?L1H7uCI(?Hz&UJEq}QQcG17%V63A9%hJs1TtqDx_K4g zk#EvCeib!cQ2Yiq^_R?bso zG?p}BCA*9~S*ygP*%C5+UJg!L-%L{mHsXitx;XuyJ5dzlG(g4qFt}5Jn+4S2<@?RV zBXkkGd^>_8hQIk$<~v|{tQsyaQDm-cxlNNfFK?{bA2_{DoONxR3xA%<}bjM%`#+bM8TYcGr)=X@KkQ`m%X3#^;4g8nt%$R?P(;oZ4wSkneU=Jt(u z=uxLg1tcAzKJ^tGwmJl>TM~)pQAvnd9tZN?4v?7qfc|`EfO4&}Y?XH4#)YghE#2C&ao;Q9V5mu6Q1A1ajE+;>KhLmr#P{h zJMTlzyK7MRTAa1O14KBZl9s-0rV2HyAz=;+lxK+g(oRqsd4diGdE=YmBh=|*HXeD; zhyK++>3r0Iq3X-v?!Oc1wW%OG9?_{I9~;!Hi00&Y;`_x0le*kciJJ>WcrGU^TJP{m zHyOgOl<)Y_@D>!-pQ2e3ip&9#hgjKF0#0u7px^HVUb_r%Y}H3x!e#w?bl;~}c(E9J zT@}QRy@AcAM~UY09+(z21!wJF0h_O!g6L2O(m&-YNQqXno3ankQGu`Iv+H=6p*IH& z0t&&xA_i`L--xOuhWM%X2vPpN2`{OZo3<)?R;fiI| zlh}uKFX6B)$1-J?@p)?%*y>qk%=Jm zMYs7AHpH=Ct%HCU6aqV^7UJ5v6;L&CKUrselO)Y5gIQNvu`zZV>IlxFVP^vAf+OeY zzJz!vYj?wuq$g;+aywe)8>7+M_ZWHb9ldfj8TZUS$9L}OA)fvO&n9xL#@u3HB)Tx? zyf2PP{h%2|@i_i!2FkYvQKileylW-Z)q*q$g-;|A!`-g1yrLYm4m}|W*H6P<-S_-k z=^gmc7Kq0}1$zHiHkb!JvJpm-nf6HQLTSS|lNsCvSkofa>JOqU*1=^4bd7YW#-upe}OE~a+7 zZ=&;~gSh8yHxyi(Mn7A>gp0wmuwdP58u_FG-WGS_-9p3{-m$!--JT>nyc%p@IKfZ# zLb!8w0~`sS%)~p};`;ctd^(bXMNbr=c4ispiSq|*pH-x2U^?Wkwd1v)yGm0VOR+mr z0!3}I@Op(L3@qwLhYj4^ZFMVp?$Kw+%qngVNhM=;3-OR&C-#WTvWah}(tzW)aYDWb z`lf1QqQ@!tG;SBJsJA9+-%Uw}y*f>kS%87R7vr<^0jyh+4gY@3Kq2lqp!QZX^>qEr z8@6nuU;asRS;05aJ3s~cUliiPf-*dCFc#F>b|SBT5LC!TSn)^&`>$RH^R@I}I#Zy$a2;tZ0tKtVmNhmY?swBM%l0_%MlT`Q zOC#0KrJ+A5iAlcBGymp@Z@%55Q4{wp)VJ3_X)8@4H1Zm#yEO2;qi~ItI4WyI@`VHr z;ig?g*aQb@-hT#Xffh zyf$?)G40w8@O&zI1PxLNTEj7$qRg8cR;2H-4oE-mf*Ggp(YX#AvHW8yjA}lkGTY+u zi_i@`Y3_@!TPBjAl=0A?(idgm=fpc` zT-ifH^lQqvaa7tph~$ihLrJRvuH;xtS#4>i+PDiZY6>%p z@8?y&jE#c`b~k?OUyKXB7^AYC0EuYN;peohp!}fA=ob?S|4!xOu0xzRTkRjLIw``q zMmyt@tnYA;b82oPn(V^9S&VJX16ak=;dHn$va~?~T^kuxc)A$#rsm*p|EcIz_!QOD zyYPOQH#X~aK(%rdbk0zMsN4id5aibWON5jNCgSicA+XemC2MXM(M5^j=xC+|;S-W@ zLAEr;n+mZ{oK)~>2bWi|^9-5&fw1`x8gccPL{^jaAv2 zgJI^?v|@%589gt+9BI0UTKh#<*cOTb|8Ag{jXdnMp2?Vb&1Z|K64N!$0J_`Caqp(* zc>bXn*hSlr2KE9tn@FO#pC}52-olRW$#60EH~Bf?G4Zx@M&83m^dc2zb}vw5qFXBH zU`YW_-9HUpmQG_&ZApQ3@00j97A?f(mqb{}M?$>J72D}zQ3a-{mV$`2q5~4cS8r z&(dqVKjDUb<3KxYAN47}N$xIiM0mJ|NCgUzH=#|`vONwG?blQ#e_;XQ7c z#?2vG*5P!?EBv^GDBL3@NCm52lViT}^h@gy?)e@~wjN`vmnCM>1qG>Cf6NGrz2kB3 z=@8V}JwklX`QY=qIn2IhIrd1?Zt!u9XD_M(31O?;c#CGUPxZUMt@ErPX_~0rSl6~JNA-Cn?;zCAuFOb z?hb_HHqrIfoz!fA56{xI*%e!2Oxwmk=gk=7dZrwz$Uuc8&tuOHR2$7e8k&w@e_aIZ zFGBu;lNi?!4qc}hLOhG;Qa4F#j#gk_dzC})0|sx@X+U(tC%UXa6O?9#qMgr5$eqwg zWP29D>9rThEstUt9}o!rS+eX)L5d4LP6xH`+u)j^BzubHVmQZyzB8XeVeM(Wv9%p% zsHEb!jmJQAEDYj)|G?8L^ck?4&C2?iFWNiW$Lo{ufkDL;=yGN|D3$u7=OY`AVLyl> zmoDS4;g@8pl_BVs74pNE+^3%#qhQtoHMXp5kSvt7BqQb5P?zTk?g4u+ZTo9-DQ+ng zsss_kvUKA2MI5%4?!qUby6E;!2e(X508{Hb*xexx(o%jfN7WN2|Ez{a`{NK16pW{L z+oEnlHnmiZqoogS(0-}!w6FLfWXe{7!ZZn{?8Z1|YnvLIrc_b={nZ$MeZqGdyG0B) z{eDkxZ3yIx-M6wJ59@!nk_YQ1L8M(b zPu?{N+eaPfJnb>EFYN%LrXipCQ%WQsr%|hWk-T|FSCGP4O&sqp!K{=ug}8_6pm#P2 zKe;I~&KC#KyiO0zLgulXKX;Kidd;}q?l9(d6~P~KEmD$kk1wU#jYm>bX~kG79+)S{ zY>)cFt5R*mMgEz*lcWNE9FnE!KQEdp3vYlq9Cy5*jpKAmeRRrSE zFC#xtS1(=k?Tg13-8mpTa0U()rb1Uw0_Tm{3h(};(*cFuSYdSmwKt^lPDr1IjxsCQ z=~so@8b@iH>%A z_~G!2?63?0^$<&JEBk<>PZVI;s$X=W)Mv^|oWX2etpT_7;(3a%qoCbslv=foam>X8 zcK0V;V(P_`y+8Ky&7*tiyYUiC$b=g5F6Aj|-fpEa#tUf0k5sfD)TX-SvDg?;Lz;e^ zr4E+kSc?;Pz;C1#OY28T+WuI&cWev!`O*bu%pV|PPdR_Ra2qV-Sd<>E&E%f)5~%Jx zXS!m`7D)JTk8Iy}7<%`Y;kXPB66R7z)o#7TAeCOwdn1GQ3!}k%Rw?AZEyGoJb;+CT zhj`4U4R-c6fZKIfrgYvll>VlIS<;U%#q1?5_7#F;$!Ijx??+#b5t3eMg9RgxaFvxU zE}lCd`k9-s+(`$tWcavhngEll=mi(ttx!#G7bcyrhsBxPY%k0m-``Z^N$9y$;cQBuZK3L0j9i-4t5hc~;7J201^=mM{@EFSc^1?Nb$1xF& z+3+z~fY}`SmsDiAldrlPu-DrLOb_;xXYK?Tjwuf=*Mlp{-LT0>9VdOT2C3p2j944T zpBo+nS#c|IgJUcdo1H)#(;cv5xjN)N6@w#3r(lNL^NOgA#kivCJQg%Pgq<6U`SXhE z5pucyps(lQw&+~;bd?itcb^cu{GkY>zAU7V%vZBxw;K2h#gouB&=X7-9fgR~jiB%_ z9D~F3aLTqb-1p)HPn#T2o^OY9+gr(Im1_|1RZj1vh%!sB>fxt;agrbRg?{65in>Zv z=)5g&(fbMF%K$O9WLh@Y$@Yk92lD9TBTis&aX%5Wl*W-qJb=E{wE4nhY+UpKbKFCr zOht=%_AVCk^bV7n9n)D2llL^T;5JDuodo-Wc@Va=fvOrufbx#TrY~ix$clUFp#1L- z`W@pkP}s?+)gg!jtB=F2+5N=XCY)n-#xuv<`S__|F z^?$IC2*83hQJ5q35)uvTaZ=`2>XQ@?dyQtm>}8?6{>6zPZ|s9J4S&QF%@Vrg{f62m=I3Rcsuf6a<)37u2n@BIeT9TVN@a37CHQIEFlm*x4 z1fW`b1y_k@;GM!o-q8siylYEy$$2j$%)d7emfZKl)-fBBV(}RNbaPryh7a7PlDN56 z5OiP(x)kg1TPCYOiuX_MJgfr21L91W_at`KtZWdRRYpg4-++xnr(w-IZB(uML}g~I zz_566OmJ|d^21W>!J!h8VDg?MMIi=lSj^Rr6kTQO$t3qef1}a&ObYt@k$Z@@c%z_W_V8<|NT+Fd+w!%zq zxiRjZDMOqVPr{p{Z^)(VQJ7dMfzJx#L9^u*c^ntTD|xb=Iw(Ei=HT`yH_IG{T0Rlw z8}r%n!AG$AO9{S}7NXu3qiD|M_pMseLz?1NkUeij(R>NVFTFE{mYuIDe^L>??O9zd zrGFj6YajAMw<|C;o*ytP)d(!td_ePwY1Cvb*LT$Z41Ub$B8Ll#aAoO6yuR@m?p<~l zm7c0V(lr5ex&0YWPrr>f4n(77$`3eu_XFM6z5sfj&tWGWOXfQ%oWlv4gz7E&3tmtA z&}fnt$y7Ckx;g_Gw`x7_qqifY_O+8AXl4PM_RJ(cKEkZiq( znyRvHX*R6V>4{A9w{gtr8eLp@(uhs}{SEeYII`^*q?kE}PLWO%3pf`y9~_Mw@!+Zk z`cO_BPn?(pYkZ7x=H}T@=ROWk%evFba0}+TumpSH0mT666ryqQ0nQTfW`~4lG0)bR zun&D^(q+e!;r7~KDssu4e|GpdYKgVshR1{C@ZmG0Y{7WeV_PX-TV)1XPthj90>chob>){GR8LSW{4fsVlYEk*s;l(`RKEC_EF6 z4;!$H$M#`=_FQ&WQ9fC3Sm3kY;GM6JRaIQZ`}oiA`1*G$ZU^OoPS zWc6+Ayyt~~?DS#2?Rb`18wqB5e{uHpZY-T`z{qoK;N|u2fM4YUEI02R7G4TfYu|!d zku)#LSsYYeBv2tzi*p{%M$hE~_*%_}9C_GEJxmH9UG)cunQG(V?=s9#wK{u6>HygL zn;9J@z*7Id_9V1Vg2`q5-5Q=-|9mOcZRvwHz^vPzU)Qd3Rm?yH1N6aEtG zU%}M%f*_{REg+JNWJ*9WNEhFrgHK|qpqC)64j9D6?h?4Sbt79oClWMw&Vb~z+3;bi z2^)O02?Pb*`RY$47{?PHuz8{tw1G2Dyz&IrEziX(X3e~%dMW(X{`I^Jyi7dDm%`Tu zWmX-}!R2vr>_XijREeF&C}tGV@vYlgZ*5m*?nejKwD>iIa~VrFNh`G8cE#cnXACd6 zh@z<*@odoqYFPOl{Ww06>aloltc}wZ!pJX=YE0s^tlMiPdCSr|;B?+O^lpsD^@*H! z!163Dxe$Xl_On#>tR(xax)#2FJBtxsHcYxF*RkdijMMrSvzjr>LAfFlL^fDa+;bQt zOJDOkckko>a8AI{$Yv5y{|US9M8l4M>cCD_V-sH+~c%3+IaAsh0-k%Q-ukSLLWPu zfL7H~wr<>8`tRH+92i&zx_4zJdC#-9Yaw}i6xfXwy&!W^f>#<` zfvI`N>BiFi6r57wTeNx&l``Ib`#NzIb@ySHe5R827W)1PTXy6F-&+H)mK{# zCM8jDkA%bb7gwO`dInE?yAh;Ha$L;6l_=uqO2w^{(Z^bn#5AuWc8gz9{sS}igx?tu zEfU3A4?Bp6)?qjOx`Vss=|Z}|OYrW@p)>bALi`hglUB6gh6Wj^zbVF^S}TY1=E&j` z-(I}_ZIs3}6cYiHvphq!BbYtZ03Wuukk#rOlM*e9KU|mbhc+i+@rDjEIM0GHvdQOs z!t=m8EE}b#x#O#^9B(}ogY#=UAxe5L7GLeFTIlzP?|bw6^}>&nEm zKl@U*S5}_T#dR+?nQ(5?tZ_BNt|fvmVzzkQO@jdAKk45*1WgM^}0L#1d^8xE3A+hc<;`zVb`{jq*VlK3NHqhTmfh zch6axAHYdsp4I0kRbpnI8YtV=!qVIXT%sBebCteg;g)t>Z<2$H4(x%I%R{lAyDx1L z`S7{4jLUnifFtt;(fi96cyD2k{-ihPN+{+)6fz#n2KNX^~@0xm-+{9iRNBrdD09m3>&^P)cni_PGj;#?Onsbp} z8gc<&s|nN~P#ylfZpHI`m*ByO2>1?LVTnQr8dX<=x`z;Yq$yL^Iv*@a?E~+QNW3Kd z2%?%ii0`d!=-YV~&K^+2=)Hbq-=3$YM^t^#b-Es2GbzDo6I9{K4|`g-vkFblU#Ig& z{r;zYZ2#$v_|NPA{l19a|L$Y^uYQXEq^kd)`y%}Q^Va{8*Z-?NHg){3<(&NQRsGL; zoc{m*i2o&D-~VSW`hVC-=Xv_y1Op)BgZD CR{P-q literal 0 HcmV?d00001