From 069282a4fc56c1bc8b33ae0b7072cd417fee067d Mon Sep 17 00:00:00 2001 From: justme-1968 Date: Fri, 25 Apr 2014 22:48:16 +0000 Subject: [PATCH] added 36_EC3000.pm git-svn-id: https://svn.fhem.de/fhem/trunk@5650 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/FHEM/36_EC3000.pm | 225 ++++++++++++++++++ .../contrib/arduino/36_EC3000-ec3kSerial1.zip | Bin 0 -> 29829 bytes 2 files changed, 225 insertions(+) create mode 100644 fhem/FHEM/36_EC3000.pm create mode 100644 fhem/contrib/arduino/36_EC3000-ec3kSerial1.zip diff --git a/fhem/FHEM/36_EC3000.pm b/fhem/FHEM/36_EC3000.pm new file mode 100644 index 000000000..856863f1d --- /dev/null +++ b/fhem/FHEM/36_EC3000.pm @@ -0,0 +1,225 @@ + +# $Id$ +# +# TODO: + +package main; + +use strict; +use warnings; +use SetExtensions; + +sub EC3000_Parse($$); + +sub +EC3000_Initialize($) +{ + my ($hash) = @_; + + $hash->{Match} = "^\\S+\\s+22"; + #$hash->{SetFn} = "EC3000_Set"; + #$hash->{GetFn} = "EC3000_Get"; + $hash->{DefFn} = "EC3000_Define"; + $hash->{UndefFn} = "EC3000_Undef"; + $hash->{FingerprintFn} = "EC3000_Fingerprint"; + $hash->{ParseFn} = "EC3000_Parse"; + $hash->{AttrFn} = "EC3000_Attr"; + $hash->{AttrList} = "IODev". + " $readingFnAttributes"; +} + +sub +EC3000_Define($$) +{ + my ($hash, $def) = @_; + my @a = split("[ \t][ \t]*", $def); + + if(@a != 3 ) { + my $msg = "wrong syntax: define EC3000 "; + Log3 undef, 2, $msg; + return $msg; + } + + $a[2] =~ m/^([\da-f]{4})$/i; + return "$a[2] is not a valid EC3000 address" if( !defined($1) ); + + my $name = $a[0]; + my $addr = $a[2]; + + #return "$addr is not a 1 byte hex value" if( $addr !~ /^[\da-f]{2}$/i ); + #return "$addr is not an allowed address" if( $addr eq "00" ); + + return "EC3000 device $addr already used for $modules{EC3000}{defptr}{$addr}->{NAME}." if( $modules{EC3000}{defptr}{$addr} + && $modules{EC3000}{defptr}{$addr}->{NAME} ne $name ); + + $hash->{addr} = $addr; + + $modules{EC3000}{defptr}{$addr} = $hash; + + AssignIoPort($hash); + if(defined($hash->{IODev}->{NAME})) { + Log3 $name, 3, "$name: I/O device is " . $hash->{IODev}->{NAME}; + } else { + Log3 $name, 1, "$name: no I/O device"; + } + + #$attr{$name}{devStateIcon} = 'on:on:toggle off:off:toggle *.:light_question:off' if( !defined( $attr{$name}{devStateIcon} ) ); + #$attr{$name}{webCmd} = 'on:off:toggle:statusRequest' if( !defined( $attr{$name}{webCmd} ) ); + #CommandAttr( undef, "$name userReadings consumptionTotal:consumption monotonic {ReadingsVal(\$name,'consumption',0)}" ) if( !defined( $attr{$name}{userReadings} ) ); + + return undef; +} + +##################################### +sub +EC3000_Undef($$) +{ + my ($hash, $arg) = @_; + my $name = $hash->{NAME}; + my $addr = $hash->{addr}; + + delete( $modules{EC3000}{defptr}{$addr} ); + + return undef; +} + +##################################### +sub +EC3000_Get($@) +{ + my ($hash, $name, $cmd, @args) = @_; + + return "\"get $name\" needs at least one parameter" if(@_ < 3); + + my $list = ""; + + return "Unknown argument $cmd, choose one of $list"; +} + +sub +EC3000_Fingerprint($$) +{ + my ($name, $msg) = @_; + + return ( "", $msg ); +} + + +sub +EC3000_Parse($$) +{ + my ($hash, $msg) = @_; + my $name = $hash->{NAME}; + + #return undef if( $msg !~ m/^[\dA-F]{12,}$/ ); + + my( @bytes, $addr,$secondsTotal,$secondsOn,$consumptionTotal,$power,$powerMax,$resets,$reception ); + if( $msg =~ m/^OK/ ) { + @bytes = split( ' ', substr($msg, 6) ); + + $addr = sprintf( "%02X%02X", $bytes[0], $bytes[1] ); + $secondsTotal = $bytes[2]*256*255*255 + $bytes[3]*256*255 + $bytes[4]*256 + $bytes[5]; + $secondsOn = $bytes[6]*256*255*255 + $bytes[7]*256*255 + $bytes[8]*256 + $bytes[9]; + $consumptionTotal = ($bytes[10]*256*255*255 + $bytes[11]*256*255 + $bytes[12]*256 + $bytes[13] )/1000.0; + $power = ($bytes[14]*256 + $bytes[15] )/10.0; + $powerMax = ($bytes[16]*256 + $bytes[17] )/10.0; + $resets = $bytes[18]; + $reception = $bytes[19]; + } else { + DoTrigger($name, "UNKNOWNCODE $msg"); + Log3 $name, 3, "$name: Unknown code $msg, help me!"; + return undef; + } + + my $raddr = $addr; + my $rhash = $modules{EC3000}{defptr}{$raddr}; + my $rname = $rhash?$rhash->{NAME}:$raddr; + + if( !$modules{EC3000}{defptr}{$raddr} ) { + Log3 $name, 3, "EC3000 Unknown device $rname, please define it"; + #return undef if( $raddr eq "00" ); + + return "UNDEFINED EC3000_$rname EC3000 $raddr"; + } + + #CommandAttr( undef, "$rname userReadings consumptionTotal:consumption monotonic {ReadingsVal($rname,'consumption',0)}" ) if( !defined( $attr{$rname}{userReadings} ) ); + + my @list; + push(@list, $rname); + + $rhash->{EC3000_lastRcv} = TimeNow(); + $rhash->{resets} = $resets; + $rhash->{reception} = $reception; + $rhash->{secondsOn} = $secondsOn; + $rhash->{secondsTotal} = $secondsTotal; + + readingsBeginUpdate($rhash); + #readingsBulkUpdate($rhash, "secondsTotal", $secondsTotal); + #readingsBulkUpdate($rhash, "secondsOn", $secondsOn); + readingsBulkUpdate($rhash, "consumption", $consumptionTotal); + readingsBulkUpdate($rhash, "power", $power); + readingsBulkUpdate($rhash, "powerMax", $powerMax); + readingsBulkUpdate($rhash, "state", $power) if( Value($rname) ne $power ); + readingsEndUpdate($rhash,1); + + return @list; +} + +sub +EC3000_Attr(@) +{ + my ($cmd, $name, $attrName, $attrVal) = @_; + + return undef; +} + +1; + +=pod +=begin html + + +

EC3000

+
    + + + The Energy Count C3000 is a AC mains plug with integrated power meter functionality from CONRAD.

    + + It can be integrated in to FHEM via a JeeLink as the IODevice.

    + + + Define +
      + define <name> EC3000 <addr>
      +
      + addr is a 4 digit hex number to identify the EC3000 device. + Note: devices are autocreated on reception of the first message.
      +
    +
    + + + Set +
      +

    + + + Get +
      +

    + + + Readings +
      +
    • consumption
    • +
    • consumptionMax
    • +
    • consumptionNow
    • +

    + + + Attributes +
      +

    +
