From e8c1f17c8fd78025801a11f54c12a46c3bfd43e7 Mon Sep 17 00:00:00 2001 From: uo264915 Date: Mon, 29 Apr 2024 01:51:32 +0200 Subject: [PATCH 1/3] test e2e --- webapp/e2e/features/historial-form.feature | 11 +++ webapp/e2e/steps/historial-form.steps.js | 85 ++++++++++++++++++++++ webapp/e2e/test-environment-setup.js | 6 ++ 3 files changed, 102 insertions(+) create mode 100644 webapp/e2e/features/historial-form.feature create mode 100644 webapp/e2e/steps/historial-form.steps.js diff --git a/webapp/e2e/features/historial-form.feature b/webapp/e2e/features/historial-form.feature new file mode 100644 index 00000000..abcf4554 --- /dev/null +++ b/webapp/e2e/features/historial-form.feature @@ -0,0 +1,11 @@ +Feature: Visible user logged history + +Scenario: The user is not loged in the site + Given A not loged user + When Press history + Then Redirected to login + +Scenario: The user register in the site so he can see history + Given A unregistered user, fill the register + When I press history + Then I see my history \ No newline at end of file diff --git a/webapp/e2e/steps/historial-form.steps.js b/webapp/e2e/steps/historial-form.steps.js new file mode 100644 index 00000000..2f8d1f3d --- /dev/null +++ b/webapp/e2e/steps/historial-form.steps.js @@ -0,0 +1,85 @@ +const puppeteer = require('puppeteer'); +const { defineFeature, loadFeature }=require('jest-cucumber'); +const setDefaultOptions = require('expect-puppeteer').setDefaultOptions +const feature = loadFeature('./features/historial-form.feature'); + +let page; +let browser; + +defineFeature(feature, test => { + + let username = ""; + let password = ""; + + beforeAll(async () => { + browser = process.env.GITHUB_ACTIONS + ? await puppeteer.launch() + : await puppeteer.launch({ headless: false, slowMo: 100 }); + page = await browser.newPage(); + //Way of setting up the timeout + setDefaultOptions({ timeout: 10000 }) + + await page + .goto("http://localhost:3000/", { + waitUntil: "networkidle0", + }) + .catch(() => {}); + }); + + test('The user is not logged in the site', ({given,when,then}) => { + + given('A not logged user', async () => { + username = "pablo"; + password = "12345"; + }); + + when('Press history', async () => { + await page.goto("http://localhost:3000/getgamehistory", { + waitUntil: "networkidle0", + }).catch(() => {}); + }); + + then('Redirected to login', async () => { + await expect(page).toMatchElement('button[title="entrar"]'); + }); + },300000); + + + test('The user is not registered in the site', ({given,when,then}) => { + + + given('A unregistered user, fill the register', async () => { + await page.goto("http://localhost:3000/sign-up", { + waitUntil: "networkidle0", + }).catch(() => {}); + //Registrar al user + await expect(page).toFill('input[name="username"]', username); + await expect(page).toFill('input[name="password"]', password); + await expect(page).toClick('button[name="registrarsePage"]'); + await page.waitForNavigation({ + waitUntil: 'networkidle0' + }); + }); + + when('I fill the data in the form and press submit', async () => { + await page.waitForSelector('[data-testid="historial-user"]', { + visible: true, + }); + await page.click('[data-testid="historial-user"]'); + }); + + then('I see my history', async () => { + await expect(page).toMatchElement('th', { text: 'Fecha'}); + await expect(page).toMatchElement('th', { text: 'Tiempo de partida'}); + await expect(page).toMatchElement('th', { text: 'Porcentaje de aciertos'}); + await expect(page).toMatchElement('th', { text: 'Número de preguntas'}); + await expect(page).toMatchElement('th', { text: 'Número de aciertos'}); + await expect(page).toMatchElement('th', { text: 'Número de fallos'}); + }); + },300000); + + afterAll(async ()=>{ + browser.close() + }) + +}); \ No newline at end of file diff --git a/webapp/e2e/test-environment-setup.js b/webapp/e2e/test-environment-setup.js index 7b7ed511..430c0b4d 100644 --- a/webapp/e2e/test-environment-setup.js +++ b/webapp/e2e/test-environment-setup.js @@ -5,15 +5,21 @@ let mongoserver; let userservice; let authservice; let gatewayservice; +let questionservice; +let questionhistoryservice; async function startServer() { console.log('Starting MongoDB memory server...'); mongoserver = await MongoMemoryServer.create(); const mongoUri = mongoserver.getUri(); process.env.MONGODB_URI = mongoUri; + process.env.SECRET_KEY = '123456789'; + console.log(process.env.MONGODB_URI) userservice = await require("../../users/userservice/user-service"); authservice = await require("../../users/authservice/auth-service"); gatewayservice = await require("../../gatewayservice/gateway-service"); + questionservice = await require("../../questions/creationservice"); + questionhistoryservice = await require("../../questions/retrieveservice"); } startServer(); From c569941194300efa9546934e056bb0b9883125cf Mon Sep 17 00:00:00 2001 From: uo264915 Date: Mon, 29 Apr 2024 03:52:19 +0200 Subject: [PATCH 2/3] Imagenes test de carga y test generados por Gatling --- docs/images/add1User.png | Bin 0 -> 45716 bytes docs/images/playGame1.png | Bin 0 -> 50528 bytes webapp/AddUserSimulation.class | Bin 0 -> 5921 bytes webapp/PlayGameSimulation.class | Bin 0 -> 7072 bytes 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/add1User.png create mode 100644 docs/images/playGame1.png create mode 100644 webapp/AddUserSimulation.class create mode 100644 webapp/PlayGameSimulation.class diff --git a/docs/images/add1User.png b/docs/images/add1User.png new file mode 100644 index 0000000000000000000000000000000000000000..b04bf0719cda31de47d0e34c5dfcd9f2c5066a6f GIT binary patch literal 45716 zcmcG0^C~v=!U_7ZLk4% z___Cc?>}&V0A8zeo^zgap6C6%pZAE=(oiLOMEmI8y?aEjUn#%4cMltJ?;chFJ}%~& zC?~aR%pWZGcdCl_%E##UFb^Ksyik8}?_L#%0Bw$gdHm4jm4W-cd*mK>KUgcDn0)Tt ztLA#G{NlZj$>H+D=hN0V3MUdHokH|(5qb9+gT7Gd|HRS#TvBLVme#!JR0px3l|)Zi%(f-Lv%Sfq`;v zX9O-)wQp0-39quAzq(a|dMjq?`9pzZ#}(0xpqfi6En^*?=!cm1uYZ=6TM`oX;f%{? zN@bS|0dSB`-u^{pk?zc_pdiV&-Jp>Px-`sWt`6wtCB{0(bD1ykH{mPLP{|7T$}Q{C z^cEJMYoum|eU1;tW@s z$QRb}t`(FGxz)EtJSZ55OHYNs#f{qlULvJ@%0kjV8%5BA^}iRm$JLgQ zc0G-YK7-u$eWgla=6;oekT8Fkh5%EY?$bH1=Qy`UUR20OzZB`-j183}Gl`ZJQEqa0 z+nwIzE~KjQT9{CYDnzyXCvLmkAP*Jyup#onH|y_mjw1s){JX4zc^_ggCpnu)U?P>; zO;!rvoDRh*5S7J@mw}33=-tui`#smYs;`p5%bG8+OICNTr=KEtf2I0CiuC&w)2{DR z;U^QS;CRcJs)~d2i(XE(;6NV*c(M64P!-z0DAvzqT3S zwj7Lho>g4L+@NG~FPoK&bV4@~ zv+GB#uzsGrtXlkGrnK=0J5o<~|xhC^yeDP4avg=mAkSq>RpMz_z|pB)xD7W|z9^JQW{hm|d1OOnC& z6a)p{`<|n+A@F=f{lS!*oD5h2+tdgOEN>QWI*(al=j0}}RtZzXC zR6mBQjH#vXtsd<_+}i6Ta0r9j8zj(QD~DhB?Y1s$S)L2)F`%y(V2*RKa&v15yypTY zaW<)ZioYr{Q%M!2r_sx~Oq7w}9f9Yyjw1Rb0)!6_H^y54ujnXax!96Tdz$bdozNW9 zaIp+;Gw9wsZSfzMDy;DA@RO6rn(J%+>yBM`t{RbPEbq7oqPZMrvN_CWx|*`^{P}%m zKU|DE^96h=v99$)7dY3pWO*~~w$KHsPoaafw(ffyBnGs_mNirCk~Y`I-XNuE4yBY_ z={mDF5J#mzIg;a4=-kP7M-bWHg&SAhC&#aEbrQq*fPVKuWk9^wd$`*93}mrJ&$Qh; zho`M9=8AJf#h5Zg5HCs>Gw>1{`AA*^|FmD$`ywny@tWgn`5rn0D~V*{vL2I6q`t)& z^f?~1soXDPc*V8NCnAc^pn#LecAZ3n&yr8q(zWgiK|grpko9-J<;Uax;aI`U;TI}H zPEXrW#NTw%jpPXRzmP?=TQhE}NB7qbkox!zxUJ_auFY}3^|HIMQa(k^i>@_@L-g*S zNy|!mKYkbchNi-IyM6r6@^tIoX$Dit?+RIhzcp4Tx{NvMbW>UdPdtD9wgtF6N#RcA zcmCEMP*0xeSnoQR4zLP>(F8199gvC@T%WX_6BVeK*lzuG`))E3 zEubLycjCs?VwyMS{4q{0~~*O?<#@iwpMWPjXZtsfAS4?KCK+xmSd zxCHkKoU*!hDMBizj8`@kQylyl2?5@GX+UgplI+lhH2MQWd*?t(jZ7#UOY<{ow2|R~5^G z(;jUm7QTt(Rh!vhp}<;36GO_N;j{Sa9flV8_80zu&kakU*A;RhvHk>Gj)zLleM&z2 z$F}05u(R~JRyh5n`!bpMvj@2VL+WTZm)&Sh*8w?3Z*^;MH(acE9)1Y<8tdS%Jmm`_ zRlfCjnDVq|;7I7F;K98WfIr)}sVxpi`xl4(h(wU3cBo1yYA44Z=l2dKlJ(U1_@!q% z3K~Igb!NdlPGppjp)Pey37>fj_(&v~Lv%0cJ0R zGvBkbaj>|s6MJOyaZqaW%nAR{y&rV_%NQ{vGM^0a^{$I+uW_44aHB@r-J_~y`>aH} zJ{K$Z?c8?I!sXazOCp(2ar$2&qni-tmy$Zgox2ISfBlmz=K82AkAEp_F9QY0Il`)h z#rXy4!U}-(qeF*q)fj!*uYK7>Pb;Qs2umqo(xpf z3y-mCVmuU)Ii9fAr#%{Psdeh`nq>}ZFDZV_|a#N73!{xBD`v*uR4~b6g^DQ%Rj7N1iG;@0?ocm zipmO;k<>5+M^3<0$^CgN`(Xs1hMR#>jM+?s&<9x(s0pfFyz2=4r(=$y>&3jI{qBdW_H@>$%vP(wyu20% z0>RDtx7163{`+q!&rUs!zxG2Tw4H1eye?nR1iIiW`X(;l10wzPcMhyF`q)tUF)D%UKP1x z_Wa&`j{s59jPaBKpOLujwan3xHnwx~sz#_erF7Bh__LdPhwieRIA_TQb4W3bT5?30|$}aec4EImxHhC)X~SgbV0jLE%h43;Fsgpjkz{5H|9MAlcCH zBCbx8Qc#>D0m1mX5H@xaq?!awJU?ozz0PTl1{o9i zifm;T&IX&m?&0}&M<2;tIe4oy2@d?h57g4j@Hk^G&J;eb#=h73lx4uw#Ez?^HY+Nb zGCgBET$QgmSQ~atHmQAfb)>l}27bh7OsMN|`NUs^dTc0KksOw!(vly|xs-U*-_7KD z#?(IyG>D~m_{K4YMFgk0Z4fJ1|6Xg@HR-zPD*JCFxERkBk>kZ20{n`M?LMdbxwciJ zs;?g*Y4LeTv#;0`5-F1^`{jePQ@3h=l)f#`mel;k&4G`@5#`~KwtUR_#=218B>>Coy-q|D2-5jSPHMF50j~oX z!C^kSjXkiXkYDQ;3c?SY%YU%c2{1c763TqlWl6FO>R-{sz9odyGDPns%0N|eFQR+a zP1~a`1o-=Z;@=#k@*QMY(UY1!dPW`P7XK|XbSJxo$(tWZ!-O6f(>?0yrC7B2w z?8q5bM}h$b_Q9U=d`5FPZpP|3c$H2w<1Rbcnr6mPhh5C4m(t*873OQya<6>V^V@C- zDQ{d@05|Ig`lvmutNR!jPEo|V=aTEA>Hl)1V_k+kDWqGj<9%jizPE(AS|Pe~sJl#v zWRS_ROWI!V*9&uMx}Q6#4rvJ)ZFC1W=Z|I&2SZ;3aD*}+_vwdzgj|pREk?h0xI~E@ zitI4ZOAfcu8Ja;@vH&(!fv`PG(2i7wKvrPfvJ^r?_K$ee*{nGl1q<=?Iq|Mo zbw_+2VH_veWX| zUfg^Ke}?gj<=~_#U(VvKFvHy?&%Y_&)g~_v!&wyYnHg0>{x;&BOk+22;|Wt&u(06M zbpd_mBe_UqRsdMzt@Sv2HU!$ez|iXJ#G47}Qa{(n;A~dvP3PCK;kYl@x&;?in}{J* zy!i@oy^jr6DeE+`@ab~t2X;vz;|VQw_rUx*EbrtOBX-1(QWOMZ2Lf}hnE_#ZGLP}I z#LIj;D3fueD|AiGw!Y7gWJFf)2w$V#c{!_$?TpWgDVLVeNQEa>K{>&YUfWj+3DLq; zS&!sRZNT}zITKMY!so$^T~S*Eg85bg-xM@nQb7G);P0_L%S4_7Uy*gHhwo-UI~cnC zRz(t-UYVdo#ho;I2k);0$E+=9ulO+9-;A}%j2S67&)YPs4s)C6++aEQIWl-1sjI+d zL6x_`FqZxC`@5l4%VGseg5{q z^*kR7{zHNztM7hkfJm=wy3EJpI0?KahvTo93C9 zV7&31(E|@-ST65Y1G&)-&g`N~1^}65n33xs!n9?w6n@RPval4>E`{!wxbWOjhrF~8 z(-^x1E(D;TM~bZ;+$YWbXxCdP);U6?Ziyv&acy&u>N?=1r8LR-2$9cZk;~6P61JX^ zgX0ARPRylGUF|Eod%8*q5>9Nek`1F|hsF)cRIp>k@xr~KedbcnGvrwr5qyD^&Mh#> zb;C?}k(kJSjLQ3{$|4GNitDYz7SNAeMFYI)kBV!(+*{$8<=#kVFuB)R4-5_JI@LUk zjnbGMR>G@)g+tP60cIuZwTDURIqw=?yR`VhRLN|_b4&Bznk4W(qb4kHoZfDHu|s!H z;F4`vK;K|)et;AiDNKY)I2gS-QdVaXc1ubZ|BOxAgECt@NpHa?X}@|_-*)>e_#JMP>(gPeJx2}7&%Kk|J>J&gCe=CZ+X?@i{=0uxtuCG;o_yGx z_ok_Q=BlGPBPZ9fJe&{CFj)sJP06V-?rUc&1&^d|Z4}VIGBZzOir+b4lIvRBTqarx zL9g~V%b%2dVtdqF+b+F28)m&PDrmfBbDq2cB7AUg@>vJz;H1d^ETe5>f#wa;(e8>- zR&A{49Lt%6sTZ)rkrn#{qK=_ejtd1HjP)opWRMY`e@ne3=;J-CD~mO4F0mz*l~tJfC-vKCS;_`r&F@!-#+sC(M8Hb~=g08f=I@ za^F&$<*|@X;eB^C`Q1n10@qqxNmsbuL9+`iK2<0e{_;#}YK>37#_REl#-OrO6AZgw zfEP;*C|l7zRoYa=#5)9f@EFDN0bI-bOMl+kuc4C3cow2UDKe58hJ<@Inq)sqD;wr{ z-5m!qbOQH*n)hoBq?>R3AsZ#pgGg`9W)AR^D-b}yY zG4L}T3cGplkr}|(db6ra;=NpGDg3*(O|cF?Ojl3FaW+d6?6o=-Bb?FQ@4!$yRBzhE z&wHkv@cD!5%bbbxh2te<5%jk9oa5=2C7(05gH^|tLEq?4$do}% zCcpx5`M+)${)e~c*eT$%=**bNhlOw>952A5j$wrAaOd%2_c&#xQ9a@3XK+i^om|Mx z1IqeS`V;GVSqhdte2n8XjTQG*!IehmUu<%n7Xy~Ojh?>Uao6Tlsv6S^ap%gYvfd~x zwCz`Ixy)oj|76RRYsEIo1`?9oIPrb6GWEMPH^+BsfcW97fM&aM=F-!K;@zL&;ZP-m ztR0`@_kA61OF9&?P#Gu$^(k(qcwHpcCSJIigFbM!<9c8{UumNRr_}mNxLGT7w%L4H zQ)GPfQs*VZeGe7-m6euqqm=->LDbfF0%`Md>7ZLjNSMb;PttY#o5pL^G`R&56LU); zSI&wCVb(zCGuhiio>xPh$qHYa^BApteL0g4XvOw$C$^M;U?qJoy#SrZnnI>}^;~IT zVdmBY^DP+v`rT{y9hR;SX4IZ_q6m#|)5-oCc)J{%B(5qU(fwXP0G47>PKz9Eq*D7- z3*r7%^jWE!w6B?2sPAWuWMI9Gyi!IIWfZMn`3AI(oq%C8qtDL!5v;B)by9RXb79um zW{`fpD;o8jBjxO=wkGE$;W`Rl33)RS5|UEZG}wW7QHwqI#$#yFm{Nt?GW_|M##Y-< z#PH4^;4Cxe+sw| zGz0Ru{y6o43w$EZ-aodGxPNqcX!&Z?7nCE(c_l!CrFK3hTwv%Y{aQS6970aBHvI3jvE>=LLHf zX=N$q9zYjuNsgUYi`8dcHrUbr8Ad zbg~4)dR5~I5c$X=#Sw#L-s)C2Xz1vHDf^Rxyc`G$Lz8~=k;GZ~+bq!W?#7PK#hAWL$cojaSxb=4y z@iI{TyuH&dOcS5=fiq)dCU>mI>0lpISxlMtGMo4Dj%4)MdyEKL6|PU^EtlG|W!XDC z(aFo)KRD>MY8`Wa{FsH0IsrB4^^`$JUMC$x2j6yjY%v!Pk*uKuwz=U3raxMCj=to4 zb%MwE^x)Q*E~8_f-d^L02lmMG_??R+)pUF7stS9r9^D2+y_b)Rc@zHE732MSUwu(F z%85>;)w0PS`vbR?QU=-V&xf~Z$XGR04GZX-98(gb0)NArSM)$GfU6G#{=^Fi7XoAb z!oL$X9-Xfb72Fi#hDpCJG_YHos%ztK2IBA5WJ$)&j4^=2Z;x!{g!!H8o2b2)sUt}NPCh#9usCQp-mQ9y!Z*>AbU&U? zv2Lq%?aDU-wn^yBc#3tJQKw(O}25*zdM zQN$>5K5R;1!AbKOIQz+h-Y^^C#Mvhn`H!G`-jClz!(4L3cdXBkVTWV4w{G`{I`C7eyox{lIJf%)}T-lCMG5yKc9}# zQ6f)IPr;1QUu9)4J=KZcs10lBzYjgb!4ae_>9us>=jV6P=8rfSv$A;qfSB=h;+&t# z?RC~)^!M;b@b6XOf&AbY){0oO9In$tk=|_)&{=wV1lT#Q3*VDQqYw~#{gw2sWlqSS z!f|zh(6R5agPrv`eB#5!gS~6x$>s0RXP=}|EvGermCXY()YQu~iS)qx)`792p)6k; zlD9zJ@|II&MN>8VCnE1bT9j}jV4r7c4V3qjvMhO_>Wgu>+VO-{KE0#8;JflHsDx2x z)vL7b_Br(GC`s|A^~PqEM?TY7LQW*Wfi4MZ57fi1jw|@-GSWI^0pxEG@`aJ6>Xxf;3-lcofJ@1~Ek*+?EK+rzCW;as7 z(NlSF*1@#~e$~t@DyK`%^-cYnyyqE#{)N*xKh!J0in#Ki7k^3Uf=>h& z4m|;^#~HsL_^btGKtQHsI^sS3xg>mmXOzl|VRApAW<@_iSIb(y^xX=MA zrg%%MtmOB@IGFmh;qy?(8@ywiVOlBSCqzV)qT-^Wb>z%%Xl)I1woJONoizPPnm(5$;4~gh`S3spO!Y8x@T8>Wb zxKMb6@+o5DuwLdd3tY~Hv z*JA3LB?Q~$M$vz?w1V(jgIP`$=b~~A-%Tv<1pPXn@sbk98cxsr$t({c!!lMfOLs9L@TOb?Lhqc@n=`V|a=@|sj#YS)?Dc;vZvcC+VpT6h@G)-<8X?8_nm7s6-0 znw@od7N(!Vg`&zf3OfSV zcL0Cl=@y|Gp;ouoQ6Yhvk^mthXtpnQ2}x-XMA^H_NkIM>@Ga$IFRFm2 zv!0t5-BpM)kn2th*gV(pzX6#48z8DZhiUeDi$eBfHxQ{etJ0ElP0YRTpdr38{vn;a zGP&%mxd_q`(tblTTXFjsjZ5?mD+l+A6*G5)KZ&VQ3q-`4By@$u*jX-$SBpYXV&l396c;rcS4RyN7+MuV>bm8fVEhC zwl9@T+wJp}b>xk=7v0LZFJ1+D&sVnb9AH<7nJ1Jq{P|iosp6}KlXw)GNq23whsI~? zFVmIBg8=_Ewu9RQN3f$pdL&g23On}S2jT&sE;*Lacz&Id86^11^RFg;hpA@io?hN6 zLR7x^<_bE?j9l!TKe_Vz^?~~l^6pyfHE`a^P4>tE>CLefw-mA6b|)*})vG;LQFFHS zWh|b^e!7b8?&Yle|2%oc{%;qh+3gN*o%v#v-c%ip_*YN+It&9yR03&kZWc{{;pUJk zhANk?Ts`yxz#h&Dq`p*7F_+_kTn_4%W(!37X?3X?^}02*C2^|xrFvdkEMBpaTlw}U zU3*@(VfJGGs*QXYX!*TG<(0^Pll3Sanwng*#oXXJ3@`DjWoeRw;oJ(?vlS>2-W0#P zb#SDHwl1i+a>*8d`1=tfBDs;cy{GF)#V*I~yQMhtU51K4@7dtDmF|#>s9oWwRaPNN!rvbSJ^8bIou3~_~BbPGNq1Ad5K)YpJEgb zDSWs+UkKaAU{_n!NrpFg!keCS1-AO#M$CtYi>tLX{yz3!@Lb=TaO8{q^WmcC^>&8K zt-x_-yF2H6L;dB5Lgi*>jyWz^RUHd+UNYl5@c6=xWIbCEw(JXYm`wn zzR?V}QCIU(k;-@S>HBk3V*6aZ%vKtvU>0bFxe0#bmF^ zM4wlIutCV0*$p5-FW`O3x7j$;x80otsMEv!BD3E+b%-Y?4_U@OGsHz2x-k6Q9#Kge zfE&z%7oPh8UND?Hnue>sbkVTik7krl3`2|Kl@Eu#pqZ<1c2I~RWCO#wjy!0X^QojX z8WH$PORx(csI$QOZ`5)3)Oh9aK`INsBAd;f8IO-!HoTN$2)a3T{DDs_RL|OLz@$Q6 zqT3KD5+cewNAFBeiz-Me+cM?^>WfP>;5uh~x}5#ZGYTnF-`Y9WHN>lxaxo@{5uz&` zb#9eQ<8%!1pHLz;y}t_!nj)_D9#8tyb1Z@4`uGyNe>7LpmE1r=^y@fC{v=d2T9ePL zK306Cd3xf~4+Ws?(E`8{UY4wdga!(p93;ci((>l+B@v7gBda5~_vQ**3QHN?NS@kS z5FLireh+j9!na>%bC+j*IS@a7Z->mtI31oEqnWBKE4iL-7B#$)c2JXGl`Z$p4o#)3 zv0iWzVF~QdP2bAk4HB26jHX(Nn@_lT{(-C-7QI<^mx*vIJOSr=Bx^plv>K^(Ld62M zI+*w$mmCniHGIoNYtZQY`Ex#PfMP_Vt^7{l!M!n5VTJjZc}gba@dUA=w-I9PMWDJr z_S`8gAmbVOKGTni=#ULhJW~l*Cx7477g9UdA#NF$mxo4KKcR2VXmc(Y~%oRac@wP<3Z(i+55DfqdOD(BFJ))$Zkg;ShV%8 zUp%P=*Zl|XD-^kx|3JWXc*88-IHZ=cVFke9=6<%iUu>ZRp;ySEruY(~I=NYwy++;s z7~fU?9Kg}zTX%8eo$10PMKa826uf}-VW4c9RrD1ewR`+|AJ06e#&1_^M*njb-$=}5 zrgGL`1X{|%-rH1eph&E2ZzprQe9ZU#=|r@Ak|8AEbdt zjF1k6+|rw*Gkxt^wy%OIsJsQPvhYSuob9-B9t2kJVX?kS}6sVYq*9v*)YU0>>%TP2f$CUG` z;7h9f6P88cCnE#QJ!XX;)K0cDN{%l)U}JSXq}-88=RrCsjqezreQ;u}ekMSnkZwdw;;CHv(N z3XI9gSjU;(GHr6+)EInZpje)iTTd9?t`K_Zy~3h0Mm3TBUq<%(vJvWEE=k1YT-Kd# zlhX+?0SCv>*R*^gRUAlO9qofQy7NzRlMIr()gjwHR-S}cica(FwCb_`%jXfsQo8?u zNuEj^{TFRE)%E7}yz0=8WgApeJ@>-$RAQAa*$5CxM|V2TNrF495K&|C+r4j8V#9@h zW)V^Ad`7Z?C-R9?4B?8p9q_%#0Lqh!=D7bo9HudFHyoz!c^=22X2K?Sgn~J|O@9*d6*rpv zglqHPSaJWxdc1D#j&9_9VhFQ(xM#bgzC+3&m&-M;Q+ubijgb4NJT01zuxIUOZWq=w z;gCBDc*)PoRzbFwZTC;nYT*K@9=_1IlOEpYBIrYYlpY^Z8J!wr%_SIoG zjOn4I{{JAO2B!~F@JR~AkbRHIqhWq#Ny#)E|0sB9{Fl!(vq0EGuX-uRj(1XeJEfqh zEY$hWExI0Y$3QM^N{{793F$?SNd4BCZMa0rpquSY^!%a+Brc^wR%7R2ZV=}1w566p zrU9eE^=*}7aLysBB0=q)$prm_n;iK}!Ve0PskX!{1PVT|Q%k?E5WOoDipYa|_(QwD z#Na`c+eJ$;_{e>}_StfKue`xkA9)Y0S2TEgWI6PGyTK?{79OfVh;u1#$$M;RnKQ;D z_+mIY!;!tEmbyyXw*Z@gf1J_?&Nh*yU}giJbD)_WCrn6<{BH|6Hg|TyqyD)0#?BK! z`mwOEhJyU=@)Wi%<2S1g`$usqx~0(_F_%O1sWUKdEqh)Mef#BN+^cG^Q3L0E)QtK; z?rvk>0{q5tTHI)^tUH8iSWt+1K*RU`VD(eqEi5Y|#6$lWgHDzF6s42I|- ztxnS(>aea_zwNHC8!GGgFRbsw7Oz#ihT}&O-m20DCL;CD(75O302`9|LHL6HRUa>N z4(`bj(SKgOL?VCmz2mDO^Z#8nZ5ChQ?4B3!5AXGK!+1l7?G;^Q>iXzO#{a=1Hxu!? z*`K(7KJ-@WomTt9bt1HV6HV^Yindh2EzG5v^&)`#o)iTAKJY^ZNIk ziubk?2_ctwl~Lh?TiUF=dIipQ+BHxLx#m&%`Jc1t*Q52e-?B%`!~40g0yeN`-K^gX z?I0#QouA&?&-@YV44LN~N~X1;cFahuNuKC6!&30645*iN`5OS-I(2ja-Y2+pEbH>N zNg0d$lIoe`()Z44FuDtFQ7c0`W-SIKG}Q|k-S8}&+T!aD-W5JH`Tn%Rd)yk_Pa@xQ z+3?ZELhs+U51yp`p7{LtS8j)`_rA)n8Cu_$3wL3JP+1W8{GsQ=7dPty6@kuVH*27H zUG+vOdm>Nd+k?*g28rba&qEtuvfu_g*cx1+8+rMobhZP@mSru z1!`GL{n0Iee#65Kilxzm)^Gjx;h*K(`~67s z{TCPI?RkRunF5&gV()4KN%sEe?<7YpcqBl-ik9sN&c(!)ym!A>4~}Ag{CFNp$n-TK zmnDK)?vZ7eYILOOwl!K@o+Kv~5+2WES+=EXH{UdT^|j%*r=!13QV7=U4U8a)s@|Z6 zKfM;563qPDYu>p_F@yGkI7G4?bkTvEQ@TOt zQ7dbI<_rD=S2v6`|7%zJMZ5u2*3GtN;B)lI2rHgvgIrqrr|Z6_kYvil&jegdS%?)y za#(*(rJ%Ywq7{&-YWfE*ntJ_6u1BFgmjQA9fD+T4NX3((1vR zMAFBM;rJSxUzAu^2p@=%Q&UsFL!Oj-y66A;&LnI zRh==OTkoRZtG$K?b>% z`xXR5O5(MOeU9$jn}=+>;%!c^?IEORCt!cd2*9d-Ofz>FCUH#+FtzT~k=Je-MN}kR zM$D{dZrdY_-s+t@?bSo&u8ASa%SYAojzaB@8K%V6@^YETAH*6Kh$h=qB*LQJXp4+> zdjZAYD?I29C;n0aYWTcAZjU&4`{@aVY0vLN5jTDdl7FySd-M+Mq|khv2OYCM@F7ZJ z?=iXGimk2x{;A#3%fbftN{%>ox3`jo5Fc!(CN5&k*N(JIO+kmy@wGDnos&x{JQw6{ z6@clmi6HEyh4H2Indi8)yYBSinPYlqJ;>Q|TFenn{0sxmLjHp`Lkd7FzuV!yO?J7r zP=zPHO}?{M6;H^E`c#YBxtzEO&QI}a#Gi=Oc_NQDZ4Y0sfUxmMHXNJ|9^1(iKJFKCgQja4n0~Z>m2wi1GL@QIuQ=>Sj_Xy-t{bV4U;aGR zoC+w_oeV=gJv_G$!4wVCzjcbp4jpscugJ|BH93VvG@_kIr|BV5r|$jznpwPdrPye^ z+!Kq)&-FLfLoYU|KE}ICfr7gf11>IDsz{J+CrqNRM8P>;fxH2M0h=H13ZN(dFrlKX zJ>%{1)33H%OWSOV&mstYtkLjea*AoV_o98KH^#? z@d&}bulzigR)jVMmtZo^#tfoo$_5Sik{MFlhfs&zR3rd|9}^J~QG2UDD1=aRz}YdO z`S>51qY=?R!UkdNonLj;YWkI=IBEHDL7st18teD(-__gM>M(KPlUUud_vW*7KSr&R7!_Zh zJ^s8Z+7?s5VkF^d+jqAk<&RAMWi82=lcD+_HeWY5J6j%X>~qiLWs$RvK}l9Q8-M&g z3;01x74l#W)UT6I1?MDav{BmUKhC z4k2g#4e{Oq0#Cp{Z)ulvW_dwRS5elEiJZu)cAK+D%I$uW5*^JjUByoUBwL`D$feQF19bu)wR!kH;8rNH~2r_6eF~`$r5z^_yiXZ*=bcy)%oq5 zX{sC)rkkhodV!r@W-YUf^Y9eFM8699yJ~)TrpBj+&vH#f0&lv+Y1B7-ruO6?1p8j) z0{J^1l*|JN5BkjDMd^?#5zixJGarz|P|`P5a&xb2mWaFV&3UuUp2?Uw@X4`1u>wWL zSDZ{VLD+z77N6Q{pqsifwc^*k-cBkT2W@i@ra#f+s$GL&;9WmeD^W507hTlyZPlYcRg2#ROxJfM@mN%pyJKioEw76*KOR!ggbU(*LSgjAnA*Y9zbi>auW~%(#iG`+< zFOZLwdrZ!2a90IPbF8A}i$^ksFLCc*iEO_OWCN#`|J+{rP#?t{XSu)mnp#-$-b;3C zr1V7uFMHhjfs(40N7WNQI6Z9V8^)_dcX5aXb84L15zb4rZbiK8#$p`j8fg3BPnq&r z>?#9Pb?_&L43D6u(2WA6zCHTP0ZDeX$ULb8Us{d@_ko<@jE$n9cNqJK@9YZ|omr_c zLeTc%C|kw=lQ6bD>rx!A^O43dGYcxNhn@e=Xy5t{4)_zX?UZ71H(*_ALvLqps*%_}iyXMrVp37k)q_Yr}~ ztZIYLyK{`(1LX>h6=>SzSE`dp6>*>4`C2jkL~989re?e)VxHwRjZ``0U7ZbjmAWTv zDZ(b(SEJT%wGJKt;mX@gym9!;Z2A#sOlWuT_UENI%{sOXDZIl0 z7=i@f_6r_bxSL(}vWLmVd-M9lz35D(VSDEo)Ld~XrCa_nZ2hOjFCX^+vcunfZS7|l zr=6R-r@zX7_v)E4eJil~0Upn`zsc;^NXIwD6o?pv{jYIASz3oceQWQb0|Fl_Fw`io zD3(&jB5`i2P8kCJ_=~n+c?e6HU*uk9S)}< z&tI0EfLn>*)k%_cH%n(BG7@jwbm^1WFsuHru^}Ew8<5PC?YC|4K1Xb$JR)bnD07ZP ziK^Re0;k=m>fIqzaypKGJ&1E20i1G5F77|; z7N6Qdjgh-hZrMMF5-tMp-r#{=nC?#EK>c!&@V$045EOM_SEq7FCltgOh5|TV#Y+6B zsv;XiwPUc*!m0K--2(98KUx5z5X9V)Bl0>7_NvsU)&F%(AQDnRc+8SU>c3y-0&{nM3{-7R1Y z0Z*aFR+y_M$^UPe(ldW>+fS^x7#Yu+u>#X&0e_lRIm$aO^Qc^JC-KaSMYJoune$Xa zyZVP8Lw2(J3)C>3k@%D$9&VTIkBlv{a)N$Vzc5FSv|ssOS1(l`Tb`srQ~nI^aH$Qi zJp)bn?1B0>cS8CNy#CcwE?@`8?ImHm@u`3P>5oDranJHH!&;uA_6Or=5u5SBcRN2A zC?ij3&f;D4SS|9dt+@6EzSlHiz*yfd8Ow=T1p_8jy#E&}Jid#qmb|xXsoKjyE<0y; zbZH~Zj!%@O!Z(@&r|+XB59R9}HP;1z*E}DMKjv!N_loOOdJ~@NRD=wE1hLunTSX>P zrv#z0O+qf(1Mzu|O=El$RR-u@*|f=d(Qo?^tk2trW4@eD@y~h7UEO8)m)sQJ+804m z4cDZS6}^^^bNZ-nIi*rJB2Pd)&Oh~Dc&=dA>?}nZHzOjRS8S`FF4P+~WSl$C^_vjr z!DRzoSLqDal^=bpI?cTe-}y#hUOgZ@X^j@^UfF77Nx`t5Jwi>PadDqB{fr6YtgQxF zG0x7nr=_F)`*%L#D=xut%e8oEz`D1jN%~jKGkN8gS(fMS@Y$=?*}pPEt|xUqmjwzN z*Cg_!3MZFRhrW$ec)}kUcJz_|H<_wlW_6$zK=_PNIt!2uMeQnHPjQwAf3!hq;{@Fv z*rcPl!4F<1_;)Y-0SmW<=-3uj#P-#7mfQ+71RG68D@$kxr+J0HmxIx3B@D|K@u#E= zlK-P8S@gnk6f!k2t?{L$TK${(+wMSxCOoDbw7@q4@4F`U&Y@{7H(w!16UAMk0XiSO|H>fVk{*g+Ar@w?AUw|Y$ZrH%g*+=0uSjuh{hiRvol%_!#0&Wm;zRlHVp)meHk zT78=-GoP5<(Qj8NDjG4DB(g4sNoWuEAV~k(vRSb>LH9 ztIZZ3lyh5GwzjmK>0fS&q{%?T8+~fYOV;OBvnNO*w0BXDOyP3oBvGDRGP+-crNXJZ!Fw7ArrkCWe%zE5# zaJr&k+FODU==+9Z>?#?T4=WJ4aKpu%o50vPkF(B^_q?Bf&(KoB2u{$^_AW=82dC}8 zz^?~lQ>Th((|Br_4q5#Nes16K?42RT3<1l|ft)Doz9vYpCImb@yM-&;x=%8&mTNMq z)S98M*ESZg{JVbTG=`om_?uF_?}skVWSD+AM8+e;FWS74cR%&pt6A@p$8ED?vc?De1i% zY6HRLfB0e{GwEhRV5$DZb;)DU)c0W7N6S>3uwq6X@4|W6D9rCNO)QnJ*d%fwLfM1! zrM%z2#=XIQUsjJpVP)VA?UKWunq>QQUF+*u%-HO|GO%4+zPtX0ekB+0n;-^|7Ty~Iu*{VnFF9}OU#hB4HSbMVrKB8uXPBKM^CwuFEOV&`~Oyb*$ z`(xDHU(2o&7q*?vcMfIBnUL4Z5PkfF>%URBqY{zO^G92pgZD*J(QV{Q;=DIewN3}O zFzU4xHnLiMnK;{Tw>BX?iOqCDfw#gxY|?Fk>yijo3qx&p#>H{(ik^%^vQ)<;_B%=< zaXyEJ3VbYOMCWcJJi7=l0jeGHvC!yw6Fx`i@bIvf(fa{;Q%tC+{P+3xp|^_%J^Y*-XlZ6+M#1kMf6E* z*}dr`g8V1J-Mtd`)`XW*C&pzIbbYpZ1CS`tV%MX{DEdP_NH&!sQIhbvNF(tSKQyBj zHP^|`O2E>4jyR0DqiXWQCq6?3ZX9gHb%)%YFsnm0%jpgO$pVFKA4uG_sWGQkxSNiKsqM3_Td`cwSgr51%7*6kv=d^4t5xgS&SB*s zW8iDEeVY3Edc-sY{0ws8HYR@y|iavimFlDTCcNx7v7GC2!Z6^uu#*|V#2hHruG~)3oFB# zM+v;t+rRJ6+v-<5rmdi@bfo+{eR$h7m}Vho)*+WXxNZsk7aZaDsksB)PFtGxEoJGl zkfxK4JLD?NIGZZ=+M8pDufPA_`w7+v*?6(M?WeG6r|0pJolxe0OQm~>s|N%zD-9#k zpYR+|p{iZ=_wrcd>s82xRUw%Md$pGn@9vnY_m^{SHCt)hw(riPKT6fX8G+4em)S85 zi+xO060}~Zs15X`en73ze|T>;z87qRVE``Jne27VutCTLbj`zbGu)@GYwVd)WPk#0j~mG z2TI*atrpI9r%6}d|CU<^`kW@WwC;ausf(QmqQ1*K*DG}%ghT^ zuL18PyhoB*4ZZ@2!#>&eq)cP;t`L}{j2jB zn}6l}ZgkPLzntlu~dUtdk?}S-V@WC^SkX%_2b8Pce19p6rt?;wo5=n7% z8^u7cce1baY(01p?Gx+96XdK?8#W%x4_VKuhB@rb;{co>|2r&{%LdWrKSQ?%G_!G3jXb~gS_*uR+9mPNjf(W{e)R;{&soE5OP3AC?T3Z*h4Y>k(sNSjH%M@1 z{g#Rog)YY~v`C;(B|dC^Jz^fB2M%`_cu+l8R{xyeT@*64jTm<+Z+t%pSb3j4w&zf; zX`ADVW|qZYJLB8~{g;-LtdpFFV)O^wVI+-ClGnPv>H0lRg4zjv8sNQ3XTVJf;u@Zn zvZxIXx;uDJT64s>yV#owy0f6cKbAUy>penE`H~zA&4Lati9OU6#avsx*`>U53S_}- znb>4^v;>a{5@(|nhM{rdUONrnzn-OJ_7tYRprQ})mSi+|j!*yl@_Ci!Au`;c-ZV9d zYn!=nOOl9|=b_naPFq@N9~s9Ot;N!dvjRGzqZ6=FhW!l#T`(?X(y_H&7=&o==srWZWXH!nO(AjVQEMLPVp$&_ zL34-6;XieMrNYIln3m`hyg)li-rMEedvpK;CuMEqj68H6i}8yw)_Pc4gOySp5r47e zNYC@czfPHH16}yaKU|%O@+z1L`)}VrsPW?Pq^rGVCbH3ZvC5vDz(WMyaN0(s*e+$%!I`Uub6yf0{*`Ad6vEr%OAQq2k3-L@D5De(==REz*_ zL~tQ*a|gCLueFzuAAEtLjh1$0pn0&9lZ?GZr#lmU^t=!6K;X;gY;Tzo`mdHF`~FxS zVm*ltyH-2xa#8IRf4Fps@raw7E~}q|)#NlaeW#}uOu6nnLfQwKCfdP6@@%a33Bl&y z4L(V^mV5zdb_b~&F@IfpoM>elE z|9mBR+g2chY7;RAl?(4F7rmwmp@Dy^a?Dq!f&8?CpBNn#xfvkq;6`_;2i+JqwsM(` zLL~5dS5u4jdsmy70}0P(=jZlA`(%Q!rP=i6hI|o0cI+ku*gV+YeVe2UOvAO=h=6KVanlNc$p>YeizoaqD zKb#QU4=#tor0%*uwWKW^kLlduN7|aA$7BRsw*1rINvO90sF^s{SnM&UXjCwCeEfHh zrx#%d?v?W|-d_rqMz92FP2aiTU+a#fhoF&m@4#|Ii(}walo83_$||OGPJLg(2^Nk8 z4NO$jDGNWG7Ujoy!qCbDR(GiotLiq-vk})Pxsylqc8S_=7|U&<{bKFMFEJ#^`nHXkH?`N%NJ&9!*c zZHEn6HrLlU5rnxoLroQ%A@;;>MG@MK0lrKJ_+O8Dww#j1_+_kG>+z&vFYhBT;*z24 z^G`b7u*#!0m0Dl-?TgL(bpDJE@S42knp|Au=bx*-%fh*!>~ zGz%STP%qMo4wmJZ!^!!kLoIFjod6NPteERVfoBQP5=1KxtlAUu#f^8fCK1c562Dja zyPveMmou|uA`?(N!VDg^7ma(C=<(a`Ba)H)v8;HWsW$obmKK8$AW(kY8hUs!EkZzW ziGS5gR&{LG`*<9D53?iYMULue@i1$3lf6(w**e!5K9YT6P-K{oWj6Myxjz zWeARI5%sfciDsaUjEYx@-&y?qob*J&pesR-?Wz3OBNx)G^m@#g)SA7t;ghZv#5~g zf5~U!OhF|cm0V3}=@l~V>WR#LppK51Nr9uLp~;I!g2atdb52Xs1a6jNs;zG_(9;rPOrDqr-zdX|&0T$I1Ow@_pR&O}rw=xCMG+1i}i*|}y) z;H(_ixXy-X6nh?+&=SCOx@D*WCrO^ApYl9?X7sHZ#(9l)nBNA zlkS~OH2=2k6^Sad4hD^ww6yo!sV{Ek;glH8KuHn6z)D3xb>RMNsx4XuAJKxQf#}~S z5oCYu%mf3kI^4qW=be&aky>o>4;`IzLS&dfFF!UsXFizlAh+-EO;S|gN9h&6YY(a0 z-{0m=1o^%xa6UYGVReE5rHtEtgA7W6yNS%D15<_T@)Sahj=qGKHbM2=bLNJ%@L&NM z>X&>5Q_k?J5vLQSCVOq~YMOAB;ms`Rot`8?9SYqT3rOr&2zLUXB@i9iJs5mn;$Oq!GqZGJvp z0x;+0mbO*cr@1G8<6}bfMpYkn(`tCKmw`%66?mHebv^P$#IBV#=;SpN5Uuon9N#yn z^3jgg^e^hMCstWCU^4K92T%rI&)4!U8(}cHzlTCy_ke zX?e`LS~k})(d8eD6QPXE?=bt2Gj^5F_Ja2X=`Daq{@??`{OoLX^zHOM|M51aBJxoL z`QphC&d=Y%=o02Zn#=!DevKv_g!t3n{vNtEOBEwxj3{JR%wymEx@!-k_z{{psxH*; zvljxMC#Ot^7|Q00#0jwd2m-Hw6jDheUZ$-3Y4F?V=L@yUW4b$4?Fg+nDtdb^v>vY_ z!$ik?u0Dmr>dkNoXnzQe?cngymtxBz|B4H^2B)@v0@eqa<6ENISsmY#XXc=c*1i~@ z*|dbND2&JBhM3_~b8%Uw*8ca24dU!NDe8=P{&H`M7j##z@YBYwPk9uGceEB8W9)kO z1t#iY224ohVg;;RnF^)Zqi4<5T_u}nIgKF~;M<59Bmb>{OCv}QVO0RMRLBvrD=mO( zc}4oQAMpqPZb$5D#W;lhrf?tdsrE7OS_eDM3%Z&0YvQj-0sJ(^clCIg+JDD0@I4T_ z=!cSDqdCR79&*GeU5jAZw|0a0mr}9szDr?G%cNOw{|s@hA~MooJe(h^D1+3w6(pPv zmhSmco`8){y`dt`(b-+E&hG)Gth{~i91YmgBAkNo;qpM@>F@`=+OGejEzRyo`MMnhq|iU{zvX?uproH z6hv)8GiWPh?!CR-aR{rH(j(>OMKth3D$9_N*fXVPuT4> zez;Zk{~R!!{*6n(0^-vTMzb1Rem1`6RJN2n5t!Kj+sXJfzFbHMt0paP$}rjB`0qRX zFQ*C@MUKz%h&;(L`kR0GRY`-nR)83LH(026@2{p%=x`0yoQ+z#)nEDVCEi}}o0wgh z4!?ctj5+X>C~}s>M?CV@zzOCZ;z}(d@cO*n&7qVEIYVk<1u>M7>0a$de}HNI(r$a& zA+pK{N6R7E;8_{f(C!~k;OL%R#8ytruQs9|&V8SrCJFvkf_joR?0tQeanQFt1zVk zR0z&F$qB;4`G*XF7nwv}%$&*X``dVL8HN?UfWGhfr5+U#{r@axJ1$+)s~nz4VLK^7 z{c~VtG3rCXzRMri76qweex-C=@>Y)TEel-oB1H!q`<;%jH%SYWUsW;fZvhJ_f(2&( z!DQl-n19Lg!)*>`T!J8xSqMaka|Bys5K2y@L#nqDa8|azuB7^9Bl^96a^*SgXI%cQPgfMugQ80a@rx7*X8)bNwu~RepQ<*N)W0nnvgM-sW=%RO0gs_bTZZS zV)3cl0gPa4YhCy)0D^TNL#1?azEz#hKd;*NNvPh#D>uvyTPl-P1Bf;N(9aBZY>X+g zJu|u=bZQBWz$wtPeKPV#SR#)4W!|h)TY8mYFNxTwiny#)EBJW0@_uy)SRdsCebDPV zCgo9TR=2&t0O;w(_^#=yXrG4oj`ZSK{J7BldjETm$Fcwpi2pwsxi|Q6o5sR-#D~-M z4|V^kc7;wa^&G#%4LF|8Y9ZpM@+=+-wxF^q`)~sbpP(%be>fWy6N| zW4t*K4T@6;e}tpJr3%|7PoRp>$ZV6mEW2hFVK9@gJLa^oaDf^Iz<~oUM&|#MJMOb| zB)x9(5wHsr32OS#9>MGw##9$Ue~1`!LM*DJpQVO`GU>|ve^SU~Ef3)2inT>+k&5{~ zRX01J`E;E<9zn{|9feC5J@)l#`0E`6U_Ic;W`@<;ik}eu>-I0Ds>@k0b4!K(Wf+Jl z%pa~)-rEc1I4hT%GG$X-bsqakJjQ0P(J`0$huAEXh5Q!yHIWHl-F}G_Zc|rXjoi9l zoqx_u%{9~H+1c#`NOn<^;`Z*mur}`M+>W45zTO)RI~EhO+LU&CUPejh$7)JD`O)$0U2fVIU6q$zRNKG1%P+TN?s?N4&PV%~flg{r z1ZFhP0K&N$%;PHhzngg6kcN`lLBJ2F=khZ1=*Zsq_+Z$i;a0x{X!757fQDWswcXLo z)0?M*@6Va4_uN_DN(5mxE#3$GdjyWe* z0f4+KC4Fn}i`pT!9$_-?{Z{K5u7P9ERP~)Uv9%Ky;9~aJ5yGf|{uWZR$Zj%E*|+IK zf3ROX{GUTunm#mEe>^vA425ZIu9`e6QHVJ|$0$1yOvZS@Ei{@gnWmnZxGy?v*N*UX zaf8P7>^?K-G-=kwyR>~x)>!>PgT^Y&wd?)XHf3suCArn&^y!&1AdqRoM;3lN`qoV@ z(nz;1^T7-BC^x8B7Qd0f&21Qi@u;~aFsRw~J9XA9$|UNicU5Dv^fNTB2S5F-ZIP1; z>nn8prG|tT4b2xag7Qp_6lFWZW$JU*a}n1^8Wxt5*40PCoH*JUjIB7Kf&PA1i;+AP z|184Z9E7hX$sI9GKbRgwO`e{+Q{DD6U=e3^baViZ$bbR{Ra^{ke-ezg4g!i-jrfA5 zbOYlX$J#@KcAA*i7mVH2qiHF<7DpD~+PpnF*2=HK_*h|eGcy+$0itJtd)mZIZn?$a zt3xJng?rsGjmX`PDFzktvpG^)`xNa>;v}cEYn00$EAl5q<_;9AYOr51vS#kMQB;;E zTnz{sjz?^1al7wW`e?hjlj#+0b_2~avYXT~yW#rwK!%1QI#R}drkDRm3q2IqwP4C! z6>ed5fHpMqEQ#m2v6+j0`<(Ai?_zYdrnM!86r8~Vh;rs)vFo5Cn7|)ebzuQCE%%Yxo8eLP%8gUgUzQ# zF`D&9DJ2Ww!s4LiRI5&Y#FpABz)olqzYd6J^$D z?_q*t;s&4ww{5S zbuHfV@?v~0obxoGHWh2seR-;hFx9hcCpfUL*}Zuc(YDeNpJv}Lf3{5e+t-bXpyr2Z zwsWopM@QR-7G5;cGpky~Fa)}8QS+HZT9{M=S%aLY!jz(Hl=Ycktse5=*QNC2%^e%Y zoGhuqL^5FJ`h(6=jEiq!9H;*A<|A2Z3&s7>2B&}D^m*H)&Y6Z@J}h%a`Pa51Z);Q7&M7yG92hMAA?;>?Yj++ zDuo7NweGNejO-zD$M0JDZdO5#bdjE{m5vY}h)c{8l~d6DN%O zENVz%(&KrV3%oPZil?-+42705vagEt$~J{}QgnamNXEEN7c>iIiWI*{2>{D+bDwIK z3R!NW$BE*ZH<1<0v?;})P0%u9)|LzRvZAWbT!p>OBCsYTY)a4gM_OM?^sTr|vdYyFB&Hc}RG?`_w7DKxHxMXb z+6ggeYPR6fx31q>G684t+0WNT7tG+hZ@H_knR`3LQW3&#?7f<7J8TbcrX^yv(oRJp z&cGT&NJ4)~_j~@ovkd>0)HaCYF(@z1SuX_g)i05Xm%fE#0IPIo1P)TRn{0-B;YZz| zg$?Ybq$AS@l&Pllg}Wx9*+=`z0;hp1(Dc8D7kLHlP?4fs_-H&f19`ddCd=!(nW>?S zAV{$0X(KXOX0`3brz`9mZ4Ms1;HfL;o}Ugfxweysw~mI!=q7KVhawFLOgi)5o)5@s zI<`__yg2Jpg|xH;jzuqgT+Be#w|V2@pL-?iVbL+oJRVffZN-1xCp^ zzh22X(u^Ly==($Ld3q%4nRr%00Q7$dTZ6t0@#Y5mhnMWSjU{BB09$!F^PC|&yUS1! zlViHLfZgD7dZk$ychR?^tbY4WHEQAR*pVnLZTh?s+?Ir%#^CGl_>xCCzELFC&0g`- zfr#;QC#o=_)InrOZv)g9KY-4e5z=qr!Qh-*A0GOB?k1E6vfOcyCTiU%lc0YLgk=?@ zI?lx9M;Q$lAtn8Z{le@((7qBVsm)pJO4esS0(D1dng`^ zB7?jAc5hLuv)w1gXE9SQ7`?NZq8 z$CWk@M+bdix!r4V>0&1(uqvPF#<}YQ1;k-=q1ed~9{qe`IQhMJ(B;=MYasvxJP zp(aM{sVcGSlZ^mx^r5wQmKJ`3Q`|uZji4ssZWdk~2AyJFO5O2XqKi z?S`!^L_bwD`VgnY(Aw8p=Fw z6}0Mbsj}bJP)>eFgQkhM#NAc1UR;Y=cl@O*b@}uxS#B-EX+A{`yS*UoHwMPRN$Jss z;gtf;;w&Yj>f&J}A9A+QnI`|dw{xAuKLy!gSk`^>6ug?hMU5`f2cP^Tiz>E5)y#Ar zAZ`(8p|`bfWb6lJuF^F9em*Y!(;Gj_sB0FM&>qjQGbcG+?7RjMWhqo#0l1m~HW9PM z!U&Ya$`v6qBkHjfd3sL$=5Z1CTec{O;Hg(F+-`xlZBed>W(%ataZ?$Kb%-xk&qnnD zX0x_xuCYE$HCb)nPa1Gzz}ew@N!@X+#{Lf~6RLeb(%Zbr`h-z<^=!L}i4foF zpL#R=D5e>Gn(DyfcV$mFoAd1zC99V|t*-H zgCaZ3@NZsXt@n?+J; z?T`GE+%eJ<44qM`BbSUZ_#2T{H-UdrY@azhZ)>_Q%54n5Y)}0AHBT!T)6~^(2U`V= zWFW$+C7+$(s69_1L@^lU44&XKi7+&?hGdyl#4Vi9tOXvs3OGv0UKqCSIKtdP6+Nv| zDYUXz{>c3HZ%5>73wEpGGQWawF#fnKrAPc)_07CaAw7a{_n9qsxV?DO#@J?4(ahXX z1gZ-JlN4XqcNy!}(O!3^#1U8RaQV(`L6|zm76Jp$im%%;G2EiZ?=v>NfJguags1yh z-&k;d4tgcm{M9(^3^n9;xQJq;nyIj(dWZ%zbH2=EC6ZnwuE(z2Q)O%WzsS~1@qV5O za_QHeK&4KrhVF*C+-|wpDeY1)&>TrW(HXjnrcM>aHa>dIV`sT0)v@S@9Vu$N-j$nR z4Sfl%Aqm9Ig-CtDaEjkJf!4YQ42#xkxO_F?5SL?~kFMnG2 zoUf9KKggE$%jjGdDVNbJuBBaDU;0qSuw{RPf}Isy&xS@kyQHu>)z2em3~@NL-+i-- zxvJhSd0N{a>gsdj9D{x`2Q3bLtp2TDR@iN*BFo(Lg}!5YiYzNoT*&X$Z!+wr}^m+gNNc%sK zD2~1lML^_N%HzT9j-BZ1LXGZ)>i99Ks$j%XJ z_wN4?J^jI?8_pQ!<^Br_mZlHuC4aRY8#13$=$wfhc!O!h^v&$rN7=VJ97_#=j~3pz z!T`1o;6GeIi)|CfwRWY8_mHIx+0Bg`*o^EYMY>ZDEQu5J7886Pdrka=o=|u#3Hk}#% zWqH(nqaEngg$j9BkN$3f5c?ZPuVsul?5Pb(w}Bt~+T3$9qwPVh1D0bE)PO4|+~$^) zJU?zl4*CX8%G$ocDX%}&tAM;zuSfF6xx*)F-VlnK6E0zYSUn!*trg_q^18AM!l@31 zc<8<(9fb8VX>6L`>Ax#@o9-KQQ)_M#T-J!sEo}D$tpB-cFQ59!At8*#Y~1&wOp5?) z$K3x$T+afldT8xqQN@*fpwgqFWqrv16D&d0#SF@9EzjF1HWnf2(k|o02pVS(A(b9giybp zOUH;}D!@}aMv(EJa1O0j8DzS-dn87E#kG{DLIngS{202#|CAH$I7dRy?sH5T{##vk z1H?5lb9|-rnnI5p1g) zSYiViWb)Xwk`ew4@-RQL1JR(U3O=cLiYx8`({Bp%R6S3)&8n!cp7p)r+Ijk4Nibo6 z$)=(;*b}I$OQFN5Px@Y0LZ7nD5W#Q|XDN!XoH}GyymJs^m*#&wD=UMI$M?4Doa#BV ztJ0IoKo0s17-RIwVg!rLf(52JHD<0R!%|@79jdFKSrWewCFFxbLvzbcOHYpM)>=6^ zzp?-_{J)IRUO2op*~gFSTQg=MJ`zS?{SV%bzQk93tJNL29Wo?qjYPe3OyO4l{_!uJ zWWIh{o)gT362P9!`O@QkpKuhJ8^Iiq!`Ll)&Bnh#*TE*ex?N(|`JPU(7Tl3=@YY)$ z=k<*wIQR=wGBa>L>>fx;G4qXY<(eYV=XVJB|5z!=u?%q=?FOI>Q4j4@TrD9Xp)VQk zD(_b_A`kTAyLp1X42%R(NB&GO4SjQ!AV2k)BsS;g;K>Vg+@=8>GX*JwsN+lws^^W{ z`5oN^xfU8tAg8tBNmhqLW(2{h{I*In_Y`~$L3`vmio9&9vIQYpyWQ%j&cC4q1TAra z{w(#xRcz1ZJypmDjrjgpVSy-rk;gkp__gx{F-190ZBQ^cHWxh@;Jg0d18}NVP%jjN zpQ6OtSXCsJb=hfERFT;2bXgAvWJmdsc9TpzF)sX+fO8fM9HcT5I!>>c54*MV^`wG~!Y(G4liVZP|$ zc#@2I?j`uFAb^F6Aj6SgrLt_yeHZdin_%1SyLGg?5YyNaSX3C(FZXR{-na)h$go8A zwoj?EeiDym*!{MY3QOOL%vP`daq2>96~CmMUPlCt$`@ips1uRgo`A>$R&;XdKAEDm zMeZkFbi$jGjbGsO9LOR%Hj#A=<$51^R-0Ey2lDmHbPwzQ8q)yJ7p%s-iBF@qlK7K_ zeh1!-CAc7{-P|1)Ri|td)J~Y`W6KHuuK?j^r#uGnds6dOmU0W%FllodyuDD(y#VXf zW>pIl7t_AP9z=WzxjJE{-gO73sxTcy1GHhR(OKBoWoJw`HxDH#tTqVEb6G}xLt zm0lXi$@1fB{(}79$B+0k(zlQF+Uv30+<;*MOjQT>SNd(bBwzMK2Y)v|d<6O6{S2cf ziC4b0x@KnR>YQsj-hCakdC1tq;YJ zms8@kIpvAJgJwIRm$7iKc)v!rI5-2}m3*`^lvmuKX9h_1R;(M{G$Ff~Pygmdx-a7a zV{nKXoR`9Q%qir9;DHA977_)Kdk+88Bp0A9_c zK5g~1fxQSWTKQ}_i`8SDn2CGoLioJ|K+>m1di%h#NL_))@g~WQ=NQgGjt5ejT3YBS zWkypAl70D1mt?DKD8O>ft+vy_g<%Anw8a4daZgH=h;E7q=`Ij2TmK zF>a))rDNwzD+h2$0X5WaC9fK;-T7HQ9 zYm>ZPdx+ySJydTOm}HrU=_Z_%lpL8+b9ag#$He_p#yrvwoFUi1)25sSgWtvH=H3G; zcTgPAyVn>Cl2;yBn>k=xD-rC~G{Fsh6M534WN0_npxxFZjI=7DK`G?8N*otQU)M+$cUR>H8d?*PYz)QlB!dNEt zyd@FP$)0!UKE2P z0G7POPC33L38(|K$JcVc-_ZB`Mb<<$q(XW8y^_=aL%5tzXczLj&_EUU8})zsv5Lk; z{PN<%kr96Qw8&i{hn-7`!c~W#rKg{~b=ic#QKi*Bd-CQNq-~cu6^-~v$kRfy`PR{4 z(UM;wW4HWnL;y=(U|rX&qc*}kPuOm;XM#=;WD@Ej4@r_yFKIuBg*v#2+%p5pFW;`QnE{IikBEnLDsUMa|38*#mr-4rEU>99Gl?_Gj@-&9SA}fwP!Ocy;r8zKOfu2=Z2Ok|E!0# zSa`nKmHh0Bs)ednAi(63soIPi~QTgx*-6KV@PBJz(TFz0vF*?SR z!4`nIwsflmEWG>5G_VqXNR?2tOvt&_pvfoL$UnYOf`gkkbvDZw@plDxPKujPu3X(Z zcQXZF!2Z~T+a&#|njbOoC0D_4VqfamEXyB~Pzn)r@E)DBDPe2Bi`TZR{4Z#^j3llc zHv1srhqKayXS-}GRV{hXgTNL57(d4p6|pj36MANWuT;NzQ1IrITgaB1C>^!;J69u1 zuLpqPJxhK>lrc)@wLTsm;YJ6aNkxfLy*`>dpe&kNnyYq#i7N+jmVJ~4a6qMEP|5lU zt7OyycGlflEFxtHr(^?w#WOaMH#bqYpH8iQa(l3Y)I;>%`kyKO1YEle3tcPLput7! zly=wHTK>yVTz5L7Dhe9>F=mDrTs$(fAfOtV2$!l^mQOzggEED$W(FJH@i_j?oOP*p zsc1ctQa_k!VPDZ>wF^7YOzFU#5m0_=&PFb#fOz7rlBpH0gX1BQzx_(jZlG7# z9b-B>(uv=^Io5bv^lBe1Ea2#u`$h_JHX3~ z=)ud(^?eqPQp$rjDp&noH28x78*yU!n=2KoNE~w9W)tE_f9V47rC1Kwj)u$`N-rHD z4PLk6rnXNQ1Wat?Uk7PwYsa8<%AI9|y04)dhkto#_uc70%j+i*rM5KU!`>mwK@gRu z=l)mfSINo~fosB_++`5#0&kDU9THa;x06 z%bRfMZ#WG+z(qKvVoy4y>i(*`9LMo)oNp%mNeAjOjnXXxhCeS-q61Du{r0E$R{3d> zd+M(#VziDY^|Vn%Uda~bDIITQ;@c84yT9|#rXH(#~?h3yzRJ-hxGSw^Hb(_~s&Xi2VjM%rU zaXKI-V}8tRM^AKUi)M0Q+A0oT$4*0-)rJVpXq&D6o659IX)}2}BYcu=6cOExa%21? ziWO8OE;W1BrN9_pq01Y+eXifV01Fx&c>nk22dJtu{wYK%*clj@7{z{V+Dgn)@$frC z@w^ESd(}%+Q02aTVZab)vIxXtn#IKX%stgnFIg)}%CX!K{!Qk+P>kQg>05*kVTk7S zXx4D(ADhq0N51IhQ!BY5y*8WmSM{t_mo`W3KYuYk_mxH7_yJY|=8VK$Z3{WMca&m-|BSRq!rpR1qCgpzh1w-~9U|!b*&a<55U=5haM!b88Ne z)a}7)l71W0Gbzr0jnidZ6yjs?qHadlwT`rB%}>0I+$y-fhY2 zAI1ENQKmc_srv3$c`36IYNC@i6Pyq+*4rSa4qW#D6~7+7ww(o$o48B)S3lgeyLN_G zhaF2l)D7>QB4iwYPcg%NDRqqEmP7`B))O;HKcc%F*W#ps0{Jd`u&dBzN*_D-6SCfQ5753+cu&~PLTnWS2 zvxze2pQ3^beApNHbu!JSU{Qt0F zYP~FB86K$SxgwNgg!2-l9?*O#+aD#rQHd_*^g~wMW2f<_8+K)tLz1DKb z(aq|NR-GBOn@|>taKAbkG^^UUu)2JoUg^O{;PV7nf8a|i63Wuh85_m5W}&CII}C@3 z7=|C2!jU=u+3;f*13Mwk`2C%Y-P(gAga>`w<%;vKUIa~Hhy^)Hh3Io@0^O7=ch#qt zP&gWDgz2SLsxcAZ{kP?BEMmOVDcQ5VFW{-1nAK{ZeOrM0yfG)-DBi@)l-*5wl`>Br zwXu=+&&)C=Ot~RQk>S*boF@qPfz=MCm2TrCgDI>sX(A7vm-O$XUwuZ zIfI18N54xb&E*~Z!qm^Eis}FItr5dH>8URwDKb&)LUl~jO?mz_aIVIM?(6$^mt_|J z74JFL9~}CAlU9s*98vq?>Q$4Nx&L^Q%9>X*hpQb&11QhLRc37i5);%wDeji{(ZvWU zo7SeNaah5py`)KiI+;tUvDJ;yuEd?7@xZorRNMDhf8fCd=JTF)b@M=Lc3RL~jeI7S zyCyj4m8)kt+(v*LHE;x+o72lGaJ0aWnBKIUZRJ}9CfZu974lhFtFpWWZ}7W#eiX&& zbFdqFJ5brU(p|Yp|G<+4Y-@_EnyAfk7|$}S*U(cmB8F6TviJ+7N*)W_3KtZ&NR|w8 zz2;Fk)(_`K86|6uu}{?HYH&N?n8R@Dk<%Aju&9_JEH<})F$;d+V-VxF0thj>pn1UBFuvxcdxA;Eeoj+z}fORgwPm{bvo}ZsY$RcG# zQnpuL4WUyz&TVC3%=rju6I7PKF9x=HH~wo#a0tG$jnNdhc|DfBULkr~yw!$xdkyb* z|Kp=DKmQoO-wnDN^YT0387uqi5))55t^+Q)Q9~9Zq0;wmz9xBDi(vVU$S6AmVVvMn z?VB)vndV>aXQ3v^JNm=TlCu^c6a#fJzQ~sK{QS#Zx?DHzknH+7eu_SqPSCf?7cBVB zei$Hg0;|Qp+6w>O;_&&C12^UUAK zJ>1OC528JGBnBjlG@BROO5AVHC?vp!D;5Bj1I(zT4&faUU_5Pf& z(R7DpaWZL^`1ESKclj|;AwBUKVJkNS|IBlWk3Oz;;L;R;QbG^yw3EvoFjPZ$ zYPHky%9tNbO{SH?BaA0|HiPG_=QT9Z+ZlAz zr6#i8#8A4e_D6OTe@nzVP%`iHqicb*MVfi`y&$P-h3aXG({ED-0qejQFJrh&ascl< ziNGr8Csf|_H8{r8#_T>95c|w;Q_I-+azXxT203!u>=Uu1|Ce5y$lipYkNl*Y*2I-j zYaL1Yq*5v_t+gbT76ST?l1Ei#l(+-?rb8VrKs}atv@vpg#vr0DW^%zGg(Mf5r!>aD2tH#YOB0Z!_M`Lp-Q)pjBh{Qa+eu1pW1{h>J<$D4j!aJ61|Ze|5PWmhb<$BYQD zi#j%Au>WRfx2)|?FSarlwUL8aEI~<2_ubSJ6Ge{g^`o0chE?(>Fo z9dn{5iW!p%3CoRJxbhRLed+z&j#I!+A?posLZm*0bC@Dg&t(JI4-@LQ!V`X;KoVqO zMPhz)oO{wbJe_nm2ynY>A7}0sh-v{8Sb@bSOA9wSYIYk$B^Gljz#E<))eq;7c17DUQTj6mw=ay@rTy-)T2G zM7Hj|?btgefH4VjQ&J0ZiOz|2)`XfO{Q}_A>c#<2l>@}?153KM5Y*qy*W#Wi5V z1r|6NTXh+XdRx-0wZR7-MC0@6qUWo=mTgDuPp-&)mH3?ufF7q?xYY~{2uvWLy87+! z6V{zI!k*>uQ=9U-+?}c$SNmd>Ft*}M`g=^CmRi(-Dn^0F4nF?rnY#I;`&-;Aua3{I z)*zcdkt**)AuHLX_k0QPC@Ixack;$V{Jc5fUQM<93Pe*iM-~#Dxf{3N3D6@5RF8rt zqgy24kj6}kET<-9Gf(-#@7pWC8yc+U_a-2M%$UXpiVu8h#Jp2aYxeC{XSX)GWFqhR zMy2=M^#uwCBq~hm1SuYE=N@02l;j=p<-!x%|FHl#VSpi_v6V_x!tcwQ1RVF;rllpk zDEx|wY|1T=l&5-rG2XwX`SFiSpmgk&F0kB$4*z z?K#sa^3rv=$_L<`^|7x540}~uz!YL2_2tYa8W^O^iGPOgMQD_TwN(%aC&;NT;tr&V z$3%W{U0_x^&j(ba!lKod{_K5lwubsyvI2oJyrlo$LLP>J*{-Osgq!yM z{*KVP;k~p)|FDQ4$79FOGs-O1T}I=aFN+K^2w?Q?hv?vQd;$J;^;uA@q$-)WMsWMw z{rCi(5Nc1aGAWZ4F4hv8zqXmbUaOE5r?%(c7P=S|&^{cX08qx$aHM8LGefTnyo z!(E!&=N^qfNq2{vbYJq7$CGR*-FWvn82{J@cDSJKm~}UE=ls6c1jFxP$osZE4}K0_ zYc&HkLV!c!LY%p!=1>^|8dUw!J@nkS^K^dNY_EGcs+S>^yCW7E+LdE}3f6cm?z8g* z0YmeLDk;s<>N+qkw_)E|0pdht{pBr%vv&Pf7-u1+%!<-kfIh)u6tg#?Z3~e5jTm4b; zbNdVZ7$sYs_USa!Od3wgmy}AOfWt~&_L+?CEzvYOUYy<@8=GjGkHeI&Z0D(iRY+F- zeC>|#oSOdGX^d0E+0;B8P_>nGHqree2OsQAt0#Sz!?{Ux71&Fdtj)F+0wFt-%PkCD-}gp!_7sgpGmNN7X=egqkUCs^A@s|?fUzSM3#&X4R&PGZ zFQlCoCbZEkxT%&DuvULzh94Q23Cr^GMdKmK7w95$*vf)?HA+NF)_NcdTsv(5b zVl<1(3$!gF%kMrMQW<3xx=77;dd9y`T#|Hs4yX&hm++*lv(|ib=yFsvg~YGsk@XA3 zfEVX+@jc@%4D3UtutAT~`uc!W2q_o@<^et73}hx%sKIeR!$+h&Y=24>)8NFUZ3hpU z@c3~tpLEzN>=9(u5cU3bM@o1x z)|ZE?6(2Iqk2gXOwzo`|nb$q=7&Y_N`uLcV+>|&as}U^5#`sn0*Oh!DT=`W)<|ZXR&3innK$|v0kJdU@PSfTsW(hNwb0Ekr zK`)5R!r5T~e{$9*lwbZJVaBd-#p{wr5d(q}UCIP~vBdz)uWd7#5+7f}6U@vEK}`G* z_r{`N?4=#~K>eZ~lpihXK8x?ALK#5rz!|4A({eeOH%o5(Xo?qzD