From 3fdebddb7e92063dd97c769a1e94ea0691992043 Mon Sep 17 00:00:00 2001 From: Mauro Mugnaini Date: Fri, 4 Sep 2020 18:30:03 +0200 Subject: [PATCH] Now avatar file format can be forced to be a specific format (default PNG) if needed (default ON) --- .../oidc/lr62/OpenIdConnectAutoLogin.java | 25 +++++++++++++++++- src/test/java/ImageTest.java | 18 +++++++++++++ src/test/resources/steaks.jpg | Bin 0 -> 27736 bytes 3 files changed, 42 insertions(+), 1 deletion(-) create mode 100644 src/test/java/ImageTest.java create mode 100644 src/test/resources/steaks.jpg diff --git a/src/main/java/org/gcube/portal/oidc/lr62/OpenIdConnectAutoLogin.java b/src/main/java/org/gcube/portal/oidc/lr62/OpenIdConnectAutoLogin.java index 93153a2..bea26ba 100644 --- a/src/main/java/org/gcube/portal/oidc/lr62/OpenIdConnectAutoLogin.java +++ b/src/main/java/org/gcube/portal/oidc/lr62/OpenIdConnectAutoLogin.java @@ -1,10 +1,14 @@ package org.gcube.portal.oidc.lr62; +import java.awt.image.BufferedImage; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.util.Arrays; import java.util.Calendar; import java.util.Locale; import java.util.UUID; +import javax.imageio.ImageIO; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -29,6 +33,9 @@ public class OpenIdConnectAutoLogin extends BaseAutoLogin { private static final Log log = LogFactoryUtil.getLog(OpenIdConnectAutoLogin.class); + private static boolean ASSURE_AVATAR_FORMAT = true; + private static String DEFAULT_AVATAR_FORMAT = "png"; + @Override public String[] doLogin(HttpServletRequest request, HttpServletResponse response) throws Exception { if (log.isTraceEnabled() && request.getSession(false) != null) { @@ -119,7 +126,23 @@ public class OpenIdConnectAutoLogin extends BaseAutoLogin { try { byte[] userAvatar = OpenIdConnectRESTHelper.getUserAvatar(configuration.getAvatarURL(), token); - if (userAvatar != null) { + if (userAvatar != null && userAvatar.length > 0) { + if (ASSURE_AVATAR_FORMAT) { + log.debug("Assuring avatar image format as: " + DEFAULT_AVATAR_FORMAT); + log.debug("Reading image stream with length: " + userAvatar.length); + BufferedImage bi = ImageIO.read(new ByteArrayInputStream(userAvatar)); + if (bi != null) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + log.debug("Converting avatar stream image format to: " + DEFAULT_AVATAR_FORMAT); + ImageIO.write(bi, DEFAULT_AVATAR_FORMAT, baos); + baos.flush(); + baos.close(); + log.debug("Reading converted image from the BAOS"); + userAvatar = baos.toByteArray(); + } else { + log.warn("Buffered image read is null!"); + } + } log.debug("Saving the retrieved avatar as user's portrait"); UserLocalServiceUtil.updatePortrait(user.getUserId(), userAvatar); } else { diff --git a/src/test/java/ImageTest.java b/src/test/java/ImageTest.java new file mode 100644 index 0000000..a99afc9 --- /dev/null +++ b/src/test/java/ImageTest.java @@ -0,0 +1,18 @@ + + +import java.awt.image.BufferedImage; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; + +import javax.imageio.ImageIO; + +public class ImageTest { + + public static void main(String[] args) throws FileNotFoundException, IOException { + BufferedImage jpg = ImageIO.read(new FileInputStream(args[0])); + ImageIO.write(jpg, "png", new FileOutputStream(args[1])); + } + +} diff --git a/src/test/resources/steaks.jpg b/src/test/resources/steaks.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3da9778f40830514f081d5d9b360335f189f0ff6 GIT binary patch literal 27736 zcmb@t1#lcek}f=A3oT}{WHB={SoC;)m@d9S=}E?AKRd~;zB~-;au0AOY9Xs;k9 zNT{Z+K?t=500CeDzyK5g4m|@0TLC#aDZsy_`vo8xNV7D5+WNP!|Gogm(8$36So8|~ z>KNGCI|2Y8T0kDw#nJW;Zwlm5^)3GLo_~0Ipn*Vn%pcz5AAJ5_%s=?%zZfM2As}W9 z$n%^0Ctm+Q@&BP02myc@F#b9Gza>W_SD^g>fT$n<@TX7z(fYso>R&Q2bf5`Lz-y8J zFPTj)0Kk3+l*jx_rk?@;Gz9_xm@EI1ea!{{KK}p!8Yc~$?4AFi1Aq-Yj)Dw>89>B+ zvVgru0YU(%zXS&b1&0I&2Zw}#1SAZ6j6a0`75^`N{STu0ON@Vr{h#!w5fEr- zXasl!EO>Ysbf(F;KO1VRIH3kE_207U`;Ljw8e2jBp^8Vuym-TzMl2ZMkF z1%UzO&_9cSU=T2Hh>sNj92f`y6cG$KRzMcH&|+c^zj8t&_zPvnO%$YNp~LPq zu!sih$vdU#yWWooW&f+V@hI~T>>q+(L}^;m6#5Y~&DgRAIb^FtN6r64#vB@c27MlB z9QvbN`v-k}7z2-2g}Gl7hI;sMv_Vp+>hgTMlC{A-_HcmRXG z-_=!?|L8(|j8gEr9$QgL45!3{sXd(}nh|#=o7+frV9VZ+5}9{HPeRk zTlhHhcU8g^t7mcbh?pidPlpL#ZbqP0rOPwC;euBujQ}NRu&QAf5-GH^zHNr6ZsRBj?u$VjEAoYBsxEh{qg*6EJ#=bQd(BEAR2 zQ<<%XlnFrz8NT!Fw|TEZ*g{E%<{@;p3##b{8k4G zl~t^b*QcheBmC+0yQfaSW&plB0JH_KhwTP$KD+do$H;iX8^63Rw@O>K{Tg7Yy;)`V z`W}pzIa#&w6dygzIgwG@Z_TKLWMb{8-dl9K(Z^;39Ql99wM_3I8@f4p&nSU;0fJ)l z;GX9qRCTwSE2!nn3~?7lnL-wL03z_ktmaITQv9dmA8-d;E58+~Jy zPhl?VGdDjwxwf<%7Sjj><~&ahwR!nWAnZ=_Evo^aI7xt&LCDO--}T48^W|N%!90fYl(mLH!#7AK#)lj(I{0 zuLo&6Ma!>Z6R))A2y5kSuc-U@M7zCc-({@eJsna?UOBHdXxNPl8+CJ+6xV>&jT$&2 z+M$reCXd|?I#daa701eyxJ@`UrnMIKi+1-2xneonxDTeXIQ`1>)KiGXil7p$$8s}A zbDK1U+}!~HgKnnz-=f|2&*sZt5Zu3ZOiV4#`H{(;9dCfC_CTrv5NmdF<8|~YT&Rdu9%oa_Wg2Ny*cAyMT+9z?Q$#X;Lcb19;=2%2(dg2%Ky)Tc z3yZo)^%WNK0T0i2|DV!j6xip@`5cEamqgs3qCttfLx2osUv+0~1@Qg^0J!gnlU>g( z{UxNzxFq_F6L6MVo;~I_%jq(kuVHVhReAq7DNvbw&OczN1ncdcybc#s=NrBi+AbxL z0r$t4guwmt=iJsxuh?w$*x^6^6?iTG%u-;zlrmTCZyG{`bI;BQ+iXp{mHMBN&{zr- zR?i?!zK20NcnozVxqGi9K>Yrmbws3AZNZYaOn8tuN#lcAFJWq~{YNKg8``au3Gcha zkMpwFWKHWK_ zhx)7%&*0JG9UYg|n-Epi(T#!NSQV}6I$znO+{Ikj5Ce-Up9qoNvQ16JnRe3mBod+e zlp0C!G>tCBqtO*CjEU4x#@5o^LmWa^k6mUC)wkE}4UbdLr!tRJsk!GT&mFPK1gsIaNF+6=Y>$HY%)T($Qfo^H3!;+urYRKg8l1}aW zDhdbp38cGHrZDya00g-joT#~KBRgrg5&IBxl8FSnquAwq1xNeWI8D-={FCwRO^23a zmN~l(WhNbmXRfiVP$dConIo%01Dj4Sf=&-_;z>cywg48lH#W-S1{kAV?Z*1?$&$iJ zT-DL-H|p|~bW*CwdmDk9$J@M~T`&CSZ4o!z8j`apE-M`#OgwJFKfMhkw?mbKMo|T8 zcgxV`nDx)%5zj8(c{Gq>bU$hLP@QZ9Z^{0IE+FPchAdg-fC2OD3J;g46gO3wqzZypB< zRW6X%&mCfi1BYM)3a zJy+teY{m~&jMWqD_d4aYlqMWhG|>{Fbb-@YG(aKjE{ad+3qk_Tku*<%rp|psi+J?uz8KwQh!YCJBcBjQh;O>KCnpqd^HPc-4Z3_!4Y?EMLInA<}rii*Xg5 z7bwm^CH+0kL}@Xeyj*o%OEiU9=4kV?YX3!9@Z2FSVinAcn;CEVGkk+5MeJIm=LbO1 zVe1QjkF~I$DbN!4K(wNUb8`gZc_R{8gIBWszI#X3RTx{lB)IG0x;vIm_wRA%gQT)n z8mLBgwKJY?c{YlfPzNQS^TluIpY?!WeILHfXB`OTqJjuVZrQwV6)0fb!Yo6xF%5;y z*_EC*gXW9o-YzEXHs=hGq|S9CdnFYmm({bLZ*`L26;LL8z1V)IJZmTD0arkDhyYMf zP!LdX2ngUZ=#Reu0R@18BOxQAK%jo1M<--pVn!n(X5<(6$|5KPTo-);!ayKE2TOFK z1{`X%PF103;HqO!+4G`5o#GNrxlemF-=So=xPY zJZFe1Cu%MEL=f;B;0ZdLS+gcCACjCEcS%L7u;1Q@)ex!SI_|P9{Kb#>bPu+~mG*&548ZEZ8vwpZkSZM|{C)mJH~;f?UiQ&G`; zWB-YQz3sAabMygl7ILRJC%ryBo9T?pLTe#XYx>GKDmZ2^Wb}3_`|GKEc#U<6%-a`z zs2tN)y~5FaK986h;R_de!8miRv@Zv=gT1Rv0nMs$1OLz{guJsyASnkNCl}~L7ndxa zW8nmRgv;DqA&q$lcJ_2aA}C2k(;Zm=KcCr7`H9=@o!K`u+MSg$z8VBMLpHMhSDTn> z`IJQVhKM&?0ay)~**$mVq6B@55{n;}oQ=afGp(sTKL=xGnY`2%PBBwGW zxdp2&jjK8K*TDy!s$Yb`sB8I(sZx1(>ve7i*Q4}7oZ)=ZzN4XZkwG$ZeF z<1SV53Qd0h;v5(msr%C5ZjMyhP((W2IbO+aOl=Zu=zRL%!D4@+DpjzjqKLecof(%` zh9;1Bx~M!ZlHB678|^wRPv|uE^02;od9|n+F)#+U5D&psCV|qK(;TmR@($B#M4t%1 zToo4stN37V2{(mY1k0?$*O&5eJ$ZG@10_Ubuj)e=xH=MjsZ7^mCP`}nbL_MH%R-@W z`>4U87U+lqllDP)Y5jLu*Jxhr0xPfQWLFGp-C`A9pR&K|3$len(pm5c z18bAvJ74ezK#I|GfiKOe^rem0{6wX^y)?%%A_yx{iF-l1;>HM>oJsC>dg{mh-1GSB z29|>hx8#w}2Y_Jf0}vhc#HyBp4%5CqNii|3X4S<=swZ;O)HR;+u=ewse232=V_Cel zp~Xk`)=~wmK1AKiwI(C$JG{)^E+n+FQ;+mFMG|y_ooRb#^6+qt=3j%Z$?=PjXkZ6J zgv5vJYtNGcvx;^ohOB#`$B4=1wO(J07Vvfrd7PHvO_eBB$`V8<8LIR&_0XhP5a{J3 zs?EzQVd#Lm&!wU70^@SeC+xBw`)G1&3$^kCtfRCIq7EEFN|S~?Ej6xwiSZ7=C$!>T zYtrZ@EfuG*%>~naNi1*7R!qDwH({CmOgdJTJVz_Z&AS`?`JR1q#R^&Xu&XhWJTsi5 z_r107P>7-|Y<>H4jDMLuyd$y&*$2SgXy!Vy#dD>sZqi`P;&uExtI6-ef+mF9GtK62 znX$4+CNvJZ6eC9PZj58Khr8$L9@o;S6=(gq&@Vy#yy@_YEzXoj1ot`^k>r#0Q%ECnTIxGMW% z5v!W*QH-x42ybJ5>kJG^z&%eM<1d)~FghEK*coaB#S)oRp8hRQx5sv>e7dxTT@qs=Ne!S^5K-x^FMXeJQo-?YL48vjlPL)GTy({ zrg;cEe*HB=W@kB?rIT5PJW!XznSQ{qP-Q}n5|w|Xp|+B?rg~PbzmuJ`gsu8UFgGqz zZ&Splqi+M8dir0jTckJ)m*^7iPZG5jq>Q(8s~*D=e8&Q&-0>#FJR6wG-#Y71n03Nj zW_AV`EVm5^bkco8)&g~g6L&gfibMxtWoL+PnhN)-21r?6b$P4%tHTB0Fi&#QkO)lZ z{y1+*T$M_$I-)e_J8%%R?Pq_G&q}q8`pxAtV=QOS{yYeM=>ctibC)@7Z^CdcajT|D zJhtw)R)G6D2}>Ck&(}o{6ff$2?eB_qQaC#DTjHAZRI~Q)0T1dY99S_c->?!D^=ddZ zZGc{v@%^4`N6b!R*O-ZqG~BBU^P1CaYxvrtBEFz@O;f>T=qNJkp^=ngK-89u-T<#9 z0e&f1qykjk%oQBIsBF(g34PytCU6ZNYRvuYJ8FB^u~Z|ms=I~ur#17!ku*MsTpTRB zuuK6HJE@MQS@Mibw&xE(Ozb>O*U$)qqSPg7}H|;m!q#W}+*h_2zU3pqefkhcOJeRjrPHa`FurEvmBqq7wz zi-~D{XJ=hwGJaQ-ZaB56u>3X_)KMJY1-&p9v(vJ4!u8Ms^0uDDz60yseE?LknG}!M z*rwc((N&lqm-CV|mkQL9)a|!-SB(Xnu(FCvKzpnOuCV(QlP&HYAaisij)z3=_b_d} ztlfKcIgfD?H6J--=sCORKr zq~4ZR?l3B9*`fRQiR2*=>lI-A3RHn330ewt7X$} zSmE_ZN?@NE*bhb?8W|akYjB<&Xm7!mhgGGLu`}Ny2tXY+SC{FZC><4PP+M|!TGqx? zRhHqo*r)NLpa0DAt*NgY^Ec27yoWn|Nw8z}VAarsUO?63a!xTvPft~KfIZ!;nUzBq z4^HSQXoM-N>bIz0w5^^)-0jq8w4JEPOi!)kSWUq~)t^;Swtr2vDZu1>O^|B$o-4lA za-13}(81OG;cj<(x5$pdu8!VVUbv+F){~t1#RvjR+unW=oz#4(q03HNV=Y4S)M&6? z>qqY7xAF>_J!k1gIK$nVwX|nrue-9gAGAjB?jT&zl{*#>nBolR`mSy@mE1JwNYIQw zU*q-;6bw)kpvr4k6UT*?jpbT2QopwtEnJ)9Cos38?mj48e~&8`9k_imk&1&)0d-NB zGIi6XqT0@9J3DvhQD-U0YN`Qs$T%SZ~ z9_2`-R$v7qJCT%8@$xLwMO8#9L?&(1BzwMFL#B~QN~v2ZSz5M0mc-=Zm<@VC^l`kv z4jMH+YxXO@Nk2R+Rm&-W%o%~L=NA|BKygPwf_`ZLg-@!|G^qmZW zd-DVu0{r=_laYHD7$Z_50b@iEFfedXU?%+^fjkH(5*Q-#7jSw86hZ-cB1Tj}Vtzfl zzu_S;+0F-YpRa(;`k;U-fqhOx6nr2{ggw(y3V#`MDQ!QEhrKBhC#+i*TY6gDwCQQv z?>0l_|3iY0=sURGGKs8|+}b1kPP}%lO&Gy8Fq{1&^w+Plo^brbTD3JFD_qz6&7-Om zSWwPXnFfUy+<{?KTJ_ppL2f*0oeXA+xM5{3Ceeb@SoC0Ck&o`>~FJ+yXmZtMWkydZ|t=oPihfKH(BaPeJ>7m&12GA+WKDdKZsiiqZ^z~eg!l03+o+h|hYf%3NE+2yoITIJ@TlXLcMg!YBPk{g?XXNfLlZ1XV|~GR zcE0L;nn{h?CytKIZNs!Ju^+mferDQ{OTre8@RqLE8+dFSufP|lBws!6o=4T(#P)j~!Rf!55!Wi6$aI?hw<(svpmi&MBJ6TOnWkj$024Z^t=!Wi3HI;F=S0o9Wa6D0TcUp21j21?D7qi~kmvAymsahty)xxqGVU;gp#dlsy zVDtIdb#qPK*puan#?HWv=zt*Fn_wMIG0&dbayWROlTEA6V6|(fCQQ?6+O(-=!qUO!8TN;RKHgr!G3yCfjyN>-? z-0Vw@!GL=iH^d4-Cvl@@W?axjfeWBdgYwY1#^5`{TSY|`Rf=Gx~Nr=1PlZM0uloBZ`KKza{}(yeF07=3<88i@_Ml-^o&e)IpD;C_I~^d zsQUhKHO#p^(_3GA|0Dkd$p>nX!6=5@aIDfHu~?#UN2OC>F<0T9P^Iu!w4PaDbgpd9 zBat}y55a$f`LCi3rmTP4+G2?^!m-LF!?DWg|EcJ|Hu6t%$QynPme$>#XMg9QCa##v zEsbbfd|O|)&h7n;L81%~lh;W(Iom>_^7;i0LqMUoTEnR`WAy!eUny-zJ49h6dsPBw zs|x&qME%)i##s~c+42K0;wy6T(x@lE=tgdOTpHD%z2mut$WJZMupH@M{>GIo=M33z zr+|9mM*g#6JxlZOP$BEVQqMYN&9zvKr!v5fO>d`$%>hO>WX+A*I*)Y(XdPSFdTDS7 zjGU6%aOK=OEKGt%V0h$A_3}%$v5tf6OCy-JLh*bItS7az$yaCcfLbtJ*d`S^gi;pa zi0ig}IOzw$=@y(VeG&C%t8+}7b7fm4$Lt%G5*TOpb;@v*63SAMJMEN;Un3LyL8B~>>WM;ls2V+!#3zDJDMDIYMF68syf>b z!2Ac`TU#!nxO9CZQnwYz5EY-~Zn2fyVa*C>dMp>ZvuKRN`Eird3i+otdU-Pi>%J5Y zLDs}hrXuhUKCY~J(Y@=`mf?BC#S{b^%)$d zJ^LP8*-Ld!XrzrGo0K3*mB$3uB>GyrM7JqEY!>KbwO^q3EO*q~| zmH8Ul7gJh-nIJ`d{|@dM>)udm@c!Dz#B zte8)H|LhRmNd03_LpFQ=&lfpo#1jjxU=m+M02I!npji{DPjDm(87!E$9@cL10kc7a zH4&uePxv(cVyL-8)-e14gL>EO*|2bW?9v}}*m(hY{x{&yG>cH$fd?=M&S7|QYlt;0 z*~FK>;q@Ox-A#@Qnp1EptLlrE-%oqb5N>MYLafvBCBDMMf*%JtjT@-GJ~*~I zoQWA%(ogGOx4E@5FbwbY3hDSeHQiF)N+$czePnrxs^9lWiNpFAZK%0Xi(59Ik-mH4#`X zc9W=ODT7C1V+WY9CKJX$ylLBn!1+(sVblm9G6L2xcGIw=M~+$sa^-1;kE{l8*D`&@ zKYCXs>KqkfGA{Q9eVC5R$5VPO+qscQ-WhHk;jpt&w1<0@TKGkqHj_5MQAv74q4ok;6_`qm(9HO>4%u$MyF~RDDusR_P-95X-+SAru#ab#a&!Fu-XXH3y?1LoWn75kEX@`Xb z=f#U`)AGUV26c&%!sIB^7XRZ187-^GrBw;JN$Q%)ueDUeq|;}8ebcP;Dh@@52A6=d zoB*lWkrR!WZVJuhXq~@PtA?NegXSSlX@@xZ0}xMrrr&}O3`Jd>{8ByuftoqX=3PNG zdD_C*jIf*(5Gth}y??yMj+g4!%{&2bQq0{pSV67Xtvx47WnmY(m$tZf5Pg<@!!@bO ziBYNf6wU;UOCfo0@lmS%8glNj%I6^|v;YjOvLZZ{3xNG^^Y!Zd5@8^44 zEx-D6%z0C@PmAUA7J-vlGCdvo9Hui6M{Tq@)caM*-a2m>`q4ma|jSj`PbM zFp9ej+4SX_FGY_m=E4cX4V6P@a>a;X)58#a1v;4OCgaf4*@3l19+;$z4M|vVa^)`f z5Wj>eI$Thn^&0FFXA=>vx5{;Th=Jd}CELuOUU_}LEeANC&7cNSIto%+hi_7ICu9{Y zRplraj5%0@W!&2~rxi!u9%qxiE%uqBF7M~3mZEhi(=^+fBW>HC35DjnDCH)pn)~UK zm+=Xor!hF_c6mlhZ)wdpSVu; zNf7;g`3hQu@@(=pS~q3fMtYKZTQT#abWMeM(T*UWaxz(=#9Pre;p={6D09}V2A7}6 zL}hWua{PfU4$dO_)hBP|ly~`O!SX@KQtiyql{SGVfwQ6LnXa^Ho7})3=1mDy)vI#m zOt*5=5DhS+X9W3F&muE)h5dOZVQQx>crDUa$+Wb)oyyS<$j0|Bg{*8p43HvF#d8~ME6eo9*E?U0m&mF@Tg4W8`IDK7UEIz$(1A-9S_kZrK% zpJ_y}^kU!#&Gj}=j?>a<0eQi8X62~r{p7B|@d?bj?ZgGck(hTHrQayb2yCic9X1IB z!k5NTqEk+m;-%bSQ(&;wp?p#Y=@1F*g@Lc9e_{`+O<&m=PV{*XYrwbb{pNBOiH;s> zVe2c__A{--%e5QJTMnQ%AqHPto;Bd7uf&6@51?6;@Q1lfh?rVO5zKW|m~Txp`H7GY zKT*&3Edkz49{K~&4-X7&?W4Zw6RIztj1v@;Pl$Sl!y4j)3)T(n$&M+Sqy-&fmvLcq z>S&VdIx+bApb3l*opzmTH$-XtU@(rTm{!K7Y@>zIJa6)@O-;6a^nrR;9iRDR`fMu(g%HOj~|?1sSJEnk^!Q^gt4 zor9qr3lM2@c5w}>=(+E6;Zr(c$O#l-Ohw4o+CTVW&4}b?#w^{xF<$OWxgQx`KF0Bw zenx1R***O0elUBA*v4vS$R4(?u9hriSZ!)W&yMUf^R{KW&NY|NsIOXN@{%;UlLW96eHVoWI(Q1Wa1YnBF9ZAB5YsQpNYXX4y)M`q--8DF_hA7J>Q6pXcpaPP;EvWb1CcC&LfY4Xobq zWXk^%=*YHSdoBJ8MUar;0F<4cQJX!`kpnk&GKYW*!w-P$`*jnh*qucG3HA4c_e>t# z8fUSW7#BTEi)}UOkbrT|MzMWm&SF#Yo=P3Q-;h@-d$9q{c*elLUh~p6`3Fq) zKg0e_ZJ;<0gR|s+)N%Vdvz4`);x7Ewlnh^m*|FJ}w3_m7?fLH%nX0*RX0%OOy=v=m z?c0l;Zne*)8X%uagWUt3-wn{lif8M(X zzyIBDG3#jCzh;BbXTmVOQ8b>RcbSXx4Sr#*9lDW0lE>&B-fObAxFWmtj0i^(=4Twa zpZ2*+kTU;IV@UUY!aA{ThzhY^k;yeTsOh~VGI>fNx(c;_(BCV?5{sCQKJ=(AsrG`liId)S)?Y!y71NbDi6-&SA zk0-IIjf2{-Bq8gXp(du^$>Ww*GpN$9E^wn)e+=()n$YO^*~@!^3FSQ2+W$+PUR!_E z|I3tAj4(xXxAdjcR=!PgmAG++Q({?Q@nN640t?Fnw|eTFxlioYlyk(%UPb{-Y$z)m zxR*qtw4m`=UVBMBg}q>)U>)37e0kiu`7bm+`$9}!+u2!HG^^feumQd8#nbtP=%o4g zKkk3`)WjtO(Tm%8iuJEagHL0Hvaur{BNS5P%B3TkUH>4~*RJrlm$GY@p@_Jd_J1A^ zIxnT6E4(bnkf~0^&3vkA*>TZmm9Wh-70x>UB_*`Dp!lQ6LCwl6qirp%>@}~7^agxC!t}Zy%)r*D~_)%l0(JJQG4sYO2K*JftGhPG9MU@BPkA_ft@ix%QJn{%YDe4${fY!fnq2hq!v9+r+0Uy zx{+QbY0rZKQO*n&FA*%;R%ETQzM;>|F(hrQ_o11?g+jqpoqCfPwLFA^BTWkU?$EoG zr&6#U%pQL@YI}s+jlEz*VOZeVDT9y4yjEI4+h_Lk%*&$(D1Igw zBL4`Q`T{u1V#WC)7X@w4CyduYs_o;{Gu9&XeMuWS~mgd z<+6QKu=bZ6TAFHHsK9!f6n(|Y*aqt3!~2MYgvEi#m0M}Vfe(P#cZVKQh`psBHRM6- z`!~=odkl^}SQd0uW8~~>nk0>;;IneWP4b@)UqG2^>0l!O-F?EpJtbDYS~Z|czQrD1 z+6<=Qxmms8X%7uhh1_v&HxnT=OBolrvISK%C(c(T7ZayP5f$rC=gC`t_w_S1l+M{6 z#~`DB53VNt@h!#H7>No0Mh z_U&ZdhM7oRaL6%sa^(=I#FmB|yoxz4{7Rh5WF)f|`kg;Hrw^a5WPe?|lO1ICuDNax zFi%r%Zw%;lhV=#;6-u;TSIzvXiZck;u7PgPp83Gk1PpA+%&@m0^i=FjXK{WRr+4a| z)#uXdji%d<*#PpYXEc>S+pk?B5Hn*tB@Yp8YsS`TJD_fu9Lw%-yyRr2j5YI_6<&f1 zx@BT3Xum2a^n~hX*UuSanM#se7q_j%nq9va`c;-&Ys<&fu?JzhbZnW01u;0egIm+v z?ap!b*x!i3;o8?Qh#pd5^W*`_F@-N|ZPY)jrjAz--p?-4 z*tK-=GcvccGDc9r&ageLv@uhDOl6;9h*JoWW)^t>6t+aR8udDQWFZeAMB9MP>?EiF zN^MD~wbH#Tc)fj@b1AUs|CH8QaxAj zyA0lcL%$Lgvi6q=IOEvQW$KER<#0`v@O%uWIJu_#OlcNC9m{eBVK&Rm=5^69p0z~q z+-DLxTKsBT!3oN9)pHi9Q~{V=@NJ1^d@z*HU-9`b!V?`zyDlYOALfDiK%b;)k~hD; zxdjUf(L8ulHT`E4(qx!k^Al!kBdh&rC8?&MZ`47SrizOkUqHoWyvUjk&^D-;<`lzL z_k&u|!o5j`mozo~VkpPyf2ra0-OeI}w^6vVHl7aR^kzS>+G-Ocw&xC%wYY}UNHQ&T z)|4{VaWc;Bj|~t|rd5$W8Eo9yjtBF$N!}=3>yr=;%Q?kUA7RX}$l3Vx!D?c1BEcpy zM0Bd9S>bwFP*o78RB9-Pebd-%SF+tbP1;g9fvLU$+5s zBGxI%exHZjx5pwxaNhiCeZlnD%e@z-18YGqvGK<^+>&;MMU`4uCv7X=y<7%|t@F(S z`X`bNE6aiUU*#^O(v+3jl@l{b@t=;22N6$Nlt2TTt{2xrDRnvv85GuM1pyo9%mx*b z?M=Q;Esl8O&jaf0c-EY#T+EO0uH{I!+OcpZX>BW3i88p7*{gzkICILxdA&jY9Xpun zJ5xemH#M~iKIfEA%hbU1?p7?_CV;A4pzWP7sS1hDKD~e%V&XwkN)r{IUo^yNe^co|tmaZOk0dsb)dtERtQwAkc91GMm0D68m4V zASY}x(G@s^6g1#fd^Xn*hMnaka2$}fpW+7bvH?*_jN2IK3nBU*eq*1$o(~cEwIP^1 zK|;l{#rHyjf&A~)m|}=F0~ckNA*#rMk1?k7HhP!*?Vor+hMyW9`0yIYs>CbLYtNNw z$RC&k!cBB906Y~a-J-#KX-g=pKJbIv6LIA&uI@6)(-e`8T)&{0Tf-{xq@n6$zr7)H zJtRG`Jn+HNSX}5@w6#`ajvUC**sb?I5WEmk7|AD9Pk+No6XpSF?`MZvpCd9 zY?iaVeT8J(WUN)B*inH}9c~|Tal@2u^UtDi%XR<9Gw$f% z<5U2Ak93Gj>C#1hQwYRBUoNw5JT3LWxYy*K9jwR|GR-$A(VcG-o*gnI zI?7?%oc${Z6WmKTb*B9k^43@?A(PJ9Uzw9j)l)<%HShXi!qza6VItX3H%DL67P!oM zc$#{4)k6yDqJCiT-mZaF8tf>X$O%b&&u1&i@%RA1Sm>aEmT_J%o^<5OH^6NFq+6gy zvMwub;ztkmhs`jCO#F@_oWCL|kPiuSnp}bD6$cC`AT?GbQTkE&j2=G#YQoO^=9G)x z#)oQ9V}r1AICv!9CNTWE2Hg-$KGWFxt^M6dBvplg5IVE$VI#!|02<#LC3lDl z9`P9;SFGP=EmE1;$X+)?!OkUtSOw7neiPo=IVN+JZ|w|g*?b~K8X--Kw9bJikO^+$ zQO(Y%=QV_c-W&~uVxJc~xriaTDIcFS*l_`+4H(`4G(%Pn&uwVJPuz@0Hb7VKZI}8k zU=$`=`xI_{&tN{oYH$*O*I)>oeD1ZdEXY3d#bow%@1}O%Yx%Zx)z4z#e8f}3lSqOQ zSd>^NU*E2@=z2g!Az_B1c32Zu#be+Z5MFd^Zb`yBmL)S6H=xSC8#SjA&wD-a%~eh)bb zFGVJxVb0Sa-#{bIdrNQm%|g}Q;P>GX@(a;30_#{9{{-qE64Y0g7r6H%6aSZu`o#| z?VR;g<}<_uI~F46s;~%Sthxnov0Nvr=iurujwDY#R`A|AQ(x;!!$>``w-OVRU9^5< zr6CpKTcEtj!&ZA2Ds1BIgPvd)AS@RQmgjd6>CBXUyPE-pmnpV52H3#+$anZr(h(HG z530+jOq03dQeyR+&enGtWN0|~nv9kc2kGdD-L%eYNo5-O*S0d5K>5tj>O!NMNc&*^ zoNr3tcL^jf;u0<$4zN@j%Pb!wV)Z8x(4DIY8b#qCk-xv45euKoPDwSI(|@4D>FmYZn~CfvbzJZ_ex)lNe1K zo(qD4G`Ar=7$Y{F<`%Y@_N7?DzMylUEYxtWoW0$L?%j;afsH7oX{vi4+tm>xG(%v= zL;2%Jk1ca_Iaz(J`u8mqe_c&cJ|st^kI-IrY{yG6QI)20^&oIRP=)4X>VXw-r2+$0 z1iO&B$$HRS(@d_nKWCYl*ZwMQGcfLm8F8I^WBoBTxhP04KmYm>n>YoU;M>87B zT1b(R`l!qGAZ6y?&w!+{ambmEzaB}i)Xi%p~>w*HBhx)vFv5cxvW@!QXyqT~oO3fe!7sJgU_#8A-<7K>-o(wcKNU{5GR zgasL9G$qB-UHW**6A12NI++I5zlpOVDvto8S1=^?Pj811mUicm~Hsq8p3%VAXuChG$ z4xELS%58fq+)rNpe{HyrK7s_?AB=;TlTPGsqO@>$U0|tJE7##-qgo&trE>vkEXDrbz0oS+&>=4!XHd*0{zMb#9wRo$vZJageB3pBY{_u_``~0 zmRFI$!;05M{}JztjNHrz;0A3;jNC?%}(Qe5t%K= za0dtGSpUA;{`X}sM2AW4Z7qVEEbg00_M1uWzWSF*S?-$&;J@5wqRa1b1${2$H!?pn zs5~sPSoA$V+C5q8PN&DeicfoDjpPPLKNI|D}yg~$Oxn3pLmc~!R^#t;l1OSlu zb@(sQJF?6-lRWkq!pSR3K#ez(fHt*&a=^791Mv=np7i_dH_?C2t8Q`ZwZd^0cwQrLHxu*=v$KsdZnKkr&ant= zx5c^|h`*Vved-PY^JnY;TLa4XbrxFkQ9jf2ZzJ>tbg)H~Kwh&q-i#Z9KKP;k*l%99 zdm7&5nxxK^9Dzu8*a8cgisU}*{;VF&;9_4_0aP>zXS;3+qUHw*)G~^jtq6F@`~Wa~ z{-g3{l2f5#8|n`O`~y5qYf7?m{h9!tBxi|mrV|bKM#LZaZhCf&z@A7b{q!WQ$em+a z%h-Z2HyAtsB}U|D4a+wfL_b;T$gjB)gY?+&^wnc2Ic}^z{#U;%9J?E-(vk@a(%8 zpq`j;jN%-2@m5S*2|Z^%cIy~-Or8jdL5E_|)#U3u!xc}Vyd%yR-|F7!m>gsj6 z&gnjVcK6shhxz|)ixHEPMWOFmZ&m?aXI-b&~c#6vO0^(Fe0y+{w8!N zEW(B;$CKxa#19K*C->_x3`d0N+WDpHfDwACM>Sa|N^cXo?H?3caaF3AF$4!`dnS#? zTwsB|5F*Tkt|K%3w{&It8zsD4e#?p_ot2YOD*4+g;?CySk}9{6uUgV=#|-hR0%)Uo zZn7QdN`pa(x%m_4vbqeDW>L0+^d{7H4`DQ7w&iySHfdn<0WAB1HcFCK%?MuFn`B)J zQMBG$gkikv7?8>pP=99LjfYHiDPP(4>BG9zW?rxN4t5}2wdhig*!+J*Kwg+Bd|Gav7g_WF z3Yz~>YvSL1hC2D14$F-zj6cLCAFC|ZpBMkyi)`ugw4Lz5a8CSiCwYspPJz1Sr>SRj z-Xpq?#IRlVtBaqUFJ=SRmn?xCW2yf3;#<`R=_#fwd|RyOFyszLVZ&YOD!X()xhxAk z8`EX6cl~%;fwF^M{lO9x@;n9kt__hQT#7%caDNA>V=!%<3H#cLemKAQM$!};c@-zR zws-5aONWLPggR%nMq%w5?K6Dix`O1COViU6^t74oG;ZQnkw6)28;+)Eu-PD*?dy9Q zEA~!%=IY0vdM8xvvqPvC<#4u_||Vu|edBW;G_ zhy3!2Dx5(W8lvDN=j^ghzrJI<9y$_fVfyh3jarGW3om$@a$76*L^i-rSOWIu_EPk` zsrRLzfrrs}lDI&`cKTBz?WLpM`&^N>K5VG+Dhd6soyO_Oa{NYKOL?N&a5zhplDJNf_RB*V{NY~_p9Y?!;)mHaO!iO>1X`uO0PSLt=y%ci0m z{li!@d}lvQ&tlg8NQm}CP3+w>fr?Y(e{iMO9|f{(c#}e3{o7oLJ&Q+}kr&|3u$iaa zwnPNWcKi#7e4RG&AM|yas$tD>>>J9e^WacmEZ5CVCTqDeHfnn!yGQLViu82?g$2u^ z?E5Ibn?&x?JTCZlvA}nl#)k0o7@5w=gPl^-@Gj&kwocf z;?sq3kF2Sy1(V(f?u0V+--zSY?V1Y`1vFr1Hulu(?@j7fw?HUJofD&AQz4f-Z{hf& zWZ9R?f28lQkecRA_ePH2idm1SXq%8{)p`*FG9B+;y1cC+4Up7tiq~;LpMnG9L?qVa zPe99qukY(0RAvw9Ko(>5)3qjIIW-O~0J6DV&zfe7Fh^UuH`2U1Su(G?{%j5$-Rg0rugHO$1Pjx!ElI@`?@JQ&*^T2{vq z^mYg-grVS^gEcYkQ#I>%sQ|;@8Kgu^&A5VtE|1rc23N-oY`iYc8zB-fzv$yg5-#y43aZNt z66rb;TP>hWW2@Ksz^$A=!2MI86kVg&{aZe`h=dL}&nNBT!V`np7UI=UtbbADhE~bV zEL`0E@Y=zgc~mvy8JGU65KP*F7Sk~Jtukd@l@-{UZ>mbhjiAU3AXc8>4>5tSs(&A= zN?wO;3h$6zzlrH?u=|37*G$~&BJ=)(KsmnPLLV?^N2OY3uGm*UCeG(_hYrZbG zl%xL%3JMp0_wrhXJVx)HZ(PUNw-eO;WHIn_S*UrKw8EX4CXsE^sP`5y2^gwCA!~wT zkc>{ev*3S!_#g-F;rH|d?~Os*HqhBuXJ7+dWv+`AQus$6 zHKGl3n^c3AMVZI%!9Rnj%zo#KUzEWdI_X@E!F^T$v#~agr0Y2EqY6_hkl!Ijvz(xt z#ECP7gy+f!VPb)*iq(fCuF6-#YrEPMUy<{)Uv{?G?7N<7gb|4nX#e~_{0Ft(%;Sbz3mV7@ zW!7En8G`f-kHUFs9QgqoYKa_H3I>Fp&MENiaM*%wm$fI1-p+WA8POVtigIjUPNOuD z$`YUQRlpvvV|BEjK3fC;rKk46JYNQH+6ZP~+ln--0LjyAxPGw>NA7+|tj$yxH}?Go zKeK6uSjRT9mcg%S-lH8vYt`uT02W^7C4tOete!<5_=R>F+%`~V>~mIzu<~&SW{Qvb z(Jm5U3Od||jTDhqwZy+N{N{aB<&C)Bp}b3#?(qXzZyCoq1HU165innXYMEYOZ77NG zlVoH1J|%S?hA%3T+(?F}y4V^kkO+~Uo2SmkBNa8EoGX;LZ-+u&UDrtZ)%$+z{gbU& zy_3UR>Wy}*4Fx8|nvkk5j|wu86&IpTsn3*E0Cp<-B{sz#$T;1e}(Y?jcR>F}oxcZR(_^0i$zlE-?aywCJjH(lfrj@HT!MNx(jfTnkx z&EF}$VpvXDDK^MH9CVjXnRYtEf3-8S;>I-Xr2s};yU(%H96~>UYoh&_CqV`|Z(4M2 zX}3{jnu*;<%qQ@Lx2@o7(N+3Z^o|P*o0#cZeq>j0Kid72b&Ef9KF6G)9FJMvgR8WU z1t&|9WS_B$!XaBn5J!WqYR2}frXblyBpGc@d2GRpdg@ahF5ud*wWG~>&G=s(!J^^e z4#KfMMLqA@$6f=9ozn}Z^|*tj4^dcU!tC3!KYp$5nA(qPZC`y@-GzURRlR(cW#Aq8 zs80w9m=vac2pW_1CJieRkeXB{m8*2kTBt(Sf;nG>Uw#pDJIo3(oiL4($M z;t`wc?6vJNcFFj#e(zS5T?<*_jw(U|3=o^Z1t#tUI2~3U$cksQGOU~mC_Vxk>?eCh z8m~v{)FgqL!Tb1$__q>wA@n7jJjCX&U03=7vf^+^#)vni`erA`Wxu*g`0Kp*-8&ByK$`%C3S zZ;lKcaMmeD9{;_+X+X65UqJuQ9ka-CdUai$qcgL)`}aHb9a29g&=3@q#Rw0SGwOsM z7{3*T3}wrMg!E?0d<0SRAt<}JLV3cqIqr!hy=I7wa%Fy^S3sDT!%5b-6WNZ?HzsVo zzkq>rF_mqyqrDa00TWMh=9b}dAI?UEZ+ob4wH2-$xz4wqzl4gbba+kLs-5EmR>ioe z?X6i0^wR{qv&L1bTS8rd(C${w?Qi&dE(;?()xWqU%aO6z<}z)(=&4Qh8KB|o1@1Vg zG>ovNDqF0F7e(HRKP&|f%zj#_t8~xhPY9KVSAiP^%lF%Lwmo4{ z6|rm@p}lj6TFwzrw?jA%8ZEnmy2++ID?U#~^Tjqw+x%;f;jaPG?xlLUx03VQ_zkhZ z+e`$oPB%p1YblBB2hk7Mb46#^0vxVm!n=I2#73DJ+=$sI+-#6zOK$?qW>rv@9REO4 zI3^|#mf8CzY!zAO^?DIMd>bawIT@x^WDJ!is@a;uRBgJAmKn7USH=mv9QE?D+`iA; z`S}+xh|bWMiMs5`)@V@rdMC2rvM#Sl3n1U%E)o&eeuahmR7*so=bc^o31 z7p`e6MSoOAf-zU7U1@mo{LTQ*pfKpo?I17JYNqU;nozgx1Vmw#izzcD#;v}ORmg5u zMGBHf=aY^jMIlixtdySjT)jqXKC$K`uQA-9c0 z)wn#-EdI~$SI6We1qkvl6 zBZJpsS;aA*4Qer_-REDiHuNJxMKGe~-7oFTZGe}-@5>_tb64oz=zP7H%IMP+z zBG61v*uDK^HBdT~7v(x`_`yf4lM^wuka?B@O;*YfgqoHOi%XTKx}S|#UP7siBPuy^0z0Qa78cIlWX&Z8HM+@M!0=%vSa~pL^~ks3gy>!PmNM?xv>)S?Z;s^3M!i~ zwIzewW#P4H)u-mlWA>~MiDrrQe#dG1ytbNOVVbrMY-_K!-7+ek9qy23m-}d|voO)oIORBYt&Vp?_(mK>lXGL)IA%b5 zd&zNkR_h*4-2HwXP|eA^><$&yLE~C(Lr*M^xXOgSQ>v}}G%^aei^pfQDjOXZ%g|+{2YcXmSRtjI`PW~47O{X?t1{F&3Gs=Ev0M_n;ck>_{#t1$R44_b);Q%;3Ecu)J z0R`9X?rQbLCuBANBA!^S?lJBL9e)8YvOF3o!M0XwgAq9m1Tk74W?>fhJSZ(DNLL_3 z3ta=xW3+LP2}d(l-G5lDe*iY9*A!C5Z*{I6gf(UI{1*^@OrVH5cY_g8x(fSjgNf`; z(l{c9s-3s)`zbM|b(|?ha~0}tCCeqx4crv(J9tZI`-g_8`re&C;ohC4vEtKTfZ_0< z$0|WL2x>+NP`F{cGqu0q8otZg3sSidXSgfm{qrt9glW2uaL+XU1-O3!rv4Ae`4@oy z3#cgs5JvuU9k;7UnU4cD3NmN$SR=KdQMGGCM3H+N5kM^dNtuIo_uY$9on9rFgjz>@ z4i6oBfuSYv3Y%9mTfK$zD{*b?punkS5mf>(RxnaQ#W3tiIz`OPm+^CVc_w$vDrVU4 zLV|w>G~7q{((l!O2V{Ns5Afdsy#Oymksx?3?>961Ou@JF@XT<=WN-a&A}dtQYIVG?aQJ_RH+F}*9zeg zEfvyUWv9mSM!I(f(J$~31IaN$r_RM*Jf1rZ(9|Ej@`FfS)%zH!c0@Ivty}cc08U@H zOLXuu`f!f9qyiD?!{g|9+y||pWU9j^V$Xtz`l91s_&bFYFX4*8l3Lkw%#9x<8WI|@W z4Qep!ek`?@iCXa~>MIxTK}~q-phGu*ZB6tB0d?QY!-$pYQ(|;u@z~X$kwpnpW=!Rw zNWxv5g?E^(cWUBX;~{$)90)yENj1457d7O@jU+y*5bgJFrxTmEY?Q@_6daUh79nJr zIjO@tuYI|0|KMruJUk`ap`osn5UvW3tOgk!GXS}bHLHllNP9#IC%N?UfyIv_i6XYSH^Cy%QKe&T1k2FMX|GT`%!BI~3j7z(1W{Hx*4Ws- zB{R3U{8G--dFei5a!v)-`py#=U$K43Sq|#t+UAd#iuZyD6xzv+E~f<3k!(vW>IB9u z%))VJ0x~!<*|K>S3D_yF+=hHi~Lm zH26&m^LCSF&aKj}KFclSnfpUGV4)c>=HZ@_=nvRUvB?+;x{IKpOxi{Wu?Dpx*As+q zG(Aa?G&U?k^|-y|j7Wood-in1Xd>r4LRIOI3AwWQ6&;cheDOIMZg5{+yAf^m6%e|Yh853Bg1`<(-_{n$!cyM=DeqZLE)bh zExBUBcLGym(u`-#{-ke=ya$SZMwM!g<;1DF5PxIH2i0NQf~42@2$JUaqA3|sM(jh4 zpc#uq-)FK9pN=nnS+#T1&NnIG;q)Ww?=q@ngI(3TRYaQA^gn+lRk3RD!9A?APhA1U zG#peZ11I0g`8#No6TXRHcZ%5Y8rs+p&nuwW6KEC){s?d->Bh+|1#S;EJn!?nIp)F{ zT-~(1d@0Ph^?PFuio()H#@2(V!O6JT2rXVfx*DTG$KVD_p4QV}JQ8xx^J#CwLmPLX zV!<-7#}@@BiYH`YSi^sk})=(yrJ%B^ohR+9C6L9z8&_}VgJ*Hf1puT znH<Po4-gFDYPeXcxnF7?c^AvWuV|W*tgbFV)BSmMH?YQh92{ zAMQ@q0V33P};viaiF+E;X9e&f$6J0D=uqX4V?k5!g^-0$AoJz-?sp}lUb;j9RB+>znnbW!@ zK3+xsV#`ww!CXoFS!O!{4zjlc0}4TMT9>6f`x+!IY+!FZ#CoRbn+K)cBGxG*ydb%9 z1X~~rNlc=7CW6UbSTXtG{Y{uJ3q>~dm}aM-UrNKLTJ%XNZD7kd{Z zD-u-38MF)Z<4%4E2cOz-wS!z^5L!Q1QZ~-7O4SBvb5cQQo>v#pQP`V zPb@V8g04uxWXLU#8Gpk0w zS{KFBZu=@rP3Irwy(xtLY>2~B&lzdsFM*XuEXH38+;Rgc@9wd@zW2!QMT$10`bUh> ztQOE!wgmUxzl60!aYNIKuMH)j%H`?p!r^w1ajaX?_9ofMwbn)b!RcsdXn%%%LG6k9nK4{B@#BX!Kr`RDQCw`*uw*RZWswfO zeY%tV_1&1CcgWsz9pk52W*|vAS9Y&)R!)QkvxrOYI)Qc5Z z=|HS{=HzGfGCr@I$d-$k^Zd~TVHH*pC5Q(p#W&3HHiOR5i)hSJn1O2ems7;dMBmQ2 zO`~v;CGJt=Be{i4efB*L{m@<)sdQD&#pR|*O?aRBN#6vbH{WfdcB)bgCg*ZJZ5vkQ=tvAL(e0Hj6p z=p)dOz^Af|;xFl#o@L-psnI71B-X+EEevIiojdI^(q+&?Y;pL6K>YIkQ}7G?w6} zn{3nXKX@86^(x;?<;mF1$lpHrebRH+fwepp&jF8-K7953Cj3l1a2#!H=^vAC@KXvJ#{&daWyneC@orP>}6Q( z2S)T4OyEY z>>4NiE@pY#PB$^Idy2T((ljVxfkjbrd(03{@(Vxurw^6hZj3g7>Xn`q(IA&#+FF)0 zuGp%Q^nB(G;wHJ`dJH#hLiqVA_t$LuPPd$4%%}>QYmc0mcyWpRvr&Ch=W=lA4LG z5;8KRx_RHTA_w+{{YJ}O?1&wy$cEf?99HE0-dpUs*)~leMh>FMun^>TFXj8(5<|<2 zUHlviXk>t-o`a<-AvE)mEo;M=OFV+tH$otzB+N1oJ<>1JmyOlOleyp`(g=!k`U$f& zGU9=}F7*^WE_qc&(oz*N-b{*3omfj}j)SJenYSZmMM~m0ZXA{st0yvP(e}jvtail} zVn!9L)gDVI7EcobPi;JMw}*xRr%8KlX+B0OxVv3VuIbqy-YQSFW^x#?@cSG-!W-()tJ9&^Ma|>F^BN* z*wI~tyJ+x-5Q4O~-zpg{Ju1GEdtW!-4HTb+-GtrTyp*I;khuQO-h-Ds2tITFZG0hK ziM6Bff6xB^E&ksz|5!jm|K}f16m4e7akAs_Np5q!7HX3jiL~7sS2)3T5O1x)hqYTs z8Ly%2{DJo?&Y%{@0Ryil5yxOlv3Bf`Lwtnd6gFR*E^P-kgDwQ;Tw&JX4|LF zDoC`D+1)nJ=dYoMKb}+kde0ns)qY4^djO)&8&ooU(fF*#>r@u8i-x{R%{?C2tmJRo fOY2stDQdK4ZN4blzJ%X;jHjYaavq+A{$2YYMC*|j literal 0 HcmV?d00001