From 39580438c240078a819265c8f4df214a312e5699 Mon Sep 17 00:00:00 2001 From: verboomp Date: Tue, 20 Jan 2026 15:28:15 +0100 Subject: [PATCH] added security to picture upload resource --- .../core/utils/LoginUtils.java | 116 ++++++++++++++++++ .../rest/CustomerPictureResource.java | 25 +++- ...-foto-documentation-web-1.0.0-SNAPSHOT.war | Bin 24310149 -> 24311554 bytes .../docker/standalone-fotodocumentation.xml | 4 +- ....java => CustomerPictureResourceTest.java} | 18 ++- 5 files changed, 157 insertions(+), 6 deletions(-) create mode 100644 hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/utils/LoginUtils.java rename hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/{CustomerPictureTest.java => CustomerPictureResourceTest.java} (74%) diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/utils/LoginUtils.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/utils/LoginUtils.java new file mode 100644 index 0000000..967a311 --- /dev/null +++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/core/utils/LoginUtils.java @@ -0,0 +1,116 @@ +package marketing.heyday.hartmann.fotodocumentation.core.utils; + +import java.nio.charset.Charset; +import java.security.Principal; + +import java.util.Optional; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wildfly.security.auth.principal.NamePrincipal; +import org.wildfly.security.auth.server.RealmUnavailableException; +import org.wildfly.security.auth.server.SecurityDomain; +import org.wildfly.security.auth.server.SecurityIdentity; +import org.wildfly.security.evidence.PasswordGuessEvidence; + +import jakarta.servlet.http.HttpServletRequest; +import javaslang.Tuple; +import javaslang.Tuple2; + +/** + * + *

Copyright: Copyright (c) 2024

+ *

Company: heyday Marketing GmbH

+ * @author Patrick Verboom + * @version 1.0 + * + * created: 20 Jan 2026 + */ + +public class LoginUtils { + private static final Log LOG = LogFactory.getLog(LoginUtils.class); + private static final int BASIC_HEADER_SIZE = 6; + private static final int USERPASS_LENGTH = 1; + + public Optional authenticate(HttpServletRequest httpServletRequest) { + Tuple2 userPass = extractUsernamePassword(httpServletRequest); + if (userPass._1.isBlank() || userPass._2.isBlank()) { + return Optional.empty(); + } + return authenticate(userPass._1, userPass._2); + } + + public Optional getSecurityToken(HttpServletRequest httpServletRequest) { + Optional headerOpt = extractAuthHeader(httpServletRequest); + if (headerOpt.isPresent() && headerOpt.get().length > 2) { + return Optional.ofNullable(headerOpt.get()[2]); + } + return Optional.empty(); + } + + private Optional authenticate(String username, String password) { + try { + Principal principal = new NamePrincipal(username); + PasswordGuessEvidence evidence = new PasswordGuessEvidence(password.toCharArray()); + + SecurityDomain sd = SecurityDomain.getCurrent(); + return Optional.ofNullable(sd.authenticate(principal, evidence)); + } catch (RealmUnavailableException | SecurityException e) { + LOG.warn("Failed to authenticate user " + e.getMessage(), e); + return Optional.empty(); + } + } + + private Tuple2 extractUsernamePassword(HttpServletRequest httpServletRequest) { + Optional userPassOptional = extractAuthHeader(httpServletRequest); + + if (userPassOptional.isPresent() && userPassOptional.get().length >= USERPASS_LENGTH) { + String[] userpass = userPassOptional.get(); + String username = userpass[0]; + String password = userpass.length > USERPASS_LENGTH ? userpass[1] : ""; + + return Tuple.of(username, password); + } + return Tuple.of("", ""); + } + + private Optional extractAuthHeader(HttpServletRequest httpServletRequest) { + Optional retVal = Optional.empty(); + + String authorization = httpServletRequest.getHeader("Authorization"); + if (authorization != null && StringUtils.length(authorization) > BASIC_HEADER_SIZE) { + authorization = authorization.substring(BASIC_HEADER_SIZE); + String decoded = StringUtils.toEncodedString(Base64.decodeBase64(authorization), Charset.forName("utf-8")); + retVal = Optional.of(decoded.split(":")); + } + return retVal; + } + + /** + * Extract device information from User-Agent header + * + * @param request HTTP servlet request + * @return Device/browser information + */ + public String extractDeviceInfo(HttpServletRequest request) { + String userAgent = request.getHeader("User-Agent"); + return userAgent != null ? userAgent : "Unknown"; + } + + /** + * Extract client IP address, considering proxies + * + * @param request HTTP servlet request + * @return Client IP address + */ + public String extractIpAddress(HttpServletRequest request) { + String xForwardedFor = request.getHeader("X-Forwarded-For"); + if (xForwardedFor != null && !xForwardedFor.isEmpty()) { + // X-Forwarded-For can contain multiple IPs, take the first one + return xForwardedFor.split(",")[0].trim(); + } + return request.getRemoteAddr(); + } +} diff --git a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerPictureResource.java b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerPictureResource.java index 3a01182..4fd6627 100644 --- a/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerPictureResource.java +++ b/hartmann-foto-documentation-app/src/main/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerPictureResource.java @@ -1,18 +1,27 @@ package marketing.heyday.hartmann.fotodocumentation.rest; +import java.util.Optional; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.jboss.resteasy.annotations.GZIP; +import org.wildfly.security.auth.server.SecurityIdentity; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.responses.ApiResponse; import jakarta.ejb.EJB; import jakarta.enterprise.context.RequestScoped; +import jakarta.inject.Inject; +import jakarta.servlet.http.HttpServletRequest; import jakarta.ws.rs.Consumes; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; +import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.core.Response.Status; import marketing.heyday.hartmann.fotodocumentation.core.service.CustomerPictureService; +import marketing.heyday.hartmann.fotodocumentation.core.utils.LoginUtils; import marketing.heyday.hartmann.fotodocumentation.rest.jackson.JsonSchemaValidate; import marketing.heyday.hartmann.fotodocumentation.rest.vo.CustomerPictureValue; @@ -28,18 +37,28 @@ import marketing.heyday.hartmann.fotodocumentation.rest.vo.CustomerPictureValue; @RequestScoped @Path("customer-picture") public class CustomerPictureResource { - + private static final Log LOG = LogFactory.getLog(CustomerPictureResource.class); + @EJB private CustomerPictureService customerPictureService; + @Inject + private LoginUtils loginUtils; + @GZIP @POST @Path("") - //@Authenticate(shouldBeInAllRoles = RightUtils.ADMIN_RIGHT) @Consumes(MediaType.APPLICATION_JSON) @Operation(summary = "Add Customer Image to database") @ApiResponse(responseCode = "200", description = "Add successfull") - public Response doAddCustomerPicture(@JsonSchemaValidate("schema/customer_picture_add.json") CustomerPictureValue customerPictureValue) { + public Response doAddCustomerPicture(@Context HttpServletRequest httpServletRequest, @JsonSchemaValidate("schema/customer_picture_add.json") CustomerPictureValue customerPictureValue) { + Optional identity = loginUtils.authenticate(httpServletRequest); + if (identity.isEmpty()) { + LOG.debug("identity empty login invalid"); + return Response.status(401).build(); + } + + boolean success = customerPictureService.addCustomerPicture(customerPictureValue); return success ? Response.ok().build() : Response.status(Status.BAD_REQUEST).build(); diff --git a/hartmann-foto-documentation-docker/src/main/docker/hartmann-foto-documentation-web-1.0.0-SNAPSHOT.war b/hartmann-foto-documentation-docker/src/main/docker/hartmann-foto-documentation-web-1.0.0-SNAPSHOT.war index 6b218981c7923fe9b28effc17315d256a58f794f..ed3659b079d637edf757341c89f74433f6befcbb 100644 GIT binary patch delta 37254 zcmXWiQ*b41w1DA>ZF6E<6Wg{iv2E_ywr$(CZ95ZdGI4VDf6nQu=UvrReY-BYzV48t zDY(F!DL8mV88C44A3va>e~fxHz$1Zxj(Q~#fGGSo>_C+M8v`I@|BW*cI^bx+0FCkQ z8x5lXQP}RgBvA&Tv5d205&;25^uLJx7xDih@n0nWi`0LS{x35BMHZybj!6z=j4v#e z1sMnh2o(qo2ptFm2ongaEtLg(2&)f|M+rm(9LC6lO}F=GNY5kBTtErL5wOJs&)3yg z2cItwHq%dMzg`=~{NJ^xwrOY7xohnG3P1Jc6t( z`y~6VMaAsoIS&7>tTrpvoFicCu=Sn}QBU&)XJH9FG|htN-M5vkr2&B}zg77Hpd%u^9C|V%xH7I;z;+ba=gMRTs8n z=xM-xdu})!`BdTX@-IV5nYAa&*^Um`dJfh6o0)S{!Dm7i;8HXgXzc5QU$IP^_Gx~z zF+A_%)rV}{5VQ&&#Q+F9hmylw*2CENWbXwV!R%=$`}=C}IEX5_!*7?LB;m+pCuFg^ ze6_KkgJ(dui_FO1ox4QIbnb27+mOmxQfa&l@{*0znUp z?+^hJ1rh@i2a*7i1d;-h29g1i1(E}j2T}l11X2Q022uf11yTc22hsr21kwW12GRl2 z1=0i32QmQq4P*#p1Y`_k0%Qtg24oIo0b~he1!N6m17r(i2V@WA0OSbd1mq0l0^|zh z2ILOp0ptnf1>_Cn1LOtGUl2h0+>;SOm|a2dJ;TtMW`X8_=7AP~7J-(4 zmVs7)R)N-l)`2#FHi5Q)wt;qlc7gVQ_JIz74uOtxDIT>)JK z-2mMJ-2vUVp))-go8-0a0oSB0r3un31+l@4O&8`553yIkj~~Q^X$*WKk^uavR&tuC z3@uF7|GSdNb*86nnE$(JO~;{69X;Fm#dy=jx+ieDoe^6e9$mXrMf@2dF07mRWo%A00Ayi7?$;)v7GGUPQgOWrhR_7yt2-i}MIIXYYy>>s8C8NpJA~yUdZOZf-gE)df(x5{Wfb7g(qG=WjC5$6fHQ2o?+J~?>4b2|7OT^oe!t3T6MdRKB+F?zOg z*She)C%(a}KW{<4=Tw>jIfbA0XBG$q_+NJ;$bCrW#&9Y+Ljc&wZ!GptKde7}3};A= zlHc?CT|K3$KRl1U+(+5dUUqg z-~ID@pe-%Gm|I@KsHXNn*qPtJNcQ$bn_Jl2-@dzeIKL5Fn<|pBN*d0;ucx^?Gr2v# zK>mKKD$AG7GJIo2ydiP^djF1^_&^e+6*0Cx`#%2jGxo8r9)OdSRFP1DkP}uTr`X;7 z1POKs*#Dcsdt_wYxYgZ!`f5UKD_cia3qzyl~y8ib(3iQHAk^ljjP$O3GALK#Xjh~SNl0dV|s#FBd08&JEsAU$gzp3nZAI9Rl^-p~kOE|_& zWNl&=@Rz*s-NVYb)*Np6yhRE*cc&aGzrxId;GB4Osz-R(N6;<`3-=YxX|*>;b7r~l zCPr#8!h8_U#Mti#6^^nXMRGiBM*mgQn)km*sX{|S;k`^eO)Y`@N79|0PMH2$oMPOb z2KWkSbMH6;*mrm$xpdWB0oSob(XY}xaTx(6H7s82_RCu7%~NqV_mdDmG2V%NYJPdh zXyjb~ON@}4+|{pCA+?m)Cp1zuh~$g0z*`zeCw&Du>Mr48TkapL9(QBG7S7k1suNHf zH&S=^*RO+_)|BR^zenS!P!rKQVY1hG0YDxyBAK`z%Obs90|xrP@A|*_+{FdI6?Vo3 zcKCqhlj^xIZR@*3{UW8YhxuN<{1Z(?Yeh1<1Ba zAABEGpvtjB|9M8Fj;Hhf`gi&(B8*6pqF*DRHMdMZwiIf9yZ(2-&+FIyB_w1be6#up z3qN+tj}@JRwOmfr#+qZkodVheE>V#&$}KdVICfm3O@2H&y5vJv!05o~kK%X8SPuo{DF7l`l^1Z$X zGD4jUvoF-sGKJmQwzm@HNrep)>aIv!Jx#4p`e}oys$xk?^2Z-2xe;PrH+>YGWsjPB zPUe53WQ8)03~9@&rL2mC%mC(0I^qu$SyQRtY$&RJ^YE-290w5G>^(>ckv=%db^k*g z9N|zSyMZ>TgD|7QOUSU(@e95uL2jLEkBCw5@A_d>!OlCj&WuD!3AG>IqDz4x$!z{< zx++riL)LfcSNzUtGLKSDYoKbmX8WLVr)z-`q)(k2mh*cZ*t!5lvNC`@BgB3vQQ9+i zEwG9(FBeSLyep76+*66BzEziY4xxN2>o;GKrZLKf89^kw(O8>4Ml{m^$Z6 zdgg@EX_9E(V!`!qIt0MY(-wtFK5Vey9&E_)FqdMC=$r^mY>`+Wd%zJ zSjH+yk#z0Bc)_htNSbu(Z-O-RU+$S9z4wL*DGQK){h*S#hu zN(BZ-NfJaq^$poAq&if4^10|!=cny<3RgSpwFoM!zP--?g5ZO-ssgQzeT5b)yK}nZ zBgBBW#8RsZ1n1>1rPd7)HKTRCuwk*XK(B`Pb=6nFl4a_LKRRHeC}5&`)`%jAr3NZS zNma4Qb2(BSPM82*TR8M13j|h@!7EGpJs0TFHq`r6M9Asb9WG7uhxK8+kU&v6sxuS3 z5M56Gf|+*K{bZ(k#z~T~-Iox=Q=;;J#t(_luIXG}v*iTUT5#7xP`tT*Y=0iHW@N8; zmQiT^+$&jPGjb0~Rnrdd%Y;28LU{hxCwBbed;N%}Rh|P3OiG&C8LGHPhT6g{%E=Yb ze9I>h7Nrqo?+*jiieYd0p(k06@Bf-P^pDSuW$JG;DS?+XV2wL?Mq)aG9kH7ypK`5* z7?+HWe$3oeE=~+m%$Z2cb+cIL=tYS?HU$1fF++u$hh9qEr@2&=@MC-qd;aLxf$V2I#1Z&DzBg&dE z7j6XT5KE><`o3bx#IH6|z5DA197^6j1G;%`h*vC${zFpd~N zrzLS%o20!KtL6+JF2uR)gQ=(BU*}g{U-(?}q+6~*_X~=Uajll>+F?Dy?}HMwi0?Z5 zHF868xv$y$i!^}~?AJVJ8xt#wvyU`q3F` z`l|R{!UYkiLx_YS*aS9!>+I#hIsUBBvuxnlRLj z)J|-~J?N&#%+EefcplOFpsza?DIKv`YN0uY(92txQ`3JLE?A=7dWhF@57N=Q;pf|Hk6R$nxy^-@0B6it*8DRw76R1$EYD#HAW*$_SVp zsL)?j!>#2sS-(0O*jK)3>OYQCMCP0qnu$z(OJ6_QO;FM^ud`@U&+K@vP z{9IiEYJ{a+i0hG2V#e}(c#!fG zwtI2E0SMF=vQhqxY?!*9vQz{vKVYSFKG=7sMEX73CR^EZsh2KAtwtMHatQe@9YM6BM*1=yqpCie9op_5dww0IoT~4}ljlVS1lju^VxnS4GFZ>{B!fa<8Q}oEa`bN= z=Q{vh#`t=c&Su5eN-=9Ivx^(Ua{b?aEzu)(!m*@bVU)Ei5H%XaWx%`)S#l6vONcEC zAw#9ieBx5N@lXm!D@P-G6nawf0Ow7o6|@r!4b9)tPaFgz+L2npfTBf}4?8j<7wG6jW(FAEd$n zR4<_tSocFt?j3s8BxH$|a{wMyVG(Z~{S*Vb8F%~xaAp*h^ zrcmul8IJ09k|JoErPy1&q(MyyF@|Pfg(evkpS|EwmJTQ0~p-mJ?T~X1N*OvY;06eo2{NT zyj+xrWlemU`bO!xwg$dgJB(6P@&+=MB zfZRq+hhdgS`ygzHuKcf?{xbH;R8Ftcke6~P)hmWx+}kjY^e~7LjE80H(PqxA z#H>taCO~b;$WWm4A^;mT!Mx7o)OeFw;3N-(T&>h~m!+Q$50&yG1MWx2Ivy_7<$arR z9-OzNxRA-8g3Nf`s~U0B0w3%X$Ek%->iuIWde$DPnBd^<&&|8`W7aW$N&My*!Jq54 zCtP{T3tRDM20G-v)9!q@N-^cxAJ?lXmfy=Gg#hnf$0P<{Z^WrTTNbPgnPm7@3pqQ= zOE{3+hsvN#Gz9L9=(15kwPtsO)Z zBGx^O)t^(c+`^x<_Z)-_n`@{3(UOCo#shTT;S=lXATq^?RIq2~Mk=nOr(kjq^WBIx z@C=>GT~$ahiOu_}qImh|d$t0#UcE*AQ(+CfTi<`(>ek1fMjJ!cmQUM7pWh6SmejsG z{~ajAl(3LZQj{UlKf&-)P@Hwn@ZZ}-6fPLkH`2JPfEs zm=?+jh)+t;X;_q}t{wcwaw|C3ND33b(~gSr{(k~6#e z`Gs^Ms{Nf5=HYUehxwW5<#&+e_Y{EHeg!$3g}-E?zRG`~TbAvTlzj9d>#RYLI8s`{q6RUZ0-Qa|Q}E)+ie|_2liAY0 za$S-->C2GkvI4)3vQ0_02@Q)DTTIOMdC?mkIuoVM6t;53xT6+37V6G*@=gp{-q^Ma zm+*2Qk#)j8^C3LinVClVhMfSoW=}(0?~Yluk9dNxApF7E9;P8&=ES;QJ0PJupNOCr z48_w~F}fM-^LElN@Um`6NGCid9n8M^%||?m!bc9~5Xn-|U9pPPcWa0zBkS!aE%y4f z=&*FkN2|Yv;C}{u94VmS)BKc@$e0{+a0g%hIwkp)L3zWqZ4Baki3zdXvJ%WJc8@q9R<7#|pJtJIWj{P8P$`zjePxD>(+P|4>@7>{po z@v(_n&8kq3N}3&6Fre3+yD_k=FCLMa%vTw6Ft&Ct_eC^pxSAM5KU0xt--elRKH=T4 zP_wy!VrK4SBfhYgSnIlB%q-y#mbz>n|pi*=ilD7ew0h{>|f((4u zf&`nB5LMnc%8Www;0bMLP;sNHDsg2`z7$~DF!qAJQG>O!d%O<#9VL0{7CcyoP~pju zp*md@*Q(D`$&B${fpi=hsBX3p1PMD2W{(fAwS@usk-xWbuZo>5c|ebn9RF)PZ+%IE zTM3~3%{;4vTx21Z1tz#oKeQ0LF+?Ih&Vx3^a}>23ee?P@Xd7Z{3Vv2LQAFpz6`5dA z<#_|fhF~Y^w_^xcanh|lN*So1x~$bzGY+**Yz$sEfge)~$}MqDfKqWS-?8bDzQbO3 z3L9os?=ktYilI+{wY=`&@ef>HmbcZauSyOIbRP_ax54!qVWPo3hIaNMf*wOwQfInW zZ--5SJB0CG4r8tTb31=6^zdHoQka*6gvqNiUceGN~a4onf)FMWTcfldIm8G zg%~d#u$)bBgx5uv3#njwKzL1Rv3bA}X`$il>~?b9{m-*PfpN@&4{}4$F+(qO`MeS0 z+^LRGRPb3bPx8uQOh0*UYE!my1s`|l{UzQk68kOsnqfd8x}#LqC4>E{PP7xuRe1#d zD8@$n74{P_PjyqSwQv&3AJg}!jg!XGlXQG_K>C%0yzm%nmP9*D(3+7tlH@BR%S@(- z=U$OpXCmh1;mp%RdM;*q!@80g`1CZt@`wzNma}Ks=wlDNr`5NxJJ_&zoGx{!!a4k= zY1K(OW~l!a+Tm52&#K~$(&d`F(t0xJFx)!#M6(1yp?HF-#cQyppgH%*Q9}(x$h;+I ziatdA)TvCA)OmVZ8ldh`Fl|ax55>G+sT-vcS)P>`KQ>#CVHq2V@*_1;iF^Y1y;fmA9c}OT2Sb7i55K4|(>%CGE_`oW zy^kFq2+%6ATbtsm$r^Z2CH8}n(?_Dy>ud!TMwYfTLXHc981`{FklS9fN|m`}IxGLU z_<DbA-xo9!oT+01;9~;tRSA3XVkd23J zC&%Akj~BKM!g8!VotAmITvWL^byE|Gy53;BnGiP1;7e{zB9}8&9=FSTKWyD z_mobPV`1;a6gS~mbuL{W8xefvQs|yt&c{iaJqJ(mX6}e-$Db0%J;bNeXLOA$B6106 z?nV18P=9W60y4cUo}WjA-BcT;ODWRj?-``X*9$9!x|>Nlh_eb+;a`>45KJhqm9u%< zPWFPBDYlVfrr66e$*neki_GgGj{XB|tF`U8v!f52H%ayPRZbVSUEXA;^Tlo>FUxJ& z>KRNPky2-OY|nc8CK;_f{m~6zzN9y@U~^LOJGw6@z-up7uSJfWZcNQnsGsen zC7ihG7mKE|QLF3inq)lf0l@~Tg2N{-t6hFy`TSo7=G&gmdpO>jzdD|2*firJGS?(*vR;I=TMEaCN@{*xxYG1H7?~@$bW95|lR}b&0N`t?;6$^8y zXrNznkyACFtJDmX`p~R~ce1sWE9=g07!31Mp6S34rf=FcI6$HlMG)mOm5bC5S#EV# zMzl8TR4}rvHAb7yz7ovhS~d)X+RqZ0wU^E+nz#5lA59V(a}bcGd0lJ+g4}!2&r#11 z5U=8=#9)R9N~rFgyP%8t?C!Ob5a|C%szoTSrQY!T%wQ6w;nAtxTDi?06R@GI_TU)@}<>Ipj4c@IICQ4XdA+0P=eJoP%5{>YKgdI z{y~H0!DaWY=QlVTa49{9m>|ocJ?^@K$ z;=vKnKl2^oM?$HO+c>`7DZ%bCKz$ozjVFO-haeWq{i}C;$NuzBXP2H?!G$EWIMqC< zV~f0FLOa3vmikhcmQcu~9yL+GExv98t(n*9&!@wBDEI_@B|q1q6#S%fDO@K$@q^+E zqIw!x09r;ij4^&OfYWka5?2C$bK4>oc>-LwUM;tMy>=YcXzW!oLxy<>u}M@oR(Fq?(AI}sq zR2KaE-|@PmT9ff%IkB?LH=lJ0t(Y!3PiG!Zx`BgF(l1e>;0d^d|69l zNiou5v2VRZwtPU0%qAvHLsQN=X2-InS+q>>j3wFdGLL+x`Sc+aQ}`zUz9%7ypwpUsgDi8)b?uO->^hXq*p` zTb=i)bq0SV;!j=DC27y9>cTCVd0X}T0sLi`$3mou1znA2rU9XX6EdQL7tt)`pSNq+O{yTisz@#qXWm_AZ3Qrgax531|Z_j z)D^NG?~!VR62jW{xek59BU$I`8HB^c7S?JGzrx*4f)M%uCi{nC7)fPt#$oDe5oZ6R^m`qZ zwb*Tn7|Ll>OCpSy1Fmuh*M;SqJ?6k9n;dRDh!yMX@Fyl1T*k_eIsGUkQS;A@=pBo```M)B(w-KT2xh2bZn_( zC+a+f7s%qclm?sT(y*HjZMjGtb~s66#{$+~XHQH!Rl-%6;$ol~IP>)zOe)qN;AeC#r7GY`ozu6| z5w#HRNOKq@d%G*zKVCW-<)Ev2dvFysbtROJJCvZLaF?a%$-3bC3qah4#8bhcrid74 zrNg+Qr9o<&lVr%7#;#iPD~We{K`q?nHQeWnP;IXNBk2z^C7%?D3U-iX@npR@gK0wVo$gG{4A-FoUb42u!pJ30oJ7s!NX^ed8@1Nv-oJY_F690lI zv=oIkw-)w4k@UVH%>e9=KhQb-0qjL|EHf-BjLOl@)2}RB@Lb-Mg^aT?e%sUw^3l0h z{rE!0VaJtnM1;A*w8rqE#}gPMzB*a_;WN-%G-}v!PIc~e4Zx3@e*F})CdGIX>-6?< zM`&U*uf-0+3azcqvCB}Ik|^AIZ@_Av0QqUKh$#>NGN}PQu@B%7VDR?!*GQ+c4R{7y zIYpqoW#+lXm<;bD$m*N-A+ZWM$Nr5lpm(P9A6_}N;N-*N{B@LtfQKl zmX}Pe9)w3JX&Qu}DTYuSEFqcl26-8|!(cXM1#c$iDZx%pv3BGhT$ZOeY)@783R(W( zh5})!wfu;a$R9vmuD+aC7ioCb9dL&$-mV4a`;39IR|nAB?>^W?xc87~J_|bIg7I3? zCb#?%q}IRhOE&Z%2^|bqaPWFQ+2b~ycQks0dglCME#oZD{GHJ56=shuV(-&L3DHw! z-vQf{_h|{sAY*8<9BaSJamWlX8K236WRLa94iqb zV6z5epawvLccaC!ACMOkbq6y&TP{>mNoEL5NsP*wzb-&lM|F*=Yw;d1`6G<@Z!om! zY!&p8N0nVI{*Lck=cB1F;QK}J+|c+)X~T}%lX@bj@*ex3kDQa2{BHkPc!r(sATCL| z41)3I82ILSC)wAV)}K6GbrSC9WWq_8Vxx3%Z3H;VWStIWvyE5+ok~HA;Y-CvF3yWh zM&r6h$oxs2OU42QbrgIF)w4viTE=4hFV|1lT>z+vxUz||y9u{Zvg zX(a&Ons;&DH$oTEe3uQwQ2XRj8F25+S^qFQM4M76ha!O{)1JAeHN7{LC8Pf$Zf0w# zoJwf_nF|3!#()q+yLXr7joL{5SwNvB)s;i>bb=qX*}xf;O1^8M)m`2Dt=ut{*~jEH z1ACU%)b_KEF+XW#%?D=XYZXDi(4O;P7X@HWF-O(ywq@4S8I*D#GpKxmr2Dqj&1i)7 zaEh+c#7F$)DjPXbzM9fy6PqsM^4^&}gi>(qvXvr5unh;I_!nITG^x!g63I6?PoFyl z44?jjJZ&_Gwv!i~HQ~IhEBO5TrADakGyM7Wc5sC7uL29&$2*IP>ldSCNjFVVc@Y57 zT?XtuBODf<14)WJqUlX@J@6pxYy2~jO0fZTmS4KE!-*f%hd|bFzp;I#h60Ez-)3{W}ID4ZHz?;1R2C)ZSG$|ZOQaK}D7!*UY zM%i|13=uJ`_On*|BxW8RsULMs+X0YaD_<^c%UOI{7J-sseNV-*b3Q(lxrK=5NO;dF zkaDFdoAOGDCO>O3D+1^GRxD&y&@sPKNS@|UY~J=a8?VHfHj+piW=K20teg#d?fp41 zt9Z37l4enzrhVPtlqzpVdHNGRhju1tA(aZl3h(+ZOe2j=qJ((_lGZjE!xUg&*ebXL zTIL46)sUFejQZBp4cP9;6~=cwcj!nWOLRUH1Uk{kIi>$T!v$v+${yn+_B z6{1ZMn$Qo$xv=_+xiWZ18XJy-ieo?E>b|j<$~|dNW155Rrgh%PGW^;WxY;%=%`H1* z#wV0!&3u&n3iKo}l=dx8(qI8OB6q@H?AOVrSZ(!1)4R1Hw+tWX+&ko5#Re%TdX)0k zF1fOb=g*>oRWiKuQL{$VrDNw2V8kJGFE%4mI1zG6 z4ZGL|hVe(l^ChmpW-ZWndtZGS4&<8A>vCN?;@2Oi@my0;l8TFzWIF(mkMT(XpY_L| z&-4EV>PBGuDVr8&UnhrOQ&4lS&3eMF%Fi-NSToUoC77*dYC&@jP`Yi->w$>>ebh5E zbS)U&#v}bjBKtuO`LM-WP;#NX??CMDY*cE|@Q}iL_F=1PnD9E8cg(7v!HMVjX-U2I z9#Uz*F3hyd5A{huy)p)Pf1qhAF=>|-5i~i|ym-WZQk5#l0zlA=wVCELmyoZ|)NLGc zWvrp&YN3Z$hDR_M%T-FtF4WFgKH-idoUY`G3VA5;f_LIZ6omepMan0Y#U3$ES;O)i zj`M{k6QX9#3P{k}9L}>X8(h|#+dn^r>0HZ=LP^w8x<<=hym)4QoQogH|nP|j>kq=_6pDWPYPXj~Au!>v`+zP@E3lO=av*Sm?Oj1SAAhvG?! zOH!)M7P9v4xqbZ|^Q3m~zTbb=-i1*Z)Iv~2!w{onL#;%)Alc=a7xYFBdxNzlk8K6$E=+ z6uwXnUcJp?#c53Ngmniz*CYvV!HdJ|0Mgq;5`!9ctsxm#APJdnj3uL!DMC2grpOU6t5#=wJEL)qAbpsA7D! zSaL&;_gU}sQ=UnI8UH>MiihJ46ba_~OXKH}aFH{$%qmSqZYG>1a7``O!nS=-y*%Oz zNv(vuM@wQ9uo?DPx84@LrlqvXwxW#pP0hPh}8E z8~WfE9YiCcAWd^99}mnVQBPVH#5thw(ghjV*4` z8K=_i_3r@uaXfMVAo1|kM6fB@-$nQ9lDhc_>-k0DqB;&x#yOHU|%Z$R>k zIve-00*1W)HVu$A6!Ml`NE!lvD#-#i?tz3Y>s#3%j_7kK?s32kSx|o{vu%gPY}V?n z^dn1#AF>8^hz$&O84SnihOG{{2lkg|e)9y!UaQs)!YjfHm3sDGdU&9stzAHT@>2tid#0ALeu40)t5(lSd=&^>~ zLf*@#^M711S|iln3cbIJQ|&|e^ZGN5!Usv>u49X-JJ`T`5wWfQLJGP{0`S~lu38H{ z6w~5es}X!u#diC{_;EosD8H5Ga4gU8BB7nn?o`sA>7FHf`1Zo~%zHr9Qn16R5oZ(3 zmyZ(`8|3LOA;(DD?u5lpuy}=DWIBU>jOYseCd#L-7m(6;*rT2L5^IBN>~oERas1>; z(&d!LxB!Tu_l7!tIA!3)0>F87h{93v+SmNOdv{V`sSrx%5Qe(GVFtYE!sE4t6TkkR z$Qh1zSNKXDDTVm$@@_qnACVDXADzDjyhF)HC7>W((y0{h*p7$lM7_JD-C)ve z69t7;rY({c!Tcqn4QHyhf*rPpsiGsYo^s3J@cvlt`1^sO`>Eb+3Ru`Jt0wJGi#w9} z-DHErw;h7Ei}r^yXw3l3TVEqckmy|1p_*d2TH8m64gm918o^dP zH=`DwFB5S4Jg(Q60~;1vEpFh}VF?qs*rL=O5r)C-peld}DikJwz_Lu!(ePdlLxOl& zC@oAJvml!S1K5w=1C#_4#{q^$;9@=Bxp1rA(So_03jBFJcjU2}yN{Fyst@CPO8lUU z|BfeA=tfP59(AYdH@4%aI3mQ_#r$RV68_OXu@L~47#ts9%UEd2EZ-B!cIeU9f)`lVPlWW zGU(^`QZMAQT%!)CHIviEOG=<_M55%g#0*wjV>WP+kQ@_V`U3n?XUA5S}rz zmdv{E%AM=<0ECfFwf{w{Y%k&U1WPmyM3>7~usnwv+Mmz3EnAt`x3N6O8rr|kATOW) zne{@1xBrC+UDm={@$hX4|AYC3m1bZRI(3y%3&8bUl_n}k#2-LIWt$<`u3SMx z9zd|QoE_uJUg6#^%*vz+L&YK-$5epht;Q)v$>z=Txcgkowta5-NpCF#3`N4%tY?{!c6~joj8c1szbp71w9JJo~@>AV;Q_*{ztY{^mq( zRG!q|PL@@an)bN#-+?9T63d#D9$yH`H^B{nhnf>*cI` zlEAI6cwwBOR~Ak6jed~DKEM~XAy)A&&3Bhe69SA%YFUr=r~;Aa5D+ zC1?71xyqqRbX|m+V|9+-3D7$-%2lK;)B{*nW8Pgcr2BL`=pmFfcYUm7&6P>}q!o0q zwH0K6fBYKxLp%EqfkNm$BEn`jSt4(yDE4$B`!UJ(g(TS?5R>$;jKL+crsdCGWVey5_=(8@p_03f&ytAp>jUHZ7B#zZ*gV zQx-8%irz;T*d6V9e!$}ay-*NHp$sT+GdG%d=-^&&O~W@aND<>iJC0w0vOGRv-jy)K z;`v;@#NzpV{ff!O!#iG8J{)cI8SzhVx_xUMIh8=hGCC_R#<6)E#9TpHTx5__-+YyX zqb*U=^v}MGb(VFYxsEoIkwmavC5V@>9)a zBdTU`Le1uy(S|bL_lABmycg6_$Jj-d{jmN*_I*DnL=|zyMO*S`y5rK{?ka8L(h2J| z0Vj}vy>XN>=AaFEv_~xr0{^JEAwFszoJMhd==#>kzU$8iW04Y~rwUmdqI)dWP*Zw& z%T?P$h}txOgvqYfuB>oT##(gl{z6BzU6l#Lu_f%}na&3V{xxWp!}s{!LQa;{ zv?i(>#shzrQHieGh8)0fZXY@Xz4`CZDPO&FOfWx@z8)oSC}=d2>NO!rS^4d8mf`fl z2$??cc0|Z|I#5Z$M=ZJV!?TjfM#T}J92y2#8V^AU zDDgy=wLG1_`#>V?9CFIRAW3gBB*O{<%?`brH_6UCy+dTe9=R27>;3gu2^zd+rx}BS zhJtj0P%MhO!H(2P^Qw>g?j_1(T)$cdz8H`G2$IDozNie<&h(YNUz(BoB*Z9ZfFF8z z@YjaW-6^9vYXAUsFXCv^bf_0%-JB?AJ&E(A9en|fC`bYaQ)Toi66K^me)obK4MH>m zUmE|~KLQ*L&DWH&bV6D$sjD$o6?!`};`C|?`Pt(MoI0;x`I4-Tb9I!W8@URZ^c$TC z5MV>W;~836%{S=Q>+1g62}ZP=Zfgjy83tNip`yI@^9(TfKzQfzHz|Apz zyzC5)%b~?;ncf9%TRD1$%e9&wWb~)>1DigJS6w? zn;oSxl{PM;O7_Z}S~=|CLDKA3tJLzmsvT68;7jipjXfz7f8UWN1Tc{G=#B|%jUFOl zpYMI*eFzeM(QT?MSci|#gv-LF++GC=!wf$B$v#i4%6D>^Lmpp!yrX3zGu@ zv%3Xpm4Y!I0_7X@=R=7sY znbYbsCs7YQ0B;Zj>-Gv@?py*G(}>30eV1kn10E|Bvt*^XCi_ipwrokMP1NnT z#3a)2$GeqPjI{b{iUtbA$|NuEacN#PZviTVV*e$j2b4+rJ?f9thIp^z2C){WGYp#d zf5b4=-AQp}p#zoB+$?E6erexKX|F}i2#HTjWp%Xz9w z>4nc#==1?kzQr7=GQ>{O1dSec#^MB3SGXsbzwY|l=uc!%5Fj9Hh(A3W^tVdz|MpK7 zYK;2&mUfmdbk2@82T5D<0St)4Ipg|{e=)>qVd>|V@I3Ez@%0{kz;$3g}g2%!>J99k7I3f7)7S zB?LMBNnP3krn;1>(PS;kR^W3xmrT=$X*cRZG73jm@OiD7QTIx^Bh?|8PpMu_hv0)u zOueCJTzlZc@#RG6Qg(#D>eBRKo*HGaG|I@t8KBW!s`n0Tyk=LAUs|SFh3&RWk$H)b z1Ykzdj4?40#R*1&n-sjDCEa$Sf3E5k_h%Ng5}^|jCmK<)SDzta&)`hUNVuNUaPm$O z6w{C!4{Y5hB&|c8(i|*#Yr{nvd8)ec0-i`ceFM6T^R|Ca(XW|2EIL>(*0$>4U5mex zXegQAe`7z>(z_9^vc~Oy+ovc}B43 zGQZpj^$C_VS+`8uhN2r60@z|JdBia9G+dKW2 zk2tT3pz`8y-{eDECXo50f3W3NqRd0~o$?bsDC!>jn(V$uCUQci5 z^uXp%_4FWYi!){>WvWYt(0`k`JiTl^+H`)r{CIe@{|-#Cc%F*%iOOX(NJI_$ha?5AQ_nh2|IMCpEdvxWfb#H+2kv4h}5;m}y4aTk!?it;&6 z>L%-^?kux|3!=GFF83kM{Ib3Z*bfVR4-y-v^n`a~Y`e*in*vg%vv#^~=DW1kYaIr; zW2T`A*)VcAR)_sIT{76zI}Bkgp|tR?R<7^iRx3GVI|+#$HT zySoJ^Xn^1n+}%Am1b26LcYWFW$P2mm-~YS&<_s8Xtg)c#t2tM9bzHp&3=)#BS@g!M99bMWNnfA*)h+$mZSKToU&Pq%+? zUWCNOQ~!SH>6EdFrF2xCn@a&dyifp(HA-x=SI8FQvQ<#)oS+U(f2fBmIZW~ zISt<{0ki!vr~OKrTJ5Y}9dVcT5SJJ1WvsR-lQ?Z3P4hE%Bezk2j%XW*U8k3{^_Gru zoDBwff6X(NE!Fk-?`pPqI_|LN(C7xPop$e7wL26dMS$L;j_U8wHFBYGy$Tga-q=zI zXu17vCl1S)m8hbysligIy>?O`u$Bt9cAf3#Z?g}si}O!M@2Q0LnuN~7wwz?@%Y zc-~-<;QL1Cbe}kN6ygMva^8SiJyK<_W4E$1OI&8OX;Jf!wDNLNzb3yQ3yS4m#&nea z&g}meebK+N7XBG}SNO-r|8xSX_X@}=IIr9g)V;Mp*W?ouMHzqr(=!V*AK>3ocNJN3Xn zePs1{@j7+^csw^iK`l^3kdq5E4_dI}{mv4rk*)6IuDORN=#-#`xq=ropn5n4HKiNq zR}dQa0rR1HDG4E+f6L(A*L63ma4zk5e~oxneGli}ndg!U?i0+q-2FNtW)=3>AljOM zQ+H=&cHp3s`$#d=ahL-R9rkQa81u7yIS z-4H#arb{nxRvH}8YZ$Gt8pn@Z+#3EYFvX61pS4i1dN@l|Y{NpqEOpsi5Y8iQe|fAX zXd^BV*u0<)q}@YkDfLy6Eu>}0c(*xnNbrPlt>cXBu)AjFmYxmG3cEFevl?(+$ma_5 zky)9D;|bkhupO7uS<;@?_3yC zDPrqq0(VPGK09(6~Bt9 zH2Y+@7fGYU{Yfj(8x@#cr0qjmuxmo5b^Ip9dXLJxKz>j%MVNJBT%Bs?LTT3^OLc52 zhYv7=9QG1D^fJi!^9HW>f7;e^-TTZ7QZUGd%(M2LcCfR^Xt3ewNkTaf)Ohk|6``W- zn5-{k;HUx(w{)bi;?Yf^FyuB$QyJMH^G#`4)KJ`L#B1f`1BJ(xhWYOA23Wam_=)NtSbq*ZubFYENwJLvp)gQQ zW2TnF@$^qs{2)qZl}s8mjo{!bRJ`9Q zX7UbM?(M)ke+E{0WvV@AEq?qa_>b#ArA3fCz|^g#BkepA6*0O>74G56So|UtMaNKc zbby1KgbZULWP2(!NNeJn#QkR|w5Um#TB(rmn&ywF63++yHU(TtZfV{JKis13F)DK& zl1I1e^mfIARWWJb`atCPDT0MHY(%&lO{2+FdHFB`|v;_Wh=@5M|8LDm?=(4&td zvj3Pwu6tiR-LXbLYeSOsTXsQmN1=am9^mS<$KQesnv8~HUD z7GRZie-WUQEs%qOCW0IRr2;*DmE2flBx-~81tcIT2URQw7mxL!Z{a_aerQ9T@D?L& zjc_>!Y$F%~Q+L{s^ptL--+Q1~XS;*r%UH+%V|ig-3;enS3II^>m*=^ED}nxB%gdid z^lujxxn`LzdK8`$WQj~^Oavlq`ZaiR0ZItfe|MkB54>Zw)$>2mkjUhEqah;!LrdPJ4!fb;%5gKl#ews&)iW3?(EN( zgy9A*hF_q15b;Z{44Gvoe0dBnnWh_QZVVd?FD0`{ovs{ILr*Q29^!O_Hpth=9BZ<3 zf5_xFrRMvh)_u<;T&OCN8Ag#NXHEHRV0oWQfpXI2v(Kx%C#{v#=V?-O&|$MHTniew znLptkdp?9BB9f?jSZ8Duo=u+_cSSNRo^$9{o^*6qZbFHfYA+XV=T}DE%qdY;qG7A@ zrHo~a*T>&IP867@L&gfGf^2RT4B~Y5f5jgQ90N*)4+A3VUhpPDU(iTPKGG3#y9+vcOuL-nu|+d732y+8t17h>`4)t z3(jG&Vim20w?}x7Lb&2v-XUhJBpEwDdNThWH^&a=(5EVdZGb z3&&jFL1aOpd}K_2QbQ18(3hA@f2J;xHv71CiNG*Gvs?z`Sv&tPSW6Zq1DriI_DZ=d z(w>vuAl7n)J?Wz;nj1LZUG{}-QD-qkE|)J2FIo()f1(MiDZJ`Q zSLQiSq%vv>^b{XAA9=4tB(^CM>bq=PP|zTY%greoKBe_IC1Jc}dR0GN9Q)1sf)st5-*02AAqITe5qPU8N;;Eutt zb(Jw*t~m;%9-HC&aq-G1M&{7neLR`w1&C?{zmuF6M}LjLHZ63mogi=DhcjRU?gXeq zMxk0a|GPnh=%Zu!&;kg|q;3-7M`iUaCBcXd#QF2=Vu5~RA*e29e;VWFhA5y_x@}(H z$7qkFu_nC2jVHw3*Ihm|eHkPvy~v4)&Sx?=RXKuB8?qR!RboQS%%Go7H@IyvciEu; zi$d-J5W|`ZL6$ST{CTKf>JAlC0|Wq2_?O$`zjdhp zk2xau$LkyK)vEfae}FxU`a+9TLOs*d+e_iR*$-FQ(PL<>iMJ$0SH7UJPkib zOKXH@*K^fvd2sQy`5Nt`%o9mC6bLhjlVX;HZeKWqN%uq$e+w#hYGSmwN=DIgja0oL z0fH6Iau7nD8N^{h5banRL#o<-GRoKZO9}&CRx5Vv-ingBoZ|%wuB1`1K^D!)I(_lQ z=*mI2{h_{*;#0l-p(Jq%gc#r;BPnswwe`Dj21!&AYO1uOl3!@1SP%W(kApdaGtyVXgFzMACwIIPuya zK^IPu?m4;`7=if1${>y+S<7w()E0^j@OcS7aG2y=9)diNeGYkc6%!Qd1H?foSRHc% zoC7$bm$Uylz*bXGhJY@flfVZZF>{;$!976V z*)1l8VyY2w(5L|=gYy4Peoy`sT|A| z*BmUnsfmo*@M{OgG*EV4RGzTylX6M6;h3$^G@krEJozmLyF{(1x9`jjc9WBK9n<$Y z1=#RDZ%ZhBw8?%YDu|x2!T~pSKujVSL{FtDGE?190TYyjifA&@OSmUqU5Qodke;FI zf0!}WX?J!xYB6?sxGj#v~Y;xT8>d(cvaX__RxzU@Bkc*;2+$dN_>A~L#o*jQdT z>lM~8;F~si&YZ4fQL+?J{ti&4bxP&GpY)E!q;8L`we4tezFz#B2^3tjh`n=rf4_V5 z_*quFb}v<{y&{G-3vb>DaL=}cg6?7khY_arie4M{Ebl~98=zwgTU$+3c#YFo=Eq!3 z4$b%xC+YADj{#YQ>tH1khOb(*VdGU?3-w^)jow}cFDuh>x`Snwy*9@OEtiWGEjA3a zMt-p~H!G@c`?u7yAt~8%nY0R~f4)mbcpB!OGNF^%1Ugk4qi}fb%GLEPIOei>(6o=8UJVOLf2O1kIH%N} zJZs|YYatw~5NI(Qp0BQI|K?LeG18GBNu-Ey<+aCDg5t~EZRNrGmBwLW-ZYzXm~jL9 zYrCY9BNJX1_e%^)>uOcbW`tqV^*$xw<$rOZgca3y92!HUn(Mye6&@)ia=uwM1q&CgD zCl?S?q&*9FVD(F+Iu(NP39J(MHm4Rw+m@oTqOuE4xGC_%qR2XP(SzEQx!kscgfm?L zgHe@F*!8b&hLG^kPpHAx?;bo3pj>Zm$M9Smi+0iq0fW!kzgn4Ie?7T{`&g_^-%{OC zG8?t7CAmLhwVk*v2BV*4fxj}h`P#@I);By5P+BY0<`L%TiFMVp9PQSxMf%8Xvv`89 zZj*u@bJv61Elt<>l^P+^u-Q54!Agp9m%nRs9Z%2_)^SGlyicz`CGmEpp-Q}mccIAH zq>*H&{Y-#;47A$Ef8XXvq3&D{mU8GH+MpZV@WbNqqsqFF^uTTl3{&lHH%^xqwBC;- znk4|}7O)3mVC2lTYxj0Y`DchAJfraLc3cBoHw-mnUom(%12U`P#eg9Z_}{@RZo{ z3c^Q&a8WNH;bcXVYYd7uL#zNEyAA`$&0k=WD5Yf-TUZQHT#V69`&9B-ifqM=@qW!) z#&$ML{Ms2%Qx-7QYxcSd!i1)+`l>u3=rN=`;VzvztUN!Y9K0Om>>A~~woSv64sn%^ z6-N6d9h8oLe;3T`8m9vmX=x1C|8}4ia)mBz_yo_lnX;m8IAWraLES5Ptry~?^BL3y z_S*u&lvcb3=7&wk1Ef+O!4C-#<{K~Z8W3!uOvfMd!RC~))w{`b`aULGWaSv}b!*>P z&~<-17s-CWKeM@i!sUY!4UzZR*oD7y(9>Np>{%9gfBr`lj$tD`;S3xAfDP?;#^C?O zr2R_(PFc^=>0eJu%FFhPLMSh+l{9@y=6z;JI0BNHxpfoDAQJa>;+f)-@~Jg~T#X+w z6Kh*^S>k8JiifsvT~TQFVDOCXJAltVz?i5=Y)A?BqBp7@j~{sMdhXgB`@HZxV7Je@ zDtDmdf6<^=qR8nNv~GYe;hvqL-*T;gFX;Q=z82i3ZjxwScVqmaH#{&jLb3w04hZiU zdOOx#2j}K4b8$Bs$`zxDPm;uALJ|m(vdj~+DLN$1gJ3y=SeX%F++kHgocQLB01;-J z7)`Dp80j!g0gX;kXl8NY)CgPYcnU8j_M=B|e{)VL-_U%)A$&sX(1kUUqi_zNR%PW! z;UIx1swz!M8nOZWh7?Erqc)@L%=LIO;9=#jtyTs-cLx`$OWzWz3KRy)78-(FK9$An z6Lv)nj|k^xF1s^19$)idpKgM=9bYzlBlJKS7!h_~o{{0Lu!EMSY`9}t_fK5UhjwH@ zf19m7p;|9=KJ*C6xHoQz{hAtYha_bYwLmbeRl6Dd&MGFMg^QksjE8q_GrD}Wy36n2 z@k>xXdIIP{J8tGf)orTiREva=;j08w{(j#SA}o|Apl|G4ef>8(m*)e>K78)%frxZth^}Mn|+XM%B5n^KR|{l+5}~ zhbM~0lk;nZEE?52ML<(rE!RIq*i`h`9y8aFL&o8UPf& zHS~0?yzge?ls_Tsy2K^{ZsW!Yl}7Z4=2K+EQklazV;`wJ@48rixk3(PTMmzc%Z;O6IrPDT?_7Xm(gJFmixs{eth!FwG$@ zg^9nJZs)mA497+!@Awknq>a)u1f%89xHkX2{aVx3it!AH_dDRIESU9{f4g=vOiK*3 zb~=b=yI1x#1us*n@&MS5tET0oQCQxn<)qoeePbbh7g3Qqrp||+Z{3`D8&nT2wP_LK z3XT;v`@I0B6YG?i7CU2=Yb_Hcs~c4xcD5sw1nQys+ilVnEBI@)vbv zfhqR7mt~s2|2#$@_PK5@fBr;@^?ShgA$AY2oO~D4Q%}DY<;AE8?JGd{<-YU7*;*5% z5fQW2{-Kfd+SzrTS9Oo)>rs3kAhGpF<*7{GATZbnQ~f>ibJQ}8CEC5o#u$3fpgg@v z*5^f->rcM-Xw2CpLCUaJV;H0ZOB!fx;v2%1@w*o8(H`DOi*;>Ve|It~41QG=UMDG$ zr5*wg52gfO`P40#lV`xPLs0u5>4X^SH2Jys5%jtwpHh^X9e!iQJ#3PWHJ(7O!7{dx|t$X z#u^7BvIy!2jr!s_`PDx7#+-gPPBq+Pxg4hw6lmHssoeH(h}tz z6kChR$h;#=n{hiXWXz@!1AJM^9_GM6%nYOZd0hxKQ>oB{e-S7?<|Ia0ph6sJ4Uo`- zA{wuM3gNh%Rs?8r06MCo`C}LZjM{eps=xw1_W7&aEq5Dl0~8#O+Lh~3NPHU=pYI219}VX6^p?8_x6 zA$wi^ab49ef66sp^8TNExZVJg9k~x-(pC&{Ia96H$zSuv^e{Dg0cd?(*Q zv#&9c(%^;|;8-8Fn-IepUMf9)E%9m2P3B>g&5Gyh zyK;**^h0MAVE6^M(=lSn&bB-qJ8xs#FGr6r|zAN-G@t! zxmri}f7d^!77M+QSVRD^0!2~pA8f#Mp{J*pTINw%6Whdo7gW^hy+CoHY8nl2m*5Z` zpvUVVF`M70^!6d-i4A`@mmZz8f3)PixI{PMyeSbth7oxhgF%uTkV#w!chVH!w27KX zvOh-|oR>YQq)q+-fJ((Nco26*s<{(70nyz^e*(S3BPIm9+?X((_R=rpQHFceD}D3e zrTGS{Ry$B#UbbXWKLl5O*95*c}S_D$Q3u_?e$$8aT zV0|{%)k&XiXD_-eDqlXFOgGYY9Q_p8espfU($1y%K?Y>#RgY0awu;%eJrPZ<9BgxP zf4?@jxe7{TQwvs0sLecmu~RDb-p}tyy4I9ah<15qnQ{-}^$6T^*Q$axLt6%1r(cBY z7j$ZBtf1+R8vJa{R+)sDg>L~LOvMVa^_uW_%;~e0(vmSk^x;jHg--Wvqri5oJebxY z^YX0Sd2@U?TR$b4;yl3~xw#tFy@N>=e~eF8C;rI6?YD8p%}YpfaJEXkEOvU{p@Ycv zEm9Dkwrq3RWY69AWaQSnuaFbRn9p);h;!ssiVyFT@HBtSkxj$)}or5BTJR~xmYQ0k4a|2rfR#vMNy#ff5*{t z(0h)6%{!#9ocm%4>Tx!iRr{Jr--m>~sP%qH$I4F_T0>AJhg-h#0HVae5~Qa;}XrUTKW4Pz(Xfi8~<&eO~x zZ!MT7hURB79oMKY+HYBSW|xfZe}G=xEP}CAr}ntGG{1uWu{i8T^oC}F0s!d#Wv%)D zG%)q&;vj8fZRTiW|3l)JbwP379)%5s=Yn;PnRTvLcP4Va<)aZnK!6?-ZA=yh{kGkG zAenUiQ8W*c6Y({B8Op1WD?uUm7VsT;XmL8jnlGcIQBfYr^7h^j$Jy%ke|YKxfM(|d z!Lvt`NhiPuh5=_28ovgc$#!RNr9hglw^lbXuxhlImac}~4G0rYkFrkiE~rqtlB5LP zbJ6b5Rlj75YQji_%dPDoa1>W?^ui$MGL9}dKA1i{8VOF6-A^tk_Av*6ZnmRb#s~Ih zsExll7QE3sX96kK4u?kXe_ba7j!EKUkfuIqt%`TB9s~Vi@vh4mJK{RA48zr|U-bIX zRU5`O(g-~@OW<;h_IR&TV{9m{c78zKSaLbGjeP8ubQVPmW3t9Rw~v0oP_H}~VbT(5 zj@@dExEV$vInCFd;pCd)tQmqq(;niiO41Uj!^q0fS=8xGy=|Yle`cv&=>x`j{f39i zP$m4V8!h>m_Z1{q z9BEvXAs2jI>2w&8E}|N-JD(iCFrWyy&LBuI4Jm$Ex7M(<6dTl-ZA6R=gEzdhC$(b8 z?T#5t$)UWSYK2$tf00>;moRLxwmcH=(^WXEEFbJ7u`1C_HK`mkvver^&Nphi3H`Vb z86HVzd_W|fttHw_;a*NdO^+j$D_JriK)H-ujcP-s6BQU{LAp#)U|A49What6-WO_& zBa|4me?6xWV$wm;TH`^+e}FfTWz_@2cy&__S|UYl zo47WLma_Vt&!~8xxjti35E0*m`a*7yEit&((K4A;&SClncxqlS^OJjfr-H<4bCsY`cpXg4JixxpP0=`d*7HFFE_G+pix*>Jo&huf)b zUmMdLquHP3k35UpaWd7w%flB98w6kF81XVnPglO?xL9D^K7g(M`4HCwJdT3%W4~tp zm$71nzcVHO)x3z`*4EO@;Lkq@+E^Q#nef}1{cF>9f2cgAjPe5K4-!-fRjNKFQIfHg z8d5jI8M3Ad%EkVrqtaZ%Lu_Oy;QLk%2btblZHDSt} z5^<+Ilv3I}lOWtL?EUcuY7O4MJ$c zbS}8A%5nLsQ@d~0aVoO`rO*aZFgOMUHLi0ge+#+(L36fuLDK~KG$)VB(&qbOT;`BE zHko4qBi5AaijBLRn$RY4t*CSo_DL}Ny`&t#z%ZAmr3Dxi zG#c+T?X7SF^%XSWWj4O}%G$F>5C-+U4ta{^giVw;I)#EaHYv7s>BbwX*1NVJ2W7OF zf7a%dQ_IdAR;I<2pjWZ`%fhA(>tPVVh}Huuj5D}^8Kikclh0y|9HZAytY8Ov4{Tg= zgzJZ|3x%npm1OkE*&E_WE+I4-^YVyY)F(ILVtHH%Ml-{5xBYDoYrJ zCZjD!@aP#wSAWNVwL{9rH~wh_bWS;Mf4BUZtiHH+{Wf;=g15^O_bag%&!|B!vyk%9 zmhQP&Tus=s7(sW=Ql%_V_8m18xL?L*iL{z+<6O~li7+C+XzDD5sTaS~TrW-!krqqw zP{M0EZ)%+{#HPJ((R|Q}4X-fy&hm)}r0^8m3f#7OO+14Ng`pf{edd?>06QFMVmi{lmw@je=(&`bmlDL0NgUc@r%k1_b4%58T#Waj8RS?qXi?g zlVBovVJ!)XzjTDhg%$w1f>~$kCjlro9l^u*TGa)3B=02x7?gsZGyrNrDUdfRKQ|a^xiW@af2KTW!dS6Y zt>EIbOGFTSkul5<%bYlYKZ=wh#EW1T6OSc!pMom5$7`j?Rp#94$Qpy)FR(^i;)bfXPUd7HBzYY5Lu9|UznuhYL?faXW<(4 z>O(efAU0xxf+}bG%BB?_e`be&-UojBS{M56wk5O}w2`EK?eU!@8w4=m^bHq33j(PR z3-~8_8}Yz>Xy=%h;E!-Hy{q!cuxn6l0A16Dw~~gYGCmSlv}2LNMA_$KcMgW>B=07# zP9#`^?b22n6##XCPA#LI&-bE-HB30)@V$#d(k&Xq6Z+z}k>tz2F24Y0%>%h%2A2cbw zWSu2eVO^V<$E7oVsZ ztT$SiqoZtQI7y&Qe?`fMjsfZuSV9(++geVle&E~%Tp$(5FVFAAGeA&8qz7y>W z!%s?8R#fZ=kYqt%JS=xL0~1mkWaKbUf96w@q?C3s{n$pK|0Thn^8dzXE9+UB8UFdX zypgS?+uQQS+AoJP$owdMuU%;IWlGklpe=;ti!%)ma+2m>f4Zk~vgEAW%NSma3<2TpRi^ixH*rBZ04j)3SMk}WCCk##6z zj1@4=n}7?5e`(Zb)>AGmTBY``v3rcd0^CM%0)d`5^uS1zO8c9J#jySC4zKdkXDyGP(n&F$8`H=T4nl`-hp<-US6iKutBAMC>V`C3LN;fe_RG}mxNL-&U6}LpF8wGg3`}=cop++m1!_;4@f)_5+WtvEppDy^Hzg2|LBTE*ms@htu)+jh0Y+&*kyK z>8sg1`r|j1U4a0ZI{Da4<0yDp)nYu72~@h)nw_Wqr>+`cn90TN0uct>>!o6P6#Kzl zJ8DzGeK>ws4Thm*B13pR zugP(?Ju9;n%IEr^6vJ(q4Lj(1vmCETF5nraG*tR9s$h^OPQM0OGd5=Zb7ISnVx@|d z%Rt0VaXa#J&4eXF_RK@XtF)B`}d+gh07T+69uqy?nBub*9_|Z+@Y!uf7S&R#+}f~0098B{AC%s-2Y}o zOZ<3I__OuMKgaez9}ohgC1twk5rTZsB{Eu|1Oy-m5yGHYw*X42Adtoc;)1MIr6)6; ze-69J?I^d+so4R71*8zOpeZZQ?(iQ|g8T5l+MEIa9eET`EaiWZo!__IifY7?-;Sbi zp)g8%)lb7+$dTf3*s2+RN`>B)B~L=zSo*Y2Vjxo}D+2$$GFT~aC%||MJ0>8?AChdO zE4g!jLs5S5t7k{KV!>$tml9iByLs()f1U(Mi&?0MbehWmn;OKOGn?aLxA0CmMPr%# zrP)9{3~dy0l#vC=l#sdaz{28jGkjvRSZRtt?&Fh!o{NyEGV#IPU!vw9-P)dbnYq7O zXtq|p$6h9Y;?%*SeuLXFGL$xQaL_X`60k9JlQ+`)x96Ewhg8Mcb@S#^#ZVPN z0{TAl@P4nN<>S~uRc?O?Eiv>VKn{R_NYxQcGcfhhNr{OG$&Ux4lpM3^E188}>t!xG zjmAVoe@Va-7!VtdtyVwfj3qYbiSjfW7YP9$=WNAUQa8m!nuIHxQi4opAN zHdss~GFtY9qz;N4SrQx18|RFMlZ9vQhf|F8O7~%xLe*c7#Nas|3AuBte+O^3jQ1PH zd`es=E^#zuw8-^0?UsO*=1i_MhZ9|4;MW?G;1YS4hPs4F`_4nRvjTjW%-)#OSY%NK z)DGKvwn9V{!et9`J5`8r!fLUXS$5VKcad4%k7j+c^^zp&0jHU)B_b5qTR0_TS&Q>T zB#dA!Q7vlZYb$iFjb9IQq^E$Et)RX2O>2C9Z4Ejs;#DRnMDSIbo| zS)y0EK}Aqi6ng>GpQ0HTI|Wf%WVl)+YQ28r7x5!aPFBn)DXdBg zKRis~gIT9^wO59}(8}Mj>;@_49nn+&Ye>;@47Bg zI2Z!NgNN-KZK4NBCI*3k>vj2-cNsc>HAk z%<0T?$nhGRSdh#SW|O!J&dF`8j>e;X$hgFDW+=r)PX>{4&6(*?3Q?Y_m zQ^ck#^u1>ACkFLODA)iR(aO5fUhpWz${Bd#2uoJ=nGCX(@PVBLwH830#3_c{7=>ZA zo`kB?FOkgDe;tem`ZMe%9O)JbP=hu5snth?HOSwaJi;tFi^zF1yTFFCI`ZdidOo$E zgkGVINx!h~@7OALacqb0nvsN^5$-{)G9GWxvzT(in8jB7q*O~Z%NoMx zF^)L$2zy0EmUqlDl3(K)?3o?c9-W6oGxP&nF~ntIe~QG++%-&SmFMdFu&m^7KHqVY zHhy6+!mF5YjEaRc@yjkT$idyHE2NeuQGmU3_w)~f=4?a6N2#IqWK*)Hlua>dxOe0& z33xG9g7ple#G&kaAZUYKEnDYu^n}1iE1`y3rKPy|wq%?ZT`}yvks?XD3&~vnkv!d8 z0AMwDf3x`*l3*>b0|!z2@D8~AFmeXJ2av*P)fI_oqlTw(vY zm*1u&DmB~5C`pX*GFcxX+xufEpP~^%s`pey+abfaNRSL_Z57{@{$h ze@>*gBSvM?H*{jzR%Km`j=*+?&FPK&O}HS!)ssHq`&djBX{I)ES%z_3iH~UCX_28) zJ_@~IO3TKrYV(fU+*fRDCN*CVagDB1e+59JyUX~)vtYxk?hmrNBLpuPK3VIsPEVLG zsniW76Wl1-`zF$T$9+}SoO&M)*yQufYbc8{hQvE>+@5kNMP4K-O1W?1;HlPidR7ZI zeI$h>i;!)ePo19pB_LS73oQ)ItcR6c`|&>^zo>P6+q+YF!j2Ud&tummiOsu!f9))i zRzLczWYCmt&!(Pi2}Qhg_l(c^g8VA1&tRio!O}98#Mme-ei=$B^P*b_=>=^zyyQJ~GEz68nSspdU&Kns(-O*tVjtK-d*;D}_+fo6h;Rk|i5sRV*F zmLeoClt5W%Oi~;2UTU}ca^*2}e`f*$1y&+r$~32@ukA^VaZG!EaN^FkF># zcpC1T;|cJtvnL6b-6LGU)*}e@iwOk6D+3yBLT-L_PrF0#AlwEfF$)$kM+y9>w5`1b z;aFVYgyu*)V~6Up!0nwUf5ah)zWv1rM;oU=D>o})gj~In5uydsd9Vdkz8(bn+ERJz zTz*qa!n4hu;slM~rx-cYz2`Wg>=3O~4ij_I8mjSH1&wlf=(s_ZC&_`^zRpK(;48Je z*LZzSo$yAwSRZWg@~OYW{eqJA!#w*I8N-24?6RMS4I*G*lE$35f5E*czBY{MH^z{r z9=sI%Yp@3ADVk1bwZa_g-4j`FmML2jB?_({-pQnjjXu~EF%D}_og`-YY&!#kw)e{o z(w`ye2Ch=h!mH4T%56n=8UQ=Z=yzK1hMNGnT|tAo^_^IRO$?LYF0Eh zxRG!iJ+{*WDCuUDe`$~F$c^Xm;kG7Z-WkD>RY8VMX=&0fD+N7o);Y1RtDPsi4Zc8A zC?%Gry(;L|OrP#M@1|Ccq%r3{$8T4lGcu-28)0u72G)D!D^CqTG!t^pD^sYn5RBqS*(i;iPJZRce^Fw{Cgs+#juY{;73Sd` zBZuS{1r4T)pt0&|v7;mx7dMNU>4||U9#oq_-mjkdg1PTR69j}6m^ks7(%U^(Rr~dG za33KNu59vrL~A@t+~5~+jySlT))z^gt1`_yOO5>lK%yiZsWE8CPq<%7*ps&$TXaSy zY9*XKmON}?f1o3#MOWN0o{r;uaA>KJihH~EYs{J%78GqDo)UtSx%XcJ9HFHwE@)Yi zplys6&R7j_n_nnHKnNQITg$*R95nsaM-Dtg&&2PvCcQB)fWVci!oSv@7&cSi!rS_n zWVreFDN7)`6n5diJIC^_4*+5sOO7Ab?U^hn^lrO^e^S=zN^4gtDeb&mLbNTU6=mV8 z*TX#NgR*ofaq~rKH^bFiBl|=I7K~c54ZtcB z7`zJ!9^9wS9pL$H*R>syZ=dJFfL$@*^&o<6!Gg8e8BN!o%+2DQ3RFfxbs7Kti${NA z+G=UbKin_U7+h4+6<`_Tk$Jw;g%r;^lFDCQekKuj<@Xc#QQlvX^Sxs^Z{od#97e=!x3JJf#$D6)k%mdMR~6A z4krT3CHxnYA~T}CQ(Cg)UUa#4-@MGU6H^@Tuel}YYzrmpH>yIc;~osKzMjCQEAiId za%$r?Mvg`~GCy~qK8+ha^%y-lf8h^5ohG;0g1)+8Nj@I<6{Oa$?E8^yXM&Y^`s<(nhzY!?G5+ zmc}b|UVrzY`~kw8x6GUp{wph$u>qTQY;a5ar?jQgCs#L*z8x7Ol!4V3e-qx1DWMnL z_EG2w+BA*LA%GnHb|EuauGG(~7>Y*9;=KA(X+EQE9QS*lae_F9vWEGVvSV<+snqH8 zVEg5zNAW{*2fweC;Gaf?D7}Jc{5+ju-or~cyh4|@a|3F|7;u9cbHeF@{9(0bKNLi} zTY;|OlT*Ahc+X|0`8OPge{WGt!M+mZF@V;%TV;il1q1qS%0XKo33V6!#F$v|qFXh5 z?o;?Yw5OjFxjU#fPA(I}2Ln|G>|2MvEnsC1Y!hElXStV~L?D-ALhHlq5vDEu*x2D`n8) zre)m3v_I8Xt4b@~n>t!7C52MB6NO5*WKCjb&iC`U-QTb4^?JX3KF>MxJm>kG=RCt7 zGZ7EWd%5dh)O6Xmlv43&={JRuz%?N&OlfGW9#2fK1p^@rl-gVI%CmZ$`?NKX7=U329bGv?-%W;I~H-~ zwhg;=w8ygQdyyRdJjs7gMt2TwdMnAfnDFV+&zbtanzo--zZ*oHytvQy@VRi;y}6r4 z2+wZK+})TfKKty3`^zP9ix;^>xV}3Y7+~^7CoaB!hUF3&CqSj({@BU!ha{0R#};Y} zlG|2Mk2Y94uFm*j$MIAr1M3m~o8QJHOxj>F+aQChn*4P{kjAWER)&&Mzn|FL^yNv& zjkX=1YcC(pTb=vKIA#68%)*wtYqZ8kKNRV#9urpi)Xg?K?1cDK%#nyXo~_f8ZK&jV za|$PhiXoLiwyElh!IF zOj+HdTs<9O+p4p{wW?(Wzus^>&LtY7+;_077uCgt%GE5UK6Go@Gp|1C(a+Y@zR2r^ zT}7$+Ke+91ZCR2kW3k1R(%AEn4)9$yqvlSrD19c{9%57x*sNXeYD+oroT8qWSYGZM za9+GcI&o~E=N+4C)66yGVWaAP`Xl&R?lLQu^~{Erq)Q1W`UNbT4`0T;WE$@2({3_3 zF^V8QIcixl;a5Mdu&M4cyE@D6FnO-mE3^9InKeT`r-fT)s+xz_i^~(F^VOesS|9N| zp?LaCX13+GUk}HRf4n9hv7Zl{Rv{)>xGXw5j3-_1KvyeUa^u11n?b7+=*X?LEwn=+zzz4_?8 zcllJXY?R{7ld01Z>uz^-iOs_25nbh*3D#6{y9$v?3^@KrrKh=5o7ls=3S#IL*BMT~ zI5B$n%#$ygB;t1X9D~o-nbY?;Hav-~l{>eX-&M=JR%B2%!s*Ty682Tj9tt{ z{@o@fbU<9YSXq$DYa*(YovBJ@uz|_pyh_ygO7wLut{146%Edizrry#?QW@M(&Ey!j z82!#W#w@-f&vAQh)P0^G81# zd|sZ|+1wn=NVYeKUCf)(BjqMp;*e>K>Zo2L?cgkWMrLpLsNzKJy-KUQ%*mHu?dzo)LF8@6v5=cC=BdXB7$Edc~u9-lg|5%2K2-`TW?G+2SZ9K8i1!GsPha z@?LEDZ^i@n!bg&d;u6K>5KBesWqvLHO5WP*SLC7ROKnIm!-=>IaG4~X!+ib18 z&^3%X;uX4T|Eha}uAG#}%m$-m)7Q$@{`$s0>)8#S;)90n@}*&?B10lyYE2#x@88x} zW^b|;J*wr`UR^iPIceF)GUi%a#_|ry*NpCdSFX~6p1Gv80`T8WJ*8UG`ZR z(5_WJqswonO%H7_V~hB$;zPZX+r4nclj^MJ^75>&YZH4{7tO2TH-Lc^6iD4eqr(p z=Y44vW|pFR-AbvQVvPS`==CC*^1;(8RLs3qQE*8RZg|@y>hMPTrfeYmBicE)DYlZW z_#{48#$5SPzV8ClzixhnyzImQ#`&<=-z{`KHMCS=Hc?}sE*14sInCpPItI|gBt_kJ z^t8FHsb0Ii$E+eiuBUvLJ@PugYoCa@v+L%e8{rCgke`+C>yd3cE5YOCA6ZflA;}QDsThjKqw2{^J2dfDIS{#()W63YY;C z01jXdZ~+Uz60icS0UKZJxI41UcIF-J)3Re!z0Z znvBK6a=~)N;$ykNpvCUw3q#5JsM#dFK57nmU^6Xv?oM{yMyEgGQ8=2dBR|FZ?i-%&Kla|Y_KL`*}@rdcBJQANw@505)_IRh82!A7i%6? z1lD}4NUQ}|QCJJHqOoGIVzCxs#bL!`EyhZ~T7vZp)>5oxSj(|iV2Q92u~w3Fw`>(z z$EcKTL>00m(gz1>FO$eb93(>!gM%grcsS5)N+PG=z!zGKkqFXL$p3v3X-e%+Cr~Qf zZ#|R>xdr-Q9ztqs65oFE(psZP6ax>S9@655kPhf8oTY)z!|gDobSg-c<|HI1qR+3A zNL#92RYQ8#S(}Uc;r`jO4w>i@$f6^ObZ14FK^Oy}fHIt*i_UumlU!5=xh<6sxwm&P zX@Jx|LC(Ly(IqDN{j@=}C@6qb(WP_=V$>)ic0DihcI&+b>s1JX2Y+P5{&R)!J1?z? zql;Dvg2_ebG4!Ey}ySW{XKz)Ct*mv=C-*N~IY? z1t8)hRhWw@HTQ}B@Z9u}C*=C5yal&XXV}t`uwp%=fRs-upZFnuE1p$awV%|<`LO}Y zg4B%?PRo`)2`#opJ&@W`yy@BaW%lS8)J+35bwOXOOG&xJ(QY`5Mh^FV@R9V}h+a6C z{%2p0?sqprr*OYCb6<}c`uYy~;B;@`MLL#l7d;~hLW@NZhW{$aRJ-eF?3*NV8Wrep z9bec4v;k6EDz~W`oq}izmE2q{jcR*8;qU%X(Qp+`OBzr;L=K$G8+nnV+dVlO)8PM_ z69nP?ul_lfjc5~GWdJ$`>wzUb$5H=&(R?}8I9w*_V~)D%-;PGbI;WHe+Elm6-@&Ch= zq+O_ZjedkSdo%~uqy{?KhHqonjTUKB$pbSq9aexX#kYAUUG6`gjdnr$PyaD67Mp7E z&_*c`IUzMDyQxZQI;a9!DeL~u_2Kw zgcFB%U{gwB*`bYq0(!|Y6{jV_*O6GV>a9JI12t*cYe9q3FC$so7-)@44N zVMHZ)kqGawFwpR#{JW~55VKi2HQpq`o9(|38p4*V{eP3mOS@a(LrU+273(4|IP&dA zqu=oArjp%!(G`g7Q8+F+>)I(_QtGvpo`4QOu7L`MXB*ZUfT|&~N2}oZG=+sUheRu2 yJLaN7XwXJ@PyT*ISY`$d&nT9)`DPG_Hs@GFB~9^Dq!QPH{2_1|!H0!O5dQJ89gYv29z8_2&8V?#%Ch&7N;NXXfng zeRcyc$KXTu#^4bYWx*jZKtNz%K)ki;5s*Q_ytNVuK!5x<>_C6q^)DM=Hd`@Ex3*Ej4j~b~Abvsmg8b#b&rrXheL-(Mgv98< z4ilk1`f~i`t%nm%A_jzTAI#`11JW>C5w%moKkh-oCtl z`S|h~CGvHYU;Yc&e*yn55dQ`8zd-#L=>G!qUts?W+<$@pF9`ny@xLJb7i7>L5o#3B zO0?EP3XI~1)}rxL_Y)*9Eq2|-eUD}k9}tj`yi^{FRVjdCG=YNF{QsMJME>A7ElYA* zy3F|3Mv>BT`aAu3o<9+G}yhNG^s+$iD{)ik?s>~33_x*FyU$*?Em+)LdJzA~+EPe{3S zB3OG$md4Zwk)dJ~L34k~Pz{watm1+5b7%HFpPT#Xp*Y$$FyStvow3s^YtIoG)n|$Sz#?u~pi40Ga7EVny z>_z_?ckkYy0L8%Hf$ZGkL7vrDH?{l-pkN@>ZyKV$(dnN_G*3e2e;21G=3{}6Pd2Fd z4`=Q6Pj?d?F)C{nY*{{MUU-!s=wd&3;l-%1b;S7ic-g$Mz0ti*G;~z>u*I-tUwh!I z-mf4(rc|1Ge$0HF;8*7d4G=L_?c5w4TE82#Uw=M#6#4<(j8C<-jrAer)jLGdIG_Ey z20dVJOB-)71iQKCAD&BqNi1-`mHuf#_PK3w_;lnw^r<6c;!QQz<4E};#FvTl-nVtb z^uhi~2I$B-m-aYa)J}Z9N&&;#)`>z}=zE`2Qh@Y~LHo!@ZE#~V7fbWA$>xXCFZxfJ zX(5t;!+%HNKA*;epGcXYwL-&(ZyLsYnY`^XqN9Lbl;jn(6`mCR*Gk>R-SD%02oV*oN?S8l$WmhxU+SnlKWzh?K z4Bht-Kztm(q!Qk00JER*pSjDgOOD|m0N(DD%X{hgll9G8wPcoDjGXN;zm2UZ+J5yC zE(%o1>IZ3-$bKWz+C(L;=LYKvncl*~jjo+`c4E%3Sx%FqiA{hQ#d`O<*mnFRt1({p zT-$Ma%0WRDo#~c6-->uWV%Xees>2B{DOWti&@e9`SGR{$4=%WFbq*Lg|)KC}WroTi0bh?7DfgmqE`p zc1;!wi^khKT_L83Aiz6K$rpDKBhc1{Or>fcy6GARNxpE@}>0pnaT}F#+L;7{6P^G z^!vhI*~Zdpt+qb@Y2`U2FPn-=4?{Vxd0L_YQ5f^@V&1*IsMSGc4Q28W)r?A)O}nfV zXS^lVigl;}%Ft(9ZwtDwWuQvdA-ks^tYgxZVh~X>svPDJJY9bO_+mYDK;4MV zz`jjfkM-ouvQlGLckX8<7R@;6I0@{uZd1CHsT}W!?sYaeRk_n;Pv(h1Z zKJc$_4OGxumsvPOgoHmDB?8uNY3ltOG1?y-9mZ)Z?3p~r;QD!5AsImsLlI{uKu zHTsD#c!!u#|eHWum{nGSb!9Qx{<4EorYz;yuPpX$fgf`po_rOzc+rj zK`la9Q$h%AnpG4WeO~ZFnjNE#(0{lkUc!2dzU0kW){BZi%*}@*9N6_FF@;&MZh5fC z*38qat#Sx`5J`}Ayf3(^QE6_tsa!Hd`D%t(Z%GFW6b1x9{+R8b;V#fa^X!R)GGF0BnWdk>FfJDQv&fz{ zaO?<)-8(~A-PXl%dYCgxjpr?|b4}a|yIV>%aWfOuMWw5rw9aW@do%T)=BaX<4OpnX z_<>~wa9i7ik7CBrD-t^Sk0Y1HU+$BiHh1SUR-AsXAP$EAl>x`Fkw zUx&)Pl-BI>y#vXv3~mf%r+M2O%#qXDZyNbqMv)*kXDj)2ZJ?pZu=0D{`%UwN&4CKb zG}+S(a}B9C+aKddwJp(+I$%{Y1^K~&eJfJ0<799p_}%*!EDrBkM(Mj%MBd)UU+FvO zoEh9jNt@laL;7iXwFe>4a%IkB*!LMco(EPh(EEQqme`6fB?-vgLD+U(%us3ZkQBS3 zEmXXPUf#iWGR?FXU=>9~*gDL?G~bR?WC6dS2GgFADte21&K64UOh9fR=a+k#6$zO6d7?w-xaz!Gd4BnJ3HV)^mM!E$Z z+#ZE18^U*W`1YmK?CfZ)GJB=7dd18Jg)z~~264^}%rtnRto{J;rYO=JzoSCXIsP_v z7RyuO4TqT%&W%*9L_k+GJfhu{-=c-DIZBpsK`Q|UnLO;X4B`Mb*5zquFXAl;`{R;< z3)QKHkw*~kTpx;I1(+h*J9=F(mThb|i!e~u%a*sIxJYs`6YE6f#VMVp&OEL$z)Xkp zbbmY-yZl%`(kYJ>Yq#^S>HX27dow*;5QUYfwA7eM7rheS3K&JF*bdz18nC}!!j2jR z1xxSz9dcbf6s~fqw(uD5Y$UJBMtlM{M@SrJ&u1Mv9uywdb8Kt%7|iCsICrGzqe7M6 z-|GZz;1JG=a!YVu2}$7rsYHP>rDT$%K5(`- z8iqt;stlCp9MwR{@)9=5Mx5^FBs;YHI%{@5>e`sSo zb&v+7n3ge7ZX6NoVBjg+-(?72))UG_6G*!{I!PTQmev!|V7{Y=S-dSuyiQt272rE_ z7X;_W2F##RTZXG(V#>Ar*g8_}8tsa6VV0Q4URwX6z8zOb8lN1{>11nKr z`PIXFPZw6<4~*X$9O;FAYBan77+}^c);2KRiGC!u!}Cej7lCsm-Vg(Mb&jS6qtyD- zCGj>#krD~;z7TuwwY#^rhvZH+auDY&hR$V*8ZS! z@8i9H+PcgzxrfAo8Hg%E)4GL?ObI%@ekL1WD7wqG?&-t31^7JdH*JRIDm|Q>+Z(0f zfgha*VS$($cLSQ|VB};9)I)zq0~nN64Pfu2L@nP_l#0ex;?m8X2`J(ThFSfysALkS zz{9C8BH~F+q5c(Pu?7|g!OsMXi?pGHYgwT+_5PU7zuzuJgrxA`EoX|r)**tHhfu&< zYm+i$asm)>Vbsewf6_a)iT@2GUv_QA2O6&K-p3|1UF}*|or!HhExop5)7WOj*FarW zQKj``sU5s&sPn#KH4;KS6CORaIv!aR>ORWnRnCJz#-r>vEbflclg2O&s&X`xgW#&A zNH0r*H^To*?L~m;D}PU|2{CINP=9!t#li!3cn{(oy>@cucrG1<|H5{M($^*u zbcrG{!osBknRv? z^7MSryhimG{v9IFB2fE{e{&_FX&#C*Hz`_#YzE(q6cWl&(;Hf7tn~!pLLPGK#egAP<)r>qt|4P{Q8s4^0XrZ=T(RCK>bON42FZnYKeoJjB=b`lO`dNn1eO9Ky@(|iK*>3U$ z`@$4a=|58P+j#rh0;M(zfM$`IQ?o$u)*zHs!A>Ha_0Pw5Hh&vd2agdvjvQ<&99h^D zJVYdyMn`HA5*V8P$oQ*X8;8^xsb?W3C;Z??gE?r_G9F+BKO--j zTyb4G8lEhRq2RLH%ESYs#|GBVs{i;{*)BgY8Iqy6$eIcMd`TUA^Mt~44e{4ni*M4T z9kx?AJ7Pucu54(u|4`FiPp^mCMP5GhHrtzJhhv}l)CtoRP+@p6$yOPR}+4@zX;)=17>lDX;_L|NWI07)$z$Dox z=Bf<2kn`aKU?q0_{nDOhTlMmrg9u0tPssXb$7#uc$MnbbK9aNXsRcx#^MK*e#(>F7 zLJH1mW*A0^v4*P=?1JWkWxhtKkk;~uPU4#PIEm{pIKNS(0)k%{pZKsKW`1I0g}mUm zZG`^vIs*pbSZ;JnnjSY$MOrufA(w%SO2Y1pky!Cd09NfeAzUPqo}!2BE=z{6VA5l7 zB#z*rDmqAoRA#mW(oX(<;jkq8*vN3dXT@sey1=)z|v5e>@CvWl*iK9hvz2i65bqH>eiE)E2H0BU9 zb~tBcCVtE!WJ#P!&M~bK1izrJ+k#M?F+sfmKuAkuqW+t1J_@Ob;3wq)hwl?Tp*o)% zRu)%*02Yy7X|B}q*j2FSz0q^xItJck&XV-4c|=*b427Rj_5RI4Z%P;ZwR;X*D7=O_ zV5W5N!+5(^mRAZGZ;UU`&%V1lC8+L&CmQjuyNRYft0@Mdd~3=&$O|5?VTaNdj8O{# zo*u%nKFA2Yt;-q(T(>-E0^YmXWhR|)q-2D()0JEIH>2(#`3H2TVELJH3Z0lEZ0n6njZ!B5-8+M#V=`wdk!d9ZRpG2oyM`Q*^P8^c>byy43qNHtHQ|ooUar)S zXiBKK-hU=;=W55ir~dgKE!6UY4WGr3ttWR8Ef2K*W>w;Jiv=Zd`B{*W?;36=&!;7K zEXds;LQ*54w$e2kQ(gXHk$*r{i?7`sRRT%#?P+@IMgv}uaCE}{S{Fte^=M23Sm}_M z_PM1ayR+F!7C#D#LQ(Vt8*LqkXbLon2{(;j+3ZuWQ@T9!{JU29zzNp=j=Fx8^V|O6 za=c8bKJ=TRNChm|y{LE0qf`khmf79UA}TXBg}01UsvMd``aS7W27xoI>gZ|1iX?jS zr~;1^(9`V`xUBfvCtm|p-7}7R07YI3h-;yjnNxK9M^lb}ED;#BrkAGqV`_-O+sse? zJv^6%Gk`)I)SFDf60Ejk@kF*(Dhi_MA*+BkKYt9XbuPm2oj&ZBO9w8{VBq_9%VOl; zL&>}%;!#ay`{&zSKUrM8r^g(|T{A(U*a76;oH`T~D}6KtiRvJ{RaLAu3+!1FM(v2>KUjl_D>#_c;hHt` z`q$qbW&1})m=m~023>k?7KDkk4h(=}I^E}sPI_67L7}SkSUqdDezZc@B=2eXoBd!Z z0Hx>q8RAAZLWFvB^U1agK!AKUgPNV6o*Ua+pB7yiTAlBnnpW6b8jD&S*w||n4bp8* z`Nw6KU5#KQ59Wb2irk~aC0q z+r+$|HSivffn94rPLnHfoj5*b1m{hwQ~8 zakfBep`lrT`eU<6dlLkeo*17QzNDzym+~Y@#95)EuQT+S^4J|Nr+P%K7eDcgH5|B3 zY6OKJedh>`Y2V1aJZ(1lJD0Qmxwlh;M{IUv$tw;yj^?(v94Bg>jcwF&I4+B0aYJM8 z+*y(T=fMUJcr+EPTqjgs8%-#bo>HUwp`*Zg@yCidzQ#*6S)qxGB58QPZNY^{by!@~ zjdqkzf1WTJebF5c{GyTkTdV(HjqIJAYJ+;Wxcq!qnJp_5p|%s#XVCe1$-G=*jKZ2I zT`HB%IL~ZFfqXb6w8@OUO15YwV-gJ^6B>c4242@*z|rcM03)h_Zo=QktjRSa@Luw` z7gq^|U2bi&;Oy{2^w`BIzutXQw8$6lY_i;YZ1!5$Uptpdw?KSl7H`ptw@`;j@biHBYA45VNs@fe3sZ=v(+ML^V=?8oW z%x|s9XHB=Z{DV-6Lm7;LJbwTr#2(Ou1V*!1fHFSpxWH?H^PU@pSJ|N0HGQ((ag_Zm zngaF^pDpybM6!_EIK72jcz$~2oI05a0*#EiET6KF|KIBr%D?8YQLG8efy%uiJY^cJ z2%j=2fg%)5?Ng4XZPIOf?A$UCCaQH+ncyeaA`x~KfN9fNM%8kzR69iaU9}3;)yhr@ zC~nJZ>lJF~c3pK;+J1nKcfI zSkDp|cahI5nY6oi-201b#z{bt>UFvvusj5O;45;$I1j6=&Ke^tneBj?&Vvp>!|j53112aA94?(AVpmS}fLh{5jopuVzxxp*A%+AFEpW0};nnuD1Wn z9NtU{MISdrB+*AR+owlj=HGl5qmZGSjNu2Vyi2zq5<3)jj-8T+9vjwszr{*F@J(?` z6@Dq%uS{p=>KW|53baOsz?;t|9?k5V^%&g3MFA(Q02Igp7}M|t=`|{IqhZG^TM#+A zJQhI{()D`N;4iMVXl438vq@W;yFprDZ*?U^`!y~a7C(k!mplyWCkG(TO}IS0-DxDR zutPvR{fgj36#`}Bsa~V-yGu4+fc-7ByFv1N*`J=A>79BBnN?VPk2wvKExV}VA+#h= z#vxDX0wSYiAzR22RkCsG1;>eGIfJA^7VUYXsHBLJmxgZAXx#Cm>C8i7;faz6rOtze zld=17@zDdJ+6Pfl7m@U&65~|YtR(SEuukn`=)5-@p|Wwz`SD9;vgh8cz@H_j!60l} z=MaRbaEu{U;*un~v<#vAv1?BWu1dMxi*wRh*YAs743F9Z#rfUv-v@n>4blvH`lXI8 z?%cW`VaL$Cz&EK?T8%vhYtSE`f_qE7ltH(l9p3-SE>liXm+)weAJOi?Lq-`H$Mad9 zu-@SgfI z42WDHW3u$J5MuPiFLdek_&<3b)M;b?P{Wd5BT6!9SyFimB&X4rd}{j(atu~?21+~%P|g1SGQ@|7R{TJ)33DY z=V%eRX0k8S@f*^z3LeCG@-l91;|Qmua}U0+cAM#pR>LbJn=20i zviqVfxU6zqqtZG!z}ydV(@bPIRGkLy1eqd+n;Sdk+-K6=%KCsnp@QN@((A!%g)4kW zrE~>=uAzPLM;5}J7&ffO{juJ-#2!lJAme{-~OAC|9tq>WQ>;_ z+YhQf*aAbfjDvh!u+8Squ(q9@Hyq7BB)Pu#cWZ{2DmTahz#|towk-{hI%j#ua#mk% z;1)dwl5?URwX=g>DOd+!LPrIWYW-H3mjL=s&{FWp+tUA;AN&EX<|=>0ftiHdSw)13 zy=8l($>~B*KO+M^ohL{8V5vI=N71OQDg0XC8(qF9{inDm*7bM3T{j4Gqv;XLz{s60 zwxJwlCVgEDz)GHuIC(30i0_bF?$?#gU<-<|2{W)98a2KTYz>jUqW40(I@@L(?~-uV`$qmK}VER7|`ILnVm;BtxI_b1K|n2KV7tM8%r++R!m^ z?K0N%c{pY?$R8&)HBrK#46-1Vo}*de<#Zc2{lyasK3RAF8_(=dJp7M$tRRIAbE&^> zB}bP|@b_3UD@wbq;2H7XqvKyDcp8za_G+T=cB;lMxU#ygs^vv-M&EnS_k=Qx#?jDs zGRc3v0-$)(s?}Je(Ef~}wvFu#f%v0i>9=^^GWsqRvFm7zzqf4ph&n}#f3Bl(h_QqR zvp}FJxA{}8iaQZZJ zzS3u=?u}hTn&IR@G4P&|WPefBUO1SSwOSh~^_x7nuF!KzGRd-#zMzxUi% z6Fx|%ABar#iF>qj%<;lSAIE6Kto^X9I;lS1x3t#1?_)jTzx<`1Tu7wV9!jE?#lOyX zUxaQhIeD>_(jNMIA5|n7TTdHBEhnU+_2LJs$Kn{50(GTi)l!IRNF}>tG31W#gK{y3{wh%+YyApDRlT1h@7bazA*?|ME+?aXhN*OzjCc7fHA zU!umj?3Wag>mJ&Dj!LkcN3V#nD3c_Zjj#mXy+!Asp;n7>3pcZj&@CZ3K4F`O&HLJwd`);HLDQ2@#R1h>rh^J zj_%BQYcnpmW;AoPvIOkNqt_!|)Q!%w^Gp+`@{IrNhDm27j#+yn#c|iP%fW?hM#t|&w&ov5#sCE@`d>D2S$ z@9UC`X)ntV$F*JXGZ$ezZr0>TVdf%&JaFU+j7Z3qD-i;!^tee#j2v3@)pFr!0~$k0 zd_L{VN+`g?WIy5oFkgEQ|$& z98;PPfeSrC@?85j!O~i2*q`~IRjW2aXMs(d#i&2D8x~DJ z6*F5kRC-B5G-Fn@@V39rXIw*7ldMBN0SGBL2Iv+#WfDgzX*6(A-O=vj@_2GInR@a0 zaTBmUFf>%yu%Y~-oWZ5F$1)DcI(W!z_l<@mSZMwwVoDZ)SDzg{VKv!~cl>%Lf+XEw z4E1h*#6gpCrC@&T&k%=o8o1FaS}kM-6&0R4{f$_hAFYhSeiN7JCG-jUM*dWrWACK% z{F7MAq+u5XWeSjBWf=k%G*Rf8pJ|)Uo~u6QA&*AxOf~c|!kpf+QONI}*gkvw1~vJ! zoJNpi%~FXb&&MiM?VJ^%$$kYn0a^7ez;_IKX-7cxnRIi0)M>n)TI^B63HO|5j{S)y zc}n&@WGa9AFCTI(dj+S2jlA5>PkoDeVJ3S<&z*1S3x5DuEw8R-Z!GccCl{9*uz}pm zQK^)FVHu{y7j7Bzsg3kMhj$UQQ#{BHU>jZnqA(dN1NtpF#<#n{gefa(pV2D8 ztG{)LZ`G0g?#W5#C%ap<&AdNFQl(^vlU3t)II+L$4v!hjRMDOI7Yw<`LQ|5bsd3rB zV@yALapnXd`65!4uGPq0Zs#Be7L}%9q_rih_#79${hKX+>zgUi_p(}VuNo6$AxL)Y zkWIUpqS(}bHM+Vp=>J2we`QJeR68fP@Z3|D{8ABJ70Wu$fQVs8O3OUWPn}FZd1`G0 zA4&8h^$AO2S)qmJwRFwFlE)mFK55K2F| z8XT2ubsYMLVSlb_UB%Y?>mpY921-bH5X*_Q5Pa zij1?X4bRv(;iy*b8rBr(!b0lIKqyhdN8pL$yhcJcNk({7I!h2WdfSW9A8}H}L!Ga% zwX`qMjE#dEaSf6TESHodFf3)B z4>~7FG*Le*+)fjsbOx2w?U%ZG;DtgI+)o&3Vp#*vo~&Xf6Jg=rb6})g%b{u8&9;D7 z#6M7Roj4)o>H@Zu*k&go{|-VX zqvc$f{|-B+KGHIq%fR4LGGEMCxn2hHsoYi-^+Y89IqR9Dy6z0EpAB%4%Dojs-LB2; zn4Kyc)){>}8kA!(#vFT|gj}QUCv{HV8Y%tVP`7mVI;T?m7^UjS-aow{2o1(CzA*f9 zOV?U#+9o&PZ)Tx&dWUEA0DU`{` z&DKo*yvG|s++WHO5As&xhv>wM$Pa#;d>0NP;*#mDDr0((!g)uL3RN}d1gB_hlIC7h z2&(DK8Je5GcBvJ>CL?bwSf%1F-nd#b6aAAhO^k7%(nU%#r>1eyxvn*l5wfFF%x+7e zh7mFK!@w}sxDeRp&@E|N-O2`jWXbK+b*>Z0lK*1YfpeuKA}iDt44QrL+PeFLe^I%6 z)f+nI>P{yLZp){xrq6mNK2>QZqSmafB}Mb6a;i46XrY;rs;^p8)jEXVnhGsS_uA<$ z8R(Z}(Dvar#`HDX#7|pDx^S~DvRwIbfVh&!Zrxi^t0}6HpyZ41L#+-7R{Ny1D&-#`a%ZL!fwI8FX_M8*Y$c!WBWwFs@*)ctd z%e~;hE!`m4!NGs#ftI8jm1wi>=Wx3hDW$mij?fY3hk-K+7GO15=<0q3AKua(HHBZv zx)5X;ZkRM=VvjICr`)2VxcLwaF^!q)YJhp?_WlgKL{sJY%5 zufH@$8#+gzG-Ed`Q6MbcP;HQJ6($~*Ka72#xuHlKRbK}PnD;bs)){dI#0r0}k;v0K zd;mB9hY>}f(WO3^zECi6rXzD8a}M_40vd9ZR28@1n9_{&-9s+D(^$fTf4(lZ)aiL2Qcx2nC=YF;G5DSu0=~kU>6+G99^8 z^P>`U=5qJafAN1m$~t-3*vKVb625JqbgXi`ciaW_BoMo<##Z=%diW(21kapT0(YW@ z4%3jg$U*6*QuP3Zf31ry?#AbLNSw45b3BQEIG56X>4w`_`* zS9!z`KqzGf`E~Cvx>Sm5z2Dzl^Bt=?A03Xad+^E))nva78@j$7BX6#PS&oHROfZh* zK>h}9rqUr1x|$Y^QfIui+U*+-X^C-0%s%f4PlWQOmW(e`Q%gybZT;$K9-AWCZnqoi z;wkGojl#2x@znttN>$>Dd6pYxzCBwW6_M@*z$2l}4jE+gnqC{l&ZbmarK**LyxgE+s~Ie z3Dm$dPt4kLft$b_ z^?J+?A25?hMz|pM4!*3K{aKW^mjT5>E|>($tJNvFj7`oyV zpCEs111j!@Vk|#UU_cDf{#}*PJztGB^jy2?KVaLl^wtWMszeTz^@G=jlWNTTGGM$T zMGY{AgN)w`e8h8@YVDlm{408LM|yqP6L3ce-(Q-XV9F2LO@olZ)y(vhzhZhS9XRsn zHq9X~0r&-k9DqJM7FMuch{fQ;V57)}PDCAdYscKv*$vSE0>f*?d*uv6_5eIXNUTsL zdB{%*qhwEV+ZDz+^I!J7sX0Pom0OXm^sBE)uH>z!_3tn?Dd+j29d%^hf#9asFV=>W zXFuyAfKm5f?R;zKSTlrB2?~(Iz)#WWiV*DJ$W#aW3~I5LF8+{OmvV=9LeHp{#CS!N z1xr~*E(Vgg4$ep}SY}b^*wbN>UQ35kl2GkpE;k|$l0j5G)zOin`V1@9c;qbD&ZOym zSo=1Q{CfK>$z7KoP`2+A*a@XoD<^@fF1oa7zCxz<C zPF6j>=gDHn#CwFJda!2{!-?J@EY(&j2c1q?zi$Kq*wvC;aku!)CvlOzz5`3ZYRuRz znUUaKZ!;s2ena*{W&hCcI_wS73k)YF6h?x-UFbJqmfC_`J^sGq(c;buf=2tJoQq*Nnye$A)!J<O%lJwp+)l6K*w4hdf0*vl?<>J7e|wN zhO)fx+#_54D0lm)l}2?c+4?2hL+sd(U$%TUENJeUr*i7}!LD-ZbF`7vy+C*SwN^gG z|3~2WjI0m&w~^?}BwBZSoZFO5oA2e4w{CRqS6@3@2x94xCsjwnz@wW9sJpg+3Y@Zw zR}4YaX9f}*O-;UAX?wbcJ=IDyr&?4V*d>45!|tx=(UXxl2>6!*pKW_h6J|*-TDY` zVjP--H5J=o=z@>rM}t!(jVzSfi#Abv&=w>aJU(%=u+X*u!H_)*<4^;<2njQc+C#-6*8T5SWIN^O* ze0b_xYJkS*vL5@VxI}R)9D{yc-Oo=dZk~rtI{9RV^DK5oY8z*WZ_98P z2p&)8D&o!e5vy}2Wz#dO)2Tq0o=ssurj)WJ(ST()Epq#WSp*CwRs>woevvma~! z4QC;JB^;Nm4=Hmye2PHq3c-Q5G!7EfN{$b-=qmAqrd(mr=3USJ#I+`n6*>4lR8QS~ zeXhI#msrR5CqPASZbypTxHFlg7j1}y9{|QRixgZP~)316#xX!ln(oO$1qQxA0B{nheu1FbR zd}J}V?8A6yV-Nz=H><`kicLFOO+7K)+8E})IBU|)JAF3URljRo!p@!a4 zM!!ZEybdMcvQ93;l=;rJ+*eYPL&m#k5`Kj7$tIm>iOy?({AEp+H|U(Du6B!{JT=Es z!JAlo4x;0rXM?U~S*VaV#ptNUCX@5@S#nrvPEfJ>Y-0J$$X-xuT?lD!51ZWtTXIu$ z4X7(~t%_aXVy})f{v~jzwp-B*#0l`Fk;mbVx-;Ry;3m;Jcm6SN7|{q(qj%uv_G_^_ z@-9wYtjpO;o?4PBSESwji7fkR3~Alhp9` zTruqv1Y?ebP1!YjjohuR!ltho%OCQK0&$&tZWk%oz-XHOoAggp(sIxn1Vvn50}ysk zPf7RmcxIe#BTREUW87uqT*Ni=$&05uj1`mb!~KWy5|#e4w}jzVfWujI&8V zK=cExi!`y)a=7vdv^Y1)5Vkxsc@N!z#;sJ>GMWHiI6xRD4IRwl!-=s&g zGlF82E)If$l~kI`n^Ra_me}$|>5q5KZ&BBx=bbpurT)+G;%qCUY^G)xs3~{Vo$!;B zP&Y4f@FvrE`$HAH6t3@%ga}ulzcg~c-f5bxQ+&xc8E~-^_+Dp}$dMS@E;~~4Q#2>u zB!&m(@P~wXN4ghx1Q0p}*vR+TKwLb0;xT6Deb|j8eLl99NFeCReKrYH8{77j1ny9| z^TaQ(b9$Y0cUhX7U_nS#5m1iGN_WKnz}ncR(qt|7Y#G6J?xy+|5zQ2r3mQ212`Mx< z&}u_Ijbc!BeG>6F!ge%sW=q}r3SM&*Rl>aul8muvNh5~00g(APY>22~dya2s4le4a zs#woPHFuTXU?ee;RCuAcpDpW+6sO)y-sG)w5%I~G(c0=tCTAUJHN&L^1nuMES2jhy zRS;mLOv_$j#|Y4%_v}!5C~h~W#X4HY5Rw`hdrCY}hC{f$!iWuThj*;=O#1;e3?t zaNLOYkqGI-iFuao&i8)LjSY|UCKfUB?=uz!&ca@h1DopE4}!9E^fR6bDR-2^_*#C^zG*)*Pu~Y=Ho0Ecfed5pDrfiuSWo~O(H(sf)W=3%EG|QC z82arbfucGpdX~%&^$VWO@E< z$p}dl7yf1Hb{1cx2*s>aB@QuDKoUlXb?~}YwV*TF{WW+U6pP{{pG~`6E%D*xA4C&8 zU}l*Quxf$Hn;~V9Rgbi8FxWmENl94|-+CdZNR$-ZWT?$6UD8ltS0q-Y^!EHEeOKWL zuh^Fg!AL7W{A2n`2`J(q_aNX3Z|2UiZ=E}vz7+=5*8koSH5OXo%cx^b#LxFMi7t(JPnZKZ%0D4)bJuV{&Gdrr} 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 diff --git a/hartmann-foto-documentation-docker/src/main/docker/standalone-fotodocumentation.xml b/hartmann-foto-documentation-docker/src/main/docker/standalone-fotodocumentation.xml index 80c65ef..6144f70 100644 --- a/hartmann-foto-documentation-docker/src/main/docker/standalone-fotodocumentation.xml +++ b/hartmann-foto-documentation-docker/src/main/docker/standalone-fotodocumentation.xml @@ -144,6 +144,7 @@ + jdbc:postgresql://hartmann_postgres:5432/fotodocumentation postgres @@ -168,6 +169,7 @@ + org.postgresql.xa.PGXADataSource @@ -300,7 +302,7 @@ - + diff --git a/hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerPictureTest.java b/hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerPictureResourceTest.java similarity index 74% rename from hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerPictureTest.java rename to hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerPictureResourceTest.java index f5b1ca2..74d8ec1 100644 --- a/hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerPictureTest.java +++ b/hartmann-foto-documentation-docker/src/test/java/marketing/heyday/hartmann/fotodocumentation/rest/CustomerPictureResourceTest.java @@ -26,8 +26,8 @@ import org.junit.jupiter.api.TestMethodOrder; * created: 14 Nov 2024 */ @TestMethodOrder(OrderAnnotation.class) -public class CustomerPictureTest extends AbstractRestTest { - private static final Log LOG = LogFactory.getLog(CustomerPictureTest.class); +public class CustomerPictureResourceTest extends AbstractRestTest { + private static final Log LOG = LogFactory.getLog(CustomerPictureResourceTest.class); private static final String PATH = "api/customer-picture"; private static final String BASE_UPLOAD = "src/test/resources/upload/"; @@ -50,4 +50,18 @@ public class CustomerPictureTest extends AbstractRestTest { int code = httpResponse.getStatusLine().getStatusCode(); assertEquals(200, code); } + + @Test + @Order(2) + public void doAddCustomerPictureNoAuth() throws IOException { + LOG.info("doAddCustomerPicture"); + + String path = deploymentURL + PATH; + Request request = Request.Post(path).addHeader("Accept", "application/json; charset=utf-8") + .bodyFile(new File(BASE_UPLOAD + "add.json"), ContentType.APPLICATION_JSON); + + HttpResponse httpResponse = executeRequest(request); + int code = httpResponse.getStatusLine().getStatusCode(); + assertEquals(401, code); + } }