+ +=end html +=cut diff --git a/fhem/contrib/arduino/36_EC3000-ec3kSerial1.zip b/fhem/contrib/arduino/36_EC3000-ec3kSerial1.zip new file mode 100644 index 0000000000000000000000000000000000000000..370507d859ce2cda66dcd040053c4f158119fedc GIT binary patch literal 29829 zcmV)RK(oJ4O9KQH00000005*KLjV8(000000000001N;C0A*t{Yg1)%X<=+JFHlPZ z1QY-O00;m8q#8rFDD$X6a{vI(f&l;<0001GV>4@0WpZg@Y%wooV>4@0WpZg@Y%wlr zZg1ROeOnvJ4gY)j6mzr*Hu!Cg0RtgdFy=~+gcOrr+BD@c_5yDFR_{7MoAk5yCu!bx z*CuIuZJ(#y1$Jj8jYgxhy6rBym9}Ay0i!0SC z{#U;|?eD3mxB0OX%?90J>5~d8wVJBe!p&-JySiCZwcWj14gagj-Fhf+f>c*y znat*+%AccX*u9P`<0z?)C;h0p*$69l$!MrE?1RBi$ns`388MY#5bGBwVLgfBq%!SC z%zUFs%-5^6uv*(y_4-~|+iUEqB<|g*PSU+rzhvarWcoN8+}S&OZ^-E=XH(gMcy>wyv z(P%=2Q9CVby&c8VZZArIiIaYJc1vj}VYyt^YB!qnRh)EZi7NklKei}` zZ!ga~mxmXZN`6B97jlip-Rohbl8NfhlL=?*+7h%?-A(2(>S=6=y*@u~pB^joQ?EN> zq|0j1Cu-M`np3M8jMXaBi~6eyBKR03meNK2>g1yRTSBfq9B%LII!dUmB$`2KP|eY} z_ejK;?kws>&?j!ks^3kzS<#_H{eM?*5FP29;q&geQAB=b&{yZC{gizI-SfCi{z-g265ItzIt=|S_O>&bh^D{ z@M(}dQZg0d`1Cw1DYUo|S-;6Vq59|#Vp1SW0xjm~ywkSoQOl|t%PV?FP)$*vs7&Wc zO4{vr?bhY#t9B;{iHli8Yy%_eq2-Yg9*m-x1WiiiBfjmluP)o2%ahZSbHQaPT%5cL z>qqKla5GWE=uDS$Pf1kB}0xOGpq=Z>FiAvPJ;a@VJ78q|f?}>Kx zllXD0{bJm&;>e6L7m2I(FxDRTKA9H`pLmwi+2Trv2!FwLo?$IL7xbFC6f z+|8*w7*Z?2-d%U5uHtF$FQfOHAGlk21%)_JtLppJeOo{DbM=>z3JL-;K2^s z<=|%Jiy=;OBr_acbVmish-fNqz_T%byt=xJy3;G}I!bE&>gsy-@l$uWuK-5hKk?HH z`T>LjQi|&NCn##cK(gr7_vV{VPwnYc16u^KFX@7hrZa%tT)io%H$S|(dP5a6>Lw+w zag-7Kgb#%L* z=9ZF4Yw*P|u_7(RVyFXXWp6f#3&`usLhR`*F{MpV6_$pR#hcFMMPXGv>!@dE^Z1YB z)nbW3OP01OyDT}QU%)h4L!M%^7zEXI^dy|94e)x^fTp;jJc^5;wPyWi?48(n)5nnp z*nafzaunTmH|xzQ0Tz6BRB1n)d(6sT2UE`nEfS*+xul|`S1~1~{H{(fek%@;P3?59 zj*l-C|KQ=s|M2EqdtdaB`a&K6|2RjA3Lt=cNIg*fN?0qYke_x-s>TmZN94`vRi~p} zyP74^pHSyd_Gf$>q2A}PuG7h2%>DLV^`7w5bTCfQd3D}7WjbLx`LuJ+$@O%utsf=V z%@tP->>_kwVm)zP!Tr2^+qt@EA07um?V*Mr|MSJWE9$oSyTbRQ%=gY&yZz>hx>CY! z)@xhTx7Jafd-y}6+flNozKdq~cYTdt3I4_S_n=h!2!HR@amy!ndVJRQsU3dio6PJI>Ps>II<_eu9V26ZASifn=wBNyJXtwHk;~AFIWS5z~#DRyMcP zYUd|)5yha_5{a++wLo@b9xJ$dwj$({t&1O^dBm@lbspm6j|LmdBB zxTrOk0JJX71fa2$i5~<4e6IL9^Xl+j5Z0TlDuch$K*SD}uID#5(G04wF0{ylOJm`20~onBSYN`9-=<09$bK@ zar!sIgmF-o?tGXi^zw5(cq9*P<%{bCxTOwm9&rLE_#Lms& zc0TL!a01OI8IX?~G;0qJz@#6vyAxmrit*Yz>WffmpQ!?dG3xRiy3_WFyj;9fWV?{k z+-|=5^qpb&Y=9NwL@p>AU z)Swbo&^6+xTHmb}!i{l}zu2sIjgF|hmKGthJl>^2VThJoK5pO)0g zVdoO6u-W)XDlvqj)cQxGlA6WwK$UkxyeL=ndcDcG^4vo5wjO2-hG?Q(_Ox;k0)80b zuw}A7JVQ@EEMc(z1AhJXxZ&k-=!y4`%ecdu%j2gRcO)Z>sVS?&MPe4b6P*>KHc`TI z=l8E$CC>Te1esoVS+>0_+s6$gH+gV(H$&5#b`u&!aM{|+GHf3nnhYtQgTq5h{m82{ zJW_#nZKd&mA8*~hu{$aV2*YMmV|4dyvUz>3(D}Z7v&Yzz@$k`=r{R^Sak9hy*5OG@ z6%G+SJ29=QCHhiCj;)5*sIp~i99qlr5urmKMT+ul>{Kdc2=}`y;wwz zOK^m7+Yc8im|mrVyvq-XJ@`OYPC`tv0LZNG=j^l931%9aucMN$$I|NE&4^Xj`LWD4A!+MVgq2%k`bijR@qq4F-B5(?H|dKipv zCW``b3dm89h2!D^lN;F1S)Axh07~H`LN+V~2!sHMu*UPzbuPLAb@cL9`J<((ydNV`-ecTo`@{6cPG#=0J9QBvcN$V(xkwoXQQG8cr z>`RGA-;-EActxSG);zXFVX>LQI0|enk^N|zr9eCpc}qbnKjVIJ(0?dM0><`t0~pi^a!a5#nb@e?^%c0uCpeWq;bK8B2+x$o~h1y(( z`n1FDbG*BRzIydwt$IZ2h{uX9iOQ z@RgBTiU^8tiDZlKocJXkykC@7Z4a+`1=E_9hBQSEw^3$WTbW3|YiOm)VYwxH#01#csK5>ppg7c$mRz zyF8md)}mO0M*X7y=Jmaes!#t|djG_TZ6)xm=nEzb8(81n2vsrAV>M8T9;TBqEvC3o zwMwPFyF$x2tO%&KRszkU-q+3TmzDJNWIP>Q4aS26E1?iY&dgAHorneO zqX7FWw&O^p15tMg%s=&oohT{j*|3tH{3@nC${d>emY=Ye*)GJLMt$^7`jm-q2MD{tb3 z(GG~V?WU8vK@8(InG&PpST#s|dSypf)kzj4AhGg{bbm)~bm6-Km-x9U@JX=<8?1l! zy*A6aW=kDzn_@p;2w!k%y%D!O(>Pkgs5@KIb{w5(iVpU`6C+W1`BF8D>ctDyWN;1j zIRjSwhDIvo5CT*Xs+82aE5Br$byG4*q)t94$f=)E8kLLi;*fUIjdaIdLsk& zc_CQ1{Y_xauR?vh=nN4^PwS(quKN;Puaax8m#6W7|IW<(N|b5b^=9r^JzexEwy`+S z&}JW13ji-1#v_6cG66)R$Ncb0UAq$)-+3`!M7N<(-Pqxd_IlajDsMLSu#CAZX&Ne%w zx+aY89(m0n(Gva0vEiB(DTSNCchw5VXZ8sznEkF=GPEF>rbQYgzVVHWL&^Sc%V_jh z+L+O(mMvNWZzLv&CQKf3jp4tFIXvxLFgX_jO_fx_;6<7ZW&F+XV%YVTx#G zH3+B&Im-EoccvT|Hf;Py)|NeguES&eDxiS_am%fcYyvh1UWSzJt*rJxlA*w43Jsv_%Cw>wUD5^ zjI_8L8AlIZ+|;;dHf{_Y*Ve6uiLa5a;`CasqQvqFv#7}WVgnW{|BPb9$zw!u;miL{5%>$Hg~yPD|??h00WU z-cRt?*)5?(jAKZ!NPU8VbSqTD#HiH#U{OE4uQoOYna-N*A9mebQCR5;JGJ_S=VrAK zK34E25uPkF{mV$yTMv&1gh7Y zn&D}FRO}$aB1iD2^WhMI3MP~5u^EK8;S9+KaK1vf4>hx6M2Ulf5SbbjVU#5(i!p`Z zF(Oh@R33H`_r;R2dc*5}$qM4~UFqUo>0uJf6c~Q#DQpDt=3r}RU7(o9f0G-_h_w3> z`zP9Si6b;hlw(~tqxBq*M@>`cl9h`DwJS}T7 zV@A}nWk82>25gB8*JFIC2y7&563^zz_26NZLd?N0w!NW}t+(wvlv1RFA$>a^ja|FT2PjVGaB{8yJYO_%y zDs|dYI@K^1=sVPx?>QruiJCvPzJINh84X}P%=u5Cw9u*tyccV^L2@1=KT1!P&QSUW z9{#)CasQE({dPAUZ})Q3hQ}vY?bnA#XKmiFhEQ)hRQu+rwg~iyHonz_Z?^%D8eIdK znfP+d?W9KWFYX6;{})+?-<*A_`(%&K&RaiTbx!}#R=mW;{-mY=r_j(CV`8WlPlLwY zQN#gcpVZm;4_8O+AGj=Pv+k49t1;^0+Qe)CXPCldE^p=-I?{649JRAk?A_Iim3C@& zTY&7c+HQPQ1Ku16R849)xxGc{eL7fAdv$q!d3dJjG(9@?TBFHj)9WjpzTyhP=AP+nuT74vSQxnNx}I|3)EBejbGgYaX3OZFf7R5aG9|!&X)uwo$>& zZ&n9}{;#M*xSi97`T~8}T&fTCt?i#nA7r1x&!-RJ&!i7^Umu#`Zat+B^{?tf9mPuN z!>jt%n{fMEbU`3jsgC5)ZbRDhkT|3y*_pMgC)6KK_ONH%Bo6k}XrvO1#d`}--vV2s zwx2>(@J8ly9)X41#T=pbS?BZzv%3CB6MA@%|Cvw}XOVPZMQgy;qTJ(@h<>^_y=*%y z+MB{i1ZR@o7h}XsgZFk+@9cKiCzvn;NOxmH!#3--i@^yf=qG zw6AEt$Hn0*!GnEFBLYc8U#Xzo6_=R@#y)OlbIr4Q^!Dt>6jE!)shYRfDy4091Jmi7 zz{uVVJ!n96i`_A<%ZYX(BIb^%@5)^)35<{;4iS1oWM)f+=?_02nTY&B~|Pyz5!SJ%rRvY>!pu? zqTsfydFaCJH>Ge$o}@1H7QD5KwZNUqAcIdCaDhTR8K+Q=FR?`-Si2;Y^xkmZ62515 zo15M1l~GKm%VaV>eT@SQuqMqcU9@K6O5uLJn(mcg^m z5!J;s@-swA8lTpy1#4}_$5?03U%F^5r9508x)OR+DFdp}iLN28F@Jp@3w+@j0Rxx}_c3M0V)Z#a@BEYV(ant2)xs09;;#D&x z3O=8Fb-j$qNfdq2Y=L~yv9sQAP|&kC=p-l$TI)2N$7mA6M;VPsi<1`QEudh0S7jm- zTgbE@E+0+nJFrl?>in88ppjt=MMSL%bEPa72x~qX&Z+obh?&mS7?HBB((!Y?AGxXu z@G~jwTvP(*PIxkkK~w+)n6JvPZ#E2Nizv^!MDDDK@mgY;UkR8jbx@LUWV~ z1u5r35iS&4)*|-ivl)74Zx0MTPKR)ft$1%>{O??|%eU_(&22E%z39>-mX1%#Dtk#Op0O^LNxM548NWCH%Jb(rybAG{_DWnj&t)_B!bO(5D?UE< zYCZ*URIp!4X%eZ~<5c_eYNw>0Gm-`tuDPfV&2JBk&jT*34v6nyzmXd0Q#NUoHzlIF z>PjShIgyd$ZJL^1b`fH}uduoGjNQ#Ty=>D9ow%57l=SW&6Q>Q0Q*yGO%WP2xwut{f z6N}^*-d8~LX2XNxvbkv=)=DvGRK@p^`ZI+niG{xC9J0p37uwYp-wB{yO`GtF6McZ1 z-Z-pP2+7fCnmj^mz}7?QN6AxmN%1I-Lt|wMF4WHNy)~U(klRQ=m(`8=$2FPT8=7fhYQJG5TP_T zpS3DGi^Sw#3QbkwFs&3rR@?Q%o-&Rc!*ofrBjdYic%h%M36mARqoF0Te|VCVOE#eEm& zbf*~K46Jv)r`WRS_LulWT`dY;=V-t^6UM!f76p~swReWhmCUWjN^h4RWAJidf|6#9 zI;XzKnjzWp*VrxhyN}#=-B5%u$oHV)1yNZe)Gk#N#ZSSwjFC*}%SbGj&jIDHSy|S@ zFElvl;Pm;n6|&xLO*T(JU@{rXV}r7$Ub=~O{wBGoE94fV5cDO|DaMeuKlRri~A{O%H;5!$-?I$Cm+hq z;pc^F8Qw6mb4%88&a03kF)xTA$${3G#<-cw$=o94G8vDkU*;EHBPuaN9iFFlwXEk{ zynEJ&I^Z)YT)e5*#bH@4=#*awoR1`?_NHcnxNe8)vPjJ7F-Axx4)dxzp5JtNwrj?o z-f={`jMV8d(DjVRfg69B&2T(c@=zV{=Yv#$0DyW~jhi??iD^w~7LL-pJ?zz3G{So- z0-5(1z1ZTjBl#a*BQwZDQhC%nXG)Z@zvNO1eUMt4!sc)>13@nL)$G!gRn5Ebp^z8g+e{x^%BFYZIGYdSV*ZhgyosN*b(6gJg5y0TPb;vaAHoF9V7*4LSX7}yb z%=-uVijcG=f>>A;b3-mycry0#leMP{#rnrF#HvnZB=FQA0LWfkTE}o~tFilG(%uHr z-o1OblHMwnE6nTjOVxS%h9*YZ$Ig4E-|k>>>2`j>M5^oP%H8_d^{QLG>U&nGgu+c1 z2u1TbV@GVd>+;h59d&mrW~Ih|=7eo?>OUD2%nK0PP_Ap1-2Tvu z3j;&XK{?Dqod0M5@EFweXPb5{lqEh`;FqHN2$JR#9=#7BrPI%UEPB^noW5@3#GPO> z^v~)KhWJL?tMuoM@WZ~t`St11?=Rcj@!}Q*`74nwNA^4qVm9je$Lg;@mbW-od_jOm z$z?PZJ6-Af-{vFt%;_DZD0XI8L77Z(4}zI6xSN@b3>k?i-~+3!FNu|8f*8dV)`DLJ zInbv7e}Y%Y$=x0qn6>U&rLy+dHS(w!hk8w~M2!6MfZ)j61SH-l(Upte$_%lg)(+RC zWbT_Snd7b-n}Ur8*AP>hJvz|8EFbu+*-q>9w2U;LEv*+C>N&5CErKON2?7l?v#WkQW|KSfId?0_G(8f_Nb| zl}PUZ1cW!XW1M)POg(Zf6aR-0F_rLeKSjoRjU%?QEP4# zC6K%>=&w4*G;ywi_39!t(ILjRDg*)+{mh|f_`U*}K8+{uZwi_7*f^lY6z>OpEEZx> z@~GA{V6j$YsW#QR8C4N(@q_1LO5D>qI7HZuY8ibX@r;_8QFXKR8vJD*n$w@D5J&+% zRuAx;-)gik+=Bu|QJH<6R4)5j7dt`o0tRRusmeZ%LQVFBwzvQ0@mwCPIe2e7#AtOe@l2&;Y)^hp8;4 zDAo(WKwPh90%3Nm%eb#>KBBN%1&Ap^dTbQMaHt7(>{BLCjxEYMP)U2?~D;{>Yxc6{WuI=n4xn@uR=eJ1mC5E~@X{ z#z3~(Ol?oC*xX|6DSF!hOwuPn+jX&Hy~QVlEAAW zMnxpUY1)?FQ1?c!hDH#BhB^>Q@fS@gKs{u30)GNM&(>Dg_3nIKL1n2#9&FLidNpNc z3pd;g8bJ&1#BZ^Ps0o`NF~MxZZ%mi@j8m2Oqw|*BWPf*m-b2g8kK`-DT$Z01%b6{h z3`m)9cZfktSr^M>A;ZJTEHISG^CQmosHPk%tIwXTiYVwK0qe8Pe5^Bz#qE`vYMD)J zzzEh}q7EVM0{$U@lD3_EIE2}iDa7r8X!xS5$tPgzQ2K26HO0)$@j&7pFgX$zpvpX_3e9L1!Sew-nTN+ zv5dr7lg@RbZGqUwCxj&?fv0fx@iPa_cA?EfP8}m@J=gEjO z&d^lUlmT1bFl-fc`wP`J&}7%XCnw0gKC`bb(;T$R^WU)#Xma>Jm6Md1THFvG59^KV zEy4G~810JbC$uF`-4@6E$anEJlG{q52S%nu76>dFp)R|$ z?z)gX-%xCBuNVxSlU+^KDY{3(H|>X>^OMo?5jl}d=Z?8&|B7GfgF4`H?u!{fz>{Up zi!f3gOH+0u!+p;aDu`J$p|m2M%0Xc;fHYdFQAo$2amhC}80iJeP*1U!6(2CWo)RCn z0HcTcUJSV_HfICgN~-*l+#Sx0fifN29QkVK$1Xt=J3Kk7D@Tsa;Bd{7!*hkA8=iD&ZiW!(l@W9qH68%PFGA}bkOfV_Ttb{5DK zwa#=h;~R)Hh%?;U8m|x!bbYX~-GrB#cc29FCy6v0S?hnU;|q^C@m~?P2d_MZsXw_f zYU&JYe90eO&D3?b&lV6pIESgU?4``G3Q@-{LP^(%6n`#tV2@kJw{zCp|sD9$E3S?v+6w4|>< z$2c3|8Qo^3PqPASqxfT-DxrmDNgBWIJ6R|E-@I@6(hjZT@e&h~EXgU$DSGB6CJZ*INqI$MLio_$n7(5|~LJ4$( zr_o|z84djBXlSi@u1m}0Gz|)5YxYgv#f;v|SJTJpS82ymDv(;%A|g7O9f3g`evsNS z)o9E`zy`(n!E$bzo8fSupilF0UxLNs)ZCcEM#V@7fx`zv3mAxdW@tHQl$76`Pdwz) z^?`s|8c!B7F)&go`GsC$_H4sSiH=taP@Lzv6;j_y$r!}J7@r0%y|jd(*m0ECewSxK3yk7vT9j<1tXxajkPSU6g__g{K!-=-${@{Je3HqO`Fg{Vna^fY2Nb#@^T< z-r0*1ps~IqM@Q}LINWtIguqb?8vvMV*7#BaBB8Oku`#?|elPRs>vf*={F`xNX^LY) ztCAiiTWPE7Q!Q`$V;ntkt*tKEn48v0DzOH2oi8(I2`}l<0#ic{TI(23`~_A-lNoW# z(Mkpd1W{d}gQOd29i$Y}Kl)4hmshX-tV;Tme+8|hR>7I*bCzk*XquILYPEwmX}B)g zALv05=jsIbl}__>MaXzdbR!^c1c= zZEO&LOnDK<9{#R`h`;45+;A#)WkXdK3#(0KErJPU^jZy4oXIeRvt%7NyYbAP<%=L?q*N=Z0=|Z^(mTY#K^-|ug-fqz&MRKPz(}~RfWdQ)-e)arE z^7w3cQy}n>`p$Y9{N;f;WmT7jd|{;LlI>D(H}n|j&#y|< z=i9(+b!YvwrdkySh;HcTKVpnApv{v!-_PN>5(i286POROKzH~{2&970O2Er#Jf^Z! zS3E~1dYEokvH>A=euT-*G~<9)Xr{SK~aFr*XX+Yn+2v3$G zrWYs4{70TGcV!}<$!jI-rBmr#`ijh2du9V5^v7=nXva%x5fQ&}k4zKqwbi+ntUyXS zKWZ563YT|u`s^#x5qV1K1f9iqmn748uUe%ek!Dfle(-THLVUejnapmh^fslpYBc7T zs-;H*Zbk;~{r!CY)ozYc=6KjKifHJjExzm&9wOFL}+ zC~4a+?e(FggG1Vs>!KB4?lY~i$pcyM_hB99pJhJK z0;yCQN`6gyhBEaBx*E!?VF2KLcbw1xX?i(rh75%eXA+rri&GUoP((e|ERD4B!L=A2 z@)(Q|GxxVTB+``~C~+UnR;m1Kfb-ANpkxp=krz$@!~^B1e|8~k;1-%%S2eTHQ`SvT zZNaTGWp|0xzD)y{_RSPhfRw=ksV~XORW~x!b;g%@>B}u_<PHXBd z$gIS4JE!t%fHRd$7GPmr(uX~9JDeNf`6!?|d(_pG=sOrpIS$f-sVxu-;6vSzS;fEBqdd)s-u5+T5Cyk%OZL+M_d%Th!0jY`&B8tJk=L zxo$3BRq3ImXD>3!K*O^L=giW|NPS6zv0RC{ea18s+a~0T8^sHP?ogc&WmBZ67r$jS z>|d--?I>%h=&i4ARVjLd;=X&8{QZ>r))uUhOE(f&ru8H~{$`tQ`sn?vAl$k8sfj`T zl@9}u4<=)BH0{Tw=Exm4a3v)-XAbab1CF?3^UESqRD-S&=eb0pKJ6oyZZwErG)K@J6%JmIaA$suay)y@tyyr%L3oSmWhPC=`Gc`9L zQW(?a!@2Rpsok+QGH9-QPLyRd&w&CYRyD{BU!*q5+M2K$74=n zNY^o_f6-tV&4f>AJPW5}2M1gW#hk`0skx=5Jn!ctldPX_t8bZuue6(~Jv2j5*X z=-Tvp^*hQWtAz$$&^g0+rZq?uF$@$7wpC)gCFEF{xrGo@iEH1kqkiG)m=fm10`o_wXUV&<} zUQ9D(3$n$*^QzcLUY$X6WqV4`cv!J>e%`$&1TAuS;_4HN#P@dZxz}(rO(TCF%0d#& zz5EW!XB{s0e6)w{pmLUrl&{3;#eE~sC6^mZ;A%LOqkU(7!N<9l$Eo>al}1yfr}Qqh z8%*-ID(dS0Wu7U|d67NLC<)Un>Em>GXMsOYg8XeID>Bd4=R_leSWa~ zmL#HKE=qD3pRpzWX$*U-XjUiG0h5q#zQF!-;ct8Ezs#Z`8kedQ>b_45h&~-)3Uhd#$8dA`2a z5BR*K5FYaZ)%wn6|A>ySD~C0Ds#%oldwt9lJ!rd%LVf)8Up)|zRNES4n?Ufo^1ht@^LiRok*BDtgUgC@iNMo74V=B|XmsHMb1A1x3wrHA4#l1&Xi zdP_MS3z56&Rz77`oGezy9qBiXA+tL?Q{{1I$V+Kt4*vR4PUjoMXx-^z>g6G+atbLq z@i*oPOnp-9XpSBvmK9vr5npa9b;&o~^A+pB(6?KPqc61NnUB^dPF(J(6Uq5D{Mmq~ zC^X)9qBG#k`pi3bOL|iAUas!pk)O3>gGi%m+!v0$C+VcAJnH)8Kde&J9KUWdQc;aK zmLLH?fe}79m7b*s&Z~^h=rbdb6Sb_Z{48ommLuh*<_A5@h(3Oadk8w~)E6~+PJ2Sx zHF^1k#^z?Vx!tVphFf&_uNzEMrhN=vRAfLV8 zJ3SmVsTPU3N{xZ|5%8J=kjykC{GDQ-O$-sm6E>x{*vrD8(!fmcL)N8JTiG&-S(sMB z8p+C^U6E=f|G3EpC;R=q1(^fFr&A!=RUsnH!dTbk%~l-x(r*z4nabPaJ7 zGm7>0Sn|A)J62S~*KS2kJQ!i5(;Z_GeLQ?*_6BI4)d7ucKgo0=Gq7QeEQh}L6q#1D z&Z|V%9cy1JmSwFB*}Vo0CqS+iOGl#1dm7ENXEBpw!m+Q3+B7jY_IA?46I^6^I8P=c zxz4~!q9w8|QYFi^Hcm`TBA+px;x??uZTYAyzW~I{fX>gH+VGg(OgsL>e z1JiiYVki@Ft`~w&n@Lxj5b%`hGIyjIgAjJ6@6`S@4y`j!cLVc8#LRPl_?TOeq%P`U zE_H|KCM@562B?t*+FAg#n*|DMd8q4q<|z$lZ0)A>f7XxU3OQJ4mcu67!cB+3vWL9M zTV2@KI#6)oc@iW!@peCdCfRA<7H|CJC8re^oj9b&w**!Nkj#MCQAu_Y(RaEA0{)9- z2wOFdsF~1%w026K>&^PQWjp2I*l*1{o!7MTuc*^rD)3<{fePiv1j5>$S3mN1UBUQP zv1GzKj}3hRtmPgZDGMtsIrwzy3+aTl3>`APOlPZ7TS#YfF`XPg=#!YvPMRMV(^*<` zET;nd63%{GTX|QG}M!m@C0K85b$TKvQ~nL zx8MuVASGqz^OjtUE>X!|3vLdpOWnpy>x(n@hh*=@FZyG1sce1Zc(X=#{e=|u;A1Fd zJz3#|RAzCo=%P+%pp{>eDv5P1?i6aBThc>Ot#pYmguJMva^)$^* z>1B<>1ozY}3pDArEhXd?xyzgNG7^m}iKWeW8HL>}gn#xs9xhXLPM%H+YvOH@j#lN351~EV?=wS0^{n@i`dwJau+*oA7a! zzZT58z8d~LZd&<}`^a;$^Vp`RE!7lyJHiNwwlR+495R2WG=ZR}{gs@!Bzr9^D*J-K zrGDyDtILPvN@}toGDrE$(600`Xgo+QagN0C#{~TTTYYufbmB>LI317eGk;tbyb46R z*L||vrC5+balPtO-KxRJ^qRSDGw*CHX@ahbp6U__m4#~8+DM(4SJ6HDCe@Hxm$Sdm zR#c~R?9a8K; zbogser{g#egXVkbK-xvRFAq#pK(a0%rBk$V=g5kQFiRSm!7 zfZp6V!q9ql3|iFL`~*7uS7_h^Y7mG)0eD3!Rmn8xOtUo&oKpmw%AtLb>=h|QNiRtP z%)(hq&RSa?b6bh~Ni9E@jGX4Af1DN(*v1CwpK%sk)un2RsxI%aN&V&fSMTTPrs29K zHJ(DY>GmP!1_W~l)8r>EC!U9d6wz0$zgkO49`^KoUsJi_()#Aovnsbtj@ho6+f|-V zU43rV9*bEILH}d(hxzMR=a^6!Bou|u_C6~(z^KkMqP7EEm&;m;{^6;0R$<=9O2Dbz z0Sx}W_JNNtSD)pTLPuXxxoy^UZqzA0om<1@M!@OZ3WiwGvd))+$oc8vHaJLss9Pss z7~Q}++zoEbH8qnP&M6zPTNyG?A#?8DIxqJuS=P}i#_o+#Ot))N1G>1QL=!jo9W#8k z2fhbUFPfcKA#iKJL4mJ; zMcCh>kU0&E;osxjCH@T}-mYl!x#Da5>eD}Z7>9tc7j!}m7?1v3<3)eYE)+HsYCN5G zt@XtWXJf|KH9q(tYxQ`CLp+(!dJ%J?hw5NPNbv)-iwRw8N?O+ez%-xpy0RQS5<9~R z)C&rh>7||KL?M&2$Ud1!)w-_G6!Rsf`l<84i`|?{WVU=Y3#F#fX<6YIrsSq>*{vPT zyu*R?cf#jIJ3=DYB~!-8Q?s+N!Tza`TcGreC-dO?$1%j1lFMG2E5_25EPr0UM43KQ z-i$@N(yeGkT$uMlF*ufHui3dCn3$W^a5NhYm}-HpbfQvZw~G2|be}M*g}Y}m5Tnwk z!;v+k%$?ax%N1ZsVU)d&ix$KGYSq^}CJJ6MyLc4!TM!9Dm9XyV4` z%LTjp0vs?xl`O;3)S^~>-OYSjmP2)smEq46{}(8(-ZXVoFN}-9xFmYB5#}E1Dd+}4 zGfs(60hfEI7gHG9jL{H`h5>XBf&n!EWDP0!LmyP?0T5qOo3vI~?ks_V@iDa6Q{!L1 zZMwt({oYU6%1@HycZHO~i1O%m7H~Gaq>n#{k@}>;`J;}Yn}q@L4W;xN=f*+i%$4W1 zN*SCtCJ3>YFVR@?s{u46t%>H$8u4#pck!UP*L`wB?a`ip!>&&-V`zJP@|2Go8G9!j z=EEc_ph73uI6qE^l=#BzE1Rlmxjt&TsE@jSn9vdSu9E!dF{6~rEMSHNh;tTnzSxof zr;I3d)*BmgQ{UI*O_V?&T0CuCUKq^$6JGXS!Qaqdk`;$Tf-0Iyjs5p|86Vhv?K3CJqv3dO0Y4B!(}wOsooyVSBj9n8HhAq) z?e63Ki+YFysS@kU61J~{D<<%W_b*n(Q=-H}032{0x0ee0ci_h`fB28=^kg0bO+?_r zA2?!z3mQ1|)9Tsb(beBxdbVoh@QU5+u{5_dArMcE5dRoHy4cBO z8+G}o?Fe^&eU?m<76a}OCkM-B5J&dyGD|-)_g?c!7ykK0fE7oazyVADL$w3m;=SeI z<~W?8ME3+uMWmYXho+2VE(DMHXqa>9!DW8cHHRnDVeGK>b3? zCbIF;-DJ@uEsPt=k+D+O(t;!lzcur}9!3N#3tlYuVgZ;b8cinGwO-F;1MW~5B6=F zFyi%L`z^mWh~H~CXyBKbt*dKHmaJeM6BM5&6_TUiMkG!F=U+Zr*c7gM{p#?zEj&{y z?W(n;uQv9+T|N;et-I;A#0C?2t?Et(o%3qz1xYjptnw+2NQ(-Iu;TvTcPAG5H}^YL zoMa4q;qp6`(Uvp*40l@*e=+nTIZrM7BwLF)k3x8A^~-3_0itl2E46c^dM_PyD4t+- zkNZ}pD`fn2?2ZvoVceyNK)IAF=S>IzH*P#$?SP)P&}3h{XGNdv&39@FS)h7V=qo!m zFH^)wf+-}-M29HbOp9#kSS@d15P=qX6AfPK53DOE!VnlySVDcBQ z(l0uy2a4%B4zes-uYM+DG1=72I&oB3i3c5|Sy>>f0v5ccGQy;_#c**6#tOPGd-~`) zb~dPBGwiu<>E<69Q*%lMFe}^Z;6fc}rhdjtE zqX{@ROnixB*?4X^qOsI_>@^;lcEygM3Bt%PfjM3HFDK8nEbGNJjk;zEc`J>}A)_;& zgDa6Fl9H2pO@7jW=8t_w|4{8F2B}rgR7ZyJ>#zEnvic|<2E&%>+ zKI_m+6f?uc$1v!+I0Ai26%d!!KJCCSUq>aVVR6S3BB%~bSYec+D6wY`pvB`i2^#I5 z=Tr>-PU|j1q@Ci5>_MfBf|4Fz!VXXzhwOycXEmzr2(qis3(pqkoywg%G{fSqZLpk^ zAib)xao&bw?s)**X_vU_78ww9CZ%oA4Lu+Ha{#7V-cRw2*~zh;5svj%wPJpEbU5K{tcqiRmsMR-#_G!nk>OfLF z6G}8zX>fU|)|&N>{;q3FOIXrz2bR#laa}T3T+*Me=D%*6##Rsc4$&Sfc3ATX1wLGL2jJYl@L(`{qt@$alfv!Ima(goW3so{5byA zib%sGRj8rNb+7r41Ur4qWuU5q7WR#k7(h)lx3Ep0;!R$^SU`@PjTsLYP&n`{aTgI@rdJ&pQV8OiG5!DI$b;d zQHS-TKln?fIijMp}K_~c&9oqDOV%h_R8;^`d3W4f$3&KRGLYK z0#Zy%?kaR^3fehhKdBp>kjH4u%`|=@6ir&O^Zn0kyV{3{Be*hD*?cJR%{=berMr2( zYJu!A9xeas)^#g3WuAb+FKh_{WG9Hs44?*e&2@Q({pKMNj$E!!N7pXcff*nvN}crfVie4oGLTfE#V>60oilp9WxkCPico3ODypIy z9{Fc@kMMGV}6UDH_|mlwl(@QAxfeHli_#2Il7-FhP=Y)r8k;{CzU5) z9>p+C(edk>0UaCBAK9pFeYg~WjyUczK|UUSWuIveu9L>pNEae<`h6chP`5RNBXWJP zyOSTMeiU_pvs67$KeT$!B$&sP?+G!fsN-k9dTdfk=REdW=f02o&y-`;o)sn41q>LU z0Z8NhXFVRtg1#w&wp9*9WxhKxsxnl{$2(splaSjePyOg4vJTVK%A(N)!?`5L^xN9Z zxTVXrXp1Lr_E8hu8DK8FXigX;L8*s2LjfC4uVXrT-E5^RJv5cl((S%t064jPuU;aI zV)YJr7F);W@8gb~1eLO^KU`Q1YB)IeF56z{bQr_BjzSpAC{^}E2#tpduk8ICLXYPhrfU0JkZtppq>^p2o>rY$`2zG;KF#vNQuK)0+x^owsur zFuLPHyGy%>zSvEJdG-#5z`xH`5}3-aY{=E(p}&#l&qhYP170ftb)HMcr0I>45X?MCoJ{$Kql4(k#tdv|v-KXRfyhj}TI!wiSsjuaq zMN}XGVH*3aBCNel?Zsjd3#VqV+du0Cq!0vV0sgPW9~A6FVf&{`5X=k=j_gh8in~oy z+m{B&h8X94>!DX%XETUs!6${wCO_F<8jQPFl=O6AJ)Rcs2f#x zbgt`Z*)C|H>Qg>jT!>vj`!H9Dxsv7Swz9c|xD+8l3JyHYGDqK^O+w8Q45l{< zKTMb={qhREG|1k4u-ju&X#jKJe@;(2KxJZp@R66EpTMKQK+-!H0YsAP&qjQ}n(EL2 z`R_HLno(MRSG2HVYTKVuSCpUrwXkwe`z6sUQ5Bq_u0&>8U+ZJsyuD^~Ay_@6>F*1_ z%%;feV#e6v6(S6g6r~q>a%H{CmMbq3%IIMkQHSEjjXprXQ@1z1`Md<~7z1hg7=*B= z17mdo|7e53OM}~Ei-fyK80q9uT}ji}l-)yptD!34Bw@XA;uG%~#AlM_t3Hl1u4DaMtDC-j<@$^%QG*z86bBkrvWj1`ZrW9gZIG zym$6=kyeI}u_;4UvsOJ0kCp<wFAIrnOLs^E~v0 zZXgg^I3mrW2M*ze+LOQa^#|)QzAq}Ur$fNZNsmQK`hue6$48#69OeSZM4b<&J(s2% z1PB5`iy+yFi(#nj=@rjC4yfk&qmWDONwI7pqUAd2#|O3$$a)Y!xVNZuhLUEIb;zO@ z+%q5)OC26h`7&|F4V`2Iy+Go3tz?S=2eC?v2Qv#XJ2;53a=4SG?lUBU6CmgvO_U62vY_8uu=J8P(qS!Zz>ENa?PxgSB$%ZP4 zQyqVn<7CCoP!J|vJe*j5xL>AdWAf;!%Xr%=TlpSLT+;dq*jb1+&C@JcMwWjT%@p3dts@hCtJp z>3HW&@eZHC*pO8DuCG_EtDX?$kcLv9^Q2*i6s9$L-YQEkfuDuS&XmT{Dm;71K5FNV z_P#5U4Rl?!qD^P}I(X08-*z1G%f>!)A8FdttI|^2BHM`NfG@c4#J@E8+em43!J)66 zaw-7qJ*bIS^-J0@vVRF=p5Q3FF1XPc0Zp%@RLdXzb|Vxamxd4D7Wv@|nh*}%DETtq z4w2;N3+@$Xo3O@LA4GKA3*KLy1}$y4n8)KL?J*K5{vAFYTE6b#zl$y-fqDEwf3Xsm zfvh5#aCzJuuih}9EHiSdR$*yz-(vMh#J)Ojw1#Qp99-o%M}}d0jXgwzUF3F7Y|}U7 zFg_QwyqiYI_P@6VcJwW@DnmpT2g`pg?&DLcP~CbRWirXKXZ}_kr>DM0Lzj z-dhMBeRO??jeJ~K40JKQ#vKs1d{%kt_|kn!Gmz{V_k7028_CP6fYFVuOn$*zu}xz+ zeP7Gs$JRD4}|+rS6TE^Hy&Ra?c9dV=mMBcb*=Lf;kZ zyJl~sN_xbL3ZYu)L&*D9VQ<5n+~cVK3V-k-U{}GTdkBMou(h!S{9PEKZ7sU^EZ>AU>e&0Vpc6r^2y%*COR+#(e=EW|;v(hf%<2HVA zD{nsEV5=(D<8k3dKw)6qSvzl^2)#=R-5~Yi(OCzFl4QBetdUE&W_uf5#oC-VO(AGu zBaX@=bar!o75Y3{7}Rvfgd@UJ+*$IW=I8R?CY@oVt^-ED(y_N8 z-d~50%9rU_;am`Y){6wP8AQ<}Qi+s8#%}8l8!%UrO9{hLut3=Ed&M@qFxvm|-HIsK zhCKs`&z(rRx`($8KEr0rr7T{)xqDxGc--ErZIJs4Cvsa)uw^J}{nctHY$825Ne1yc zWO3msOy;lTltL=a6sqpk2g#O)peuvHZ=tskpQQWJFXs!__oI>pX?4bvw&TT&^e2m7 zIxxYIF;J>-G6|#{sHj&8NF_@gNx^m}A^!$4$-c zhr1M9MwB~4HfPA8liZ6o&SoEJWd_KmMsI-}6a%ECN> zhbTWAu9=jI!uFvds6nD2{hz1i)EKJ;Xti}2&*p!$BWnr~Cw8DPrwh^b6zODGH`v&( zqj-azk&6B-rIpW1te7uwq);K0Bj=owtK6i~?LJ>AWgs)L!fLWAQ!eheVXBB{cJ{9; zxsoU`x$|D$AGjbWxHjeh0_Y)=0MqqyCs@j%rR2Q2DBW43aI}9IdK_{>Hs&{bmBDHE zWR4;CT9JO&OCRG7c&A`9z}h;NDd;DG*%G++$HubY zFEDVB*Ncgj9asJQ-cPSrz&(-^;q9j(YTMXE`!eJ+{#_bZMB}Nkv>M>;xdV3 z&eHsy7bd({xp-3Ryc*~EA>X)W@z(e*HDq{qEOdK0>MxrOZ9>5y2&EYUJa$o~R*sBw zZx`{G1vo7erdD~8(axew0TZb%O}5g??E=(6I)k=PV(69a-Y_6K1wk)hhL`&;g(F-~ zbCX>?yOfj|p>C#!gUE=58R{5C$|jBp6Mc7HffNy=7F{Dw#hGF1N`8B5cO)9}Wf%rL zd7n!0AtRa5~0 z1B5spO3wm2NE;4i9x$BDsL+){6mO_ss4uvbK40ck{II+5#b$uEx)iT7!Y&+-0U2^w zZCzGy5%HxL>Fzj3;8DP>v8yRP5!g4Io~J;aJ$BS6Sw3D`e#{Mep-kLU`%_|e?9^(9 zN0)=UM91FQDH6%`^<|6woTLML*~JJ>P`?8a5C{r{_Pc%Ed$Y!Vk5GZC6Xd2N!CdPz z)D#a~d$k_qvs#NEG}ycj$CQ=~9#Zrn_D*|pb(S@6{8>BNO$M%M7ZcvokBQZu$*R@1 zK@WFslLcr-hUVJG{5*r|zHB6BY(*V8{0d;8Wqkor^c^KZ;H#L4>!EaNX-I}7^uuZzX#Cut zKaLg@0-fIG%@r)HU-n{D{c zbc1oRVW{mzV*sMg)lZy`Jgv$V37ER(Bcsy5`WUkBl4jA7B}Sib&6(4ReYM|QG|gb= z-^yphbRi)Gae~>DHSws1WS!-8@DtoZ9$l2@$O^_tDNt~0!TV{fw+}F6*!~D;5#as` z41Mm-l&jep#%$g5Q0x;D~G1TB+;HLGm-G`*J=>;OLko+bJIT@ zU1olavNE9X+NfyQifHwvXRXBc-X*{0NF9b&9f4YE^Svli-5rqYJ*A?CW)#t4cEOsU zc^$S_NDK*EcVY0syEC?Tgp{qgM6-A=B9YTPneouE^h_|Rmtws6mZCfccm!X{fe%09 zu;QG^YOIT($W1BauoXVMFOSoiQ^PS8dOk9#L zAN1R!$E6v({Y!c)$oIf;i|cKi`6Kuwu-A*USwP^WFU7Ni)6ZuHu~I3?{e9DhQ9jZ~L4b5q-``kPiK)*uxYQ%~&LO}#RA763SOola8L zS6yK2rL+3*_!vfy2V@QQcnWotdc-0LCs_QIBqx7-O)OsMU?(ZK$e0kx-h`G%9KVVnZkWk-~u&nz88wQL+?~`hBA~i%>tK45_wmmM{&`k-?Iv zDD{Be?O1R=*vm~&bV<(C2a6jF3vb2!#QX#2x_r=(yj2`VG8}L3=vmv z-G+m|0nmY@hEJPmV{v~u(o$Fy60d4))0Svc<5a6|+DY-P`?c?+N@{H~dMI5KHe&Mm7p_hLuoe6{7|KQk{{8)Op*MdRS*twFO`MQy2a;D`5AcV{JmgG+}6S^1^8fOojv6Dp>8*jJ6qcYQK zlqfpf(S?Amq}-zi(F|V!NHG-CKG*Wc!>?oQAh+HL6bjANB3uVfCp3E=9dwLY#~=Ig zQgxc&T{6d~cgtH&94PF2@0e3qUJ6LWl^G9)f#how835weMOJdD16w@dQVK7tc+_q; z$Z&K#)YP>e%o3Ao%ce^%$A4>gaHygLCY#qC#3{ANpSig|nLRt{Mn5W1NB%xSp zp36@qpC?;Ts8Q2{F@3Q}#n6V_mY<%0QqZ9ZaTjCYZARjKB8IcruRQ~$F{$Os7p2co zJ|%1e+g_iBG8Ytr)Tpag?%(4gBH8C3a*2%G7zV}ut}@Znep%jji(VJ*|GBX6^L*$r zeP>aHWBp+0lvoEpzk`2Ue(oE8_G6o>hiq%_HD~&DYH`SW+D!$rhf~ntsX6PlTD&E9 zq|*`V3U267k=@Na;3%WwcVQO*3({(bk{MTyQjp-hu($XqX*>ir@5*tO5}fJ(cKTq$ z;ul=-VWoCEc>HN$$+j{6IN~ReSueni%GnP=6W%dpOg<}cKe3tl60PhAu{`ZjQ zp6b}|@1f!{On=>-H*vwgUwyq7fkTpv%wjV#6u5#9@Q%DUg4d^dvo~hhgjp3(vJ(6| z!P1Cxd1Qs6=HX-d>*gb)h>DX-3Q*{H6wk>+SYP1@0vCw;eSbf?cXoBBd|Z1&5n}2v zso;Z)57@C=e#eN$|B=k?GrPA?t5h>i7Z7wg242+2iU%^u5sHeHd2P6-cuR{d+~YF{ zVTMtb%Lh`Y8v-{7ZWKcQ=To*U=RM_9V*Z{rKPv23jcfD9TFH+)ab$(%*hsvaF+wYr+nr&fh0#y zLa7pfM7wO1kj1S+^6lGxu<-@)38kb~lRvfj)uwsC+$%rnXd6z8){s+k=(gqWHeO!+ zyp3lkZq7&j7ja8yU(B-oaFlo!UME~$xQQ#eXesJYK+9V-8a%@o?z(b98sY9`h+a-^ zHNJ8!-}nW`fsf^^H90*){Vh(IXF3~mT(i}416cjYqb^ju$vJZgqjfx)Nb9o7XfStu z>F0Jn{K8(ctC>KOYvNV%PR?uj2I&Id=|v8($(GVxr{xD+cbp&E zo+A{m(7C_VvV)ty*z&fWz@~FB05OFYT&~Pa z+}5DyG-DAs5ptODvQ!!yMxA)oLlA!j&b<671*>TNY>lvKZTKM>!dLVr44f+ayP?w~ z(HE;p3b52akM0oI!Sna%t0$Feik>x`VzLGrqrBU6nSuTcn+zC1;2J~Hxzv$8f-s5_Lpu#M&1YDUsNv@FeGHqBT`7x z2(`mK2A{J&?VMNM)7!vQi+{9uZefFh-~3OwU6fUE7q*hQ#Bsw2_xsT|tsaT%*L@vX zuRV%l0wH0+?Y~q=vw9H?;NCYMQ2EqbL_9PxM%_TPC66L8cN(?MKm2rXo ze!6^)>r^3i#>Fg#lxS?Y*7;L*nS~&^Vu>KrYI|B?RbE8Hlc=EYxTzd&)xauR-lfYcKzf<%Uhn|p;1Bqf z$h_S-H$IHwR@3~jmxr)efcpI`F)AarXo&I<0=@%Rk+4{-tphot@!RWPOswW!ndz0T zN!_-7uhayZGW%@c;pUk>J38vNZ1Bx#j*2Lw*X+dhKDBqv5r7!^?Jyu{dt#ZBc~8WJ zlk8XM%bDp-Hb_#rVg{!Gdt6WT_Sr^zSqGg0czUhs>Hu|!>U}9IIN^@XvDxW7^h*2`t4y**XstVTBnUo|7s<&`ehSFkbO^~bOHxBxq#l4<~O&EhM%pUVApJ1Ajss!FEJ;B7=jz!;B9B>dUeiTNE(*Jf`3vO=D}2^W2%P*z43 zQKO8O;cGI>@YZoNn15`)9v^B5RYw4{TT^C_X?IqhM`h_B09CW68T8PlDP;WVpk?7E;R{acdE4cahos|WD05#8 zA?mMcM1(#fKiNgJw2QSZJ4FQGH)XegR>i*!)1LmdZerO4ib>!D;7hm7`@z;0vmzt< z)Ab1na%dKq6yMZGWx$&_4X{;jkyBtv`g%q~O5iVL5kB${9^5Ks-o;?O*ZN~qHFCON zBqCwrnQK7U-W!O6xeRD!)B5CqD6f_aDiHo7QZn*i#ulgsJ>)VeYXEG)gEExAJ$fzP ztJR+H0YcsLUezxK0B5m15t?=nKXc1)3e7)lo=26br0V+b*&so4x33y3{nyXr0q`td z-M2XLV7W!CYtt5z;~WtlquWD`c62MG)N6?Wx3Q+p@SWT=cVSvE3SDOfxd^DAO~vBIFt30KoO2kF5yX&b6;=10(a~- za;VMe`FhcDGb?>Xls$&Z`aP-mn>8}Gzj%*El#IEce5=XePXsRPT$U&6tK&%Kx4*wx zup^P1=emfXOE8pCEW!$%AKBUXVfrY{0TcA}*}Fg*%lLoAffqN_d>>kV5PHH_9&P?Q zNB}w7M49!xeMFGm{@U#purY7zow@&GFYA158rl1aooZF}MI^iX z(4#wJ zU)2N8(?Vyi9gF%#^*p5QQls$KtQ_M2bm6a_CIY_0ma+^jWmtg$N+8+db+A)^UDsJ%J;eTCH?SKurj9kbrqTpA)+whj()%GNkg``1*P0Nam1FLdXznkg zkGE7$)Zeq=c}u3#TC`-DI`G^;e1xYuYldV;s_+nc5_xdUET4`Ueb{TnyjSnaec^J5 zBKR{t#dregr{TLP;2%Z#=~O1j314e;)SO3+hBMYZour^!Ky? zkGwnON&rk36I^B&<0=f)ZnZjV`DZt`3cO22Y(9_X>wp;~T99F4e{`OZdNdIbnSMB` ztb_1*{^OzrX{(vB{9HVV{FkHL_8vJ|SSVqb|5~5)f%8*g2hQPk22zmZt{ng3wLPld zhV2*138$3>onA#bE?B^GXawlN=6jS$$H<}}U7(S?;u$rblln*Gh~4F2odSY4_V;*z z?EJslcQ_41YEbaim!N^l&LGhr^8Dzc(~?jqwmwk8D7sC~Q6FHoDdia`?C}f82HIpR z!=X8L2%*yvxXdvJPTS3EiNks0>jrEko)0+NQPk%ri;8@Zdjzg>9nTyExUUOKjL5RigjkzY-@e*Ipu+QQm;F&Gnx+zE8= zUXHWG`XW90r@V3lEn4N6U%ly^h}f;#DPHj#vDAIXsOPQ{U(H)zvl)CqEQ;_D6g~peCkU)FDVd za%N^m0`JHE`-v$UnnWC@I6_I##(FOoP=p{*9(Vard|rI5WlmKKDCdNw{qm0W;CoXw z4=?T!!^XDptzuC&fmNp6oZ`8X%VQ?S?P?aw!?~StL&qWhvjN~K+r}A(A6FiaQw}LT zAsF-4Xr3NnWEZ9e+NT$n<~o$r&^|IDQesXraX60CGc(3&D`wLw2sX_i%c{b;?^roS zQi@W8nr0!aL5`+4!u#ob7&G%?z(f{3*88A~{&?qO3w-fAWQHrAfz-tknSS#SztL&( z8^nd<^Ex|g>yUyBmON(Nmj|xO)4l_H!V)f%6SvJW4U~h(Ccq`~ec6vsVm0={my>D4 z3(S}0Sw8m341~6C56l%t#jBT?U)JlMCiCj>m4L8H6ZZima+US@f_!w8wM(r2cNt#c zU(;7Asngtc)&XRXn|$xpgk%L@01W|jodl9yNLlF*kcnGq!W+B&rr~rnqm{>89VHn! zr+W5-Q|i$zjp!H`2e_~Q@=|GwyV<31ZD-5b>qx51V$XG;cYv04$Lp*hH-AO*_UHRP z=4pC@Kjd~dPu;Uli$T}Q<&w{K&4EVe2vW7LY7a)4Y|qQ4W81mo>2+JzQ`_guW)96G zHA><#LBMHCqoRUyv0iC2&x{$v3UHmcz}Hm|fbz7wiiFb63kGoJy$oKY^~~b?^!BHp zwHdsc-VX%6$sv%x*oySR5Xs|vGS@i<2Jek! z^_wkXQFvEh;>2zZELp4+8L-jT;Z&3^(qX;v67>7l1R}_UGk<1u)ol&=$x4_|dp#Gz zjOFDFpr@`VKcf+2&{z!wMaam|RJD{`TRe5ny2D$;l+)?KTFjpx2g#0>uyLE9mw3h^ zX%Q}!wZf9Z_J}Wji%|_1U4|G&=5H)H|JftO`s5&zg3u&d9b2OFUQWVA#=L5fn^rO_ zdu)`mvU+{79Qvr~DH??e^oB&q{Kp#12?rFEMniIBJb64tVB86vgtBc?c3Y8W9LdSA%%OI}CXL%$cXzUW6`-3z5uu)`>$*>`REr`(mTmgiA!I6reRbLE6wxFs~w^VBPB01^4^fvmv98y-Fkr6_?~ZV&_HFA<{PnE3(Z^8QK+3fS(T-<#^w{mk4y!v{Mzcs`yJ9->QFre>FwA zm~Kyqupl0f@SK;E@NCxeR|s~9{@F6Z{}o9cjlx36*Py%bq+SYo`wED3R+WnYz^VnX zHzDaMrkYkKcmhtEf*TtzuX3W^=LT}pG->_%hKV?>97eq#*oaDfc3&d0#@590XW&PP zidLQ0+&2R(Q2UUDY!%t2;Jy4~ZsRAD5l~jb<$>3TjzJ=nN<~RD*iga14A~%2zWd`2 ztDqL3Y!?T4iLg(UNQ|Wk8xLJjX$SFg%1n!iqS|S4vT9@7uJMC(3=-ssoTB(HOX`1T2+**+n6C14j~VO?Zx%aYs2Xw&qvkbcy8L_W z2c;NXnW>?CWK02C&>0^PQROY64u@i~ZMkQo1cSO<(q62T9afcG-losKun?yS=Xaut z3r3M{sY^nx@6$$+Q&((j&7=#+zh#snb`&u;ADoJkyM|Gqlk1T)&!iBgFs!;uOd*_f zK`cz-bIz=k^<)`zbO{*E5OW!EDs@3W!JkiZF^(OJZXTh13qUTd3aA}|4NA3S*A*{Q zNnf1_gHEL-ZQ9gH%44V&RljR=*_PzwU_3*tkSm*+SK`3mksmLiSLwkzsso46A31nm zw$shg&OYk3jHRQ=O>T}*^Id7Bx)d$huKeMvl~ErWrGG0jC)hYCa@EFr2F)d*f;)$% z6MWSV)P+UMUv?JeVxtG1xqMdSVTh zMm3`TBy%YZM~Xos_W8c%6w~9!;*oi!aAPs(ND>_?KdCQ~QdF+C4e4 zweEc?_(0CX_rggh-^iwpU;6D-Jpr!S_Gu#wJb1PH`SgW~K<~)BeQU$M|LDkj2>d#H%C=3?c~h|5E8B`yX@ve^d7SU*7-I56!>z-@X60{eS9w{{LMD4)LEa R0{J&4|Jjm%5~4sr{{d$BEzbY| literal 0 HcmV?d00001