From fb79fc0ba66531a547a87ec60c3fed9ccd816023 Mon Sep 17 00:00:00 2001 From: Nico Weber Date: Sun, 29 Jan 2023 13:05:21 -0500 Subject: [PATCH] Tests: Add a basic ICC profile test icc-v4.jpg is Meta/Websites/serenityos.org/happy/3rd/bgianf.jpg. There are a whole bunch of jpgs with v4 color profiles and I just picked one fairly arbitrarily. It looks like a fairly standard v4 matrix profile that in this form is also present in many jpgs taken by mobile phone cameras. It uses parametric curves. icc-v2.png is based on ./Documentation/WebServer_localhost.jpg since that is the only image in the repo with a v2 color profile. It also has all kinds of interesting and somewhat exotic tags, such as an 'dscm' (an Apple extension to have a description of type 'mluc', since normal 'desc' is required ot have type 'desc' in v2 files -- in v4, 'desc' has type 'mluc') tag of type 'mluc' that actually contains data in several languages and that exercises the non-BMP UTF-16BE decoder. It's however still also a fairly standard v2 matrix profile, which uses 'curv' instead of 'para' for its curves ('para' is v4-only). I converted that jpeg file to png, and cropped most of the image data to save on file size by running: sips -s format png --cropToHeightWidth 21 42 in.jpg --out out.png --- Tests/LibGfx/CMakeLists.txt | 1 + Tests/LibGfx/TestICCProfile.cpp | 41 ++++++++++++++++++++++++++++ Tests/LibGfx/test-inputs/icc-v2.png | Bin 0 -> 4228 bytes Tests/LibGfx/test-inputs/icc-v4.jpg | Bin 0 -> 31402 bytes 4 files changed, 42 insertions(+) create mode 100644 Tests/LibGfx/TestICCProfile.cpp create mode 100644 Tests/LibGfx/test-inputs/icc-v2.png create mode 100644 Tests/LibGfx/test-inputs/icc-v4.jpg diff --git a/Tests/LibGfx/CMakeLists.txt b/Tests/LibGfx/CMakeLists.txt index 9345fa930c..b5b928039f 100644 --- a/Tests/LibGfx/CMakeLists.txt +++ b/Tests/LibGfx/CMakeLists.txt @@ -1,6 +1,7 @@ set(TEST_SOURCES BenchmarkGfxPainter.cpp TestFontHandling.cpp + TestICCProfile.cpp TestImageDecoder.cpp ) diff --git a/Tests/LibGfx/TestICCProfile.cpp b/Tests/LibGfx/TestICCProfile.cpp new file mode 100644 index 0000000000..1ad04195cf --- /dev/null +++ b/Tests/LibGfx/TestICCProfile.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2023, Nico Weber + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include +#include + +#ifdef AK_OS_SERENITY +# define TEST_INPUT(x) ("/usr/Tests/LibGfx/test-inputs/" x) +#else +# define TEST_INPUT(x) ("test-inputs/" x) +#endif + +TEST_CASE(png) +{ + auto file = MUST(Core::MappedFile::map(TEST_INPUT("icc-v2.png"sv))); + auto png = MUST(Gfx::PNGImageDecoderPlugin::create(file->bytes())); + EXPECT(png->initialize()); + auto icc_bytes = MUST(png->icc_data()); + EXPECT(icc_bytes.has_value()); + + auto icc_profile = MUST(Gfx::ICC::Profile::try_load_from_externally_owned_memory(icc_bytes.value())); + EXPECT(icc_profile->is_v2()); +} + +TEST_CASE(jpg) +{ + auto file = MUST(Core::MappedFile::map(TEST_INPUT("icc-v4.jpg"sv))); + auto jpg = MUST(Gfx::JPGImageDecoderPlugin::create(file->bytes())); + EXPECT(jpg->initialize()); + auto icc_bytes = MUST(jpg->icc_data()); + EXPECT(icc_bytes.has_value()); + + auto icc_profile = MUST(Gfx::ICC::Profile::try_load_from_externally_owned_memory(icc_bytes.value())); + EXPECT(icc_profile->is_v4()); +} diff --git a/Tests/LibGfx/test-inputs/icc-v2.png b/Tests/LibGfx/test-inputs/icc-v2.png new file mode 100644 index 0000000000000000000000000000000000000000..2062d8994ccac7ba6195a89e9c24f734f7689046 GIT binary patch literal 4228 zcmZ`+2{=^m_rC}kOO~Rqt+7rKW0$dH&k_dF2wBEp!pJNcOO}*IzR12OiKy%) zQpDJ@M3%`O|55#`U(fIN-sipN+;h(7eBN{KdGGVQ5pd&k%ph(M007MTdfH|bDMp#c z4pUR^%`ppj0ATV!YiYstwY0!+tfw>D9R&b-5w|bWBg|iNW?3i3$M;bm)?;X5c+CJ7 zxyh;S%cdSgOUfb6Yc@r0?|OTf`^#ykd6OSCk4j>!y?4G3k^;HlcDUkVr3)wu$w z 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 Ss{?kh8T56GwI6BP-}pbgMQ&>V literal 0 HcmV?d00001 diff --git a/Tests/LibGfx/test-inputs/icc-v4.jpg b/Tests/LibGfx/test-inputs/icc-v4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23927fb9f1b2041c1de31dbbc1f44bf56125b556 GIT binary patch literal 31402 zcmbrlRa9I-(>A(cfPp}865Iy21PL&>1$TFMcXt8-0)uM^65J&?1PSiJHQ3+;x8R5O z{Vu+9@&6ZRo!V=)Yj3Z1g`?GfHwdd@D5-$F>`YkRaTY<{;zaB z_aEy3FwOcOTmRQ#|7QWZxrLkAi-V{yVqP<6SN9hz@`4q;+@1e}<6khonYD@e3odxU zEUqsOzTn^g;hX*s-ue%=`XBu7KiE}WRU7~iF!^;@^ z7fj<|@A2Zpf9XFf!LV@DPTKd_^51ztFD;^_B>&|G!&E9_CPWts?hy(#Z1pU9K0YFFyh{ym6_(jN!10cQ-0utz@2mRNTmuYaQkZ{?N z@u)@dIaDAf1e_?UE@ID10LIGzL>v$fAPihHtXI#>vqc!YJ?$62XV*_cMiojK)?;LN zkPv;+ePrw>Dv)3g=0oUvmo+0y({sg6v7{^T$9f{zwT>+aM;lc1q1;pn{N%Bhv-A-` zfv9sWKIo`g*sxzqqmdWx{p6A0^;oeCcPs!?bCer<6;;BWa>zyQf5j&Fm@U(#$6(c$ z0s$LxwC5yFI0T-Ztyl1nf4{BY7gGiz7O*AVP$ndb?qB7ZiJvb_ntd9Uc@WEs0eo?y zTl}Fk`r~|0CwH^5K%Nip`IEoKkBv$6fcIB1PwC~e_hCO=XgnAOMlDa0)Shtk8HOgP zzkkrKJ7&`R^=f%QKm~ID>K*daf)9A=8w9=2buq}jQ`U`K*OB@h7axoLvWQkh(dWUs z7hss+66h%vP&?JduCb);CM+iOsLnTXOl~ynNLI}C!?_VL&5W}CQk9OF8S}a$MYBd$ zD8;)71r>B&T;wjA$|N{Jpm?U$8-(`HcX2g9b!pR_Hc+9y>>O|HC#!j)89{MO8iOBM z4~4EDl!!F!H;$p}8P5?GixKk!o>FAeXeB49A3{C6Q1c|nTKLU`r)4-x#$pK?Gt$yCU|SioZ~J3tD5Q8xOaL%HS+*-rCqbIltP7Z*2xZHUzz3C)wm0 zEhw+h$xn{1;oM8{00ItelYq-faz`>IutyLl6`yQyL$Drmkp^Hx}^zRZOD zv@7FsH+5u+oI=u664Ti&otjp>ojc+C&t^_d?Aj zvFrp_29l1_n6)u}fOXOoVu7!!!LTcqi%d$6O?R<5x%|~;62s$a0K=qR7dn3CFrFD? z2-`}y5SQOn7t0a-`j@#?f>b@$L~{1!3bybP zz612nT*}`zW0$@w;ua&ifY{f#I5k0<6~eNi4Gjr3gW(bU8gbq4hsc}AFPSi<_9ep%5@d?L4;|TX90%@?vrGPy zFx9t;maHZ>h@!YC7GUmua33Rj7a!q9M*O;Zg=jz8qnWUKjK`XXa-tAdD`r~dO_J4c zh7u1-#5dQ0eMyW{v?4mvcw}KLL~g;Dk6DRe{0(I-O1J1Ok@aA91COo&F8w`ppp}SM z(3(v0ZeDJBx1&A9G!%*L_zyra7uT}Rz6GCZFTWRmkZ>^4P7|-q@%(CjuPv!`VooM= z4URUv=c{-}wO8FX@w@uV+S@9DkEE@Jv8`(guW!yZWzv>OKV4Ti8f9>cE2KhK)Gx+3 zI&IsU%|Wzv_*Qo_qq+pWo*Uov*+KNt!&x z>E2M^L&3t~!mn=mR0-XS^O4w)#aI?13>oF(e=={P z6^3m0$)JiF(JR?n4}^`gD`oxd_nRW}>He;HIy@>btt7iW_{&{D?RtG{Gr{lX{l~XN zA2~yb>dde4qk;$UpQbO+juggGymJRlIUvW%6&8_s)GFuWev>z5gT9#rZ*iuk^j>dR z<9-A#4h_Q5>_hr^;n^9*tZHn$<=yrX%i4HM>&6)7&OyYVPtPM7GBpNolUg34D5i>? zqWjR?`hP3!+475gwoI^RpXCS`f(nmUnl2Cua`{r0EJwpbCEqj0z9KJS&Y=?;7RHzz zS^ujNd5#ibW7U)5|@(JG$- zI5qh6s?(Sa{4}lIaA`g&=w)?Pf$5&*(B0M*XDc0ssw~L~<5M$YAkrGW{099qqlgkW7gjdx3w?QKkh3skGfVlDv;lVtHxRj==L!#b$JW{##*$~ ztP4R2VG4S+YN<_@;MSo`o}*fXo!bP@i+2?Ia}G^Pd(%}o_e@LG;rTx3y&*e!jM6-pNG0t0iK6{yE~_L)$8jG zg{_PTUV{g4^px2348*Z{e&EF`H5C{7{_%~unRqC_c=~l#f8@)k=J;<531N^IN^nQ8 z;dA8SfY_r7qgi%wOhgFjm$XyN*d5wwX>d=Hq5`t{r^hj;RaLq%g-48rlN~lqp0o#i z&Fb(~CQ+7Qyx*0v+b54K9DSLi4|OT^9U+GXi=>-_1BWr0&J?Uf*8~DlN>94~7Ja3I zn6@sZG!a)qmc9yPd*^5N{p*dkX{<>T;F~o54K1ZA8K3Oq^p-=AVvR|^KVbaw1==O} znqVDP*`B~ukbOC`KLq(n?qH=@n{b)86Dp5u248U#jkj*EqdQVuQKNEs%cU{OX1?{F zLe^HL;r$FsT~96@BmmF)Q&zNv+PgJjU5-U4s2Kh+6q$QIm;#3^)1n7wD5iS1k7ws1suzvuYp%MUSY47l*egNwlLXD%)K zKb`?{)J7xz%?#!!gzq^K_Gc5i7SF&ai4D>PM5Qw_V;&V#D7nqzaZU8bE)l*BQ&Ll0 z4j45Px>UN>@Fuq4?~}F$JJ#CzMQPpscC9`^ep}$HoAzaC>m8=?6&J|#QiLUHR zzTpwSvQyCT@m!hjecw80J~OCyGGXJ*zo3!bD#pGc0T^SmOH;IeN*@#l%5Igr^Oe#n zOcoR}=6qF2$Vx-Y^CKeBSqXYK^;uNGK$@ea;48#$q1Q~Ugs)LxXWeveE$jdns=Ih$IS7#u1p4{h`06~GWo*5 z2Z{{`+Dfj@3`%B!Fxoa4?@ROzT=$cHpZ-(i)VV{;QT|cW@G&8IFc-rkuR=h|%o)id zhCXXs^iFxY#|)iwbonb3dRbz3sKEDEAYSe~M^O2yqEOvon&5 z?sYe*`j`ixQ_KH6XV*#12`aVmqS6(oF$>AQ^8GO*H0v1K1|=FOw7B4P{MNU%yzWMD zh^vQ=(?71bNCm0tQAEp^e+HJew|p_PZwp0*PqP3llopqB+Aa@C(4%;?cq8%PGoT|3 zq^WX+xw{T9oHPwvOMmmKOPDcEJ-~7l6tw>G#gBFfz5cpKx#+#HFU?BsIo2xv72#3x zCnzgz6vvm%ls9*iixZhYf8KK(sM!Xg)%T~@+WB`+I8=yKWBn_X&#ZAqvlKG+n{Vy3 zVr8ta{*+1MN;gCsIl6v!1N-PZ49T2{%f8D>Yo08SKrO~v;fnlsC`W0&39||yC3Cis zz}$)N^iBN}aIZy{6?HV%+UeV|ZamdVG1amcv2@B~WULy&qlKz!-H_sHe=8-3Ozi?o z-Ww2An1EeMig02?lUo4p-L4ExI9x#I}jvFY!?oTnJUCYkmz)$Y! zY_}+%?fpkhbK(=4Ei)!gS}l`5Cuw-|zo&SYoqUu>BFT$Cv&;Tyb0~ywY(*VCQkchy z&|}~SgqYx4IAz#r}i|nrCe@$&OV(fcU1_72qlMd*hx}|dD?6#1*RDN zOYphILO9eCSue~FnNXDk9&LX~G8LW$&go5j=IebQx9Xp}+Kz(s6g*>e$Kk!;B_%xF zeV2895J(qAtAR=~l5@bc=C8xbP1VgD91yOxSr1bpZ0kkUu+O?Kr#=0{_)1cQ&~c%f zf5?%2=%`t){wsrTVb-)l+E?_f8ZwuCW#4ZtpVhE+qkzH1aXE7<=u?V+=XA`XIT%{P z=sqS&Lq&*}wS}1zH&xodEk*KrXk%fu9Y?wTdj6dQBQCOi#BpGQX-&%_AukhqS0DAf zY`jm=0*zBUSZz#UKhs(yuM#Nn3|omfktR%6CVlmr zuG1(iTj(U?gIgRiy-OmkIveYw4|lm2(Ma?z9|RA)#G7Gv2T)6-NdM8WQaEB(hoD(O z4eda{l6A*^$J^hS0ZS1t4?XM_gFLQc=A~pFEK1+6nGLxjwZ}*lBm@#xI zbFQ|RZ~W2Jamv}My%oKy?E>G=UXRNpLxOqAK_r;({czTx6~ir_lU8GUei{4q=li3Y zM2F$)?$1C9ukWh@f5tPh!zG5Mw)B9G1(VrkOCz;IE&J<%b-O7wdxy|Ofw$CADrTQP z4cxS;F2lYz=hO2RdK^k3XT1(a$CA~C6gnfKT^2eAeI}UbCK`;v+BFd29O?`BeOZ;1 zFcpiO>*gl}2@6wD?2Hv+k5N;~x-92t0ULYX{k|}(;{4bwlq}FQGF2WNF9Ifs0~eyZ z-NfO$7%EMLH4E9B2Cts7zkaP(3?xJ+G#ODrYQ|n8UT((5dX@I*CC}E_oC|R_ti>_4aBg#6`E-p_{ zB?oUB1ZLwf`Z>$;EBGcSR+U`A{y}j#$Wxe@ZZNbwX(>F}N7DMsd+uPNWJ%d^F#Q1v zFTtfYE+(`}A6K2=s;b|0BqVG#4vPU#?}Lo@^yYvu_hm0S?Z7wTJEOGGQamk?$EU%g|OKoL^TE?M$ z3S5;%)SjXD@Y#1V9v3v*!*3WTCy(t>*ZUlZnMN;9xfHEoiN}J9|}AK3%0} z-Sr^nWKrZVH(&WTCBHFxdy2qmL;v#0T_BA%Ba)YBeKx3Q*7U7nG1*bMe$rNmSmwlk?Y$&uC;*?&nJIp`#R5(cbODz6^9bwy^+m(!avzbwq=Lkx=SUnaOBa3 z&;BY&rHn2ncaoKS$*r|rtFJr*T*jnc<*9k+sT^e-ZXw6k&%mpHfh0O(4`(RNPMZhV zo)7oa1Q&k44Cca**O|6YO$-Sq1AFeTjcLrWC z6;~XhH?a>oG7j%{+BJ&AE{1S(X?KiEgd?vXE~2liKRZCCFPTYbVkD@VV!2_#;Y5#a zhM%YN7%BqD#phW*ZFT0Y$J^!JMc)S49bc9C-2C`^wb@JI@GDo27EeLtr^n~B_w=5%)FJd$ZwHt!HNbz7Z zpsglK_2dIjXFqlS;IuCK^W0%!%AqZT)~(IhcoPmj1o5R(8VvV+rL~&qUzU#SM9>F@ za%mEs1cHK4R&;opr_;Cn{ZedS_WHuANHBaWXs5^W zC!*!-wl?xlej17Bmzgx~{1{)7P5EH$8W5E^HkJ*xx!*%n=30v1q=fa|OIi80?PN&Kw>%U+BwGnFx6OF4QlB4e_LXS?V{=z{KbEa;up;;6jJKXsTC3( zXGmmyn-X%Lbrvnleh#nngd?~TXTeq?KPBa)B?RXuTAwM&b}SXN9pRPR8opU zwp%qrluneC?KeN=`uRHYj8ElCKzK166~^YiRsPs>N!ZSavlWceqNtk%^UZShiOnlbRkKY7`ImmO6eK)-t$3g+ zM>E+^`nb}_6niG5nmW0R851)$(S+XzbwF&`ueU&h>SRi~G?NDN`OWkdj2EID^(6iC z)vyZGzS~VYQC)JcyucCNZTXPr&q;=MRy?Qk@ssQ*zLn*1Pm=02N12E+o9Ja(yB8gl z#{cvurrXC@P1-MxSLFH^Yl7u;!!!>N*KB>Yh1C`-G&%_{Bu}$o2DIZU|9EkTL)Q=) zvY=O~6w5p8Znxj}YP!~O;6NTwj+>%pA@P&+>n0w7-sEY6jUQIcrXob3pRxnqrI<%u z3`9ehC9FCb4)OgfR+(tWTh9O%LR>)pYN~&b-xj|S_lI`#4(nI%9FdL%I(sg!%FX4~ z2*+16=zHFpuA+vR#Iwi!s%m7b6C=_O{P0zv-;udHpZQ)ZnX}A*MOm1i=rid~=^6ir z{yF3*=n|Guel#;*SikXS0xt}jCW0aEmyuET%+vp)hs@3ae1Ul^VX9yj|ujvs8lnc*>F8ReMVlk)+s@{`C#QvKGM zD3nf-VHt+MTZocN#Nc3WDulRhMETb`zzZUmBC}o7nUPPe5@XebkJ&B*LzU9{rgdJL zv!82gL}ly{0(NHXP~v)M4+a;0h%rs;wyxaT?$1F=>S3*nQ5hl^N5ivTh5-YHL9(&G z9U2mrGo^1iq^}NHKNNO;<6Q>!(1e;!DkKIeUbO6D6`znVZsLr`3cbS;^u1c~KHW zvxLQt-Km`Ex_foJq-ad>7DNWxxIY6yg$mjtEUbn1VxL+)Hqh?BT;~5Orly(dM@|dH zUmYbD@0t)5RbmMr;dJ#SPhKgA<8%;EV}gUAP>K{yO%@XjEv*H37Ml#d0LI&-xaK|W z(ayzc+N%@CyYz5(&TucHfsX4#ipV6ix3e8a!9f3{zFm$(y>*tQIRj5OAIVpvwTSIc zKeqx-JDN{al;crfAJ`7L{CHs9R2d}dlNc$UASQ}&IFCev?lBN3m=xLQ$tlRZet*7& zAU=44QDzpOc9^h~b1PqlfMF2#ivN|{wuIF%+pNmYh*>7J4ML{d%*Tvl^7nMm!CiWa zLQX%PVRrGX$n-ZtSN+W(KOT>Dys7+enKI3UNO!a4pA+Ql2f`FiFCcnoriZ~Rv&%}~ zEIuKh^7nm&+CCp>sl&9yhLmgrR_1`P_fFqY;AJ)R_H6bTX=-8xWHA_tX_8@YnU$L)CLAmo?G|% z(B)HuErq=1BloYp>yYh}BKL`khpd60&QrDBL-46Y>tRY)ubQeUl1j$FqYnh1*j9B` z{Zu7=#yosgrMo_i)*E6+?8|q`Pk$~gT83FW4QkiueeWXQjF9&quQwQg-YHMM%Q-8f zoVY@d1Vp*s6v^2(vcmw{iEULJI4P!Ypa%ud$%j+n6a|{S_MGDUr%0DYDYF+Jj^sbgvD)axP$*dsRzqv}_l`Sn$w6PEaH5^O&9VqrG z{b?5_bzaT`Yv*hAL!b5_#!E~cmO5Uj8Npl8Q1n3vzJqt-U!9J>J`t2r1RQKXt}A>Lv!^yLt)G2c#7mrWI_IWCHX#;}oo*6)mPB)>L#J~&8Tg;?0ESPzKM=8{9fN0CF0q|lIH{jdVrXmN*Q-^w55vQaOvS3f9y* z(d-tyG|JpPuAJF&LN?2FNcJmcnF>k8i{g?TE@NWnUf<%U28pjN`<14?d)QFxrO7n@ z{e~oA2JhxEdw$s()fh;p81D)}-E zA2XbrwXi4p@=)g=naAXCqxN$!z>D=-9buwL2aGx;#Xn5Hc2FM|k?;f*VGl%j=+~lr zucD2?N+BGM+Z0q_JxVb*X>ME_4(@OX{xZ&2lRu4gl@O>zWrhZlqw?x!_`@`@i^r}X z>=KQOie6)iDW&Aw{Lf4N{h~lcv3o9nI)QIjp$x-G(bq2^K-q926rHSLSJTy)hAQli zatJk0I62gbiN6Hqu@T#Fl|nj*V=PL6|Kk zD#YsROlg$rEorVeS){IR2|7RYPVF`4Q0yJee{|r{>4mhobd#sJ)^d1QzaKoEef z>|dpg9RB3g za!GdRJS8Akuv)-gd7kl2Dy1Jy_+gH~$qTfM{>gb&*?WDS^$M+Hs@m!0URDkESlU6) zrfxm3>kJvxF;tSq1-r;l!l9ex9jIrBhrWjUgK{PB6RUjB=89+g1qz5SFBd9bay$VI z!{wxec|#~E6NNNz2om<|cOJY+(kdH`&R09l3w{1$(w-nNb>S`;P0*$^YK-^z8xPj_ z=S1xYsZm40J&v?1p4>iPD49M&Sy22Jr+&CV=i4A!v9~w>WngdTpM1vkk>ql4bJulKreVn*{ z*cn||sdrLuZCe6a0lPzr$=~j}{2W`uqz$`BmIkEurbN4u8IQNt8lH~hS~Gx>2=iFr z8>1xp?=GWq1hC@b)jeuG{$|T~2?~Fa;7V9$1fS|g;v6%-kEsbI<@Xc*BImf(?B*^$LAj6 z${xf1R2Rw=hb|`k7*KQE&%X`Pe_}*K3sK?Vr`GA;)r{uLmtSbgt>2($80d|QJN^x@ zy~tbmv#9+HL>Y9B3@707tX{a&Pd|Amo#Ip2%!TneYSVCZ5|L}bugbUoEPm4=%J7Uw zqo<6s{i<3;_Y9En`vCDT#5y>1P%jXh-bLZpIhEo%ivQ*Si;Je9q96h!@PyC(C0DML2DawzUq^~nC{Zzn zw8r6BIY4Hs2oIqo-7;5a%iT5p6SGS>NgdC9`qqPv_I1{AH-)@uluZ}OOWBH~-~qK? zNnZzr01WG=NdW&>A}dUE>k8i;c&J+t z%H6zRX_8l6cic~?E5?7!oy6>`?~a=cj9qV)k-$$OSB|;BjQ5v09iXF^A-c*s!mTv{~+ea(AlF_b2}_>rK3oJ?*-BU}AGZI!W_? zi}GQBNm82YuC*ob*H0E$f)3vBKeZH7VLpSR46dFXneDhl(L>D=e<(`!SJ*xc^Mn4A z`UAHDGXV&-o&ACD6=}7~qqO?45({jyKHNv5jt-)da#POQ&=w_jDaPmChi7Gj7fxer zOx6(*n~~Sh;1@NJB8UavmmVLWciKz}0i1Fep71HrV#I<+?aO z)vp&Dcmz8N+m1SE%q*W(;C6nas() zoMa5M4Al~fI+m`^wjjoUoq2zVKUIQh#zJ>a+o6_rI+wOS={g;M^r+gPM!wk&oWS&S zwP>4V@*e#4wXdu4+o-u7;zpJu$?H1lEDR4s|7^)l0{V_DB( z=1e6W!#hvfSl=tiS>X@vwe}UiX`dBW-}$i{ z-}zD*D{x}gO9h$zUlQ6lq05<1*}E5oGBGeW1)%`jN|qS$u9bq+gCIV#)`Xi){umc%kBgpNk69@2ImXxwcvK}U6nXt z>5tK+{@|)w`|zimKI_fkBQwugQ2!CV{7ltlB#VU&H7il3@*tLd3}|hhjDd^%$rST2`yARpmj@68(iT@>?%eruz>r3`0p75G82L#F`pFeH4Tq4tYh;PfP# z=9c?ybd#POiB(q;sI-gzb~dZrDwlM#EHib$to^Nv<8Y_nL36P#hc?-OfY;3!`C)ds z5tkX+YwG65M)R_}ijTn*Z9_B&FeO=~pul>Y`aw!uP9xgy%ogdjH)T>^(lYQDL|MD>${y<31&A--*n+w{Ddh$hdOD5{AzP zWMf+5nK_<;!W+{(^NNVVz_7Y)-Mnf`G~3Dbx4iw5-la17brt!w>%KX@)wU8&4#i__ zohp*BCGdN{+gba%0Wg(Rhjp7JIzDsKwuhzo_R-4fE75@YjM`MCpgQL*va zGGC-v(fEH%_$H~2ykUn4+G5Eku^gZP)J0xCF7?0Z8gU`q681xa6NEQ~qX*dWXqy>7 z((RX&pn}K&T;=D3LlaZEKe`Q4X>GLEF|yoCzP5=qCF(JDrK7~aM)_uw2}f|^eU2Hh zuq6UVX~n#HyOTr0F2DaW63KFoKAwa4f62i6JQ3s@AI$b!x@*93raWDu%`rhl21St( zhiQPs99P|ALYK#4okaT--S>^m8zdusPqlCPGt+aa+QwzP1Ih51yXhs?iZoW5X8t(B z6WFi9lkC<0p;gtAXef(t+D}bQGwI{Xql7UG?$j}^&#&^`{C=x0kCZTQ1V{eFcGsWE zO*ByGtt*#$mDNY$>q%EgouDCGBRWv5TOC_>=u2&Yi>3;2)^bK$dJ1x{yRBxon9-F& zFr(iGW)u;=O%8SDcbSWQgDFQW!t=_MeFVnYG$OG)sBT4r_w9SwtYy*>yGVX0HYa5vw#P#$ zWEEA0?Oi$0VPb`5yer=0j2olDu?ryT;4i$UXyXro`0`exD{#4Ko=~LD4 zkPYvs{CmPH@kci;GCcLKk{z&PjAkU}yuF^^cbaOX=_W1bQc5Z(T0vNbm8)5KSr3B` zu}Sl!yJz3E+;eB*)0pE(IElP@#@;G7&f2RU%$^rV7;S1Eqvlf(QqHk&D0l|oso<7c zHO7Z zXj6=&8McI7T2%jjVW_*vVw`bzz?NKXJ9h{}glNHk)GS9=vb03J&^oO(wx5{aT2~Vs zEJ8GJSylVEOS%($R=4yF)bcg|jFAE9@>-8zlU{GR%@b(vbL+9GPQrhh>E-C1rRG-{ zIwZ@b!7g(g|P64 zphBO%bY>zipC3aMy>{~d&NgS>!o?a`CLA-;VqSKD8I1Gktitc;?WnMqwOF>O z&-Hjvu;gL*$D>IjA?j1IUq`r$xU=GJHshyW!IPk0wB?L{4*a!=niEBHID~coo0uw3 zgD5w&^1O)`h?M$Y9XRJjC#tRKx=&iQv5zA}kETO+_gwgN7W z57@kh8t1~v*mP|>G)Ra^&Nctd09mY*jX77_8oP~hZLH0zhQ50` z6Fjh7r44z*`zyTPS0k}!LFiBYXEOv5^rm9o0(lK_j8N(IJ7V1yUYbysY5d;aMrq(| zsfDG^B@W3sA<(}IWyo>nyDU8@X__uwzhT-HoPKU|*z$I}F7!P<9A9IL#GJLDRH(&y z-23CAT!JCds3V7z_+MKd=?pEkX3{r4V7kgg-5w9@Pl<`|R-BZ~B#JR1S9|SNLs-o6{lQ1`MYenlWDOt6K9qd zI==W2%b)$oLJ)$Y%M3BKSg{R~Rfjc)sHPNz1=aon*0Gwxzp=dCG?Vz&6j!6?o_tm} zQzblB5euAsDc51jA(avj9RAZ#9pSUN;%Z1TbF{!9IkBwlAU$)l@%%NniIstv!`8C{ zS}NhQIPItjb({he*Ys8FIDTYtE0fpHzFm}P6U|6Fv)huY7;BQBwfEqaZ*&8Lh}3S< z4o{S1d#edj9)vTcAGC1GN##h&F@s56uI}av>Es%D$y^Kvrf=UR7+GC+znsae1@Dov1s!Nv;|5^XCsXadfn_<5xM48WFJZE~;x3<3PDF~`EW<^Hz1 zhSG;R;3Iy4d3GCO{db8W#V!d$_xW+-X$@ClX88UU-QuU0IDZbgWlO5YZ;>VchT4vu z`ItsL=8Fv1vi;_Hv-dNg3~Rk8h4D<|TYEwM7sdpbFUFI)SKrsvAZ$acEGR{|ciYYy zRl$T+|EB=hl;oFtA(0wyCQFSa@}qIE;(Osr8xSE%Ne&YH{exf~4bFvm!r3zr8Mm)h zFi772Q;Q%did-t;!|@RH`R{+9623%sGG$F`Za5_C*VSiS;H*Y3PpBDj6UdRz*yt>p zAycVEoV&olkPirOEW8D8&z{{swH(|V_%fk?yC|ktv(I2{;Ln#tSB$V7(MUKLdF7Je zrH&TwuqktFrYSA%g4X{p__&C-i#%fjzwr7>mtynmPu#n1A{Wp3w5e6O)Ko1FC{3gG z#mu9N5m?_5$%-PvTJRv|ejL+np10(Wl8SqLfqf3wt}R?Rr_gk)g>zC%H(HwQ?wIg` zb>-KGC!A@aF0WkkxhN6`D(B7v2m!WwTZUEg=x)pYC8&XsMj0QFM46tj)!F-979R77 zWPkSIpnW%KN4OHr&CS0z#8urFAzI=n#aMfb_#fF=qLd(m!#ZCnrQF_$K1(Sz%g~Jx zA@5Be?G?!n$4=|dESPBGS@)A;^WaKq4U$M>)IFDeTfu>EDem<3;z}hEh}Z+@srFBy z--)uNY!EJL_cck%c?-30nS$9HYVVXeZA7K5w~WCeKKLgTN$T#sCmRcEy>5z#ykcir z7A=P#^=lS0Vaq-UQ0*p;BkRnyOF$wYr`M^=f>GRP{9!`o?-b|I2Dagk0UK;Qi z@C~`QAyYMZ27)IUgI*mCF@Z(YqobM|wkjZ84|sTuTSMdQ{fvbP1e^^~SC@I6y?+-K zt>i;)m7jr4&E*=}@c=MB7VIS@_=J019n#FL1T7AG`WyE%0haRCu4KuI0xB8c{XKPu zy4bu-4;=fe>{OBV0m{$#ISUbmNm#wvvhIEVy$p%W_1IgMwp^M<-n$uJWar#qJ^Hiq zk0$2jI;Y6_dX$-BK$j!9iGYWuw5f*DJ(qy!9jPRckWaW9jcC~%3cp#k&z9cTe2f;5 zNX$O8Pgm(ySxO-(OEJ!M8I!E&YLpooAfM4r|Nd6b68s-kj$+)JErtiZE^?_3!;^J*Z&myqoRq--x+nwTLkIwdi6`~hfuw^eu1}_ zhbo`bhe;#TaVI~D`Y2YNJVR`sWH`)5#ZejLPMH}CyOt|mTnLZj6=B$T&rw!Q$;PQa z&6HsE&yV35u&Ee2AWD98(Ot>bI2>o!whB9b8rl4cVzy-?7FQH>TRCj#i{bI)aS-rE zCoF19&=c#AyvewB*6$mn3z#$G?qOIaIsB6;+R$c0#Wedm^&i)bsQcO730P}k!&+}t z#ZCUt3ih6QULdD{dZn+Zjjn8Q{JJMmmhp&|0SjzW$GI}RK1zW-H7l#+|c#! z{JbP`*b4j!kfE!Ti-(rH1N|~N^^8L!WVU!Y-TZEOwDs_Pb)_y|f!$uX8qitP7Y&EK z4oH#?;vg935GJnb=P)&@C(m>YqM!KKxcm8Z+f0mR@JP11=Teyvx$d|Qr8pIXoEZ>e6_hEN(a_J6buLVcir`^BH9e7Se+QEdEUA`N|1 zeAqKkE?~9#gEb~kFM6)iQc&)%kRW%(vgS2}ViQw}>xfa&+w^UV7Um@LfM`?nwVh6W z^X(ZlHve603}0z!8#+IUJXuudbRxoo^)nEQEtmJ8)RIX{jXtXrLSFm~M3??+GSss+ zk@G?qfS*|LOHI!uY)x(0Nl$K`;~%KSdqw(75hgtdEepXWui?2jdG(8L%&{=6^@FY# z&O22!&~>mA>G%oH^`N_gZmM$?xbjIe&coJ*OLA1|btAS7lL+J@?HBcK5|M9#nB(Jt zB$Zand>R+zuekJgZE+`R+*1X$$6~0qhCZT+q>Zo8f!-JlELk>T#%}oZYG@?Ix2$k7 z;0j-JT}1yJivZ0^zRvqpFt;GlJ55PrsQ2*Sg<)tQ+HOLhS?8;Ic);ezX7^D|_)b&p z0O+DJLXw_{)RSQUk-R8xFT}-8lI0rYh-&%)cWWr5i5Ouc!jT6OWAt2~5dNOHs zw4|aPdsS%m?Z;E0>aw=*Tg|v8!SvgYKHy(veU{(G#PgyiM31{zMr5|RUdw3=UscVVs=JdHFba|w=w7*m)6K&<Q2Ne3N{d1SnT&{cC%7hozP2Hiv&Ha(aZmFz zkS~cBqxmPO^l5gpkp3B12>R)NmSRK$!!moxfC@2g9!BFScQiBvH;kVB!V>$7 z;l@!Rim*8#G|5j6TIB<-PJ~$~+ zCHUpV*Y84%|H^*#^i<6Itv9i~8hMx8_U!(Gz<;M{aj#&*uCU(u`X7uYL9Dm& zSOz(|&Pmm!-`ny33As2%$7pv$;jz99roAK$1UEI6~mK|b5(I|WtaCC(KQ{$!Wr8q-n#cF zs9PgB?cSk9!6VE`8TGG>`_FO(0p)!c?7oS4F9-p6Qr$I-GjmP-uMLdxlb?EtGZj$8oSweb$B~H7-Oo6xdng~e@JkEA zInN~il-JvGTd>K+Mf~zPZUE~;$#Mc^8#z5{@#Ez0$z;0Sjprl)X(Ims%>Hl4_NZH% zy^5f=TkAqK_SI$#FgfeZ8azyZ{LDNS2GtBC;qVWsuai|`LvK(%oYi%j;_#M+DH%Jl z>G{&q%IpJ^81IgzjrdT;!Oxw7(-x~EU-ejUMn z2dBL+X9upsSIz8^Z28FRmTnuTY*P&2014gOtp#s=2tcijWOt{2({9IcCpkE!J*N@R zb}eNw?Bs3(gT^Rpi5NL6!R`p+owJoo9qa=7Q2M|?;gpe{gc>ys#&}}ubn)PSHWrM^%1k*0&VIgQ# zGP36kynjk7;zxmW-xzpG=SjL!vN$aSj6Up`IQ?s1+J%wq{GNV1yDFbY;T{yR4Df>q z4gkYON9HK2c|Kck{{StR@f(bf&XwYy4QoCX)#lUnYio;FiOQ>$^0&A>=oob}GLkA> zDB$yh^yaZ=M4=~?dMddJaZMIWE7ykwqd4eCP<_Q%H0y+sLqyom-dyMZ0E(kn%^b1_ z?S6bxG5-KB~Rz}2f+&9ZD(NReX zKA8SyqI}BdABz^|Rc{W5IW7GR>2?ck3cHeKappbhR46OYY8U4QB#BUtI27tkq+{lw z=f4$~DJealJ-&8XF4FQk$U=|~bIBg{5v^P9MUVrPVfj?3oDdE(^kJH2<7Ci0WaDz- zcMksmTC8;PM;>ynX`A=#{j8mP!h*s{Q|(%4SeO&bCOobBWALppw8?Yjk!#A|0DMq9 zJ>zt1$&7ZBDTZ>q;C~6nd=ZTM*Q3AvOYo}Xi@7n3{{WKNtqwifc|MQFgSNFI@b`d% zwV0sjEM2*3IiQ)2$g*X7F`c4*8pSVOqyJ#u^1eqCC1MzD|`2C;A$3JMV7wQ_Hi(|Bw@XKvx2g#3a#ZpHn9=`Rmd|T9X z8U6v;S!$9?9MafBC6fdUR%Jo7pKeP17}u4)BI*|x-X*x6W0x{8;PJr4YQGjdMIFzA z^cyj9?;IL@V`;|+V5Ggw)xRdR>QU?0=)-5eT#zx2>OE*FFEfybH4CkmlIXI#sO&>j zW0}KcXON!$YE{&p$NvB(Z6sPg(Z7Mf^!25NL$yO^>T045&>mTzKAEQ$d$k~mTk#Yb zQU1#=LtaaYx`Ba@PPBtEsq(1Lda3=k{0s>R=hBuhZ?lr)(~&@YN1UcH`8q8IVS-y3 z^`sewGoRM0Uv9r)jHw;CrrP51xcQj;Dt{L~Suc|QizD5EfC&8QmcCGOanFBBt+Bap zDUkjYgA9ZcU612dTv)HNzWt4OEKR7wqs=0a4r!@%XjHc86rbV2=}=2<#CJ8-w(F2b z)~>kKuPhX;wq6Mtb$GDfEFOBC^`M(neBl)RDYF2;+gi@NTK#~oN{SF2;eB@uG~nCGfQNu_=;kvumh za>o+>6ehwrP&xFb+%|AI#aH6VaBXaM^H7@QF!9C@`jm4*tkbSax#pb;+kpO*rA^$k zcdI!p9IIkQ)z?kty0@2k&&^@loe`+y8tS3#*XdNue}$EDOF2G{=J2rn^oQFtXw+{C z0P?9T>L^`|4=u_4E8?eu3ianbXmU|+z(m>zeM;y6L0`dXv#n|g!p+D0G|udtlA{#S zG42D7O&QhL*~d}{cj=l=laTA(AQ*>O}-57wK;JM-R&8zhC_4iEM$ zy5Ej`Z{nB*hO^=gPf>-Oe(FgJWsgh`T=7>g1pF*%k{jO;%OYfM7O2E={_*YjRA0c| zE(_lhNq0C6_B0HG8S^p5ao)FhlLMzepsem^E^&QR9OH2#yCP%xO_5d0}+kG;7SET%UCA08`rEo}4E!Y#ETmk&edG5*( z134MT8K-#7#Wv4B>zr?Xp0E_xGMJSJz+COf!S~6jUkz#V>sqz8n+(yUmokJ_mA0q{ zJd^lTF6WJiI4jtiemOQb%#SEXIZ{D5{{W**J;&mF(bTH5t&s}xEU;*k{gzC*joLEN zobnG)PihXwS+{bynzsJCCL+o%=T1 zo39byUrsk0YkUsaB>MI|5nI*movrFLcTmS5Ck(`M`S+mC%BjP*N%~+$$e=m zWv&Ab>Qkjc>$jE>>9aH6DmYR{LC0#yVe#@35>$zS&Iy0*LU@D4u*;`Rt28^<6$dr5 z%9nHpiw6c~ek-|2wab&ga4y6X+-9^77MLzPJEpk#URyZEGuO*mRs6p)<=g;$a5~if zw9IttVV4ZCC>-&OQn>h!wgpZKYlhz8-w{AuRKI2`vTkViQn8m?Ml7hm9whk`-D_oWEN zMjHp#xHkcvq>oJ36U@gL{?#qBzAfViOl3eNvOSG_V^XIZvq~&FepT`hDI}18l}1=a z750QGU}O_Y*rW`TN-P*~E9Dg#38c@qWDdCc(isWP;0-ubZpKeNE0|M*#w)URP}al1 z$O67#Li7fm>74Ul2N=SFInN@eCt*ET=G~ z8YsZ+8?bxV3bt|I=}t6_&RmgPFO$I}j`d)2iW@3_I{9~FoO4Sgav0#6Z=L?WmCI!` zh5g@ST@rEkvs~Sg$RCv@3W74Z&2}RkukP;hZf@EG|(q_G&l z86Nf6I#1|2cs^nYt(j$vbpUd;A0m=Sqq5hESBQ%v>)1d1~` z9B^?=$VM^FMOrc?rH!)B@T0^L=sqS!xNWxckC!WF8+{4(&3aDV(o_!{1_S~z*92y~ zc{3^!R0GhAj+LYQGWel3lCf!e*)v%w{oL8h#r^4CXARoB$H^3O)pF@0&_iicob>di z$CY86V?B)preE3W7LnZ9PaM$6(Ur0fx7Lb60O(uNu^e1<%~d6hJd*RQDPks%amNQI zfNCyAXUQa=N+t=h8H9|Z@J4gZ5gwSvKo}_w@YGd1Kyo*~k->VtES;P+TpE7cD+-DRB zzq(lRyo#_`#Aafu0agTlV--`>A(}Y~jP1e32V7P7vQk()=c{mFrlv<~Q<>*t#ANz( zpqOD!N6`DyNj4u3Y#Kx=_W;arzNWMbdp9r^=jwQ@J9A}?p0|&PQnFR_ zZ-n0sKfq$t@4SB+tb?b|NW!)>YB0AY)Eqc8btHk@Q&bkEj; z;O??CM7YYb9_FEaj%`ajp$#>^H z#V!zq@;9Ej0f5i7bH|d&{f&*=N0j5%mW7BbwDsz1MEGg&XiRHw9IxsY}oR~eX$6~=qj+F(RJZg;S5pQgaXoJ#$eRsci&$@(M`@8O}TUS5=q{ZaAm6E^-0K zze-qG&Ip7MdSDZpzhF#Y3=`(y_pTD85xR_uAta(G;Adib0h9VyH5eYw(V?2vp_(!n z{J>SPMn+Ws06OUH;JliQK=x#H{b?*14xLUor(=|q2v7`+h6kzaD$C$2pAMU&4~eWA zSV;k7S2#xRkUIVx)thN#8kSxYDkU4ADI++|bVTI&RlfnB>t2)a_KDzo*o4|umY;Aj zoT%K%^&Lm!RvT?EOM_^OPqjhYY-9S0QS;Pv;xqWJTgl|u?5`WlEv{SX5vLBDsB^Z$ z!rYeurm++6o{=A+-{{RoaLJL`3sPCAY`&T|p z>z(iw&rQpU_2GsRe9)mD;2LUOJ5P{iODlHz#HOSEMSto`;xFmsU6OPmM`257XB?FL z_^(sk_*27odHLEUn`i$3#e@1(Md!mm2i&Ru0O>0eddBPtqC=e*n<3EwpAat)0aM|Qw_B1I!ZQ=cei&92maEeeJ`TC4vftYP?E^+IM zoz=9v{WjsPZ>;CHlyz5Akx_HR$~?lEuEZ&QU6zBqFXFvt!?yxmHtpk5e9@j!zM{52 z2>fKzuA)da*c#GKH%xvAS zoFVkxMJGq(7~FCBRjWzdwz)C~Zkuz`ydkCP+Mb&@mdf&Lb_8XSh^zkqhJH18yGSb> z_bGn};}WRP=Scqm$I2Uwv^xDkNBdz7o~2w%XmgyYLo6wB-8df!>2UntO-~}gZ7lXk^D_#Xz7D* zY|>-XKlCdwypmM9wY6~KSYuROoMSz+`qkg!_NNDke0iw6QwN21!m=sPl|aT1daR2O z*9$S2$Tx=>9)N*NMscnZ%WNPXdqC8xb6y2%|m| zSPfU=E{kYaa<$U4XVHAe`Bt@hgOfA(Fv;wX3~A!WLbA1P77KKY06i26mU2WtFCYRs z6U{6p)e3~K8030!_);WQe>12A`*p0hgnG1_iY~r3u(P$+ygMRkI&G!6xoF9G5fm|B zC}08Y&(^448Lo7%ooZy&bY_tv+45~y=DO|AQ~r~m(y3n(d}*a>b{cdq@e@my&|QA^ zEh|f9Xq0Eox%%~U28OZB%&a;B-H#@hp?S%xbTJr^S4b3)0V5O}qG0fHDqm297j^l7 z?fpeWOn_u(8Sg^1Y?%E61qY;g1D;QMWxtD#Jt&cEHhEijt|@|rH!#a%%S$#ooL_;k zGC?4WQqf5}04I07b#fSPT#orPxXP(gIT`LcRA&XVgVNs!qY?Z%(}Lh`F6SL`SpNWO zvmJnT&swSc7L{f295D_|Y(W12%xd1~Hy?&xMH^B)Y}p$&=@b54*e2p5KLNw((oq zL-uP(V@Qw^5f^A4_#e)>B&<~Ka>q0~IWv9(LWTbT=!}NLLGbO1+{J5eZ44>7+@5ec z<-4D1!9F5uvFrXNp8m=?ng$^h$S@gHU=TmOYhM-q*>~Y9n|nO5B@2$8O!JDxe6d6< zW|0FI-6N5mq>txLaF@fpyo&OcWT6m25NMsTC(Qm3SAsohh)j@g5xZfA8{UhUNEc$U zWM07Z_NIh0GY^ubfjr}-H5m~qeYc_QHv00##Fm#+K*OKi$W@Q!{cA+zt^}<_3 z&u?=e;yFe#ezk4SuO67ME7?mugz?P*D9S@A?Yli|c<>L5E%m!dp}UbGzX~@aHUs0j zk6&8IIr(<>$k{SE z`=FlO=QO*|6Wi%JJa<~KNTpO8KNM?uSW$}@3vxPnzurP zsK5k$IHB)!q?wB*1E0WC6}bVMgDPx;CxSkd(;)-BN?h4bZV7ZCXB<$hryPU%QIy5( zp*?|&k5Nht+3G(NPB2_^p1zgxpfU^|^iIng7WUfGWrs^#LW~%01D<>Ksc0O8P{*JE z)Eq7&kIH#Gk7|&&oG?(i&wTW(o1*5;2ua6ewxfL=wwS3Yz<0p<0iWkkziEkw-Wlsr zzA4lN%(2@eWg${H{{T@rH3%KE!y0CeB2Y2?LY2v}JoqH_nM07E;B~1_hJGZ2!oDoG z)@8IeA{2EB4mn|r{3&dHpuN= znD9tab65Cm(il~iXONBrc~YQ%TAH`GfO&W9$Oi~EpQRc!$wzE0wk+Wkts}vb!h&na z*k_OxIQ&I9dY@;XQ@$K(PPsrtMU|@y8^XLBn6?QQmJwF`R+kbU{xWPR| zI1s9W7d^-VsM%(+ZlAN|_?JqW*F1-H>-hfwTGR@j=RWm`d=iHK#oGPiDQz59ODC=Z{WnM7R=^><(u{$ILC4mkwR@zqw36ahA~@4?F&ty1a@)Z#DP*Ml zQ@Fd9)h*ziql|`WSaX#e3d`;pcdXIi?DD8($l!G#)tkotCQV9Dk!r>4h~B5=1tgxw zz89eUYM(rk&T;br0P&W_D`uE=ib6AgVG>To2w}7;?HfQD`ufuW?iiUDD1(8|Phm~R zpR^W{jx)h-zxDc5p0|5zdlWF(>CI_vZxD&tu_fGfW+%DqJt>&MVfp<^J_0Wvk7n%Wr*T+h@fckQ3;S<`GaLmqj@rE6HXWFqp1Ne_m zhevA~fO>||J=t(4v zmS!ZA?@SExROg&->06752rM%T@?~SuWAWwUUU-UYh_55MM_w6u3)jjIOjUhUVfVQV zIUIfJM41E-!2K(qFn|{rW7jlg94sT7>h>E7#FpPYNUZ+=>FG^HBX2U75rBH_;+nUN z$ooLvKb1XgEGXtFqAwdB06c^1UDPIWwh?DMhVnT+R_PZno}0bRdJDmqkFEGqPyYb5 zO%#J0nMftJo`jmfQq_YOh1Y??mgH9B@P;w|%fNnK&{>Ei^%<=0b6qlm@m3o&6f3aq z9D9yytg2UI#*)O?$}rA-x#J$x!n|kbk_QXtHR*%xEvAc4SGkS`FiIx2DzkZ`qiPdzkoO^!}Mi7 z#-5{@C~87?aU&&^dAdkdfd(*F-zS=myVGKKY(z8Lo+|g_F9&KG1g2F6dm?a?0r!2I z6<1^@sKshUsqHf|QIuX8T$@Ohcw7)YYBuf%faQT+c+FedGRg;W=xPhaLu3&SIdADi zt-RrbvPnlsj{9^>pt9kI98zCUA~LZ8x$4>H>Hh#a1FvDyxOnZwFsq6X_oONO&RZbo z(~3y0f;wiCk9r_Ho$c10jY%1#D*1&@MW*Hm*kdGQ;;C%ZL(vY;WI&AiQj#|GsiCH> z@&WBnC6HW#nWf$7A;n5Yte267P&YOPO%WC8WF|ew*Bn)5-%$BVLIqbof{XtE5_O0x zuU_gorv2Qk6DpKgcBy(kLye_IKh@Hzu}K-7%jfg&Mrs$yG7O(xazA>X9AxYOpIWPHEAtRZ_i(`R&w4!T z4;*TWpny8obG5kadKKbYC8SfxJ;hh=bjc!TlH6{Hu`EB+PJfL!IcyW@Uw@89MkQQx z=}TvM7{M0D1%VhRsP(F!kM$We{T5kcP2dr@Z3S?BLE{AFXTw$TYG;hEAH95AfI~TfTXdLDx(Y(;FIl4$rj?QxL|rN zeAQ^T;03E51t3XcU_g%pIa+Wmme`4eZySv8IQr8&ipzwIBVz!LMRpf?CO~s0co{s8 zTvXr|aMKDa6#oD$AY^42EuN;4EKF65;K%{Ok;gv&0N$G}VwwI^vLHG0b^NLJ`$Vt_ z*sS>-M@~9}?^H@jQk~-4v}^o=78CWLW_?^Kx_CitKY-+UhpX za};tcYzPncdiSPvnN_u`t-vUGSoG=dM2vFs{DSw|gNAes90k>z=MQ}P)2LAt1|$LN z(zz-km1s%Xw>Uq}xfA5&mvHnw4NFb=DO&5aJs|=BjTp;v7*aV!QH`;O-|QJkpUtVUJ4Y&{)OG z$U|Dp_b7__5)7;QgX`&Am%_`Ktvojkth=Om*sqXhsjOp8y^h`qB0;>9#_j`sYW48{ z08nW}*73y3u{Pyk*v~zyJDu6XNGBdRvl2GA+XDc71v(sz1;IVfYJu?Xw-%j`5kI?oU4TcK7zAW$7QF0ggH`39CSXF#9<>d#@n&Y)z%Pj97cm`#}ko^z4fnq*ny zXeS6!mv5V)9*5eGP0qHm0_Z6(2bl{E#F9oj)o;aeD@hz{{3AVUR`{LaC(!3N_DW8j zD|&MgJ-(HY>qVuyZ2tfc1or$ZZ;vHCn77u}V}c|$I#)p%1&%4kiH9I@NZ7+XcBgWg zn(C7J3%rWUWM5;JR${-s5^Wf7Mdy)1W3_WE4mO+v(zrKgp{r=7811Tj%b3uP3t-j8 zIMo0}&eh-#O0DQ|H`@aR1cAnC$r{X9jmW1S=8@#fEg|kS8b<*`xs`ezwZa&joxa#K z=z?CRU>J5)>0J2@)vlx`+Z^rjVt;tom1K9u7T>w!(>K|XAKXl#+(oMBfK-PQ4#gvmVtP4Gh_6vg-53qT=+J;mYG|K=mHEZvKGQh|HJ- z5=J(W?@9Sq_VFwhXc7x#5kf!R7$5WeO*9`YTR1t%;;^rqoVIII3?#vIjjL?Z1B?&K zs;ObBYOO5xw+>NUuHD!ota`xtmd}%e*i=`8=J{`Ug}L4yiClZFm9kDRBvWYG(n+w( zBInjhHXjS?G7sKgD*piECy&akWAOC3%D9s{h;~68rr(aCf2J-Uk#$$y{7SXqs1bnLJ+qpiqE#l2$N&H=W zrgpZ1Nq}WwNLAw`uY3c#qi42?YsoDv=le?TA}89*^A|i24=eOE{1b#$3x4bRHKpI$ zEy}*7Z1)Ghp9K15qwnt?>C2xYG2v8j2dCHGk2Wt05agj80#~2cnv9m*EP+d^5IOJo zRjZU+32bK=tcx~|ZNAXESQCtQ6e}(hEXb?Vj=7>Oq?X!E=;49Lz&Rg?rY?Xo4hoa} zSjK3vO$pg*dP`$UPI$@m!&2rUn6yi^eKXA})nZB4?IDaqs6mg`lW^#gGh2pO`vz`m z$z)nG{{Yx}Nh3Cht@qc=1~bRGrOhh5I1Ch$2~^`0G%`cG5*7n@MdvhX-CId0kK~0= zF}X*Yx=RSW9Av>Kk9+ zLifpbSS2Hb3wMX*Bz>zQX7Jk zS`dMxkwL%%j=WI>MG!HSX&W5i;{u1cedH{0sw$JWAJ^WR%emT19^7}S>ymxP71enj zPz2#h?sL>;tsW4%TT6v_%4Sd9$c+5~J&&zb6+jzE!*wm5MH{AWMI;0A!TY_N-i3Tr zp@P)+Z^7sdHYKr&KajgsPDmZkdb8QwEYS%7JM&Z@0qPOncw*eUyF3f>8o=ISVvoPP1Z=jmA<)V7ivow)srT1f2RWDI*#qC#J31Ssv;{xrp`k;!Z%Rs&_~-@gu`< zc%Q?PS_NOVN0}{{bqohj#+%~Y>z4ciy0s;f%FH|MI5d*EJSq1SW#m#@Ts^d?Rzz*A zhk~Sf(*cUM0pQlwe}-g+N-sWN&c4{bl)ywsmV+);C_(19J=-CQ?WLBxFr7o zrlK@}LZ04i)S@^b;E)F z21q^VX%&wpanAr6az;4-u+OG?Q)Q3(+jptxDjG*dS!2i>pCW(;d89aAqAtI!B@R!S zu)cutP79;*f|HP=%eScd*CdycuV6O_8L`ujxUB>BeAATpj{8%QJl1y2@<=(_&NhSf z#_z`!MV9eOkRjS|d2ZiI*S-bXtUegKx?d|?-0cU@D&zamc`{L{v=faPI}-XY@4MvX ze7jBv?rD%fJoP@*^yKbP4oJvvdTQZ&L=Dg?oJq{AmBDF%mFx|i%D!<{`88w@T zn;vxHtU8yOPSMnJRcki+J|c_Fw*rc@^dj&P^2^rm*%Njh)e5Y98(?llDoP(o3lw zVvaHtXR8uwV^&^ z`94sM#FBu@KviB@xyN4AG>lQ3sRZEj$sO}Yt}QGxKa*r+)RFY6P?g$2Qa_9OQk1hM z_Z!zZ>M{)_)t!}Dh$Mg*^d8j9D@OZI8R>(;tEHhgkFiq2v4aj&o~O6gxEY2pLWL&; zccpyBDpZ_cWahrvxG87aGJ16UE3^F}dH9Xo-Ag1}8GNMVd!Jej3kL%kK9q0BR#zp+ z3Nk&-4{bZ!O74#6T^MB!4?oh43_k*Q#iy1N6!IdHVCBn8cVzF%_Ne@@15@4pMR|>u368@kVUmIz6De0Rusi|}dQ1HF=65+u0fss-KafsU16SvIIW zNAUaA4#xToG^8swK#X6D?rm8X2>evr6M*6-za3`l24^_F|;uUl5$V2eKVD1 zW#>E^hnL`oEErG6zYG0~S50o#EJ1cLE(b{m_pG)=eb@{*i(UTe7#s}kH1Ub+3 zuD2X|*H`ax<)*d)b!?TeMp(e)vvZL~?qpy$5-2ETRRhYsyPjyMT~9bU^zBK{&Pyoh za3Lpyic0`a*L+vTMb3H-)y9)Nssaad-iC?VTM1_!h@^>0K2q590-KP=6#dnYuhi2b zbYp;{)MRz7b207Z1hH%uCzI5XUlt^g0LFPVEK&!~ah5!&;}!ExfaeEm4Dx$dGm;1= zaK{9C0ngxR83gSI9-yD=O^HH)s=iEQFg3=y+!O^Q=Q+UbReLShD*~OeNIYP7>07_T zI7EH`unFZYE4c6cMz9v1FyRWbFeLfC4SEmZREquq({aGdkNrlG=P&UOaH0M}&p8E| zRAlteagMaqyfAj;Z5YitGhxUBZ(~Sova+`z55}?0b%cO*EEvfhKPsnRFppD#x?%d` z)~)wI6zEM;{6W2CM)c%S>H}OCrDWwdK%j`9ZH4^X%u&@f)Tjl(^%Mt37dccwuMFn<~) za&O3wCahzq%&-v}o#3-$0CoCf)`w`$?Tfn|Kt2BewH9tSG6`M6XDzh(o3TG!Q5v=E zcb6(H?PG!kMMQ}c83Xu_`^VO=7lZ;(QXz|H84J_b6sVcE0fI1dka0#y1VxDw2(Y~F z%X3Y&y5l115`6}0>833xxV(=1#g5&>pbo={7r(I;5poxHKm$F6NL<@YkbJ?kr>eGU zHOa}`ewBLAzamQ>2ekIJ3{A*wqoxO1kcA_jP0_9sJD4HK1L;u<$fd;Yj0&;-RcXU0 z9Tqy;EEa;%W6Ym8k;ns~$mvE~C8onWi6tq3Q)U2e*{CGDm-l2j4y%lw)McYw%Q1hL z+sFX7bNvk|Wq3yAH@RvkHuq3z)Wh~fjdR!#Xf}ip9Fv37J*q(=kqWae_UH*7WB&ju z9!1QGtiWfSDWFD6#7zZP$K=2taFd2&*~L1F<$hRfpF!*CnkmJhNf9EErP>-7R^WQ> z6dFwy(}2s2V2;#xmV{iCWYaqUG0qu^jij6~+`M{@^)&{$GeHDTYKAzQf0sB1rg2a% z9nd%gBNMQb-nqI)E41y;O!ugrYQ>2ZuKtfG)1%a4yp0+#M;RXdI{Q|m;itQwONFG8 zFn0MyIV=6^&l)DQ){z+G3Q{)95Z+^+!`inGhu4dJWY=NA1yxW3(0U5MzlSPkmEhN0 zs_lQJHu~42 zZNOdX$T!wW`$t(~9WPK(pEJbVeF*-v?-E$E83B7vK0Fx2i5B7m6VF=gNrSkYiffb5 zQ})0H1%LvzW#B<$_!$y0agaj&XxP^o$vFDZX(H{~LBKiA4>YX#@($n+-3FAB%P-sg z1W21mA;IUpCP+Wf*!*7B2*8kG=sU7#sG)fmAkpE<~494YIxj(O{vYm>M4 zs6veA(zwiU@&-60DC4i=Nh+wjA8=#G2A@sD&W_OOCS0(>NC#kfu5MDKh8;1tZ%S+C zF~PtDaHl-+Uo3~6W0e>+Zb>Up&pgK{2aJx{vSmgOomA1a5r=u`u-xk{_e_f21jlyWcUGj z^ECZWPH*9HBCa?fjDImp@{@2G;=Z<{P-bv|$X9j-cJ!`FHrt|>^AnTmX;YLDsmUYX zoKjhGoD7l4=CRSOgb8w>4vqDyr-@;5yOmgxo+{%uS~d!KJo?pVUnHSW81^_cYMRa% zD-+%Tw2R;^BUu9+4ttt5JGkYShQ(Jb-)v<`U_tffh*oS8593U@tcxV@MtoY1N%TP? zDwU6OIo-$|zgo?-JwH;`E>hMJG^h?#6Xggx@NtqV_2c;-<3oEyn+(T()Ax#wzpYaI zA**UIi->Hme!&;WVJxbL1P(yR_oq0?bz=E_)L()-P=Wyrr%bv$zD3Mt`?7h@hI`WRe(5tUxraoCO)a( z%e!|3(NRSxw`n5*qazK^Bl}T&c@#;tp_smGqvfbLJvqi{gBeU5XD0*$PMc|CVIxMt zNaN{WM!;nsAxX$1k}7<72IAk55lH(QC2|z?=K%g4>A7K7Lc4)==(y|n(xw|mSx-GO zD1SD5x%Q$({fpR^Ffx3cesub@MF9g0J5nxGznJ4AtqwEOIHF^+6z}cJ!71{XMvO4Q z^S2!I?NVBNkz-@4^UxqWhc#cfo=9X@L$#EG4NBQwuHy5q^23w2C+nIGwdD_Sd2TN$ z69)Zac>>4FE+aBG=5tXynS(Jaf_VV*MUxfeu|pAvc?l$EZhoG$&DE;F2n0F6ITX5t zVDM;0$ypq+hgVFMcE;QSMmy6y^MFP<^;1n^)?axZ!+NaBs-Ds(UnnRd<=`f2LInHBo)PHZnsmQ5W9<1tYad}6mw0&;FSAfZ;-6hOQcC#;Ij{cP=8@VF|ag3bu zMS1@K;U2RspNj46qmh~`kWzIg0f^)<9=)r3M+~5VLi8s-m62^8)VhyTe|Y2|5hek_ z^xSwf;*2pRfj-oQe4s1J^&EDkLn6BQcn8WMrHsHx=a1Rux#bXxv4CRSgoJjxCm*we6)>67nV5V2$C98fU_*Rj($5Qf^uvSq^-|kTHzryYn&a_)~%;3OC50b{*+5tXoJ{CWDm1;!nyFuE6