From e5ce93a20715cd8d01f26469c954cc8c6d7b784b Mon Sep 17 00:00:00 2001 From: Faraphel Date: Tue, 14 Feb 2023 23:02:44 +0100 Subject: [PATCH] added a RoomCreate and a RoomJoin scene --- assets/image/background/main.jpeg | Bin 0 -> 61751 bytes .../image/input/{inputbox.png => normal.png} | Bin main.pyw | 5 +- source/gui/scene/MainMenu.py | 69 ++++++++++++++++ source/gui/scene/RoomCreate.py | 58 ++++++++++++++ source/gui/scene/RoomJoin.py | 75 ++++++++++++++++++ source/gui/scene/__init__.py | 4 + source/gui/widget/Input.py | 16 +++- source/gui/widget/abc/BoxWidget.py | 4 +- source/gui/window/Window.py | 2 +- 10 files changed, 225 insertions(+), 8 deletions(-) create mode 100644 assets/image/background/main.jpeg rename assets/image/input/{inputbox.png => normal.png} (100%) create mode 100644 source/gui/scene/MainMenu.py create mode 100644 source/gui/scene/RoomCreate.py create mode 100644 source/gui/scene/RoomJoin.py diff --git a/assets/image/background/main.jpeg b/assets/image/background/main.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..930150e009b24d555f79bbfce5514d475c132a74 GIT binary patch literal 61751 zcmb5Vby(BiA2v>RGaAX!qedg3)M$_nDanyaGfL?kV|2&pmQfOdsC1X4pmeIFh@iju z`99b0x}HCuGp_yfj-A&zuh)I<`#y)i%YVOMQE5Z8AXwPg*jVpKT1cq{-FOg}klr0ceSoQIBN85gMD?^j;|>w7m=lNpr16dapYR{Pl}zt`CFC$O#W z)y#@ymm4R6$^`4?p*8wa^W*sge zS1!#Nz$;2Y+&897g584D_KJb@Eo*{S#}?m#a4be_6u*rCZm%)UObiEzlr<@LQK&7) z$J$<2nVKiF#>w-eedH@*tkrrVhfu*H8c?|w zX1mu})4D?H|<<$MK< z#C}EeYO#wfh?!iP@vSRcBI_ zfao2NioT%U?0eDjRw)CCPM{+F{-SHy`EMoT%ZPmew}Iu$+g;7R3k2a;qEi*yb7P91E+eZ23o$%ViS_BUF-j4k{2VG{0OU zVd)O;k_|mc$C7qk=K3PRjUYTt(;|xAzDXX79Ge(djJ~egS#Whd1aBZSchukCcxk>ZS#kB_lL`FYvhkoIdSb=go8EAvzInt zy**@0X}GM>MCyTLE@SisJb}F*N$9mrLU=6{Nwo-#2A=fB`Gt|#d@;&)F|TTSp&n`N zFHz<+d9hh`oL9{k*zwW%o2;I2j$eC-Ep0pHw=i0l1$g6)Wa<`ip>tGWUxWD`U!~mT zMTm3TF4iz6zj8<}E?Wf$o5i0SmJ!cMAXn?&MSUXMS0k~S6U-~c!D^ygF6NFf>L8Jn zqrqlq9H{lIw6PNf`UjOn&M|142V4L-IPnDQO`WsHQU0wFN{ESw_<*48osIjuzWMP2 zvp*3TV+G)Fje$hoJIf8_M2=DXk?E#NQ}^NE4Ovb{DvN^-o^ut~`+ixe(Th6gTtx-DeFzAy1Qs@Z%NQUCax@?k`H@R?uG($O!A%K5dM zg;ZusfVcaTdGNbLsCfYNo2eJ4T5l|Pi%u#{(-w$)hgnSo99&may2>e9s19_w@Y6Yv zPqRBVWSbxU6xs9Y^S~8)rHnsaOEO*mu+F{h(wdrT)s64` zUI1Q=>mvG2e5ki3$IQ7aqWPjQXQJoF_biL^G&PzAa=HvuBWrupnp{DAgX_FS8Ha&0 zDBtm5SNLS0Wt5V}=y8gRfGrpbihSJNk%>ZYgR84Sfi*Kip2?nc5%Z&0T^FaR5?i;{ zUTvl?T#Xtxh{h{M4rn@&^Ajy+cRvs1mlXDnKP^|hJw|xvN%tlF-YoHTwe|mH{l@*1 zXWoF7b71Y0F{%dQ0xSKtqyDn}-(iLa8y*v#<~g5tSbsLH_j)SoTHG>qns(bxx(8ik zQY|=hT-xB$*VRd`bBbGNE~HV_#iqvu)Hx9!=aGswh|O848?9(pC3;W^3cltr^=T@h z{1!-dxc58Mu5i{y?VUQh_af}4w!uP#U4U~lnbl#XTc1F1I!D8_Cwu;f<0X+zq1o?) zoI7hN)L8G7$E=D4Lvl%HT^^uBvs=Cweo_PrV)|vWZE$}DOh5}bR=(f zluw%<;wOBBg^QCqbk{r)lHUr6Ncg%kx@Mkz)#&lT?P~qL zWvgQmw%^$579UY;^IBbPUg-IUMx}|NyZd~=XL-l>zhrh;ZTrk4wBG6!znq78$Cs{` z$k-X1+fDB*c^L*yh)-vtE)JZhi-?+%Q(oX=3kVH<`*v{Ab~n71M3XRYdgD#;NxfP> z#BVKU?jld((aar7gMEE9!g?6iWe~4)?0ZtA@a>VISpjU%e?y>NkK`&a?57LtHk@5* zX>Y0G*j46bQS*#(hc%n|TkQy(P=cjL9E#5RVQt@}nusr{*+LNJ4$Ump3s&_brl;Bp z^v}zkt-{U`2B{rii`U1i5kb1^QyWT%$@{?;hT%&=pdXziYorf&9eZaq4 zJly)W@&Vd+AJ*-vmkX2Y3{U!%FBo8>!(@poU;}H@KJI5~IXGM@czmI>=4$)mxNVcq zHU;(eSMHJgFIZv~3;!UbWv;MhMN;G~vpxq)4imYMF$IBv%wgNXUgy+(_SkVk`=OJE zHudDZ;-8W%YubaC55fKwdmbmy(enV0aoIq=lHmC_!OYat`?uQHO=RD+i>1d~^Y{!h zDik@tb}GG9A4pBz-3V2A7*Ai=-54TK-AOYKbDX&8?rOh;J;?2=b5pR5g^VHX2Xl1I zM?(xAt!4S_ZPgnOe{)|Pn?3)F1)G&Uo$_{Xplh^v(N&~q$CcFXbW0iYX<0hm32%h! zLHa=EbjU1rsq`bI0jP0l;c(~Nuz_6t3|W0qmzef<)AYM_|xX~IXc@&?@RVoS_;wE%e|#^-1lyLx_0APb&{;N&sLqsMYLjE zcB8oA`F($WAtY7*JLPFOAjRiID1UV1_=S8hz;9STyfOGKgLE(6_nGbZheA3?S3TtD zgC*1bx+`qE+@4wN^KM~lvy8afrnW6(;{$;&=CGgqJHop&({YV_sKO(g0O-ENTgmtU zt+|1s??97pCXJEm_QNsrt+IxjDs+`Z(H=s|cG+5E@+*myd7THv~8|m*V?*5QADe`l1IP)d(9MyY#-#n|y4X zQ=a<$=(Fe?%e5((RN%Q&`qzqSLW$a`fIWmtKlgXAH;cq(@n^Vg&iL8ww5w~pUT7k# zj{J4w3%1G(g=ZViwl6i@vV1x`Egep-CQl=rRZglY>WX)*P2U{PPBoQ#1=qEf_TGN> zuBzte`NnkeCgW)~ub6}KD?KW%u_4#6WEa;1sQEL)5--1MQ9k$H5SZDit*D0BieGT2 z<$?`!N44GHEg7CU{&C4d6uvrtyUkcRvWQaBuS(~z4+63g4}~k zIatS9h-7O+&gz7!6RZL~GquWLC=!|DB1~c-#;4($+ye?Z(Gb;hb1+%R;c-bi+M_eG zy;+c_95cM;0}w)e9tWBun2)L@rTTiM=GJqC0_Iq|KL^ZbJ@6MC8?;IpP=(r~#x0Uo z#C(G5k3^L_v=D}z)ljIKpq=gcbhVt@x7&^NV zAUZvL(LL8Yo%3Av(~W*dZ)osaHZL>JZuC9FP#mgnlieyo{q-QgJUGPFgJ^L(os`DV z6Wbb1&W+@Bz>%Z^6J=pPtKspPw0x=oZVz|bDYLP@IrVp+nQB?9T-{na_%StJPN{vS z;lw*zNRX&Xj2tof^tvub#m}7VxY5^WN!69&<6Gt@$l)@dPnVl=W9HhvGfl5|u&*_k zC7R^K!qxYX-*jU_sEOXM4k*v4t8RRp`AOp;Lj#o_;HKfwq>kc5@jvCCuzT!NEA?$} z$HF$Lc&wq*+Dhf*D=Ct*EvYk!*k+_w+R@D2itzylD;~wCn!BZg?zQ4x+qe}ts^jyN zfIkE4oM#!~OqkwELuc#9@p7i}Qs17TubR$V35tZ0^tE}oS|fFxY%eI%_V8{qvRIBp zALhv%2wj9{h0qVpgN_^H<0hLv$;`1X*b=pKh-AKgYQhosey_G%Ok!(8Qk2MOmSZrI zbfXv+mcJXX5}Wts5~nGI>2mJ%uvyZkp3#i_V2k{2jA;R*DT|J&RE%kBx?w&MjT*CB zq7knE{-rW>@_jAGS$Sz zLQBXp6Z>O2Z)GXtYQaxelcm&5rZ^ya`mJe$LwR3u`gI0p&0wZq$K{2t)fkzbPve8N@eB?LDW@piuD*>z7y z(@A);q-^F1=kx_4Xf(ej=_*IY#>z9oJIQQtoJ3;%0w@MGcbs7|$z_GhR>h`ZR3>dP? zdxo$7xL@SF)F?5TAx2r#Hf~Xzr4!Vu;%D~Y)0{6FEdyN~e5xi~dR+8|0Y8xYmI8=z3h^Bw_#JL7u?xPeUf!!MWgVDzvx=$sL#mbNw1O0U_M07(9;XZmv?%i?e3U<%WQct4Mxb=IHVuD)C`o16HP#|#aL?sHw=cfsF3j34y}#V_>s zFf6$mWJbnvJX7ViGUqyF-S2es@#hnqjFrq$x8Tf46O)uUsP}w zQZ8&%t~;WtGWTxGvU|6}L}ZN6HYLOu=H5G#i}jvgZ`A1dSiu;#XymBoV~7zcqD&bU zB5Tq3Y+>}-EAP^BSKfTU{rUKZ)h7y>y&<>o~tV=Dta&Qc`#K7pnwa7ozYjsXmt&Ym|!o z>PgY3YEq?Uz441R)4+yl)UO$+_7sZLApe>o5ShD#s(+ULo|^L&XC#m-{qd_e#~#{s zD}Y8>a_^Ssqt52~Ng}yg{!~^oRs_y2U5Rl*Z%G&Rg5H$c5~@BWv<&8PP~)ZsIRN3< zT9HK09O@&a`aTWJf*-%jve$6-M9I}|Ij=0T;vx*{T9a2cla0`a6P&LsHI4Pxcl8*h z%05IKp3HXbs)kv}iw7&Q_fNJ+y6t%B#o6=SU9gQp!CC%FWbbzjoi!WW+Rd_ST zJ+L9z%MI6>^zj0SB>R5qH~7`Q@~w!?Te0iF%3q~*OcU?B4tMg%)w1um^XboF@-W+~ zqPGh20$HC(IsM3@PrPtVgGJ)7i&TcF8C4qI3Xv1kU65s*cTGUn9A$mi$l9Flb^taw5q@t)^j zGsvh_td-XKz6(t_R>~#FA^lVqQLqrCfXU^K% z%|c&NeFHs!UC(Wctm`YLGbH7zXpR_jQ~>EM2`vSs!>;K1{D`i0gWORj?yFjI8_Veu z$~cyEExwrw`e=I`T&8-b&5{}JZJk}SL>eb2?@JtkQ~tE(B#Ss9 zKhg!gEWk86(O5WN(RN_OnHY&hWkHu})Xa$gKzjGkKwH-MiI9<7do+2dM5A|u8@>9x zRbPaDrFcIufHq_HU0|X7>y^IGzb@Rp;|&xJ^=#P}l51IuTtzZwC*KVp%5Hog6DbbT zs2)w5)7$59JTOl|s6Tt3wJ_-%jxT8Wm1BhK5U2MosB)>b61u~g4<7D6y zaguQn00fZff~oU)s!yMBcN8SKH%uBzeRK&et#^r{8o<#M0MU)(Kp#9_d5Y_}sbwM0 zxX_gUKAix|hBbKUdA61N@Kkxp%xO@s9i;U#-*2u4qQv)>ViiGw6j;fKNCMK8Z~j%iyd>H-Gm28P^v~&m)9!_o)m@K z`ZNv@={ltoW*vLwozCnhR$(#uR=gu8s(Nr>E)!_caS&H|u_94swFF|zY>cPD_^Dd- zfxVT+7+ypi!-Z-DFni<$Ql&*|aWLr23#ist@|r)D^lh)~=>G0wod!Y|(2kbW#x8sw zTV;r+5#VrDic(TnTy9S8vG>Kr0m!S!h{u8it=@eO0!qS1WF z`*VxOt0&i-H=m15zP}&sml3ThY6@~WJ6hrW<6ckjL5O5*b<^)VM{|2As#*OhxbSFwDsv%zSQTwsST#?JN5DTY_B9mr>*}T;+-xeML}p{&Rf8&3 zNN}5=JgQ*7Yj`XlZR%fAu#g#9N9dWPm^^Lvyjj3GYsDU2)Wle=!kzA~%^&KZImv8f zA0vjH#@zYLFExq&_g*+J2@x?i!R%v#iDmju3PriAkf*YrJEt8g^Zgpqd}d>9Sp4es zf}fMl4f1Hcnna6w(pD<{FqDvrTy8~aik!1i*Nns-qET@CVX?U_xb`}fvKy1 z$(Ce{!^78*SWoq-ynNW#{Y@JMJTO_3XB{`ly2^JZoc!68IU2;w!*DXtI{%|tsxtEB~=|ofKpdZ%U$2m!&nYwf;s+tMy56Xka^4tZ4{anj?1rIDO!!?Ii$0Xi< zrOSzArhA-T7)P1!G*8PsV9LRimuRJ8p%P~}WHCHlW|*TVX#4J2x+;Msqh;`)RQ*2> z**hnvSN3`et~_3)bo;zI8qul3Pf-d8xnO9Tc$k39bgpSsOpaw)7lU}}o{(kBw(2!0 zP`)YW`3W#Asf?`axHzFm;DQoiC1TM$R-QM=l$iCKQ@Gb`2Q>hw=5|*b_NB6fMe3IL zq^xSK>?dcNm5Lobo8uQMdbSsJ4*RQ98zst@hGgIoj}}N(eFK`pYdaq?lpKnM{Ka}W zxe~468eeEz{N_{5Y&?#)=>ro)r3=^9Ex_mTC(OoR2L|Dx$a<|eoT%eSGX zO?jfWX!4?jT%N4a!Xj?Lbb5Spy4kCcZ@hW#=;HI~jemXP1t`sPuf4^95TmIY)6QdEtTmLW)hjD$a6BdS*^96yd*m%#9-oO{1~osd>HQ0?$3B z3B!ZxQw~cR)G%bplcciZd1U~Gr);iud0)tj=^nCNwflv8uPYggR$a)u#WOfk&V{*{ zGY6d?d5HtsBdOl!l4EJ%C=)2Z0!F2#(J~kag9?6V*ho@>tCW{%KHmHZUGd>7pVqr5 z=%33C?N!C5XA3Gt_UF%TNLWa}o-f8_#q5#*lgvHIlD#0^lOR{8iRe#YoOWS65aijM zB+}VSO+sZ@yOsX6 zh-F8TyaxS345#ckp(|gF>UeWaMkiryW4#m^QH@2DN$&hRjr7zwX>yAu=b9}1t%T1g zG=5w|&sy{7+WF?o{z9>5x=_#Vz`(oDtIs~~>}y+H6!b;!{xZ7T$Qk#4N^q#gSjYh% zLwO*fT`h85+vPpg)0f5JZV1OI94Z^4gW<&w+D-A`nGNFXD&;&T`Q6uIkbHZxS58sl zCeMYGH=s{u{tJ+e6pJ)cGLA=RU8}N~hzXxqpazZaT*|~GMNvu=9a8*m-@I9(G3cT* zA&%w)jzn^R$P1ra1>N7&XO`1zpAUR~zqR!)0K!0G&a+4}kt*#%`HLiZL*clXfoKkD z0JHH^s~j!~`}fRiwhr|CFI2svrbH?uGaj31V@t)FAMCFo$^-n3FYHQ>7+oHE=AxQn z-l?~3yUSZiP?p^kpjRLExjr~9+O&Lqn0aPzDP%vo|JDV+Ijw%ibo9VCB&1vZi@cEc zogk5NI(el1{_Ok*t!v+Qf)S?$L7Y*w2i*MgiUK<1S-ArFOiWL;sL`k_-LsK6E-mbY zHgVH>@u1JimOyXa0Lr}()+bFBAt<>AVD=K^BS zVsJAo*@bV#{OveOIcZd|MhMK9$4gv7^JaG6{4`JEtLpw-`E(sT*?_4;h{hbXRtLWG z7hSsy^xI zN~UBRqV~g%(1{6guxSR~zV{g7JmLywEX=~gbH*=s#5TUuUMJU(^|Z&{s!l=WII?epJ%V5Z};5Y__Fy5@hQ# zDSRiP#dnbz)yGFoZx@2Od{aqHe2z>vQK-%xRLtL7g7%r1hl0@KUu|}J)bB8lSH?45`Q$S4)fv%x%hf2W}>N%gxx%w3~g{pI`#2HBdHAe_Sq*_xNu ztEcqlq0-W#v2>$N=Qia-JJO3&(|hxW@eT@m4|KG8BEm~O-HR_bCQ=$ zI7|3`9P`ZEe|I`^{UK!mp?{4MCuh-}i6^YZ(p^}LQDeeRy2+g>0V>V8v6N}ii|CQI zGBZm_Vw$*0CN)vI=|H;Lw%-2*C@r0TY(N~j=Cv?vxTw4LV8R22Q-`5dMxQB= zA@m&vRjgNm2`xeB$z;)XfT4B1QbM0ss%mZ(-;ciWFPLd8utELOmR8`~F0R~i0{(ND=EGz|VzYS|^)q~U$xxjm$8NxsY8JO@^L|@RHQr8cM zYYg^!9wJnCb3rsP2og|>XRmRkC5prt6GLS(UfdY%?&WdWaNK~c2 zn1q)YfXqI@N6w+p%M*C9aUA8bmyai$;@Bd$ua4jZON`Cu7y0DrN}2M(NH_n z1|l!FzJF=@14njswF)PoddvrG8v49}SyVX!9~^At*s_P`eh<^`7q=k#8otg79pM3oDaBoy(e0j-56WW0pJcJWnFJpq5 zgOkmW?ZlhWkI7YUR%K+QozVqSQd0a)CrIKzRMPiLZP%9T4!%JeGcDtoz7YO5Wn;kp zVthy7@4;NK;ew8vb40;?1PRmS_2r(o=k)(ZM5qumgU@HZGRG7XF)<^WCdnyy<5SMq zxQCz)u~ceW;0fK)>-#(hEym>?@Bc>I-H^Tdhc>r~iglH?lI(O1Pf_wi@jY%Kh9xHM zgP1=2RL@|S9#8lrJny8+UFVao@q(YUC|a6Fyywwf;H8!Hzn=Fo=V#qxQcC2etR4pD zr#&KE0L!hg_Am|)mZ3yrF||yM=zSTyeUx~QbX^_|ACo-psPxl)iNi;I%PB%Hzyw5Z zPrk|~Cap#ys$CTPcdZ> zX4V~j^~3@rwA0(FM`}D_b1a&E!Uf{Gzqg&XUNR8-EfR}RzNK5489Y2aS~(eJ-(U)d zJvlFEZ3_C~^px+gHZ{;nn1$PCGPiWaDW^Xc&aU^+IwINAN0ALtW{{aSn`(WqNcUrA zy6lm@=K6Bq`Bf^}aLHBS$#b+L($V=(w8oiF(Ae`&3V~>sVLFjY_Vg6rRON_f#0u~w z1H(&lfTA7>!Nq2#N)c9PSZE{8*))5K__bUCBkGY)k;u29H|EpHCh74w?t}WaR)0L# zwvmQJ@T&gUKN}^Bsn58s76x2sW-V>G8{;g!(B<{z z<+a6ZZB^&%Oiu%|qVuWUCUwr`G6_7F%Acd;mO#GxWOR}gCgpY$_t><+JH}E{@*>&b z7)8)cd7jJAneJ~OVr%PU`0iul*N=sBhM;<>%AD$$iF*(V1XCw~!VN8s>pqrx+BwrZ z4mDSN;yQJm*@IDXR8MR0Q4|C1(@GI!OgWXzK2F(V;c_C`DhE4`htQ~nu-ut`v!W(x zPxv%v>%W;L*FG77sBZto0@N&{F-QbY2+jI2k}#IPvz51%h*A$D$`sb3^1rL46q3nM z%+DtwsC;qo7weA?`%cEib;KxVL^EyY{HJj|<8gMTeTD5QfmZe(nPj=1nH=#1T9V-p zoc>}ht$th+|NJZsUCaAhg~CN^J5pi4a4;PV6Ytfy`wmdkM1#3Gf2TsLv?c%Gr_Oyq zrVq;gOlKDFW}V#;`!b$(N9HXT0-EtAXJ%&3`Y}qD%+B;5tT=@O3+M$T&U`6Zw z<$P^QNcivdP%ug%>9n*hLq=x0AD6B7p)P~0Gt+ZBANesLv=H-v8WRtQYIm*NYrYuWa70Xn1Hc%dmlbU zph=S1q1rL?mP-56mG99z7UGXlxqaQk&4xX~*QkakVv^fyy!=i!2AXHh$npc*dG$af zx1+;2XgOJIiyIIF(WB(a^BL0Nl?T=giDjt^8qU*?9%&9#O7vh z8OZY#!a&Z6KZbvjG;YP``n5Q~-EiPeBbV12I8sR>iB3s83p8UZEiVE6g`{AmGlwkN ztaJ&X)T+3+N=DLCRtcvUZ3dMw6}NZ`TVFX-KK#WhbJe`pSYBj`K+-!8Gc^ysQ_8^0 z*?I=P6idG&X1~L1H5Vgqf(K_E9^q2o$g0mi)7bj@h?e*!*fQhJTe>^7*uuHCwzj7H zJ5@4*xJg+KCC#Hq5N`<(s zJmOHOwfKG4Lv3A)+?He(hxcxP5Y|zbM3K^L$T$ldv~17w`j?fo29nLl;AhG>doX%v zX!GVghmgVbHc&)yQIO@TIH`!KIL3luSn%BRTu`hs?2q1n<4&Ns1E$^n|sX#?mt- zCAWhwp5x4!bAHc-0$HY3gBsP%4(7a~fIQ!1N6o%Dm*A%5`mLPJw>k=@T$q(qF&(9x z^UK`areHL*m{b(bf!Y^NgyVA0Zw);MV9sjkoBY^SXpu>5GnlENRGz{^m-FgyeSAD* zd4htIGi?DJ5UN>}l7=E>lr@f+40Cis4^oQl@*39GpxmFp$+h?MB3cR{2P^cJU0q%5 z8^*uoJ$1OXsnbVbgwmd)=y6aYWv!%~+NJn)yc17L19cnqo<Kw(hFspFxSmL#n@)e>Bc1~CyRcNpaMHI})e+;&1rI+pPL1{r*8y`s&?wq(53l5a1h}4*pz(n>7)lt^3ahFf7oF91$X9pF{ZSe5#? z2I?)1NcL33kjmlgSB+HO7Il%|+~aUc1&syDnzRe?iRG4-og_AY*pA$oI>7xO9esg@ zmDAX$<@tuCx4cn<8E`8^`5<#1_zuv3ueezeS9z=kt}Ruvnn_L65?h(0_7fr{65^LI zqA#k-wB9>!^YBxCZ^L`}9wmUWH|N?F4O6Q3-gm#a{yI(O~h z&os0Kzuae{jCO$t&|}y$uVd;*F_c&meMNaHM3=1^UiPPnrcYK;Hh?f6)8BtRE@DrM zQ2s@@BQecA%{?*AE#opYm~Gk8YXC9;D-35t&cCZ;7$U&@Az!vQ&q68;7<`f{#hyI0 z=W@8A`{LloyCnWXrfjQ9k(->_P~T|zP!;FYQA>EM!?rICX*;54{l(^^ZsZHgn%WzFW zbgWiT%7R|Q^73*YhJS3qxL_#Q?7qUB0$K+7{GS{J7}l!Ojg7M=22iPWCyMu`(~GM$ z`2_Y{UhPB_rp+e*G5|X0d*x-1UVe%IO%LTEaMi>rpwL)aNbt(dX>v6^_OryT#0G7f zh7~r8@~QX*N`?5Wf&zMred^tW3yD$iKl(4Ug`Q~D2jv`nxz^_`e|1*O`Q_0A(&~g3 z&c`2^IcWheE$>&7%$x?*B{_Omt2qVF38QzpfRR zj~DNOw+F~0zO-3P1ury7@@t+UhTvzp8_j*}y#~&B3a%-^2;#3Av1~w)<{bYg977*@{yug!_m^#FwiE3bm`qX^Lzkq0n$H;pc~8 zE#EO|L|DvM2&mbSK67AVfSBr}9Gw6OQPV*>4-4mUEWmw|so_bx_{4c_0~+)f z3mI`6w#tOAO+Oh;D+xxteW{J9zGu5h?1r>cljp6L;tncNQbK5r#F1h}8~3j~)!F|Q z87gV37=4NscQV2lAr9lB*&`c#|H`t6&2N%>T*3__+%S_U#gFRK`IjdNw`J2H#DgUM zCTMzD?v9akpoJ@ft8nMl&bCs&i+T4BGPGM%(!41^ZX|o$}&Urr$LQlr0^Ixc4 zluvSprQEM<(@R1P)tMz!FCjCms|p#eeGB2FD|R$lDV=sL^&Ev(CDmyclydv7#Txk< zm})$wdds>%>tdl%BM@P>O7cO1GRP zPfv?oHJhKmExFZry&!|xp8p!A2DmT)vjv;oQ)rbLdHH%ycQnb}R=QZw0|VuY`E;~U z?h%-a^rkyMs^>nPc5!eM2;>hrcTC6${%uo!2YeLwzclRg0QqX>7~(0_@#>?4M9L+^ zg$Lox|GMZtX|S+CmfNj^t;|Vs%(4rVxan`Zu@u$EOw2fF`1C9j(w2T*gDJ44#i7_#-Lu(S?qKdQr|ezE zzgQ{_sH8tJ*&ozw5vMP7|4<4Qe=eySc?e;+op?Em9%s`myJDQV?R7k+{$=c1An|C8 z`~C83P6w69T6O09;*=KE#N;a;zKDOq=T}t^U;UTS7F`VZgVrO7q*bX|`Oh9_6EVGb zlc92N^>b3aSlYy}Lt+F0!UVm5Ns$zzs<(IY@|Vd7_nk#JRW{<(CzD&`)b4rpb<4Cl zuQUd(F|&%H^OBS!k-x+q2@>v>pCd-|6n+_n>l-ooYTfKiW4-2nk69qG6B7)~s(naFVjyt+;DjX9Z78b$50U^d8PYoeem7GVVOe#R z>#JG#T%h5}!a{St53{&_7w7PO$&TMNgJ}-1>YAIo@|Z7WoQ}2EFq>WiaCmou-DYufr!Bvb}72Dph(J*Ee3^ze2q=c)o zo_tgSnASoHk*VgZnoR&hmEVIjJ-k+xKy?8PFzTgmYD2W$LLonNPzkopx_s`xLiJ;Z zJ6a&RGHXb{Pj@oK1(X?nU2Z<4%5{}-14Sii{EOdv+_lxH$KCw0Do*+6&l01Kc?sEd zA+MVR8*9pkB&&O0-JFve4|4{zM@Pz8t3?i+O*0u(F#OG8saAYseLZCYHkay|t(9?I zQFALk_6MKNXcF&P%!S6;!RK0t79z7;6(YBJnU-?Xej4X=egxZr@&3|8rv5_~t}V>( z!xH@TI^W7-F6>BY<(57esVpkR9-tA>vVK3F)$#pIDb zP5U{22R}PX;kD`!VZNuY*OMN864H$7wZqfnK+kDsfV-g``zrMIMW_gW;R?S7tMj4? zuzN_gwxcpt?P>DPA`L_!EMOG@nbpW*bA*Y@y)YDN&$d8QXX*H17LjMV>*&Gb2Z-g_ zJFBd7vjB_TBtPfGG>5K1QKKu26ZI%LrJ>oHe=$paTXmdv>UdN-R7wiKw9Sp@p7_CR z!dQ_~urp_El-C;J4DPY4wVNyS0@Ey>sYiVF$e5It=5^>A2CxCp6=N<{aaEPR8da4f?B%TYPCf0P`pCj)?SA;iu{bGY(KOQG&YLIsQ?+QUP( zi#e+pu$u_81ge-|6l}ee2>*CFGp7%54Z|`Q7McK}Q60u`x*u9rP}}@Kj4>ITYHaWU z?=}T`;pk*ydFuO{huMp9*W;EA!=oT4P+Pd?%*@O})AW}xU|cxqwLuSXSkzq|A$pMBEKMsm${U|qkvWo|Eh%Z6_S1@{x_igj$dr#a5wkY=N6y-g3=e0hp7q` zws4sSpZ)150cZ)ZsR@WimgVlcofk`SpE(TAh9cBdt5YJFI8hWOD>em?k#p{`Nen$| z_!p|3BhWENp2d(SFNZf`aFlw4&yk%Nb7vC2532_5P_O~^7nP4`rS6V#6%3)@vjrN` z7Vi~&P0j}?B`{iPrM9-Lw$=`?jVZx%wT+gPK#5&L10i}Bha)S#Y$hMaECeDQCzGin zJ*6Sct|f8acIomht?eqOAnSiV4Rh8xmrvXD)|c-&b17_EyQ2tdk&3%K>Z1pj=fnBJ z!Fx*Vj+j>i!2gzKp*A{xZdORG%qsOtUr{BG+O``imR8lMzYK#6E^^ml>?dfe!L$re zN@~7=r_S|u7ZdwdrGWGJ1HV3FRq^rNw*O<-eM~x~>90sZGII)B1&v*%daUZALGO3n zq~izcb#FO^n0Fx;~E>~Pd;`->Hk zoj-9fp3ym*>c71xKc3;BYx`Ap24mvR?4SyFB?cu_&D2M!@*Te<4$Z6F+saw}V*a(y zt{YvAu9om~3H?_Qs6GMC++FJ>l(BCFrIDc;TAg~Fz+FZ4OQMh-kdsxJ1oZHi|AxEg)TSMy7H);fhDG>)TL{t|-Np+{gW|zpdEMJ-VY!!6 zM5EMYAuj^^6p`I*#uJk(o>f3|=byDU4d@Y_x!uyv)@hYx&_Xz5AHKq0g1bAs}09dTXBlU1EJ7iL2e9KVLWVvkT9mo)u|uP z7^<^jjDO4?5O19FyzQ?#ZJ35rv9;Liq*ZlioSIemOJ zkdy*DE)&-n{DMNEMyEV(4H6YC z-=+&ywFg9Pp7Cktl$>Q zWuW>jU~eyzc%SXL2bdcP7A;^Rycd#IO?TvP>A)lwW*Ph^e$(4#FEM4{9Pt+`YI0HY zE-pfu^`o;Bnz&+ye~$}QI)9cfHgF_lZ>9HfcruT1A=s3!KU2$23{ zGP9gV?|(hQd7jQ#M7q2r&(%0GOv}uBuWfrRHhw*5b>(9!{ySN8oqgD4{L3gcN+h9Y zH=PCaRx16_jy2aaM>m3#A~TMera7_<889}9+3Le=ROVsq+uB+cHO!V~n1~i7=MKHH zmXe>zD#u9A?seA<}rtbh}t9|44wr17dF+=RVH?P=)*hP(sJ&U5K@z&nN z-kR8>2(?P>O%b%UYOB#`ja2P^>Hqt_b8=m|u5*&}jQe@+@w>-K39c_>Z_#mLx{x0H zm@MAs_gly@zwf^l`o?IA49}xWc_!U>KykZ)AfuiLK?i2dW#w3`kTmJd2pNcK!%Z==Hw00p z!OkBZxz-gZ;mT&AEhx5!qP*UbOJ&#KK3i^)RUZ!_``C%YN?x{zeoAxsHi|pGjpRqH za${W4BqXO1pEX>%vxJhx+SRD8cep+D-+@Fkaqt#Ri$(HZ@2`i^4eyy%B>uL9P;#$n zVi8?|xGrEk1>`XNlLfyXr&#i8u%0iIyJno>+{}O1TNN^qds$rNvsL(;iTB<(r6SkL zWmMG23&%?|K=urniMR=D`~N8OhzoGZ%M40KQvY=O%4YZZuZ?T(AuTo^;*Nv0tl8aq z-LAPMmND)8k8F(YYDMPqWU{zpB~M5GOOxuQf2;dACN<+5ZnrQO(f^O{+hoZx~|RR4i^eBDwas&#yM?7!_OWQjtd{P%{RwwFc-Bx&Woug9Ot(@5*8J<}hf zTJYS|$mt$z2ek>OZlEPbl9?Gq?B6@uq94iAy!nE3wEbcKA(=tQW`BN^JDCf%E&2zK zh~S4!vXsJa_2*Hndd0oki~LQQbd_~0EL7Qh_;T(G_22~my4 z;N|CL${)B4Q0Rc5$P@Gu$IN)b#=^ZK}b;(R=bjVq_N z?#|4${UJPta)C|b8b28C>=5=@{DWu3;}-a+4K$T!`+mLFv^;(az=_dQRo;?)c(yFx zrFb0)%9+N^hL+|X{f@8!VLcQk($^p(pcE&ea{H-)J4{wv|(n{2SwrgqLtbAX9gXD@|8tz#9H0=KG zS4#2P6>btzrzFO-D|hBaFSN3Hx7AZem|3m(j`kg|g}-u&J&(~VvO(0pgk*LEu8gEW z49WGEa$E_8^(9`2hhyKzSJ%~vM(fwbAq$H&(EgP=3syQuE6bjO-h--+S%k{n=$JZv z#`>1Bf8Q#9!$9BYMoLO62)vIxrdrJ`uBGGE8!ox2cD%OB6>}kgU*~~kg)9$p7O_XF z;A2?DC%G<3Q&nLrDCQ}dQ+G8?;axAuQB&K8CksMP+t6@0^x{?S%5Y9e3`QExw{AgS zMv$F8@n4%bt71LUL#JCo3;9-A!;zttPD{S^t!I5mi6SNzbSYvIpJ5%m^wvQA9p|@G zZRp_~+H~XE6|^bfS5wT>uF&}U;OO|aSFwCJIEAqt0QG}?O`+nOV2G$)+J$ICKYft; zd1CTu6#3pYJ8)h)r|x?n#{KfjS>?5^=uKvqDZ)5%qV6#8UElk!G*7;UZo_b%my3v` zBB!z>otVYM0iA#bUucltyJA0>W`nbNqJFNSdtqo=iKdk4_sgbr&>y_<#gy(MX`VPaqWIv^)H4yQhqj49jD@ixOC=u2xJ>(>J#SW6SY%bXZxJ50 zvlq@VD33ksTpI+pu!S|j5?QR~Y`QZh=|=+IXIj|{cMwZV7k5q6(u=7VFW#6;nN{4A zGG3s*xbwR+UsG{EhvGS1?Rq@fUhkAn7N*V3Lna&MQQr0>)Pbn*TTQ@^pA{15G z!1E~g<1+$BFfcynMb#9xm5vJFwoUVn49PKj)o?xpjC7n^e z_gXH_H>24V0;GTNcp~8UM!U-qzqw63oiuH2Te9>t$y=)m*DZKI1)%JgKZQ0(OWLVW znIN+|`>?ico@~5W+++IwQm2?RLc{2ns!rgy>1xreF`nSwX;@0;=6K&Ls??=E*u}1? zrZ6=1E9KGW-8`#nt=G_+S%tny0RuHFmV)Kw5_L6J8<~5!+)vj@S|a=_CAU*H`rvfR zTCNeAF&f4qroRWnk2f0+<_*8VDhbAm9S2!fMQqkk+~>>PdfUFuw~nWIuY(K9C+^d6 z)N4`7lE_<5DcFJ`gN1Mu>qZz2QFCH!aN>ICQK$wO5l!_J*;- zqsFD3Pf%<6`=U~4eNz_E>Mo>n!!u6=C+!(!1gPmK+8yxi1Y;CZQiHB|dXwp8BqSs- zwOJK~v;?}POt{`caqgrf-ZXBcEfZ4#6NBjbU^Q?5yZI|RViBwBM#^tfdB-lkQUx8} zGX>njLaJDpRT>ZP75>@c>LGEqXy-Nz_AGdL$2Cqnwv_z>9OHau81t+#qD;$ki%rXE z!;_gobNGj@Wmm+6%}~2?9;fqEp2%M}oR;YpZ_-^-$BMOs5)F(Q@o_8C!j>Ia1B?mnIVQ4T19Sx#pB=xj5MtB~>p? zm2+`%?oItpY1EVXNiXmO6Bp0Er1Mv(gMzEE!MxZArSU`1guCB;!B$l-#GQ*zgzDQh ztBcEWmy54+fUKj${o#_~&XNiLEJJ|%b^GTUkxG3`?WaTSs26WP2{^DlVg!II-~mu0c900S-jUVot3cPv@1*I zQ1NfBC8Z%a|D4q>*Hd~!t8)Ko6e?3vLUdV?eIEN7;Gg$!;Ui6IcX>%H)@FQqa^GM< zSfs>0SKh|oEf65B;C6J-+2UTE%#4CZ24K8F(mq%Z?mNnCz;44~Q>K6SkMx7Kb|J@g zoK(lnZkG#A05H%t>Usy*FVMqg6bCJMS~lhZ)$FgoGhcEGeTYPGj*jNan7KLypD@H_#byJZkKdD1Q z_le2kNTm9wc|i-)&F9~HY~xyvlf}ffMsb?L`6`cnOAz4wFVs$?y6pn$4tV@kw~<2X zekNQTh7%F~dmFD_CIi~HspbRkRc}n`%w~am3e~1&h!}atZr7-4bWaGV>HP%?_dw0# zRY{RU`d?kixSln^UzVFtJuQRljd;Mb?!q}S(s{2W37=VWqv2VYoGDztcRmcy?xu_{ zqO@xbOTVao=eBDyd8#pg=;2vqbhsGs-MMQ=Gn`Ifa$c*uT3_c!U#6e9m{4-Lq{Q70 zr}33t9#GFzePQyi1{+@`U^)hWnYNoN)Yn!JEhg%CS5P4F2k%7rj(@;lIb)&!t(yM_ zs#)9?)jA7O2r6-}0Z#EV7ABol3er@y(W2lr6$gvHpcTgUxQMf5Ady`y;S=&O+0tAE3U#DEIVAg5}mx# ziVVyfvjj|gypp7jXFamZRdj}E8i!al(c_=Gky3ji6r%-vogeOK03ElMt%SIR^XLgT zZk6eW^5Rsa?7}__*lhB=`nfsQZ~eZA;V1ABPm-O$q^7(p?G(Khs3d2m{^`dWuc!3m zZQbZahgLS!Qz!Gf{iBZ6m4mJ>I6Tr2|3_TI4N}~H(>jEXzw`W%UN`Iy-tg2$+f=Ln zNOGv~lqFcf-l)enqmE5|JkY12c8J(tu|3%3o>cBkI`5YL=c_!Co2MH%lcVti|7Twf z>7>=1K>2!6eG=Ss7dXNWx`He{MtZ|7wl~mT{&s`#N1Z>Clue9w|KK%nc04I=Ppn>8 z{5*}AKR`cyJNsBA>Aiq?klSZ$wfaRo{x;{=b`jePl+W6AL&Yp@Z#QRd=?&@-ZC#jN zVa0v^(~%zLYxhkHvW9}Kuf0Tp3$xa4gL7(Xu6>nZxS!lhSQl`rSbink zQO^(Bzp{mvIaTb<)&YcIR;((8B>{5BPNvnrS1P$xbWDsk|KM@N{g(fwJ8m69Q?YZ{ ze}5-@i0j-lSZeacMBdNmPl!cuoFVUO(XfMB&J@jiQFDDn*w&ZJ#Ol%ipNB<$}_-k?U{Ljw^ z5M0cqcXA$1Mec~uCys9IS_n+?ZIzUil(w$aV~`Fk@kq1H0`%Q7h)8@J`8bO+bwzNd z?t_0G5d2N7z?r-M*VLtYh)<2Pb8*(L*uQF=#7{zPa+nwX;Kdh@ZwG;oHfll5lJ0Blsy4FS&&LEXceUV=q+S|nxr^}?xg?%wx~Z3@7XBGIVcH6` zKdVfPEk0Txt*RY494CZK-npL(&8_u1YLyd-(+uzxw>!>H{C4_PPqCE{db`oeP;02V z+7&P5U!OkV2Qk*KUIgu=N7En;(T6XBc1~^5U^KmTGF*8yi!GSAPXoE`l0Bw0y?3I^ z-kE(!#Se+QMrX>e%#4CgGQ z$VxD!yF53(ja2Fh(@P08?l5{QV^($hrF*a{oTh}Pgz8)3Ebg57?_>;k%i_w##@)H- z9K!oN7ViC0E7^D^K2inK%DoxFEyDPl`T4{oc(}oGUNBicvIQBR@r^;AlqNzm@ey~x zb>=PQHV)M;V?Pri*9~EF#`=6++M}RiNfeMxT;_J$BV|pe)ykA<*Wy>%UUBlhk@dCQ zoqm+#`*{*YW6M?`F!5<;!ZX@Ege|z~;YU#fuPD#w0*HYq0vFUigY0U&w9c395`;f*F!uZ111MMJi=^Av_%-6p-(;d##NZ+_HEh3RTvjQ3Ut(@ zJ2rkd5giFXU`Mk1mDpLfb-+Nrz35 zUGG*g%MJFsK~mn7@Hc5|u2I)sxcn-fFK80^5Sb!9Tj?*(y$mPb%y6$NeU`Fig4Oje zu)dG9Mo8H3zJLa>MS93Br-&?JDYa%L>7bGBwBenP7WTPDD<6EK`@Je>g;!*2ZfZhP zv_^S&%6r*wyr{^T8l>81&qhPmpi|a_Sw=6*%uWkY-ug%7Hs8r-<&~;GJ)^yG(S1t z>R(v#SvFU2+fCnSOx(p;R)WJnf_^*N3iS@=SJ-#B`tca+9G^1F53}A1a<6@Sl*M9z zOe8L}^cu}G+uV5VP{8=5&Bm+c@=2S^mMSc@ex=X7u!p%1BxMAzSddo?ljWLivu87o z)E4E2r~lkBwl$MulJd~LSI)-@s6evPh*u>&_f?5hB3sEjKupz(+7ibnd;zwX4BGNk zCGW3}Ge2rb_*~qn%Ul_Cg6UJ3?D#Ws_aYyHK(~}*QX**@Is@9|1q{^7IZr zDmS-^hFI|qO1Rk>F#o{=9Id@De)$KF7_E#mmuY*i%K*4MyA92PNIrC~@)(U963qHh zNoGK#R^4wrvPHbHdN4^aHt)wJ&O>~&$UWGJONPT7okX?(_>83rJztfPO|2l`3-v|K zojm1A`+$oZlCgq?8+>_mh)e`e7YeUaZ0d|5^(XkXX(8)xR%^_-XiE6lTFeh`H_0kau>S*+KBcs z6yZ;%eKOj}nzY@ik_uM}zG#_5y1c58#f`9AO5#>dC7nq8kuFxG=<;V0&&mn^zxQRnxRrbkz2rvgy z{kf-Vl#208sTcGmSp}Qr@@c1562r-8Mqk**eI2L&KEow;(rU5jvNlyD{Acs7)u96I ztF{fax!j2s#>Y79&O@D!Ns}s|vcOlbW-;B%t*G)ou9sHx4<4H&nWp-DH}O&>#5v4v zd#6?UNK7-jW6!$R-ZQb^lc{Xl+BHz)CZ7q-d7O8&aw zd`mzKlhB^Kp3J*GYc>J9QWp=->1xx|_iHNcN{b$*`l(&KCEqUl52Giv^c9~j!QbLj zYL#txD%9Buyw9?TWTVbe?fQeK4lAdtlDo1^um4z-UijWZ1`_3h`6K9$C` z#0_(J-*s59s;yhc+S}N^Z_gnTA^>+u(igQ14;^n*P2g5zp z@$-8f``u$j@*#xzV~e88T?wb}hidS#`9w`amH-Yc0M!`nE0Y6@)tn8=efQrQG zgEXnkMWX_LlZ63gU+{<=iC+|5ZMO+j+geK0ZrisKCx*Eand?>Yca-*4C|(3^G|Jpr$gH&M9ERrpsI zUiG&HB>UYZswqwy;$x}g(@ z(_54Tv3&1o6s&}PM|XG#UACHpaQtH10V;qzRYvSlvFi@wij>FwLsdQLRm5BxSt!uD zuoACnrNk@pa-IdCCaDD#@u}!?k|{G;7rxamUC`s0ETopc!VmN2q3_=I7B^@vZ(Z3a zQKb+C_j~R75Ukt^;~DF7d`dOIvnUdn4|4C)*z-Y}EP^PZZe$An#asH9H zZ9c0p`R)CfM{TN{Shug{ZqdkYiK*MWlifqLFUdIo;hRv&T6qO`<+Mt3v0AUH1lIVP zbK_d|rJR-70?H1uF?CGk_qpCq%$luCTjIl`LWVtcEf7* zZDK7ZRWDT+qwJw@>?|^MU}*r6StK9&9AB6Uj%+b0!|I*fWR&zA9aS>eF}Ucecad*H zC1^2An|2xQDQ5pLG5cYnyE;<~dYzT}qlyo@dG!3N;WhNWM7K3|b!Nuod}#71 z>08MM=u30Asxn9E#k#(igTG8MRgvr-y?xZ7oT9RIO0yI@5NquhsynUOt(cuTNiUHe z^L4l}lOip~^g5+TMZi0DS63#@A}9h^g1)@X@ROq1*zU@tM`*e%2YWI}e zY(6l;1L}9x3&Isym!$4yTuM`H)B+Q)44wi`;c&_l`5gxeqHSauwO+~a>d@7prlweO zq51ss_P>{GNb*9j@0EAV#N75duHy&Duj<&E8#&uU(CZF!xw`Bv$#20P3%G=gU-}Mm zYXpVz2$o-4fYSHn|jMD~doxqiCtx*gb=y`OVk!murC_CnjapA&6UlcEkSW z2kSD2qgI{^2IrA8@vJI@MJ00{==y0Y;=-@{_q!dAwdn@NH<{W2RBjNnB5IdBL(kL$ zIbC#80mM)8P*Cr=tg_))=f{h&yISi#nKLSdO!I6)%2BVim|rpdj5JZ#OfDCU$iPOyY%37bmV9!*RG*#<=A&^oN~ZV ziHGx1|K9`Wg8rX!Kt%}@SK}~t@DqCtA3&hcTc`h?{Qsf|szB~4W%el8qB80OTLB?^ z6kzzBGLWQDJFY7opNAIW%x|b6t%>+O;Id>Ak(@1087gI^>T4#W^Q-_p6c;Ch)SX;7&d z3&NC^Gxhh7r+{IuDE8=Y9PKty%Ag;%~(x_ufNsid5nQ7VCJgLji!d^9dTo(3^= z$$-n-n`DIz>IBFhgdstvP5gxkr$-|?(lHVwd#Vpy1MET~DDHf~YnfdK2z(fubNP5hrxjw?Ll;!W9E2i7~IG<1*itD@%K7V+qS zBLos;8RuZFP7y$oOX}?`nwk(xvAiDMX(^7y2r`)4$U7d*1S}L8PIZuaywxSQe#<^Q z#b-G~z|18|SE5S!Da4cMLY+)r;ZhZU^i3j<^m%?wirpg_(22u=6I4DaK?+KiC@#d9 z_$@I3O3RnOeoMn9^(=6=9_4a74kYxCi|f%!N{dY4Q&V<$8CN&x7Az199Wai3INq1e z=lg;=f0|JgWRytnr6H$t?zU_Ppb-u3qC0=h(o*0sTSx&3?a7piW2WUS0ZhsdW2e$b zxV%=LLXY9jd4->30`-_=nl=L0=(0?VC6?ZdfqS#CKs9ELH~lzeG1NAqp$}A zyW#PynXDuje|54Jr6-VqlYEIz`Eu( z>W~58$kJSFvWu~$ZW<7&xs>U2mfzXUQ4_;s-FZbfG{mxHUYeb$kY6a(Yy4DyE$FS9 zr*N=P5?L^hFT3Ms8hgfB{Rn+(O4tgJ7_ul0axUUav21pGA#W*Tl4;z2Gk7YbPYPzh zsEOm(H8@;%9Tq~Cebx!h38`usP`5F|K@yvZ0VC=)UdX^=x zahpSJ2qq!2vI0fXoGR~E|2N94xyL-(#r&mwiKP)2hM;ESkjFB>v2BgT2SVoW1iVnYeh%_{j}8mpUORK)ATVn)0f z@uQ_=c%N{8lcJP8@ZsaK;Df#$Q))7<5|6rMmVygh}DwaA_OVjn#K4oIh2r7;=B(} zsy?yhV;B#f<%20^!0#P3PJGR-h>?Rj9Lvp?5Q(`}S^Ed{i_s@(`-3V#uJR?GEOjf0 zS;y-+2IuOIiEj1Dx->S(d<%=NR@-@InAw&?oEza-QqduxbXV|s-!QW>n17hL@gfSp- z=OW->kT>Kx(9c+je5~&uOp6Q^!@y%};`xUXPnNRgiZ5yOnT%a6^C9q58B#EeQlC;& z94dA}bRO48IYyB5id=}RN(iEjSkO=%7fMwB*#3%nFMRq2F2gLu6Ck~1R>|)R{v1OB zisHJ}l}G@OkM$DyH#1edXlc|75il<{U=hANQ%hv!iM}-|<8oidSE&fo8n9E>CcKi( z`t|selLbds^C>oHhWn6|m=Hg95|$1hSB@EJWc=;NWt7n!A}%6}FUJuRlo0kNo%s0z z3Ai|MIE38Sk(*S<_Zo^GH~E7n=OM;3z@Kp_qCtCDIhO?FOrk2Mk*T^Cy#1%NDxr7gXaMjgb^LDFQQf{32Rr?k|WkU78YW&aKg#bVxxYA#7@ z>+B(Uetv;oVU@I+xnu%3cKfMQm$8MB1> zEyAYl?o0QM?2b0A&rA<~^2y}h0(+sGk@VzknpwNNG3#SCF`7<=AY%QY+||S>hL2^f zJ{eJLNm{Hv!v`U~8xO956SdUEsV%goOrisX_O1u_864%K= z|6A?Pm(DzJUy1{PN@+u~iq%VYE~D-qGsEOhubK966?jfXE4UvS>)vppPK}xs#7@1X zk!ZVd8IS!}j=m#U+1k5Sq$(oe1yrAK==j@2?{L{ePMt9A-CBUhA3_&H`lJdz%8_~hin)H{ znBug}=oeP`oy4%*5c!t}rJ9=<`49fevzxTOQVJYt0yin?_Hh#X1fOV)zc~QqsrSk| zM;j?O-b{4nb0*=}WDA>uw>E$_= z{`GYe_S@{QLmre8`vBi&Go##QsPV&&D1b-ZGx`H7JW$k^~#H?j683tT{QbiniR zb}o+mHe3FWK{Bw%v%BuX(p1Xy%KK zi?p$OaHK}H##P^VAC}@Coo>)HgI?Ju^PRv#8xkIQG&e^r?M6OexGQ1~P)yY3^uw=! z2T!A16055sUNacmipRVN<7B>T)ZQ5P2cF@ZdTI@GmB4NvzW;&_GhQ*gvSi}|fUS_v zz=Ddt}$%F2h-(nG^Nh{Mh@qk>|4c;IPzxZblV+le<}X zLaMw+<(}^EwxNdli34JOMDL2L5Uy`SdB)nV*-Jq3(A9wh7Jc8i6_F?w5ncB zoZ;*lPiZlh(Z4bN&cL{m=oLk!)^&mg_hBF=cqb>AZ1~&WwrR0x)nSWf1rwlJ4wI*T zsv)#%%_&G6vP@37$~?GhK>I5Gk!U5Vgq_1bQ#3jUxyJI$>knSAAnZ#=%rByfnFRkO z2*evP)|_+~Rk^-#umkFivEH~6^5}DXq1KekvK4oS-_g8_DTC3kQgQU1ydcKGQ_c6& zFU`_)Q^HeDA5d*C;liX|x4MkvsQh=GF#uC_M&Waqb$qg9OicjkM^~w4;nW+AdRY_p zPUbSf)TczoKb)e&!MIjH`}tNKSk z5@Hq{$S}NGaLthWHI%2Sx{=4|eCvR4R zVt=TM!tQL0wjeZaJCAIjn{THaf5{&F=GqgR`W$mD+8#M}d{bo^KYNQ_?;Zy49z^OuvmB|SXsP*m7(GK$|8l&m)Q{xkCowp;GqhlGP| zB~{-q~P%jf@2&RP*$48G*+m1L|}P zYiQ#1CSyIipj9s9XEK?O$SabUO&T#GySI;G?nkFrV@7|BY49m``79HAai7JWNneS+ zxd9NL-%?oLp}tc01CFytXYjOHe$LHarE6Ss?H(i%b0z`2X)7B4;L(^%T{;TVR`TnI zszWeW)W=QXROWrH|FMS~+$egSPd%D7a0o7T5c9})+;krtE{juu5rIM(SZIA=^Yb?p z*hh^1;VFI<{sSpD+AVDnz>h~aUe7aK(k_|Vh+bpM5L}nM{0&rwF;v&!SII5Ia1Git zw1K!Pu6|1XjSD~&Eu;JV_djNtA4}=;zt-N5UF{LhzfG@@gnrYe($PO~lEDflK`Xeg zsaqM)eSA_U>CLb($s1)(MvRm6g{+X?Q;k=y=q1K$67u$J&M0C|6vQ|^C{)4f6>R0% zug&<_qQDbDJiGCE-xtx7!QRHASym#CUIBLal^L34A~R~yj<46_6jf) zT>l0L$x(WjxtBuqR-8r3FO>`nd_k@`ue{;tJoRrnmumB9r|*8gLvEUp=hA3!nOavX zOpqB`&am00nI>Kz_k1>k{+dctqYNQHxxfTuh~h3E`ghiq|`4q)kgz*XE877hPtt*a4QN=>>b8d`@y zuxv_(pEA()3`nd>4qjpZEz{5OJMnrq(4s7jbfNKjZXxqMW_iRJrt+ZYK@M@dCnjmrovBC$8rbmE=4uQJ;XUmBq{9Ke{vz>iuQJBlr{(h6b3Zr16gh3CWl#jP?N2vHGbTDJRAVBx zUMJox-Hl{h1xwi=ei%2QepShSza9Ol8%ZIS))E z$2Ft(m#g%-xb@MQ9arIud{GKJYba@sVD77|OVt&1cqTSB0gMA~h`lmCThJI+T=Vyz z$GRnvc*@(62?%sUH{Et)j~N(b5i@zmiQ$gdV1g4Og9_eG?xjqKe)Ki)hNF!8q6iTD z_>gOfnXJrFcs7f2Pooo&M*HObwPM_`ks2|CdrMDA^zqvSvj<`{Nzn+E^b~ajIn`Xk zrBFcX1Cn)BCsm_F+*@^Il8QEc61CT&kG(o3Y}_!Om|*G;=^0^&S4>(Gl%=ksAj+7N zE`Z4Jb*$&Wi`Wv3)jnQeARc}ERQ`|8rBUitB{t9SMakkzF8RO zFVY$ie;C&#(7(E83{}5$J@iZepNy|d-k2VtD-@fVdc0N%;SXx{pTukJ98tswlFj%e z<9J@>j*7_lOLr9W{Ya6dOCmF%((sBZoWMz$KA5)xUarP`O!3|-+HuKEV^>c)ZbpmZ4#lEp}cMp~NP`??_EF14!!34f;?!?8h%V48DFb6aM<-|=?|WJ{1khCJh2+5!%D)V zkhylSlOaar@It}ZCNo+?Ci5X%TFP3Q)T(Pw<4R`})8BL)YJZ_zV(xnJyd#S5 zO%&3h4h>^{QD=_}Y8@Gp%mBj8B11sSPMy3l=EWq4^amQkdL zO*FbT<_{hzI@@AjVN=?)6~(F)^YLMXR2O5VXvPW)@(&)DeaGBQ{DIfrU28)|@$t3n zZa7LMrZhGY|99Ij(5w8y z&xMSi5GrxW4-eEg)i1T?HkPimrzg)zHmPut4Qj+75IDqSPpw7UB=RZS)kdfsPg#uW z87esd1g6x9;fVSrX-I^@Jedb!r`^V%lL=#j7vYau2Wg<-;JtBgD+G8fVwkc>rcq9l zMhfDQ#5Y{h_mBeBoqncz!x;|E>6^P|z7|DRvwwS1A-jKxq&OMVFf5S)*CRv`j+%;9 z)(5@IBJ>pX#rCxrHA) zxv|l|L6ZI5_fSepdJUi|0l&Y0DofeHV5}7dYP!W9|5s5Y=hSOX>PvhY1=tn$#Yfc& zHycTS$UnWD*Xn!XQ0E|SYEIyrJrujxkYk9o=<*afwrs#q70y;YXU2UVJ6_*H2~KcC zk72?N+3&}%R7XAj;9Wrf;1P;UrB;Z7dFS%bY(3PZ(E_QDk(-)Yi45>EG`5cupuxGg zUs4p9G=`6(yaTCyR%QC-sD;LfI_O=4^KY4LAZp3RhNspr^7T$2r5chlX7KN)EG~~k zUMub8Rcz<;gE$rKbuxB-dvH*nukc(YdKk;z?>Z>Xi?t8s8hn+S%A(quk$e#U$_sj7 zlw{1$ki#&;|6YW&EBKv!a-66b=>e7Jpa!=lRkICw&k+x03`fo8qd$0)1*)~$x3$R< z)&f3~9w*Bse^;hX3{Z)lKKgC?CH|+FNvDWdtG0QZ2;*(C`ga*HDw*Ve0;VjB%I@M_ z9v8SPehnN_tq8)qT)AN<52u_X?;lp6KG4b5q+O5MHAGjfhX^DEUotJZrGKPB;a4Q$ z3I^`2#MS)#&!aA`<;1;3Jh-uFX%v0Rr@edt)c5s-cP_n|-Ig-LF>sDAkHem~s@BSY zUfmN5%8o-0!pNP6sj6rAwNgEc+54iXku;N`G>0`GK9IeLXfS6dqa*C0k-tmwP=kk& zzD^M0@dp-&zvRR)3>w=($6A!jDC1S9)$i4+-+aL>tY1$K!bO;|BXW{8;g7HH6U1NI z-Y|3rldzIJ0f&=lM3HW*S-jKRLrCvRpTymf{?nN#1ODZ7D~^?xr#$kDOQW%)TG_1Q zBPwjA3uOY}Z*;!T_^Er6@G}qLNo!K>_#*o-EIn(}_Ce@o^t>X3-QmVD{Y0B@L{^mG zphcG$OsqlYZ&^ofex@f3Ybuz1zL#Pn`frc@bQ+&6b&+DIOsv8J-~>_{cg=Eo!dIiY zEEboT2_T0H(9vy0oQ%al?;aHY!4p5c%YU~wvTAi&#`u8~OFGAm)yYnEPfYouz8K6_ z^jT$>DHu`y`h;-TPD^-$ldl34Lq)A+Orn5e3Z5e*TJ31nEdiEJqWi65UM!$Eqi{L6 z3+*}(AuouLk$&c;b4N6+)9k(QeV8EUk(o%l&po*O+33smK{ZQmPAmjRBi^Xdr+5(> zH$gR(e3^|AS{r^cqCJW7sSg+)AOcjBY_=3J>X4C2bqyQwd1eE+-%ZE)}_ z=ds{rT#9b$dn2c{juN2U->1cYB|*POL`aC7XStiA7Px#vTAx`pa;dwl*(JSIrFN>9 zn|8_{z9GIhc+pM>B+1+$HVA)|M7WuDvc=ZiLE(Sk6*3ALjNsoa81@YnBMa^@b1Jxv zUl7#|Bk4P2`GXhZz<%ft)D5gqrHj5Hi2d(PK5xM3{AUvcKlXvS4z344{E_rEw>>?| zEsD9&sSBXZW??M}36LZockc{Rm!?r30hHF+gAIL8>!ZPtu-03Xz6e zqtWU(<$&a4;$b~jR!_TYVw5AfddDL@YBuVX2GyDBOhz8>Kg^5lh%*)AUOGLSiz3YP z&EAARcx}N5N6Hq&W{<-Za0)nwR_3@i_W5`tyc^}KqnU?L)G$7ig3|g{cl3&f3ND4| zDpT-jO(vD2iBx>!(bOkSJk(Nv92p)sIm`9E52nqf%~`cot@Vd82_hW={@M{!MoIVep`bQ2-b|gqBCvu zkl6af#Z23M{HTl9T%64;;@p|i@+qRJwG;3w-*YKpk0Mi{ywA+%z*`1Wy<>#qHb$T0 zbcce#noXi_Iq}vfLg+^##yWKYm$7@{!oL5uL0_ly?RJx?HF5W&9&rh|%d6e|Q=P;d zz#J`_tA@xi^GFpX+^3M57Y3_v}j)fVty@cSYGbZ|+7%VXqZ#7uQRGQG}%o zGEDL}FzY<|FD=7|>w>e#KL$*4iPNZ3qjuFcNG5xQA_e?}hrSb{_d5Oh(~t)&d$$8dqCUE76ZY_+8C|<_Ill)VCi)hC2Uq5Sk9{wpR`+pdz zuYvenuTx{tX+Iyx)HDu)b$CLAhKxpg;OgeJ6!KlGz8}(*jER`UvqlKt?VZ?=Y;s=) z&-nU$kD4e!9T{IUk_Jr%dFSSdb5a(3C1v`Nz_rh?Ik98l5cXhb=2Ei(41?uKLkyc{ znQ0WHcHyf+F{{p$$8$g7;V8OODxH7ZJ}ZuYp4icD0i330p-C?BT>a<)r>5!S&G*JP zswy1iZv1Glw~c6=DjU@%$B`5TylIM<`*@&@@(Sq7Ur7+AHO(2N#?KjJ8!|wsWJT;< z$Bv;a(AlRwBYiSZzX>rv5nlr50Xd7b-Ry+y=ngJpKJZ;Qu4&0pEm3qOb_WZvP`6VX zcn-iQW9Bl@VxRe9HWPcbChqZrka6&o5OqKkVsJj;WiIZ82as8V$JPs4f!ion!h_~n z%7PfDi}4RAa>5T>bCNzh^bd3&Z;C6lC4Q?32B2lbOuHAanhdHU9y*zwXE z>f#XOjV9qN!X24-Tzc?X+Ba^U(BOulS(76pQxso^UXJHTr2HhrO!R_fe&83%R=t7i zzfydITp`5LtxU^7-rNUm;slZg9gC<3*35$mQH~s!TrDz|h&lBR<_Ie&oR&%lbSt1N zksjT}3VC{BsS0)c+F_{m_HmyV-xXm0l6=Y*XQEBg42}F-r!AUD%EbK8{+5R1H}O*e z0dbBSbe9@FHMQntE;GS++(F`K^GV#%7f{O`s@&Z0qYwF7QC$SuQO1L&en=O;U@h4_ zh2!=gCpD?FNOA4dH6AxAPa-K;aRL2;937>OE<>hegw7(9FMQETiz}BhKe09|Zq&Vd zhAws3SEWoHFgWB;RqGQZ4CP4s6;td8B-s}yA4N2&`@sD>^QC+xnAm)A8lPGN;^Um9 z6G>bTmEGo3!9nVmiWzA*ZcdP*c5Ey{7>B}-`HAcXyrQ&7A>is}nR`3;^x0`q=7j_^ znGssag@H(3{3d3##ke-xm|dKRY?)MNGy%d(r0+O-BRWwePq`|Ypy4}oqU}J0W#&%3 z!NUy%e7n{G>oIs!UQoFdTdVuO`9zZ)%m*;JYspXMU z>-3S)_o(zq2`UFm>f~2dpOv*{5pUdlhDE&Upw8W7+Gyx|x)}>fT1vJO9bw*;`e<>@ ze64O#h=qEqjrLCpvt-iFIIeDCM>-xCiANu7$mwEryXpiUCv5wbyz;YIP*iiN)q&7| z{QYYI7|wXJS@F8!NAIm(&VLorSpvW<*XKRrEWyJzkGV3G*P%=d+_TRi#L*FgA81N> zhNP3iR|zG5-{v~p4g7`NMp|-bLDnJB?Y?hq++OSQu8oJHU2RxDO=}Dk#)Lb)dqrH? zv;PnqPIh&rl3h3X0nm-`Dol0LWHq;9T$!I(3YR|bZDby1tj;dDm-@7^oyeAGBdr{% z>~Bzz$ZEqF_8DVb_q^{-LYxY_#AC$JPA_P9LFs#v}6BZ-sfrWZH*UX1;F+-1rnXy{0BWe2p z-Ti4SlnlSoU7HIA)||=DSRU(#$Kr~QD3rWD=eIq|->`EL)yIl-`szGN%oCqZ_f&+D z{wc1j5ii2sZDo{R@aPj&(m+eGS}J+c)Sbmg%HEvO&y}oMD~3BnUX(EBMSA_(4QrIh z^9`pweQwc%)Ai_j4N??kQ~whr`xN}xBu4dVn@u3yTEMR<6L!5iqtE0JT2fuQZ4hbd zEIT_x*nhE-V6Pail$Gf9c$=Qba4u0DU?D(6nod-iMe45jp+UwM7ur7kK9caB zlSn>hk4PB?b&p>c<#^?O9P#dvJk+F0v?s1ih3#XDkH>7mTZUU6U)@PfraxzwNKNZYutum;d+SzNf#gqqE%y>XKXpa!j8_{iPO&~ONPoXia2cll zK&@!S)0Ivdpv9FzSsQHfdhkN_{yXPALAkRl+@DFR= zms#N?8euWJ*Fe3G+7T((O{-M{Mi^iUsXnhrsIMN|`HZddQ7OT&KUKIgEt6YfN?F&H zg)3{ip=T;7poMe$I{G^UteN`UJeRQkLvM@D#ibB1}-Wz$P@-2i~g078qRk4VI zi06b(efD|TGo~9-bMk%87umW@nuPn9iqvWf2{2Soi|fNO zoMCWiFj*35;b)dLO+TACrK>bIks2CBYSMUO=BNC`X3GWLbbLLBvDzuHbPw|kZ6L5E zeh8@3!u{}E_&j!fEvGc05TmE0z*xlXYM~E&b%_9K=MJv93|m8WxIQ2WIc0$6SzZpb~s9+fGIdl8#CRZBP|UEWB1WU1O3 z%zTyeTC(*0LM>nKd}$6zJivtY2R87zv05G3XDz38TK2Vc8c}Ej?f=Y#sg_U}J4{ga zQmgCG;`-B6vW?nL1q@gt+cMtgBImMKa+{%}h&tI~`o%uf^IMqQn!_f6b)D)0=~K)b zvWFiTM7Fpv+-+i3DUZ(w6zemz3_NrmeuonTu!4mKKg)?i-fqh}5*Vnm_1YhlN7YGw zApJDjbE3j=`Z68p{Mb}4f-ap4qx7^)VS4|JDdPZjkfl-^rXFjqZi%qw$c+x_1OLdo#)ds82h6)z}IpmPeUS zqh+)I(m9NE-ZQ66t5x+Tw1_V#k$%R3L>xt7xFe#T-Du&t>=zJ_AJ&4A1JIM1ZY$WK@Tc>&*{$YJI}YkAT^-)moYI7mj28b9X?>Nz=?2|(QQB$Z$ycOLzcRpk zHGTb7Pvgak$tB58+n=8ONljzXPA^UTpYRZ6wM-*b1aqdM=idDs4|c12`q_Nm)ku*^b5K;GTR4a6q1!cU$5FJ|5MQ!&!qy%#{4x3(^=acVN{s5T_}9j>^qxPky5we&>ZP zV^(d|jK;f0v};9Cvwv+;*AE=8nc_r}eK0Hp60 zk~;~kbyUowFQo(Of#kMzpRj)nLzMGth7>z@EIEYqUs}CR;GYG?RGMw2?Y(2R?g{lZ zBmH(Y_CcugB1XGaxp7&q<;{R9_2|3*J z@8a7>o1z@Ze&Br$B#5HGP9n4@R}oQ`eqd*la*iB|q=2^-?&LM!H)wZ40>)(?OkxdU zlA^zv-_m#q|H>Z8Vbc~k=4JX34=g-r&&Lm;EKphV#eGGxkJ@E_6 zd#&jtYMfu)HU@dHpvGdL5LarAcf%7S#M1# zJf`Da8_rlJ_UTrb{-(D}sh11RV|uz!4yAO=D*B)>XNoez1b<4rZgD zl?Rz{7{8EzUi@DLzUI!TnIz{5LYa5A;>}9HI5;o!kivG&K~9~2;x*Z0&D}XzDV&ex zJPxl4MEI+3>s{fsIX=ce*lnVWm{TwA``^gFG}Rr2=e~lPCje+zc!|E=X;$|Ax9V*; zi#)pRodoY)&wB9l;Ya;ZYfYmg3l$fq8P?zKUOvXM3Tl6^*!zd9k8z?$*8cg zx8k5`jv?&fE~%L+tM6_yvTS^PFd|Q8YtsDX#G9jNDYXx+aVxsiRFsn;7jpsP^>{z0 z2yQ3uA4kIZb#}rJnbwi@Cl)+7UHzd zFODlad4c`<^={8_Ek*yC2jRef%!R|>T6LTBZL%NO7}maY(u?Q0ZB|)E7Bu2qm}Jg7 z7KlFhz7=?SNKs6}v<-A*AeuVI5}f4_t};{%Q)GM!oD_O0~RxJ%mg~^6h&k-o|E*szQl|u~W(oaIj%NGWLVDF1l^!8;Gk=?Cb}nY5=G!y}wf^^wJKHhS z*Ds?&ZQ}ARO*{vf1stn)c82Y9!J~b6XAaR4{nc-N6je$RK&sd9AT-&-E|X~b?pDL_W$Dt2Si6N zY`>!!Dfk0Ow_(IST+So_Zqh1Icr1{IlTFkblKuj6o zR3)Uy1aeyhQ>}L2kDP-ci~^s8$gK_uW@vy$dYlpM+7!NS1IYtDBWvRF-PHlHz!@Ut z#S^iJMaxH2ocGcs%L&A?J3D{uw|n>xPeGj76azYdNCl%NK}Bzt>&nCWkNVV2K=b*Hu zABPP#+s))K1TA%^5Bn{LbgO@pQISG7bqD<)vD zU}wA-=JXndhSg^KQlUxO0ERzlph@wW{e#h8%-z=^ZtmfAn0R$D@l__@ao$lwzuWfL zgw)?M7)NeP@A882O-!$nHEZWjEtURjGrT%oz$D|>NSJP@%*Pp<}e|Vo!`zFoKRHC8{l9;YO<^5NXO%Kk*W?5Tt+lB|G)~;D3>I^k_ z$v&>DLOah|a-14f3&gwZTa`1ln`21k7uF1}jwWUb6$Mv%5FY)3uRRN^8VO4>yURuG z$`gK~JHMt*MA-yn)BnCsz6*6vk(0$gq*r7uAbhM_1GRi`m%~2`zrMEx?=c<-1=R{l zpL|yT6OHzv-KSwdkR#URKkrI)e&yG^!U0>u2^&-Crt*_Ug>87_M&onb%1VLvI?JR+J4@{#zR?kP`R~e_u%Q02ys+ zZQjOpK0ZSHy#n-0A@C#lpNP8_m7ZTb=k-gqg@8{;>9F>svRw>IrK6wZDHS z)<_!3dMN`w{;X5jv`4$0QPmX+!)A@@eMnjf!73B2o=#Y{>dS)|eQeLs>5f-Y{Mc?)V6yiCquzV^R?`w#nfTIf$GZ!*mcEuf_`C@}$ESr-4&Nf%=B4v|k_<1XfJwAkRpEizie*%@p ztZV)AqgO)V#?TJ@^Vw8A0=-o8@$^n1n&Mhm6HH}XvbB5S;JJ*uK7`a03WpOKenIs^ zM7zdjgRBKPP4gn{mM>fIJ7>DxT78=dj5f)&WZ1;+5<~3>5o$u$f;!Mx`{dBelyc4b zwiIcaHyFjiStUQ$venP$wqbz<&F4Qq9?+I7?r!)eH8=IjPfYP|atpM&cuLm#0`RMT zMA-ZpU(q`YNF!&jjL?DKh-%MC41D&T*0~dr-MX-!%dfN$QS1=^-rtsg{hs5RbGs`{%Rr$+58SS?>=RY zSQ6@oiY+;&d*w5RB11aHn6j1i0cXP%6@R%a~y9Rq~3Tmydvn@xjR;K7c z6#&DeI9ii7L$oP<2=Nki%<^J$k9mnimfCAj$5Cl3w5NrJC9J2|Usp)&mGOZy(0 z!foqgMoWX6(8CXK!du=9)FzkLkj_RGkWce?NL?zd#Y3S} zYu$c4?J|!MGd=18Glf*VJ{Y8m{ril~;FL9VSotT2!VIk2Ka+!WL_;KUd_{FDF1i0S zp9G<|tlGlPh$gJ3XEZ;$yzL-d*0jB5sOzNmkQ;UR-stK`8M+uCE7lovM&yNkW*eJa z@ej|wGmn^eIm%_4|5fv=@`{U9YtAGWBXrCgsyNqRV)-rj5?|i5-H!L#XjUl*Dt#g? z8MmpR_~N_sTW3-6V(A|<+`sNNZ_Ur=cd164HcXGEX1-iN9S>x= zCPl^#Rz!>`VhMx?7uJV2!|M2C4 zV5D+?l^oy~SgL)I!>s$*G)@O?6+y+C$JFLOr^&?v|i|}0ouGUfc zoB_YZ69LWl2sFH8l9eJEL{{%7_?Ytr5URYsi6>If#9+xDL?6wyvpa*D`FReNagi^* z<}((d@}Ksgpv$0XH6#E4uxgbdXQ<v zsW<8>)Z-OoJ+^&xI%-gRvftL1N%R>D+%?6b)R!@4vMc|>X?5nYTETTKF7J9BuI`(_>GQEek z+{2!o%ESy<>kGCg6_aJ6Q#%@{ii|o!wNm5-7bBY8NO*N<7H1HHqA`;2Z!L;`(K1FY z%A#_-!d6u<>}tJU-|O!%#CFn1-Fjljckv+l-JODZKKn!gqkRj>#?5Kf1T)&_tNSs- z#t^kzVR;IOJVf^B*`c+yyUP!nFXG=bJES(DV>au5x_S2-H-*@w&6q}FoE6FKW)jnb z(EHobXKUSPYx{|y_r->Sl*Ro3CWhm>yarOQM3F3GLN}eB4R6{BTeV~;Bg59Pm*&7# zTh-5{T;;l>u`$JoCz*?vsOUw~SbRk6hUMb>@vz$Yd@ypTbtKHKkVRg6hj!)*5+NP0 zxE@62sNL*iyvChmU4T1U>ZgH8#RW`4qQ(v_l1uq&`FJu`2ix1(4^~tads`$mR`)Q> z&HWN&hQtL};X4AG%X73quV1M*Wl)~{K>+`Twj*{>a3rm0;+4slXJXsYDXLz2TmeT3_LV&1LhcHo6T z#j5)KzP1T&dz3@n?~jmnt8-;ID5HdAIhmg8{e+D<&2;L;6UZ(etM0(_*d1eAdT3pR zNWTZ5Qc$kB%Os#a=zab7=B_{1-B`7#kyXkJb3s2(B*YonO<`s%0y1nHdH_7E``z)t z@*}E^ok{dW)-1hH2B^Rz#J!e|&|50`y4^-_&*>-1S?*!WVoPsq9ZYZEsdNXzWxRYdgLrINg`@%M%am|#UACOEqx}vQP>yqOf9gij?*8wcoB2|sz zOGkFEBbitrY_(d}B8NG&6E?cbi5^;GgyPSf3j;}o3c=Y{^ym)Vr|@=pQ$%(Hr~NN^Z(_wExIGhmC!Dp3Fi{ z<)ied(p|STMJ&^uRLe?J7*3azOOJTTAM$e_mdB-laADl6Z|Fp(wv z?4h|4mqX+U##ww3Fy&9&QzA`Ku4-PcarW(Av8Avc13j@o3G%z9q@hm0uvX5xqZsl$V_S5@zCldg96icC1;RTZXe`C&C08tnT%|U?UDrpLqi3 zZp7c%t0X~eVs}HOC1I|n(a`)pTiu4dq4^@T;B^x-Jo2Ye+ZI3DvXg=>J0N_01e1x~ zJ(@!ReidhG#U2cxgQ@}q0t5|lKCCjt+<*@$XUr~E^9_PpzxOry2uj_Ny8tlxZxfx8 zXmP580D&T07s~m6T_~=@{J$Rbf4fj1Cx-~G4Hb3|tNY*n^M730fYw`9I$d&pa%z{= zruB>NdUiJ6Jx4&(Y2Trnm2hcHz&|{(F1eClF>sRG=48w5KeunJhCaj|`ASU)ZJ)Bu zRq-NZeW>~OaMG5Ax!=wD&&Yt3aYEdTP0XzUh>i&5VgRm%af_sLBk9&fICmvkifdafr{0liZ?@tIT zFJF2Ig2zO!9IP=FmIm?sOdV6>Nyiifb#)5lTcXI!9@t!h;mK?Q+(j0|)@`*EvW)QO zIEVjx-4>6@bb;HLZe_#}CEL|OEz*}_?ZTcbtp4R(#XJ1|F4RHk!Q~TtyDZmEsai~S zU#w5+P4hoIyIZ|W)w@kQX$(p>$W->R!Ze0DMe{07_&6{4QvTDJk$teqW|*VvLvlcC zSkR{Z;e$Ka?*7(&-g@I*T3|e&UgJzM0-<=YwhN2TRPK8Clhz9<#AMqW$xz;*odGC~ zL2>bzJYK0D3Sfa@w3~UdJ%ScCmi~mn*zZBGpVoH?XA-YHG04s3#4H2kGgpC~1AoGC zmbr7yecQW~m5H=iWBJ)P69iYx*Yn~U#(xzBen%cDc3j~FtQ*On35vQJq-3on^DA~H zo`}4x-7D?4qq)fRub&schjK67*WMShTQ*z@7s#nOFZcvRV)tKZb{i<<2i7AK5vu^h zF$T+pDDUyDK{?tCi{Df-{MA9Wfp30y1-fo^=#aX)6(&Ee2xzoVNGc~h&zt_ecl2j3 zQpSq$OyE>wA%-ucMa@0wCw37R<7F;v%-=4o|>LSUA~nq z0BSk`v6XK0g|KJ;sb>EkWZ6tIqxP;?lBDBEtT@D-RZ_5g5af27|GL#`bxh8W`>P!; zxBl=ykgo54Vn=EXag9L?$ENTOTR6=f@+^X2f{G{%*1j7@Mg!e+I#;cKc-yd6AkC5d zPB&#WU$92i>To#&`FW~1sJ8Ie-AZl3yg5Cpr}x!f3Wz@;)Z&J{ha4?ZkdoWD^^IJ& z^2%~dfyLD=1xKKr_K}brlN~>Cw;sE^z;yHybh8tkX)KYeiwQd1Yg+9xA2!yf-f#yK zmQN5xPWcBn&yZ}YJ1 zy%m@=nU73AD}f4B|KTme1n+^V*N{V>?)}+;Xio$ZlA393PXYdiCqW* zyu9FT^YR~_VT0PxtjlWEJ+~Vgh5#EkIA4LvN^9TOpcSB1f=34sb{TN`@@*M6=qL+u z%P9x!*yXqhtd&G}2xH8e-)Anz+@&8|9lW$5IPP)Z2RXBLUs>WNv>jcK@0KxRK4=)$ z{=2T{T+{kK8}~9|(WtZOuI5iLtx;kY%e&93hczuhpMs5~P_hV9zY9BY=*WKaYeA>L zb`1khX`1RI`*qjHP)n>cr<{cuaOq9)MLiy2CZC^|sz+Pub;5#^LCa#bG3hYN-9-rdN&#fzCuh=UKo!)^anK z#st%I20z?R@{T-jxwRtJnB=h?Z1cE5h@?wbf(}?od5df5s?qPkJP*!`0^yB~o~ckY zw7W__nIMiS#Xl##jBFOaIWb0(X^Gr5Nq~$VF42wA&ItD)=}t2B2gAhajReSL-#VfF z_%6iw#`n7AwUno=jDi}2lux1%E9CUc*#uEz+F3|=Hf9Azd}Fi;+hx%*Gcxh0o(#m^ ztkHx}v;N3SW~4{zdbX`Bi;=#)kR!MscwZhZSmp5zy^frdU;1&rW#nyh^k6p$G7he@ zra_CWtpfB8Bs$ci=tK^M3`-|4HnM`ao-UoWjmg*FCY0!3zI>KO11#>|@=o zTQ=E5iJV|PA|?u3#r!o2P)+?J>wpwrw{cl8e21_m`C*?g_b)*sBb>{KJ^jgS{<2kH|!h0bWbbrh@Yfw z-6~RJ=V?|6_hUshE&<68Rvjv$7vaI|yo*M~oGO&D^v3rr)>2F!Gtk{98FCY!g)-cSxJx(QL%C(#Eg)6CKF=^k*>j)*LLd3o&v+{h#SuOT zmb-nfuAbW&8dUBXyFEC8fOd0$x%KZE(~L3Zne8ZMcNbWssGsJS#oJt-^-iIfZH_qW zN<7*ceN~42F^3R(GKEN*#2_8%pfm?#4wSn5gF&wM-8(ltJUZ`DFoCwl9J@tVVHSM6 zhOLP8Zd{*|bIC&dazvVDf~hFVgXF697WOs5{hf{s6JNsfgo1>G=Qsrsf zYFYMQ8^JHT`@(j5hBaO=IsC_4#;J@K`l^p!*gZj;4|d7o;Il}82>KP+u^j5o2dB)S za(0)_O&H=)$y+L!AXpFPsTqc6vqL$!Ey!JzX$BuPZ@`a8Z8$py)~gr^XYf z$5x7A`#s|cS1d#kFCHZnWoh`5dcNHuV<BwrBa%BnmU{cklNeK!1(v0s3So0SPw7+~!T;(~# z=*+6-MoDp;F)Qp-jpjy>$&>Rv_A0#+#)V3wz?atBDJQ)AYj0pjGyc?VPxjwY#w#E> zV#7Fh*Jh@B5iFoCLwAa7goiGMi(0r&L^PPpG?OwS-px@A1l+ZK>7zd*#E~GP-`+;Z zpT{NtqQQl_a6EpmDDrwWs?)oT8^Fq|3Z&Yq<~lda)~v7}4hU_?CUf6;&=-!}43=Gx z^$q$3lJJ02`?iU8^0x{NdGs$McsflK}W^384Ej9w1&bf)x;MN$iAuRt|Z&BK!#lp&` zK8b9*H_+;=GOAfT>tj=2CZR#I0)=?7sJN(n4Q%GCTsT46bU*tRKs4Es#y|kQ?=-@f z+REP4TQl12nF?^jw&}V*+xDpUE8-JDpr8r_Nk&Oz;?;j`7~FFNt87JWenr(v4%w>Y z3Cvq6QBUCg&I8Zu#*Q%5zLYCDGUL#xh2!he{QB#b_d6VjD-P<1crF>O0I^0Q35Dfr z9=}=>MDLZYiX5H_r?JyWN>M-bto>`vlMWS`T3f5`mDkwX9@-#DeUj&KVGFEFoVTzf zbnDVI)L_)a?J#iKAkU@k=16jmq;BjFT1@&;P+pNQeWu#5$;tR*4lqt>bm_XvKO$Og z$<{(ZUF>0T^qCrXI=uhz$ZE(GYoF6v3qmYRCE4w$xl!Nn7aI_ujaja08sva$w1I9)0yi1eZv+KJ|FTxPFA6bd7Y`QS+lwpZ? zd)>4%;p8|$kc9;f2n}=dFS2DKg==hB7H3{yNe2T$kp7r#)VJ@aqSM^xm(L*Q`E2J@+%UM8xc zMfLM#!YoCJxZv`yb=Dogf)oJoB@aWijQXC{mTF|qu`ez4fae|76-7U$!$b;@LvDHC zA(qpu+@qRvb}<*EfaD7XF?&gm_kdEtkNff@e6n{Va1cHaC!bWPQY^!j&lkjvx*04k zUjl=P!loDArzm;7|D#>(V0-e*`jUEfyw2mo|JMo{{gAvb*^nHNH7Y`1r(qnZ`tEx`X}d(lihRMKBMFKWbzpn>d;B z9KPLqjBMkP`CaShdf2{k+sawAAo3roOE&W}zi8MH?z>1x{kebb5G+$becLNc#%9hV zk;S>xES4ue5pAVJw$bB6+9OEQuB)caC6h zQ*gu7k61skza_M%A{$K(diNXa1R0_9=9NSjb~pY25JViK2?)a05;OCV4#`<(4iaj* z)7&ULYrX|rYU2EbHiyZ%jJ$h-m^9rHkg)Vm!mlpn^U)Wu9Z=>29)2=NCX*eFh6168 zZ7;iPJ;4+o@|LJn(^RXo+L--~42fsOJLbY{HHWYZvfs^-y^?POEvX9!TC^U>p!iko zs7jx&*MHO1ZGA;c11nI`0A@G(tQe@Q$%`$T2u7GLx3T{!`;zTdCr?RvFNn-S z;5q{?#eroqWDI(FHc8^9rkC7SxyU5Kleiv7xHCh)RDF=X%c)Z}FK_fbdhj}Y&pflr z%scsa{;RTFZ0d%Nr0yHpq;W}!JaLY36n<_rK=nv*D6!Y-1Q+)Q)K^tM+ZkmS2v?a} zlIbmv(?JCNK4!F-1!V)-Ib@Aw&18*_-2n{Q*v(@(ay94GcA$2Ej|*q!kd;XkCo!0ukR%^$txkLg-nN{aK_40JwJv$nH9(&&-= z>bq8GQ#z)ql10|Iaqh~mN3tpiL!|x2#P+Q%(Dr%^7|ne}G$;BY$Uv6nj;3R)!(}rN zifw2j+92);gWGq zYepO`kfdBTXWt3+98Np;@^05gr%Fc2;Fz~=cxy(4P1bcnld4gs<-Y-wv}z*6ufYv@(Z+t}8xaJu4_%Tyk=rP51@&F3hR z_iP;OnsW-Km`nEApxW#_@+CL*p}j#3?ZJ9q?jqk+PoR|#nivZ`CXlPsP9nq;QdsXK zDu+|&d!Rh+XF6Y-eq;_qskhc%f(yA&jXJfzyot3=cr%s2owMo;&6JNJOztJ$PSh?1yj!;)Dq^7kc^5M^Veuu%5a{-@udlu8 zT*T%RZ-;-cj-sU+mM=g&x2&(%Ca3aV@#Sh9D*zlUbuW`@lc@Nh_2Z#GH78tD2Oc#Y za`pz3S;Sk4R-?5q1}beyDl;&gTCgnHt_Hk$e3W~w&fSlBpl$lpKK1T80x4%rWW@FR zLR86L^ngJU$50n%iKA+VFckGggRK)npSoIi{Eab(SVBd=s4bGCV3PfPpC<$45rD4) zA<1F4t{y5Q$~0=u&z5&+`6FP-dRYwQ3h(U+a^R!mDip1kAuV^;$+sFt%8l#)@Lalv z>R5+#Mmib(?V6(}2i$antX-U>t0 z93jx#`e|3xYhJcAjgY4(NxgPTM>Cl_L2f(BqkG2(zgg});lW>`(G7w%^EgX!fqiP- z=v!+qyCXNT*oXBxQk}F9Jnl3;uv-+p1+9Z%Ao*H!)JDH;ym69&GH^ z#mCiEzVc#$b_dDaQg?k@%zfSdvWMI1;~_?L+Z6(1D+WAWzf@vvUV}wHhp-#?{NVh2 zZBCsAQc2JY&Kqq`kA2(MZWWkcMEGrv;yw*@sWKZ!Pg>r(5D2{_%?RG5=y#Zfgcdx09w{@PnR6=l))WQX+mUYs- zs8wNBQ#=B5OZ$z~oF zJSr4It$mU~47s-J!vp@dfe|CDenSK`;dnu-tKyJ>UK#@D6<jp#RqN2GH)gf1+pcbC^NEhwjZSOgKs~rD0+I(3!lPv(!z&bMs6L?F*mSKP)Tq8 zjmm>w1jnzvSfznw;YT(Djaed8o69E4{9?KiuAl~M#OWJy*?f$_ha zc-Gz7GKc?S{^PcP#8RV2yb3@i^n}OlCBLj1MJEwLq-{D_5;V<0!sE_E705nUuPXmw zN`9P%WdGwJ6RGz2C|O_dk`SrPP<=AR1FVO9yHoNXjuP#B(7pTeCHuWvs`nhm14LmWfQ_|x z-jj#RH(9Xd5h>kiiX)~vu`6E+8A}y&WvZCZT2!vI!d{Sk2Mf~_1;Ynya>y@pYExX{ z9%>;{PIh

