From 7205c6f8f02fd2123d2e0ece4a73a808285465a0 Mon Sep 17 00:00:00 2001 From: rita Date: Wed, 10 Jan 2024 05:21:50 +0400 Subject: [PATCH 1/3] mashkova_margarita_lab_5 ready --- mashkova_margarita_lab_5/README.md | 27 ++++++++ mashkova_margarita_lab_5/console.png | Bin 0 -> 16481 bytes mashkova_margarita_lab_5/src/Main.java | 85 +++++++++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 mashkova_margarita_lab_5/README.md create mode 100644 mashkova_margarita_lab_5/console.png create mode 100644 mashkova_margarita_lab_5/src/Main.java diff --git a/mashkova_margarita_lab_5/README.md b/mashkova_margarita_lab_5/README.md new file mode 100644 index 0000000..c86b0f3 --- /dev/null +++ b/mashkova_margarita_lab_5/README.md @@ -0,0 +1,27 @@ +# Лабораторная работа №3 +## ПИбд-42 Машкова Маргарита +## Задание +Требуется сделать два алгоритма: обычный и параллельный (задание со * - реализовать это в рамках одного алгоритма). +В параллельном алгоритме предусмотреть ручное задание количества потоков (число потоков = 1 как раз и реализует задание +со *), каждый из которых будет выполнять умножение элементов матрицы в рамках своей зоны ответственности. + +## Запуск программы +Запустить файл `Main` + +## Описание работы программы +В методе `main` вызывается метод `run`, для которого в качестве параметра передается размер квадратной матрицы `n`. +Создается пул потоков `executorService` с использованием `Executors.newFixedThreadPool`, где количество потоков равно +количеству доступных процессоров. +Генирируются две матрицы `a` и `b` заданного размера `n`. Вызываются соответсвующие методы вычисления произведения матриц +и измеряется время. Результаты выполнения выводятся в консоль. + +## Тесты +![Вывод в консоли](console.png) + +### Выводы +По оценки времени выполнения можно сделать вывод, что параллельный алгоритм позволяет ускорять процесс на больших размерах +матриц. Для маленьких матриц лучше использовать обычный алгоритм. Для размера матрицы 100*100 быстрее выполнился обычный +алгоритм. При последующем увеличении размера матрицы параллельный алгоритм позволяет ускорить вычислительный процесс. + +Ссылка на видео: +https://youtu.be/ApnSEO0ztqQ \ No newline at end of file diff --git a/mashkova_margarita_lab_5/console.png b/mashkova_margarita_lab_5/console.png new file mode 100644 index 0000000000000000000000000000000000000000..253ea751339dab3d153cd8af8ef6826459399145 GIT binary patch literal 16481 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 { + for (int j = 0; j < b[0].length; ++j) { + for (int k = 0; k < a[0].length; ++k) { + result[fi][j] += a[fi][k] * b[k][j]; + } + } + }); + } + executor.shutdown(); + executor.awaitTermination(1, TimeUnit.DAYS); + return result; + } + + public static void main(String[] args) throws InterruptedException { + System.out.println("Сравнение результатов\n"); + run(100); + run(300); + run(500); + } + + public static void run(int n) throws InterruptedException { + System.out.println(String.format("Размер матрицы = %d * %d", n, n)); + // Создание пула потоков (количество потоков = количеству доступных процессоров) + final ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); + + final int[][] a = generateMatrix(n); + final int[][] b = generateMatrix(n); + + // Вычисление времени выполнения для обычного алгоритма + long time = System.currentTimeMillis(); + final int[][] productSync = multiplySync(a, b); + System.out.println("Время при обычном выполнении: " + (System.currentTimeMillis() - time)); + + // Вычисление времени выполнения для параллельного алгоритма + time = System.currentTimeMillis(); + final int[][] productAsync = multiplyAsync(a, b, executorService); + System.out.println("Время при синхронном выполнении: " + (System.currentTimeMillis() - time)); + System.out.println(); + } +} \ No newline at end of file -- 2.25.1 From b0d3c4cc7a56f7c82afd34ae8a8fc835cf646c5a Mon Sep 17 00:00:00 2001 From: rita Date: Wed, 10 Jan 2024 05:28:38 +0400 Subject: [PATCH 2/3] mashkova_margarita_lab_5 fix readme --- mashkova_margarita_lab_5/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mashkova_margarita_lab_5/README.md b/mashkova_margarita_lab_5/README.md index c86b0f3..abf5470 100644 --- a/mashkova_margarita_lab_5/README.md +++ b/mashkova_margarita_lab_5/README.md @@ -1,4 +1,4 @@ -# Лабораторная работа №3 +# Лабораторная работа №5 ## ПИбд-42 Машкова Маргарита ## Задание Требуется сделать два алгоритма: обычный и параллельный (задание со * - реализовать это в рамках одного алгоритма). -- 2.25.1 From 12523aabaf9db0d4210e18f037640d27d70beee3 Mon Sep 17 00:00:00 2001 From: rita Date: Wed, 10 Jan 2024 05:43:46 +0400 Subject: [PATCH 3/3] mashkova_margarita_lab_5 some fix --- mashkova_margarita_lab_5/README.md | 4 ++-- mashkova_margarita_lab_5/console.png | Bin 16481 -> 16351 bytes mashkova_margarita_lab_5/src/Main.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mashkova_margarita_lab_5/README.md b/mashkova_margarita_lab_5/README.md index abf5470..15f9c0a 100644 --- a/mashkova_margarita_lab_5/README.md +++ b/mashkova_margarita_lab_5/README.md @@ -1,4 +1,4 @@ -# Лабораторная работа №5 +# Лабораторная работа №3 ## ПИбд-42 Машкова Маргарита ## Задание Требуется сделать два алгоритма: обычный и параллельный (задание со * - реализовать это в рамках одного алгоритма). @@ -24,4 +24,4 @@ алгоритм. При последующем увеличении размера матрицы параллельный алгоритм позволяет ускорить вычислительный процесс. Ссылка на видео: -https://youtu.be/ApnSEO0ztqQ \ No newline at end of file +https://youtu.be/Vy6kO2mA8Fs \ No newline at end of file diff --git a/mashkova_margarita_lab_5/console.png b/mashkova_margarita_lab_5/console.png index 253ea751339dab3d153cd8af8ef6826459399145..8263367f862813f343918a63c84883d90339bfc8 100644 GIT binary patch literal 16351 zcmd6uc{tSXzwj$6QuZ~=ge=*{lBEU{g+wG_WFOhGPHK>4O7_9D*_TPORKnPc$TE~| zLS^jBgfNz|4r6AXQQz z4xBK)eChgu0|!Bj9|@KtjNil@zW4mV0dS%5CA}NLj!QWdr-9Gg^d^M4uKmWr50kF% zFOw{gr<6Le(Xk4$pCx>31$Zyjzbw6`cR0<@ZQ^r*>|whzDPK*tP@&<0Uc+a7RnN#q zo&#$mUdX5gN(ZiWnsU$XHPI$vXLow zqB%3@z-B>41|X=At99IsS#r8txq=m4q^6^Gql>;hfl&QIWzh&H)a_oZ37>NJ`p_tk zYQ<;y;l4S+xgM#la8A48QDL8^FM)dJ7c}L{@I2{DS45qt!q(i8GrP8s^Wel?dAk)? z*hK|la|w(<`@*Q`+3YJjiw&rrpG|`2)6O;iDmoK3?ex+_r;vIsSUfOUN|g$1ePI5n zqF$~esDOCa%$8LT(&B9JCZdv5ecjRi+$a}?uF~lW6#2CG(YyF(3HGR-$a8JzT+2^u z!{Zyp&4RY!ku-U;y3+TUI-ZXHa@BQ0-SxZo^YP)Jhs*LxT3Hn3dMsh3F`;CwacaHz z_3MZE7#@@XX-9dvvqBhYrIJZMF21{^d;a7CHe>F7#n-@|}5ncmFYnVZ^TBTv4U9<;EujIWTG&sJ$qvu(U&f6m7h5q@ke zX?n*?^dYb!c2Ea=D+ioUJ{9-qjx)v%?vYxZ#8JzIu7CLQ8@8}$2d4~2SG%Vm#w;c1 z4))8OzyzHn!Sc4w`1q@0YD*b43mu2zaBy3NGOl_{(O|AEmzGMu_YwRh>z1BWgPES- zhKvXF!9@Id!@(!^aDvhM#v|IJ!yR4A6^R@EyzW;eeH2J2orJ)ikO{#Q(u3?1p_E}jeJ{i&)z;J zUH~6)90NHHgJpaUE%Qh*m*%yT5W4u84pJ&e4Y^-`Q#TN!F$IHM(DxQd3vFq+`rI>h zsC`BaYIAOtqh&zU^CaE*eFSyqYwLNi^`d`za2fuoc8$Q8=U1gi-bUrQVX;$k7~MfF zjqSNUheAvcP7j~`VBiul>X!b7_(O68FTlppxm=u3cE>&f^Hf>b$vUKfu3e}O1)>3u zNCUr{4pf5M8w(fahpwV(nypqIv`$^X-PJN8(qJGryN_>A z?@Fz&kTYuT6kfZ`H)|!kNnP^Lxh3ATM-Q)>)+J14;;ZbzY_mHU2*S(Y-5v$o^)Z+x zo;-OgzcA@`VuML%We3}INdTfz!0lw7!g5Y5r{Kk$c>Fta$43M6QI%82{Akq=qhyl> z)b9x<@VSO%%qS-0ScG{lO2p}ZmW00t$}Ysra;;W*#6OA1;O9wmSyO#CoMhFEqTRVy zXdP8E*C&FpOgqC}$o{We{6rB8F$;%p4%PQDHof1szJ2HmIpJS z;m$1HqRV3DY-$9X?V-BuF}`UIM6$(RoLQ& z+XDKQo@SfI^6(PIk$DbWvWu%W#}tTk)H#cF$1~}WK>1I?>w1kX%~Q*Xc8n@B*3TP zPU-pQ!Tlyk^7K+k8b7n1pk+BDMCoN;`V*s0!7byAde(!vUAMGo=CcHB=v- zQQ){Z?@Tk|J_`F~u~?~Bq_qO!YxaTO)~w76Y8rW%nR)Wt`(aWCn2QKJk#|#oH;Ou0 zr+RiQ9QoPtfO!!=$ySD6BK)AF?NU zw9IHcM#wz8;;2H;o;5gTI}*U;@%+VP?^!6mKGFG7L#2Vn)cW0*A7puyQ{HW3>M%^Y zxtE~8#P9Dxo?0n#cKwf{Zyi#ZDASTZB4l%y4-uXqDJE#(Aor`T0x6iywUQlnobrSN zlI_{?{s#38;&xi^~$9Li-|^H6@b+op1S_{FrPxc{3NP zX{3<3swL9=EcNAvzq;hgV|!wU*L;{7ad)fxSLRjcA%~pxdZCUlh-puZG+bR0!b8J8 z4pT{cIUtN(9$~%f1Zy4|jU7@HLu^~gcBI;4zs+j!8^(^Ar1!0QX2i-`8znym;NjH`FUc!sRz4#*C7oK88c3|Hd%Me;(~s7 z`zb89VRzph)~OFSq?=J6+=jK=Sq6&vH9g?S^l;bK`?0&8@-Yz8j<=4yc5+Tp5?18(1OrgRp7b(Ettn*_s1JeXU)OD#g@=dUzk-NJ zNWq>tPTP>o#0F}PI2^QDVRkI-CYbTn@6~Rh$#7+CX>rv_hXK8|2~?|>a(WLU216-P zp9^{)7NRERFFi?Dm$H6}XJK0n)>vIg8weP;>)0d6uoPh1|7}Ef+bQ~(uc6rfz^0Rhv3=)97WWh;KfCOID2r92+0^ENjoemg<&i)(0K(vf>Y zGDyaC1q<3p4dQG90;hU`=A6dJoGMe!$Cs;tgW^iD(a~A5#z=$N>9k_TjX}@e@cB&^ z4Qq-urGpzJNw4~s@P92GFXf6K88ZB&87*dHtOwneQW0Qdmzv?zl1~nez3uiruWF*b zT#xz_ZVtgocYwKwI7zLcbU9#r5`c*>C!H;Z^Cq7Gy2Yske7X4u3D(*n% zPg>TQ!{VtV9S9i9&vRD;t_l>zl#Te;Nr z?hILXxe)sRG!~r}#@pDJ{EaO^IJoA?h0lSum@eo#dn@?%p^|ljUEku}$Vex&evqq< z(%Ff&Zg$7ui01r>dOGNo^ujpjOhH@wyO6;4dp#0QHs|BnE{-<=~6H6Y;Su4a?1*Imx5Iuu<@fuAYSP2U@S-A{<%`kmUrfCk?y4)8ThWb-D$_| z=dw_lxEX?Wi+7-)k1VL)1KwXGysdeM$`f^Xp{`S82-D9Blsrnw`xHvlu4 z_$FzYF~s!b&$uy|jG}aSh6l7GzHACDSMn4;@5`(QA+#mrY#sgtoAxHlC@z7}zEj3W zsa;}vBD~!7z;4(!>J+gvo`(^&;~xDdL-k`x_%PyAobw75h;Zb+tQ2gPG7|RM|PHd$cXW2#8hQPsDUTOCB40a$K zs@Kh4o8K%xQ&y~p_2LFicYUR*#$Pq}meaf<*Vw5_SsCKHh#44XJt``nXm@(P_L}ON6GqsBUJ+Sk@Ld!`2jpvS zwH)l8s81coS`QLvE%WGy~IS=Q>VD2+i1%S}Q!lJUg65 zv?XZb*|h=V)t5=-r6czf%TK|j=1N<5CNX!7YC{TLwiFEE$~#ciu4OA^{aaS%kKuL1 z;*^yuWBu;&{8;Hw_cx>8t7e919+4_eTR{GPxM@$WFR?2NbtMaw{7GP_bukxkeG9o} z*1f(RyQ;d%+IN}L#5@$HyP5t#@klHWs1T7z>f5$K4LACe8^V@FlX8L;a&a64C2TJd z;Jw#PO+(H9Nk&7uDtkF3BQj=s2(fPF+j-N{{2>S9dsyofvbXP^>!Xi{SP&bYrBB42 z`oPmR^4jm)tF47fwHRp8=~3fTXHH`(wI19Y%emUL6f7OeF9}L-2q}cYfu+T4W!xjd zUmu?-Yg*5AQ55Xi8)SCPB|0g*>JjfaWZb>&KJ5QHRjj5O2J6EvS?5l}O(ZiT#G=96 zxKYz|=+}5#(w?bjuel4fV-=;Mds|5I+t&Aw+X-Ew0hDc3O&)hT`&?64V%7S_k6SlS zuO&6XsEK5^R815h)xqS;(3{9Kbbrr_m84*5%$!Qt=2H=0!$ORu$i1uu zdmS#gF7D-C zcB2U=o!u=SsFOZz0%ja;`sp9Dko)LVZ``+U=$-b7y}k4{U}ZzdUO6$=AXCv=D|7Nq zZ=20C8D>WxBSgs<t4J>C%`*>2kVEG7f_uz*#W3uKX{9rK><=7MnN3n%BfqL6XYy3;Mrdz zPW3*8M(?y#c7*#wxa<3!9K{=99PC$>7t$VP5N#8Q&TH6P*<&W8yyHu1E|(lRCSNM0 zLw>GGGVPU=a?YoxAEPIUF zGPw2kejILuv+Y>c@}DY6d@-y~XJ2f(H1m}^s`la6{68Z5x)ERevZ=`EQTjKg4dKkAzsmZ7vI*G95pFC&=)Tfh;N@WQF7C`0 z(=Cp!+C=q#wsSY~*4Tl`dI@uKdx|x;vrPfmD;` z7?x9QoE1h`Q)5V7vbY35s?O5IkfVhcwc%+oiaFcFiX_2Y2R%>oowFV;4SXqQ=u4)_ zc+6!aR-ilg-t+9cbk;~M!K3{3&oZygzM`0Owl)7@oxBQ+pz!0Mv7ntXp)+4 z0+KA#CX!1EmLpUFjo^bVy_WWUzIU(P=!@*LS$v%&$jF-ZBG(W5-Am!Ph{-2Hnf1cF zUVW6yT5dGB1$OT8X3s1F(1OMb!c|wF1J3cMDyic=9>+J203aEws0S@)C9y!kY>wk*O_|`S3UbP zBqC}QOI^s)93yM`!w)sr%$=;A97|hI*YkJvo&>{pS`%`1Y8Fe#eYHhKzUT_{49Y*% zp-Zm&wof00Nh`e^>U(BPe6CnqLv2??>E)n|+#IofzoT zAsdZMzOm`Oio1)iz%ynj-E9y$WJ~B!DvKN2{i&{%W2PlsIyvhkymn{qrF2AMWncy} zdVk9P?j_X(dKzBwZbRWsM9HU_FIU^f-@7gK0W4)x+mb7gwg4Y@%6Gq#1Oacv`645( z;asD@w%)H`!w}X=;!OpR_a1&GFby*rtrEt`4_kcBhf#Jqax)&F_HFA7#g;~PAF38P zP08R_!#rC8vrjHXuvjX_qQ4spCWyKTsNrb0m@BE%@L=#dB$s&U;zu6E+QLanU6v#~ zhNjY4S>cT#mXKW2%zKDpRkCVq9z6GRk8pD6e$E^c$^{s1Da(^wV}^Czz+Hd|h5AmH z3bfU?LihaeO0o!-N8j4IKaOqy({_}VBOhq<*)j3FTU_;lXDAstLpv&6 zV(kflO-;!vk|N^1K4Uq?vTs}_CJS|pfg`nE|JP29|9(Vu zr!ARqJ0R%lCj^};!!y^)(vWe%&I)Gc(h?D1e`Z%ejg+T4*yEObZiIOo8N^}`vWgye zg{_@`gM2sg*L7boA!lOg!quxM7VMYE1T@Q5TFkYcz6Zmi$@2QP21z2q>gv^XYZSY% zWQA$>YHs2GGJm>$5cYRHC`WO>9>nwAKuEmA=OYT6B)UpE%^m7e(mSTt`ufJuQ!$0p zJaIb_SX&G2_b=a)7cE6dpJW%VLpxI(+9nf&=YIa9LR7F|L$zxdL}lE=oQOE;J$~?8 z+D#s)$x_w^${T$I__OyovkU7ZK9K=1HusZ{&BDsUMEO(Ba?P>a@8He7qQym^B@Lbk zb@e~_E>oDpCP?7mIC4v}Q7ENWyT$O+<+s<872hYk?(tPfbTrD(=f8KNR$2H8)QjBl z+<`mGs-%%3tl5R#%@h+a|B&E(#Yd}Dkb!YH!$Se0CpH6WjywBhbxbdHD$pg~ntw$Y zG*mhUy250Xe)uc?8e(L)K?_H3bX7*K2T%@&t=gOPaLZX(Kj-?*I%IlOPXhcTc#nx@ z;Ee?q^WOqfRbTJ*V$DCJ%*HXcJaV^vtu%P4W!&^orhY#V8Gh=w{+q;Y&dA@P}yF335O5G~lO?gL{R#i{@7(SC;S9hH7aj!0Cn*0JFl>XdwGnMn6Qsp9P$N8~ zHKoes{D-4-PhtDb&XN}%=d&e`6!2A7EKSciYSTH50xDD(g*RdF5xMg!0>{Ox>A2&O?d{{$eN-okHTB(c~$ujUy;#ne?OqaAJ zWgco|NjUgdF zR5g;*#-!%gig4dst#TCMyKYcZ``MdL?V0-o?e}dQlxyZKVfG)`L#))9?Za|SnV8n0{SaR*>?S+*+j@4+yk!#Z16O3gK1bBqbH6Nv4 zs?>TbcPG(Vz2;#b+mBAMqYS8aaSCdqFg~RF@8T&x)AC&b$2AMGA?P|#)^Bpi@Q^sp z4XcFg0Uf8OvmP(~{|>CQO8J+AU{SNNu+8biXW>_&1|t3|xHBq0!ZQ0(cF($sD=6~d z>?-UY5;{qQb2FHPv+RGERVQg;{C^0uTJwNozvry(RmMBOcDiB*l^6Zmg|3dQ8P!(y z8`VeqE9f;c5ijRUtuT19DYZNKNlzZ<6V|du0@H){G>{0_(2Dj}3 zBFWqVQa$O%{G6w+Z!H^$*gPEH!Qn~NhwwC>6N4S)yko6lWlvpaLffwqtL(JZ&HP*@ zMl#$qJ9DJ~uBoD?!_fFAV{g9=#b(T)$Rg&2wVKy!FF;+Y44y`?NlDWA>S0?z`O9`U z#`cwnH>2m~Rvb)Lpz=#tc&JLUuX$xdPnemlVKQs-Vv9YLji)rx;mVmh*hIz~aM0eX zoZxC&)~<(3Soc>n{bvMoRwK-wDsBa?M9dO8)|_fgK<108pXNLMz=?cq`3T5XBF7Th zJIkmI9JS8hTc5kWELD=I`ID&I!xz69V?&B{FPiDfOo!UsS(ej2C}t9L zH_PLsI}Up5=rf>nCDF0Eu0Hd^*OAz+u!f2 zARMt-yhMq?b@^b++lK_}A;BP-6aP0nEK2KeQ=;1Iq257GkSkrS zIUPt5VEe622q5hd=RujL;l>SpKFdR^r{dbW{6fAo|INb+*K=lhKC2~z<2rsCEn{M-0X1{MjmGH$S@TlkL{<) zuN!E*!eQKBg0*G-0iMd3^DP*3wFGIwRWH~us0Kghf&`{~#p-XBcd~Q*kYHu$uT+O^ z<#67?n)R^D>^mL=L7J`Le*Q*>fo5tJ9ef2hjb<_oZgyYY?GR)1pr8pEIw#KD-cMt& zlJ#|0?xyawSq2sc@RxQb1+_@{-A3op&qjY9H{J62@Qro*IxoQK?vS*6rW8h=I>R?D zygm7qIX^-u{Yx(PGrP2tDPtw^0y@9y@)-WyJfO4?8E>FVUq4)rp+6ndVvPR}RV1O; z^+pwNwEO2&$^z48G@mu%(mbjpD{i zInCq-yP{q&=ya3w7e(9~G}m9P^*$q~*gF4>I3{O5Bf4jfZ@=a0ZhQ0GFQe;{G+Z7fPNwOb=jsR7leF|vh|bJ*VUPU{ZX(s7(zz@}br>c#^EX8`FN`|7 z{f5A4#P*>k$Y-j#&V{DDkOwq5YUE2ugI4V&QgBRe*8&^2SR*YkfqG!5bxqMViGo|j zwUE>EYRVd46yMv6;+jy>4MqIuCMHsXAoQ*`nJP7Hu9Uo|MOw8D(Yrl=uYJB{A5BN2 zXKPmt9g-O#^Nq^sEwmFNa$H*AW-oJQX@3Ms02^VbW(G&C9ZxY62LsP>NZQ;s>46cojj!zOi;8(7gYL2TlZbjXZbJp=Waz@L#^Q_?gXMOTfp@~sO{ zgHM5tYrdFU&vm-5?4{=c0G$!=sv#U?s0Xsu`iU3Rsgw$)JmVs6ne@#kLARHfKa|x? z`Yg8+`B6=jZy@0=@cP=Ciu6!51pb4J=>nJ$Aw#VYQog@A>TmK9`hg?%b402Yhh)7_ zmm|yX#%sB66@`@#i2L)|9|3G&HJqeFq`bpT?vOqCH1zZH5OS7&KbyO z@x|qzgL?b|>EMGw#|gg1Riox_g}okaQr^yEc^2ZOU`10wRn7x7eRjP5mA{ z`R97*-UpUGO?9H<|E?T78<&%ZNL(xV8;Dt|)gM*t>~0x~$}KwB_K2gx9Ue0m`{d68 z_?upq-dQDj%raI1JUo0KBK9u^bSf3@rTUjAIWxxlJBgF_LiSo1v+%m#MyLh@x_t&) zhgdV(?y%K-YY#GGg|P&`=H$M@j{&7spocPY0F^`+21rDx=?hP+70EEVfx-)o4Csm| zQ!;3KMTFCv$Dg?k4%)DsgLX)StK@zq+W!MP{oYJ2J+N(h9mR-KhL5}6wSB*OY9@CW z$*`T;jHCXi>Q4VrC;q+r8T6b`cXHH$XLSNW|I)Uje8^w=tF=|OWqP@cLuLHkuwsQ# zg{vd)E3XDL1;<`{ew041!!J{o{~^87hd#_;`SFh!2W3Pple)TkabPt8g^<8Iozz!1 zV!E;i_~0asnfFQ|Tr7B5a=8XJ>UGz2#o2#`%kS*@soT^O{w*pBC%!`}1oUy<2fc$9 z??iaO?Du4n`7dI+J`8+EO?{l~_#|XNtW!%8+)|Ph@g<;^MX#uHZ*} zfRcHFXLG%`%zo0Wpfh#DSv=!H_qKd*!t@tD2doo%I_{{UMH;tdDN*8xM;k~6&>HcR ziC<1iB+P%qslajnquVT-Wd+w_V3?}Ix#lOV!{0}|D$6YxLB^bLC;hCJ4?G;8_&N7xoiwgKt^bB z)fWzAJv;@E>CALFt){)s5>3zrw^iV+w*^BfohmSx zP&>nS{yv~ga>Pi5_y9ljy-*_D!jPtFf@8`JG6fVIf>9`wmXsXs36<$_=L4ikji zwabgd71IVI{kLmUv7=2P1=`*j9Tkg`rxLg;tQ)7THyx{^PxDg9KjE`>ezN^EC z48tC9+bu>cGr;@;+8nX|U|FMsnvHwNpQaVawb#^n@O500R@NKYi;Dn9?WMrT`eg$J zZy{lZ)&BJEzW0m;!D{gHY4Iws4DWCu@BT(C4YMCju#K@9N2mLDCR}dBH}NUKJ5^KV zS7N~$NHiOFeXEiy?&a$smZf_cM>npbYA~AlyXb$_rj};@x7ySYVUhvQWbKIwSkQ=v zSl6>0&*Gq$Ge3C406_!LPdUpiCc4KaJdO6XW9^a4r+&UK!MkBXVy6IV51a2bUT!*J z<#cUz(ejsHNk{Z-R{Bulyx1yR++P|s$691d3BzdYcN5%S7f=)f9=n#>ag~Qb=YpIr zI5^~7W)t&e38vJurMTH&A-aFHuzqOLv{Np>yClod(~#d*ym7kX3xJCh1CsQ&^M{;n zag>EdTpm(GyWcI)?SZg#7?8mJU;d|?Q{46;k})1OoWlf+0K4;kF*?&6^%LdiQGoK> z=0YBs+8(`-M9a75p$zU;(N)LHJyyqW1g?#E@j%BYo(0^tojkSCqp!7~^uy4CDMyiqLo3%qXZ|k&h1mSf`f; z9JPJ{a+(DDHB1Ej%$n)qhjdG`7vKAxZ)!_>_?FC?U-pB`%=hlHPCgpdeo}mucth`BkV4e;Y9XbW-Fs z(YnYyLYZqqEcxw)l|2t4nRcPRD?Vn?6_T**(r7aVrn6_wXh@kJ2 zR}=bQJ|nOUWuog?f6jU`o{qAZ={=8Fxp`l}&I?#Gf`s{mX3qG|26n36F%7U6nB}%h z4{#%1uPI5Q^xmMpCj`yFw7L+MbcIBe(C#{V6y-dinfw;~YQbX*7q$nXb-}&nyc~{b zQUB6V{$xy~JW+)2dK@`6V7w*7JWZavD|#PD$;@>1*Q~28)U5XeS5zX46oo>UJ|BzH z41Zm9bVpN$DppaXf-U_yY88A)J9YV&2JUS4U-`HD(8t@bAoYhYYB|zGtJg}3>^=-Y zc(aHZuT{PKQ#~kX*7h()MtgZgMLo0z1N7IG8xz{hy6E^k2%6gjj!JuI9%mQ{xj&3t zf9-b2?l`*)+>|az$X_WFs}7%74cQq5odl5}+Gs$#Lqg6F_{Y9u0~kL` zA0j`q$GB<2ckTq%%((8^h3l809u)sS9@TRI}< z)LU;VXYQ1-wrex`6Ohg1`tVhq&*v)i$E6@i?K~|Bd2?8Ofkm(14602{lc!MdF4S5Z z%#*opnT}W4b4^6uY-gzszqj&n`p(f&+Q;smsG+9T9Uwq*N&BOE27i1Q!QUSIw`VqZ z{Z5TsP6Ooy@8Ai-#K!~eO706!G=TRg`gq$-mvbW61@v&n;&zr!&o$!nD3F=`Z9se2 z<;_cw!GQc;{Z8gpGV6YTB5dSQ%>Eal;Xja6&i! zmUb?WslwV08i-G#+C=ur?gJidah${P@kOEf>~d_{m0wWtP>5UXQST?r%=1H;S`;&u z_s}Bu*k`{sZ>PbI|K2UPDfGIWJ0qK=8i~94YigZU>5ST{PQ)zD1R=29dyyrvfZC(^ z$65Si{n4)n6qwbey(E)g%2PtzNqpKT{96ZJbvG0g-0krl&ePGW}|{i=-eq6 zO*qHdzX*W9Yc}44zSx*LQ>^^9}2j~1>Lrv(v*C+oRLl~&iDMv zE6Vv3-DxIp0>hyDNh=b2Az!wf^0)Sd3^d_IdHi}`(s*iWY7tz7=Xk86FroV6pPg7> zOSsu#E=XFMuH5$M>F%vV#BMf~yb*FW(XIi=g(L)a*%ePH{H0ymO!dME_s*V~xb(gTz{Im&qxc%H#On$au4#E;7s*K;B|elM;2 z4nP*;wtVrD;FTBRIYw5PzZKck59x^&p)jnHsZSfHU|_-er-&1bx}{UKup2{--SdjF z**P0YuX=cxTEz7-+}Yh0v(nHp{fPa>>$y1wg*(OtN=1~A`fA@934ZI=Co%Tq_NJXLG(MZU<%RC>jwVudvf>?zr<;7*A`M^+XaG&jyXJ%I?>QSf-u- zJcd2SzwaqOWBJcLFVaiKd(oeyS0K5VN!7)_a*Q^pr%$S9#a%A1$QR}P+Xz#vd+Kg_ zSW_8xrZO~f4I?*gkM5NU}K^)<0WpHBYGii7X4VQxJ0FsN@E_|LTbSBQB-9lY-EhgU@ErAt5`0&;CXy95V2deT?z1 z9+u8n?8RGPLTA0Qz;S0UgOW7VDP_&5n2No7zbf-ZkNocAe_ipaM4vN2NYc2@+N2VQ z(PF`mSkD<5H9hhZXQX1 z`UVO3b=4P_B>sAN`5DCRP4URi>C(<)myh_SYWQoUi0EOIMNK4>PR{p+CVuzmH4m8( zKCP?UA~i-9ax(%kkYkakDFX)9`_^!EZ<+k_(ZLbeSfPuEA8~ z&o9a|U&K6fjJ1TT%+!WG@@0M-9{(mecJ-*i!|8v%Q#7Pu{)lB29MXgixw3?uUE}D- z*DB)1-an^y_Y(Kg-8fvasNF2CVR9;1Cy(e6!my)rx27Hp;Z7&Wl|g-UADCCrg@e_` zldt5^cg;hqa9SK!_DxWyM47Xo!M`C|%I`f62^^(@8TaTmq$D(@YGxD5Abdzw2kE^F zgx-6~4!+N`-gl3)*V${GefC~woDX~mBjcZWm&`fu-*w#yRZ~$QA*3U`apMMw;xjpo z8#iu(uzw5$c-a3$5D&k)apNhwqMY_vB0Kez-GU zZvNQ(c8a-b!d!vLaio15(Qq_T05fdwW+;U;dDQzh7&C#wM>dE-2~9)nUU5Zh-~t+U zp#V;AXXU#9f)dx?+9lyqH|C|k)dcr;PB_nww8SI02LscSv@KY+8 z?+$GAd5kp_l}PyA#${lev)6>VuW_ZGKN!6@O;&SSGb5jbER={caV!;0fgZ>ot28JiMw^2#Dg1{l zzl^Lp#v4_#@y}%&7$0!Pf3lgmC@UV5ia_=jg5^wJJWF}TQbW^x*e5xfs)0O_X!F_x z9;fyi?bV9;4RToO6MR<#p8^c|?il9ku- zlrJ*65tt>x!P%>}eRn2esHyKbsHM-F=qm4?brH?<`X%#Prnl$Zfvn0^QY6{(YgcxD zFX4}dm1E#(8M8HNgP#7cIR}FT?rDaDikR9=wMzrFWoo>gv^7hM&`|u$Es5;pGK(?N zkdKKDWl2ULNRHk<>*Hwkg-Qwx>uNQSnbO)Z2p^Ln_{BC3gtS1gP*0YeC`_`^N z-kI<+sq)6BX0F6WSzwnfM{Y=x1kO;kWCFyxE7fWwbH`ZAOIZ0lZAGowTdkfM{XIG^Fys(&L!mu`Vt9?MqWJY9ixt~?{?WuAu$u=#R4n)&oy zq@{VmNl~{0vGe9~yMOe3XN=${y}IHrii2~IbW2*BG$~Gqg`^`zlAUyGm%_}&){HD! zp6~XWvGApIWtOKME}mMB;o2(_vnMA^s8t!id5ZkK!HfnSb4R$emoFs~5x-K-rvNg= z`={pT<;S-g-s(bEw<6l*+I~QFH&!o?5=UVrqf!r1Ie#J#52Mibyd7I2i4)@RQ-3RX zW(U&w`o3z!JgMh>{em;R-~fKR3p&@+ZvlZu-8{n^6FdTK&Gq3MJX7)M_4nDJN5`dr z3;m!~6>G*!Bbxfmt;!>-W;%YG1W>6&vn|Z41OiT6*e2Zwa zK8b$#4zgzRv~z^~E-}8MoNwbt#kI|ZP7?pf7KmHsFILzk_CMAp|mZ#jW{h>4^>|qvzG`ySrkc*(;nmE zS4V9f@q$`9aWPV6eiE3R+m;)zyu~E^Az3PV{AR0zEh<;VhhPuc*;tCyFn9^A3O1w!ZtDYe>w})3jr~m1OlvEi49LVN}ERPEO0xY3~zC5|oFoh&A%6 z*h?_pIf75{S)IHw7M6m=zDNV;#?(yJy5RG&92HE5tneuHHq?l(^@<0GI4~$hl+%~X z#XF8k4eOW7-SBV|co-lu@DboE-T3MXmNFgsbMDIv`v8$$hG!830nClm_aQjaBDd~> z0+<>8wMacRlOz8CV&-QhXrcHBpukxoxPHGA&VTvauM6a>Wwa6<26YCP3y5Yuwxks9 zAv(N!7n9;-aP!ABriBg;@w$3c=wwicvb&9ERIeb?5r{$F^e;)tW$!X-Err@g)nV9Z zW%&t7tFd(=l+IDW4@%#THUo0Fr9zN<&Cc!C)lKgaMg*#Cw4M0EG*{p^{~gH%mskCHm(U%RTHMo$NSPZ)AR-N{Vt9q&$52&?t`e((e* zH#N5gtjq$wB+2DmQC4T?Om^2L(eI1gZI6AZy;j%LeD(~t)>+TaG1$;JjmmyRv7SD+ z>uR2m?Lzf;D|Kd%bpAJtG~BI>Dt!#tI?%#CUF5lBv)yw1FuJKuY1Njf$kfc2$W>NY zeXmgF#T=t@h^EdqxM)(IU#H{ns>!)duB*tDA$`@tj@^t|C7m8a4658G=YCtUFL+{N z8LqJCpc@4pT4h5tvPvZRF+4R9XZh{us8-r*HM%!SmP>9K5f?WGAjm!#I?EIc%+KeN zE#c&ZSfXv(VJil?(DEoJ5oCYcv-+eCVQis#TfZsiUvSJ*{nAvZJ}G5sed6F(EUK_t z{QYs=&CiNEw)PVVIXQ@&934XCuV}|b!2E}(zSfQtLFh&$1EyTH?NUMiS>J3xZyT69|L|lY955EWLg?(x6Zz|-{#io> zRMgDv2QDw`5#Xf2PnMrU#-@Vap(^U|Q@yRO&O%=nA}x~n`0M;{OQFiG-d~yqGr{Rr zP;-l|ds;Fq`5{8Z4F{yWo!&!gJt{@3-sh@1=IoH~-;iy}*~60ylxbpba|9+n8v-ff zO)0i_dMECGu)y1EN{Y3aL*P%vFPBgOo~G6+$F!L+c?7Y|W;f9^HR!iBz~Riv6d-51 zFA$AK#yzq+yIJcFnS8DSR*ot$*DV6k$ZuBqK>t^bbC)G;U47sJK-@{a{OeL&5)hE= zA>_NrX=N38GW=;s-TqUv;|C>;NureTpO^E0?R5y3l^7Za(-wxg_uHJdljjLZfFaGEdTH>?dl{aUNP5f-`oS2)^OW>`a$z|!gXLE71r)(VB;(cs#6Dk1Tmt*#teJvSzueQnmB|*ossO z$Cgf_!SPQ7S3JG$ip2Aon0m__<&9nS{Tjl>7h`wICnlC;u# z=LaHCm3bj@)c4%)rB67uiZJu&du!OrCfB3S#8S;N`_JkX0T3AgKA0t#ZLC~53}O}JEM(lLotK;k1s*RK9D-J zSB@z=#KrC78_#5~1FN6e@n<<=3X`ZVwpxXf=H)p=-K z8qVgi$y$xLTB!Bq>fi-Q+9Hd$b%DtT6V%bx#bjeb(~_}Kd7X<3Bh_14D9Ipw0dJUu zP3hb7#WQUFCmb{k zbzmVLBq17!JALsBe2qa3k1CK}=Ph^S64I6(G$rZ$=w$ekyTT-oEbZINe@SH~pNb{| z_>tzv(a9ae6+S21Spj#2@dCVcORUECtg)fP*gPDfEF8=-(ZYjpe!rxRf=;sD!mNEe zQKj(chpg+D)E^DJZ&XD#y50&lyASNzYtCBp>kDpAit*acwi5aF_g)iAln%;jr^)Tb74dLO zgbYc6#VBTc$NcZG(GOy@XgMEokubomtAfqGF%m!Uxc#hvG+k+gc1>6SJGp|B{h6+? ziO+LBVNaxjUb4naOmRgZh3O*J(7l1}TweG@I~=<-8#3gSM@H7b&&|51-Deb zT9T9Qk-eKN=Ws7@n64$cdZUlcqS!ER-Mxp*?5@CK19pChU+yJhM2;)Rhap zTT7kVuG!z${sj8@_CbG!D-0e^=R5fuSH7qVsLZuZLd}VhuX}e)O09v4BN^9ECK=aG zBH6yRv^GWQuxo{=&Ug5Fl(;9wHbX{%YPC+XG=c_0g)Tb@D}3JGuIuro3Oo{@Ji&ZR zqD`9E%SF>%pEhGU$3dbh#(rM(7y6NZeaG^gtY!|x;y*FnvW)ps@NpR<|E_OV%!n!}!^Rj{KR4-1;J6J-{#=B)HvQABLpE7M7+r!r}9# z_#0zo#(pP#P@~o_=&>@By(BNTnJO^zz5-Ft*r}-8adaSzq8F@%LG+GiGJ=QmP@cqF z&CY`GGHvXPF7US!36KIEto;_PMlt!w7oC5lHCmvO9v|&mN!g@h-rNc0Lh?;uip&v< zmDWP|?du980BuIlEPPto1xtT0VldQh- zp-2(0=PNVltS=&=+VsDQKt@i3*I{89c*vTVpNGCxE&zi&)7hDmsdXU9RGpJplt6T0 zGZ);{YRxedQ}FAIS02bu2VOhPCku&?TE06hAAeBCmaqeq=VJ8lPLNIynlGEc=hZOQVqH82ILwKot<*bX=x*2`atb0(6 z8T5`GE1uxtMA5uC(qJ>WA!!lIV?2;Z;ln+h(Zfpq^DEw&9{6gLPd^#Lvm&s|_>8Z< z&D^3ZRumRx2;MT+*Ig~!i9ph#in94-x#1bnI*~xvx_Dj+-)~>Dftc+eJ|BKz;I0{O z_HAh{`yH0bWAX%hyhl$cL1CmW)d&&@e#iQB!I3sfAY3Y@JEtCBn%}xPnCv8(jjYb^ z0={=k`@(-unA!wn?1#F55lQMha*SEtF z5-HW6Jf%a`SmBw*&H?+j!^38$-G#g{#K|UG2EWbs&dUoSo^n25yWdg^JO(a9 z(DfbCx?7?n(ArG`vf@%%+El$Ct21)T?rDYh0>={RYEM6@y&k*SI6M zBP-3T7!iBSNzH!BnYIib7~L<&mlSL%vY|uHlE2W^SA)ynCZa{AJ_1siRlHEJ*naE8ib(oq0sg9p1s-wqa_7{&YN1Tu~g=gfL$UY3I<{7$NL@sEr^4uKtm z)8sM|fad|z5`YYSgpbqVkdg7T5oPN#ivn)|!qlC9M)ve5je4dWT+Ohb(p;%Es|R9= zTAi`^OH0W-v$T{@+fV8{}>JjUt*^c>P5r;AF#RfFzyxg+Rc3!y!n1Hcp zM5o3$_N;+Q&AH0sP(eCROXdC zishE=%;LRA_s>{$(rQ9#HI=4YNc*xr!3Hq_WdYUBg|_EguD3#ek-woVSqbCK@KEwR z+;`qq0JHKt`u_ylPCqe0UOX_M79!)0y9RcY%;aew*zMFlh3fyX2ntBVR=jQxO{lQl8?TI`OdU z{>AwI=K9FKgiibR3LAk{+t0wEw@jM-Q>AZ0WS=Qlt)A!jvX1|yD?LQpn8p<~8MWp5 zF=)ePTx~uC&(`i0pn54XHMu=0k~(u8Pw2zcDU|Z&oa)|wPWWwTi|bKBGvd!2UwKNd z?*;44SuHISwtZA<1tO5l6|PB&+_`i)rktoWMNBQ|OkIA6QzO_)C$V#^Z|yxW68u~` zlIO#VxnoP*&K~y}p4k18?kc54Glxe!j=N5Zm8+F?awefjk)W6OS~wc19U?2`Za3%T zdoT7ji8ZuYVwX_0`URBN&$|ld4F*dKf*{L+B9Y%T8b5~=&pyX0Nv3O-1M^>4pPXrb zq|WY^7s9)p=TmoL9vYJb)#K;bdKcdHnurb}#iSge;k<3{$RY^#C-qqJZ$mt9rK;wy z|I`I5a$i%^(FiM(X`)}~>u~o)TUK*S^WP&jRR`!Zr95{7T`vcJuo)%8v65;Z-BRfH z)JE4JVLsX!StkTueZ`?>h56%89%a;6A*eDuLHqz|ev97xM9E8?H~{g;zP%3uShA4D zNrndwQe+w`d(eVwPK0y1n%lcFd{R!te_&;$IZtxE&fE#yJ;Y^mo3$fdY8;bbG#8=j z$<3EcPa_&fAHV30>!jG0(neJobrf%3)<-T9@|bzX(Zn~>{1R#i!kQ-lh*x8?F`mTED|${Aej@;+;g;ACG?HZ_poy)@rkr`1U zzZF$M!m_&w-sHUpPlyeR6UOgcQyb+7!Vhe%JkcKJ1-W@AUpEGD*1$Wj9kh1c=#38f z`^YNT=_jl9?YKjW_e$*&+7=}*2d%`TY<*+irDQpn99`?GMeRWyGl_c9TSD(gV2$vn z9+~(wWM%&LucR{lk_3tQA0Me!c9N4S@Qv^gMZ^Gb@p-;xXG6Z;S+TX@Laxc{^5?*Y zDD}dgJ8w+9+a~ar@oAN#h-jdSKhfq zgW8|9*Ll61n%5frQxA2q&1*3=NC5NlkL;sP=IhS_-EwG}0!8!;?%i4)z`L+rH` z)^w4kE-laL<2X?Q;@Ug!BFx68bB1VE9%ufv!D6W^Sf>#A@tjN+S|O17w5Z?t40GQ# zA5HqHW~#2#`?1Qh?RgF%oE_ptFa70yR2INS7?ygCsSIi>rDobII@+XWnN2Gep%J!=V&su6k!Vx4cQ& zbk4(2G{unCxc%_rIfJ%;BQDd>;_dPK>0z()YQrNc1Bo0fxFufj&h%$`OiD}KT1`{K zsPZ#;$B5ws|xxC9CmU+VQ?kg4c7&4q0KLNr`lu1-%=PHqa5d?s8SbK0Ud+Lla+Q)WRZ8M=?@R~lo(|=!MR45WvOh$swwQg(j2okhj*i5rr z;;HIUon&)N1aTv?Db|-?&uu}i-WNg|R&N)6df8wo(btm=_&u=wJ10O$at5<)!XGx@ zEF-a-IaC$oyWu2quwNkEr*O7kyMo{Dr!Lm*a%u`R3YG#rCAM71SGWht zhDM-=CbXmV&_2+L(bL^aEeY!BqZOETrNCC_CfF8}WviD>9xb7eXX>SO#n-_r&~S2Y zIwkOyy&>`j9OB|jX+*!1rpR`_Aj%1gffAS5s<%}N7xN88DOu2VydttsHIgejbRu`Y zv)oXH!imIZU$@2f>4*ME#c#up?C`zRvb-N7qF?nxnoQ)*K9ULxL=QCAOz(5l1c5h8 zH%?S}IRDUsCxPwESo#v>YA*7*#m=e{8GOLK{o?!TL@SL7bL}yuN6O~V{s?)%ket?b zlCUjjcF-y9SovUc8*B-f2^|%*%w5g1;-&gr%}+kt8zzaB6^@K+ArdvNu3WD7=uev7 zp(74@l^rGhblkavta=4{IqP6%b0?5$D5wn4vG>SNq5c46rji;Y?p<^{RqLppdF&1ugDc? z&_Qcax&NfCYxeJTD+EU?_M5~X4$28rw6g~ZC$~;)q9>moTGW+WTFGP7thDx+My-~8 zY5$k-m*2~_DXs5yH|N8)&)@6^H50Ao!k-s`TQs;r%ZnMJgS8GGQM4b?Po1LEuB#Q_ z=UEcw3b79yFRT(5`u;#v;phPtBTe_CN8{&|8liGVR%LvL3)XzeSG;7@We7$t9pP{; zi1WFl<<7AG?op5bo=^t#bH#b_-8lSM5$_k-NA1rdcUiAp9GU?16avUOdbmL9`K{Ep zL70y+Lecv*ZAnEgunv=tq5;#m4X`rO4V>Hl_XzLF$7w4e;Y%WIH|o{(=g#l!7!S^F z4>uI3o=KX7sSgbnebm9?NXueGg6Py===VD6D{P+xs)IfMM5OJnUPg@I`>YN)TMhl13Rz3uK2%wdO0pe1Gcg56 zgg&(D3zH*me>VR#|5JvmgzYq&%uQ@8Ww;mAza!kfPlUy%4r)I`bWV{*Rm-*z9W zt&Ug924T1%Lp~+rPJzaayOa(R(eG)raI)~bFt%8|a(U~Qn^=$>SHuI1BwBro7c#L-K;kXn{HyU=bSj$e&%mZ&uaoTrW65g+MGo|YYtlP=zWa2C zi~u+HAAHM-JwR$-*^sjG^VR@fN-+oI(YY2U^+5`kO z*t6hx7;mx{1WK!x6j#=fpvp4B{i*_&flli(wV9UyB2a$ zu2H${Z+^n*?{F=6aE3I;eYF=0o2wBYt`W??>_#UkOqj$E77H9z4PmqpR|y%>04!?q z9uH}i2U3t#(f`w3z)z96=`YU}Im#%4jL8D1yOFOTNGxF|O%jbPz_js2|MgA7bo7-B zIy7wcNe5C$*;;I>r*#wUYZmvRr`hfFx_UvcTB zMr{WaEhl&vnr7eM9RC~B6=YIe9zME+4W08>K@}s~U@L`-8>jfh6P8V!8(x9GbDRxI zhnldu!VXs$=_e>xE-fTbbiyIEX%nt{d?zlTmckT|c~`MPZf1&?7h?J6vG&JJRBtY@ zwC4>nai-~hu-Qwg_h%b79Bj|ni?D@FI8H$SN#LVvuH|QCnRAizc;S_s^5V%?i5C{D zSfW+ivD&fMDwcjz4f;u2B$?xzh87gBTN^KcIkP zaIJ8iR}3chC)RQ9rn8K)n{`qd%k6#M|Gl&_8SN)$Qck=68Tkrxi>#Kvg5z_uqj~#6 z;54hZj7^?T_@#4y?Bd8&Ql`@X6J*9jok5UKT65G$vs8^I5hZuFmh6M{684llrDkCio*I7dMN&Fu80g&7)@FSkFw+8d0pPi z#>#!VhvQXz!fy9Yb~#2z=bGI_g4)qXVTP1}7FoS) zFm4IC=Z4%8FC-JEmMNo`|2^=J=Ll^8_!z z#^)H7D`AK=KKF$Ep)kuLG@HNz5CbVxfd8&z_CdeMvNL0mn7Rq4?@ckQpp+?a@Kgo6 z*$ll-qP2oWI!9&y{?V2vqI>PtEaTJ5xf?y-PAjmcrV-8K5lt@Khrhf}B6Gs^MNT2Q*4I=QXnAJYT~FdVK_l>`M~RLvoR$< zMLV-3KHQO{$WMx7Fz{8MlwW`ogjfP#xXwTJg*(q(vec#fd*ZK(E-8smVfKRaIwu`rtHFWL$x&&YhrQrs(I^FI| zFaAbp733$}c#Q)O`1I}g{&Htz^m zPn9k>{*MXjjPE3*SP+>5Ty62drvbf7>WFg#0pJ~~_;)iic}4~@(#y#DpG=X={^Q7r zrgz-WUO4@#^P{N(Yr3Sc61Qr0M2134wU%AT%tRZ5(}_-p#hRflUjjqb{r6u_t{yn# zQ@yQV5}Zr=iOfmu>+eZ*Xnigfe34FVar=rot>6L0sbT!iCqTUd=EAPixq$bvW7#N) zo!{GAJ0}&@zdY$Rx18tjoalzm?janG7ne_Y7VJnCi)^O3U`mlZ6@VxNe8WJbTv* z!V&&J|2f*s-u=d0FjhB8Z9+8Trd;8<_gIaop0?^?nWpB>#y$>R9Iyv_;zj4& zW-SsYwBT1F+PEjd$|-;-;6!J8Ls$(I|Iy&Dl+fHUb@(mTBM9F4=tn8Sjb?WO9!%l| zH0tM$Vyu6)pesao(eT$%V++!cg}t@iRXY@YNH8y#?zKO21i@n4N+>})cqOstbm-9M z6XRAXp2ITGZWa}x`w(ODoGS%#l{KAfah;9kKk3JA1^4uI1*myM~56<~cQ`D+h56ta({){0?fZNZmQdyf4jDe_Gp3roUwS(uiZVFT*F zH(EyPR3~42d)#T2t6*2mCmtXRl?zG2l+HcHy(vGqE!KTr-YTU}?e)gv<&@kb16&f5P-$k4>e49%Yua2(fCCfX7BVFM2g zrMR|Z<=XVA^=c0qaj-j^Ggl{2d0V2Q)|%WRJzdt$HDap#oR1m#8>HvtoKhGW)2nNy8PKkqd$~LUo<2^M9x9(?BO7 z9%cZt_93q4dUHVfXN`6V6Wb98;AY?ET%gyNS3-=DZCE;$0TJ#VhhIa(h-vfXnxH1cF~huwlN`uqOIgUe4WgyCk9sw{EOe!mqW0%0QYGHWo0 zCj8;^%>i%Ay38m;FqY#yj0mYBhI0qdrGjoa8K?R?zRRKK0aK}+yR zbcqZ%X6L;EN8PyhZQ16;a)o#b{qW0@tHEjLfvfa7*Kqn$L=)sMPW_MdFeWVQ3iNLW zNHtgsMCi3prOIDiXc#c*DKmvzmp+gQ#4S~3}w9U?AfVKLs9eh{V95^3Ws5}@C|>)d#p&mf3cx^A@DbVuBZ+RbJjcRndAAA z$G|9HYI8KR$tF5`!Nj#4!awvG%=u|sg#z^Mc8OBhz=039|Ncsz=*Y{XKSZ#{|J-s& zv~5s6Qp)Zy9P!E>+0^m4|F3w1UP3JbPvR{DPhMHxu6tVjPADklidKv#j~*ehRyWvv zDl3QK)5}hpfd4hm#&bUlU5wiok)-Y@u#F|wQ-_VZeKitb^t(?<`g_-N z%uc!2M`e8rd9Qol3M8^i$%CP|1*Eow)2x#CgdPgi9FPTV{RP;j7nnoo=d)h**cIE- z)v2=pZSZu`s&bB>@KJ&e-dc;L%CJ&*e8MnoK6Y+pj3bj`F>2n_8^&Tn?n zxe4^0@+x0Z@Tvetn@WmAt+}3Vdc4GlU*CyZY9)D*YnzF-T6GljqutQO?)$-Wwc&tn zzUb6;KYgqckYfv_+F?qD_4)$yLdiT4{d3GTR%v7t#KSr3zno#Z)6$~9uFLQdO@!Y8 zH?}U{Yg5GDUvx7d`vU&+BKXg3T&L?hP66k7|4F?{2dN%^ZC5i@{x`}NTTi|F@?Ki- zJLKF0;FK-?U&t-7nM%ma%$y`ML3u!C*`Qj4LB{7Tfx~LsZE-C8K84|gk(yz?DL#5p zg6{$6HFFKoUe>5cmyvXW$26&5tuv^rkG=;B-_>c{(;^Mzl%8>;taJ7F=4$hQ?_CR* z%FvK3hGoUnei8Uo?zAeYv)E7OAkeCT#ZfTlV?2SjOJk;mk7TO0`#)Vz3e_;aEEpwy z>>W&FIdEclPzp=SU}j!KENRBfGR=^7l6YeOmKCF6;47(_fiCzE=1m$_=g>T+$U881 z7#v+97*hB*#`gPf#+Ka>hyQx}t-@OQi@HDLXDM-rK4P&tx!zp8ccx=;ugQ)R8jm@A z0{*%(M#>7EYu&#a9mk@&#w_NJ%8$0Uh#RaFIK*O?KZfDIyi$6k^uBGNb9xfejFNmD zD_*ysO);MbM6^3ihAftD(i*oseO1}8llJM4MeDZ{_5(>H2LJY#vBpO8k&uQ-6AAg` z4&Hgu_rtgmT66Pue(zscPhSCad_Ag6?5MyT3?8_uRbZ29p&6+MhK?VRf>F;iFokrc z7O_7&s_D{&pb~o6PnjOTg4K)8fMip_MAx11i##kbf~!5srKhmGv79#gygU_kX!cs` zdfpZw82x{<`Jr;1R&RU4Nf#^K$qqMhGQ2fiKH@$w+bQZPX@{%~5oTXA(W}&?)HOKP zCo{zFKM{C{g^T|qOWOcL{6Hc6 zenaR?KI;B|)Ws%|YVf2bmZK5ZIMYWGOG1a9==@)q;ww_1@3&jNGN_9&HiX@NM&YW| zT9rIz6^?cavQl5A=