From e6c74a5fb97f3c1faacda5653894eb654be72435 Mon Sep 17 00:00:00 2001
From: Anurag Agarwal The Master-Worker pattern is used when the problem at hand can be solved by
- * dividing into
- * multiple parts which need to go through the same computation and may need to be aggregated to get
- * final result. Parallel processing is performed using a system consisting of a master and some
- * number of workers, where a master divides the work among the workers, gets the result back from
- * them and assimilates all the results to give final result. The only communication is between the
- * master and the worker - none of the workers communicate among one another and the user only
- * communicates with the master to get required job done.
In our example, we have generic abstract classes {@link MasterWorker}, {@link Master} and - * {@link Worker} which - * have to be extended by the classes which will perform the specific job at hand (in this case - * finding transpose of matrix, done by {@link ArrayTransposeMasterWorker}, {@link - * ArrayTransposeMaster} and {@link ArrayTransposeWorker}). The Master class divides the work into - * parts to be given to the workers, collects the results from the workers and aggregates it when - * all workers have responded before returning the solution. The Worker class extends the Thread - * class to enable parallel processing, and does the work once the data has been received from the - * Master. The MasterWorker contains a reference to the Master class, gets the input from the App - * and passes it on to the Master. These 3 classes define the system which computes the result. We - * also have 2 abstract classes {@link Input} and {@link Result}, which contain the input data and - * result data respectively. The Input class also has an abstract method divideData which defines - * how the data is to be divided into segments. These classes are extended by {@link ArrayInput} and - * {@link ArrayResult}.
+ * {@link Worker} which have to be extended by the classes which will perform the specific job at + * hand (in this case finding transpose of matrix, done by {@link ArrayTransposeMasterWorker}, + * {@link ArrayTransposeMaster} and {@link ArrayTransposeWorker}). The Master class divides the work + * into parts to be given to the workers, collects the results from the workers and aggregates it + * when all workers have responded before returning the solution. The Worker class extends the + * Thread class to enable parallel processing, and does the work once the data has been received + * from the Master. The MasterWorker contains a reference to the Master class, gets the input from + * the App and passes it on to the Master. These 3 classes define the system which computes the + * result. We also have 2 abstract classes {@link Input} and {@link Result}, which contain the input + * data and result data respectively. The Input class also has an abstract method divideData which + * defines how the data is to be divided into segments. These classes are extended by {@link + * ArrayInput} and {@link ArrayResult}. */ public class App { @@ -68,12 +66,12 @@ public class App { */ public static void main(String[] args) { - ArrayTransposeMasterWorker mw = new ArrayTransposeMasterWorker(); - int rows = 10; - int columns = 20; - int[][] inputMatrix = ArrayUtilityMethods.createRandomIntMatrix(rows, columns); - ArrayInput input = new ArrayInput(inputMatrix); - ArrayResult result = (ArrayResult) mw.getResult(input); + var mw = new ArrayTransposeMasterWorker(); + var rows = 10; + var columns = 20; + var inputMatrix = ArrayUtilityMethods.createRandomIntMatrix(rows, columns); + var input = new ArrayInput(inputMatrix); + var result = (ArrayResult) mw.getResult(input); if (result != null) { ArrayUtilityMethods.printMatrix(inputMatrix); ArrayUtilityMethods.printMatrix(result.data); diff --git a/master-worker-pattern/src/main/java/com/iluwatar/masterworker/ArrayInput.java b/master-worker-pattern/src/main/java/com/iluwatar/masterworker/ArrayInput.java index cd03a0a21..c8e68f958 100644 --- a/master-worker-pattern/src/main/java/com/iluwatar/masterworker/ArrayInput.java +++ b/master-worker-pattern/src/main/java/com/iluwatar/masterworker/ArrayInput.java @@ -25,6 +25,7 @@ package com.iluwatar.masterworker; import java.util.ArrayList; import java.util.Arrays; +import java.util.List; /** * Class ArrayInput extends abstract class {@link Input} and contains data of type int[][]. @@ -37,12 +38,12 @@ public class ArrayInput extends InputAs a validation result {@link Validator#get()} it either returns valid object {@link - * Validator#t} or throws a list of exceptions {@link Validator#exceptions} collected during - * validation. + *
As a validation result {@link Validator#get()} either returns valid object
+ * or throws {@link IllegalStateException} with list of exceptions collected during validation.
*/
public class App {
@@ -55,10 +54,10 @@ public class App {
* @param args command line args
*/
public static void main(String[] args) {
- User user = new User("user", 24, Sex.FEMALE, "foobar.com");
+ var user = new User("user", 24, Sex.FEMALE, "foobar.com");
LOGGER.info(Validator.of(user).validate(User::getName, Objects::nonNull, "name is null")
.validate(User::getName, name -> !name.isEmpty(), "name is empty")
- .validate(User::getEmail, email -> !email.contains("@"), "email doesn't containt '@'")
+ .validate(User::getEmail, email -> !email.contains("@"), "email doesn't contains '@'")
.validate(User::getAge, age -> age > 20 && age < 30, "age isn't between...").get()
.toString());
}
diff --git a/monad/src/main/java/com/iluwatar/monad/User.java b/monad/src/main/java/com/iluwatar/monad/User.java
index 77766d1aa..f67009bc3 100644
--- a/monad/src/main/java/com/iluwatar/monad/User.java
+++ b/monad/src/main/java/com/iluwatar/monad/User.java
@@ -28,10 +28,10 @@ package com.iluwatar.monad;
*/
public class User {
- private String name;
- private int age;
- private Sex sex;
- private String email;
+ private final String name;
+ private final int age;
+ private final Sex sex;
+ private final String email;
/**
* Constructor.
diff --git a/monad/src/main/java/com/iluwatar/monad/Validator.java b/monad/src/main/java/com/iluwatar/monad/Validator.java
index 2d1f1bdab..47acc8a42 100644
--- a/monad/src/main/java/com/iluwatar/monad/Validator.java
+++ b/monad/src/main/java/com/iluwatar/monad/Validator.java
@@ -85,18 +85,21 @@ public class Validator In the following example, The {@link LoadBalancer} class represents the app's logic. It
* contains a series of Servers, which can handle requests of type {@link Request}. Two instances of
- * LoadBalacer are created. When a request is made to a server via the first LoadBalancer the state
+ * LoadBalancer are created. When a request is made to a server via the first LoadBalancer the state
* change in the first load balancer affects the second. So if the first LoadBalancer selects the
* Server 1, the second LoadBalancer on a new request will select the Second server. If a third
* LoadBalancer is created and a new request is made to it, then it will select the third server as
@@ -43,8 +43,8 @@ public class App {
* @param args command line args
*/
public static void main(String[] args) {
- LoadBalancer loadBalancer1 = new LoadBalancer();
- LoadBalancer loadBalancer2 = new LoadBalancer();
+ var loadBalancer1 = new LoadBalancer();
+ var loadBalancer2 = new LoadBalancer();
loadBalancer1.serverRequest(new Request("Hello"));
loadBalancer2.serverRequest(new Request("Hello World"));
}
diff --git a/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java b/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java
index 8546ae177..7a784f514 100644
--- a/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java
+++ b/monostate/src/main/java/com/iluwatar/monostate/LoadBalancer.java
@@ -38,8 +38,8 @@ public class LoadBalancer {
private static int lastServedId;
static {
- int id = 0;
- for (int port : new int[]{8080, 8081, 8082, 8083, 8084}) {
+ var id = 0;
+ for (var port : new int[]{8080, 8081, 8082, 8083, 8084}) {
SERVERS.add(new Server("localhost", port, ++id));
}
}
@@ -69,7 +69,7 @@ public class LoadBalancer {
if (lastServedId >= SERVERS.size()) {
lastServedId = 0;
}
- Server server = SERVERS.get(lastServedId++);
+ var server = SERVERS.get(lastServedId++);
server.serve(request);
}
diff --git a/monostate/src/test/java/com/iluwatar/monostate/AppTest.java b/monostate/src/test/java/com/iluwatar/monostate/AppTest.java
index c914f136e..d17a56bb9 100644
--- a/monostate/src/test/java/com/iluwatar/monostate/AppTest.java
+++ b/monostate/src/test/java/com/iluwatar/monostate/AppTest.java
@@ -32,8 +32,7 @@ public class AppTest {
@Test
public void testMain() {
- String[] args = {};
- App.main(args);
+ App.main(new String[]{});
}
}
diff --git a/monostate/src/test/java/com/iluwatar/monostate/LoadBalancerTest.java b/monostate/src/test/java/com/iluwatar/monostate/LoadBalancerTest.java
index 736bf6ea6..d62c029e2 100644
--- a/monostate/src/test/java/com/iluwatar/monostate/LoadBalancerTest.java
+++ b/monostate/src/test/java/com/iluwatar/monostate/LoadBalancerTest.java
@@ -44,8 +44,8 @@ public class LoadBalancerTest {
@Test
public void testSameStateAmongstAllInstances() {
- final LoadBalancer firstBalancer = new LoadBalancer();
- final LoadBalancer secondBalancer = new LoadBalancer();
+ final var firstBalancer = new LoadBalancer();
+ final var secondBalancer = new LoadBalancer();
firstBalancer.addServer(new Server("localhost", 8085, 6));
// Both should have the same number of servers.
assertEquals(firstBalancer.getNoOfServers(), secondBalancer.getNoOfServers());
@@ -55,18 +55,18 @@ public class LoadBalancerTest {
@Test
public void testServe() {
- final Server server = mock(Server.class);
+ final var server = mock(Server.class);
when(server.getHost()).thenReturn("testhost");
when(server.getPort()).thenReturn(1234);
doNothing().when(server).serve(any(Request.class));
- final LoadBalancer loadBalancer = new LoadBalancer();
+ final var loadBalancer = new LoadBalancer();
loadBalancer.addServer(server);
verifyZeroInteractions(server);
- final Request request = new Request("test");
- for (int i = 0; i < loadBalancer.getNoOfServers() * 2; i++) {
+ final var request = new Request("test");
+ for (var i = 0; i < loadBalancer.getNoOfServers() * 2; i++) {
loadBalancer.serverRequest(request);
}
From 9b105d770df2ca56ffd725e88fdbf17666e7cd1b Mon Sep 17 00:00:00 2001
From: Anurag Agarwal
V_+x*cR8>hfJx(Wv?1vCMXh|JFZETScB53QRl`|pYpZXt zT$&K_#K-#Jf}*9)(QZU!%;XyD*4Q+>gw_Far@nwt5Iza0|zbWYyq{ag^vtlO1eD> z92OI0soDj)$oqVrU&Oa3${lxS@bU2zBO<(Gwf #LElXf|Z#$ZP^zYZvwm~Cre$x#dRyvH;Ri6 z)>YNi3~YS!f;Bl?P4+O1#K6KL aL5ngyN*#pA>@_lbUoS0FhD^G z0bv3;U(eFg($WW6#EA3i)hpF<{mY-tC^y#^yJ2EB+c|3G)K_LEChg?o+PQBD*8B#8 z&BKd}_v&3wjO9ZJc#O+!S9=aty3^!qEGF415EIo)27|W}Mhmr*A DQAu`jQo%imdt{b)Hsg3t9hKNM-Fz|@)4Rb7K5 zv}m|9nxWAxvC?9)!ot#W=XiT^JaaftSv+F^+yX9DoT{J(6AvHX?8HP|l+|nlJ|% z*3Qn3g84+5$+KtAz)hzcL{U=6$;;=wtFPx#-yY0DDSS>IslRQ~m-5Z3@v7Bk5J|De ztFrP0T%_f6&GOosNM5buZl>gLu43A9%SWt1j(JmYF) xhyGsHF8pLgHW8s zAnx^bwArUCEb!>s+S>B8pdDovz+yA9u|aOGPM-f~=Dnp{)jvN!+6>a)WwP}*)Lm>1 z(l4v1pr@pCqH?9F6N{wQu#8@|Ku1F}=HTFnjoKW_X?D0=OA9fMjF0horNMNyyy@KQ zxHb0Na;j=$IIq&U|Gg3jb1eWoAe)P(3pH!m^jZUVrfXfDoQh_fwwm-^M9EcM*C;ha zeW_PHFEDo-F6aw_ahO*!Xh(Y?g3Z3jjaSF&$LeD_Y^dKAyr4-F0|NcmH`YKJDO$CBVSYCyOWWjz>sf=6vy@2rJJd zyt (a z+H7ItbsWM}z3XU8i;oi6gq~n6IVMd}Q7zXO3LGd?TIK@Srqp!ui^_#sn)NRBq&Vml zQe=x0 W<&iDKB%I&o(4RWys}(hocvCc(AhY@p%lSiwc!EP9h>AhTwCxI;=|Z`Y~ck@g*ld zVbeo0dl_r`$?t0BxnAp=Osu~y{hg;wPy6BL&!0yM)Jwg0hjQc_FZVldu68{Vimex0 zXWb4Y!=FhSkGHk?)u$BbGP!rhv6g875VVXA3tJ}@4o+88Rvu-um?&~q2-Kn&^j9l4 z#c6+r;Bop>2NXFv>~=|7bbNftyx`#A>+5R(?gkenCMrq=YAv}LQB$>!(zkn36_sa0 zkdT-NegFOsW3u>n%dJ6pWzkt#s{koq2?&fyr-d;XoLRGFac>JyID=B)1%s@6 s3XqY*l~&qOEo>mCF19OUi=~r!yNq>p zne5j3xEyzi_LGv5^ttWU9@8arIR-~fPfd+wf+gtR0QEqtAt|*5gwmvsdxCtG%Su (TOx+>+rYqp$T7#D`^9m6L`GeX8XIw7dAa?~^%baj zKOCw7*n%LJkdz#^%2&*L;%b{b3e|cGIRO?^RiVsLIWW$bS64Y#cx>ih|1&aQrCf%u z2iDcqf!f#Z;Tz#}eR&3I_EMI7AyK;AI-$qqx5``zDXE@PquwzaC8Z~o68c6)v$c*P z>WXr5@EyI-<0drGS4J3^m{$PL?Ua^-0^h%Xzd2gS=e+OT$Zzm^=u>DY|ET-r>0ZqG z!@nZy4V;1k6aE@cx#{r!{{BR%k+iwFxs8pDg9BURfAE<#L_mE)B@$lrPffXXM$w_7 zqPB$)Ho6>9XG;Ffme*)*KSxGR-k*`oWFV%ZG6pIYGc)sZ3(mhz`%;^q3I9WSRn=H~ zd(JDrM=@;pfBiP)Bs*RrBqW5Li3tG#ffF7n#Bs*Ct*Pm@;(}AF*E(#^)Vrdiqo4WQ zee0$3!CF7*brlfTw=bD*;Oi&|2u#0`%lK3HX|v3)-?0SOv>$qVKfvvVg@sMN@7q?a z*S0nwPdL{|^J`hCVQ}4vV;|jp`ejCnCDRqz%5ORFQod;Z1f00Ev~+j2F*!ayJ~{ah z>&u4vM-sd=degj%jK`*LXb3=%m5YmuojqDx1xl$`n~Ks7t1DE?QH{4)NpZ;5B_PL$J-kSu@`0#IJYlDmhr=&4j} zHOss4>E6A2qN1YUIslnn;Dxz8C6r9+zc=_!pR-RqiPzm!N2k9~o6rAsSVV-~`T)5# z;V;UcE%WaZ_O0ume-`|Bd3o8B#M7z7<*;R}r-%OJ$+007{wqF+V9U4KHL YzPFD zBYyH|dQDsc0?5*jTPCgZ3we$4Kpfv4D1~{=j_C?u9r&2b<>_;EMV{{5M-2@Pb`g;@ z%KPjQ=y7M5HHf>PY34zw0}=ua`v?ghK2(Iv#Kh!xwoSm?U6q~JdtqrCDZ`haAbE3p z@{m#3IZ0~z*re!aP~1O1p;J>)RUIx+AMNc83G7YgOJ=vy0=WKTtj_s>Ts*4IY43d` zA)C1h$N|6_go2;0FD(r FI-`4h|0L>*}KDHN`qX6s`^DVd2-9 z4(Ed0tcP52;xwME;DHyX7{G30hU3iArZ5I=b_N!f2uLUhG5}UFR~Z8bUm-1(vk)%R zAxcgZ0s;cp<1L+d%b7Y3_j5aHD+>$B3tvA!=8M5B=`4xZg_RXUBcoA3Ftt6dBFCMP zQxHs!J~A}CQTOMtT`4me^o5iMu>QF5hD9L=#D4x>O~kd|B-JIGtW$}mkdB(#6x33B zdU{@7UJXClhL3L0PFR{c?29Qq@&F&EYaNA!g(=9%|8qP0kiqJE zzGKg+(m#K94?0l)5HKlFZGaLX(*qpqhpwL9!8ce!6&01f{k8ryRp+SJ4sYM46aaBp zHdUna3P=T4S68Lp^}(#_j%7zGlQ=A8Wo0!Ur=LW0H _u9%_K+#p3sdZ$a1GLR D#a6d=6gnB{=BE2L=W0PS*;@yBx0Z=OuDECb3%)Bn|-5T&%e^6_)6r zzgh>mIzMEt&aHxRI~rCNDq&8Djuuu==62S#u;4KtV;na7bOR68PQR?A hTt%C(A z4q#7In74kD=U?r znJIS Aw0A=W8gFx%7 z!O+Gg*)nNRU!j7vIg#=vjeVq$`aWzO6lV6Yda*9@IDe2iVf_;mH7O}`8CwNEsTFgv z>wC6K$V>zT?$d#-7_>>`v>yv5bU#Ebut6_<`$0Uj(T!*K49Fn>Ny_yuM*ueZHjXw& z!9iy;#IY(a%FRX%yJGt5T^&(SP>$7OG-D(fa>&e3@O^07WtO?$HZDv%&Sne)mRT3E zd_G=iJXSOhvbGa~$TggqnaQI+HZfsSi-^bQa%fCCE MlqjZ3{DO_r_AgM+2~UNHZ_Ap9>F zgeDs#zIq~_N%&|gE+HWyHrDxQV|Z)Jyvqv8TS112hm!J#2pbnHJLU@`ySH!OFenW^ zv$eG?*_x_8Sl%R~>U1yFcL8@k77T$vgqGtZP>_()mr+TDhVoTyx5kQ@je63DRZ9)~ z8v(K$iL2)R@9K-MW2HtY<8-vNV>hrrC 2RC`|bfTgi@fJGq@LM=LOETK^VK zbPw*l! z^PW$p=ZJ@ N%a&4*5#zH{xtPu0|^Rq=Sc#K7_k#gVM z#oEfsO0B_WIUtnQx+`~kwvn&k{Nkcik(}IldtU8Jhx404EAb3D5Ls%GH>SoA$aT7C zc%c4n1=f=%1Y8b*+w^X}XojEHS4#(*3 6*W&trb3E_!A>IN6#`<+SrEG(!wUd@$~dU2>Fr#i%3lDK6&uwCy0mo?Cfly zNrX!N*QC$NI^_SW^cfT8m6VjUnyTV=b#}S6Wq8QQysucO&*Y*Ajchvx>FvUzX;qnw z`-qOU;hH2^_WspA3WfaFOTgNQ8rB25WMtG9Wou)jkT1y_`(=S1$@wG5m&hgKp={Yw z!|vZUUfJW{NFtKixw$%qFWU{XYsN&Wo9m&lmYMzi(;6b$d302JN#T0RSkx;^{0Y)2 z)B&|({qvnO8lcB<{w8=yP)JD#Vwvbb=Wa|^GIZ*Kf)4zE$*wVgq=qcdpW|@at$|{q z;w&vK%|yUy_aUk`kxRJK($dm=u*!PT*uEtIlR>+;Z((7fX}gKHhf0ITc10phC@4@r zxey5%nKkSi`QSMB7APy`k>s}33g-O$_sqCiZGfwAE0)Wh4_3<7fu{p%zTvJxR%RwO zRl8Y;TcmNqOvlUu#DW3?a33lsQpaSac{ x57?Fsv~V0`m7U^wRfj#F&z+x2ap zolTb72fo@r>x=wneVH+zq!V5{DLK{ihI-!X$08&5uh_|3b#(~vuqM`$9YqGK+R%~* zie!#q7{(eqX0(LS((*E}W`j=Le*iW;TV?&KoqKfIM}hikF@*0_DH0gF&c|Cg>OCDD z3sL?6;G!NHQc~qSSYGwqDvRvAW(I~XaE=@~^Y(>=`1!v96bBW$X*Pw)Aa@>^7&-?T zGU2>uOX#HIljr*nI~4F J`Thq{45Mv4H-AGU=b+2UaENk=6tTO9f** z>pK$*P7f1yZzE3rf-V4Rvxp$Ypl1V<)6X|G3zG3{27`s@z-wE?8o&i~Z+UsS+^9Ec zY;0_4Nx#eaP7=}m>VDiJSUTyVQGG|c(a!2}_p7jG=(G_lzJ`y<(!EoJ>j%jZCdmkS z@5>|samKurcci?$kk&vPut4sc1(h%;1hk gAo~o3-}Cg}}8ZUd{*UA+cw~ovEFrn|5n> z?RMjr>#*E@a>$pQG+KyQQX-Nqjxvh>9@*NuI6Pe5?-4%ZF9lnM@H=8)k|Y}KY0b66 zJ@={hr}?(ZONw>j?Pf!-E=RivIU!ZC)v=7RQUMmcFII 0K1=lMo*k;`;KNSGx z(bU?Sn=;2uH`oZI_Gk2k;XJOLvEtXpe%^PR y#x#luh^de<@ c^&)a|{7Xx{{DkXaQKXa#cdA^D z625uWa&b 9qyR-lPYg_tNO!2|d$SX^5=y<9E8R4;hI&mSBBfYN(j;?6S%zYs3x_SW>~K&y`|$ zRw)KUd|GN6I{c&4BO<01CK(#PKYdZu@X9Z$*|)w~OTlWgVmyit(KuByJ` I4=E1lY5BdIW35=UusSC`$*^_von+Gp1G_SZ|{#W^{y2napOg*(QkrcAEK z9t}5;9P_V5<>|R9?U*!~iF{TmvtojOwxNyjSEmab*Bq%1@Z7Dft&5XgAT(B1R}T=W z9{z#^Pfv=$=I;8m!C8^GT2_ZF^`gk2az^_vFV~AvpCtMW+fdU=02O_9JlV^8<94|< zegh8|v%I54L$O*_Tx_j0;;CNwsK0n&;k}%k!^Ii$#_X&xWVWs@Vx=38R+BTfV5Cqx zzJ8cKGUG> YuKkemTl~6Jxz*7|_aSv_Xsq?+Q1#0)s{}JEo$~#S(ZbH3 z^Yt|j7U-y`pCZZ dzoQ+M1oP4mFV-Sxe zyWU|ti(JuXd^l7Bmim`;0avr|MsE(2MyZdIla4M3X5eIZb`?wRmxEvjeH+e|1g-JR z^=)&Gf%^F$Cn-TJV^lhdFHG(t=0z&M{7UP3k^AJyN~IN{^D*uC(9rj9-yF^lQH%$_ zdEo_Wd4wI#K5HptWn+^Po1l;Eo+1Ic^XS;9vq`_EDc6Y{S^hUv-i05Ob }^6{v=R>p zWV1P*sF@FU=1~=hk(rsCtq+z0O|UjQyE?(zKI@UJm-7>!D@sKrM!UX-kJ{9}-1L~) zDA _H zKR#9*cN7*4r)ab?G(2BwM=?K|s-7kwI9gKy-asN}If=OC4vuth>(D#H?hQZ-zkg2` z)6jT4-rU@1{kEt;Z8#2LD0`kPS;A G#CY egoMSWX=kqeT&B0T ztMU2@77E69?{3S!_Q`mF8@=`8roZ-uuMZIJKJyi-JqhB)qe`YsF4nC`D S_mzZZL3Y6Ec&7Hfk1d!~9_Pu$wt zd1ziKS#g#H8HHSlhK)_`w#6R!DDqD{1D)%D>>H@BU;lu?Mo0#Tao{Zi{w+mK-zBoa zr!}BwZnuxOn? QhKuv$;8m#lNiy8WYD$i`OqZ{_g5?jM zJUx8s^4;vkis&faKdUXI>bFM=_ev)Aa5V=BB7NuTW^@0?Wfm?3Cdgkft-2+RS$d~S z5pr@IGSG$l0FtFmFktzg2fBGu7Pr9oAToFMzVh9TLP1&ldzHVW>0fshLWC44N}CCe zaeG4r0)OrYddZsT>dF88llcFLTG4uzU*_*@@$FZkSU#NVnfy-YAB!)~>HgU}%1uTB zer)P+6^V~3B|;>jG7OU9;%UJyH`nfvw!7QyBLch1nkd2Gbolx-)Ddm~9+Ml=vD>$d z{Pe+qrpZ@+8-3>l8veZXvs)L&9HIkgt#x6)KqQrSE(i{A0$yRiu=N(4%3z C=Dwh*4GtZd3eZGv2=>2UJF6SreUV0@XI)7lSpb#(#i3TczW z`_2M4z#O@rMEU4D^6gJlmf3t!BX&$Y!fXhBM4AyWD{kIiFKcLCz&(ik$nr_TkH#dm z14CdK#K#A`Rx=N#tC3WmVmiMqGtU1;!nCJk8+v&JPZLj}QfvQ`FqE0Vbr2;B0|GQZ zpZ5Rp622tppIh 4eU0o73rJ%@z9zWzp3Gep)-g~{2sfP2XXpZ=ON4>s#RD--h zhiB4uD-g)c<$E$R4sJ%%tK-GmnIfZ|kTs_BAE&BKxhXcNy0{Pc4I)3detz+ook+xr zjO2DRfqVB}49m9X1GyO)8ho{?ni{V21dw27SLzmXM4#vp9^L0(CLv2gk|zYbMD;K9&JuNU7g=uEaZ0<*(A> zkb|vQ4=r^+ycHH<26y0kjo^Y!bn|EG=kmIM&3B7vs5vKD-pXTmb@uT7KH~nPebjx7 z`Cyq0ag?V^-@L*bFVW;>-fC5??=3Q8F$i(H#iW16fB(9(4^0~TlF=V7b%PIz@z4-k zx_73y8}@){z1CyQ%s{UNZLNXy;;b;1&+hUqvn{h0Q({?R`&ae0Chy^nkGjD6Y3}Zl z0F2FSB;U}|l1- |dp43T_7XJA94vu}+R{kodt_UsrvyY!A z0_KtF#^g}5&u&D0>Q|_JjD0L8&k9lHr%Styz5U3WfC%ij# d3<4SIUxwTE_DD&HI%9shINs)VvC}p*AMWsa6rFUPD 7}Gy7$GXsG73?U3VB-GCMHCXN=JcaH?FVqI8|EHLZeUHa6)Xr(9)z`%-{jHpp+ z;pkM ZG$J?8n)n{t6Pj6<{sae~QzTDJg2WZo7-QYC{81vcm^lg3GcKZAT zRXO<+pf}e0QkOrV)&oaSR0Ue!cmPIu;2q=Xyy$m(<=a$YZ$53d@DuhiU$IY0dgW5A z@A77e6Vm7+UuLC|m)c~?adkMzn@d5a@AG!BBa#`!kI8(0+F(@F%5d&@p*nkr5+6_! zfT$Y-nqQ|``^3%`^hgGiJ(AwIcE>VjD$<|;dD@?Lv9erWbFVw*c?V$5 Lvq<@1p#C{voo;Gkak(;YLQ`^Yg{OO)veo<-r$KxP7XJHjO zihv9SMF)q^Z{@{0EGG^-8J=VGa@iSkn2&L72_98g#20^^%# +c4wAQBFb!(?8}#)WH%-@R(omwZ)YI;f$?eBd)<37%MhuVRzR-U zBKAe)`SzuAK|KAd|Cb$!11Q-#vWw>)b#r55d;ijG$RRbgF*L9SdDAE3^`-ipx&CXO z*-2qWzX+kb*f)M8z!Q7U+>0n?eJ>X4)9#yK!R=7C7athy>C50shdn)QEzI-x59B#I zYwQoYy1Nk&2Tj7u%gJ5!G_`J#02=1h?Q(B!Z_)2<6tEq75-(B{6N6rtL{)a~EvoNK zadhPIH#iS5f|Lbl2i#!LPHYBAEg{5dH=H}74-_>vPGZ8AIMd2 0BYX=K~ z{#hBvq~u|nO1Qa6+(&qHoRvF9vm{YnZ8SDZ(SP-x1WY7Cj?Y#Xje4)8fv^M$j)S8u zhuO#gzsi2|@isOVRzz6IWUrOX%{A}-Fqn3VXIH7QV^S~BZe(-K)1(#;m5yf%qpPjq zEY!R(5ml6JXK27?&@MO@`MopHx49Araz*?$SF-=)N>~8%BUj{)$XYEQpXnJwek^?8 zu0tUggn`-e*yO=%w3cW-O!f%A+$@xDk^~%RK4F287M7|fC8;Z3Tox0HD0KG|Y|h%l zT(kKmc!Wkwr7(P508*%#Jw8u#DmX#Xg4JZuO1FMOAKPHqO#xtBW8iXUI&BD<@^h5F zQ6z&lFDnTN5t9w3W0mFfgi@X%pY4jVmYz2nn>2~)=G>dk>zbRa ?r4Ld`8KvK47#dsYs7%48 l()qG3>1$J L%H!i$5y{yj*bCcOnoB?VAv0gk9*>TJRSeBzk(1H z&(2U(T>Ke^@I_IQ-N6cfl*G+?mfTa=Tv`(^8pUiD##0@alW8e1l(^NRvmO0m^UEzq zxANWdw`wG;bVMv{KE%F!w5hzgz_!n}hk;qb(Qw45Q=afeGaPiM7*v`3OF=sh`o7`# zq;keL&}I-$;t>afj=(BN _feBR6J=FHVWhe=aM zu`X=l8LGSbQ?*HEWJz4?N%=Qfd)&x*8h`O4K0@xV&4my+>sL4Fp7Y6JKi+x2BNll* zb>{=PEK}O{tiqS_E&BN1(uw}`-V1jQy*ESW?(5I%!b0V*JYtS}^JvJ|uTETnT?OXb zRB~vAnGGfQjEww%nTa4Skn!JdTVbwZ!D!*l$qa|}LXlLW8vO0X5vYdo(9w}mtiGUg za$$>V6vd1Cw`$Q-i&;(Aw0|Pz83XO#99MJm{IPP#9!Y_TydxnY!*M7(y@^(srV2;2 zMAkA2-_yP#oy4grb~#t&FW=iKF1%T}U85wnMJ1+QZ)+6IHBQ%*M|Lz=3zN3Ae57do zo^LYnJ(1H$R46w&P`#2K03sy_@xyghvcYnV+vKB0MuLc_s>0?f CeSMNu4coVkUYDVTlW)=hEQLNCVQl&I$3d+vn+Jd*iya*Vnvq8uzJD+josnX|c zapnxDb)~D=SRRg08XwZaa026U{N#n2;WD3$a^BW-{&BR*FO%tIKi$lE@orfKdbiv8 zDDH`w#=kzaur{{nWnnRSV=ny#_@r^6d(t;|eD2I>&f8D>>hXf_wJ7v$R^EfZ_v+Ih zqShZ;v3pC0eEe_e&^t8j>flO$iV4TYRlb|yOc}t)Wq43g? =`Fm&>)4JJ^uB zpe5b;;_%fdL31WQEZ^; |DlhlR=2K*ZX%Zi@)`Ov()TEW2%L3p+O zN62t7ikIgo@P!)wn-k?h85z! >{|%n4R1)KN`fuldd(E!s+L zi#vV18JX-!mqDZvCmm-O@e3wwFg_?LF1^e*&-bya7i7m%*tjUdSf!ALBwL lzwnZbA4t9WB{g^i83C9NFO7yLnzMJ}^}&H9P{HcwJpN zpR00oL6d+n7N*qu`&Koq#y@)x8Jcp_C$6LtJ~YrhD%g(o%?u!zytyU5)VIVJod9wq z^a1ZYD}dmd${$IN>;cj%k_F#8hlfTOVb$SqYbY-0)TglPC$yM}Etjv4yQJcD{l#w9 zwuoj;nPHEF=Q|DemH?C0Ucc+BlWLbEQ#Q-3C;0WxKt}WM&@wRie17@1=q8fJdP`b{ z7!?>AUN(<6nz 2;r8H5KT75lYzs3~9cBCdEeUOQwb&k||Rdho_&^@)Id|Is6*U&tw-M$hw> zd^vaRTZqE(>NA$y@e%`m{Uz$$ @Sy`wjYQ-HwNh+7WG6>c$|y(cuWU)J z=NbH}(64s^$a6Lu?l2tt{JgT2cU7uK?%FLT6A21@W&Fp_sJAKWZQ|lgBxIceM6A86 zr1*)@ K+;Qo z_85w18B0hr9V#?$i8WOT)IK9$sL2CXUSF2Z<@9$M(dO&02udw5AARdFr}dkeRu4bo z!Mbx>`ghz-v~_$wo!_lhH_u=SSS#0K@A&BGCRH2T-XffXpFi{10Tbj?Jp3sws{e_E z_zgB1D*K(Ks>LC9+Gq }K`U5?z1BRw12r`&)L4^~amtjbwSUQo4i z5}LysE-Z;7!GL0lo9IMnhs;!e )qb`*-^CxW` zr)1OI#v^d|zw8~2GAC$z^cO2|IqpW_reCZDcwyhW*HrpI@v~h^ $ zeCNhQIS$*n^z_4HNTV6P)=8S-Xx7uWzT(&GSAC^wX|K1-PH{+0R3a#0vxd zUh}`eAKK)c=7I$AGhiQSvA}={Wxp?Gav;=y`gLeXzbD~&0y)j*JAcv0xi=o`@t)xM zsUy4B2ruh!leo`xKpO~5>4Cx6rb+#GcdVHb7PTiYy9SYwL58>RbJ>#X>h;w(yNHii zH?bTOK*ty96z=rxe*uqsq@2ubev1+>AFL1OzzR>TM!B=ITz17Uc}~v`deMQ!fdPr8 zix=2Gx%rSA6oed+`?%HFK~n6ufHwkOS5x31bSt6zC jiATuhtillm-1*h=^}90zJH`bFb1Um z^tSnwf^@yc(^GZ!lWm?wF4wI;rpX(S^7!<1!0R<@D{|!9d?a&e2;q`=c{VpTrW)Kk z4_04UO>;&>J=q`C&iedWDf}S$#U4H~ztfGCRm|_@N#&K`QB6Sn^uz0}{N<&)QrO!7 zeFl&2%j*_{fnMr+&T#-|69k&Qd@gq9ZG E`93yFcD#ZKwzBbP`fqW4&VFmu zo?5S5p88&eH>l&;hVt3WMHE@uYj{CG!{ZPk^0pjo@5aKAAO~*$%TkV&g?H;my~JYy z67l_mL<%PQF9p6n{uhZNY)xmcpS*I?(KV9G_KD00-Qq%e)rO*7<~%;83Q=Mk0m3Vk zBo3)gd4i*>Q#_W*z#H_s6BCgYMTi$CSm7rX(tOd`lZX;IO1+xy;YVM2@H%q^F#= 6&tH8~khN620E4HRem4>ebTIB8?6IO|%cJGF^x zQWD2WJd@Vw3{m>48dThuc(AbQHHz8|PYwR16ivEu3f9&z{xwnc?!(^R_WD$`5?Q>} z=HnPjDawV9bab>49WeqFTb}&jhn(j`B!O5@wHSi3wPm)!nTWp5FxV&3c@7=QRwd_? z3sT&we%N?#!GAxB)r>clC^_6Vq3H#(x3^9m*}tGSdJB4eq*~1=E{}Lvt-krk;KNG! zwrNCc@u50U+HCe$C$}{o&FB>B#87BL-{Bq&kNj?iXYm!_F%n6aybm43#cf@FWUTSn zZ@^W+qcolqe@DKO7eu*97bAs6yYEZ%$Gl8mK*DWngDG4P4Co(h#fG1I7y +25neY;4oVh-$q#4bBagE%^6_OsQYXv2)asDm-iEOXOBk1{Lzcqv z70t0@n~4eWP_nzbw!6S>od!+Ulig&D9ZC%4$SUu0G!xOuFB<-7?qDjl=xsQ^C~zTk zGjf0pu~kp3gU!(XMby7)=gu2;#@0^Ym)-?UVrg@B0l6#`)_AZJC3PJm{@Wrlv1FgE zKE8@}$%Kf@>$&0@f(^d{ChNXOz<0ol|5B@|WW>ZNgnw# 5LiNZtI|6!IP`&iqvLL dH!(=2HL~b`A$ 0~Ln@swQ1)r5GoR3?+_$(N-9IZwa
eFtQM*$+o=MgB 5ok9bnRw|Bn=G9u`4R4!zcc-|{uC8_?ft87g6l>9a$+)UyK0;29>nc#@dx8bk zr4vr+`S^~SeBku-7Wr grG>?3qcQH?TFep=skxZ9fNU#4e zZ+Xzm6TNC{la&x%xgkuvPcAIvaMmk3YkjH|_CI;*w{}$&hza0u67Wha(29kvgJGzA zBr7ny(bv>8)ob;*ePrYrFsW$X?o3%uP>1FhXx75em>3v*>-LaK^BtV2r%6o2- O8;_9aHhD%>pj-1sV zMH9mmO_?M9m9N21bhHt8n&?7#ED%`f_jG e`F5cD3 zmJK(s@?KY+CB<)q7|T)Jm0AhdR4qyOc$XJe!GaC SrX`VhhFnz4KN9zY#wfxxMkKZXzxQ><@`s#j zFiqQ5iR;3SYAdK1cZW~o{Mml;d|5NsxxJ0+50|i(@Rvwq#AUfM{>W)Cg!brBg?N-i zN3Zl1;9{Wl@`;wN8y%e;JX&iG9{5re&D5?&1D0Hk{U%8X7Dj@{`C)z&8B_c4FbB&a zO$A87`_#-jO)@#OX40L6ZhgW!7GN~Ya$+bkO0^gkMa%tRM4s4uv3De;gbK6ld|OEG z4|PyM!PC9w=0w}ZAmXmW-fd%IutZb)2WqrDi$ztU*Uq9B!_yEAZ<_P_-Nhlc#75ya zkc+)_A<6#7Zk<}%-Sh+`;p*&LMYEpiQD*7un`dP>5Xg#=zVhBhi_AmOTkX?_|9a)& z&}z=At=3Bde#kwBKEw4-USKFc-&D~I*ouIu
zHtp$oG(SK414~3iML8=Nk)}eog@v>4yMMFs86Y{4 3UQqXwqOzh=k<+65T`}n+{VwD5#nke2x6( zk=v|pP7DCh5fKl7ub=%ZkT{pbmY*R(UTfa<{T6)pl;11Mu6m}(*^?V9s$PI4qWmA5 zysu=|ZxiRPzdvpB>HYfy$KC6Thf+D_CD98^k0!F+92|6IWozDs*8zbAoHN?8gYS7k zO5@_QAU MMslp%e`J!qnWlLoi; zrSrf%Pp-@@OMltxO#}oA%w4noce5OhTJu(5y?rc#^$^yxLo-jgckj@=tH7q+PDj)o zO{1Ohw_5x^ItpMG`h{O@L0-?@a+$DmvZ^qh-;x512Pvf9@+!|HczzdBF#hqrgZd6| z?3T#}3m+6TP@K+jJuoSNAZlnTtzy7}xfDT@F@DAkpF_oy4&KKYusf`3+6BqjZq0k+SuXl)MzWPL;`+J6?b|A(p!j+(H_9l(XaVAC( zAC1^vY7z7aJ NRDsYEA%w}dY;C@o z40HQa6x?&<_e9nLVDcb4pIZLbwbkTkKcxAVXY=50c4Rm*MbW@s%K9rmm}c?CCli(> zpvX`)OZ9H?9*AtO0)H&wX?gesQP!b-Cxga^$4?B^BRv$$K^qpds0Erh)#$-2WqG-3 zg*n3HP@b}1QBk2!EnEw};Gqdn$ZskwEpo_#?>0WB^6){IT&X}}lrOq;)u{15b0Q!x zIRf4n1)%vdnY3HKJN!TIb60~t_h+B~c9?{QA~q?lmGbF(76xQKByfk*VZSLSWyBXU z3(QO>$ffn}!73G)@Z;i&FEw&R*iOH^REUzreNnWTz@cYMOh@NUeR6b^xtt~4tEQ?t z)p*nDwoLBN6;L&(q7bpOJZ$$Bitv~wEZk95U43WbC_};AXE|eNh({m|CLQ_90~4)Z z-Izd|r>%%LT=F`PpZGG7Tc;E;P7jvuaqX6QT%ICLvQwFG;fR+Y(ilD2Ujto8;1NE3 z{<*S9bRTU5Du?uzO^LZYd%#~q{#O`+A+yH{HMbakJEkIr_w;p4IjWk7tZW`0y91aM zI6OYq-?b}E-(F}z2Tw{(ml&kgyDFE2C42BTXw}C7L-gX ({EKS~c?E+H(^RWBq&|Cu1Y{X4K5i}?0sKvl@IaTf#QF8o?qObgp?QCuB zZA!B6orQI>LN`nRf8E9e9>w wK^4)}j2;cjI5)OW4_fdK(yXYkm{RwL4~qG@_0 zb&d5Whg~fxopclVlUQb9S7%m5U0T+;wc=Z&oN_((@q_g!Fd76${b$zYZy3B~oFhWU z?Y+|Wc4ZekwLU0>&m`km>cBwxz^JIYw)U Z1ljl(XW|pJVp^dybk6`B=240J*uI1J))m>Olbl z)A;+sIzga~admmtcXrTLf8}7CgFr#Y`1VUs5ay`Jz@N4<&0bAW)Kl&%Pg=liK7K@8 zh*RzdMmET!Uv{++$D>6bVrAn{Y6JtZ1t^P>iVBSDD@joYr86*^LFmElba_gg0RG@k ztnDg9B$y%e=Z# K0)562uMTIb-gB$K<8^Qq0ezJrIs0bQ) zzuQZk4 kXKPNZ$9Ox8D_+6gq(TwV^f z22JC#=5|Wr6X4+)>*(wNBU0bY?EfO{E90u(x^7VvQ9=|1DM7kB1f{#XHb_ZrQbLqQ z5Rh(Ay1Tnk5G17brc=5>LOSl+;5pAZ&wJl{zv&0~@n13Lm}87N7dC!vz~-l Feo^HohS&Rrrzx*JfL}n1+XHnbY3_N!=P~9p^Ek#g8xu4gSjEpW? -7w8bCCyiwdn+$Sie8H3 zwcw+oCumpZaV9zzNi`TbXX@ZNQBql_kylwyE$punw-hci0kebT-XFLZHP52^*v eUt0bq50SHuu>OJmDKL#4wQ7J8x zS_ma%e-MDO&IH(W*t_HDIbvvkt|b32XZs{lHrwwEoLE|#XUvmeQqt!@JaSM8C=Xx? zz3_kiCnF%@r3HD#2R{!LK*VTMz0Fb1lm >dJOL z-T3O_f~2-aHQfWM)inN3a9zO&j^L|KQiJ(bLA87c^Gn`iux|v>VX~&dsg0U!FE#IO zqnFeY$R|y9Rhs_%Qp5=1SWwG3UT+bNIh@(vTw1C#XgzCa@PIi!q62IF+h;-!xDKzF zWt#5>4J-@y7?s6RWu=Hn1v2F(_599`=5--%`zsDojs}ZAB4ThKVwZz!Trt@96xBlU z-Ms$goz5VM5KAK`dmr&3 bQ9lLDbXR>wBz}TaOw_#ytMg zeG4!3^mQd|!S`zje|!%#W_~kGcH5X!wi+$~Z4CZDY5=OwGiv#eTG0RsCddWQ9+ky{ z^(xJ|Zr_5Kw5>c9x}X8B`WESTrk?VknNiLcef6u!J4v}I5j?Z+A(T2k(RME-LCras zck q4okB_i< zPu_(~I?F9GqAIfV>TgIj0IYHZCNU)B@j(2@lcW!vf+trZ)}P>|q_jTVQ(nRG)~>8r zE&n7}Wg??EvWmowqrazTsHG*LvEdA^a7skH2?igH ZKGUmYp PeIc%Pc>rGs{BWQjQ;v #j&)b~(94WJm2sKLX-R$hXbgqKarp`;pa zqX70TZ>3#`*U?f23=(p4Ys6ztl8mNdjUjlwuZhqzy7EoQvV;^f(QFa$`41kiaHNFG zRHBmK 8@$_P)LN#GU 1_ +69bHl zoSdP3OF@G{Ko1l0ZcjHhSig(~chR($NbZJ)KPxC** zpyoZhj**{~QkiKuT7)Wu#($FL<){2So2tKbx0a{tF6nOu-}xoJiyYV$Z1mRj!KJa3 z)_J71#?+GjF|s5HWahpkN;H`~Cf#{xbYqyj0_x;MV&;>~L3YyU%p;&sr&Hf?dbOw< zD}A-dy<`C9{Bwh6B&DCr}fTZKY| zab<{#NTLnW7Y K6p3UK$iwktKEjPtr+UAN)iGFt)0 6Z zXmte#Fd(aJxWxc_$3QDGw~-&+m5lZp3wpOHr62Xqz(c6Fw_w;4Nl@s&GkpNb2$ lpWx{30KA(U91-NpaE+I FlM`YjQOg6%_=!?$+!7%Ck?}o`ItN zfUZkHV3VDbv)1F%2&CNuA8s~;L#vI-r+su(5Dm>9)aDd`BQSr2rU`;vOS%Z)tFEvN zktm?JfUDdYVRW2L6az3SV7X@MW6U+*g@Ckq9jK^SNtA982@P|IdwiaqI4%IEy3Bk}8%*V@8U&x2XTRx4qQxzyKJq zRj?UJ-ai=Oz)|UF1$JxUZeX6{v|0m$tA2x)$PBypxrnb|(jVCMBf$i-8!)+L7~lw- zfXsv4#YKyE2MnLbBR|#nkJsvd^#Gz6eRL19%&ZNF{Wy2x|Ac<>A%*rrZ9Js}Anzkw zJGTm?!+{0m4v{Ft>-qwV5;%q-8cIH5Wq6!0zOJNtDYf4yo=1~3???_g?0Rz5)BzCM zbjrf^W%yY#%p$rX&k7NhqV{DCZefGd>4gGX4AcU!xIqz-Q*eFKEHv0&0`D^J1K`*M z=n_~V8tB5J-*~2lrl-FICU4+s0VeN`d@U!tqoS7+nvl5a>oCd9JpybV;4tPl0F7z) zM&M29L|!J4Fch2kt|NXFH}E?-IgkQtF{CmtnYS`H`o-U&lU7)XQaZ@xfZ^@yk~g-w zOB)+lPcAUfG$+54k@j5gV~aH1{%s%eXCJvFTfuoeVGOQ~SaAui`0y@dBKX-Kk3GkW zppk|Zws634Z*JyOQ52BN7#Q%r={4@oD!DmW-_p{A3&ffH0LI7BdRu~o FN-5XbRI5viG;8GiZG*$F@>iJ(~zB^le!Qdj;p{*GK+DRpv zB0Af<7L>4vs_+R|6Yv0P)<{+SfzoSeAf#~6e#4k$TBQGmA$fVNcMc~T)mi^L9$nUJ zMmzvM$16Df3FpL1m^=gHx`m}E!-=+`oQ6X^;g1r#_$=ts okRuP3HqPKQ=3hef&D~l$*y@?;vYMmpgFmzs0E92|UWKL?(mAv{sCmy`UVKY4n zx3AK4-yFvWV&(@Jz$sGxVAyD?o<_BG;cV+^0faL;gqE^M=NLIUqYw}08_JzxMBjf# zWjKI=t1FttCUV-4@ce+=1-Vaptfc6}tF%-@pAfgUjs)nb!MK<{O_!T~#~^e!>{hiq z*;leGYzw>;Ne2FYSskTuVI{VcsuvFXvi6bcdzqXMyas7UgLh-qu~V=9jqfN@%WP%z zb$`V3)~c=-IupLP%9F>WC=zwCq~6_{D5$q`b=ujY-aSW)O0+N{db@~?lp7j=!uswu z`23XJ2OGXSWK%L&s{9cK+)<}6aa>uylzZVpUuo~7V|6_Cxp7kn<$-U6lXSbS2LBEH z$Nj;vzP*_sfRG;baL-7}Jg3T9LCyN!zGY-wQ~dt@78uZr&uLED35Mp3FmbDUHkvR} zd`lNXzN20S;?Ufl0uhn<$q7?sb+wE%?`Yj`JwOaCE~pC7b!kK575DF-|N2!KN$nvt zWMZ5+n-^g%1Gzh5LaZz`QKNryetJ6dE?wE7;yy8sd4wj9i!XZMPd}f+aP=as?4Tyb z`^0?MUZnF6Hvm1H8I4|_IvFd@0y?;2{(oPS!RMk5hG_US+67Coe` VUgJ9N47@l!}t+CV$mNz zVsKmE; Ld3;FA z;bXi{xKvQd#a&HX2;muEqmPN$onuTfRD)Dg7K&PYiSxe)g0nEY7=~3O3LF`E3fcyS zXq0(8EU8p4jFXPu7+-9E!bV=GQ{L-Wf@pkGX6yCe^#tD<8Gf}{MW6I}Z{ep)b3R*q zf8!>8ahH{+S@3*RbCw)o?s32Nd32mJ$5Vru 1qm?92n+iY~gkSWtRBv46en_ zZd`h$T@SAToD?;JdK72|()r3`7>i8~ZMWbyMULbWL|#E++#0pfj<36rk#DhyNADpy zsmc;jZ!Gm5@_ip=db0n1L=&=PhjtH)Eh}tk8Sb}pcQ2@{Ts%9TDJ#%z ;?nFXCHPTUTMY`Ki)!4iH^woiUyi5NOr=5S~DGT(4+ZWIK&6n=C7{7h9 z%x2dB^QfW6$9pPZ0-T(@`-4w3N?cqquw__`G{{3>;$M^^PKFsQLr5nfX6EMS!a IF@+zcE-4&JvS|b^FN~Ltkz_q>78DS-a~;B}Xti4tex<_M)-<9?}*} zFa(`$D9v8BRCn(PO9~13Z9ZI)`N$_Nwq@YB$a)F_+9(WIZ|5x+R>$>2z_@3l{MXTn ztm9$%>)!xFadg6zS*$vdF5#y&TWjA8MgtR#NOmM-`ljBBZoW=ND3k9b{URbmOSFHA zfq2y26C57HAdg6S{p?RWjBeH65K@Fvwp!C1W pG{y1xFkw!e>k<3{(G#ju_ID;iJ$(^FH& z-G*ydIq ZyKqH&jgI2Y~$W_NV{c;R-u%k=!YMJXRYKN^@NOM1>2 zHYSZBa+l7d^VwDxH4=Kwj^bx&keTiP8RK)1K7wN}G#UjLgTo7`7-dH2@=p4mg6%Y% z=wVb_BAnZ@mrVQAtBI>VKFj}WGI`F@-)KHW2ZsJqT!}A>;)^QEAs~n+zBoqX?J+h^ zOpOA;$((=5hfj*@IzvIi)LR1D+Aog3;FBc#Y)m=Jg4`Te`UX|GRne M-7iz%UnhNB(|eVcRsz8G_}I7VacYpvtS54kqi-)7 ziaF4{J|Vv9vAO3;E)*`#|L#{8;g 3SuzliVPvl>(ccXJN`FFyx zl=(a1)Z5Nm%5 @q)Y3WF>2XgpLSme3}^;t3Ed11%!; OTX}eh6`3=512R zFc9HWUwayvB;jtyP%3@TD&E v4|QI&Qh>WC4N2C9X_0dTKy6 zj@rLkA1XH`*0x}I3AxLi0><^ME>PBu7ZqVcGp?3Fl`U$2B$E1jzDD(9PV*EF8Iswk zuN3n&^vOsp3$;7k8ubWu{NWq>Xl>{zSR6xm2k!5Uv2aU*#Pd~4Ya1JhW!oEwHPX9U zqm2!etOYF9-s}9mb}#ExZ)~^svZ(^Xk#gQX01 %_h?S6AHeF|CnYmB2H7fo5Y4Cr7(H8v`ZdpI@xOq^pgQ zVzg+j3bP21K0vNBt1CA!upr
G7B=)Y`v=)?4ZiOdJmOBfW}B4u`UCmJoM$%Xluv zi=EKJ&z$6;C!?i$G!GC9X8PH4>Pr-nSC`gR2!@D#-7mD&t&F)iras>hVkam((=o5Y z1ooQv=dPnFva2)A^e(p;wTQ}a!0r)p70j>KM=6I8jd56hDlaU2l=;H--A84U9s)3+ z4G2A!XXmk{Y9Imw%AO_Pd~4EX=?DIIs|Q}Uv;gP_OB%v{xHUx&sd$}nR}g@*Z)oFD z>vL>LD3};zT;>5X8O0;T+r-?~sEc6IxW&;g{+lQ``^x5^T6pk#_S-kqIG#YgF^tuP zs;ulweEJL@kS15_+SFS7QJ_G?+M1bBNdEy!p$a6UUJydk*kuwIMZQr}4V3NckgrX> zjc3%_P0Tc|e6wy+hU3_z*>EHPi~Pv(ARC4j+)unRBCc`a8Weu8ttav7 z=?hoJ*pOQ4ThZmRU##_|F@+Wxu8Nw%G<|2dS}TVh3HRoR6Kv#rZM{M!kG8yg#iue8 zFg{3)Zh84TTOj;8Fh4zwjwcimUpU>C$jDBXlnv_We%@^@92B_M-SN>7?>@8Mbms9c zHwc7ac lBwZ^ z)Zr@pc)YUF+FFHyA+LXp_aO*N*#=^?AfBo|MZuwv#z6k|Q51Wl{;f!QT0^E**k>6G zk=)Ib@VI3HNEQy1HFX73&aShgn}FTqb-iPuW?D!jYV1c9Uz-2>!kC3 @n*CxGaPg$gVP MIu7f@c z->+Zu!Q^<1o@&9cLg+wCsaCo8^S4X}v_@K^iMM5qLOC`uZ}~^CUInfa_QT!9ND<)| zk`8$$rq+ Cs|Cn)b=h8arfD4^T}li?<3Jn$3Ady}S~HY8xLJ@fzQ|IGMfgzaRs0@7m?hxw;q zI) 7nSqL5)Ff{zI6qX8SNz4FaW|a-o-Ywy>q@=_GRHsxl zQ7xjQ(+;{KBkVq)DCtgX^?bWZcdx^=t0$wb(0npSVy@vtyOh)`)yn10Nh$2;>!Y9) zQD3V2!Z8xt<+s`Tut(}$Lf|+wKRZ(RppnR0Nd15nToa}1l-%lR{o 6qh4B5`7ISJR;NDW7J#(f9xG&c0Z#oLa8c6vW) z5;-+REHM19`>VH0iN}PP#Hl7keWJlBiPYAtth{e@Osg-R`@J;3JJILpH@+JLE`DrU zpL-K0O2*AjsHcT~f|?J=t&_M<|4MH-Z ABo?md3_@crY-UDnFg(LynQN z*i8-Z$D%MzwgZpxAYi@pZ)NiHHk3D-qXeldlro@KbfKUeQ3zn!ydPjR_iiE1Y~fRA z57rWH1&GVPm*GvU2N^$gR7~bF_XQ}O?n)`)>h%z zu}rtkrrRw9JDYyA7s k zH{(V#L5V(A2nMcy&~5wz5TMPJ<*;3>m3wsOzf^##n?8R{)%V^^-6L5?KU@OtqKN{n zbfBM?vw?g>b}Ec!G# GNXYYIjz zOZ~m#WxYCy+hFv0EIVBn=!rqI*}m;%#QU;0jsv=~zY4LAF;Jeax`E7pc5(Wk0t>tR zyfQ7D8@9W*oDHTb$0eN2Z5B{=wYNu1Jtr?_U7Oqk< Y&4Alk^?43$%4dB#G9D-pCG${d4(!-^}M$haFeGd?8u=fND9z zv@c}P08(j}r*kal;!+O)xp|E>wQf8^dcLs<4I)TT9{hM{MX ?>*7L#2~rdC{6_w)Fu{jNmXIhWwi z9We0J&+NtdITO=7AD^j=g(s=dFbD*xC?D0O{8|BIT8)%H9vfp$Q{{cgDHf^A%UW&> zPO;*5q%jvO?L=ddQAP@TOeP0AlB}T}Vzvxwr_6 ul7ThjjbVanzWtQ}r7Cs?E-C0>LF^(a^rE@?RTBfA#JN zvO~X_!(|0Q73=fKkhZic1c=bvTci2%;yG;TZUo;8>q#tgL7?pT-rsH|5c%EkTOAu> z(U%l$`Dm(HDbXcKd8zl@_dIdf6J&K|8rG0pr-uV^G(V$ul>ZZuK2M6%3tZZaTC%n5 zOLaqnS!%b8lo0@E%mtQnp9s)%l y90s-!Z%r(%ct@H&76bAGZG Ud;Qn)LjwaIP%iJ*y0}<+sBx zohgUxMpKj7K&pKg6ju`ey5T>s<4@9Mq~DtrmT`v z0UK@3|73Qq%@aH%b-pv-0fMgO +f+REuH_Yx*E+WA1dtWD26wxBMKXRX9;1K8}t_ZX^s(M zO}`+$4^jf_IfS>LY~QaIG|#|a_sx2T6j~Y;MGnd?YK050UL7qhQ!+9xkR|YN&-Juj z(*lP@-yY_ws}I@RzxtL}6UKywQ#NX=ISNL6ui!Eg#dBIv@TZXecbVF*9u#~I9+q-B zY?*$S{?N^OY;L@Ce&VEHZoWKhDqZg0-JKK@Je-CaXb8dHQoIcXHOWA^6|X4gvuA_* zzh9c$*u+LTl)PDQF3=O`?#$(PTE1FI2D1h-e@@@?)o92>%6spW?>4H-Nz`KE&i)!~ z=#&7JEJ{m`W;-=FPzcNZeTEx;r`?GAvv}eTzt?boJTuE{DV~7p#^ZD?nSaJd6zzac z2Hq^&yMW?Jfl2#LDQ?M-f5H@^lmUR@4xo2}01$xA@vH9j?r*oaM@)ZqpY>{vR(qo{ z;;&s*Q>IuPJCXpHj}jeL>mttZDLJQw4ysZ_gmpdL%xcMhJGHbR3Sv8tlN}mkHUOCd zm)eAcGLA0b{iy$9W_1uwq7V?Np1*Mp so!6zQ z>yCB|JQ^bXCm8^c$65V)6O5zf3eVANTnKv0pl4B25@*=PCAwvmr2YR_D_)G{99*$D z3K{rsRdB1~BxT^iO7N`U!L!SzJk?pN=N{7