ErsWt`U~Y>BQH`RT1eS^RvX=Yuf+t>XRs1?rhz6bZr^Igejk_R>1F4 zp}VGLmTV;Jx$d6Gn7<1bPcG5H;y86soTWg=urcx{szLST`>acoHl=*tWZ!N3CH_Ji z$+_+`vM(zk*GYKxl@U~AsVd$ht)6=TS*oLdc$Br|y94|?Mh$Ho8-v+H?KHRcJI2v> z<0;6Un&q)x`S=l8)UL~vt&L23jtgl|vLbiC&d-F%zY65Ce4KB)NZcu#%l_eEU2q`m zt+$iySfLhbz1GU)b7Nk3hvRkFaEjKsp7|zmS*h>LBZ`{%OZ zlABcK*UiUuE2hgfvzT82r0k*tR`R5MUz4?mw?4=l=!3EeG{f9NUsi@v8Tqy2&0J$8 zT~doc@iB%2BJBx{@Yjp9of@-G15($M0`ulwcQz7UY{`>50ERRD`9HOUY`yf5FB1qX zL_nD)Y>Ccx_I$5Ey0pzz32szFdp@$*Ob{~ z7_;aAqmh52hWz%}<$d3KT97Lbcx-r)HE&v4UYf)f@C)txk|c@!!)r|B|CJFF@dUtuJ;t~9)XER|W zpq1H-(k${QR80ZL$?CM&-s@F6)(7T6`s*u4P)o_#$k&&tt|wBE(&Ha5hKf?Vt@wnp z!r#2S^>pv=Ky$=h=J+X?{llxQVmSGSmq)MyvQj{VT+V(`z-_fBpWUySoSmh%8ab9f#yS-HdTsL9W7f!Fec}$4Azxy|8 zyXaa+FI)|_C3(|7=uGGI+p)S%^|RC>xqJ7rGq!Xw7=4{^In@uVmpc6-Jyx@UTBE7v zO($p!Wf{TSu9&Bc!Q7jI^{(HyBXD^$as!{0zdCIY90TpT+H46 z-@3bhcw3GDIgG;3$a|Ko3)-e4#aq=iP|5x1kIu}4Dee%4yb=1Klpak+`TU_)0K&cx zHSJIK56`xm;!eZ=Cqm}6)bNrlatCk!p&+q9{^f2%Wx_nNDAtDGe9RvGvCwC9ziUMs zG57K5Og*gPA|5+P-VW)GD-j2`7`8S|=eG z3sxYtj7AoMC&PmLP`)&s$+)d1`HzFASAv@3{ci|!+63BBeleF7#@{e6mv!acu&L;7 zsFJMzJ}sq8zYEQtf0F*r&OAKfUW;qs&ngZ#AB<2u-uDZ==f)+xcwYPE`hIK?-`;w) zJl-!OMP7Q|791acjhUuSfd-sx^v+yKNo5JL0 zmmkZqDoLULTw?I6$g8bFIWGwO9E7N2lCd6v8~5A|x@up4M;u!Gx*f|`6v|epbmc;M zE9gDmWs%yU7>tZ9f6w75Nn1(Kgo=>r9h?3nSZ%aGK5Rkr%MaP~ySX_;8PR>8vi0aH z{Ad`8%E1OTfP_C1WEnr+?o?g9ES43%8!I50slr`j<#cskruFe42 zDT_tuut?Y(LfB7RGOa<}nKCsG=P$d7?n)3(xEIAV2M2U>#<0~2N1y>FK{ntujY z7s^id?c8&<|HEVLio4)0Kko63iui{Yr}yGksy^W7mk8op^uFt)kjBmAcu{p*b0Ol$ z^a8p)jtJ78+`^?eZk3c=>u!RY+;7>VUpHknWnR~OyS`U}s_61}OJtK3g@fzI!?*Ag z$RCj;_wL^`acDJ3bVtwQYnIKu5WtL{Q1H(Vhtn#ewM|SSa|;EY1MqH zVS!`f0b9uLofLcwzmwwIh`y6DQEw8i{v45Iax856U#z-orB-oPzOB;3vb|Hy5mJ>o zskABOy6}rJ!ro*HxJNx`>nuSDCF-5=~BJ+wfN=1GSaa(*(m)xO2V?Z5-1o@JuDm)`>^=Kr3_2ad2Pf({123w z3H;prtXVtK|ZYZG;$J{BQW#SQk`kfA_m;^Oto;X|lHJ3wAD%!c-< z@k9aEUIx6r;2bOdOw;Q@*OX^MtuiKIZ9&GQkYxpbdrQ8Q4<&J!JsWyX?82Yo9Y5x{ zwA!;Q0NzS4t^KJ@iqldYKuPH&$ONwO>9JBZlf2&3&OTzH{6C=_0sUJBvSn@xeo|wj zoZak)&zjFZY=zujYjyRx;2jxIkW6_0=GxL{0SQv!i^E+xgjlA@Tak~`p4hXn?VF05 z%jtS9$Z}HF_Ck8Z-g_i|k5Zuq{v4*z49*2c@|_VUQuZ&vfp zm<2rhM8ID<%9rsD#P{JyOz3KpLJ4ZOh{Rg5xBiXoLMZlqz}?%jr|iGU@MEe3<0O)c z2O^CJ`j6i0JaQykePH|+Q@~Z$c)HXB=1msJ>pJdPT7f5=FDE2?r?)4wetaYrYq_l{ zI(s3BrD#UuXShP}J!8GUI6Z+(E49MMqRC!DjKB0|)As4RFRcTaj~scdD*Cs`HNt7f zk}GO5l=N!ISq7h?lJeuye0}<*g<%@iP-H)3t0iLGl_eyW)^m*5`Z$i>u=<)1>Qayn zjMN65duyEgK3mDCxl^7!_^Ns&M^P((3(`P|7=&EOIEl9n&~+BW}CmhdR%=XUF2qld~pfP0$3W`v&yq z^d=B(Yk9G$eF3ahxSEULWh=u2;W;!5@UKL`4Oln zBQ69ob-A;Oe2fo?@n2hT+aq`WQ%5Ok!&v7$+f*z6V4A#dt)2MYP?(v3`kc z5JmAy9X@e>W|$jew)^-HL|nLu`l6@dhkn5+=M1%S-yKO)0uVJfbc`Jx!x=L)5bBXo z6~aq&A5(O}3X0`X!|;0M3YwvK@&1jT_`h_07|g!N5O2rEvptHZ@L#%H9~=DjU)@~z z6dTNHaG`vK^~{JB%%mVMH<-JtYHj)Bf@=O$dsF|2JI3PXha7UTyuyT*n)jsbP1F znT160x49+@)Ud6o)m6T#0f214?27f%y57F=?V}UBGPi4m85{R+M&d)p?{Q zE$?uDUi*xmgWhQ<+57{aaHKe(pgc-p;*xzT3wkG+qB+;Veqdyw+IGV=9cb@47WREV zAAV`+@$!%InB?c+M(T;;KMH^8IFxkW`Ql(fYviv^8Ha_l)r=IHYkVbCw~#1^1QJQv zWW_QXc6vXpOK|adc`#P@Xm0+Z1|4cL7dsbTe92_B-P~qR2|S`})t&Noy>xgSD|nV5 zvPETLg;3`F38)FP2k>=-6Y)96a~DMyJpAra&?N-Hv`<2Z1Vupm=S{|N8TG`wyPj#e zyURfPRY8%h`k~kOht3su z=Z4<^#w+Wyk2HOLRwK(am;g+oZ%@q6YJ<|4i#rgUKE>KzITU_j*lFT1y#IVWwmCQ} zQdr;e)44m4NhZBH@TOY9F_;|-;Tlt84IK;vE=P>N?>NGt_zI<$1>$i;{+#t~`+>tHj(Xb1MF z0F`dOp)@j`$;aBHZsqf{)-E4XYpHKPIjWLeEFPefmg5Qz?lx&YW#+D`6WFOFgs9v9 zK0AqRal^pWI*2++Yka$9(FE63j@{cUvC3U>4ILqL({c~RueH_*^#WUp(}Tuy4YSpz zN-=a*$xX_E1Py#@AQ2hycH#l;VM1E58nc6=4?ARGd!wicoz5LJ{_@W1=aY`#x);tf zF}y!?yT=@2KuKeVQmerTK|I^I_IPbnOfR9;-uFWHq;^>%Jdq4M7c5wH*M+v+ z`u01Muf+CH_IIAy1Q-3YbDT!h-i{{=f-MOgI)N6`D2m2a~WZyFjh`{+I6d$5$9wr8@i(%8#rMd2hA>DBbtxEAs53>E}M1JB$3rgMm3N0E-36xS%?c(S7qkyYv(KG+FBJb0%XG18I&gVM zSz4J<=-^gA)3@Ed48rhGCy}w54H2flnA&YT2?KYqEIL-ojcS00f8rv@s>)5o6=;(N z+j+f){|fto??wN`Ws9bVA6MO9Iy39^HOEWsObPb&fI3%zi*@Pld<_T)%K2FMfG^*v z<`yQRK%XxSv}P5gp6}e;z|dC6Lx@UnYv$<_1gPBP)NWRr)&2a9(1H@6+`jrw>?kWG z21VD)@qjkEQP|K&+@z1kO6j%x&evmD-e0Usi%$*el z^O*VX9<$xY3)sJOFRS5a4yR{T=a;6o1#C1B?9=Q|30tAr30Kr(47bvVfH!mzAxwHv zaS>@*shWo?$4?GB7UE%R4uj^pKlmJ9XJ$rdZbeCPflKHwcM=xXGAg055Z_Y1dWIC5fRqUrqOeg3aqm(#TZ@8N42yD$K}CfJ*uD&x?*y4`=}4RG8YrwFo4_}xhkifXkZhtfnh zj3eD-5p{8mQi<|KA?)t&3eCY?_xRvkzUHQB)nmVJA;F@eZ-kSu!Hv#_ zVaDb(Ns(O~Sz;CbmyRxR1mltK#z?8SEYl8`IdR#G<);M{w(yExX$OcEQBJ)wrp85{ z9~tkn;n#>E-5bQ=Pl7vxJ|9X;vPYpT`gu-Urz6-+qb^)q-k0InaD^5Iop4ib2G%;x zJog-=_)*|+TWk(d&3}&@!LgQJm1|yzF5v^zwFkqbVdljrXlVYbP;P&~hI%yW%~>KLCaJJzq}O~5JDke(odd)R zjQ7S6W;KA953(Gde^(PdrZ$Rj*27Ozm(;nJzux%iasI`0B7`&uN#KGjuxOr!^PSob z$R;oCM{1vny`$ktiqJUNwH?TU}wtpl7dH)v+k8${LqVht)^Ao z;<(w@sFSBNc42*gFC%#WNwi2 z8@#n~m;9-5-&LQ@^Qk7#)K%gzmd(0V*3*pXo&qVhWHtZ9oaSU0GS6Ok7O~FvfV{{3 zA?H*K*YhE~x7|N??NWYwYRcqAmf!FDXUQ^>gYx@M+;0#1NcXtx0sbTN@ne#7@XJFj zRt@u^^<3kOGJJGIv4U#!%r;kq3T`RcZ*SidAoILNF!@(s@y6V>ZTl>y>!Nl*W(++E zMnBTM3KJ<^RX9~^0x@X{O4f-_aXlOf$%zBxFPCB)7HMa-Kx2_XDkud2+>4ZwVJyf7S>V7u%Z* zP9~n9TZ5>b*USNTHqu+UsbfY~_?|1G?~2DhH*W}zr9CWw7Z-O%Brd0@em4G}t+QZa zAFB*7QIf(}sW=%}mRX(8Ci_rb_|`?ZWWj$MA(w`W{6BWSrS4hyE9eu!9Qqld*wb(I zf%H>H>P4?c#R0-|PfCKL9#%gPWj=zOvFg|z)47-c8gX1pAwlm`C*Qvu6>#$S*0{zX zmM@c>yRf9)FeHlomDtr-di=Z}-pW>5CPE{UUBB@!+k*i>k|62soZ$f|L;IEIN5{^4 zTDhxkA>3hO#)owOZEJCLXzKuH`D{*EJsdlaip^>Z?%kdtH)declZjm_Jf!DY;h2w} z0Q^7@%wy@ZsOe$WUpg1G98;A4)Kv4fn8=?Hgo_0j@CS6JpGaKCQ~e7*hJ}CTKFTt% z?Q0hjX0(Kdnhph&`d@EzqY=z5;6Iu}YZY@`>+V5ZDQ}aXX&Hz^1~5l;6?uSzkTYyxBV@&kENP$41)p7?VG7 z>9z=7!UliS)!te43IpMIcxW#4zo%SkQr*34bCdZ*UJ7qt5PmHH*0YTZr6a&(w zX9BP`r`1Srzf^+M}3$J>uCFZ+OJEt^Q;x|nwa{h-mK_X%Z;u}N&`!*MW!8B zp4Gipcf;f_Zns%x$8~KiX*(eA5UB^1lxQ@`CNiAZt0-v&v@(xtDk9p}TL_(rfJv~m zcre*BPoJcg{1nf9xycajDTy|+QkQp5m$S%%z%J~%&aVx|nz=C|Z`!3DtDb{6@TfPC325=chhznNSF%zjrJ-- z>W|jwM68EO*Z9b+sfd{tOyvC427sSIB=utGG`bMw-renRti4kbWX#w>taF<#V(sDK zHYxHN$kE&tQZuE0tap80x)seV+V(7Bktow?YI5oiZ+@3g zMFhjrgq^yjN4PLgMvYO;lA%l&CNnR^*pc{)iOCaE=W6_aBrjV9k{ zutEo@I>ZG0WvSrgQDnpJ?`G$~oBxh9hqC{(?yT13Tujx_QwIMVxBcvar@N)*SO%In z49rsT{rD&Ulkd5YQpCZ`^%q-HV@2|EV;O<`w?bPD3+f{E0&myuqAZH2&Yry0`4fks zpcugj<*mS5?MbwAx5T{`2)2vcf@V!>&#}TIJ`&wGtq&rj-uHch_6+fM$ zzC!1}>mBnq4`*(R@Q-s(u8^HwJ%)NFH4pd|NiXCe1bJ-2;SA;3s~IqGog^*l=`AY~ zYkx9(XD1&UX<4q=5=u@pTp^1yZ_dfpQyJ8IBiPyA4yPMa`=2enb=xasq)plL|Z97`}hP|4T{7%y4JPV3c> z2CWR{j@f^}rlszlN!5gNXm&2yK+RqMKq5;>^KJQsn5$s!8y|U(*qecBA-zZ@7KT4C z_dNbnNVyWz!}nP|pWhV^6!~)?FFJ3z@1blr_zzl>p&#^uwB%FDm{DnEWnpV%;8gu* z8FX$_&KgZc%k+ePWGUF~7&sAYO=yPgP|js*tcXq*A7zCePDgZ{$$^uYm z3Zx!p?2p#Sb$|MNGeUBdEu_K*eoLh>>M&yB@JxlVmyDIfXKE?9Cg}2^|gb`KL4$~9M?#*;6_f)syx32rFQQ}NV`HIi=*){|Gh5`ELU$ri) z%$kAQ$u5t9tnI!?^JLmUi9bhko}b?`&Cm_9R9usdE%Bys7asLPWMiw_SfG{2YXB6zH{~ z;RqPF55mq2hxTwx_Y&NgXIhBzl6QZ;-G2>Q0}@oRX98J{5b7k^!spF5W+wkT<}Z95B4 z$9wR_cBIER$g*6L%rgi{sRO3d%sYuhX@HMvx>bdunAgu%FZ8wH#oBrM`T`)RO)sKu zAHGFZT_FP#2|!Q-_g5WI7L*DE)3rLklbM5$m8GcD65%&Rt8n&kc}$QLl)>~nU}12f zvTj9!WuOm*0p-z%U*-^7iuqqW{PZBagl&)1MEE*hi&cDoM;{U9=Ozng$^ZB;n`hNEyvz_O11BDq%sxZ2VM!j`VeYJ( zeD;x5PO*h0zKWbWjsjYR>eSSgvBM`4en>t0;l~@SZIaRIoN=dceX8(w)7oxVTUI=-E?|lMY1X|C`%Nj)*f~kw zjzaLMf+PBvC0XFk3e*r+&JkbsHkHjJ%_s!lZIzCD1q4 zG4wW^-NL4M`*F5*TYw#eB0=gh(uE+vX_(lmn*( zr;U_kXD{z=q*qO5yGn@Hc>b9fU>4`HIt-L6Z{*K0;5P!8{rs+4?j9z38!|29!JMB0 zxRa;P#Ha63B!!Xi=Jn@UZjr!wZ*V>E)2?ZJ>ucA{m1=NvJyDQ5Wl6@WAY=K3=r;ZF zzDKw=N6l!0`ot<%q-4$@%uL6=@vtHkup3>1lF_+bIda@jp86@*L6iMpaoK~*eq9Mf z>*B~#o%y_4$UwBa)IrP1K=b#69^6<_zW=v8_TgdSWq(4Cv0nnqAp(<8n|xKn+_D89 z*>~2)=oSmQW1hwF5U76bbYBYXXcm%XgG4InjMVm;%nvNDM=)`{Id5fr3hgDfq7rSTV+URw^s#)Dr%ji-jhV{~NF0$x64Ei)&8HN+X^ZDT** z>iv8iX(3tE<4+hT@E6APoT9?hqpMPo+@wUeY2y_qBd$Zv#@;--o$_+>%fEC`iGl{7e3G`e>26GbvUv zZ{8<<@e`VaV3y^QmGr&I*T|gvP^6*$$pb!-x(;?f?YOR&hyv%pw}B6!9*m80fCOCz zP+a}$|NBPk*W7c3beIY9v!(ZFuY$}|ig?)y+XcaOB>Oi47GS&dx}rP4v}G!o$!oCK z@yuA+f5H+)&mzZfLk;)n176pE+CB+Ouzh!Nw@t1srw@BA_=XwL%PZuW!peysdpw*d z6oE;vUnvZ}4j0lf{R6YIQG=vI4`r2$WAt1}-Not~m-Jo3ssn4CL0T}z9}e%rYcAzx z*rtcoN`_a(nCeaUZa|QUd`LEQD7dv*_Y>^4D{ailHUZ)9Fx~eK7MM>y&Sozz<#_Js3iZwjW4MTb!kX0;&r-iS z&IXO!F9_Wf$mUK?aCnhiM*T`(Muv<~Nb9J#Yrx&+5TfB*)5DlwDL(w4-*=jY2JBdP)&)G-9nS0*x*E{K-2UemK-gqKs7VDy261VamA2T+F zR23|XBQ-3t>jrFG9qP@b`o(Z!jg7VBut_GWVfVGc<~riu_tBT)=@>`m*G2aM*IwC-mg3k7S8V&2De(D`f2{W=?gZhdLBwJ zylBUuZJ2OY{RIrwKcvS4^m*d`^TIo0d+q2PrQu}GeD|bIB}bcR+{VqWme=?zvbADM z3uP;-%VWVfxxD^=-w&u2=l@i!m|5bll6@oZsr{GE)>V!XGJTLy(QYyG6KKQ5itqyE zmx{B7?_M?G8&u$br${gRk(?JX-J$-vu64$Rf69M`j#l2$kM9@H^);^VCJPnm@C1CM zT_yA!@7cu<-F{rU%Hibb#CO8XUly*X2bqM0v;Wf%X##PUj6KA1p=_Ml|J{(&v{bo= z5qUfO=_Pd=4`FC0~$re((*2rL&elGT2@O_2>D$9@_rG!P{ zJppR&LE(^mL;fcD0qc;d-4JHAX0gGl|DgFzFD_U&tSy;8KJjA;8{x>fpPWk^`z%@+ zRqH{-aw*Cm0r}!ugc~8EZdl)(AP>WKI8i=mrI93s9ch_5a!defmx#G;0tJG|8>oj9iK!3CS9$Hu&wrE|B5Z zX^5B5;OeQjuocf7?u$rdlLmelYcV%;NJ0S=IV-P4#5`&(pC6wTfJJr}^i0wxvhH=| z>F3~~k^%X!oJv1VNkPViZex?lEZ*%nvqHz-Yew3H5Cctd0lLk$O zA!Hao^_I3r+aM(on2IzscwOA@sT&t#uusoGOTH-o;}(B8Td6(F z&h8)__LEuv7;MkP@FRmLJ?IQp0fs9oRVHxtMz#;XIx!zVX2nnL4!CXFy{XNHU@1Xe zNpBVEJw*NY5I#j38CXa?t&)pN7F*u+Nac6)2w{^UbGMMjNL>U&+zp_0ghzb|`UdQH zcs|-TJK9~ej9qYrd#F3ugX(7_t}c=T#9@@P9+Ct+89f^Y`2CCRVQZMA9A44)ev2L| z0cHWQZ&{6NETr!g&gbc~7z!vig7Di#0?(oga0$^l+s*=A#Z6k};BGXvJO|1JIZt?}K^e{Aug-Qe-9_d| zn)@&&?arK0Z~TdMz_!K~rB=N-p97O1Ruiv3@?zh&;;F9^Z$-~n1zI|edfs#lkFy69 zYy4C$v(N$D9O=CJ=Vz;HPwAUudOQ=uVDT3$^Q(zzmV1&E*fpN{9kPbyzT#J)3UWSx z<=z^(RBB)7yg{4aVA^#0Pzr6rt#pUdB&<@f@qpu}D+djad!mu_EM7dp6K*p9WB#d4 z|D(-Yfnpwwi8=>e^hCFRI13EtV+FyX_QzZ%KK;TwxfzXF@nj*m`fR2eDt&CfMXG;JS8R$yr^6uisVHlaGZj{07$&lwr*KJEBU%rvzxDjaOan*_8=%F9z z&N{`~8Pb*LiP7{P!WJ~LFZ;Da&6MWn3eMzQn(rap7IiB;)XBBQf9beO<%P}CSdp?_ z0q!g2^ZYJ?bx7{R4!MPyUaR2mANQpu(gq;f>;{`0`9bX-(f)h(C;@2qE}$2n?`AGn zXO?HpS!eHS?k?6(W%C;@CV%~|e5rl?w@z1mV|WMMu%H{u?(0yj4>OupR>{@63Xi!5 c6e?>m*c{}X3^1^$reFDqRwykSb@)5;f0@amRR910 literal 0 HcmV?d00001 diff --git a/assets/image/input/inputbox.png b/assets/image/input/normal.png similarity index 100% rename from assets/image/input/inputbox.png rename to assets/image/input/normal.png diff --git a/main.pyw b/main.pyw index 7c948fb..3e431d1 100644 --- a/main.pyw +++ b/main.pyw @@ -1,5 +1,6 @@ import pyglet +from source.gui.scene import MainMenu from source.gui.scene.abc import Scene from source.gui.widget import FPSDisplay, Button, Image, Input from source.gui.window import Window @@ -16,7 +17,7 @@ class TestScene(Scene): texture_button_normal = pyglet.image.load("./assets/image/button/normal.png") texture_button_hover = pyglet.image.load("./assets/image/button/hovering.png") texture_button_click = pyglet.image.load("./assets/image/button/clicking.png") - texture_input_normal = pyglet.image.load("./assets/image/input/inputbox.png") + texture_input_normal = pyglet.image.load("assets/image/input/normal.png") texture_input_active = pyglet.image.load("./assets/image/input/active.png") texture_input_error = pyglet.image.load("./assets/image/input/error.png") @@ -95,7 +96,7 @@ class TestScene2(Scene): # Create a new window window = Window(resizable=True, vsync=False) -window.add_scene(TestScene) +window.add_scene(MainMenu) # Start the event loop pyglet.app.run(interval=0) diff --git a/source/gui/scene/MainMenu.py b/source/gui/scene/MainMenu.py new file mode 100644 index 0000000..72c7765 --- /dev/null +++ b/source/gui/scene/MainMenu.py @@ -0,0 +1,69 @@ +from typing import TYPE_CHECKING + +import pyglet + +from source.gui.scene import RoomJoin, RoomCreate +from source.gui.scene.abc import Scene +from source.gui.widget import Image, Text, Button + +if TYPE_CHECKING: + from source.gui.window import Window + + +class MainMenu(Scene): + def __init__(self, window: "Window", *args, **kwargs): + super().__init__(window, *args, **kwargs) + + texture_background = pyglet.image.load("./assets/image/background/main.jpeg") + texture_button_normal = pyglet.image.load("./assets/image/button/normal.png") + texture_button_hover = pyglet.image.load("./assets/image/button/hovering.png") + texture_button_click = pyglet.image.load("./assets/image/button/clicking.png") + + self.background = self.add_widget( + Image, + x=0, y=0, width=1, height=1, + image=texture_background + ) + + self.title = self.add_widget( + Text, + x=0.05, y=0.85, + text="Bataille Navale", + font_size=50 + ) + + self.game_create = self.add_widget( + Button, + + x=0.05, y=0.3, width=0.3, height=0.1, + + label_text="Créer une salle", + label_font_size=20, + + texture_normal=texture_button_normal, + texture_hover=texture_button_hover, + texture_click=texture_button_click + ) + + self.game_create.on_release = lambda button, modifiers: self.window.set_scene(RoomCreate) + + self.game_join = self.add_widget( + Button, + + x=0.05, y=0.15, width=0.3, height=0.1, + + label_text="Rejoindre une salle", + label_font_size=20, + + texture_normal=texture_button_normal, + texture_hover=texture_button_hover, + texture_click=texture_button_click + ) + + self.game_join.on_release = lambda button, modifiers: self.window.set_scene(RoomJoin) + + def on_draw(self): + self.background.draw() + self.title.draw() + self.game_create.draw() + self.game_join.draw() diff --git a/source/gui/scene/RoomCreate.py b/source/gui/scene/RoomCreate.py new file mode 100644 index 0000000..f080a19 --- /dev/null +++ b/source/gui/scene/RoomCreate.py @@ -0,0 +1,58 @@ +from typing import TYPE_CHECKING + +import pyglet +import requests + +from source.gui.scene.abc import Scene +from source.gui.widget import Text, Button + +if TYPE_CHECKING: + from source.gui.window import Window + + +class RoomCreate(Scene): + def __init__(self, window: "Window", *args, **kwargs): + super().__init__(window, *args, **kwargs) + + r = requests.get('https://api.ipify.org') + r.raise_for_status() + ip_address: str = r.content.decode('utf8') + port: str = "6464" + + texture_button_normal = pyglet.image.load("./assets/image/button/normal.png") + texture_button_hover = pyglet.image.load("./assets/image/button/hovering.png") + texture_button_click = pyglet.image.load("./assets/image/button/clicking.png") + + self.back = self.add_widget( + Button, + x=0.02, y=0.02, width=0.2, height=0.1, + + label_text="Retour", + + texture_normal=texture_button_normal, + texture_hover=texture_button_hover, + texture_click=texture_button_click + ) + + from source.gui.scene import MainMenu + self.back.on_release = lambda button, modifiers: self.window.set_scene(MainMenu) + + self.label_ip = self.add_widget( + Text, + x=0.5, y=0.55, + anchor_x="center", anchor_y="center", + text=f"Votre IP - {ip_address}:{port}", + font_size=20 + ) + + self.description = self.add_widget( + Text, + x=0.5, y=0.45, + anchor_x="center", anchor_y="center", + text="En attente d'un second joueur..." + ) + + def on_draw(self): + self.back.draw() + self.label_ip.draw() + self.description.draw() diff --git a/source/gui/scene/RoomJoin.py b/source/gui/scene/RoomJoin.py new file mode 100644 index 0000000..1c7a7a0 --- /dev/null +++ b/source/gui/scene/RoomJoin.py @@ -0,0 +1,75 @@ +from typing import TYPE_CHECKING + +import pyglet + +from source.gui.scene.abc import Scene +from source.gui.widget import Input, Button + +if TYPE_CHECKING: + from source.gui.window import Window + + +class RoomJoin(Scene): + def __init__(self, window: "Window", *args, **kwargs): + super().__init__(window, *args, **kwargs) + + texture_button_normal = pyglet.image.load("./assets/image/button/normal.png") + texture_button_hover = pyglet.image.load("./assets/image/button/hovering.png") + texture_button_click = pyglet.image.load("./assets/image/button/clicking.png") + + texture_input_normal = pyglet.image.load("assets/image/input/normal.png") + texture_input_active = pyglet.image.load("./assets/image/input/active.png") + texture_input_error = pyglet.image.load("./assets/image/input/error.png") + + self.back = self.add_widget( + Button, + x=0.02, y=0.02, width=0.2, height=0.1, + + label_text="Retour", + + texture_normal=texture_button_normal, + texture_hover=texture_button_hover, + texture_click=texture_button_click + ) + + from source.gui.scene import MainMenu + self.back.on_release = lambda button, modifiers: self.window.set_scene(MainMenu) + + self.entry_ip = self.add_widget( + Input, + x=0.4, y=0.5, width=0.13, height=0.1, + + regex=r"\d{1,3}(.\d{1,3}){3}", + + texture_normal=texture_input_normal, + texture_active=texture_input_active, + texture_error=texture_input_error + ) + + self.entry_port = self.add_widget( + Input, + x=0.53, y=0.5, width=0.07, height=0.1, + + regex=r"\d{0,5}", + + texture_normal=texture_input_normal, + texture_active=texture_input_active, + texture_error=texture_input_error + ) + + self.connect = self.add_widget( + Button, + x=0.4, y=0.4, width=0.2, height=0.1, + + label_text="Se connecter", + + texture_normal=texture_button_normal, + texture_hover=texture_button_hover, + texture_click=texture_button_click + ) + + def on_draw(self): + self.back.draw() + self.entry_ip.draw() + self.entry_port.draw() + self.connect.draw() diff --git a/source/gui/scene/__init__.py b/source/gui/scene/__init__.py index e69de29..0e4be90 100644 --- a/source/gui/scene/__init__.py +++ b/source/gui/scene/__init__.py @@ -0,0 +1,4 @@ +from .RoomCreate import RoomCreate +from .RoomJoin import RoomJoin + +from .MainMenu import MainMenu diff --git a/source/gui/widget/Input.py b/source/gui/widget/Input.py index 174520f..c00cf05 100644 --- a/source/gui/widget/Input.py +++ b/source/gui/widget/Input.py @@ -46,6 +46,8 @@ class Input(BoxWidget): **dict_prefix("label_", kwargs) ) + self._refresh_size() + # background @property @@ -92,20 +94,28 @@ class Input(BoxWidget): self._invalid = invalid self._refresh_background() + @property + def text(self): + return self.label.text + + @text.setter + def text(self, text: str): + self.label.text = text + # event def on_key_press(self, symbol: int, modifiers: int): if not self.activated: return # ignore si ce widget est désactivé / non sélectionné if symbol == pyglet.window.key.BACKSPACE: # si la touche "supprimé" est enfoncé - self.label.text = self.label.text[0:-1] # retire le dernier caractère du texte + self.text = self.text[0:-1] # retire le dernier caractère du texte def on_text(self, char: str): if not self.activated: return # ignore si ce widget est désactivé / non sélectionné - self.label.text += char # ajoute le caractère au label + self.text += char # ajoute le caractère au label if self.regex is not None: # si il y a un regex de validation, applique le pour vérifier le texte - self.invalid = self.regex.fullmatch(self.label.text) is None + self.invalid = self.regex.fullmatch(self.text) is None def on_resize(self, width: int, height: int): self._refresh_size() diff --git a/source/gui/widget/abc/BoxWidget.py b/source/gui/widget/abc/BoxWidget.py index 7ea4503..3884cc6 100644 --- a/source/gui/widget/abc/BoxWidget.py +++ b/source/gui/widget/abc/BoxWidget.py @@ -51,7 +51,7 @@ class BoxWidget(Widget, ABC): @property def width(self) -> int: - return None if self._p_width is None else self.scene.window.width * self._p_width + return 0 if self._p_width is None else self.scene.window.width * self._p_width @width.setter def width(self, width: Optional[Percentage]): @@ -59,7 +59,7 @@ class BoxWidget(Widget, ABC): @property def height(self) -> int: - return None if self._p_height is None else self.scene.window.height * self._p_height + return 0 if self._p_height is None else self.scene.window.height * self._p_height @height.setter def height(self, height: Optional[Percentage]): diff --git a/source/gui/window/Window.py b/source/gui/window/Window.py index 2d63f7f..1f07740 100644 --- a/source/gui/window/Window.py +++ b/source/gui/window/Window.py @@ -5,7 +5,7 @@ import pyglet if TYPE_CHECKING: - from source.gui.scene import Scene + from source.gui.scene.abc import Scene class Window(pyglet.window.Window): # NOQA