From 7c878ea9db3bbb018655255310bcce4a69b4fc24 Mon Sep 17 00:00:00 2001 From: Dany De Bontridder Date: Sat, 16 Jun 2012 23:42:17 +0000 Subject: [PATCH] Start Stock_Summary --- contrib/document_test/all_tags.odt | Bin 0 -> 45469 bytes include/class_stock.php | 47 ++++++++++ include/class_user.php | 47 ++++++++-- include/stock_state.inc.php | 36 ++++++++ include/template/stock_summary.php | 133 +++++++++++++++++++++++++++++ sql/upgrade.sql | 6 +- 6 files changed, 261 insertions(+), 8 deletions(-) create mode 100644 contrib/document_test/all_tags.odt create mode 100644 include/stock_state.inc.php create mode 100644 include/template/stock_summary.php diff --git a/contrib/document_test/all_tags.odt b/contrib/document_test/all_tags.odt new file mode 100644 index 0000000000000000000000000000000000000000..6e92ecdc5f1ce974ec80376e8284cf02f994fdcf GIT binary patch literal 45469 zcmd3Nbx>T-x94ENH9+t{a0u@1GDEPzJ;*?i0S1>q2pXIW46eaFxVuXrxVr_n;E*ie zx9_dI_p7a~+JCmEZrz#N_4$0xx!t$t_UY3aDk!ML000I6@GWLc+O(e+hZz6>{Bt~C z0zhq{5I1jUh`F<~gRP~xo2`>0mxrSjr<1v>tt+RKGsMx#$ z`2SHTp1;XCIa=G=xV!utjVmvgtDCu-yQ_t{3)g?(F#gSme?Z9pj{L`v|BN%Yw1hZ7 zo@tz1xGddWT>eq_f;yl8{)6Vf`||G$|8^q#7c|xmPUdcq|0(`oQUA(lXD4TO=VyoA z|A*246-V_i)SO+MY+N9&|C_u275T61{73A6y-ELfC^si3hyOF`^}n#v7HVz-apjV= zb%UBayZ$E^1w}USbu<8ge-4gku!gOroBOj*Ts++WOW{!z`0u|2 zo_n8*x9i^}fZRWz|EKZ~$^R3JR%HYIBe%8ag&*=DIbDn5+b7zGXfNbA?(VZ&JkAfESXBHz@XFin zqAVvbS?%B`H&akHI{;h3)Yx=Dh@(|)BG~wQNIEG)d?*Sf4l=r2R#$WBzQNHWTy=z7q}cl4zW~rmo6B5D#Dc=7 zpIW95Ec&kPefwhq~lmx1E#fiq8hgJzTPS;a8al)=!m zjVQy#5U~jH57DubQZE7T2(U3Ec26&b;|T(xyVSDt2=eJ~@<0wT3Kdn!spvv}YkMwB zgstwvd@TOf*&K^sM2p&rIMb#C=R}$&d?(ybJ9n~h$`ocFsaiRvrO8V2OIgbLZOAZT zah(!T!MuO^-B%9ICe^?K8Xfz(JuG3}W_n{#%Y>7NsiS>D{}iy1ofGJoS@b1wGc6lj z5*ZOX$1AGQ6duFC-uBL7KbF3EOI)k7IWwq&6Jd!vTTZ>ne{X5H1QeL*WgjyYYWPeY zb-h8^ellGg_4ZcYUkB0967#`#fSnLbDm{u^O7%We_{NA9-?(DiYW%0nvi*%_Ww1$! z7i)h>-T^)y7o)MeoeB3$31MG@$0TJe60c>?DT236CcoQohDnRXkPA1)N*ya{6+M#EVi0>vw$a)jIs@K8j!W6 z4N)4l)Pl!3Xl@EYKD_SG$*xynyw}^f{*Vd zuT^MH^#v2lw6Xi$2mEHlCGgaQi}?2WVabm~`*h)f1#5b${@#4IcU>s<{-YY+llXc& z)jAYx;^R-(5!gS$)$7C9df!X>GEL2UA){r_fSGz}F*}}Y59s+;8N2E94M7=UZHyKl zZ||5$+e8!#ohNR?S85(LzfYh6o9$0t!*GPhqi?!U3;@O^;0|$r zC%a^(bXzMlOEMH^IeyhWCZM@e?tJkp%)pv$$u1ws)`P@4?y?I~aF7rlT_wmy!_oR? zn1c;xvS$~km=)5;>{10bUl-AZs|gN{{RLFgS8xdf`ycj#Jj>tQ)E0KoSfQuM-zv<# z#A;GDD(7@3D*CyLFO#}t&Jbr3PWM*rOF@BR%%zE-b4`o}7X@{PbC(~eaBg3FvG>i! zjyq2Yk742@jUo_w{qvXH59%d%Ea)d&Hj3@XPo3r6dd?$|w+)60r&2ZIkL^=VZ_QPf zmU-C}_Ygfjym=N1d*ILCtZmuZJ8Z#JXb7HBq#J#jsBE~>I|A3}hBezU1e%-Z{p@S$ z3IU14VO@M~RHsJCzW{naKaSTddS-<^S4DBd3+!r-|;XBf> z9ql^&r34$uKORUQN{q`;A=6#lY0Xx!T%E^L3#Vd>%HmrG&@f~KTo$ABnTniM2G;H# zP${*t&fe$MZ^f|&ONlmU;fDML91+|3g6+8Kjb*Hcuid&KlL>?HK}K1!clY22iGJ_d zw0f^PM%=P|BK?MA;_5SWBxtzav@H_W0m{UJGhPuolwNeFr5 z_z6<~7Qo7kYGWp|bgkE!N=zu%CwdPoQ6=-xn?80cg$0FP>qFjb>d%DB@xuvryn{91 z8nX4d-h3~eFbRXAzO2f%OFrNfNeTnrzie8}gl7Csat7VDl&7(U+ro?veM{Ov4f`i5 zIflxiy(P7?<^oKvUn{+xYF@Bq5;04T+G1JItBX^(w(Rh2q#oIP!GwvWJ18AiUd(Y* zr#15R*)vC7XKeWyy@{8tpV2Dz+--Bz_CAo(8I4qt)z8;u2JJe!6%;Ub4%sqsl73en z$!YK^91LUpk-Y5nHN{1~n3wuw!GaG%t5WiQ*4xOo0A5I1N07ik!m>`~(k?aO<@s*9 zoTE|a$4qgxfups`%rr@bRjPtMSb2oSDw;3_Y5cx4-Hk{Ptp0|l@x~|(D<6wSBRf7Q zYCHZyl0-bXUJm3vK(M5mqb7VXn?P6p6P{mgr-=z7h|A}Y4~WAQMiC8p1l~(O2s`g) zKQZVX-26~vFSW1~#1#}UeQRUnuF4^0G+n|EqG|^tSW2?AlH(FG?jpeXl#7w|PgDKg z?v#Q*O4PHRztP9YYkO62QZ22#E4LM3+X}}WB({nDo$%lXdgl@_x>$;@{gOJ>LAUN! zt8a{9%1Woqp3~0|KD_*4#w-o^ZOY6&pLErl>i$VKh19i7*xSqzd%Ur`ePqxfDEcx? zjDCuvcK#|xZ2Hd+U?AD=tLDJI_oq@G4L1#dkc_Us07Tf=TzXtSA#vL<$%13Lh%w2t zsE5b=rtgZsBHPg~srD)W%dO~=2(|IS@f*gzr`BJjW+RVM%$HaF<>QkL3%~yvY;S*- zRsH!3u%((76S@wUohGpWD7v7nSh2hQDId<=*tnSXYqD6rMtI~p8WXmK)&SiJ_j=?9 zU8ksbs+Tr8Yzv1FxP32H94edq#*QJXjo<^);G@~L^lMB1W9pERHBn}-eVd8_mk}}u z_~?5QM9msQKOiSX(M7t`pp7vZmRk`In_V$Z@{7@Gjj0~-o5Eue)kemT?vGh%rCT@o z^;V@M-cOhPO)PTtO#<`#KX0r-T>N)EeN2$pqQVNpZ0M z{ZAqp4{|?ioJ*!AI{3 zTPEzjjVI0t-|w7R9rmLJy?D z8+{{-q9PesH{KxO}SCEoofb;)>8Za z8LP&gvSv4#f^LdVIrvTU{=-|Qd{Kb zkvoNz5`}Ss=oW^ZglrCxd|hKGwRl`=TwYv45t{J4E+wz3M-s29WG<-{=Fb%^qMQ-P zuM5l8ppe>2&VVg@-~obxCTsxM!n!V&<7#6g@mpwu1p z`ByR*QKB*lis*xjni68Ms2q)TOIq&p172RFF^|rQRs9M@Uox23@y1-|N5yZklr6Bc z$bh-RBgQ%9_EM6BiFI95pP2%qDcf^{Vi883O=XXAw+V*uuA(9M)`y6CEgEedCfQ}J z=-S!`6p!*IM=`rkxF>hxW5otIvK~R&iI=CtX%0iM!Cyffb6CSG*@G%Pmf{Uy@+BES#E4ZvIZT&m#RAzpY47A3M`idoA&y4V zMawplu(+cn?R)G4cl(`XsV+l>Lec|6E()_HgL!>JAcG!}9l?IF?_0Q$FQptuPth9{ zZ>y9|UF+z${yjE3S>IyAMG>fG#!3Ji!Jr0UxhsIuJd8!mrl{b}>15%;UF+`T=Gj07 z^6-E$^l5GHa;EB^&JcT{64^mPk|?!y%*eI}`7_Bw{QVTaN1yriO7xdXs!!o=>`sI+ zjaOY=J02d#nA8n4F8yvfdBt`rLLB*w-3fupwqI^gV#RBMLKmTZWk3`j%0_2oa{JTV4pu8of#V>3a=K3P%nAK#lF#y8CRlkLj|o3whN^^2DI`h=Sl z86~})BbpKY?A>hLaD+h#}y`!#QBlWIA^0@vlAB;*~#@@C~tcWdV}SbcMZ(MM=g?B z;$6y`kOB@c7&gK*qrafPm)=b^h8(YTouIF2-TJy|IvupRq~N9T+F$o^E~lx!*Rc?i zGevlGMUoZyV zb!JXdX>aZkRu20GFo6$~-tJ87G6!^!aT^kEhZaj5WV17kr7o z04n>fKaM6jJX!NWe*rrljy`w(lQvg7WvBCwLmfB5>akBs(8e3jr@dK!^4!HMsVBa_ zfS;?GSq75HzdnVUDG#6vSNR#WO4J>zF*g`DK_p0D&aep-%}DZEbjNEZvAKS)6uC$Z zCnXl)eGU8KLK?aV4gz(}o@^D`alZEWn61f)J;~9dZPB4`LV-$Y$jAnjZ=Pn}?ckU# znTcR<>y8OcgX|Hq4g_6n=D+2rYur*+spi5KPU}(QsPi>*Bc6Ca$#LJKo%F*ZObfQy zr>s;E`g4V;Tw;D5ygftQgfB=5c%i6$1{SJx5c?GM=vq8a;2;JazQS58oQ0_PUWYE{ z(;xcuCci7r?#1`kBuVRKez0qHt(AgOG3De_4d!=TGYOX2en% ziRZ`!*VrUtiyIp6LhQvR9Jg)ka~umuk^Ao{p$#rD(DPTTjr0u@yqtv?@eP z-W7eEEJ;u#{id7xu`yIZjZb{Ynkw1lA@5RMkEy0VBiU9rRqimI11A2}NS?W|F4e6i z!d@E5w^S@x+Ld4wPG9@w9R0%z1vh-#&}?w>i=%Ad0M@!o+}iN)$Fa^RM`?N&CEyPr z^e2`!-pAOMo~x6YvD~(#UZw+?Jl5r6X_V`lox`aL^>L$3oZ3NKc2olCC#Trhi#crC zpg?XvJJU8?3V!=x&F82r>+?+Tkr|N1!D<+KySazOAu{~`w5MvtBMV%tn7HIro7X%%JE&4##DNB+Js^RxM?I3HZmkTEdug9|2b|o7e-O#K zeir?RMCsszo3Q5)xot}Q?Y6_{I?L8VU`cQ#^guVHy2vBm!SINUH>F2WtT@kCPQ`)X z)@{&m88$~{Oj@p!YB-&NXp%(#L@O2BW2U&@7O{U}+YGrHtMfx!nTgJy>BV+(v<$Uf zkFljwv>;CuatWv>yV(A`fpK3`27l8VRdQ6K!u=NI{mZ!?hI_4oVi;fW&d$ZTWoRUt z{8QS=EUirik2dY;2WIE|xa#FS9WUFA8*2?JNDjEUv(^YvZ9u~Z^rlG;X&ZSYS zJ4Z=hxe(%=Ij=A)tu2Ny)8-;OFg)h`T@}T*-eRx_5>O+Sq|glP4aYLl)s6#&ULQxg z0!v}CXdGN5JoZL$bfmJ~flS&a{$&p#wD84@aJFKAU(A8_ zZYcp&r_Yj?_>^ohwoxcG2{Wse8<2yQ6BCh9i4$ z(D;j&!-Z30odAglerLeg%g>`_uGG0LMkk!n!$H@IQKRM2lY1JCJ3Hg?hP`T1l_N}L z+vQc{Pe(1W@~@>@UH1cgHVYdj_WQ(Mhq|@X>p3p1{;V${S*XPl$EbVAj8#lGpV%5t zV^iT_Bia>Trnh_y9!eU-rR{rpa@WTXaWWHbXbGxi>^6Pn!XR^DUOfm(8#9%W?B1 ztG7M23Vx0nxfa?|zZ#9k`6~C$lxh}Fg@Pz`;RKaHbEF-}|EEgAy;}mS4XZ6XXPHZm z^smqpatx;yMy2=S1LF>Em*?mG`FfW6*d;Kvd}rkkClIH1#jCXpaGZB8& z#d!Qgg&I8wOv0ZROQ1<(Ifw$1EnBC?m>fz}I;{sL=(eqgfh8OH)hEMZk(~>H_c9XV zLi4eVzDsr++AWzA4d7Egw`Qu6n(}-g82n@hi$eJ<^+7a|<+w4S5vbzC_yHt$s1?^# zjA4uVvT5kBA^B#{smD+IDb}>(4J=yx4?1~$1O5?((J=UR zxP#_Px;lpX0#g@kF7a+SD3;%oN{itug09*!L;wIT{KbpK z%Q}%sBUQ=1X+hP#rQ^nJ!X85O`=(uVvWK9v8+BB^j;A82m+=?fQy3en-P;9*vgyo6 zg~iMx)Z!l{mOe*=lw)2|fMO$L9^3x-`%?rzQpzRA06US$FX)%Wn=|V8ZSUmWZ0-wD zMjq79=SKO842jn$ksEquwlS=u z?_#bwuu4fMLIdiT<+T^5=M#K_J*HO`uZm`XcsX{Q{12!6?WSt-os0QD4Zv^&{%h*C z70)~WV?WHiYu19*5BH`yzU5|1%WJmRN%2bqPL4w;%S(C31YD;=p5ueP&mmRe!6E~9 z8=#eZxPj(^3}dxyx(&)W`mPjB+owI&h10))7-QOJ(@KS& zcolZbdE(o45*@xq?x}gfiVznDjtD=|d?us8m>x&Ti!_K#fkp!FTsHI~Oa|`5CE~@(l-v2q(=Y zX#{gLN>+F8Suk5|` zqE@C*kXEr}LnV@y@QJdSt5|IlS8NnPQ^TOWqe!mwN=N=!H#}}%!7{w5MBSL?)i1(@`8Eu`HQFWn?tx-+4WSZbXvZeJI_9~k!~73 zCDwAXU8+bd?8d*#2O$Xa@~6w|8XpT5AO*7_bOXA6@{<2|!7aTO1#6o2QJry`F#w zMv5TlfCf+b0S8kEWkQUZO|k>sk;?yi`F+QRbs zan|4wx6qvEtUJAXksZa45&kJNlW~41>n#Ij~lr?vv%J=S=rr1Dm{ zG!mhn`R6!vzSp`U3|9=ZO%@@NvVoIR!9`bHrDK(?Xt;Lr% z%U_IRfre>RB`sgF353uA0_)8RwP*@}46L;cUv!==Nm zo>B%;%7TOQP>*UJUQS}q)!n%zz*mSCBIRto&@keir_ zaiFQuInaf>azop6%AUDlwy5g3UOGc5tPj#p6S>){5BPq7{+K?N;Szcz={gDtHY3HaJeiBCdm~a+Vc@8*)d(u zSvu1qDU-FL!$ecjgl%8svob1KZKsoG4i0!jEA5VQXhT(eg}3_w z1pPO9a?B2B@P!y5luy*0)C^r;nz=Wf@*^Yt*N~4P4u3>nV4-34-(4IPFhWGB_Q=u;ENVf9){51K1s2`JS=n z_^MVUIM%e;@hP`Zu~wMRRX*s;emqu+gI0=~h;ItqQqDU8j)6oRx=SGI9qR#LVc@`i z9bA9g+?Z?eGa*EHbSX2T_=`;U4@s&#^FI<}52p?sce*PSt z=v{jIlso^$%NkFQ35o4sp?5D`WF&Z#MRxiOTEP@##M>n$v2UBS(YFFv`xg`37q3-w z?X5yIpd}ovmvNvx*}?&9t>E9g9w2J>kJ-!_N(rbNbn4e(jg%EI|5MjiY`ZjpRBZZW zu9o{$K5mFmoHF{-Qes_U36Tj{>-4hP+OMje#ZQ<#r3}rZPx295zE#p^Xd_ChyM?;|(dC z7Jw>D^G71nH}zkvsZ9;bT>b?(HH}HbrUh^6P=>!|&s(i~qiS?;JT~;(rd?~~V0mH_ zYGZaa9@c>(NQIch1q2ji1?L%gS*sIxMXEO&STXzI$3e(nDURxP1*cSJ_I_?tz~PGo z4O=&T-x|E2A5+eX0r4JQ`=F<%qrWBKND11rSSpw(dRyiiRZP&QYp86B@phW6dR{z- zMbkcmPR3-j(z$Mb#%uEa;_U@~Z3TJQim&52G+R-E(w6SM=u5Kq+%4YDZ7U_Llz#yQ z=uh*z!gqxG>AL+#9zFaI{pZaY@Lo13=?@P9MPoz*4TEmM46Qa!IPVG!R}m7*0?vdD zI4>H>t{DDIoEaT1|0C&Km-rAauDx+6W{JOgy<}wh`Zq%6IkzSb`(@Y<5jzi~O@*<1 zPd+Y{K#3aEb-`l(YaJ}?b>W&Yuwj~WZi{UlaVQnq`(ntK&pi2Pmq=6R=VPKDrEsn7 z9w}}5n={M(B$j7OAzrD*iWs>ryOXmk7359lH#VvA#_rqnML#sDrwj)uN&*dhd*Y*9 zc?RA^Pvbu4J!I8=icF_ZLoi3C^XYy>yR(aLm%6W#l%w>yJ2Y$QZ6_gNr_$YM`U^NM zHQv78EIp9$=y$=Gl;r)+4aO6_ee`iU8BgpXn?Zi?ma?IYuG;qb=;QA_OJx#odlsXA zRXXakB(uMB`xlV<`vCkhb6@CBZvB?n<9Wj!oVuW7HeWB&9kaeoF;+kH=}lB|9f+Z^ zW?iMYKs4@PO7LZ6Z`>tJ3pXiYBoY%=J=N%k_xVi=*^TZo%9kXEg|GXyo`o7Y9g>#i zav@X`Z)O;W-R~-emvD3HORFODyB8@y&x?pMqiFpkV>!e4W*q0|Yc$lJ( z?RS&pN6(KLc34b0e_?s`7Osf~JFn*F;l|m06Ms3!OGaA`;TayNCn*{F@XYup70jB}u*D;NDbHM`GV!rGt6`7kW6$Pi71d7o-F|?ogGA)Ul z7@jjCqIZt=>=RrLh}i*+4DsKYD-)G6`*WufXOxQqhX0)Z!d#NnfBfU`)&V&%@lE3U zQ&M$jc{Y9VZGre8-qy@5garR!+osY?bIzGB8p66^jQa&5`A2>C6PHJARoSTEj#hLt zZs$Pk-qa(+({l95?{!Y|QLMf8^mkuGpx`n)WtN9OJx$ud=GRZo&EbMNg5`aZR8w}^ zck10mS_iNCYVfSctEi2La(+ZI6-=E&6#W{=zEWTRJjADiHZGFFQIL!0i9sZSxdugy zIGuT2Dd5!mKq9j67h-U$=6vBiIy#)%I#v}!qBu-297%MC?I5u^!>-ABTqMJ|RJ)W< z`x~(iXED$IB(XM80MPpio*ld=f~n>#`U=T8XRD?pt+dGj`n#_dS=kau0d$PoW_oQw z2wg~y?s8lDIE#BcS9Rm1NiQYX8wW5oxn6Ve_zNH}bcew#gT`v*KALU#e4&2Xi>)e0 zOMP9M?x;KvrkP>KYOJyWG}zhf!2PmzvgXk=&_ZJDwO72~C@c)T!U|GQp!XYFQ4<%1 z2E`_}G6EekrXHT-*_M^DJu5#qk0RCT8JL=U`~_$CI`L6`At~U%p233A3j3*{gH(Y4zz-U^nS7$e+y$d*?z4`8{O9tDR*7xdVn8y$g)F zg9_^p+8)_u4r>oE!{BR03h2ZX?jFSq`BWQk#gq{WRKsWzi|-;@-7e#@weuRHDw7o~ z)^&%}0}jML-jJi%c~~TKpMi}yQJ2=s z(+ht1 z>FSrO5wR75{C-|{51sb4`oMr<2jPvOGc`R4+%p$LS2Rt;HWxsxfBpcYdQ{zo@LtbxM;__eU$1w>9)b6A@B0`Bi04VPPz=7)kJ87655yLyj`YDp{7OFFh!>=&8hT$gw<8YT% zt?{P8NpM^t4a{yEim9eEoDcxOdlQ0tXgXTUA@53m?J<`#VXRE=O?>b0VKT!xp9Pfe zq2kzl01pmntSe%0wFFuBz$XuCHNB^r;(E_~ORnYWmyj70uNpV`|;UDkcpnBh+I|^w5K+t6+Lw&n1h%CE@BY>Sa{adKS-C zhI47O18x|XgsI>XGjsFy&?D;k|;>iszo!QSC^JT>e%aK=VjgOrj8Vybl`d%G*sfAE0csjz`!iyuUh&+It{$UjXfA|K_Uv37>)!)7N2P|7aNwxsZjcCd_~a|>n4(wMBq_OPT1^d;BU2Z^b2E#i?}@k5mm z+?|S$$+2a3j7eg|8Jn`OQ;$Ih8L#&VK6+zcgdxG9g4!rReI>5@0{&Q@;wxR;0GkEBndVik(n{W22hKA-MK^1!k27iXc=(ru`*Ja_z?{JY9#9zlDRt@4V5O> zuZ~GqPi3n&9*nrG8$wqXI13ULY%=w|861xZrDFseO@AlaSb!>CB_w`-n_}&qa+h4i z1`q}upHdGA3(q5+j}1Q5LR_zdB9nrO4LGz4>tt=26K+0%6)e(NX$yvI+j3b`{2aAXkTHKZqsf~u;i5t%)GJ_|PFhN1AE??<-85L|Y_KdM`%UQ9J ze<@fQyZ;3&VpPhNNBmGf{1RJ;_%$OZuq6?u_!lrK#L$eOii5=|(r)&o3VPGEZfx5L8|o5A{>`J=Hkx5rNZR>lj*2JXLo$w z5K=98Lb^*#rnm68X;?3H!&oE7YAFs8*;cf3i%n7mPlsx|!D4|X9k=pwa za5cEvCyUD4o9gxma9H+jC0hl-_|4E%Bov5FnMK{|8kBx-Q&GSs%)Po`F5#LfvoVz| z)!_%JRU=Uf-6S$@TT6@PJcuGPd4<)xw(N7P1Q&62~8e2o>B);$SEU!`KrpWJb zyzHDRgE)%iZve44**N%|S(T>ErLTjag4rqnr}e0-fwTSk+cA&cfhEk5m|t!K>Tf?~ z;j`toNPaRixZf{mbjSPTKfta30HhaL>fNfWSS1_V%R8;3gb`Bgp^Jx)`Fl&AZ+>i; zMR9b#ig1am*pae9H{TW|`l$F~U@tm!=QA!(8YT+BQmPgIb!_XM9fh~=97mLm1lxCR zz(tYf?{HJLIx+4Qf<pecANQLQlYIMbPbYB6hits_v$Ui5k5(`a=DM z6j!Sz=?s$&*`Q?<>Cl{09Or3QS3~Um^J^cy?r*(* zFCUmXho;WsasVk&uTcEMMkMe@s0BtTmvuHvp<$GpW(44>4pAquXso4yWbLN#$A(!M znPckyMO_qetIe{HZaC+7$5syL(he&Y9eg*hu&%R>EgnS|oweee&Ybleq)}|SUE9}_n zmf*luR?Xv(m0rghk+|d4^7M127vA!DUlC&*JEyhX5mn-LkfFCSxWnAiOP!6(k{O;o zR7alj#H++Q>=jW`?k4f8wx8ZJY9EMuO%JZWN9^!T>5hvAbO)#a$zcm^5PAG*igC5~ zGM!Re?{80kT0sw^Y1wd}dPP-5B23=gwifdzx1Cl^?k5S@p^37@J-{=sKWN$rki^`p zoGN=Z+e&PmG+$h7m4Ykg`tjZ>!ur);Hh!URUy5oUY~$1z8Er<;&1Tpia)(jEuvlPq zc{#RhpwB?j{<#*R>8rHk=W+emNZGIb1gI^}$EWl{hfc8v@PmpaV(9{2h)&Jf<448Q zA1EjufR~NzlO{OkanxHabj4Au)83!V;8n*fw*7C0+E?uf zRxk_$VEx~!!%4`~V|*EuM(np8mc=&mE4$eZNPjfHTbN83ZHZX-`yP%s_(q^X1EaGi z%2|eI*Xti@EXkS4<}vP;NMlXQoEP7g zytB#g{ALV0sO#UVFQl?~>2{x>cz_L}1V6zkb~eFH-Q+5RaTml>Z0^ZJ^TTTbjvUHm z<><|I<*9Wth1`KJ1;6Qk;~he0N1NB7i0J=8aoH&=-9c7#2ty zK_`dC21I3Lr(|UtWEG}IjrNJV1=<_-TaB1bG?ecP@HboqM^NKsfIL2YDDMwObVXCO z64f<-r`n}DVYOj16RfpY6NyyYXgQ&<2b*p%#$Y!tqhY#e7{5J_!xRshp*C8@DH+Vc z7PMbT;RLS>4$45fMA*Tl6RZl80qV0@ll#r_ zhDr9=Jzz^&)nqQ!vOPKyYEg$_UQJH;OwO6aP1$QizdpFHaekN15V|R$<--Tr6Cq;q zeM!~jLJ-n3Ht4ZYc3zMo+%Wc|RJKBIWk^{Xyjc)L7MJav5Ux{C1I0~fq_PsrJT639 zZDiZzkotVpW+5a;XMaarOf`6YU8MlUe!rvt<1|EU6GC4!MzU+w63Ut7?6g_7V0lKr zH*8xe>bt-^TDs}8H+XxZEc^&hqGZvd#*UcV(vw%((zaQyi|E02=knyUMS!AGv=?e` zr~z&29?z-6E^zQ5M3b1(hp$}lXuZ}fIbo}$UvTX1bqjrgpU_zSj#fw_;!4_rW6AcX zqt|(t3opBNvJQzn%ofQ}&P9b&40nc^)#z)&RHO_GI06$r!+DNOsr%LV+gaoY9Nh7GwANE$`B2F}UZq>H#+ zo=wFw5^aRt=x$SAy*CD2cxAD9mVzseIa(Lf$9$h(k)R`Edtl&wetv2zfbC zX{SGN=sJe6t3^Vyru!02!&Q%x-XD5hZJ>}&?=MRzTG zDku-qDqehQ#SHr5O>Eo4>c571^ z_4>G!Ge<2~pL=>S7_(0FC~0|chiJXGpbi(EK8@WvM*_%7CuJ@p4Uf@-3v;hUV$$Lt z6ke`fZ52%|HdL!D>ujikk`y3$E49q=&W8CAoQ5|a6-^u!827$l%DH>t10yDvVFeUL z52z{FDm+OkGz6QaCQ@H&i%*ezK5*i=f_gA9GMPU!x$p#k-Zn7)3&6^yK0|77M**UK z_VhOn;Dc+2?$8vX;`91>0NWBzA~;(5u^5`C$`!10v2qncIJQD_wGUMD8x{J@P399e zRV6r|r?klk(OP~gLld+rZFfFHG#j+{1i(v5udB5=X#Jcx37d}MTIr8mo%N9d?cxj5 zFv;f(@+xb&=RJ~B6WjgXEbd{c`d}((ZwRAw;ETmEbYia@b@N~?uULN>YhHp-iZIV* z9wSJ7KS8KQp8_Tn0|kL0tqhU|AbqY_>8HZ-D%oUzu%FM4UjU<@YUW2zkmp6{8}dC` z$dWs2$LNCb1udXX5*eUsQmW;ij|9qqK>VJq^f{wefrKRUYVEQembJ^F{=0FljLVbR zn-8^lK>;3Q=S$;Gb77%P#rKk4Exm`a(RgX4;ps9JM%Od>`Xw#O<)#fJpjbAy!u1Jr z0nRkh+&2vE`y?V-xs0>Uqsgj3*`JrHkb4cMUzc~tCg@@g*@_;6QjM>@JLi5p8uYk0 z*O$08IlXC%GwN}^=%VcZniBbykcg-cfh;11qYU_E=ducez4ju=-lcs(8z1FVzXE(s zV2^g3<=J56VZAw{`n;n^yFB0UYaq7YVT>v7mJ!#BpcbN0(Y#_c*4I;lJ$TJs`1K1^ zjT-ybN1M1Q_7|_nD@^!74ta%1M_pevW5UOZSUHhH&68GLSzPZ0hfd~hRIcvT>;x95 zvwmUb4|op?J?4O4H|~5F>HTm#aTxu)5tUB<8&zuB5o9wUSk)REtyhGuU{&QQvB~Q!)84<~1n1aQo%n+yE^Xc8zHhN6saoYQ4wpOXP2qy{o<$_}< zt2lGP$PR`{k9LW!HoA}yo0%#dyuz}9kGNn(T9I(25%F|YsrBdJsILU$#WZB;P#+EpYRJrN<(Zp!!{j1Rjmmgzd_IBW!)vP$vU@NRM?!Mr33Sq&g z-ra2tx~|=L{-_{B@8v({$A>jKa`5;KWYc_D#GZAsj#Kv@!rS#$LX2Gs{Br%V5D(|~ z2#5JTQ~Xl-cbh)Tp$YBCvt*m|zesUqvxx|&<^kuFLa(jY^d-{P^0pX@JI}T%Y|`}T~~E})7<%SUSb_@>*R1KPQi<`;ar9Nc+LP>E!LIBJTWCan;^GtSs=tvw1#NB|@UqkJY zklynBT_+o7Ii|kxr#(D#j$z z<#ct4%limHT3lqSQW9jfhKW^ATm`&-GQ-(Xha*5in|Otgj6?WiHIi%TY6|4|Kh_ zLSdCo;2y2VX}j{COehY=1dNs|A4mWt@mh$p^X8>E({6dM979{}wL`FKoH51-L=BPJ{Ub&rca)Q{k73K~*TM@-j>=Seh&L3H=)_9W646AlLfQ&2HO4+tWr zs}GlG-^HYA9PntX^sa9Gj=@?oySY=%=U9BJVpa(H7`59^SfuqOFvk2P}itO4zUV`OTI)lJ~IcVO)hO1YsR}wq2GaZc=!QhP_!}u#oBk+Q?P6s z3b+i^`-625IXT(3x28F^W}3qz=3RG2NL~z%!99qnp+`dv6FJy5t-K>AdSzLl!R{lg ztL8KRCqtx?a$WS?0ME9xoklgO?F?ii9LB z;J@Cyv1p1WmiZbRzODKQJ()eI@=X-&^MzD?VsaEFYsv}4q+Cyyeu8sQlG|_9$$fF_ zQnfkTB}s0J?m~*f4MX#&wCqg90QARkTDe*G) zaN)Rk1IC@5K5$ZZsC1Z|x8RSwVy+&k(gsBx6ONkHeAR+4q$|)T1<;4IqBFlL93369 zU|i8+mFDe*OL?uY3`1RCKO!D8WLzz2qGbha~3c1*b_CcI&(dpvB z$;%mkfM<8<8)g4WzmRqBl~a(iwfb`&@JtKUT95LD=}K$x@_x?h4%9v|vCp+=DXB>Fx|h&RF(~ zAw@NPxhY@$V|wEn7S@lzqv?~7nx3YB&|lD}oJDxB4trJEhxFcyPrO&8T#?qh;9lG= z&)IyusSG#XZ%AXzn8^T?Ciob8V%JCUyVhV8^E47TD#`=-N zyjX}>?1Hbo$(EVvZj9XoZDeggh%u`$)iJcCl~jdd-KQIs6YbxGE_kg}bu=xZq2e@J zwv38F-*36@KkE-N-|90d0e0?!C`NNHEVp=JXZI}SxYr*y!#BT{(%D(?ahBC_51h6P zo6dMS<81gAvUo)o8ng@{K8ReK*};5Xz3Y~^kX7HK>0P3EyN0u}=Wecl12KdL%LWP* zF^K2P<|>rL4Wj!?g^Z(HCyb&g;WAm*O}2wHBs#K-sshN5)B&_Hw4TGj(5m9t{YD@> z&y#&s(pNiCwollYPBa{PPc}-~iyqb)k#2if4l6rK3d*Y)Mn;G=va(z4c-&9h7ZnzJ z>Z(U>J&fW~Of}Tw{jhZm#PM>9vJzX1wP@TxtUy5Yd@|J#J52z~HPFyAHK)DE`vc-c zqimh5_o??w`6`1VNcu#tN{T^)DQWAtTZ!xFpJ6vk}UY{f#M5~ac+7v@v1r}FV& zMyBBd7w+O(`9`B5dx)gLOl#{3Vt_e*rjV&8r`=p|gU5nSPhGyIGxQoojDiRCYI}%Q z^jgoa8eHs?+nl+Ts{k#UxxE3waD{P5K|ziERGH=g4$Wt994 z;vypUGs4FDfVJbu1?!C*wVf6iL984!=McSMZlZWOFpwXd z{BWdzvEta{_hJ$suuDD=N^s4_yGv!vLrc6_xN6stN1vEIW*R9i+VoYl%>z)P6s|q* zXx5XKsUdI0{Og_OTE!zLM%0WwE)Y)JC+ntAtt(Cu8iW-=5PLtM&xLiZZ#O&hrwa>n zTFnNseRzexfl>~1N^iqMGjz8_06sID1=`6QtlNbY#`|K~c5G8OPii3;;JOjYmVuo=ZiahR%=glW+gEro6`M#(?h9W_kijH zsc$LY3g!)!a$|PnuAtZkk$!akIv;Q6h0$u^nSOt)=x2H3^8OoWtqk>o8h+Y4v)R>G zDvtA{mb}6Il;8GD2~qxxq|pzK<$i+0p0Z=kTpW&-^tO>zP>it-vgqOa_Pk0-zF{#5 zakP^CMnR-?Wcq_Fxa?L|7GTP}M%h}gF(K9!3YX)0@WY4we%XS3U5nsra|6NWuK!0@ zjAPbrjO$5m(G`r<`e^D!r{?5U93{n&6+0wy+seE!@IL4;a+S4V;FzTE@tYJ-hL~tP z5+cMO#KZ$N|nk- zVqArZc~7dFH8C{1DrGb+Ln{S27CB}P#Z=NWHC4%Yl5g(~yAlM>BR2Agx`660Iqoc3 zTd#429A@oFX&Q4E*eFH9wZnS}oW(V76))0Olw~T4H8;m=Mx@abXYHzGsX>>PO%MlX z2IK|FPXx>7Sbb5!HlPRbD`lz%f_pp$!tuyPKFU}eQQ;(U*+`NsSK3vfXh4_k&z313 zFmS?{(Y2Oo!_<GQ>#RE_uIrdEHlD zMv%0IC+1C)XuEJ774rJD9r*%dnHO)a3^5~UulN0(-!pQQ0`|i_30=WBhCk!{jIK~y zzJpK}3LC&sChNBLgN$Xh7X*lUU@OBm(Hw0QvrMkMZtr2md${}BtY&8L$Cq8l&sXk9Oe{a zjA-cTwS$FU*a|^VsVN%Vmu{=915>dRDX1uCY4Z<~nW84SPCqOj2qT{^pNz_9(KIb= zhJ9OP^V65$`SgHXQWWUj>2o0o#phN!W`I`-l$yfJyO+1KRdE!O9Hr~84>2_lW`LrQ zxR}5b@XK2Vi`u`o-F>b*VK$phG@Hqn{AVZLpXLNYzDsAXECv@mDV;A!9{0GuU-znn zL=&sNor?R;%Z>0|AHPJCJ=eb_{04&WsK8Wg*DWFV+_BF`{2QpRG$0NI*46CU7uIrd z20%5)EFS9cSpk0F_;`zbeF^&wWXyMcw)&|VlEEZ|7c!eF#%qStWkW3dIOTu*N~iS| zw+%E#)@^o1FqQAlLY0VTdR_6(;*LcjywS#K`+ zhL79Yq@}v(z)v>s^Lf)DD9glDteC;5cM`{X`YP?yxL^mg{ORpqC~%$1L1o47KApU+ zH7*%_Er)`#-kfg?J3B2)x%rZ6QTNo+M{Tm+eIM8#?F~-z;2N(ba${R3XNP=ny2rCg zw+OKeF-wj_UWyzW^U0 zA^!_E@*gxj*v~gs`tG*QPBe!4hGxcwMtVl%(?)uFb_w7}k+AsNL%rRx5dGAIu&@hO zu&}@x{EfWwAfE`55RhOsfYd**lYb!&{{mY6|8?+*;s<1CYvc59@W~5JYuhz;q>s)n zK|A{aTD#h}Stp#P5kdP5DKwuEPL~-UMzgTSmLy>uiXmCwcX$bjWTZ94;>)~l?QnL) z=W*_gopHP3Mm*oO=d7C_7-Y=N#Vlu0>HeUht;FB8=S}9Y>XcqDZi`}^T8QBVmPJhKjm+d%pZBJ{fh>eo9O6x)m?)2e;*ZaZ>6zy z)7nd;c9E4a%hc2q4aZN~WeNM85O<^lPPB(={5{pW&3dHr7$RjCZ;+qbiq$vYQj=WZ z!lxs&4`Rw@5pS9~cQH+)zMm||ZofS=ZrrY|xzyG2hA)ae6d1zkEBe4fynfg7QK$8v zXc^TfrnW8=G(DgIoG1qSNy@jZtLEQKDo$bidLZ^16Aw}czsv~Y8g^8SQTiP_2eecV zq`xbMSZKZtBX&&$LL((pq<4v{^6t*=X1BO3=1ETh{*!nc5&9uZ-vBvU!^4CDTM-Qq zt)5JmTCG{(WPLXL7+utsDw9KX*b0$bozeKEANX8hvAGTX~<*1tZ5d6KobSEQX0&mEGT*px zyWWaVH94({P4$;VtgG#RM6gqrs59lHlF($CsdLgG5{k4vc!eE*Mah&v{r5Cs#S(%JBM2@?9kJqvj(4I_VeEL#n zZOie{JWS%NKe%fHRJhnCq*s+5AvslRj<{BNlK)M*$v}Gf!rnkO<~J+&_!Q$EhlywyQ6h zJEP6yj$+Q_2;y_!Si4>|n^wfEL_p^Hq^>QCwD~-bUK_^2lyGhP^Br_0wn22ci{~R= z^bbi@_#x8}T2Awpi?dk_d0-$hXI|J&qmr+%GCcZOjLeuZ!(=-}E6oVEoG^D|X3BrB z0++wsKtp7mu-j2m9I_tIu)h00jVO_mn zbf;Be>P;fr&%QhTB{D{&>SA&C+jr4C(^=}FcaD+uffyq1kq^3tZn{R?MQXl3-_0S` zR4@{n@$@G`M8i=XtS7{+i44ZG=m3C`h&Flx)UOZIt2gyWxF7hbo)b4xZvzO|%#>Z? z$J(&>n<7*HSa)U9jRgKCUbp^pm78?Cn(+^@G=h+g@wsq)Y@@7io1|1-f}JtK0Vd3X z-MuTBI)Qt8nzEyL@UGhXvBxKVsdC!WlL?f!25lAjDUogl0vkoY1PT%ewz_TDSvj-? z9iTqG^c_=uBbx?aVpKCbj7SVTd((N3=fuh~7w9)a?*)tuU}LVj^_Y)QjyTOlRN-;xkIY;0b2WR; zeAao$yM9aj1-O1qZr*)Abq6plKy&7n<3`x-g zwa#r8S(zbC4m5}Q~^vJ z6P8?&quy0*_u{%Bu;O>k%9y3+D%-A~D&$cfX~Cw)48#o$kgeKv+mlb7Wiy^6hvMgd z(dPnH@@>K=@~~awVh`89ZVe*~UpBqtZZ|tBPjBqlu~2DwL(Jo)`Bp^0fM%3G=re!4 z&Jn&t1KK+3c2s;7n|qJ|XL%nv(<1Nwg|}F*j&TltW|Un`UEC<<-_UXHzwY(ipDZUr z;w*Hm^wqQ5DkZW8dwcVwu|-Ir$o?$M5$;F#zIUCYBY^}0$T83g&@Za~9^us{LW=dF zo(LfkG-sVBZLSsb9e=q~fZ_v8j~W4xh(Q+#+D~I%*ann6Q+XxAtj0m^!=P^&fK~9x zM~8XJK}Jr#OYy&eiKwULQTD3{=oEe;bvmRy!)j($YV|5hPa<{1`0O!xlFQQoafXw< z|NJQ6JI!>F51;K+hrJAOor`~r;AzCvmLRQgnauiSbCmya6yU=dd=l$*8guwiAbgkf zRq z1hhBbcd51~ybnbfc>FH-n4RXl^_8Xl4f3Z{S+BO9aQMXOu4nv2WBxbx_P=VOEgo)$ zyU!8@~%1C3s4XLVq})sV$s$8MM%E; z>vLNCo40oOY#zMI!py@$%j59#4(G4)3HH-zG;T!C$;gW8ODoOm5w;spzC?w~Q&Ao~ zIqCwM58X#8bm5i~FP=Pm?gHmmK=Y}yp10&zO{Hvbo3dt_sZqH$N_9>OF zp)0;-5;{3NvB-QZV!c2gU3))S5H9SI{hGf&q$T=I8R%S>^vuBG1UNNLt1prKt=(`x zuK&Kv=mGKnE)=0Z2glLL-OAYU4~F=JhGxtfE1J)iu72@x=S(e+gzNc40e?gXN~)8; z^+QVz$*2KU7>I-KAm?=yaUkk~mwMDeJ4ZrJQnWC<$dw^O~auL2|yfjQx2LIRG3 z@SL1K;!$Ofw;l1um0kMDH7RXUz0D_RJxb_rAB;}ypT|R1Qld#JQlN?Gmgm38^(*c~ zjEWPA6W_*L@bcS_xZS)8#ad|N_EuM(IeRyu-J;k$zIvM#(`*+XP*J5}RI)>>585%J z+AOV2-yBNM0iI%)LY0-D<3epuV9w5?r= zwhvYI$<+KTl$Xa;gO)N)IY~qhU_yS#CXE{f;;Le(@ zBko*IhB1^-4s=8tq#VdkW;%Il>v4b7`2Luy53MS*@ymimk68(~z96`_+7E?aF&}mj zuxQc&c8?jQ3S;y_8&sMngh&rtXXVk@NA(&d>II2g z_G3sHIKa9(K+DOBW2%yu1v2HdrNZQZf}$lFe`-?M!LWd=@G0$RNV38Qn5ArpqTUw( zkoUc+S;7mvXd!m!N>|UaP9mUIal9{R>TUU9 zIcS}|vpqzetFq{XC+i4$OKhHYOK#Ub!A3#S-#L%nin<>7l@d@>40Ws~oiHY3mvYpD za(w2Rsl0KS@5Ry{A4jyg(P+L8iB~~9V5Fq5ojpIRUBtA~?8b0ji{O+@MAi~EkRc)GrGW7$0%JEL* z1E3$0uH7BkSjoqNIWcZ6Jz>>Zg<0z(%%FxCqED(W>n>2O4l%D_!Jv+$-#9Vc;u> z)z!tn+OIs=W5r{4IaaI)^wptoET^V(ivPEB)AK#~ZW(g$J~fjE3C_?c*_134=tU-I zTF6E1TN-V1hXT^qk;yd7;|9atrp7;F28t=yqGBEO*vpyL#|BGVxxBS2a_s%&=EiL5*pdb1wRX$CBURm066?bx>H&j|@sqTF8gp;6!RIhxy<{U!PIxbSXWzml)v^#xYjin&lgW5i&V zQfY6F;I_LLhK6!QVjQyVN5DHj5vP;%iDx53pe zw#bVcYeDyy*1aCTS@pdiS@qv9tb1F1e^x(ys$A|C?C&Lbmj%rV?XaYtO5zVmEf$c( z=e`pQn!RQ9c35jbyn5Ibst;5>D;ogu^tC^0u_BYE8pXhMGVUQ(0BD4LnUATSKGF>C)(@QeeBCUj*!Vs@sJc}% zRZqVy)>IfJ*Evs*nbs|2V^^IY*koVE6qHpd%g?O95SC%PGVvbQiS=OMlgE?&?RB>I z8~9JrbB;>+oC5&_^g;4pMbE!DF*-A%O8dcpfc`xHvX>Y;>Hqmu=jQu-!FMrsaQx&i z;UQ$8r6+LBbbqyk|L)4j@IQ8T&JI?8t&9xmJ}FQB@T`2YZO}5%{bTzl!vAYfe{BDI zNVc}N|LN#Y4*yE=Z+DFJ^vrbsI{v38QwJj>tN+;lw*)?IndnUEjP#xKXWU5NZXZNM1`@&7vDbaK$QaWt`Yu>MN|^B;eoL;gu8^M_Q1=1(YpgZP)1&vY5-+#Ic( z=xmKl7(c65+Rp<*-ha;3pQL!X|E6YYZ1XQt7+$$g7jl2k=3=xlCfM8m<%&csdkzdZh{2g5&HC7+iN&1bU4yq}4)(tJJ` zS(ND+I2kxN8R`Gs?tj{G8yRx`mDoD)8tL1(<8#yfH_0FEzuhq~{&B~^to-SVg^81% z`LE$$y&*nf;?+{YT?!>tOVc zkb&_Z&xU574GceNeg323_|(z;`x0?>{8Shjo0!{tGS2+<|7RBS5K7pX*y8^m%^3f0 z-kAPxX3T%g{yo(=|3vg(NBjPpK$xw`RY?~{3V zKdm3qY78~tS(prc5~;TBA6ABe8f1=OT26{kR{bSLC`8XJN~uBkTc00y`%?IZ?TbIw zzK1qY`ujWv=@=v|e*30ZEsC+jz^JiC^zzoy^!+ozs$ggbrX1FRf;^Rmsb;3q*7R@t zfev+tg``MgT*CF-fxTX{Qb{#p1`M|B+qR?y%l(JOjCgkOwMS^3uEJaH+ zO(J!?wLhvpz8vsPtd)8Y_t4F}k1YUJ`2r~gF?^q<1}`Ap9>mDdVpZG1O8JV2q6>ji zhpgn&tE^#8MiY8f>t|vG$No9YC1- ze8nZ&Eho>_3IbMsgOe{oB`)!ii}%NqwS^b(8HuL83F8y4$sW+6+uQEl<4**_3u=5S z1~CqIxSZC}g{|R=XhJMD^QQW$KCn44MeY6-xuUa2$>2p&V%9f%3)`MLMz6(&yr$j9 zVQ`=mSE*FrYg0ajCTf9B7(77@Cczh1-)sgrB`~kbajG&n7RxhD9M_g56LSUcZ)$_W zEd%s`)KIk44{)(9+VK7BXP&m=(U>jXoeE4+pPbags=+7SrSnqTXK-)Dt*%tMs~<3L z-?fAemXm~&I~Hq2nJ%+_l3H-%_N1gI@%!vzX<;Pi@3NQK$I>jhP zwx*PaJP}6{+Sd>rNTF5*Z?9!{7l`k3M(psFS&^R2;tI9n#uZ6~mG`CD*LFvO15T!1 z#{@kV7&fhA0M`eZraX!FqX1gS^`=9f%Yk@a96E(B=5QOVEQqzosjzVI;dgJmCY%bE z9u;y#NLMUM7jH6XDYV6J+Qq?_Q+3TKt8}iUU1REsKW+y)@dg4oJuh(}va;wF!M?J` zL-KBQNQ5y3Jnm&~|#fTV^$t^Y;l$u;s{$+W-k)Gzz2C?7GEmrM}=9f?nxDKcl;PuO6jn?5YghUZhq%|7DMz zDxzeFrRBtyx^6c$*y`8B3G#h!5Fv-!yAn$cfXV^Qv_`AEt_U|XI=r*G`| z1-Mp?Pc|6@VUQ0ed;E1inGjOBH3e%DLt7KXCDF|ON*90e2q^r4KFzHUR+qOvb@L5m zx0Ghul+sY8h4t{}A>u3st(x*@pZALzRMV4MoR>lJ&y?FYL2-PH-JU`5Xrm1Kq_aClXwu5jBhxgNVm8?aXLMWJTA>@0H0;F_xo zT9%p(TG0lU|5Sj3yR#qfy_5fy)GDx+vXDJFUwp0g1y8C&*V}(0aYp}$3y#K~tL>cE zl6fgvvl*)d!i+*O?0f;zgdXD+5L#Q-=V5XdZqBJsBwi@!-Hh{4Qh2#>f_Ysp`xq%7 z=IspuIJjI30a;zJ1|D6dOWiX0VC#FSpV z}QTKY=gw#L(?zdx?=f%{`GiOes5;277uLYl-)aSXbCcz)uUT)s3a~c&g z-tc;hY7>7&04v4minR|05dUJ-BR~gtwvVP$F4%|(YSfIj8t*n4td*Cnw?t%#TGrt8 zrN4&0)X4lvW_fKJdohYdP7%s!)j|S`XKmM_E7FDNp;j?j<5ps?OwS>p*C9uy#!Pdl zv1N}Jg%da7p|6+5*LQrGEv5Wb!Bi*QM@T;p;N6%;scZ6pg~1?OuwFv0u&AaLaGHTg zg`eR9BfFntZQr6hzu5ko)!MFUO^Bi@)Q1XYKkcALa$tGT$K3&157b%#0B+{Jrb39_ zyMBau+^iTQw}BoH8aE~<3`z$^Fwq(gL-7=-DdXD*VAMbIIzbQJ(CpTl{1L&Icu+lZ{u1;obz`C!4zq|e(2@XRJpt(s#8gB}lOv}a?N zu@95Ya(Feqh9XjQcOb!Ip8Nzzt4DT-hcBt+hopQ{f>_I~Mn@w9$V~|#V;D=9wFT;2 zRr7vLfg~xcWwc;nqlb30icf;A)D3lh7n=s6U`gQG8@^uBM-@aZ_@bFB7P_?5{=GaL zJL^J5K;zwnZ*l1)?*vrmGVA>E4wc#=jQusGZq>hj`C{`d1zBQwHM%Igcm{DvyZ!i( zV`QkyQy$oOGzjmA$8v)<%vsG%eV*?`Y1_(&0TC373j0Qw9EK6qQ&UUe_(R=lb11q& z<;cnky_Vp_C~pQ(@{L!@jm z7gTDwT*xw+_m+QZ3I5O^Z9Um8PDO}s09l*=MiWs{2O|8Dl{I{W&9r+$&O8@sCtmEz zrMKL1q$ItryJn!bGQGRhFn=wdd17h>#^KQHD^)G6fv8;Mg!a33c*Y`17-DAQjIy9i?tqSbcccZ?< zi|#bK$E6LPDQoZCPs(W)27=I8)#J{cC3vXYmFWn-D9c6L-;hH_7fju*nWJ14=rWSf z>-sUK$7gQvB&O(ggF9ND{d)-q`Jxmk1XN7pnl9xHfmvLWONv@(x;iE~(9I`yPfcaP zb@c>C4wFvXfxd~XbL$`3H}Y30A>KL8)WbWI;26FWYj4OJJI6n?m|Zi9-Rw4Y6&)i( zLWbY**5OtDbUl2GQxIk2XAF#a*_DnpAm~0t>u!nO0|f zW|g%*rL4+ju6tHx<&?Z9v{|*!MSgLx@l5-c=zD_yR7fRP@G~0EKLl{Ft>Dw8vhbS=AnoVf`o4yiam( z@JzM}bIXmSSMzk37V7@B!>g7ieYzmD>fpjb#@G<))fPu{)U?bfOcnfSlp(+>Z|l(` zyIYyzdya&l(`f4xT++Zx`_6ee(3lJ*U!qC_oI4b~KW_$44$;Wx7dEys>+BdZ58^raoL{?Vz~qoVH$zfv#wsd8#`4zH#jrG^z)X8CTGD z*KIA{BKK#QZZ5|{+4!|;yg?dk5T9C&STv}Cp zX55;vUq-xtl{rgGBt>PQ{<2)z*fWV;ABylQb2Qz@BH@R$SD011d5|rG)NGoX-nJ-7^Bup0>JK)T4e$!BO9Q}?{BIEEn)H$hRbGQo_jqKH%k?+H9sw{UdT^<1vY z6b`yczf~F{B+9fElPA1*A(CX@{nHg1 zi50=smlQ%cH-q)SVXod?WCNPIxZGbx8lx#VhjG0=*9l>;Juq81199YLLgpM`y=i9aj|nMoMZ!8D52Ed!%33 zA?6oK#I>-5WV%Ue-Z!>z=i;wLQP#y;x1eE_ z(JFk*-3)UKnKTGnq3JvE`PnMf&ZLW{MX=u+2tT6EVh8?>K(u&wzrx?jKN+%C$GM$l zr7*1VEhGvjBT}aK@}4_xc3EZ~i5ir9PPlP3BHK@>J5!YL!fiS1VxmUv($=py9y@Vp zP`GqK8Bh#~+wPBsA8rQb2X+FO0DrTt!MO(Gw0Z0VamU~xa(ax5&&B8Dgm%Ury0il^Xl;rNbAhYq4=dUd0SF z`CoK0XnLw%O`N|m?jXHu6I<3`YLf#l37Hcbc?(Ur{{kU_j3 zpr)r1vIp387gn_gm>V)xw2AN3P~w28U_G=lD6}T1roc5VMJ?7nHf%}P+Ykn$-rni; zO2lz_6P3Ycj{S2TEtR}6(1GG)EuI;%Ug1XEuM`GxIHDTHy(kE?OYe;h(K^DLI2EbA z5DH$t9vJIyZb3%N4#q+3?yGlEerOa_6E@Z_n3utAGuiLZg_GtvFd(1okPmzhRiwd; zQ)D;cBAK^3N#X{yiFe@t25)H&5{3iXrBoLgm+P%In56ggm^D7Ih&pL2HYeb7rs5$b z(y);1->>pq=U#+HB*EJ`JX=1}2y#9{yYs4L<#X0xfoiyarGnzrK{W7n?Te@-Dj{vO z?E7+Ik^-0%8?K(%vxvuEeoG(r+oj9R+3cT(1ZxM9UOfNC6>>_P2=3rZ1BzUV7#^An zAl&A_NKM8ZwT|&k6K4G}m!%AhlyVdyShd9Vx=+=bL7W);xDbhcs%3U3vXs#r8}F0p zyp;eIf!{|cbP6YoKIQ1_(Vc#1X0W-13U@Q9S&kk!%w zGksq#gu}QZQ(3ZL)e89JS@Gb5_#^{W=w_S=41s_YkgcfE_&BN)_SbNj{_31* z?huqtBx^N1{RKg_@Frv^&Ey}kad0ddR@52}~hCltN+>QLp zm8zB_E~=1=6W*yL2S=bTBzx-zv?#|bk##0o4uWUVX<>ddMLSbtn1i9hoACDZ7WP@e zuHY+L`3}66G?q$QI&TCD;=Cn0uBv%xwVSKky_hRVuvIJ^B0mxHX_(e8VGt${SRKQ0 z-yC^Azb1d4_vbDWQnXVSM`mt*r&76}9}c_d6b<;ev5z4&S8q z`F#D6Oq7ppt1n<}+r9gRofPk>!aXm|O+_5SD;=Rlm$`MIpPlrP{HZ`#by2>>dqLZ+ zK!9qmqX*Fc`=0`u2(87 z2`cL+iLSIqR$q{7f(a=jwJ&31@^94EN>B~hlsw6WDrfI@d|s>g*A(cw0Tks3gH?fr)E(+0?a?j z?B%j@rm;#}fnhZr?c_;W3p;}hF@BR}PhZT8gra5Uq zj9!IKLA6O@Gd`(Hj*wr!0FX>l-LYJ|3SP?HCyP52ADv!~9^@R}^X-yo#59-{+q}b% zlkQM5h!iilVIyU8Xgd!YpxyHA>>331{Kb0CM+~ari+htkzPq3Bp`$~ywRL>)L}3{4 z#nrCbJ$sr4L;R4}xM+zIFt+X)mT>D~4&9aGS4*r(8w*Fn_WNj=+;P*N8?v}bm%{Lq_8jQI_RVl^_w7unToK19u z)nPbzF-J1TY4;hVhF$yV? zTw`8NobC?Tw%sSmvo7z+8&XtqCHc5Rb;8*IPahXJ@Lgg+a-MYMvhJxFv?E6sh9)un z@ZdX*pp&LkKzQLtoUz&_;?Cd>kgZb4k}AJ2UsTYwYvDtxo&egiiF8A?3b3 zF=;fzdHC+^`!0R5t7}dN%lu#r$6(0vAY+MMLU)B7gJ34k$8@r~1l|+ukC99)IMW!I zA@|~81@0p6iH{PzkyudS$|21O25-|ZDfY;!mc4Ug1!B^IvwYJ~(V7xBE$)!8Z$Mil z#(sKq55OYsO_29KR#O_3<=ID2-=}VRlDE#XR0)DRoe{vs1z|S7QB+oE&q9<+N+@ve@+4V;>QmB!qQIkwG0ONQ(-Cq!37v{GV@=s7^EyIlhn#O;YD2sKA`PR zI-2f39LbB!uY`wKnJ9?6UA1Zkv0E==e{Tgw0&Og`YSvM17ji-7Wq;98U>8>Tu^%B> z)n)Ya)FNl+V>_d=xdxXE<>sjG00pau<}1i1K1eELdDI(XJr*dRLi4ZSt*5YIDWMf4 zk=9@MXY1r zVkHY!^G)-&I~#jLycddVo(X1yJJQ0~tFvp;bm3^1a(SJbcVevkpz?g93@H_OC`n&L z5=&Owv1Z|hNuJX7cgL#Vu&@0|SO0h_}ta`QVs<}Fd8_$B)u z7mUw`0)o8VoQ;hrM&MSjriS<#2P-&r5wLUF+MjOMBPST2G%{=Qd69@F&A(SaGS{3r z*cLt+^e${r9=C|TuO_k>odRbwq!ggJI;8_w8FkKYpVOFgY*!E*z*H03i<%h9lFCGH zHVT3F*TN|@2lwDvaM0~j(Fo_b{2b>8g*>uH3`i)oFDx>QuYmyVF(Q^ln7K<%+%;{X z(rXx8vT)>d2_Z_CT(p0(k|v7;8AvXf6l6obEG#p(PY^QT}tXzE0B10 z{$|+tz1MMrB8GE>bX2qP}UZ_WIr_( z#TFKnn}MWy&rcZLH!IvY9);7Or9=npsgAKX%Qn+>a7!!h zUS8gd#_WfJDRGpBdQEuQ$+vXDLQa+ID*gPM-tQ+3h!qa6OnD^dZ$b(4iL8tY-9KDr zrE+_#>oBYI?ss>UU%B7A*N7HIb92u#OJnV)i3+}6V5 zrE>cln;qpMy>6xj^5()|XT4WftkJQ|jmBNqnL*aJOmx@~oq$K2I|z`Ge;5nDda)PY zo{#k|lTaGBGo-5cr_}aD9Fo-FI<=t5H|yO4n=R8Um4K|&mTsDu4V3h)Ei3ddo;`cJ z`AYF!+sSIC^35?c(J018`=|w)bOAoJ?%nwrwX9+qOM1Cg#L; zCbn(cww>I}x%d5EoO8dsp4wI2ReSw+_p09AT~GJ^b;uF8k_2-?HT(|5vKVsux5?=P z$72siz9^v(Q@c!q!)Q4Yyx=YYvgA8xm@|ajq!N$`6ovGyZXMc3BLT=1N(8j-&}PaI~!*>9MK!*;Y+QHX(4CM)RQqbC=WwLAq`g#7}&i55e>R(TSM%!+gP+&tjepJ zM>2Ks8A_=y0fuUdbr`67p6(G=AU~Xv#=hln-%RKWN4YM~zij9Y822$<$?Ka1JUk2$ zAtSbuKDPA^E(h9(1MA215P(%!fBXotFqzDvo?=a{33`|6exrlsgD&VDF=0*XoKmC5 zamzkK4$vF*(^X+My-Akngv{7NYR;<2*C8DxEHl-!Kpu3uoqs)ecA!8~M8{RGY-a)U ze9tEY46OW^3psW`YwvWM=2()mvVVzn zB?HC#JsHr7o1*naWxy71Vs9+1Dvpkp9{YHR_D8-g@s1Tj<*&(J^OI6k@q`DG1(WcA zefs+{wxW3)+35U^?DKMK#wPbO+(N|$NJZamVAK_+h;@S0xzdjLo($F=Bw@Pa3hu0l zRqk+Y4GJD|N+bq1H!}S@PqqlRl%k^gu|vm;i)qA`K;;)S|7KP=*ICx}LB(#Ds#Xt= zY?z9v+F!gr?bkPaSOHHsNacKsH*x#J#9?Q4Q*F~TBNFCWGP3pzty>d~C&%|kRONl5 zA{=o9!WQ`Xa|v>r_)hvo1UXH6aJwTZ(3>%3rFwu7!jr(w@P}QZXLW7XWKki?n~G3ISoWBgB^?$JITE)> z{CN`XVt%{<6>`olvv&yoL++PL023sJS~o4ipUyKDH4!M--ep#Fc^@fbnXYKk^IjnE zJYb3SzX;B4zuK;f;ENIRBZhr7X81g9hDoRqao25GuHjNr$d&)%n;EVaVFRyxMxuk`;u_lO*%_X1Dv%2PwVv

?X5wh(?^%1sG3MiAKLe$H^u&qDUA#kK1{F9vzoOQa8bpWUZIx z9P+ZLX{!{VVTuOeGA8CXl=mnGaBl>f>=GGp8SH2|CzP$Md_ldAAf77qorjE$Pw+&3 z(kfEpb1UrhUXaHtw@k>?_|Y`#{^yA@VW{oFZik(okgdpFP?qX2=-<7$wV~GcOUI9l z91M62P*m8YsL{Oy@!eCG*E>xS`B6gg=&kD2R^x-8OJ$M1FvAEhoF53t)kC>y*S!0x z@$7Z>b=y=w5vlNEevEfSd=TEHg8G@x8fw9*&OCSo;vc^BC!WW%rfGknOJg0(O>d## z7d@|3x0|!-YcS$YFDYKiLzX~c$pf zdnklPEQMfz2=~ef;IQ|<0VMdx3XLCQgR(B%$4pz`Ym(JSD_10?|nKM{SaZk+Q zzpJJ_xoEY+l*GWw?~33t9UE>jw!wHAXv6-@41I_cQGK=RrtWy1TzP4{R%>ync>_}- zzK_{$EOVDF?eh^1S+uo)xXZY7_v)xl&@JdTW5q1Q%-Eo-BUurY#83ydrpA-aq zSK6&R@c-$%Oq@tQBwY?GnJt@cqe6Orv)D`%2`*5*5Ym50!yrt?V2|n#dS=u$L+P6@ zFJ=MNn-<|hl#xjRm-$n$s!k?=o*--FjEFEFKdTe?E~vxFj1qFw6hfeWlZ=dhOI)aQ zR^dI>SV(^@F?R>+wTFk=FdM9j!d=Ta8g<9!!akkh(AveXD6M=ln=X^EvucI2V>(Unm~IWpb8-W`WOV;&_y;tLAH&Wmns?*m?_T39pFxa#dcBHCC zIF4^c!9b8IEIt`;VR}C?7C^YRg@B_Oz9>^C{|2cXxet9c-g}#Mb!jWX-hg7$!1}!} zA3hA;az6~Keg4OIPJh2RxS!ZhVFS)ficjcnfyWv54FjwdGKpY?|2RR3%>h|<>z!@a zTO%^a)?O+tr7pCq5ZGWx9ZtLoM|EN7m5SvLam%AFBK0r?G;^dE`g{3)VZ0haFgMXk z^KbgptRT_cHmbxaoZJ_P0))_<-o>ESR_72*yF(}1T zR}nCDDiYzBb-fv037IlmoKlBbZBk6Q^ZbtSy*g2S{;9gG?#i!u;O<$Nb{pUef`?_) z+(%ug5MpxNDHDUp%nk5U*55-LUDWIHZx$xnu<+W^El-V`4;^T!757E}pR=g6*zdWD zVyd1uwaY4+NPi@oHg#N&3|?l0irh$&CbZt0*QYsOdaK1eIz}aD_{*=Lv@wIdSXpQIMsx4)M6h*-U7`10*T?f5LcVB2Ker;Vtu8%%TR%91DTT!4 z*-O$~^$(Y0`?B9Z99V$Wit%MDG^sM-zGPXwlPm)$J4A!Tr_k>2~lBX zKttg@$X7etDGVGI>_r%T=Xbr^-H`i4euVPUpuT05LP|2VYD2`fe4FjRJOwXd{dT-8{hK$wRtFI8)9!G;`1+W zb|ghPlM=1hMP+-AC+p#Y1)I6fCzG*17XljhEf=Mg<YO}(wY0tdBdLo$0zN(n8r^?k`evXLOt4)$iNu% z_p1$x5DuUzeVBA2-vZ9O2dV1zK0B(+K?N%wos9)|OB`n28S`ac#HnzRZy;XDK4Un% zOYE(4dAwr_%_D8r(3HINbRSuu1mFhg2)Jfhb?!@7 zMN*ha)V&9^KD_dwpNl70w~E_$FCvk!ynChwm?urIAP0}pKj6oCn};JOy6`z;XqUTm zcOac#TcV2D!RyvZ(LMcMX)dGNd4pJz+XYEW7FCx$$*@&G$E};$+rFvQJY{z^vooh= z!aA87_b)I<=7suD@`C=nwrx9rx3RV_mb`mhevPi7Gms|@ zDfc(nU`M&*Ct8fbUf`LV?5|V~)JFRiA~!dn`P89mVJB5y`_z-y@kMF$0S2i!QB;pk z0YRS~Y_G$)^I6pP9bL0ikSA@t2M88;ZEgxy$J|6K(zRgIZ}hEv)9s>}yzQ7P3ysT9 z>e*fd2TdBjUl)bB<9|?l(+~Ii`I5iVi`)4QwR@G@M~YNaRMs>WwC$=9$>{5~DDmrB5R-A4>RZVhLoU7M z;)vazOq~t}NF?jYg`w%VY8exr%pvB68`_em-W5>(1qO-B^otzb771ewnap7c3+QbV z8)eYEOXMSJ)m>3JWrT-e;#c)ws3X}eR1P&`6#h)3Pg!tf4f#V?EkPE0Cy~HpI{Uy5|olp%oJ11h{KYo#)_o?nn zh9bAnIdtf?Jd3~YBJm42QBK}CF;328VU{j~9rW03e1t>!;w*xpOUpqmtUnnH>0G$c z?nz#rq;SG98u{z09UsL_ZDG0Qw!F|!Uwl+BEOJwRR3Ec@5vG#atZVGJagVx&v$lu- zJY_jiB-iY15{iy2@6YS=&}I(ebG*R`Bz#=k+wvw9sF7|<1!0Bx^nPo6s}jDwBPN9q_<^s3|MfxKxUH!i=Dq&q;C-6WT^! zj#k-L2B)?XBtE71Zc*CL#Wh%k%WE|PLBt~qiJRJ4+ArJoA3S%a<9VHp& z9%}G*3ty>0&NCo2OV3_q>(G;3ijmg*R zKgPnPG0aJ&?ko-@SMUp8ghDky)kN)(D$-REofy_X{7^cClp?$i>p<%|CEg!HvmMAb zN@x~Z-A+y!qvZ~6y0O>GuzhbPE}PM~Ug+eMXTx<0d*`z$CX+G&z1GOgV z$%$=QA>H;(dXnBAjk=ucgXEWok6J?$$2OhU;gcD??F!n`BY+7x zDn_V%(vL7f(8mU1fNrho*)I9FUaP=I<}d9lFU9EQN~~#Lqpg8GO296Kb0g3W!~8#w zDLSSrUvG9qaxtK%dm<3mMaM1>UO;%vO%XcTeXuFFIy~*DcB9t1Sox8XTXE0BwLUU; zJLOmUZSFk)TD${@XDHD$<+WBgrtJCL;ie0@+i$i)9gX(Hl`5CwNm`ZncF7YuGiLK%#>?XmJP*wt-r~9w zn9L!aXYE#Tjf_B>Edl}KG+kkrZASHHj0lG^K>N4nXYca0KEjuH@$|z~7Dl-Fb#8ma zg|uwZrH==qxAaA$j}bB68jZA}d$J}M-EqZ?AM@)kdQm+YLn=w=3=WTK14tBIu-+^< z9@aXSh8j#$f?{vZ9u8RA<+Tqt_)INQrlvDst3EK6yHxe= zgjf$W z3LX=sk zZgAyQ%)OXw*^#lUn6LVYPe&e^;z>FUuFu>|hGrNAY@lqsq6{lmrO9kb1A4Sb5 z>|`pB@aQvdEc!#t!4I>kz3ip(=UqsfWS>SJ0!DC9ENJr*mv@TsWq_67gL(sA{Uwr2 z`V{Ff)N0gLM1X>%m!M#AeX)86FtW4h1mgx0FKVrWs#L>+^z~z0aL;f~hKu^#{)9C6 z%lXPZvN7QO+nTns{khOS|7bnZWQAz>0n*;JyIj0~&-ZM@Y-nB2zK*xe+Wl1C7MX-T zZ{e}`9%t=ZrO9iI!t8ZkXD{l{mCu)5vKh@B)~Zmb*PlrC7UK}R3koTmduGwRX1qkV zUBDu=!xe}sv&$qx3Lo|RAGD?Ms@A}AnVeMz+|<Qy#6J^t*S_ zmwx3qO=3A5wgVMeYKScAs##^E|J3%aWRr$`00;I-T2x#m3{fx(|jQ%dT`I8YF$;E*_hFIs86qK&*ByhHN`c>bG zM1!o>hW)um*|-emet289c4=H@e7{zJ<8xi_i>_B>YvL|^_Mn^)sW_XXQ<|4A+OkHb z+Qs4zUv-zyV`~Nko4Y`69qkm-(0NO;gybrNomoqy){apcvII$8)_5vl6}p0ugr$cN zo_~2~%Oc&jl^c1hi&)R|(U^y!AQXyN5UYE_mD zL3nddfq*8(*O0x9FsDbxm?zy}aF--g3M4p*h(XcEtay4$X#J$F z7;e&meSD1ifff)$&!7k%cm|}g-Q;g@&!Ard<6U1?GbptkR{FKOL58X%)det0$PuuG zMVwwr-JB^b_Qg&vAxW!k)fpd9_w!5Aiw@W(7%;P2>8W_a?zCic8UQt@T3&oC-H+f~SoQOTVQ1c{IV$3QifAnQhl9cHJ+1Hg{ zdpq@!k7SO5Ce5_y>Psn*BOBK)EuC&d&o$a=(h%|5!`in4q5 z;xIw0p`+LdmJCwLY8*R>Nh2-S_Gqt2v5vx$e@fE?Ll{T;%vVjz#Sq8Ulz%P!#J9xj z8%^5uorgB#g0hvjOC63NjNVi#87n|rkxmG?(@>6?BIwQWm!Z~{R1cv@mGpB6WLxdy zOfqqyrU>14(;3w#!2NqU^P)a$92;Q^(K!+MTQFtJk^Hxg-TKZJ9$K9M1J z&n4B8eL+Cc2_(`vQEkqyHY;+0Cl?2Ym_rVX0K3f7QvK@2!qbhAD_^4Wfn|_6J>6O3 zFH+LL!WbiW@!Ar+yh`racJ9B@*KZ}`g23hyYjrM;(h|=Dd?)#4m2P#Ta}T&Yqp4T4 zX}2hR02BJx!p-jSlt<;v-ldewh2@jT=VjHzIKkL-k>_FHyMgyzAgQF2h_h0mc6gE< zxp$%wNT}ZcB<7h+YSM-$^TtVWkl7vFb)VqNP=gHyZIA{$WC)C}!*=za+@obpF{tQ^ z{XP1OGq!k}30o{r32k0Zzj_#j+uaq9x@B5~$RuB`dS}oWy!eZuZdNyO zKGSoCuY}_erjvh!Oa0(Sv9R1?*VkeNCG3k7J?GN5l>wz7OtvKYQ*5I8SYd8m z1c~a)tFw15Ti~7KA?mkIn)}>YE+A&#CO3JiBeCvH8uzXQB7|@gnBmN|FF9&pTMYK% zgi)1wL;ONKjD^gJMOi}$EJ`lf!lP2DiJlTW_(gD19GfjM1CDSYpEy)=Z-&Tr=-Os; zhLSHNg{hNc%Zs`MQbDTDN^yvhGgTSgr{c>F-4({q!2tJ(a^xD(djfCzC8YfdfK@HE!BlN$*L2`8JWXvvRdtz$y zzgnTk-Ve#vROZT&<Yh_{g~S-p)^7uI_R16TDA+a?aW=-_c?(VKw!Ty9!RI?|%G3 z_sL9&Ae)D=-A|xOC?G9&3BQUOI1?%bo3k0cu97^+s_68tLE6)Wxq9#1T7c^~ zo((o^7Hn{RwQWCGTOCsr&{~VNezV|P%~%~PKz<@k`ttKB@vdfrRpA|Q2+|e*!Q0RX zf=iS9;^P^g-by7!$$wMwz91ibsFC4Opg84=q5hs*nkX+Pw6_#%0p%IWdh79BUxj>q?|)D#~@R03ePe;oM2 zm0hg6YqjRU4X373Kly((&9jO>GQZz>s($T1XJI|Ti7=;^bFxG>%Y-bn9?M}(2+9&L z${LW1Eh`h8QA77&QhLMCiIhl7+lIDI=w|?Z&SneO%gxH`(i`h!FDH__CfAnkfz$A$ z=z`n`$uN;sapFX`&YjN(US5!*vrG6s5?{_-ew@SW`lW#YUJjb`((MwD*j!5MBq(A% zno@RXtRg`;YYqj1u`9!ADnAZ^ajWf&E7+5hTVn!@)WV6S@i@B&4+r^fQ$Qt>a;YOJ z7JlsU;j*YP9m;dGCt(|WWV=t#1^pwBsLwI4*Pi|`y3{jz<1DofNZv)V(41RL`;*0ZDz39JFvu+%w^EPjK> zz&jrU52EBV64&(sZxg;Fyu-!a@ll6kl1n$FaG|3udxidPqRWcv| z!1X8YM@|wD2pItRU+ABlsBu2+eg^2@9OvKHZyM0w&C2W(tKnvA^iQw9-i7hk41n}! zPSD2M*v#aAh$#*Xw7&@`P7eBd_OyTM{0XD}WH0{9ewW}+3;Im{Q%BFh;FIrTujgoE zPix?0Z~s43=|4sP8*uce2mruu?8l!r`kDNvsIjHZC#UAGMf-P^zgH3HGnD^Sv9+;v zvi&3vIsK)I|E`1eXHh;=9REqj-p0h<$l)Ks`gf(j*URxgDE%(X-$VX?sg(Q&6-OHz z%l}IS_iwe@{0}Ps!rM5|3Ya-s>DfB`TZmZLx8RiJ004epzj@++8un-7kTWxIboz`5 zEj`^|j9!HKzjMrj0{r|eg6zz6H0HJ@f3$@^CXIi^l>eSI{%LIre`lZn)AO&?(BByI zKMhCmZ&33;90C3Zu>Mb|=%0>5-~Nsm{loK*!v2-n^_#f)r|oP0mB0Ci-|rXp_dEPg zqSv2(?S`LE{N&~Q=6n6&^~clxI@A7pb1E|X-&r~TRQc<$@%I2b=l^|<{!h=p_Da8p el|SvGcmkpQw&ixlqPeZi; literal 0 HcmV?d00001 diff --git a/include/class_stock.php b/include/class_stock.php index 364bcb3b6..259d5f150 100644 --- a/include/class_stock.php +++ b/include/class_stock.php @@ -406,6 +406,53 @@ class Stock extends Stock_Sql return $sql . $where . $clause; } + function summary($p_array) + { + global $cn, $g_user; + $tmp_id=$cn->get_next_seq("public.tmp_stockgood_s_id_seq"); + $cn->exec_sql("delete from tmp_stockgood where s_date < now() - interval '2 hours' "); + $cn->exec_sql("insert into tmp_stockgood(s_id) values ($1)",array($tmp_id)); + + // get all readable repository + $a_repository=$g_user->get_available_repository('R'); + + // All the stock card + $sql_repo_detail=" + insert into tmp_stockgood_detail(s_id,sg_code,s_qin,s_qout,r_id) + + with fiche_stock as (select distinct ad_value from fiche_detail where ad_id=19 and coalesce(ad_value,'') != '') , + stock_in as (select coalesce(sum(sg_quantity),0) as qin,r_id,sg_code from stock_goods where sg_type='c' + and ( + (j_id is not null and j_id in (select j_id from jrnx where j_date <= '2010-12-31') + or sg_tech_date <= '2010-12-31') + ) + group by r_id,sg_code) , + stock_out as (select coalesce(sum(sg_quantity),0) as qout ,r_id,sg_code from stock_goods + where sg_type='d' + and ( + (j_id is not null and j_id in (select j_id from jrnx where j_date <= '2010-12-31') + or sg_tech_date <= '2010-12-31') + ) + group by r_id,sg_code) + select distinct + $tmp_id, + coalesce(si.sg_code,so.sg_code), + coalesce(qin,0) as qin, + coalesce(qout,0) as qout, + sg.r_id + from + stock_goods as sg + left join stock_in as si on ( sg.r_id=si.r_id) + full join stock_out as so on (si.sg_code=so.sg_code and sg.r_id=so.r_id) + where + si.sg_code is not null or so.sg_code is not null + and sg.r_id in (select r_id from user_sec_repository where p_id=$1) + + "; + $cn->exec_sql($sql_repo_detail,array($g_user->get_profile())); + $a_code=$cn->get_array("select distinct sg_code from tmp_stockgood_detail where s_id=$1",array($tmp_id)); + require_once 'template/stock_summary.php' ; + } } ?> diff --git a/include/class_user.php b/include/class_user.php index 90c53f5e6..936c6c7b1 100644 --- a/include/class_user.php +++ b/include/class_user.php @@ -788,7 +788,40 @@ class User return $isAdmin; } - + /** + *@brief return array of available repository + * + * @param $p_access R for read W for write + * @return an array + */ + function get_available_repository($p_access='R') + { + $profile=$this->get_profile(); + $r=array(); + if ($p_access=='R') + { + $r=$this->db->get_array("select u.r_id,r_name + from + user_sec_repository as u + join stock_repository as s on(u.r_id=s.r_id) + where + p_id =$1 + and ur_right='W' + order by 2 + ",array($profile)); + } + if ($p_access == 'W') + { + $r=$this->db->get_array("select u.r_id,r_name + from + user_sec_repository as u + join stock_repository as s on(u.r_id=s.r_id) + where + p_id =$1 order by 2 + ",array($profile)); + } + return $r; + } /* ! * \brief return an array with all the users who can access $p_dossier including the global admin. The user * must be activated @@ -1072,10 +1105,10 @@ class User { $profile=$this->get_profile(); $r=$this->db->get_value("select count(*) - from user_sec_repository - where + from user_sec_repository + where r_id=$1 - and p_id =$2 + and p_id =$2 and ur_right='W'",array($p_repo,$profile)); if ( $r==0) return false; @@ -1090,10 +1123,10 @@ class User { $profile=$this->get_profile(); $r=$this->db->get_value("select count(*) - from user_sec_repository - where + from user_sec_repository + where r_id=$1 - and p_id =$2 + and p_id =$2 ",array($p_repo,$profile)); if ( $r==0) return false; diff --git a/include/stock_state.inc.php b/include/stock_state.inc.php new file mode 100644 index 000000000..973bd854e --- /dev/null +++ b/include/stock_state.inc.php @@ -0,0 +1,36 @@ +summary($_GET); + +?> diff --git a/include/template/stock_summary.php b/include/template/stock_summary.php new file mode 100644 index 000000000..28e31e641 --- /dev/null +++ b/include/template/stock_summary.php @@ -0,0 +1,133 @@ + +

+ + + + + + + + + + + > + + get_array("select * from tmp_stockgood_detail where r_id=$1 and sg_code=$2", array($a_repository[$e]['r_id'], $a_code[$x]['sg_code'])); + ?> + + + + + +
+ Code Stock + + + + Total +
+ + + + + + + + + + + + + + + + +
+ IN : + + +
+ OUT : + + +
+ DIFF : + + +
+ +
+ + + + + + + + + + + + + +
+ IN : + + +
+ OUT : + + +
+ DIFF : + + +
+
+
\ No newline at end of file diff --git a/sql/upgrade.sql b/sql/upgrade.sql index e85346db2..a591fd92f 100644 --- a/sql/upgrade.sql +++ b/sql/upgrade.sql @@ -320,4 +320,8 @@ select migrate_stock(); drop function migrate_stock(); -update attr_def set ad_type='card', ad_extra='[sql] fd_id = 500000 ' where ad_id=19; \ No newline at end of file +update attr_def set ad_type='card', ad_extra='[sql] fd_id = 500000 ' where ad_id=19; + +create table tmp_stockgood (s_id bigserial primary key,s_date timestamp default now()); +create table tmp_stockgood_detail(d_id bigserial primary key,s_id bigint references tmp_stockgood(s_id) on delete cascade, +sg_code text,s_qin numeric(20,4),s_qout numeric(20,4),r_id bigint); \ No newline at end of file