From 7255962f43e01bd5b5c022ad71d1061475c5a446 Mon Sep 17 00:00:00 2001 From: dunestorm Date: Tue, 5 Mar 2019 22:15:27 +0000 Subject: [PATCH] Imported final version of OpenPackager --- .vs/OpenPackager/v14/.suo | Bin 0 -> 249856 bytes ClearCache.bat | 7 + OpenPackager.sln | 22 + OpenPackager.v12.suo | Bin 0 -> 197120 bytes OpenPackager.v12.suo.doc | Bin 0 -> 92160 bytes OpenPackager/App.config | 6 + OpenPackager/App.xaml | 8 + OpenPackager/App.xaml.cs | 18 + OpenPackager/Components/CommonIO.cs | 73 +++ OpenPackager/Components/LMZAParser.cs | 159 +++++ OpenPackager/Components/LogWriter.cs | 131 ++++ OpenPackager/Components/MessageHandler.cs | 117 ++++ OpenPackager/Components/WinIntegration.cs | 21 + OpenPackager/Dialogs/AboutBox.Designer.cs | 170 ++++++ OpenPackager/Dialogs/AboutBox.cs | 105 ++++ OpenPackager/Dialogs/AboutBox.resx | 120 ++++ OpenPackager/Dialogs/PasswordEntry.xaml | 19 + OpenPackager/Dialogs/PasswordEntry.xaml.cs | 56 ++ OpenPackager/Dialogs/SevenZipWarning.xaml | 44 ++ OpenPackager/Dialogs/SevenZipWarning.xaml.cs | 44 ++ OpenPackager/Dialogs/SizeCalculator.xaml | 8 + OpenPackager/Dialogs/SizeCalculator.xaml.cs | 67 +++ OpenPackager/Forms/CreationWiz1.xaml | 88 +++ OpenPackager/Forms/CreationWiz1.xaml.cs | 566 ++++++++++++++++++ OpenPackager/Forms/CreationWiz2.xaml | 53 ++ OpenPackager/Forms/CreationWiz2.xaml.cs | 487 +++++++++++++++ OpenPackager/Forms/InstallerWiz1.xaml | 56 ++ OpenPackager/Forms/InstallerWiz1.xaml.cs | 234 ++++++++ OpenPackager/Forms/InstallerWiz2.xaml | 77 +++ OpenPackager/Forms/InstallerWiz2.xaml.cs | 513 ++++++++++++++++ OpenPackager/Forms/WelcomeForm.xaml | 30 + OpenPackager/Forms/WelcomeForm.xaml.cs | 111 ++++ OpenPackager/HelpIcon.png | Bin 0 -> 4027 bytes OpenPackager/OpenPackager.csproj | 276 +++++++++ OpenPackager/OpenPackager.csproj.user | 13 + OpenPackager/OpenPackager.ruleset | 237 ++++++++ OpenPackager/OpenPackager_TemporaryKey.pfx | Bin 0 -> 1692 bytes OpenPackager/Properties/AssemblyInfo.cs | 56 ++ OpenPackager/Properties/Resources.Designer.cs | 83 +++ OpenPackager/Properties/Resources.resx | 127 ++++ OpenPackager/Properties/Settings.Designer.cs | 26 + OpenPackager/Properties/Settings.settings | 7 + OpenPackager/Resources/7z_Logo.png | Bin 0 -> 10430 bytes OpenPackager/Resources/HelpIcon.png | Bin 0 -> 4027 bytes OpenPackager/Resources/Icon.ico | Bin 0 -> 370070 bytes OpenPackager/Resources/LogoV2.png | Bin 0 -> 53686 bytes OpenPackager/Resources/PassKey.png | Bin 0 -> 262892 bytes OpenPackager/Resources/ProgressComplete.png | Bin 0 -> 3778 bytes OpenPackager/Shutdown.cs | 40 ++ OpenPackager/Startup.xaml | 8 + OpenPackager/Startup.xaml.cs | 255 ++++++++ OpenPackager/XML/CreatePackage.cs | 58 ++ OpenPackager/XML/LoadPackage.cs | 70 +++ OpenPackager/app.manifest | 54 ++ OpenPackager/bin/Release/Open Packager.exe | Bin 0 -> 1244160 bytes .../bin/Release/Open Packager.exe.config | 6 + OpenPackager/bin/Release/Open Packager.pdb | Bin 0 -> 153088 bytes .../bin/Release/Open Packager.vshost.exe | Bin 0 -> 22688 bytes .../Release/Open Packager.vshost.exe.config | 6 + .../Release/Open Packager.vshost.exe.manifest | 54 ++ Resources/HelpIcon.png | Bin 0 -> 4027 bytes Resources/HelpIcon.psd | Bin 0 -> 53346 bytes Resources/LogoV1.png | Bin 0 -> 1052037 bytes Resources/LogoV1.psd | Bin 0 -> 287915 bytes Resources/LogoV2.ico | Bin 0 -> 370070 bytes Resources/LogoV2.png | Bin 0 -> 53686 bytes Resources/PassKey.png | Bin 0 -> 262892 bytes Resources/ProgressComplete.png | Bin 0 -> 3778 bytes Resources/ProgressComplete.psd | Bin 0 -> 33537 bytes Samples/Image.png | Bin 0 -> 9328 bytes Samples/Information.txt | 1 + Samples/Install.bat | 4 + Samples/Licence.txt | 1 + 73 files changed, 4792 insertions(+) create mode 100644 .vs/OpenPackager/v14/.suo create mode 100644 ClearCache.bat create mode 100644 OpenPackager.sln create mode 100644 OpenPackager.v12.suo create mode 100644 OpenPackager.v12.suo.doc create mode 100644 OpenPackager/App.config create mode 100644 OpenPackager/App.xaml create mode 100644 OpenPackager/App.xaml.cs create mode 100644 OpenPackager/Components/CommonIO.cs create mode 100644 OpenPackager/Components/LMZAParser.cs create mode 100644 OpenPackager/Components/LogWriter.cs create mode 100644 OpenPackager/Components/MessageHandler.cs create mode 100644 OpenPackager/Components/WinIntegration.cs create mode 100644 OpenPackager/Dialogs/AboutBox.Designer.cs create mode 100644 OpenPackager/Dialogs/AboutBox.cs create mode 100644 OpenPackager/Dialogs/AboutBox.resx create mode 100644 OpenPackager/Dialogs/PasswordEntry.xaml create mode 100644 OpenPackager/Dialogs/PasswordEntry.xaml.cs create mode 100644 OpenPackager/Dialogs/SevenZipWarning.xaml create mode 100644 OpenPackager/Dialogs/SevenZipWarning.xaml.cs create mode 100644 OpenPackager/Dialogs/SizeCalculator.xaml create mode 100644 OpenPackager/Dialogs/SizeCalculator.xaml.cs create mode 100644 OpenPackager/Forms/CreationWiz1.xaml create mode 100644 OpenPackager/Forms/CreationWiz1.xaml.cs create mode 100644 OpenPackager/Forms/CreationWiz2.xaml create mode 100644 OpenPackager/Forms/CreationWiz2.xaml.cs create mode 100644 OpenPackager/Forms/InstallerWiz1.xaml create mode 100644 OpenPackager/Forms/InstallerWiz1.xaml.cs create mode 100644 OpenPackager/Forms/InstallerWiz2.xaml create mode 100644 OpenPackager/Forms/InstallerWiz2.xaml.cs create mode 100644 OpenPackager/Forms/WelcomeForm.xaml create mode 100644 OpenPackager/Forms/WelcomeForm.xaml.cs create mode 100644 OpenPackager/HelpIcon.png create mode 100644 OpenPackager/OpenPackager.csproj create mode 100644 OpenPackager/OpenPackager.csproj.user create mode 100644 OpenPackager/OpenPackager.ruleset create mode 100644 OpenPackager/OpenPackager_TemporaryKey.pfx create mode 100644 OpenPackager/Properties/AssemblyInfo.cs create mode 100644 OpenPackager/Properties/Resources.Designer.cs create mode 100644 OpenPackager/Properties/Resources.resx create mode 100644 OpenPackager/Properties/Settings.Designer.cs create mode 100644 OpenPackager/Properties/Settings.settings create mode 100644 OpenPackager/Resources/7z_Logo.png create mode 100644 OpenPackager/Resources/HelpIcon.png create mode 100644 OpenPackager/Resources/Icon.ico create mode 100644 OpenPackager/Resources/LogoV2.png create mode 100644 OpenPackager/Resources/PassKey.png create mode 100644 OpenPackager/Resources/ProgressComplete.png create mode 100644 OpenPackager/Shutdown.cs create mode 100644 OpenPackager/Startup.xaml create mode 100644 OpenPackager/Startup.xaml.cs create mode 100644 OpenPackager/XML/CreatePackage.cs create mode 100644 OpenPackager/XML/LoadPackage.cs create mode 100644 OpenPackager/app.manifest create mode 100644 OpenPackager/bin/Release/Open Packager.exe create mode 100644 OpenPackager/bin/Release/Open Packager.exe.config create mode 100644 OpenPackager/bin/Release/Open Packager.pdb create mode 100644 OpenPackager/bin/Release/Open Packager.vshost.exe create mode 100644 OpenPackager/bin/Release/Open Packager.vshost.exe.config create mode 100644 OpenPackager/bin/Release/Open Packager.vshost.exe.manifest create mode 100644 Resources/HelpIcon.png create mode 100644 Resources/HelpIcon.psd create mode 100644 Resources/LogoV1.png create mode 100644 Resources/LogoV1.psd create mode 100644 Resources/LogoV2.ico create mode 100644 Resources/LogoV2.png create mode 100644 Resources/PassKey.png create mode 100644 Resources/ProgressComplete.png create mode 100644 Resources/ProgressComplete.psd create mode 100644 Samples/Image.png create mode 100644 Samples/Information.txt create mode 100644 Samples/Install.bat create mode 100644 Samples/Licence.txt diff --git a/.vs/OpenPackager/v14/.suo b/.vs/OpenPackager/v14/.suo new file mode 100644 index 0000000000000000000000000000000000000000..85bca0634eafd0aa573f8a3307fd43f0bef3d1ed GIT binary patch literal 249856 zcmeEP2VfLM_uo(sj%JXqlz^z95K`$aooGS=2?-?-j^q*o$tB)h=qif67ZkA~sGukc zHtg7Y?+wdm`98aT_5%OkZ+9oRd$)VLmjs3HpGn@$?#|nJ^QOLe^Jey?7rTCV?e;@H zl7iesskO9cuTyepp10LpOVN^a4(|DE&)&Uz859K|{xCo>;8*~HTHJn|1Jk8i{Q0FA zDMRwW_e#rAYW7`E)BwTWOpDiE8lThW^d2uqts~wQ3UWRu)=G<{Y*4SjRfe?8A{Kpc zPpMS{eWpVnYJ8X7N@DeuU5ZqPziO#UDwAB`zY1ya$f@z+x>8z*XFlU-qef4=iz8Giou|NI{ZTbcIj_I0tEdd@ZMj1 zQFUy~bmG|vgrB0uKL>tKz(@dj?gTgsFc2^ekOepyz%*9@rULo`4h0MbbO7`L)kO>$M=m)qI&=J6NCBPp5=mzKx=mnSrC<0UfnEuJ|&jcg_ zW&tJu<^ehbCIVssM*+G3(g3A^laVj^@L85)0R@0#0E{mMK537JzY2KA15$CF1DFk1 zg8Ml52Lp&-0-yNP;g16(0S*F;0Wf?D{Nd^~@9Ana_ton4O87khEU)7MWdH?x@7|f3 zYd*^ex)*qh)aR?V04M{nYCLsy|Tm4^#ca;UA%14}m{ay*?WLF!eeXei9%K5D!QIBmy!4 zwV$M5&vR91)x%; zRRw>Mdd>7Tw_}_w<^TV;{M)Gg)OqkJN1h6xY5b>M?U>-A0D<|i@iWE%07}WisztDg>=NG|_^tELh z9By>4rJslL_sjENkDT9?nDsCR{K#?6#pC4}no%suvm+Wo|0TTof*PeYea@WB9qCg> zY#AGZ1nS`n_w_TWk89v70;6=e#@;`jdhGmKvoM{V{UM zs>lW&>7Rh-kEz) z(8|!SL;v8Bdr$V2E_n>`h7CzWKkt@%7DdO#-gO1;y`WP99gIi%=< z&YOLB)EUl;`~G{*Nx#3r%n)1)za(vXMoM9J-qhmk*(uZ0wYLeeGgESNoCo2pHV*vs zEm-dJyKBz++xX7~_dfh7c{K$-M>mdoUT|54kZjR*~}g2>so<1W*~(6z&+># z=&b0EM9UB78bd!Gv?&A7S<|;3|H}}M=mF$NEq-DVZnykLO4j4Q8}Tg!*sXs{!T(M* zjn@2Ij{gn3+ohiY+PhTxfi(}MKi2lRO0RTEyRWYO>&2%gj_Ukm?6cQ@a6MlXxy_FB zcW^@u%ye8|g$IA(egIVHEVrxR&&7QjRQJ@n{{jDd_*I>up+WccNB?E%^6*oD0ca|Q zfg%h&r9s`1FYK^lJ{0Ami{%tTE5-+glfy5(aQO7Kt-3#P`i+-ud@J@fq^f}}!Cq~J zKenv4X2jAePsOqk32|{FM=W#IRFA0hx_xes-{r5Wy)tUwF;IZ9!H+SyPG%u6Rtm-f z;h7kxy%;3}>?vheI_t+Bx4%3w;q#tr?!S9drd;U-bBZrdb?gk^#UM~6PYc9w)#>eL zqpv?=_GJs+IMey+l|8l_<)F0T>4T2=qEjD)6)OX7Y;l#RymqNCHnY}S;~N%EmPiLd z&J1fIU9b|6-z5MKR$Qv&T%q(J<}Cr<@BQYy*ZN4O-S+wU7o;bzUVWxf!rUx8PjOWs zHvhLhVsSjvZG0PqJhwf9sl!nr&gddW2r9Vp!21X+!>H8I~hH`e6yHfs@c9 z-D{gZXIJKqR>p-8nF*|1J8TKt27Z z^*>kd!|}^_PA6u31?a<9pf^vG`}i`{!)jdl<&iAVmmk||*ZQZ9dEk;$op;>y*eM5( zXSHQJ(>l2;XFzWH*ph;xsU<}PrTO04MeZ`cuOzR|?a6nQEp}D9z51IpF9v}P{}}(q zxf35UhUdTX@u+QQj_b45_0Bx!$Qmjd8*<s(mO-H*RAza$|Agf6ZGZfFZ_F_d zZ^=I|#whh3%R~e?I&1!|=bxl2oDysJ-$Oxrmx^LVKT+n) zJU;N>Q1(oNIc6Z_SX{CU=&a}`*^vLHARg+J?b5#txZ419*7TcS|G^fui^Soq>07tI zY{Zibu*?5ZzYC6q4Reo*W^k>ORuLZIkUW8vSWLhQFTLyj9_0fVISwn|r+PiQtcW# zr>&tYFT?v?kv{3SlN>#tnzy;%JzGC8ibYXrG`0T>?)uHElQ!1_sWvK;K&V!6urqPV z$Ah!;$1nPPT=wmY(*_#xSE1aGNT?HBVlh zw)U8lH-7MGy0A3m-LzN!gHTwwJz1BRus!<*hCG*;E;=1|7A^FKe@b#@1NYn z_pfW>`{5?2;p>mR^)IE@AMoPf>TxI5W~NUonf`gzXtcUOV__Y70%c8$u0mW#q5WM0 zKOO;xe$j9|s zbO2-FJJ3D8gX^h?s1W`(bP|j3JQI~N56`acDq+S7mH5Gu^ez(P?Wt^m?SzhlU8YD7 zT6b-of8RA<^9kc;i_<4xQ|K=KPxY=Xf1CUjzBU+#YOS%_tyx+4#$68;U4G63&tyGS z^Bi)rAuC0e@>yigO8*oO{d>3-2=0HUEd$3kros;OnW#`ZRYW`V*#nw6(AVXH8J_m} z7SO*-ePD-vI2{oAC*SK4pI!bJfc|X}&=0o)K>n{nT$e{c{|eCGrqbWh#QyJuCfYwi z0c&PTE~FSvyj@bc;bd#Vma)$t<#{{jvZueuPmS;W5xHV9Xq~r4tUymSun!26fPj6S zGD8=0UF|Y?Q^&8yj~~W8hSq-I)I+O3@*TV_ug`)f-D_T&Gt($@?9cy$7phaBqOFCJ z){k=#YN08Ol_>Qqr)F>|UYH3Mo--=$-S4iR^U|H2-g)liXC5|6g<_P(8L9`s{b+nU zAM%9=<)meBR z3#oSr{6FC@ga3GpvJSUkpmHw69{7}^&mN?lKhftfCHyY z#Q*#esKmG*I0W?Ie+0i0{?$X3_lF*Z{sU=w0RBb{#kY>^#y=)TL@%cvh?5nN?Tm#qu5OnBYhx_Z*XE(v$0=QAV->Uk= zyBpWH0@#Q0eh2*9)$2Rq-=$vfRQ-G5-v_uK@PPX4A^5x0>qp=}0eB4XxcZFoK85R6 z;O!asERRnC&jVfnya*u9%kWi5hSAeep-vIs#_zv(r;0FNH@+17806znMQJ?Yo@3>~W_)|Pn zeeVAhyKC&2Lod?o4MY^O+rRZETK%IUN&md5RqZG1#@2V~bbQZQ+x~o*OdyM7_kE_) ze!5Im+Dp-NeS0yoBIBMX(a$&;I}Ph}-sS`8~9hx1aWF=WC8gAJS>v8D}^?xP{HWq5jz|<;U7$5{6P{X>VvE z|J>tShp|=Jo2KYrhhyh2?Y`4s`;{X5Or^1FjQlP4rSp{dv`fs58UIH%LjFf1l5PB% zf+ENhg&1XPp<$&wvrOJ);KjJk6T#d{BE$R+!U)j=;XMKDM8cpp1pSGYiUupYneyI7 z{SrJyVsR3gui-7@3!MMeP=D;we-8A|K17MHx#dr7jeqgt%w9WkcW;^+b>vfp*PTvL zN0(Nnx2gMo{QGYHA=Wz-6Kx+VgI86;CoUWLRNvn`2bXm|`pvWV4ldO)#zuS#AP1Su zjb5o}s9w~#2hnI>#`SOTIrz7OAXW$+ahUmsm;ePv5aSi6n_m3m_cleDFD`ty{LZ>N z`g7^cmJu?e<_6?#pN!Yvg#4v&XUiysEH}8qu^*0-n=%`d)^T%F zgO*&`>$DS(c&$JGA+CXz(Z&9)KhyR`cGjPbIJA0($(6(z*@nLQ z8ChO0NavY~MEOe=q0=hB$9|`)LhtpZnPYzr9II9ii zUyOLjJDnV<#m^z=i+8Cw*7W1U#zy)@z@Rv3m;NcBZ|6#|0ay;84v5en<;~V~0-l`+;0nA|{foyOFqsv_#IgV1 zhOqkqOos`Y?s0GQKNqS`?9d;jds}})`nTiJ4uD zq(i9k?e|hF~{2tyqZahymL}Iw8YqZcuIz%QF|^MJHIdiVo53P?7z~(PsG7fGsMb75xMo`!Co(k~Wo+* z`(JMpw_jMbf1dl7pi~vZU&>!MBIF)`-TF5uBKaqL4@CM8fcDM^=qH0d<#IYZ{BwLW zbB&R|(m`LyUv}t+>jB9>*S3{M8X+C*sigq!@gUWEpzffNg6T6#lgcsm19&{6db=8JU;v6Z?02InMbOOZ-1Up+N%AQ2{(%md|Dg`>zNo3^R~Vlwbw#(iQ$NpsaCw&(F6^G^ z_~K42d65j{>mq5UvVPO}^FNg1ioGZx9+VcyhR2S7@|)R74*-Ou=xe zuBr4z0oXl1<=oG9Z5y8Uz_yDnKeyG;D|Y$}(=`U)hDkxcI~ulC!y$nsp%>1CjFpO~ zqo9#X$CC`qA;E4F({J7X#9Ph(8|oDcmh4!$HmG}7s7Q9`hns=0|GNQk-3+ix|5(ts zKmU#otAT4w|NjHVo;9}l=jprVj{M)G@@|)ZTK-?GM!7m_UoM~qAHrj_V={H#-v5?P zXf?K`?b#Ds6}x9LVdR9)f$Qru_qxNJa$QxPVhrGB^IvoO?i;dM|97yM;q1`2kiX>h7p1<~ z>wiuH{o54sw&+{QUzZ`SNa#NV`dlxgv%|kt|3`hsMgY^mIIY~>p#Ou4w4{mi2bkyT zjaO(8XT9@$>-oD!y#2{BL-&5%>d`meJExYZ5m_kwh3*=cFSe$t%vYSPL9w{zgcSwgB7pH7mFpszm#e5G&p#hGjo}U^f{pS6DEJV+0sa(>G16{j3 zf5A>|@9{@Nz$U&5u|tQ7>FhqeHPi?PR-u3uP|mHX<8e+^zb>;fw68tM(X;ELH%Nd2|A z?vC|`iSReTuZLfW^@U3KeSk>+dDTCqog{6?y(n14Z|eTh^Y*j+v$KD*0w*tvEivKB z&-iFX-YII6CfNa49(p`oY8j}4qo`h=%0Ui=jMlR`sn5! z1^<17FNrh@Uwp?wUiO-&VM;!QdjY1S9?aILKUj*iDRy^$9Kl=)ZMpKb*~QQ|)Jk6` z|2N^H9p~oU-R9$weZOeEt!t3u{u=Io$xu(e_G1Rd$- zKaIFDvh~Lqrgb=0c2)V<65kR}$r4{_ombT#==bmIKc~U$H!Y-p`uy2_xc}DNesKlcb-|XK`hT$Nm3J$bY6}20N$%FEB*5B|bOyThYtg=LLd)Kcdr{32Gc!_CM#b%K z`hV?+{Nvz(I}f_Qz9v4mO@8`!{kUbQA^C!hFjd2(&4#b*T8l?zEbU&Lc~Shlb)SAv z*J{er=^c*Hrh=KRwV2(72Rwh^X=L^b$ZVefKnvPk@WRLStm&^uOmD;g9^qMN z%O?U3JyfxL`LHimm{4&49;n>kdKkXyjQEbgJ0HMbIaHFeL90((Q^()t&OdGWDf!p_ ztHW;nbmBAX3)d|j-ud+Mxxx9Tm8i7)a=1&5GKm-PA%IpvRp9wz@P9G#^AAK6h5UOO zexFW?71903L#|9z!Af}wp8pE}4EV1_D?8I@W5Jz?y}K(r6A$a5;N1tG7C|d}DLWJA z^j3Bz4(+4tOuQE5LK!I*OBk;M?uy23s`DbFY>;Hx`2apOnJM^vQzjq^^2LWtT zjMK^;6%qXeEB#-TR;sk3&F~SRPkS&rJN#SN|3q<`DEbpQQj4F#pnr*q!*$A0@hg9w z_3rvk_fLLm_emeQcQ8oACw#N@kA$JO=M{JVpw)?kcRoG)d7U=94rG?~44fMwqLOz$ zAnXKG=66l!T_yOOJU{(mbPA&8{D!8UKN7D02;T9`d5fLzk0|{{M(>$-{`sNzi;XYc zTt4XV6+av0YNflW^Y;}^Jbp18|Hkrv=s9=_zme#114pw%HWHJ-a4RUG-SUIi|M=jI z1r-mzJazlxttS+npv_+NvhpV8``}Ll+jnr>u9X_9OQ{j5KC7=EbW5p^%(A+ zMcBRQjv2lg-7$x|>@Jct99{Rx2V*lho_~yPb`;)=MmOuk^Q+LUo`vW2=uRo}y89`j zt+T%pPt*YAxv2R#0Y5W7J|!(JVf66C`1JVUNohg)H&Z#$T!Pf)pRsrxDimBj`;3(D z#-9GN*Sh~{S^o)Vfz}xP_x`m0Gyk>i*MIu!*{Hk?T|QfnRw#S`!piGtB_pwHOkwa2 z_><9ECO}x3g!`-Ew;zEcmC;&;qSf3EVPz7YWuO&YjQh+O7?Gl7^&h6(4~&Iii036( z*BXF$zfZ&lW)M9QHiZ0~{9EId<794vr1BBsUpG-PS3e!Z&O(drmjUx>Jii|PUii0V zD(3fbS;`RwZ6G<7;JIjZxYRq^LW?JVOZyA$z3w~ftKQS*e)Vy;z3;8txP59qlOxj0 z{MQPVvB)C{J%w zhl5dg+zFxbLEJxza+=rF@#liSN&l(0Iib!%v5*SQ+DHZl3<%~ut_v%Rv?!>-!6W?0 zSOtcEejVlRo}Nb^I^xLN9ErWkuUfkg`48wx6<)>6FYsIpoxw`_4OgD{(|9sFF^8Y^EKW%22 zqlk+;dUaa4)48($nLmv?D{Wm8#(+R2qJc&(?mvM~!*Z(n--Z7XWUdkDPzU8)I4G4b@&0LAXyHX}%hi7?+$ha#Ygs-P8Vw z??-C;QmgtOe)g->KaA^`tl6*s15k8w?%^FP`r&tY_ENCH zd)uI37zRG$x+&VQJ@EPMqeYm;orCa9C?_cS4(z39$F{*|S*AjJ_8a{3`Y77X*A7v3 zN3A_nSy7yZ=^m$*d*Gi6|J{Dd?x?l>mEBQggD_PDZt&OHY9=bXqkNMj=^%7v;%jZE zXG1_kmnO<0lK0MOqWoc1|KqX$g+jlXqy5?S2;2f-`pxjP&neutR_mV~`tsPIjX-nV znEBV2puIf;`r#x1@_!xDvl(EQ|8^MG#Q1B6|4|x#gD)Gye{0Zps{Gq+zr_%Kt8pR@ zKep#?P&ov*-mi~3yw%;$54ke!=D2C|R+kT8YDKN)w1$e9cL900J`>ZGjqv@LUZO!r zQJA*W!+#2XCH&_wZK1ygt@{f2BA!uk=}8&KuTo6`m8WNK{bb9-KR%w8y4&qFTBTFJ z1zC%4LDq?tJ>>>7MZ4Ps?Hsd$bV^l|A2j(`aD3vJ;VB8DQ->!dsmoXCLEmpMpN*J= zoYBPgFLJfT|Nof-8M&E-`Xl|*t6bH!mA;Y!_Y${fc2!-m%j>D~RLTY;tlp0Cp8D$Q ziPD&bet+HA417$$mZ4tYlj$DDlBFI(gRa2LephekVPvRb$BNM0bWlza&eB6~=t)pi zPUA7u&|2mBF^Y<524)}J)i3Hs;7hWy@iD$+9`b|Rz)O>d zR&Lml`+!lTEHD<7(HGO-d!p?nAGiJ7cZwtX`Bw95y-l2dF4WuKnzsh?kkADgBQtxG z4-DiZaLB=>)-P_?&@&K zTf4`8G3}xCUu&a$7!CCTh|!m}Q%+dB4gy9Y5RxEZoDW}AnL+CPNANMf;7aUcG0Jxm zIv=jw=MBZHRJTI(yArRy1E2ju9Hs}_{@}VKW!sUM=>+7VA(Jk@p}Or0F-6y(`}@rE zUtfbr8WJE9f^~f5&|M!=dLvRj1QVA{Ks*wYhezO_jS0mMnimbeplr1NPEoKt>!ipQRK-H-zcCa42KDdb9%nUCewEgt-LQ2Rp$(xmORvJe0sa+e-BdL7#VSZT zn({WRPBHvZC<(IR*Q2fFMM?Y8e%pBbPr)JrEkbKx+E9&CRj7@tz`ROnweb_X56FM_ zkKKg}rr!T}{HXOvX+x_O{f72q_D!{aXqd`HqNHh9J+`rWC{_){YGLr|pIG$^UhRu? zl}}_&aazXmX_>P!mijXa$1I8Wq#aY6Ubi@N^z^v$DY;q6Uf0sx1u4E`rg@9gQ_?cC z)%jQB_n#UYNm$FSUE{V^CT`w!&AFd1`S7y77uFgTv@kL@l6_Sp}3ya^K865Kcm({#Ks^F{iw07iYLWUyGaOfJHn z#W=aw;4hsv=5Z2r-yI7U*89r`BW9kyYxO>HYnOU3xj#B>Y)O8Sn6un{NyjTTj~E~G zQrEGquZX#JB|a)6$E)D}*;@I^eO%mdUIhK{kzM*JDJj#^Qf9$RsTe(C%tBtI%$!;f zOn=&p_|%k?v}KEyE*U**+6-bHQ6xRC zuBgeJHlt|9LRaRZ!e#y$nbUH7D^@JdwHp7!pZ=ie-=WrojkeNHv8=7!gFv`eMY5uw zVB`DKZ2GB)kG>UchCd9rS4Fg@KU&2!_IUmc=?Z6zrGNS)Zm&`wSj1Q~Sr4D%#uf0d1Y8BU8gLC@1K?V~M!+V(bpXCYE%9c+ z7Ql^wn*dt@Hv_nLcpKnWz-<8P@pk}j2iyU;6L1%Rdt7${?g88jxDRkY-~qsc0Pexv z1>mId5x}E>#{iE5o&Y=vcna_|;2FTP0H*C7`0yfj)Ox=McptDE@B!dMz(;_O0sjJg z0{9g08Gy8CYgdilRQbKB_A^bD-t);PYmtW9G^|gRDtz%o&2^UtI#kr@X>c(#YlI~mJ=5YuU=LgZe>RSjCoiOGsf%24N&R_@_f55*80>;zux%G~QrMZ~u z(XjM))v)wttk8xjTAgY^YjdRRISsYnd~V~q*{98zm+#v;&*3;dbtg!N^mi`QKJEKW zUH@$A`*!&^)|P9nSM7YQFIOCf5mQvh>w|X zKrZCb5t}XgliVovwe>el-3jlWM^Nf07f9Z!L zxE#7Z@g17ZBX<^@RJtKRfbgFny(o z4T}2i+@!yTl=L{W+k`P?HAfnyLXls6NW1ZON26|g>xw?NT-j&i^gVe6nZFqdII)ta ziR-sv*Pr#8jWUQ#FHHUJp0yKZZ>hcI{twdLs`{@HV}Y!;A^$h^`~fjX=RBWte$M|- z1MoTL|MWTkr%w>`e_o6EKd;67pVwmkPdx(X<(I4Pb51Yj|HKpXe_o5ZKd%LF&M)Tw z;u+`hob!wMKc92{PhUI#=e>6RFW%?;pVyr8i}^qAwex@8o6Y~9$9pdTUIe@Zcp2~t zfbYBp|8>A#_5LmRZv&_^u$uq#{c!MK#PJp2YXDcyz6E>-_#VLbqOdysBd&h}{0#U7 z@GIaq!0&)R0KxG?bqO8LzH0zl(ZEdp3ssGcT{ECv)y{*Sc&AV9^Pm6z>wQK|BrcY^ z`?$DORe_$%apCN&r|y2(9eu~UCyq}j{MP6_u4ZV@a!vqJxDB0$_rq5*kW1zpJDaM1 zSft2b`tw5qqI`~DzJ2@Kgs>WT(!T|f-wI$Fv~qd!$}~ZuN$AuXlkE# z2YtKi58-T|87IC!8FBvKf%jNn=&bk;XZy_eNuT1uc!1sf-wfPq0CZOL!>|4{j{iqN zmw7;EML)dsr_etN@xYqFHvjJe_bvdPe!oW{q``WKDgFkl1h2fVD|$`k9qn&iBkCXZ z+uhYj!tqb}k#mJ`j^)p3RwV8JFwh@MTM)S5)n~=Zg=cQrbA8qN4;6{+{NDrmL)7RC zWlh>*d=I`#&Ubd*)Xs9%oo9dfERq5K8+f-{|NjDgrk5@g8omtZu&578Lr*^(y&c!= zsmtQtk96FZHq?^P+!+i0yCR;`0CwqL0Njh@$-iCtg-A~>(#OfJK1cBV->8ESA5>Si z>0>=jBG84af86^NZtUaxtbY&^;M=Fa3b-!-=&b068~gY^=`-Jtz_s1{UkzO9`($Tq zzhZ8I`B#>|?N{&Jd(zC;503lPch59NLc&_7#7y%>ilv{6TaBN-P2D0fPZ2*GufGYH zr8Rc_Ib~$psHCKn(Zl01l2V2zWu}cZ*s0k$CwF#AzRT;ASH?zT>$GBnVtIPP`>2_( zLBYD8o|=GS3#|3EtpA(sMKG7O8#l=*-~Lk1QGHX_t$pY59*d6r19rZlt>{NQD*)`% z_5T8lHr4V-qs)ug9nc=J3Tp}V7>5EgCMGe|4MYFK)rM06>;ghDLZ5trzGn$K2D&_G zt`?zhuLLcHHpgC%Jn|J;eEW#+^ZV;L@UeB%HvRvAzDgc6tK|{cCx6|;jkVF>RFI0f zYs~n|dANvi26*K$S1zo_@|;h-JfK)!}85|szTuoE+{-FSZ41Z7k6%PCNZVS(_OROR@? z6I*?0`4_y~rT;DBc)~V)>->+D{+FOVzCr$_mWL<8^N2C-2oC626#au`{f`=s z_;9A4?fUl{aE1OsjANu#hjdW)#GW^h3LuAZjgf!3zF0FziIj9H@q58LZF@423$*X? z1xdnYQaSWb4Rzmc`D@3YbZ|^f8&9?1tV8>;rhJ6?kRGA^H0pt&|BQl!)R2ZSS=A84 z_0X<8l-qFhXMj3$CfqpGnEqeOzdYPh$s3vddbju~x0mj2{r;RsUMl=-$H804jA#Z9 zT;C4}H-CK_eFp8<=b;%S!>sHq;P=89+8S9?3bV2}gnifz!Vm8Mg{;g=7<$H$>%*?qWjfAx_trAGX(9<3}h-8T$o-bmDqXvtB){}lc2L3qC( z))v@wM7o6^k^HZopVs*KOJwrDGK&>r9fbO3Y& zP-oZ~&;@W1AR5pWa4?`7pgW)kfc1;69P#zR{ULxu0eu1e0Q~_205O1pfI$GhGZ_Bi zfFl4$0)_yF0*(S44HyO(4u}Pe0K@^}0SSOaKoTGsFcL5dFd8rhFcvTlFdi@gFcB~b zFd2{nNCl(;(g7KOOh6W33cwAJnfV)kME=<&Nt=XV+-2&s ze0~i;`;RvOZvuq<$NrrEe?$MJHF8z@uQ8qe8a(U5S7)7=pZ>+xX-;SmLMyP%os5#% zslS;q&|6?cu{d?OsHyrBV_S>$PsVK>@WaOVi?$D}e)dv)q}6~!*?t|>#1DC#U1b-n z^-?qwmCe@oUrqFPiWozq8wyvP+y)f6N*P>vP0ll~-gu~x|J;y*{2`WfOm=t|1Nn#A z>plP`JUq4%%Jv}etmYs5@@+ULwQY=!kUA@o5NBVcM&Da)G0az){eZ_41-4&@&)|DU4LcQ>KWZ)S0K$zoY0%^6Yn zHSosRzi^+ODAi#8IUgxQ3a9}Lr*{!KgZdXS|NjDgvHl)RpYtE;pr{w(`U}$%&awVO zewH9J+phl{n?8mBOlMX9$28=Wf*<@V+FvB~ZyV^JuSR60e`NkFfwoMPS1^67KSiAX z+Wx0du5C5)G)U3@1v<(igi!~nT^SRaIgyUW%s(-&Y0y6vpoGiRx$Y8BDwkoG;kRYa9C+_O)zp z)Ok}26Ic^9=ZN-?mm;_gz%Kn8z<-Py{WakK4&c*SmH(K1F#ewm`u8g2#DT(6XK z-7D+gl<{Xd%4GpYp=uS=*lW!Ar_KN1@s9`R@Y|x?m7>+fnaLuJ>HiDBf1wHg#`1?Y zCHj0wLjCKDM{G}a>)&+HHyi&INW7u5+7!V4E#mf{3;NKd$&Ly! zmIt8?uG<2H{)c)Rq5okx^*{8f=MnlJ-V6N?uZ8}Hx|rSo>T9UKp)N=0e~3pA`X62& zhH&bCcrEllyr%w#KJ`EJwLtw3?}h${dLHV0g#L$N)ca89!)xk)G62;7@LuSDc%6o4 z)c^2WtN+Qyvtt0q0&>)F;*{VzA23bxjPw5c0Y!jf_4!8lvjKAeF2H=iJU}Uc@eppt z^$NiC05_llz~?op&+EmS>$7oP3-AGs19$-{`+jyr1JnsrmgXhX;o@pWb}DY;&z#S70Wb{)C?Suu^tJt6AzC^6+u$|faI3)Re|>}GfWDsJFOt|#LT4{gUoZd= z0~iPx1UL*Z7yuo9Cr~^m_aL)pC z`*PSA_+tU%)O%Q|$X~*oq~3GkAr(ORLXH=-GI5=y-e;@+H267yTtFFc^3>;7z@HAF zPMTxN4E1?2{4)Tv0J8ye0F1u^{yadbdhde2K)o)9&)FXFD&a2#Q~|0H_hR~h8h{5- z3*eeFWl!RBeDtf=i-5lr*UJE$KQMeH{L=x)15N;(2;g%o`Ga{G&I$WtL?yd$xFYNh zT->JKSkY%WhI6FPxCe zBbit2x@Av{Ka`p5_W!Ga%efp~u&k-r*|gaI2X-MS`DFHs{Et}vrragsv(kSHJTt$k z_WxG(FUf}f>sTa?GO*qHcLQ*DstmhsyTxIRz4zX1M)>h;C& z*Q(c-!e0lt3~)Q(asc1m4F4*?)$08Q_}8k}*Qq}71Z>5#8v!?I!tTTMcEGKG+tlYf zRR0e6cLMHG?{~t#2XL=?&v+kDuOETG3-GXd|0w*&0FSHpPr`o+@HF5Vz_S3p|2+H` z051Yw0=x`(1;8-Y>DK{!)%&;LzYTZ?@Gjsz!25vRfDZs40zLwK3=lk<`TqsZSAeep z-vGV^dn;Bvr~0M7ZZ0$dGXecb@K7O)Yp32+_YdcYQdi1S8VZ&mLf*E|>D+wp7% zfcj1Gtf~GJi0>l+1;UeXHXB6~Q}N+I#RG>x_gv)6f678pHMOO6Zul z_HFH2?0+Jc|IS6Wa=fIo8vk1Ce_HH+l$v7vOZlTI_CH0K0p??^eLA$>`BDn>;K$-O z3r`AUC_wL@Cu`P?=^q8jhq_Ga(b>lsW9gr+Lch~qePmVt$29De)5jt1$p4ABIT>J= z{us~~@{cwB1VPHsZ;bqz4EjRI~ zu5bn@A&<6!KIIEKtNAZSq!#-xC9jNrssEuYHUPjfFv1CbCXfB0NA4|Mx43EzJ|6!jn$bG!^#FlEZtfZPqQd?jcxtgiI? zASOT_PXc~2)kjTsoe+bFhb3Y5{YW!H;@ypBr%(EFbLXkNk3ouqzdy+}C4QNO2P)@- zOL4GrMpOAGK{kAmkWO3)sBZXBN38Opjskyuc~xy}x_d!=B|ol(lLYyVi|S!9MQ*RJ zs@5|hJ}DNbTF1r>i%F}m_Sbve6FlyEKd^?yb~M z`1tbVI9H;pQ)^JnE?DmKyK4gR*^Ew%{aW9F_^1Qs9Nh_^exW0PWz`wb1#l36Hb-3n z2LpNnx&wLu7*{X&lrj1MTI~P!U;DozXnbPOB6!}=BD8w$0*%D=#Q4XmKL}uV{9}E! ztN%&1vHnQ=%J~t{p9@^-tmv%9Uw&ySoTL7O>#5|OE*!21n~#fo)EjI1Mx&01N#1|e zK-(_;MRxKh z2pMY02*?wu1!>g$Ht~2y^smN8>MDm2)T!gn1urb#)9bI7qQ?Af6l0-tQchP|J>cV3 zQ-9`KzT%K0X_RmRJJW){%qKA0;-UiaaPJIdqjX5nsnBR=VYfjcR#do}k|85gQW^*O zlc(v$H(Vv)O0jiPY+Uy4rPQV536EsONK9c;;~2ga>$6;)T?P=2<4#}P)XJynmT1y0 zSe5TEDqntQtf7?J@UiN;!RM|~A1I1l>dFC9Wq9Jj?4SygM6E0> znth;*QDvp(WHaZC57A&~IzpRT2aR&Y`q(8NTT&@=qSRHUra9`TQEK#Oi-yuo`x|n> z?BjRAd62x1(xU8i4CS4(Q+uT)zF`(9FSZHoyF3tudn?6$H?O?QZ3Wt7;5$Nrw`1^j z@Hfl~Q0w`%O%HbURH2P>zZ}o5W1D17g{FbADDpLXLVnqyN^UtNsP)`y&3nFU{v|Wk zyeWufU$lcz{;IH-onI4W9`R&6o{z2UI}I(H0fspgE{4$jIRTwY}Y zF9rAfb}K{Ep=sn{%luFq^PGM6zQ}XCH8Qy6v8NQRBs3q{PK@hW3i#nz$Nk*Z$VIk- z3gl{l(|@j)Wqt?qN!MW8qy))Z5&!Z4)|8cUlq549QNBa}f6)q^)@Rs^15nwg{4L|!1e19bp`n3Jsq$a?M zK1bVdPVD~}0wks(9IgnX&EyvK#)>{q-mzGJhRdi|-(gP-@8pQl%O z-DQ3(k_QL(9-rl{t*;AxZ%C@k=hh_W=<(_@dvFY`rKmPhQ6EMrtLL$4wOEvwN%>;4 z+#a{Ls!Zl?e*By{P0W#_5qBUrhQ-*8F0i8Ccng8KbEA%I;IO8y*5mg0b8E}p)v-A( z`kxm4&p)YUZ_)qQv9#Kk`XA%`@T2gRtK|LAuQi`ouIaa%PhA1_)p<2Cv zQk!a2%erHT3g#yTJaa|M4~=jwbol{|T7LuVaNLLLXZs)qGYw@fRufWWts~DH*6S#n zOFy20)yEV7zwJCq)`iF6iu!Qs$9eVwb>`Hak3>0AKh8I(O;^rlNJ9v}1|7(geg=6G znuEc6N(1k6RWx|zD>UD@)+lte;>&Di`dOyPIFGrnfHhS)U3Ln5o^r}B4Qchk-08e8 zH2%T$%xV=Wc-~>om$FBK8hz?bjSl+fN`}2PG`5n^{I|P?X8iU*LkLw82wKum-F3Vr9#R>mewY(V#UH{W0^cLaw($PaYGr zIv~~;b1{!CL;dDgtZMO&UtX)=TAJ3rH{6OuNrSB~S1Xqz9@erN@E}$>V&zs;E!zuJ zqCIic;L0H<5p?9S0={Tf2NsXaE5+V|Et363cup4_pq$P`nO584kmpYx7-h*`hkZU< z30M4ub|=)r-A>6?A259D+o>`>l%riPMP9^e`cOMuAE>?4Ou3J~{_CNJBqof8JKC?AeQwMAzh(a4GXFPk9p)i+^k)0d z{C{7}4XJ^l>}{uyTX?{XaAxy~|4nW~bqBGS_t8$DRyuXI%C`1^DOD8=d z?|r376e*$}g{6=U%T^ysWjbUI&U33|-A;}yVG671aP3f$!pQ#$+4eb9f7YV^qn5Z7 z+VB5G{U7yo)X`NQFl|*o(-4{~)_4!Th7zu>gGGsYR{^yCHXFxd(aUk~gQ7w5OSx%j zIeedab>NIy*1h;*=!DHJ(p&VuE&5-*F26Wrk4#SmaRdWo6eo`c5g>pTsjK;E`PnR?eEy)@cNc^euswqg9uV0U>v4ScR<0vund@ zi?um(S?}7nceaN|(;z}S-pIxTyla!&tQ6&X&I7KT9r(inbaFqElZRY6c?N`&$6Pr{ z+R1~ioIL5uNrNOOYlxE*2q#aza&pV6lY3CxGQQ?bCd**J_FG$86i1nm*&j&WmdazGFdrp;KodrgpoADrX`dI@x{5Zt{FQma`SN4w^GL(W`jE6NrT`eNK*wlB)r( z9f$D;2f8(6PBud2`oVy~_~}}>(Cc=Ur&syvs$I()sO>5NqFjfFcsPE7sHqz-NlmV0 zL^}dMP9&$y?emE|p9TcE1`^@O(0CH@2%kHd4m8$Lxm1VXqSJKuzP1h$J!{MQA9H&D zTmNg(|J&7nwCMj^^#6*s+)Bqt9bq=QS79fY1Ra}@M)j7<-moD?D~Zjm|EKiaqW|^C zw)bT?eO9p#r%m|(5B;yQl0|XIN>{ARvw*0&14|QbxA$gFSm7Gw#Q(Bhl(MH;o`hP{ z8s$zIVi3LIfn)(5ytdDYjeh+}U>I?|@3lAkkMzzNn?7fRSf6dy2>P92pV{rzcVwYl+3kOa= z5UEu=`vJS}80E}?(+}wTx8Rja_5;QkMqK}|+e=dStj`TAOUvL~61!&iN9{_?d&$3j z*Y~Bax7;J`%6t8+j@q#aCxL29+Yuhy{o#)zg)z}bAN=nSkNKF|Pm!6by{HnbCjH&r4 zX~(8yWlS&8-o#>HnVxsds@Y>pin0r4q~ydD6wXM`&WlNii%$e*rVd+wlQumgr7$~h zYH{}LlosGmjDoMN2)kLE>gN;dLg zYII;!znq{2XY*jXGY)L`URDJW*Hgj#`G;XVu!J|GGsiSF6`}B;0?5wF7)19>A ziTXr@(Mac{=1zH0L1}tM>Wr)~ECe?(YL=ru5~+&8-9`UEsx-ZxamEg0GIxt)9)`P1 znk|{>O0gsJ*okMP6&8faKg*O-=7@S%O=-*epMI}u%lcp7JVIgT(6as~aw1f(d!VoX z$@YZJCsRe#Q)T8&&n+k^&d5p2%gx}8BBIcMG3qVRlMcmQbU|Lu42qxy8HI(}Q?m-3 zM-k_Bfinzu7ydK7ZF+V}PF_|)NkK+Y#?;x_`Nb*Iry_+4C&QV_S41jD;I8?`go5T7 z6I3ZHjwyXnq?A^!`&~-ol{}>_Yt(ZhrOCKErP)e8qC5?jQ${jjPm6?&#@+e=<9M5DvDw0X%&hgDOpUB`0l0PD)|kbS07eD16lQ zB9SGy+h4kDwUNwa0yl~Tmf~)8b5_Uvq%b-HWf(E&Tjn!S*N8+dz@5LjMqV_LuxZk@ zRT=<9T`AJR%~>b>UFlHrCS+DZv$d%8B1H?EGiOle?dMDt({ZUt$70-_*jzbdl@29m zLWPfNCh204BoFSIuO{0|lR-_UF-04$OoUxt;lg}}oLX0TrmM_f>kU}|j^;v48a|bR z9d}Er$~7y(ZLpf^bI5DLKCI`omfE)M*xra%wpjcfY_QIg9TNXn(?(BXyX(+_swgLI z1)Rs>CyGlU;uaBqC7JDiEk$S7SJt2y2Ky{iZ-*J5>=*A;PIdpn^dlJQF}TjR>a`f!YOuz(jTE z(3)Xq@aIhYL~&v-5HuNe77@-SLYxMHlLs{o=MdpsB5)cjV#o|2oJWN7iNNWkK+xpF z1w^=z2%O6qAY4R*i;2KlltAcTd6T@A;OJB;8-pYScEFV zO+?sAg!%Xp2y<|)BHWBi=Pme&D$^inihCOoZY4s6F~V&`*iHlv41$Cvh8;w>oe1ov z1p*tgnua@wa3>MiWeS9z0ff7Va5sLU>+r)K)3Fmj-3#hq+QP4S#b*2RJOyR=wwK3o z4?=ndLJAhvE|u^6Zm;8Bg!Kr7<$0^HWm?{t?YK`LVZOJj2KGgTt_6P-W zbjQwgJboSNI)|fKo{_QA!M^G`qI8#_=d9%#VmddX=lXw$fKp;9lbP%&w{{c6mK8 z_X>_($H!x!QWg;vO%?^^SO_12QekbK+96g&-VEIuIlQ{T5pXR1-bB_1c^m7(x~#maxA96UteBTt1;5hoE)O3Y@T;vS$Yce zN+T+y2&)3~?P(AxjED&H$ycIgn%j#^4BS@ugLf=rU5e-_b4)=(N#=Ffpj zb2WJ5YB)OL_3r#?+YMP6j3>AvrE1c%-tr8O-@81x z@yT(>!YLO1Dx!HPy*D-(N<=^P3~z!}fo#fXY1kRJ3{C(87%JU6d`G@T;KF%>7bW zo?ZhzcSJ>^DGUxCG}=vbRhQLQyD+Z{E_N+zuY=T7WFM#CrroQJ4oMs58;EmmM9J5d zifK#Gl6Vs&iq%p#Pj^tRXl}!1|67Q>M6(*!tkRC$=H3Q{1&z+3TvrvpD_dU|uHMRh z(mSBzYBU|&?c-f$Sd-ddI8N9C-vfp6W-1cXvX`^${br;T(l3fCEK}MIN^>GAoCw?D z2Ov<|q+)SGF?XEfpK?SDY9shvvL^8Nw@nyV)^B_!wFm(8Dd;XCB7KrphZtZno5 zM&z$Sqq+0~rrF1K`3(r=SykcCUL|}EeTzsdB5Ld!najRlDi{BEpw(PDr|@m&dzMM_ zHqwx6l)L>OK&bKJm@To7MgL#&(@cH8Y0i<*k03M^)uA~j4?iK!nX1sztdhN4seVT6 zkxfk^8m*Wqzkoz!V|!2=(cFf#aJd@&8Zm`P+xc&xkkt&Ghn(Es5m|Fp$B=d<N_+u#Jntf#_#PB(5kOrJW9eHMCvC@oQUZ*zufIDcXmY#PzrKj_4(2 zMdR1co!p))lyKioQm;lY5zkf^?GmBc;@SLpc(&@$a^I8Jmx<6_^F?SN7U@I8SNBlT ziSyR^5qjK&4sUL%`xMW%BxN2Ox9LoSH-1Iv4A~KH=XYDcyyBsafK(zM{GP9SDic~jyZ4l z6kNq!2yzo<3p|DMiGzM?|80qQ_TlVZ?H%t=e5qUVmo<1cB=v#6cHBJ~SMG~*N4|ak zYT}*p)|=BO^vBgpTfSa1p-cKMmG0Ve@od*2-Tre@hXr^xfc$n_gJ-LkbbRQLZZWu0 zc$hx$_r`GAXQex)2x7~R8_8YHUq^o=fQe)m#tP2fL3vd)v3Ucn&-EjCPp5Iasi>M{he!Rid zIqP=tR(2{B5^*Qos;{-&Zz$2 zN`C@UB(WfYI>)m`X%TTCo*5b7yXE{pqjIe{V9Ql|uAiv)2Z5X5dauPZ$^jbU>@PLD z+|e0HH10WOMb{&x?5~_%faE*~Kd_bwwvkx^gmy$?r{-jIPIh8Wc2`dJOHOt`j-L22 zv>A$CDkA6w6vgny*_)SITKJ~JG8NC!M<11@_dEn4Cd@bvMVLv?+E@RY&T6TjK1|oM z_D7gm&sy#nfKX$OmkW+#fTD6dke51+rRWs`j~qM6oReHQnO-Lo=41+-Bow_;;10!| z8s|~G)WsPUy-MWb(FoKePm_zo5Mq{#!x3hZi?RCGbh$V}AEwL2IE0z!Vmv}M$qd+< zMISFXP5_F^aUw5iz9sCqqNL~(fG3Z-NeJwhR_&eYUYfUn_FIZ-Be&L5g+*e1m&1_^ zl%Am|vaCK5VO_~pN_BOL&*!dLP+jHrIY!}euh3WI53)E$Bd|wkAZ6z<2z_>njF*= z^mwK&U_hs}$eVy5O&!n`=0ts%t}rJd%)Brso4z?K`Xn{I&J-XyQ}Ls#x{5*G$v~1j z8#3i&bWSqiWOAKMmy-!_WaCG}vZm6k5fK~%6t&VE%S&A|k)lsg@f@?<{?Unhc!jn2j)Ve&?9JIV<|~298;*&Jv(H=i(>8u2PxK z03IGoj(PY!D&1Y-s;~BEEUR;Q%H8GSlRwZJ)S;`W^`^P}?#fyit@@(R6fc(I#VIM( zbqie!@D-vmSM@Mh``6TZhUK`H*Vg-orF!dq3x^eYT^?TrY}$qux|jKfrPS5AU3gUH z9+q3>D|1&@yFBjNdS5gRpjo*c^AW9a1#uxnQv#X{o8?%5Fq0A})4!%`&E@(qO_Vbo zZiJbaK?OoJ$<)-jvsF%9&BNs~_9DGPXdzjWc=uAt#ezFa0az6ycH1#-1MB#^C+YY<|> z?*;^!Wz)6#FdfGm5oXTuCet@(MXy&mab5=`@_fDG2XlP6;P?iF8*{wboQz`&!c2I+ zQU98*YTTp`)A76&VdgyFj8IK71KA&ah2Z!Wps0h{HePZtd)|2z_KUF3kG@jikz*&B zbCL@u)9YlyoJ@g}grct!xOd@Bjq`3^>IO(D`f8DjI}xZ!o~B~ogAh#>(6BtqaWBG5 za`8U>Yr0&#UmvE45}R%iW}b@=B2<%1O)g#|IDQByD#yEc8JMjh7p3S80*_*-lM<(s zqNS5Uq?7WZlY*gh4t}DqRdE>yYT{E2cp5+LJ33}^8xP6{7?Ywms(6lP5U5F>CKsPY zh*>T^hcJ^|d|v;WE*D?Whv{;!6nCBvX@%n?&xs3=}mNU*Tm?y}3?s{3-&? z_v`~-Rz zRFNA5bMGNUlafF_Io?NzhHV{dyAfu>+6VdwHLQK8k5I?jM+h@z&GE76o3o-f3y$R; z#Q86vIzPcrfL)~mZxI}Sia=wIKhu-Zar`;Lj5!Ydep3m)QkjJBpM|aq=+AC%`ThsL zGR<#G$4cVs9zrYJ3B{$?3JVMrgwAoLV*#H0Q~F@Xzx5SLQ{(@muTZ)g{{_O#Yy6j{ zZ_bLo5zNYMoLzR5^DCe_zs65+jpyE3;yG;$16v#7cf z5n|SF{Dv^&R^<3yAE71}|IkOM%f&wtW}b_GnZ7wIntO&dxwr?Y&b{~v&PDDYmgipl zsJjtgJpFPpRsdtAsrY(%p%h7f(DMBk(cYtx&B5)x2H$(w|G)pjecAjDxJkWkg&<8s z(bVhK`U<71*F1dRyk568eREdyt!jN`*Wdu2vmJhdEA?%nQn%N~q#N@1IRF!;Iv~iH zsgC*xbxd_am^o9OP2Zdqy|bbTEQ6&0CZ3S&nX| zVKW`w5oXR*5B;0k{Efa{O|P>jket2nqe!CxzAz)Y14wcwPNp1v@T1`@AgwvcnUg#? znOG-NSc!2TZ5{tOD%~S5S6=^N?&Q(PGUt!=h^3@b!h-*QrQu$YLs# z4PRNV#ady8b&^>Cm7EPk&NRb1ON&LtUc)O?@ENA-3N6-^Dpu>@YD7(v;pJ_VM8p6jty88Aq}xO7B^sVOg6;g;MRb}LCz411BPJ$ z2a$%?+2I>vaRg|+c1teI`jqd$ zb3VKR_g<+SF&c*^LIzw097P%|lW5R-2;fq6##ex}O~u>)R0{p|UJoqM{q;;34sM$^ zIjW;bjq(+;Mc}y%Jo^lDO+t;4aP%8%j_fEVNmHlRXSw~cg|)TSzQDkk7#qjGVKHe~ zX07+SCwScT8=}%Be(_A74|XV5B3)j?G>H)75(!^k2_fZmZ^2UE-gi5BTFr7LpLo~@ zH29JkCey-g>LN*g}0g}YNa=}1JT7|Iq;pgo`{*~`7 z*W-J0`kESeo~h?V>I=n1Po!^UXGwY=X}+Z&_5XW{@>5N}~@Az}{^&6{y%6RWp>Js#vqTu)p z&b%WiKy<7uesmdinriXb@lSp;JL%!WcW!)e_}%s1O^iiU1mR~P&+zzG_*~*%GX;At zG-$P+rOK&LWqvPg24eE-VMsJ4cx|kqx;#pGu5Z8p zL{A&qa!>o$Eq|?>`pe)O|KoaW(wJ__n9C@UYcc))l?q!-U7 zE-o!ib(JkfcxIKmy1eyyt%A>RykMX3A84WamYXekP`gWtjCwa` z^Qb2`l`dSEwzof7|QM5QnF4yJ3Zw*eB zi=B}j%R}Tu`45XRM^uNkaFRq*O0li~bN{E z^2Cuz?!@G|b3se}TqUSUp}k8}TjxLBI+~U{%#)B4c^f{-Dz%o{_f)&%Ja2iG$5ky( z+HH>)C1)G{!nNUr2_}2}j-^$Vo?0)Ci}JapsHl!OaR=$tVr8_!Ok z^yTKxQ~9>_ry7;Bro2t8|DGnkA4dL3fz(5}r%Y}^6%e*6rAb$;%8x49^5DFuQjWZD z)W^?~Rnba>k4N{Rm%bjwch(?D`uI?6XFr;1I7wQIu6#GbFP|hy2ccNDWi$Wig7a_D zsqbx9?)$fi1_pZ4l+Xiw>*P{pN<5NG$r(T-2E)AvxnF?+ zpM(G1Jw1;;bi|RjITCx7Uv<>dhsnFhd*Qo%;%HTd=9(XcfKYE&Ng9T7`0-!~OTU=3 zpr8)LeQXa!cPvN8dByTSa&F~$)C5hYQr}x1Jqv2nMd2KEHnJDl|_&xe6 z!sR3IPsRN;m`rfv!%Veuq@Z$42JS(q9F?GbBO+zxcojrgIXb0D(kmU&6Q@hk2Hf8X zA$lcxX2By+kzmm+Cxx8~nv@>i5dsvax1r*dB7Vhdq<>`;8S&n|ZMtkf^zsu=y5!pegLrAy+EJp%_BoGLYgfk=#36O+@Kp;T;|Gn-mP4!IoXpZiY{QYQxo;lugr=mp&*{IDvnLj`GeA_n=|r%==9OH6qNQEIOFTk$FI5JADPjxgcqy zY(5N>Bb56Nu%r4sx7Pjuu+2~RZixdCrRhzjGNeQH@u z!qzZ;=cN{=A<$Us8o%B3tDnB?E9XA-QQ_3+*YDcL!wz#AZ^!W#m5{=nyzqe9lmGWQ zTsWpVNSj9Itum7jZ7=fQ?IF1Tv($;?RoRKvX`+SJHt@1}GWLPSqQn9>z`$ z52L0kK3`}PUW);ygtGZOz8f-7J$LWjiHFPY{duX5<&=K)r@ zBN>ll^^8Q)W_8^)*OFR76aK=h>4NMA3PHdDV;Tg++#SlV>lilLj%C-G?QpcsRK#2h zu!J)SLW%P(!td^%l>*b`PAeQ08Zi?QgUri8e#bGIkP|eA@r`CY8ih82ylkzIno}65 z=A;pYMv@GqVGzGSIsPjf!-_|y+F)1#BxJIrrO|I*g6f{SLq(%s9I`$v;f3Lc-OJw9 z`r=6&BKaxx9QmoY6C%>1g1{M3TL`eQk3RJg>?F47GY1OQe*b#0+tJh6DfS+0b#;md zJNq5o2YY+F#e=Qgo$b9e+Fgu)*7DNY1l0uN1po9N`=@98hn^E$v|c?Z&5oon8#E{B z6r`u6z*|8?-36d075Wb7T{%Ub-3m*TybKPLTd4N_t_pCAO8@wg;E~M}LGYp=ib|sx zg+~0k@XtO}2mR9rV)86aASjV6nWB$+22|Lb0VQpz&^s-gPb4$up<{MQbFfM1RI;{t zF@9ltLO0E!-$}b7X_KFFVY7f_Zb}kUxJ;T=yI$x4dwdW39w9aollVi5a2}jH-{R*zf@lVkThw%F|!ZfVhcL3A-as4b>BBg^ueoaY0 z@)z;j0UdE1>ED1=NUI!f#RSE5c-{pIn9^rpOVEOX8_?sQ#QhzhLQ3yJFO&8DQDBm+ z_t!mNw%&gRE1p>T%P)|v_a|VJ(JQy6|*(B0drEl55%un*v4-PUKd6p-5@<9)e*9{+~;m}Uyrv!I4qX|KSl(npJa3XiaI zSZ}EIHZo&WadYa=8_RQI`mk$LkynPW`eFv-r)ZZZr+u?;@_cb`ouPhPATJ0Sm-CfQLB!`#q*ouVM8pdB;we4r#It_HAlmV? z2X8p>#3kH-`tqwUjw7uSSP&nFH)v;)7@{shfFKOxjG)~sVEc*^C11utfQ$&S@}U%R zw#lI#qnP>6N+q$VLyGuR=V7slGhZe+i0MqU_7H}IA0YDY$H@9athb{G!Ovs8-3dy+fR^0|!jt%=^=FU1g4^8T zT!aN8QV{FMK45VkYQDHSR#`RV2MB)8)C@P z74IKEUOH&EqqVEEyQlMp$Lb6+Kuu?r^X@AE^MiE;GniaXB@lSL=LU-WMnlR!`_({U=$o`!N2s0UHu&7wlf6hbA;i} z;m=k^7qx7q>D8G3>i^BOoei#vqBG;c zZI4q7F033Ipch<2zR7X>lr!q}w`_Fxg|aPJMH%rg55*$x{+5=O&NYwIz3xfaH-Z}@ zj_8c&7)pt;r2+StZ>X&;l60kKqj6_bYHh+Vjy8qEEA4}wftIj0u|C*7HaqQbt&jEl zU8`BwMBhqV!ZDO|rk479$6FT$Jp*0oz^Z3n%nXgCr=6ms-|fmoC+B0svlISQY}mTEzy?ApvNgDy|b>| z+IW*U9By~aXT}D`0$uh6(cLvL80`#sJmLBFu9aw8Z%cU8IkhOFRqjRqs#9DS*VZSK zfhC9CC$5Q$k;zH1+wMt5?1#rXsMB4u0WMrDj!Je%)Y|xRP)xP(e-Hfpc_)WTHY1_wi&b3XZTU+do z*!vGhdIx5P+gh3;?Gdn^e|2!JCDNI5JGwik)6s$DP&hGmEYjqeoZg6rLIcUBX?u@r z{1_N5oEeyk^mT~Ah`2QBZ|iRhuKB$7A+xHinyeHa5mvR+`d%-Kf81(LLbs4NkZ{t3G?vz--%;Yswz)Y#&^X zc*Ur=u+i`utO_+WUWtG6>`U!Gl>O|1?rM%*sDI6Rh#WZk)JdUUxwraGMGC1}&~PK(ax;86R* zVy6R!vCFpNFnLQ9O_jQqcTW#*r-!#nhd0_zS^m88)FQ5F&r|1f(GWTpTLQXOCe-Cy zX_K^+T(Q55efji|cY4TUY=wRMB|S2KFE32Kj2P`XV7>42%rCSd5tdI2v`v%j>ct#YXtkL;=H%rVyR;A1n6X}fH2uRfUZMM@zk#+vqdkFe zq6M9F(uk}!I{zSlcm}P>zN)J8-|55(lu4VV+Ah^7^SDyCwF!wYpq(*N@RieoQ!l*o zrS>x=zc@uCd7)dg{R`wc6bC%mw6BpmW@#Ar5xAc7E4JD01b3mi1;PVaw zmO|&WsYk0fZb#j-HP@}4cgjbn2*PbB|2_q`YA(vps#V9&KJ=$N7pCSMH+oo(8_?f> zTHfjW1m?@k+SlI$N~2H}f{iGS_TJ0mg;8E7u=4~slAzd`9L%q^6{MX|QYLYVz9gnS zYSJ~+D9<0oG$PXw&mrH2tX_&Y%hoIpcsVqUF)Y83g{2ga z6E~q|CU?~>uC-5wv9r}IVpK>Dq#*}LS7z;{NSdsP{LYrkQB(=Pd9=JG@m&R4gT5xM zpJEinVSg&@uWz1IW<5{3Te&n52TZk(PLHTqosMk#kjkAk6bzU(5gL++8^0r`aN$sGAy+K&WB9wJz3i= z-1|Tt7bxO5fzgw8J|G>DRue_=gxBvT0N?StNdzq)EBTjK4ArQ$<&G8=9W%Li^5b(U z{}kha{MgN?#|ikDwPCEzU)nb%2#CoR?l+Nc3w;oTDT(=sOPas)E#WOV6 zh1evkcmP&8oxMSxvMI$fX1Ku01ZdXgX>+CfT|Pcw!^F{VtNJ_8elw**wQ`eI+U#_1 zIY!uxkD;R4|jxq);PZxUB#NeLt9finhK~+UKsu2Cd9`r-||~Po-)-svIh2*zy8K zGd-Dl<0s9nnrr(rEXY0?y?I7j^=GD!isy1|iqg`+1Ayx3=gjOUqb00h-1Mv&t%H{G zBeD9iLK2*Bp8iq33>pL^?=cY)ZAxOY$p`yj16G4W($e(y$6#0+0<7@@d1;Ky_F)w= zojNGoVe);|a)$)C9h`~SY+7q0jd=fd$yF^?nT|(;j1h5{4&X(*W4I>MgZd-CQ1P9(N0f~SpYP% zHES69k&Y)&zM1-&o_FE^>b=WEEVKUAAK7`EOhByP&hz@KA-n_-vQ;`v=aD@~#zY;L z;@jUv-HQdjBz>()Kc(E6Rh+vDy;}A$R1lrLBEv_0}SwI#IXC13ik}4Ja7zSI-Yy zV?axbc|GbjGu}XN?uyYTZOh0;C}Y|#%S-uOo($$YX$3C7?nsUxz7zHCwADsh7RxIE z=Y4gf(DLm+8{jgNp9{VF<*XzVaAK(-JZz%0)0QmEt|@QMNPy0sUvX~6SYOCVOJc(N4b z(}&>v%Jt+B<0T6BIT-wMi4DRg2Cwzd12Z<`>z4z(6?hrTaPKc$>r)*9!Q zQGeD%?N8r}O&j`|w~nj5wXFjuh4iaV3sK)V#$Dosdvs*lJu8ko=eXOB<{8m5Y_kGF z%dc>p3mxfVrIjNC4BHKO7a^^Jc2E6~yWvgL;iI@;}JuhZpo4~)3RZ4_T& z`6re}D-~}x8uBUM5vR*OIiQA`KdET0ki{q_+wu<#sz%)1w+&EjiC9{=V)-ru^HsQe zi(z1LXQJT{CzoTwR|0=qLP}=^a9=tdS%G$CjC zTL#}HxNGo@4o}h$vGvmAJdXAcgXHMFL9ndS#-c-MTEN7(gQK?l!D%D}qQCnVg7MFlHwJKfwTW;_e>9 z092HYGKOxR^4uf732}HhPkZDkw0w+#IDosIMSF^Tp@mnL4>K@nY111F!(Z9Cl0&ixZ>cGLW=5*zyrW{yO z3;DKKhF9k^(A1UfddfiVC6<94H%bY|DZ>qvfqYCXLnE%04741~b`!oV^cKs&wc-S2 zpzu-)Ia*i-@~$Z*+(H>{r3~cXU>S%{l?=C0hSyRCaxkzAf1b~9J7stsWgzbY%RoS# zb=Gc5yMw;&#FvE(dzOJi)LoR}^^~EN%Rt710>j;u;SH35%ve@Je?G%Kl;Mq(fy_yk zfy2YSl;KU3fowUA4EIrnH&X_(qF9EP;aY*=e#-C`%0Pgz4Af*L!vmDzt(1YR3YOuY z^BEqb3~!?hE-nLyhleP`+bP4Kc7~Ib;T@ELlv!26; z!@DU1sdX&FD{-xq@CapilroS?#WIj*L&@-al;JVTK>7^JaAiKjdnm(uDFf*eECbnA zN(qlshWAkh8p~M*>Ov*M6O`de%5W54EWqf#E}x;g2W-iA^BtBBACP>nD(=e+17bk;;MT&Wt8}!E`8;XdsD7EwOzHUwilA>nhtRy2Rl*`#$^g zi?5PS<`Ejwcs784>!=a+Y3bJ{M8< zxr!QmA)FPj^uBVQXMZxiToP%YM-@jZLRy8jP&>X*aU~V@KUMNYR5DRfO9(lcx#E*g zx!#b-_s>zXzx-~{r>dgPmWuxpim!}2D(nJ@%l`tk7{%qqy&mZ%$N46QY2lsqEwS*|P{-mdCiP>PTp-@)%jOnh$;SMoekzpk27*f% ziPLH^$l<6GLH;+WFH}*N6jVfZnIjMn=HdYubA{c`H|^`FY6R#byIZ#zWe6m`%x|E~ zYbyeu?-gB6;H&s1s+d-KT_5fOtZ=s_N$PJ=_#8I{W~hoI@!a2`hWV;7)e0#(;jHh+8z)fh4m6?Kb*t#4C*)WqUjG5B{-!-7FQUepFgw^EOM*T9;J#ICBQ z@1dq^D(d?R+5G#c;7Co~5=xiq7ztnhfJzoAJgH8i_XnuY5M`k>8T=!vnW?CAcoA7b ziIy1VpHO;bI#qGkm$uEGK@CBJ7)G}y8hZa36mqRP^IRGjid)Zy4_4D@9KX_zs3 zW2r=}|AK;+>ZB(~75*zKtd+-0qW?#zz$n3}Tanb19~+Om((>^qsIW51;#sh~@%P_Q zhf$`#F8YW~{v8#KZbibyOkNs8|A9io74aUYVUfODo*F83|4&huQEsKuqW3?kPmE>K zA~Z@;_`gt5^~zUSN*;Cn&!{~HiDF&MQAPiaibg;VMw$vgN0~E<4q>PsFA>!*P1nTKzK;t{x1qMiX4mhiVfR@`Cp@= zYQ{be;kxBZ)bkruV2J-hw;F23Z&AxqofKTDS^tL$Cl!{XP&Q+nw^H9fi=ypY5z-cl z6yZd`^wy|>l16H`1%(=A)fdT0srkE5L#>`(Z5gl|C0Fk+D9etQaI^>Y7&Qv(QoU5u z8K}u%mzr*cL{e7NH(QY|BTLb8qy?3KX2s?6+GNSWo@lEf1JZJ6cd>{GglWlK$=fJ7G*5!Yg4!-g`$8h!S zi>`au+m0N@yN!>Z{LW`u2&#K8a^H86&5P9gF2KX|Jf3|e`oK&6^7;L^%C{}`<(KX` zGj=nrz1%+NUUhUH)mGo1n0S?+EtAWGh-dfWpjO z#rQR$+G|ny6`>gCrC#d9T4w!qrur#c*H*mp)x7neXo|#1SHALBd;eojrU^m#{_Lr} z*6&>TmGioOyo_g|H+#DO?oUoo>TQ4f&G9QPz|~hC|F>JOINOPQ5;pFC1D>6F$$9^J z^I7wF_6nl+^KQkn6D#{Z^^)@%aV6ywMsU^rny>DD%kCR-)q3W6i@9?no2di~z4`~| z6Ma5?%`d54`W>qUzay z6JuPtfM@^p?9cD~<>%ILb!g+^^vaix;_71iCw}|E4_~c%<3s=Q$m^T`{?1cM$)~1O zsrlOSEz0xW@s}=SKL1z{@21}K>VHc7O2ieD5)E0rLC{(eUZ5K$VMCfun8aB~;sP4H z>DY20y*?3`x9-y|aK^eHY5GAD&r`q2hh8)g{}a4Qgv8m%YC8vCT#SUJVFek^q>K$n z;h@WhTiB=$8@0IPGaskrx@%jqgH~kIkn=Ph@6I&y)+AhRbVT(7E zd^T#ajT&d8R@ew$8-Zpc7;IEk!}XhGN?5#v5-!D8VVTDn7MqZ$jl}~<(Zk|Fr0HO> zSzRE9#TIpeDlE1lO&^PGx^Ma$ZrE%wuqfEtk=53Lufi7Jhq#bJm@ga&EQhRJR9|rxNqOr=+POqhVmvNpGNI-9cr28$_Tcf0ieH(IEo7tC zUL?M-IFWRxJ|w-kIB75xi$t>xH!+|OA=_T3+vgn?{cVaw`u@FFQ-G2p_|}*WNWc1+e4NaE;&>&`263!JfDg*5%{yjuMx&z}u9EAT49 zMnqPd9bftGv{)K$K_*GqIFQ0Y#|ay%!$$40Q44GYtc{?u5grdf%S$c;V{1P zwaCKeHdfIv61j>vGCLB+|88Jf&ZabsA|pZJtrTrfRcaou+E@EYkGbd<{}LF!Shd zcpYo;9I`0nbS+&LMEBi+e0VHaufzAH&QLgzi)USHsX$^Ow19~3R4AQYhZ&iIs7R(A zfov#}M9^ZU;ZFAA5xh7k##7P2d?*_W2I2=0?Y*2#92gF)Cv({Y_H-^2Jus0DBr;)y zHyxM=tz{30sZ=O{N5RkmPb?D*#p8iQD4EMNPynn%+(%KYX49+zr09{)JkoS}AgC^o zBjN>hfhzomkfx9Su9jbm zeoaMl%jz^$n-fUWZ*vl<9GD!1C_Gr|`P8)$_qq=QWMZ=rbW!*^$ci~G_*8RvNk;LnfqTSNF)hT(pv%Uc-I*7XmNqYEx zqi))a^n{Lr0KW$A*6C(=F#8qR@UOTBa1>YC+QOE1s_QMAZzhEkf_%w z?^LI$fPWX#blUtdk~ru%26?x-Kvjz$L7IMxA61vhwfJpHOO$R!C;uMu+8)D~s>Khn z7QaWYDC>KX!r?;I-p7%q)86-~3*_4Sgt|agd!Iy_etUmk_f3Dp+gXd{!R#qywY?u- zd-wgN?NY21fF^|;S2dhe^4X}xHfo%WT45u2Z3LQ)V6ahD4e!`2ljNoCk1659_{yVD zF7usAKI=!2$aQkQL#!V~iXIj}hBO^4eq3E3hs8fp7pTJGCy=I(#ZT(K>2G)!-(oDh zKvvr+e6bcYEIzE{vymEVBaPEWs-=yTNE>O3Hc|_1*Wjz+-7N1HaHnwJ7wM9?&pJcP zIG}$B4UZ`KtbdL~Z7hBXDSBA^3#92_@h{Z{a#;K;b%81@ei>={Sp16aoBoDJm6lKo zK{tPmthTS>i(yg0Lc{N|7Jm(iT#NGn+GtF%ejQ&rP5TCtIE-)&@LRvBn>J(pTcqhX z?(fuZ@;u)_tFdSxwEaCYp@p_@(Qona@gCN=ZzEl^an|pst5E^}U8L!>`FrZuc<8L( zSEq4B&RG8eY5Hyc0a7_I^Ss;eUe@A&L>7gB|A{VDI+Ug1an|Bz)J5gH)B4Xy(d(`s zB2Bx+NRW1^^;Q!a!omi$mIa|)!FqWj7mr^l^hLAT)S;G^OfVW+4rH2_W5IMXlMH8@ zgURKV)mS3D*3#bE+TB9yqFPevP=+lGqf&+{it^yYDUM8pmQ%?zT%=g6+nfrM191~5 zx)%B>nj7QiaOrJh+Sj|))UjS*gApKD|3ytUDvJMCb()Iee}puBivKZEwJH96fLh}5 zpCF4u@&87bDvB2xXziqwuZ&^fNtXBL`7(bYm5CZQSMymKeqYIF{U0Q9;Bj2^OQh&= z(XWuE%|+J#Rllaf;;+?dDlGm6Y5G|FEmAo!Il1u^Yw`afi-N^x>9PQew0=~wy@Xw= zqPP}YkfPJ7T}a}Pp=#A`b(*SGdyuBzsxx%o^f&y002kfPJ5vyi0MsD0`*RipMJO}|mk(|yz5@B!ASvysVm4!$%R^+DFC26ag)q@Rm4 zon}2BN!qwLPhFs@Q7=H6exqKf`=-C)4;6UP6x;d8XL}L8^4uo()Q6BsVq$8Pjf%5T z6Kn*mjo`8o0M-le#lgbZ*~noa7h9mGyN(2Q9hu*CB)IFy!mcBsT}Q&Zjzo4H ziS9ZQ+jV4d*O4XUVV}Kcp1F&C-aEGPjPZqKUE-ZU`VHszYK$2;2xmm^*=DlTkvd+ZUHM{Mfu&5gCSk1o2!(edEC zb8KkU+p*EzHyUs04*6rzNY=a2J?awuk%hFq_wbZ|QuKIRoX+rKcVB3wCEe51`U!Gl>O|1?rM%*sD zI6Rh#WZhtb(Pfc7u6X~%k}o&5>~MfcRi76NG}iH-7vrV@|ITISp;r7|->Q5L(r>{R zOS|Ft<-TM*m&HCYS03lp&EvuclPt|&mCLfMf&f$3v zUhY7ZHbIvGBax9$oeJ^fj$T9Ff&walkV+AdZXk z%ai_r!(u=jajgfu?s#-PbU5xDU74Amc8;}W=k2ZTwVcD9w7Wg6*$rQ-rvrnRf4JMf zY+v-d?RGKMJ|Oz-v9T`qVRy_G8(7XJ1JPrB;g!zeu5?>>pF7jq-#I-P^}9x5{$pPI z$YNV((B7L_T*_=X2JD^U^qAY{aJiSemS@LWr`E*Iq3D}~A} zh3Ch7gHd8qQS?ntjgBAga`@fuD~hqVACGp^V+$FOno@$y$y1aC9}Agdnz_hCJ0;~o zF0yYlbCJ!nnTxE2%^R{BG+!Y-e=`^9`E7Xqk9IH^h+NylZBCy+(0PXJdsSsGkN2sL&JD^*u?g0_wecd=lfqp$->JZ7tTjdUjIBn z_zr0Hsh4B1DDEdfx5ptbUi~UTxE1~TU-+fju4kXU-{KPvLBN_pzoq+c8mDx{q;X;b z+&zKuVhwjP&;I0zJO1Z?_x+;bu}9)RcYXV7!*9{g}F{V0{9LL+VlfHOS)1N>5m%dLZ0gu`V^CRXKL!GhYxduvCyE8G)qYg_1Q z4Ri#~Am+M2;;AX0Yb_f}&?c45^x%OS`9}~)gSh<+LHG@Rzi1T%3W|CcoHi7w!kR_b zOi@S!+Y#VCAS?@w!b2AMxw`-PGrsf@te;Z4=e1LdCHL+B_|$LTI`Tgkz3*QGpS!Bh z4f&jJ(XY=Egm3J|CazeIlEqeL8A9LB!wu5=W1;xM?t69>?%{c_ zDecd5XsOfvLg)pizUI#>wVt$mYxuoApMUg7H0pTv0%F(Aeq{Zb|4n3?2e1uYIu>kp z#)4$iVz%UH`!&}n4fSQyX#Ii4qQn(p+{$)k=TgDHu5|%E);Wey_k#at6|` zL<`=IUm8JME|5pi8=ySWNLqy}?Aim@$itJed66fOz!pZ!m~v{KbT?0CLTT3j2O9M= zDu^hx2Bel=JR|$V?6)3&>kI!k5j^kUP3Hp}#l1+gW%rvxf7%>Y{>VA>-kbj@>-&o{ z)KTl(1lJ;lKT6O#3G4g8asz&LW0Gz51TyGYvsL91suJ8IrOQ! z`@~0H@4V{A?|t3~y>0JqJ=p88_aE$R>*zZuw)ff(c6N63!(rLe>g;sgz#NC^8tFe# zo`|+M1e2JRMxP<-U(Z?aBA4B)u z^-4kb!Ar5%K@;$Ko*>*0QT|<|KXjEKoP%z8znkz!pF;dC9uFRxOLfjAu{&FeZ8E32 zp?K;HDOEJJS@bFQ*`iu~(N{@yQqtzBzj{YPe)#;vXFv6t-+kKJ@uG!yT)O&cYCFR{ z`&CC!c=RJE@NW8CK{$YZ`0wY_L6b0A(NQnOee(-t<@K!daY7iLKZ9TNpOAhLhGzU) z;XS846vlr?5dIUt557czYKYE8hez=H!k5X)Vno)>D1aVxAyyt*8 zBB=X)D3plfYp8^XW4}WXzPb;R*eM7Po0GNqoBbH+p9|te1U;Oe< z*}!P|_Q&>|{ehQ0bkogmd9y$GUo?5U2^Vx|;dcCg9RH+TQ#9ab@cS#!_i@~j5tPHqT=Jka!WTzcb}QbTLQQkhyIK5ZP(~2HIMZj_VORkq zK|q@Z{4tz4Oiw;rMa(mIc^k4X)X9O38n*}BBNDAJ-InZPZElc1#zskK(cc6FK`gd|%hb2m028YQl z%%IK0nZ(U$VO4-xB>m$@f<+cjg5X6#G_y(b(vA3a;h%k|4*I7Lq;Qm8o{Q zFfS+#H>3*+!ex?I^?FFJF8n)%9wA#^$LWmTKq@n!3BlTCPqFmx+yC2({BQc2|0b{V zM^BE~E+^2~sPq+FkK>Umm@GhEbeY z`pYknNAD*vnqy!UdN7L9==~-9V)Tw)2n86oD8VAUSPxAD`boz(Bnn?a@8w4gqJli% zwqwL-6FPuk;()O7TgVAS&)Pg9r^NAg1XRSlev~^^ugcdT%Hyc;c1yi#Tn1Z_NL!V@ z7tr`s4880a_WHp=>H*L41P^2RIpOiT;iEJh+Nr!taA!l>q3YXkomfg6Ys}5_IL;g) z*S`6zT^bJUR32j|>IP{Byg;HYCGlmR501*?d_4ra4q%mb1(uPT{7sm)~Q z<(bn&B}!X3GI71rlqg@|3Z~ZOyE8sgS3=0;@_NE&3@u z!pdR2q1utkj8VnSsXuQl`;7Hr*QO$`3}N-f7V^Pxtp)NpP8eBO*(6y#GI-d_p^rMW zkLLh|<;-m#U*Sxx{immRuhd#_A=zf6NlfzVlTZ&r&yV9O3z?hd^!+JW$XAa*Z6+M9 zwOF3+l!2&v82Q5Vh*;IhwL-7g$%?XIOiQ%6pKnJUs^itNr{x$6DemU#TFDu~8iF!8 zQ$4!$`azB$npEH&Y(?+}|95cnuJjfE4qelS#mLaF63uy?Lz*-3N&!-%FtOkh1@W)6F6#u7NTARVBkofW|R?mEMqiRQA{@T?LLpQz;&tBe*f*h|Y+Pp_CX~8gP&K zhT7U9NmqI{ik)UsYZHEPv?&~3X&>wiw1mBh^}+VB*=dJseXQT_TFts9`c~Q!j-jM8 zwbb7`-nua88R$v}Rz34#W@s!u?GzpTZdWEcIUgIIo$#k(v-6($NOw~Z+u-E7bBn`E zU7_h{NNkA)eZyi;w!LS-H#@SN8513g9=|x85!WMr=cF@|@y?8S=T~xJZ%6N}nDjW3 z!|t)n;7ocd;?E7ox?G~$8EIr?@VztxqNcOAfnFToV@~lape% z-II*i50Ay%VHAvgt=#e4czm+kv$%n~GPa@no+1kPALnySr0pM0My8n@?AeORbmV8X z@BKz=JG&jkbk4O+rdwO=j@bJTM|uZlhTE{WVtWLv=U*LMYl(E`+>Y+f>2!2pITTKe z9g8$!pR%pzE$^Nl-cAp1l@4zMOw|=$d1@Nh7ZE2u7Y(6vu_cgOWkOwE!9Z7Jf7SHz=^^j* zke46finlW+H}z%2XwL!beV;FH@i%S7QJi<6lDwz+gTnD>C>C zpze?`h~EU}S>zoZSpArptFR|)p}%qnAW>Ucn?qu6pvIS(UHz?9AYa-{dg=-Yw zk${83;XxB|RGUtB4WMIIn3`6N89NzwQphyhY*rA4 zQR}_ifRj9~7-i+<6*eseR3}V?ig7P*3xt3RnWq{3z6wy>QIV}*n}t|P=cY{rX}?2x z++g%k4L31-S7r$%P`g>yx@={ThDm1<$tNGM{SR4RyaDy!Z6ZbRSSe4}r4Zh@i4ZY< zWuvLQso@iKqsLmMuDk>0eI{b4oIc}qFGfrA=(&eXgiDs!g{%5yiAQvu0F7s$EszdE z>trH$!s`zcfbWqVW&vnfDlLGMNu=sMc-8h|8nqv<8#icqFwX=8_nSyZh1M=n5XE69 z(CQd;g=tCmB#oCSiXT4@0y1V}u(3iuajI6mx3p&niyKh0nY@+P8%p`j7)|AI!g${a z_*M+HzO?0}mfSgpy6>qQ#g^_VhL1gfiSe+}l(MxC{z}wtCI?kZEwt`|^quYUuwt`f zsebcjjY?Ao&LKnn=2*@H(3+Ci;E?=yQ;PM>s1fTXV2#vkPO#X=Oum%jnJVlTEgV(k zeD&j;-V6t8J1qg*4(pUrLY`NOr6(QYw$r`tyoQ2>a)38&sGKj)Dj=`ZjRjVkF(dB` ztkYrD>{UqeJ_R>-vuBjl2pD$Sj5F`06@&``;X6&#obt4+))LC0b%sSRV7#rMC#$iy zwe^G2{&qFCX!V$x{!=~4BtR0I>m6c}M&B2qrAGw-m6_flMkTUeLT~ny)*?UsoSBDY zRE-skn|>Ul^}SO5D^@>NNDA*Uk@HJ)n-8|q1}rFtq02y6KgeGrhu z3uKWoqlyo!kaLhOGLEALpMJ!zN(I7aWqLj6${8!P+CvjVS%70j2Z% z%oJmG6}6Zd1ECj@MeF7YNAPN_iSl)Z6l&aQaYQ^H3Ig`S*+Ee{YS^$RPmy1=n*L&Z zRGEd7MD2`9tLHRr4S~&aYelZyf_iT=QSOvay*+^BMiZs8z8A6?-br~^o*9#2C`VUo z0t`DlCYG?m>Kb+J^L$SrZ)pfmf`u1 zBR-Y9iD5v;pz;B#ou)PMx-f&Y3vkZXJWA_F?43aQcbLfc+A>jZ)LsBI+u^4y_BFF{ zq*$XF0gNjq@>;3!q8D}FWnyo!R_l+RYTF|Wc-Xk9_HG#yL#O90IUx0cdA3BUKKNbK zz0R!Pfa}iM8Vj{1Ui=B%BhnYO9En$nHV|ZBt zJZlPGs@HY-J}H)-vX#qIC9C~r)IL*l?Rs+IR+L_kwQE`<_3KghiMq|D>tSFwpx7{x z>hAos?=hggV~LyV6}MDK6(Vd(IxQ?K?R2{an^G^bcpu>0*>l!fV{`+cHq)Ds_j;G_ z4QJyEZM*(pfo?kmYwU>B2kaQ%YCMN}P!(%8O!q0a4X*`sch@aOp&Twf8xY-AH%=+V zvu6O3o#r3ssb9d}`g!fq3~RO&b}mBQJ54{)(sEsZv-UVY?NO(c)xCjwS)5<>qg|mS zFHi4avS%GI?3`83YTCt_1&DQ5+x+#Ei^VcgfE+X{_K8tS>Gg!zHGXqWsd}1WEhC>; z@mQd5>5^9cArm!fis@biO#BLy(pt85DsefjW{GY3#{Gc2cAs;h)|y{ew}SGwYn?LB zHH@!uU;uPE^P*1lz3;TO9b4teMx1JNmvU%SOPVjEezpeM7!J{hV>Ne9G$M=LbF8F>BaN38tv9-)YLUw-uQHNyF7Dupq0EP6iUY^Ls<5voO(QGz# zsHG(njE0s2ndaqKFrCaK!`Wu+dEJ6NK*MV-?X9idEo*`0cuOiB%HVJY=|l!9rnlN{ zed*;|L9n0<(&W6ehvueYnOq>==*#97V#&t#*0zqhQE&g;XexiWhx*1D3*aP#%$zT@ z5=zX*QqzGnj+=-yQ!|YKE=lXUg(2UeIp5UC+?4N#H=SGz1#zy0K1_Vdk%xV<@&8aYL&a{a!x)%DJm6XjND?o48ihQ|!+uHv!2$i8BkV-W#2NJPxC_@WMHqp?S zOD7H~JaBN62M&S<4h1sH%`3Dsk1)|+1)(|8A&FhE8+IVQFvs0?7))#v)$joaPXT!H zkv2S%YLgXC$O?rQoT2$#qy!`QLfKqOL6~$+yMr5yt-(dGqH`3BM=Yf;(=^3Z7?m97$(-@2N3m* z=~$_ecH4}`NO@$k$<3Q*6&NS)TouuY+(A1T9;3U+Q3ZacLvakrAwrhX1XDQ+8I2G_ zmcy zLy6#}vC)0vs76`$1Y!xC>4C!r4ep`KE8-~Az#!$Wd~=xyHJD6&tgN2NzB8ckODF(ZBjAmhj-8x1a6!DE(t>A+TE z&m4zrZe>oxtMEh{J<@G?P9YPrJ~Mqm0~HN1yuNJ~D;(O26&PO39DKIq z$C?IPWiH9gelY6{Pb9xe`AR@^SHOXkg-HDSZJI_uqYWl=zHa7|` zqp9ljv`zu*^G&0xvulDkjM7TA`ssKNjD?e1uI?{@F@q+1n7E4`cDo!NPB+M73T z-psuG(gE+?c< z4_tjb2j)uw{Dq}7sZ{dA4NB`#a`vy$($LOwUL5DMnIE0AIrncbyP6PgW{VQI5*P#0 zDybaU8*x`Et&0>QQ&Ya08%()P!)~B(21| zka;xn+Y_Zht}VE814u`Vpq*Z~0RM3HsTx>A(rRfAu!VqY0e*eR6Y)M4Zboq|@UtBb z1K7oXvkw1(`0l^@48%R#Gp~j4o2bTnINW7`8o)Tfp@5SB3^x^S8eo?C%y(tDuK*kg zI0A4iUJ*{V*m#M_5~aQ zVE7Wa<$!#^BmmQK2*MA={WJg`_l$-+9gv|u?+5n)Kq|tW4!04o955MB1vnM36fhFN z_zL0X02tQ<)#W{}Ox<&VdS9x#Y#aLn>HxU_mOsBKhD+K{R-gHf7t3=W(9{gKHNtOg z#Iy26^zTn?gzL%nf6v$F_KEhNi+p99;q|}X{za`3e1L6*^_*>;er*5b18o0%j%@#I zYx?%jHZ)2NI}ff^`)504`#%_9xBXKVAq}zGKmB>{j-hh+dspJ z_RsrR?Y|P=G7R|E24fkW!=W%e4Rqv07dxCmD zUUg4aUGXj5O!Zwh+#JAU^*JAIfqFj$?lkp&D%?`QboF^AT#tHR47WtRFM~S^FdI+~ zI0bMjU=Cm|U_PJ*Pzg8CzexAIRK54YT>)4Qs8!!Fd>!sL0B!~N0F3~? zZ&h91uh!jPg!=#>1ULf_1TYMt9rtV0=XG$`tM?n>b^y)>YzCYOI19jU&VhR_;JbkD z0L}yO{rPY&Q13fMyXjwr=)Ps4;fja9Fn<0gjGr?7XEJs>_$hH)U(Ejwcqfwo zmm%#ps!_&IKSvVQ7x8a`cOv*_BK+%Wl=1LSk|19q}ic{?`zX{q)D@ zKh(7e+0%r?s8{df&ByB7c0Ivh3`ye#cDEw>;k06wfd9RF_xG zTU5T(GrvUtn4PiMGk1=gI+!6GNFG_WJ{0z~Uf5&lpNrIo@TcU}Y`A`;yhYBp4CG=+ z`oH_Po;QB?`Po&urQaEA+wN>s^{_w85zaysjP|S z7x<5%6`F@KzNJo;dJ|sp`k!1I^3QC8?)G*9k^s-)V8;b^Ff9nM^^SPmGQV_8uj#d@3`uw*E1*+ zb|y>kci)SEpjjT42Z4s& z)xK~1D)rXmmtIx(y9?Z}UU%@l(UGG$?0jzj<3HM$vp$QI4mV>_v%ev*Hk45o2)2eM z#F7|FfROS?0MZ330n@t%;Kz(ivz#lG9)#XNOZ!8gZ2iq)(s}oMc*(YsytB@_z>F{- z3(vo(Srj!}E^8>|XwE62Ld(|=&bwvem5tt+PrFJcXX0;TeqMe_K~a8YdSP)e@PC$J1LC6_ z6S3+!103lg+xX-1UzZngH3ID7Zv*~oZR1bA{^u~@|FMeSO!pf3ZUn-Dam(!jj9Z>F zp&U&i6ii$?5WsIn!R36;Xuu(WLji30oIBziFz14f0&xCg3?L0K7Qp%5aRAN{9|t%d zZ~}nyL*oIXLGQ_MIp3NNATEyi*;aYad0)x^^8g&JQ(~jmkbczOaGra2KfW7r{LrumnK; z22)?uG|-voChpc&ADxL4B!v;zEq0H6(U27vK~;D*)vRS3Tp z_v--b)pr}=eiuMp)n>q%0DgCagZ-EJm`;rNs*tt~NN=&se>_x^slJHPc}eGYt%rgPG8Ny8DDU*b8RZ&3K+z>+Kn$ed=0_cAK${H0 zrxo|C>Drawh4IHtz>kcOuZ4)O8g(v!+E<6)b+VKZgq%T(AhyQX*D=6PUPqp1H~lvP zKMF~{7R$N~qaKAi6k&;EOs)En&Y}Ge@sh{d#eWp=r;%ynir4>U%a(jfShHX1pU7{C zo0nOb$anhz|M%3F@$u(Ier|Xse&U^hw|4P!?D>#w{5b}Ekq^XA35orTUHpTApL5K- z;-{ZIn)M~pPu#q$Lux)p0QYY7QOx`)e1Nhx^>9JmES&b8*&XX2`{pqKyZA}un`|_= zh?jGHl;bJum!aKJCl-nr1Qvrb+9y)_*IVRGR?9yPaoNSsevi0$l^|aBJ>)EmSf9vi=~1uQ|%a8A_h$^icXGneHnyZDXi_kr)VgXbz- zm-)}Zaupaf00|KxlpZeG?QHJ@1csU>ZdYvFoBSy=JG3CRDm5H)2_yZG57 zQdZ+t0(|=P7s>VC3wf&zR4^}C+w`?U`A+=is`XD!yv_7427Ywf@)e0+!9+_?r6nr% zX>;+!ajx=K;HKM^{;wMNDVy_(HU2i2P=x$u?whTXUpmH5s~B_d4Ozp>R-XRoQ>Rk^ zG1L|2S$Fk6;ckwNx#PZmvG;O|FB_lC5)B-i$TB~l#rIwKA9M8#zi6L z&X>OaYRJN}msY;n@RPRtkN#Xwj;NQ)%uDq5s8&YdBM5{-!KAPDnn-R(b4C&@uPyMo zPxW0_Y@+|u8bz$^u`apT^edTm(%N^ti`!0l{-HmT07L#?NYrPOFm!wKw0&c z<9;~$qswpM=rFPP&Vlt!&&(etFH`jW&xJikfBgBsljq#>#osr-Jao~mpS)Bwa^fAf z3L{o4h&SPQ_H9>u^0#w7y`pH!u8H^E{+s_ZLl{H%O+CbRmlF*@<9PArinsPy`OQI- zY=R`9sljUuPf7!QgU#*U4r#fYWF!HvOn;OJ;m| zcFO2ym*0NWgFj$@5!Eael}2~@r?d0-dTHQ+oHZXDTV6SJ)rV8cf4sVQtXZ0Z&8^JW0siggjlI^EGy7=z7hkxfUV>2pVd;P(+t@>6p3nJwnjH`vrS30lKQ+%ptR_Xkj zic0MvqqwSae#I#rODESXEdO%#1G5iZ<~uj@-nT#eqdqbbNm^C7y`edfmYtcEgJ{Z( zI@F45BFcXuMvk?*QB~Ijxa8#3dD~Ap=jNJ!r#<>u$_r0cKOn1oM6xKR>u0WCfLP9% z>)#;{mq9sKfdLvdPcOjb40Z^b)aiJB3ohr6u7CpZA9x#E%F-*fC(=j!uH3kb*NDCRlBUI^xd1k zeCYG=H~Zc7%W}RG*~wtfp%VQQP>K8PU;vZhrhq;E9{2N*j%v7ffk~{w`!ZC@3cS1V z0BAh$JPA__Z-N;FF*m~L*L}e_$TCIzXx)Lfuyf7VdcgSS)g?2(U+r7;*OuM8dQAT6 zE;ku=?#Alh{q(Vg*IfL_FK0d5`aE*7Gb=@w@?Bz=rfO02zl%`w!)OsJ!41r7oH711 z)ITsAdETE?7=6v3cA`R2U&|{Jzq$TZ32XL?`A0)8n1zXacLngDkBZAH57KfFcqpJrVgb=Y7+3Gec>x3|WVH>3mv;TnUbI2|ikg9GwgIRk*joy%t<)3=(=I zroKy1LU%z_q5qQ*SIFkt(M?vku$Iv|1+tO?s+XC{X1PVxK%vZ;cFuCtfy1u{G0M&t zihQ3nebkuBH@|+Tx^CXXzsM@M8k9yAj^3Ezs&3M6fBYY5jpvbPhuCu!q3qY8Tv?Zu zT{AdmFO=og7Z+r{`RNVIUjE6xzkmLmUz%1o#VD;S^Z&P@Xm3O1Ujn7T5s-eqMt)s@ zqJ9qUjVNla)h$7X#5tdj(IN5q5-=Y=PesQx8{vKh_k6gwql5Yd+@~Q?y$JumVN(53 zJpbniCEQjhCAjW(9vI$*c%K2OcMaTc;I4!Fi!`N*)s0nbg}#M59q%tXM%jPjuyKn2 zPvOqN`}vT{=>IOdc3%DC?Oh2v4?cpiJAV(0Td+$KEVfa=aFJpLrCUji+Uz`Y5b zabP0si9ow+mL$Cc|6xc}J>G8z5=!b<;-f-5zk3?!MRO4i9YG<5J6HehY0Qe2@A+5l zv_X?whh8*&&?4VrQY9#)2y%<=*3qg*ZNu5<{AHZ37arJHeiC+JxWcYt>9u)ZFm6O}| z+jrCGC3k)EIMX3&+ds;b_OstSrM)biZ)`7SR%Dzm>q`D7Mj6||tKba#pw|Xb(nxSU zisBc*y#VeMv~KP?@bBT^hIseC!x8W5)ADcAfWd&s{Xd4|of|L$z%lc_aJhDv_FMY{JfJ-ba3Jmv z0&rgtYK6wCY2yALhXD=;(B|j__5IPfr)ZW27z;QCFb;4WfNk-3xcdD+PQo+y|Cj)n z2oUWxTX&zU-si#12XOz7di9+M-`Cv+(CY(m|BoiXN&xr$5OlZTz7^mHP!6FT`5Ay9 zfO~<20quY_0Gb|%{XaI~ej|YUe{2GX{XbZyc(i%xL-Jl7K&W49j3av0vt$`D-RcWIg$( zUZ+nJ8){F#50`5QzD4DrwmS1LMO)ntx&7j9@=yEYCp+SxEu$1Bx$~-?{9XZuDOx6o z%;4gtPA$2z)@egl2A8kRt?qx=w>BTnzVl$sry|&_EI`y|1~1x}|K{yG zXY5{d-{Bv8oAdrXOoFHkku5`;e~D**oZqRbW_;0CSM=XmXp1kaQN_p47HoY{|5Xof zky7iBnokC9?^hq=r%6oIIY~Pvx*YkQsRygkuKl<;L^FBZJ zj=y@JnlY&yS~4v~Ut_ZBcM#j8=TRB5k=!qEzXSrp9k|~Qy5XDgJQ9k(C*YoOG-koz zitNCAp;)D~Ekb{j9Qy}znX^WfIjyB(_68}}x!#;}d%-g|*REVyyyxh1L3bzNA_1Bk zum0!T*#D^s7@Acq#1`-3O!h-+p!oO;V@AjJ&(y3!D7rBNtDfX2e^&3~<4=D3n+n{N z3V6lCUl70lmDAsfxa_8%<42MI_zGXPK@twY%}i4?&3}hWxn{>$WxZes8tnCWo-hu( zRHD^}s2EZ;gU_AWUHrgL0 zM5UJ4!~ZLU-%nMa#K)hhQflsWrT>2pQBlXnD<1wFc?7M5HTxz0VtAl|+s=PV6Vq+u zXUSS$DM-_!vnEjIf`r*+IU=EsviF{WC-hZq5GCuye z`VYDP7o``8%j~%V_%FAOKW_gc@4*sAe0J0CLD-vZ;hl`G&f->!vAiww>`QwO*}eZL4UHEBx#O99IO z4BrTMIiOa3_QI`G?;GH9@X2u0sjLK0ufloX)pP+I=ab)ZwB80d1HkZ@iNs8ya-Ycl zPiNzsa{%W8r~>;A;5-21BwV20Uj+AJ^?o1Fa|!OZ0WJkhz%%*jb^yQG0ryJ44*`^O zuL1D=O>il9-w60VU?)J}p?eFS*)Q<^PPiPS-Jw4JKy~T&Gu+<|xJP|=A6&|_^!o|i zpQ`r{s4jIKKLwWgfS2_rSr_q&D_L6}CJ0*K~9I0A^&ie?+{M=RdgQor!P! z@s#m>ZYjb@t5VG8fRa+6N-#Kl9bnoQX>+b0|YWDrB z-2ZH1qlt=M*&XiUUew>7FzW377vlo+@MbWKJ>sR^0?QLa& z%era5OZzYK2tuU&7wxnn?Y|g~c3!mqN>#rV_Fwd){TJOrxU~OD2he_td%hhBI0`_2 zLK^OA|Hb=paF12*BkjNFPx~+Nop3YNceDe`0Zdk(h5Z-9O~Jcq>iem1O99k9(QhVP zk9uDWw?w@!gF6c_8&D271#l{04qz@|KA;9r2{;YFxT;i__X}~qNcX%{z4yXh0ay;G zRo^ju9qu;(ZUqSYFTSU(7hMAFz{LGUxTpOWZN7y4m+%wzUwjt!U%VIgUuWZ+&44oj zX92c%Q~wf6e`2LS(%wh607c6&c~kAxE9+;?ef6dP9=mqJw#)SGAO#Q1v6BWXlEkPX ziWU7%xb5(38mi1;9EO0DqFzwlEyE<~UOXc+bXRxRk8bT_`S-hXXMJ1vyQxbZ|9i?R-V->kZ8m3^Mc{;)A7&@?`!Xk*3BXL_5|Yr2_# z$!>poDd>e~$1Pob#90k5Jo3VRzj(akaI?&DaQ&^=FNEc0+&^vkyR%O#T(WJ~okzdB z`;|AF*6Il(d%qDdWDtG;=Yy@^h&FWRaIkMY3*MbmR$AmK$n0zSe|`S{``ED$?Ei3k zYu4N$l_j4Z#UW!S`63y~E`L4$Rhr1CMP-*|Ex+|YHr`8j0vi^%LEw_-uN8!n}*;(e69_GY+OBc?atas)bSBqR#J5l1MJ&wEE=M2>>{ z%UI?4?s2g4M|{WQn|I-E91qC~xDLzgZvUI?{L`18l7GWL9(VVjrvLKl>MPf#kNj@K z>5=*OD)Pl_UCusuPnjeLcn?6Suo-E-9O=It`NMe89c&=nFoZa$)h6xjCS!vvHh? zESihwKf;|1m!jUAaNkEZw!#fV#G~EToMF-`=hp8jTW@M~=k9FY@%jC~%6jVuPh4{U z?WhszW?H=vmk5Z7far}df$gkH`$lX=Wq$L3{a)BcJzW&S8f?MOjY-UQLDcQv(B1XV zvG_;iif76LcFrGBDtPIki+}RXd%=%xdijS9#~inTO1Y>+Hu<_ce&5i|?H41@jj=O+ zP*&b^o6u&Q@!P!y*j@SQoNnU3rJLW!sz0&EPxj6~Q0mf{myT_ja%P~c{%sQlzKB48H|b?KWJdVRV(d-UTpD#f3%Yy%4^zqd=o4I@C*Y)(9=Z@Zf z;={l{LYF+be7x`DEB^1-f7%ub00B_ zlnbzEl4$n*TTc(Y;)9_dhPI@Xzc6S;AlS|9TWQq4S}*dp_OZ9j-eO})vES3c{_p*E z|92OJ#xC#w9&i4qApZG(F82DJ?UC&%&UFa5(!*+)c=!u#tUn1Nu0-%(f$&e*#!p^p zebN4<4c;37q`^9*<}(lJm!(I%il6>$?L(70+Fy#a+r?jncrH=niibbn1gHL$IDbUY zp!c)7zaJi)yX6%Re}NLr@|XBefbUd*-Spp%uBFPQw}ho+DokqC-3!!bhOmXjO@ z{t_<7fvM^^@ELU+xOC{i_zyM6>Hq^f`pbCrFWUzHpMav71+d%x#w5W1a%}K_QElwv zKL+@(2fe)Fr9a1p{XaD-f(AL#I6suiFIU6F!=G)#{+w;c1F)O^2N9NYpYbn!Al{=L z>MpK=(}xgViR|CNZ*ugyl<-@iemnfj3s?ct@w_HS5a zl>Za9-!`?sFdw;?j(mjtuk4gtja+C)I>Md1((zPT?p&elPAXEXxj6qwu6G=g+O2=! z-ktkD#;X6+zfiV|b+P{wZO<w?+;m{7K4PYq@QgTgMaxl+fzl`Q{cVFwvGS&75m?Q z=a(NGmi{Zx7=9vh`;igQ`6DTBVEC~bJ+^rN4=881BHSU+Gwg!<1>6d}6XDk&{35*P zcLxrQr9YtZZxsgO`n_e$wFY8l&fJ$e{U$)O%4xp6_Nc4h-t^^f&pYhLpNyQf=^GH! zNxevg*cW_dd)BN1C##ohU%dUF z{YQMhd+o!AUVB^i^78MNpLPfHGTudd6cJ`%|7Y&=+^zke4Ru%KYb;k5uhjshbIYoY zTl$wYds_lcp_(e+8lQh@bK4?s(BJHDk_|@qQOZ<*drQl7Y0}DYxNUMN4im6tsHYv7 z?q@8s)JXA%8Qc)&Q7GaN=HJ{-j zWy8Kue~~Zz9xl&I$iz@j&kt_N4TE>L=|&D>Kh+awTytB?&==Dd-uk_-7GLt)a}h}= z0fG?u6vi*$5dx*$cjQD&^WTi;6OK?6louUs+;_xeTA3%NM$X|WD7&=a1+Q!d1Q#zc~Nd(65X4v0SbP5&D-%{0b&&f}A`5nHGkJsszTXe>pg@Bi6KsaA=~(4&j5C1{`DE)wm<)neE!3Iy?3kW zcj0~zU@#zZ{TIVUuKyZ|cl!aj{>y_nI6E%Ze~rRBuK(g*yL0fK>%a8-e{=oUY`i}j zF6V&K0Am51j~NFL)=H7gnt`Z4s2aWVbt;eQZ-c@QILr`N^6f4TY; zAHOpW^v?b-Uiv55kpIp^eCGh{rhgLB|FB9`eEf0yzs|JV#h(ZKKedfN zKL0-(adA$~F8)oxFZ4hBmU+iAq+b3zaL)sL7jQn{0>FiUivSk`z6aO}ph9IE;8MV4 z0M_U20M@G=0NOWQ1-Ke;4d7Y;H7V@(ZU7M1PPjJ$ZURv4aSPy9z-@rr0lNTq0PX}Z zJjV<_0^9|-8{h%3|G5wFV*q)|PXIpyFfZ5#QP$=C|MK;%Ngi;mHS;81{m;d>u`b#_ zQI>_m%y#|Tg0L(zUe(Zpw}JC;{+(xsQS#+1I?v#vY`g{~oGG2G1UC5v|1p%WNsy>l z`uV4L>5tv|ux7mr{Fn8Y^_^Ed{IR*ehW|vw#qyLRjq`Ia{Moj6#lxR#WB;#H5YK#o zUHoj{4*+;&!M-IICuOjdi(qS%j^AwDXX1`y{}SBQcFsyh&(2Rq{*OgG2LSBiZ${lG zzvN{Pe>Hl?x#%0csH-96L-jWw_*-y)8o)08l{)>iNq?{vho1YkG+Hy|wKB3|+FPf`L}{1X2H z_|*aI;$MKWr+miCXz#%uSAT-15+>Gf8t@bEVF+Xwe2(B7ubU6f4G~IBLC6yZDE|f#~B09f2W*(48Sh_;Rvgu2hJ9xktgyl zM4Ej#tt*lW1deeD{(BU{*u}4}|MB+UjDcGALi!UP|LgI`tA7LYKe0yuUD3bvrTHJ~ ze_0<0k@{ciX(RQ&3`adL^}hrAeQ;oj<=GHqmw9$Q<2R zU#R~H_diUVh%pjBjs9BYxv%xG5~huuayGbe)Fr-_`yc5nJdOe&+Rk{j5Ycy>|EgAB zN8<0o{9nTScQNp@58@SxzbEGZXu))-g5FSe%)hT1o$)HL%?4Ee+7I5V4v|Z;O~G>0RIR0 z6z~tgKLP&&{2TBY;6H%R0bc;V0x%yq-uVXbUjXs(;=-AD{r`aehx(`3`Ui5z{;L0B zU5E!GkiLBY`vOJ+_5)Do0&7KC?{*+u#z7u@Fkm#`5CC}$$AyOjjsP49pqzX(U<@D) zFcv`Bo%)kw0mlKT%QyjWB7k~j&L^J?cLE?CKwJ~yW~%okaAyNJ2FwF+#8d!axJhs) z1E#3Y)8I}A%ut^%gj)nCR-Y#VR~hbSsn6xA%krHAm-Vw8uK6 z=F^w#KL+^!|2F?G!uq|)?&B>8EVGKLian^Z-CW*^-qvb&3M(IF^-3Eg4z5Fe?&_@C z`j1|g&-m+YS~8#!=NkW@wCs^1rmlSaWfyXZD1VE!)keyNROAQk5rPI}F(oF(tfWs%T{N~KDn2>~ z0f;9AtejJzZAS=FNICA96I_|iJ4!{IVdrL{T#xU^`$jn|C0o|XIpxeB#R`CHoW_0EbOvk5STBCf7`-&f_+#agn?{k{426 z6uA$tNA5wnX99Hx>yW>!!+N^~EyvmS*f~gmsi&UC`Cdcc-nzo&BX=_)8H1 z2NPu(DL*9I#!4aScmT9GE0Eh$Chpj#*v4oP$acr}mk*A~HpVa5A{C3lV)&HcJFUcf zrW7O7t?cSRd4w}K8)WXnyw#tT9JyA!H|siekgV%oNFR!B%Ss-nwkXkkcw+ON$aHsA z-ih9;pKW0*Qf9vMMzjnXi*p=ox+)1ik?(J!1uI!pn1Mb5SM+sU2*FD!j%O600?L~QLysQQ#lDK|6 z192P6*8?13$QsQkZ}wm8wY0KMmfVtjo=S<8Io^st<~!E}X>`-qe9Jl3{#flO7Izdo zX=r$QhO>9Ke>NM@E$;EQ(-qDY+2TjZR5#0QA%K2@Eht*{60&WYNoZ1G|HK5=7V1&s zZ~VlN#AnV`m9&c;me|6qYYb3|o)|&&dgcc%1 z&-PN0qmy`bJ~B<@o}$k+^1PDLIps`KJwhmbnNr_rE6X|Bw9c_A=NwPONJyN_K}m<2 zvmn5aGWWsX*cZ{(mF<~lc+?|Y08asY6UMtTHGW#dDs#ZG`oEga`C!T@>k$w8wN|;+ zDSc`NY9I9;)L1mZrPRUx)rDtXOk*S5{+ULWg`#O?$;MAebPKRkvMv24-NtsR*c=Kw%M7%CMK)&78NWXFSMIb}=Arg#G)K$* zqedG`c5f;@V=XO0>9O6~si7=jG4Hd=>Izq-+^$?5*gq`hs*QbT7)djl0e&Yrv?{r?$afKh%GE z-v!X0cx3$#H7Z(bP^9}cNOc2RNzhj7@2|ZtwMpa!b~qgEVEae!Yb8(aovDo;J7%Dq zs0rlUDy=x;%OA93?jL1qls_~XnS7M|N*R@l)v|Wd-qdf>Zj>s;NRVe%_+fz_FRj#L z%q=dSgXGF%{r=OQ?bh%Ekg|ATg|>saz>8Xs{*x1SIU92#URbl7*qe0*Tn}TFC()V) zv)tKRdU@(Pjl4wkjAp6s-pHnZNw&1fH0F$uiaC3s=uxfZW3$}ruXRSGR`e>-bw-3R zOLhO()aYx0Sqk?qP5J&N^sFP zYW2wn%tM%^dT-Yya6P>-H{xj_B6Eo&aU)a}^8~lmnDw`|aI>D_7hKs|Ruds2DdFgM zfN%G{B?tE*xX!^Di`X+h=DvEnUS)R%Wvx7IU%5kYJH|sTQW|m7BRo7~?CDvO!TIYmSZ&2!54;IUZUtu?Oecg|kqWPOUl-_GNm`so_^F;*|4??gV|L!ueX( zl`_o%ht_h9dbXSTSi7a=tDsQi>q#r#f2kW7j*^aDN3xGH5AYQM$D!^2Rt~5w()GI$W{C-Ex)vp|&}Q)hbW4_h$X;Oi*@~ zgH(xHtGDj)by{f)9yShCoZn+IQ|vyUTPATgE$8cp;9ANaVR!ae`n%i8CD}In8V7TT z^I-wBQA&lJGgqw9m6{xX<%Y7?+D#5hja|t>Gx=vCYFbB+mHQ&(X0vRKKvWTNXIv^IflCP1qbl2^R;&sF74)^3d>bJU@&1~!g}qPevwGg=XD?Xg-DJGTT) zLqO9yhf0gBKZFq>*CNk`>z6Hu6dO3D7EcFuCu?z6ON?uGu$#SuoG5nbNLbxP{Lb}d z@$er9{LaY3v(QJ2wL%L~E4YSN)W$Kux~<1rh`kkp%C646Ar*@<(rR%uZ&CIv?b|vI zeGjVaF}v9jj$?NXC-)NVd-_rRcud(r_XY>szgDM=eVLs)Ct7PIa&b#UNm`Flt$n&8 zl^Ju3`@uM=H;CNNMw529dfmx!m?)3fdQR>Jc2B?2bBg-IRpA>V>W{JyMt61B_HvEZ zS+_aZ#$wm&*z00M4HJ3AHRoF#q}4v}oDE7^94R&P-6oWswVjmfyE@hpWs`v%xz3Rs ziCu%tef7Pqppg5cZ+29gjW6p@1`T~%SEA23WncWhri;+`dZKK(C;tuyIfIp?puLZl zN(F7jplzFj^-iO~D8*>+qiK_{>xQ$l8?=6o-cv`y8QkO(eQVZCU!#> zx3$H=+_T>U@)U~A4z@V!5po7+ z23>v463whP=Ux~)9jwiA=KcTPv5>^9{qd6x@#>$;zfxEBu zh-RapQqb9VbU4QHn+n>t_9AaE(+2W%3}+6;1dAPnZ?BLki+IoBnFgrO5EaY~Mt-R3x8CN)o^v?wq3Xi-KgFLQ0 z#`-*$bf{I2nr`jYu|c-7=B{Ph%B&D_*KB200G2|=^GCg~Qd|v6#VHgFp`1(_>C=J~ zHDRY+&BC!pYU?TF>*U2sHPU&mp2FCQOlgK8+*5dUej}Q)FZ?7TQ-s&&7g5t zkL5>fI?R3bO}}qbsvoeP=W6VsCS{&$LIJ(2kI-RGr9Q{b>M=^GCRL8{F}8yh^>UGg zAanXLX0hgC);{LR6oqk)%V`Ye`1MVww`kB8^}_CFgIPziE@UXbHR#J~(Gw|WkZNb_ zSeKr)k9od|a=pgYTbRx1(&zPZV_qwn(x4lfTPNDurv*JJ`;Qta=tT6fyUiLWPzu@L z8dpOvRigMsxz0J#V&`~Y%M?97yUf7?$d;^dYVRAtvV!QNwXtT46P>1p&?rbd$&;;ck_S^`q3lxu)dA7a zcl1J;8+PX~h*ySDSN1qDcLbE0ZsFuz<`lQtiSsx!O@MJi#l3CaJtz zC#`ZW`9gIm1d^b0sFXIx_21k(NMkq-3ajP}UvxozO<2_nUw-Gx!E8Xh&5_<%Ytlxp zZ-*8AQPEP%I}Xxo0;kVc;KV*7yC|x5-#FG=hlX< z%}UMA%`jGMZ1p{M@g&bp7nRKT+wCLgkpx~TiWB*}5hqXbJnj;lGRb|Y=A!+!pcOY` zMuokoXwixd=_-VnCeeCIlBVFaN=edxU!FQC8Vwjr8Sz#i!C~OhuqwL@o6)A|b{KZJ#I4)?x7h*aj(RkVgat@!;B=SP&rwZXBjtPmy5(` z;T|j=(8+qkk#R9-=Po)diIH$M8<5DDry!+M@EyoQc1U`FZ&z z1x5Lp>4n8bW$C$DIg`>o*@Z>vxw$!IrA3~C%#z&FO&t|&K7XaRezmvB7p&1gWYmY+ zf`L^X4U=m^Yy359LbZJK)rUhh0esUYzA-$6eBt)Cwapv6!G@Y7w%MA^}?(UV_Xkell%OwTOM^`z&P73ZfH7Up}>GxKw^3v)8_a`OvvH{I8(sR(<6 zNJpYH-_x5kx3q5Xwt0ggUoe4OZdI#Frh28*jrb9Mn>wae1zOs}%>n;(L#;uPX66-|w*(lP|vh+!L#ii+a+1c5-xw%F8Mftg#I-c##`~j6k*#((}nFYn^C55PS zxsytZ(hEzAO7T-zl9!*KpHtw;+SHNfo8&F@)*~5>Il1Y%dD&U%g?WXI>ACgUxrKG! zoUFW@Y;+7Rmo#{v^OmhUd)>^vqs0x8O8R4?+rP@#Sf`duuBlo$uV!IYZKdE>dbVcZ zaW%>O7~I!z9V)r7a^_v#yMN-ICI=(x6!sxhTVF5ls@u2@E)QX8H=wdt8pmgYWw+ygf~n*Ou);LVIh6ufY; zEoL=d-wpR-xaVRiJomX3-T}WVE7W&aM%mHb`qNDrr@Q#yj%Yb9wdI@%cN$vGQ22B2 zr)%M|1x>_O3~WK0u-)s^^EU_uYHPx3!ZVGoxM=yq#qKW{a!C&#n5-e-5fh`^}hh?|JQ$v8YB`#*RRR z+YC4Z_RT{FYwux+YIRB>1^y&fC(Gzarv6eo*?GEGwDhNiXi5JQ$4AbYyVO%Dg!st` zHN<3ns>@0FR>@%fTQYF;k5Wl8M-Rbn)_;FDzmL)XnQd}AgV9nx1s@Ec#I@{faUm$PnIM%wqDu}R{jqBubF|}y@p8AUFGpdPy6bn z*qI5{4gHtuu)f<7FvYqn=$!Z?H1V7dp`kz{#5r~wKO60T^0DJjxF;p&kcR6|TKhPu z5qU3MU&!YVdpTyM@7yZOu>pKpr@{1;i)Ve*<4-$-oYmf%|Dg+xQXev==+iLMO!w92 z_q?*8>&t*%kGt;|81>&){%`ND{1t-$ zEBQftUlui4tBhH8UU%kaSDc=cvGSoQ)mef4XSHxo4P{go zIWrb}PXK<)m8*)BvH&GXOd*tI3ABcOwMr{f&Na{nw&72l?^lCeqys2-&db)wJ0P^e zH`Ylt6Ht4U_?45xr=d3IqF&_zBI)#?hJ`^(v%J!bC-`!Pjq4#v^BmAD)~9|3-Ff?O*h>-+%>|@ z#$Og<@#4z{+2v%AppH$}eD4_2PG9p?%=86IhOZbITJR5q5f{hI#H|g7C^t3&KW8J& z+8Ogc&1Q=hSRip>U4*D7N==J@Iu4Wyk3o-2-9l%z)~`b#&DuHyGalpQ_`56ZC2RVq zF_mwA{Z4h=yoZ00Rd6*@)|oVsM7`4bDwlHtfL2RljbEa9(1Tf7Lu($ta?~py>Lw#BCY)6(xJ*ZduCA*RoWn2z0DbxAUQhn%&jS{msqa%7` zR|8p>a&IfXT8mr{Vnt^xDc$-!Ng?^us)M@GVMs?4T(JwhJdnXVrm?Z#rcr;swVjmK z_0yCtMvZ7e%Zp!@t^Fp2Y)>31vXyY`%>I~sCb|XKNq0-XNw@K2YH}w($~A!Y&QY_F z5_uoLwEHV}S}gN8do_A_KP}n4sq~DsH1cfeSbfWiep7m_Xn%Tbt)2GQ-fvQ8l^i*wa$|dZsQ++ZyJx}MDgFM+eJRhg@3oW0mHnoMTgel9XKJIz4jCAy zP*=@yIM;y0?|%aQrfiMNjaOa&9pam?O)LXT&XMj$`K* z7gLQTkM;Ubd$wD{m30%5nrCBc5Tjk@0xynw`%g~TRp)Wc#uc2q*nBx(RD_I zFiUm+AF1oxhgk~uE=?)S(xd9VUZZN31N~>Dr!UJ4%rM2%vvGdO?l)#R(_hNE;Bmc1fpo27Vf8#&P0*(~iDn5Sf$IYVAYjX<3jrRV;`2NKozkPq1X z#;ktyA3k8@iIG}e@&WS@W~tuWbqPEr%9tDRv=EWG#F4ljii)d>X$_#QFo|594Nv)^ zMPH-5GeC=CHZQNhoA9@NzPq5a^vKOnDiw=yzjWaL;1pVRMLpe;nxtVT{jXtUI5 zR|T_)Qr5`C*I_a@xI;ti*zBFNqUBr}VszflLto?K+1g;qB`At# zpT-zD+tGyjM5_%gMXY_o;)r%iR=a>RKYPZ?MW6cErDyJIW`)%=He~iGk6rKdHag7r zuC@y1M6|8aSd=)mMFDU{)&**mSvzV>xRA1Ahk4C82Jv*o0x6oJ?yMFllI#CuQ18T= za5F9`tiU2mi7R+}mN#_Ao~=KwvPf3HRSMaG`vPUb5~V=4N6o|?ZBl8YS_J!3+O5)l zH6JnutyTF2En2hW-(vWb;5&_rQjVmiG5T~~wqIqmxf0S%Sha#-uP*FcW3{8iEUfzn zf2M73WZUT(+i*R9?h5CMr22osHk@g6&VD&rEjsyYrut5ejKu>YYh+)sywU< zFOd}(HOdYH_RFnO8hS2e3MN6)>VQem|a-zH^mo{NrEvMv3zWQ{tp0sG}TXbD<6HRhCX`~R${6*t;j zG~Kb<<%)jOE(h$F!x)RMlkEWq?3e9G6aA`9GUdwt)7Gu*ZzK8mfc>(z>RYsn0sCc< z6Ut1%dd$Xg#Rrd767|Qdbqv@q)6!wUemT;%ZNPrHf9_^srYRk;U*?!!@W%oBWktIj z-A@eIFJrJEUz8j7wvoet{c;23A=<4e^?$&AS>pr7*$H9cY$h-6?Ye~I+b@@tRuz{P zS5+>Q=3zc^A#BWQ)mh0^sE<62igt6t4l8-5jl{MO6tmzGY=mj!?3~qEr1fbn@LlI1 zK68uC_`B|DIYN8Di>0OVDF+KNGaiD~6=$o`P0i!70Yid~u{Tbo~o(Py+}rQWuqD>c6>mREv0`v4gQsI0p>q?o@I#J6tYMpNCW9`}b7FJ;kk4+n)i`V57}+?xg3f)3V0b2~Avb(6sTo$Dv9*X5iB%x#X8hV>4sl7s^@ zqzfakc7<0bt4`92^ePAQzk7YkGP#VLs~w_N*26;F4@)(!!=Y8JByH=3Jkjz>tnSnI z6f;59Sq@SqYHbZ_C->)4&OZ=u1rHksD$egQnJIRk&m)f|NRZCg53RqR4~%#ASo*b+ zu)pF?-}5M^P+#L<4wwyp ziCTkeZ6Y0c6OQQ9lo5G%MYU$nk3nMjKp}%Q-=jCxTm+ zfWECgR%>GCmY`_}Xjqk;2)WXP{$n;=zpNG1*0m~UKss5AyINvg$sl1hvvVVy z*rg*u<3aq+^=0w!9|!!-$iuVHM#RqV3sEb0Zj`8vV}NyAkF^kc>!l=|T;DrVu_z<0 z7Dw|I9(CK-bsYL06ek3N-p!719I-xL>*dW)9iNYKg^xLX{g)jsc>4N6)ZDK+!c4RKaIFghvMcXg~I z$|eK!^&MTazPA+=P6LIT9hGL|%leZ+L*Lew=yOgvK)0{yBJ?tXDBDAjuR9#%3|5kY z_C8uF6|@zDwrvj9JBaq|TnQ;V`ei zv29NDwOjC{L7;kvgY_sjotiGU8f94x%@|jS3fgEH<>XwGxqjYwBH(&hD{=NK&`DJl zsOoDyp?WUV{t~QgaxXy8~_p(dJiJ;@G9_u}<>gHfj;iR73 zN^>Om0r&U2tjBV}zKr7rU46|G&8#=)u6#Qktj)1|b9*|Rp11$yo`n)D9-ZxLtmRY* zdt0&o^ptEEslkap`JHpm(fgxH5_jA0+nQ5-Zy~q_*O|nUVYxSUrMG^yx5*c*sc7^0 z#Y0AYs4W;+)zL7yCbY(1vnEu_M_+w7R1-k3Ht`K?=DFi+4e~6Ad!FrFk3Y_Ax4GQV_ z8uj#d@3`uw*E4>D9Ksgo#_R2AFMja!tYhBYZ~MyO*X{g)SrGess+s3#cde^6{fT|O zim02JNYGUg@=S8H`c_mWB7dI_>MriFnG!prXzm5MrN=mBES^0Sl=LnRv^>M&eh2Hc z+1}`}rCM`e);0Y;wvx02l=qhPy1rhCo`a5~C=Dx@Io1yY6}Y+QWWy-C;M)|F)v4?90oU zV54}oXHSOYcdm8`+!9)7p@_2z$>5v37nL;h>)CjECp$-|M2 zi~omOX_L~ey*f6?Yv$G%R%X)1wH>n$v}Q*a+#IF3)RkLmjP`R^ykJ zpQw&8d|Kewg!6rZh?RTkFmzi_Azz1~L<fZniF%F> z4)2sj9g1lR>Cq1F+0|qD5t|NkUp?#Z+mz}RR_D1Id#Fj7=bD%(+to+tFsD+VV`udk zr6IHhvbHw4U25%MMZH{PA&fcvF}avE=QB^HD2#JlPGc~~uWv%VMT5Sm7j{1z%sP^F zAw&7CL04UiLgtxDdJTzn=~?@j=c_2!Yh1mB*_IM^-4Znlo_W^*9fuo7gzbeGT=>ImT&KueLhKmaK4U?`h6uT$I}4M5n1CG!7`8u)dA7acl1J;8Sn6D6KoKtWICtT0Rzy6T$KC7y(mS7G-|4^MJ+H|%RSW0U zEUc=n6oxx``ySQU2jNCYD>kO)ek~9UU@k)~Z`y#}XDWAw&jMI3_OGGok;PxNjQ{+9IJkmOtpRx`Pm0C+CXX0;T zrh28*jrb9Mn>wae1zOs}%>n=P4t=ZW=-8NblU-Ppo|~IfR$AmK$Slb% z-DJSgB{MsN&0S0D25*};81e;Sr3aEd`Najfxt_xG%+g#BNG{G#FD%UWq-W;mW*6pU z=H=!WToa4K>aFP}tkj;tMtgf~^_rysa$>q~g9_O-0xnL^=|s z`Pts28P%gGyCAbLv!FP=q!2YDcT#CldSPi%DSiq|^78ZZa|%3Jn>zA*le~rAdQ|zw zoZR%>yzH#>!o0%9^xXRF+`>94dDwzwfuNq;Q-{i}?X zW@?G8ep$81P3Fhol7{P0$%Pee@9N(D6ZbR?Dd{<0vC~x|E6uB5-P^M}au>^^DfX56 zJs0%4AH`Z|%n@53+1YXHF3-our5)gZg{I6=b|g2$G;`mH+WQiiR8Z1+002F4e-(OAWo)$wY1AewwfAMllt@S77>d!LZ{tWwdK)zV z2pgp>$8$C4?tln)+&D=(7wP&Z-0S3g*zT(8rSgllKJw!`&;R_Zeg2br>rE}6mA>`r zogmeiQrOt=9WDxsG)0Nt>fI$~C7F6vxtg+UuB5iH0=DvE)dCKi)|0G=X{LuBjd++$RcG6>J)T=8_oMiuIn=6E$TlJm)98{6^n=$9! z^V%n4QH`{W9f1nB8E^*d+lLO;-p5$KLOE97IvAb)Qaagrx>sD0b0nao{|zBV&Y8Q^ zQz-@>lMRd@Udu_=r@EY!Z;RMBWS67xMYTUg|gKJGaVm%)#{QuSD1H z@mrCn`gpqYE|K+n0w*{&?CKM@K#w8+*~zQTFG&ysu7hl zu~nM&#DLUrJnZ($8sANqaHKy{-uivSzoA>Z9 zvI?$dL5QRYSHD{Ks$QsnM)@_m4nCNbHMHjOD@VQZ!H)1xMh&~$EDe0es|JOa+&a{= z>yLLhB7bWwJn@l(!T}!iZ5oq3cHAK?nX8`o>F54unAf8IJc1^3CK$AM7E8VjBPW~d zzr`94d#i<_*I##c{c>WhJ$glWe_#LI+v~5i9OWEtJ!WjU?#IXKre0~7w`-PXazf}G zPK5PBA?EzXt1TZwpnP?u_h8yX=$Sa$joz_gVEq@er8@^23i)4Hf+&pTPvct#zy8#L zZ~fxtKOcH=?mK^F=?O+6T$HvFc-i9RPb_M<^6(K0F8ADAw_Gl15$Hj1pfM>O-5meK zkl(DAXp7D9o~bI?Jow|Khw_u)nU&U_}{aP&18ohP)3QhenD8 zpHZV$hxdMz5vA0%;1kMD?_tc3*FuKn9wl6Xcp`l3I@fxn$>Dek1>>3^rC~NY0M5pB zhYhehP%OE_n7z;gvVm zzl={@yf==px{6;PtBBp))rXA6-&Ktx$K?8$iCaHcVU#tEB}>NiX)$Y;g!1Zoos%QL zkJ&UpygK)+XZ5(^>+7E!`spdpz5D6?uPLUp_UoL$&5;x9W}n zu#~C(_Li3E(xjE)aNFdG6GQbYeXZV5Mr(6@Fc1nfhBN8|trOQa`y1Cy%+AcrpGb}N z#I|6B_97uoP;t;F>pfJRzwR+B$#k7!tyPKE9vL#Ow%XU)76^KS>reHq&uD90r_U_j zOOp~xvwoIXA657AJuw=*ZEYE?UVn3=FGSm`&azKy5Bevo1)tto@aZV{$=*`&d>bo3G7HD66cCFxl0-JR!Pzrf;f9h^C0Vs%qZg zEB3b3x3_r1fnbuELJXb1N$(UvneH*!rI;+bl3nX%ZFqcpX;t^?L2pN4C3&o%%s$uD zGjY|X!2vd2+?7smuD990sM+5TSexYRnVOKWnDwkU3K!SSW-IXWb*@0+>FpMqX9|;Xmcl0;i(Ld^~1QOzHJ=ZFeJUC1?155JYFxfn&F_S?)=+&Q*wS1#A#I^A7{Yhcax*gdHzBRKy(Qcp^iA{o+QUI_ z%Y?Mb_PUnldZ<9F1FL=hX>|n!-n{y}{H#eixxUQ8NvBT`k?X0L?G3FAd+S3L(%|8j#mXZ!uS(B=LcKY>Uc|Q| z%h3!wefVdwh|;HFZz{TFr*q}5n-gL*=XS&JR2sskzF0&cOBzNB<(5Z7@WKE3Uo5mC z-+<}-Po|tTbMR{4`k`ycP+WtLG~urJm~Yig}C5mwM)x=pS=37JKH- zadVph*Ow?x7HJA+{bwbKUN|%Uc_kH#l%&hk*Z&gqVU1Fs zEvsyWVA;atQ$a9S&L^*OaS|_il}jayLsrVClDXcCtAamR*&U z7A=@%lrZ#?N=;-Jdo-zfUr?2Xr^|YQs<=YXSd#gUAafj^u1Ff0x*6W1JND(uN10I`W&ZH zW&ab%sa_X6l?K+SRTXmB|2r~gsm-Y_dEh+cRshCw&Q&qaK zbl%eP%0-^}^FX08>`Et&}$B zZpt+&S=B8|C{4GcwmI${>3T`jR34+)M{24@X_nHaa!Bd(g3>%ZZAn_oPpC~rN~}E5 z*!7$stPoF^^bTQQk_#$TwVixlRxy9Bl6jLzR73NokTX;YF^ ziya9G)t<^qCEu`dh2+{T2=d@5dCemsimb(awRseg(nkcPC3xDJv|6Z}z>hPU(^tXr zc~#Y(Idim1SV|Hf5+q`;tUgu=)ttoUU6Si(g3MF!bY;?VvO8s7Rlc;e*fXbi!5mL@ z#eAiHo=RHp7qoI?gv)z}R+EA+ov#%=cSLgCE9k838+4M9NASthNatOG&MG`5PbZR4 z*`w*q2RBzrnS0B*ejun?h^K8`EM*7RTP1s#GhqLp(5g9|2oq!fZ`Gb%XF(ESW1H+! z9I*d4U*$Mp{~vP^=z#ry_ZQM8Wwe=WelTGFpU9d`CzTP&TKAW1)lHI>!^y6|NmdRg zJNE|czfCt4=(;{I+JqS5carpheb4^8KbYbDAruzf!zw7P4 z_tsks*nbb$e;W+H^be}N`hfj+(roqB3AF+HZ!C=vt09tWu--52zX$9;l|5hLS*2P} zx2nb7PwhVk?7w2HmP%-Xu7BEpX;w7@_CLCwK{t68-==QB{zqv;qFc3Z9b(N@2kd{k zZ00{;|HGB8$*6<__CNAUV$rS>>JA6&fAr&7!+M>r<)<_DKhaCX?Khk_MZ5^pB15<~ zJmv!TVF)l{PQcqx=B>vrm{D7Bq;e^IaiGD6Q|#9?H|X}{7=ryQLMigD9N7JP@L*}^ z(0zuR;VKu~Zyal~(!M+@{*O;9oKZ)rMsRtwdoh2O;K#+q=u8g-yn`(qMvUNV_fq~W z!;g!L2}J-dgI8nV>RR{d48YO12*4#`YJlYoP|E;Z?JNTDpg=Xi3f#KA_;GP{u?WD; zF4O>|*Imy5T;MALaOs>Hpn(B=48T=>BEaEVfJO%3K7}rRB?9PDv62Cr8Gu6_5rFHP zRTQfjU^N49g_#Jz&(r`d4A9B|T-YH3@TfjD01qp32N-~>Iz#{(yNwuu{FdBp{5bl zHHHfr;35WK35o#6XaO!}fbTH?S%nC|B?oE@TN&UI{G_rGl2fE?!_TOyHf*ZHJ*YA& zgUzkjh^X3ImvSk5M(cchLF`l&#_50=OHwX_-@%$+MX*^MkC$?}@w2LxfwgkLurHXh z-RM`TMY%ZT3iutWMY$m43l_JB!hu%o7Sxck1HL*k%R?3Zs`{YM=T9ZeU`pIq;%E3i z_?h9pinlJ;@O_^A?8F(vUAUK0$yIUzDOcmCR@e2$H|EoCcon%nti{ey*8oY4j`Jt5 zjkrw=*8;=RE+->;(p{I3rGY?e%5{j}+vWJ9?P_%K>o+>P9%z<#E2DIKcUs`M0XP

;nGhMjM%?N1eZn8iN{K#EM#%|Mh`(Zt%~To=0`Ikzx52~~gu(jhQ$Q@dM% zsO$Um*=mn+UAql<7AKS-o9t0;FSjH1)05s5MLx+1*aZ{|yPN>yzK^<6m&v~aao2W> z{Mg(|PQaZ&vOM_-Fl5pXfMc~2hlJ>I%z*HRKSiO%x+Gl+C?Bv&4}qAm`eBh(1}ne#XqMA15mv zQQ0M@<9?P#m#c70!A=wh3;icRlPsCSyc+)$7?LGZL}3s~kvZnil87m)Pz;zJ0Hzhm zsKb_MST+v=%VHIaL98=8bd^UwgxHfMvRIZ2lksyPYD}mmMY^P5EQL=bw6e77ZcoG;EIl&2-PfsE8 zB+D65snA#IUog9p)OwCOna5!sFoGuIUq?E z_p$6D zp0fC;4XK&)8+H#*Ss-73nlU^@YWDqTr?o)J(hds@+-se z)!r$0`x?T@?+Vv+hAZ#9o7Z{A_~dXamK(nPc=YDH<8L|#;l}K`?(HWIIu~~*7CrLc z`+hbPcbS(Sz3aMZOL2D@Zr%>o;ZCFFtz(ye|LWRP@orac*{PW~UtsXPXW19Oz3Tk( z-QtV)Kmk$QJ(}@pvB-DZzlV1-{{(7oy##lYH|z|q`PB;CeKsg-(4VHX<8IC^!%k|N z5!^jICI9$W2469FGu}P$=?}6lyhax(>P66+>aZX!>u#SbIkyZ{irMUS`n9D!&B-pPpG!Hp@Rly~7{ zm9Ou?&mv#nH%6$-*AI*l8uIlI@Uza>KU#jdB-IN)CB<^q{t1unKjSAd#dT^pH&g6p z;@t1?hxEEhnwvDZi7K@oKe}A}gdYEgpU5~H)Nm=E;>J7|{{bJXT>K~eEOPN*#t3z} z_-|u`hFts%e%878AImS7r2633nTwM9b3D4gz)xg~8}UwVbzkDeBA zD;@CMfWH~@@$^KYHkRx zO!+T7503U^H}oyM4vqGj?Q3pY8BT42uT1nF+zc-%ud1BmS&}6<+_ssVJEK3Y^_?tc zwYb}T&dk)6@RDQT!Z)kpbivP}I0wN?S3h*cIoKGXp*VS{igj@gwfu5PDkt1YFL^); z!nudxC$cP8Appxf1?ksQr(-ruuAAv{GX-uE>n2rhB2QhdMj+2Uy4?HIBNac9h&Y2U zBRT+{=Gkzd(MKa8*`AiRmEJmExVauj{lEaHHQ=8x$Gbkz9-dGXY!9uR zP#yI8Lydu8>x63Gy6^-Xcj@!uRlRS*+~!cducgK7_XXNRsX;_5*SX^mtuDK?q@^4W zA6@m)7j()A@UzJO6O9q-+VXf~gt`Je5%P*IthSZd(UHSwBb*JM;%YH?6 z2#XYFz*CoE9f1?A(WGR;&mzTH#?K5Hm2LDhq&WwE)@ja#uZ~QuU{c%Fl(_Q{M6GrC zyfqj*xKh`M6c-qy(xtc%KDsj2k+&pe68tPuJlXh}A;nXSe!3_Zr%Z*Pb&99K*F42* zMT(~*h??RVyfvg)N?nI=az8W^p1O1y2=u_uB3(uB(ovwxsA6M;hE$cn&pK75mR~MO zU9ZxMbhyh9&OHl1krj7?8pzE=xk#`m*^!aXTr}S7tb<&X2|@rjefc)7pI&9KkIxv z7rr_&buHz)B6qeRh+1#H!`p~@bG``2mf~ikaI^NiSHQek$c={8%LI z7I<0Z$gM^{L*j0OpLODHxBPNR>LsE$cOei`=)OaCBfF#_v{BthHJYE*-rT_EH>lP- zsJ3oUZT+CyhC#Le-`=&XMiE5O>6Y|F5MsW-#D(Z4-{9M|tJw&RXc9+5gb5h&Biy+X zLQ>dvty@*MPTf=w4FM4<1&m8)??=hMjY}Y*)u3o&lzP7-~ z!nFy!I&_K=wR2wO3num#KcLsIE@3Fk-ZXy?pNyCu%k#;I?NJMPqzF&Bb$zo^-&0Zr{zj;)kAz#-Of4n;hxi|}u%*3A{94AB_#fhbz!d0X ziT@ET%+ca|3;IbfzT$s0-w=Nr`V#-+JYJ_h>f%rE4CD?}CH@CrIzJfRXvGp#fiw4@ zqDjSSwpys86{_>C`)Eo0kDqK~evX|AEG{{i$67 z&&J&C0}so>CS%?v4yKCmv?CPZsfSxJ&k5WNo*IPW#MWIYBJDxyv`w5z6(Il}iV%o) zD<*X7W)RB_#R+#(YEN^sNboaA5h8T!B48M#2&jbwfi<@XA+jJvsLYijxa4LKY6`^( z7r9adkAf5dAXkcTP>>>A5)y<>+#*CD+zi4Ib#Y=2dj6CKq6mG58Q1NtR1=u^U!!vk zB7jMDdlwt%SMk5#<~3Z4q}J$KJb}_C!p-ZBzjHxJ#s9JlD)GN?@0*F@C_ZAOxPdnXDOD!0COW^{LSFj(PW-Rc z;!{$uBw3~OD*jh&o#KC4R+;!;ytT4%S>zPZZhtt5|0VtxZ#lIWj~;-vq!+F^rRJ|EoQJiT^de-gh0YQ596rGwSW&d!9-+gYU0HuHffr zY-&+B{4wMuV#bdn%ZzhlyC>obqq*ZG^3rq1sbophUa!%6EwF> zQJQhF0Pw+wAAZPZygn0vTgz2Q3-l{d{3R5J;#DH>W6A+`Wy$UoWnrqnKT+hZ7ng@d z+8%z@Si^X7DM%NMloHhMM2~0*`^dn(I}PsC8Hg zA%DV%;=_FaplW4l(BtLv&Qz?_STYr}I2YNcE z!T*gR0gh#(t3vomfF=OL7QzN$?&#W7>#y{GfZnlhni7%245T`iiIo^*4Fr4FG#-qOo_l%c4{u##czXHJV&wI1+ ze>TD-&Efbboggh>e4{I8{F6`N_+JRH#=o%@Km4%J__x_aUuM2x-OZO4;5e3WJ;n~N zZ-jpn;AX(50G|fj0=N}$8{l@p?*V=vAm9BAuJ1D3|1Vr~uKzsX3xF>Iz6AK+fG-2? z0o)7t3gAA#{{egz@O{7^0PY8nM*b0ic{~XJA;80cuj$Vof&VDrF~H;cvp<3Vr+_B` z&jJ1n@D0E>0kW)rj_bbwJOlW@fWHL%72sQdX90}&*YLliU-SNZxc)BSZvijp&tHW9 z65wV1o;=mx0bT+8J>dTV{sHih0GYSZ{|TP|2=HUTzvyw^fd5nd`rqLH4Dcr4Ex_A= ze+Rq+_z%FlfS&_onkZ)J4(}-#`-S*V54aEV7KPko_|GLsu=RM6Y6m!(D7c$Z@Z2%@ zY3{pFuIaEd!2hBesktK^lK*Nkf-ca52as)-!cDH2yO(F+WsSmdlHcbu6X`UB4VCj zIlN>M;zOH=%3>EsOw0 zumX-LPEZ|6L?XBw20e-)WE9t#6tNZfcOvjft`Trq)cq4;a1NjwM0x|-91vD^!QT%G z%-qM3cMw;_+zRB+wF_~du2_7A{}526N8FA&g;CQ0a@(iZy%#Hp1oDrf?wPgKUov=d z{`(l7m74$Ei2Kw+k%$L%+=ZEDL~r$NCg3gJ!LDU=Kop5Wq;8X zqJP%>pD3mOQ@B@Z`&ZWdPi`T%|Fnf#x?d+jCXPf22a$N876 z6uE>_`~Pnc_so*>Z_l4OLMBuHf5m$@+eNa4#=ph?k^e2q|7r5~a`><5;QyTH&QkHu z$o~yso*Tpb$2m8SYp#J*%zK=BIX8`?1?rUx1+tj@eiHak8Q#fdKOcdtJ6*nb#^?Wx zo6^@`v!4FjB<`15e~bR7>Hl>$H}=Q;%2tegK?D5QhYf)zZqokz8Wo^~BmsVS3^98_ zEjl%SOrsQ;ymPEz2&F6BZx!o}2-X-uJDNR(%&5G1a;fS@^7U_ayq@IjqH2V^e%GDLhtD?I&>br9bJs z^tq8`TP9xlS|7*!2zHMB7}YWK#<d9_KswYEL-w*~f2r@3HT&hh=|Bzun!@S=Zdqw7SmK z*xpgs+}zaZ?Qpf#dz!sh9q#S(Zs~KmH@UjJ{r>dLo%US%7eK8>QLhMU(}mha(Lx;K z4$wl;MrkbP(=RdpzW9~Fm5*QFzO?_M&-8up#pS27v=WDjVG%@O5`R|H|GcwqNkpOTTkO+i7Os&=FU@Z&Q@TX#aj(F9qMX2L4(I5eD)6Ti^w& z@$5Yy$PxHQuu<_F2sj#+3VniZq}GpkZ==I^z`tv`xNrN2xc|vXin0;u#UT(OO}*q4 zv8NOQL3{!6Z~v&GQ2*fbp!$s0fV87{{&NWMKaKmBu#qqh|DH1yj0ETao~2-426{~n z1$)%cmwk14BxRrg#QXY!>>C>gr9P*qAWuCV;={8;`z7E6S{-fLufF9 zd+8#>(TTXTGa4I>uXGHmv3MvNS=a2W=if?)I~h(SW9qtynoPt3;gycQZo&D$dI_RHx^POi9iDBqgYDz z`%p?)iN}1O&Q^yXR6()df9d!e)h{i-{b}Xi=T129O+zvDA2Zl#h>PCJ+q)B^2wH|92%=F2y8eehp4QY|^c za%1E^`8*yyf_aOsxcsFdXMTNle0$CEw~qV5$TQ=vjy>m-)lcOw%Q2+dhj!bCM(jg- z>_Z{@&|dq{KE~5s&7wti&1KVnP?`W1H+wxU?Lh@ zq|fj*?q2YidqK5EfP-#un>+)={U46HLG1(u-Ynp#f5Bxq7qO+{KlvNd3_3T)J~i-| zTL?K%lb@d)+RSDq-&nu5r``9#gQ1U|aPsi_mmk&`EJ+unFXeOZ9_9RX zugUwYI(oWyqE~bIBV+w$*ZPebWR#m4waU^hA?kI5_pCc!eX{n4rzF3*|ID#R zGNfPs2(rLk5s4)!Le@=6=8g`leX;0xXjqNaynSi=`gd%~Ald3T)+_$qp|HkQtMPq_ z=om!2o&Mf2HPROd?hA~lvCJEHOx2bk+d>Bev0=aAw$ZsiFdF8NtG+0b42LgPR_{q9 z#@4J_6%X!FM+0%^Xebzq#-qCv&R}$O)kG+=d;hA&`uf&Yd~wxSOpVJ04pT{{3K$q3 z4MqH2(dbB6b$DW-anJEasOZ_o(zN?zC?036m>M#H#8Ng z(B?oWA{JWZm48y18JcUFTW`v{x2e45DcZfaR`~wGwLsD90F+f+54ZtvwDMo63&~Mz z$$up+o1MPv0wF*8F8uF77InoZAg`}dloOqba`h=V7voVBu9u$kDoPN~cWhFW=OGts z?uDERT&1j)d*}A`H8vammr!M9o0;s#Ot5tN_8%p#zUPV+6PF%*`<0O6y_8@nXQf-F zU}@2KAe>Z(hLjqXhpq~uFJ-Y_u&!iin0%{!C}1DjWgiOKhlcH?E?Tg1$reYE2V?p< z0cgieIhAQFDj7;?*5V8~SCRLn{L1(~u637MX62T63A5bhTm0y{21b_s$d!bdeDqW3 z^G_knC?`D)&#J-CP)_QG0N^=PFjArp8r0uP{ksg-nUJ6EXs74~EcUd=GVl4e@g&3YDwzR9+7cq3%W*XRgGBYnS4!Pka*l z6G8(lEwSO+sgl~)lK)n`{5QqBlZOZT6?I1WGv$YAnwYE0Z8p9pyGxuc-2@Acu~NQ9 zaIQuiDH~@Tv74AJab)Q4X?bO9y3Z}Tmrb`Ql^zE~l*=%mP-aa{P-*8((7yD{C{F!S z!+jJql6K&XQrvhRtXhfv2f21E75{!0X$|PF17yGBJOE=B67b;>;rSgXRa|#yINSG(2dKJW(Vof`IZ`s_jad3pyYn_fZmfPRrXJ;mRbrxw!O!DK03 zu8tdN8bl7jms}3lkI}_ZObt$++UHpA!V|%(2(03XexCACVO_)vKHLSM)sZ&nE7ySo z?*tF-!BsOj&eecAK#S6fxOE8O8})d?vw5z zMeJ{gq4fP}u3%`RhCAkBeZU=b_W3UK>4B6r&2*1U7V~noKUk7OC`l!8xs&N%$xCGS zmm_a42-?72iD>IKCq_lSbplfo^^QsxYZTKVIr@sqVyWuzDuK^k}0lYb^`J@%r3{dE_mARG&S1#r!V@Yet zt0O!+ z^J8Re0oODDzDn9rn$WnjeacE`zHxq%+MnyNW@|?L7Jv&+jq|z-dC*382&0hFK+Z1d zvQB0;m7Os-}`C6EdXqJn%e)o1JCaSuut!T z|5?D@04fE44)6rvK7g@}%&s3QAr9Yr81cRa_+xOvkJY^YIzw4x}TL3z25Y zRbgDGwDSCSrrbP^Ru&HSCpGyGw$)1>f5!3e(Wqq-D;J@4Y?So$A&gW}S_??$Dsxvr z9qcyZn(VuDNdBuE5ww;B3$9T9@+^R)?c$BhU#DJw$_7}5%uw??WBqx~Fs#vXq5Ch| znHruW+D;N@6%k^d7UXZ5{e6zlQuCic+;O`|uNeKQ6#Ji?B}%RT2;xqm{Z9@5sYFw1 z{znjZs_lO|%gFx$#Fh3xHv+rJy>s;WfQb=M0AeJckS8hTj#mG@15}55usnYd1;*2! z3OOiB<_nEGS+2>Pf9=G}>@Pa=@kbtutx((&B*wqi@9cXzk!s;z?tx4Bvy}ge^9BRR zm;3LDlmv&m-wDd~N-$;K-vp-C}bu(5W+`G=i3CO?8u0K@9Qua5C(Vv#W zO$oWXn17(YRr2`zI^veff3+6RzwG)yjWiu4(%-h?`P)8@IG+TR+W+KzzoDmVgU_N6 zC&))H1Uvb)6ND_c1ev4 z?yqyMB){$ea80)YK>mR;O4fyac|L%64YfP1ZrtNo38({*)~y1N=5ri30-6BL0OAY# zjO|9=o&56}z*@jX0P6lxPjEe81Hc970Js4jfU&L{ao-K#x@r@k2e28i1<(uV16&H| z2lxO3fUST*z&5~kzz)D=fXe}Xz)rw#1BL)s00MwrfFNKPpaOOS!hk)15MVE0AAn^W zg&zS#0b_tG0WknaWde`{$U5xD^#Q;^0427E0apR82K)}-8h~6s{?Fe&@Ylax^^G6I zpWODVhfjQyD3XEK`Ebj-xpRPhJDK&Z4exFL-f_%o((YXJUZw^4xZ*$$P>YE2DE=05 z8s6IGl6zm%-X0N{hjRg;ku=q_j7lXxWXxqKNDI;mj2JNwM%M-Nt5YEOaEtf z+D$d<-}#~cW9fg$ul~%89=w^Ak0si?VrCiL(*H2(C!dXW67uqF{YOjxgP1}&r5Pnl z>!FmU4_psvYAg5@>h`t(_$9(-NK^TB!e)du0;mn`sZ z=~5ev665@~y*=KZZkC@iP$6*J-xX({BH;dl)F-Ar|sGt8qQNk z@l8*ui&_ZBE&885m(K7A*R2 zE;+I2zmOnJE&UfK#-~S0wiViwE@&jumWEM_SxEQBG4l&8^SMlYd7gu^ms09Teb36^ zaPrBM=4NekWyenR6Hn~&tS@c36<>c)U$-*)Hgo<-%SiZ57D@_*R9>D+Dy8l`Z&Mj{ z&y*KQNpO!Q^}e!bKXV^rv)kQ+>T0t7${Ek4V)$~@tXN#R+rd_#i!(BYS*Yne(N^VxfGxno|&Fst?4(5P6P)AxeUHmmVmTRAMtQ+FrMmQu6k z%9O4UB5ID@bLG&1awR^b1Es!Wh98wf2Qukf_O2f3fO!nFTF-S^0?&>G~al>gnj+(uf$p{-HcrU^p>lz-yO3UQoHr;K+D z_q|vFc51%(%0fA3%}V`_fv`?+yiLfIjAg4_d)|{dP0|F3lssc3zQBC*jP_T4jb35j z<7+conxk*Q8ql5hP0C!kSXKInBK3K~r0&x<+9%Urx#!^U1u~R;_G6l{<5@C}w|YjbwfHm)6K;zG;F9Mpj`2 z!-WHeW&<1`;xt9iPmK9NAr62Rkb;ch$`8aAVWf2o=RH3#Dh!=ckVFN*IEDZRp#xVO z4jhzG-0@&>gC<}iEtwu_^Mg56S2>pFRu58blp7-x+V3!MW5U2P-D=OJmU9(b&FNy} zJ9BE4TwFGAAeVG{pv{ zs}`WSGz0z%jfWEK+;`^`Z9v78JFT%|pd4b^u@&vYw%JH)vBp1s|4955zLK$|PmJQU zwHj72T$se#HR~D8n$?U>eE+2bPx*Z%51x2oi58CeN)GU0ISA$`YwVnsBgiZSPI{h7cU`&IEa$?HM|dFd9oYWPv$bF`SM;-ZpS-r&9ZmSN8y>A zX471|F#Jf8Z+K)HPq3h+l}M&VyXn^eSSG(d^3tu;iJB8@Xq(z-zb03g+Psw{Tbx}c zG6l3`Bil!Oi>I72)IkMfr`dbe;odPd(iaHs3yi2SzwriB?pQ3k_i%8HKN(kJaerWVG!*fVM57~N z)iE3kjjR6nfruI#Ip80|T_B;tkM322iMW3}6i)`ij(8$D9Ev&`>l>Q<(XrhCH8LhM z%eV=~)IcH>jZB0N24cg0!)=NIIDGh!tJU4s-0W(vtM@j$>Y6*m^^J864W0%xKwEuXJzQsdTT9z&PvcdG z->FCx7!8Eb{gL75grUME_4uzVvc3i!&q8_8+4)i%^h`} z&EEReo+eLQOOyMmcUgPu{GZ=su9`aAU{deDlyg#Z@03g-OK6o-+uT{&I{#;#|I0n4 zZk_+*X;?0(jm|p%CtHIpVV(bzw#Llxq;mARGf%u^&+@styfTJat&>2Ia@K6K&+e(z zRL*~LPx3$3`9E%lnOTj^#TnVEW;kP=|I3x8P&PLktN|O(^+~+9&i@(hZ1LPrCI!tr z?_r()GaK`}Ds-NZb~MB}XY2f*@$|cF8|(aEF)LAKBcgKn#Z3BUo&PIjOKAGe{|Qwk z&OAm{CGL|_jY+C1$$itbs*>5xmE4m_t12DM**7=JU{nkh=klatqdozeGO9 zl%z&3zu91&|4U$RjeC;0JC}2#|BnV|3!Q(c0`|=QQ&~p57vHygT;#@`H?^jvp|0-{OH^X)+JWl1grixSe*gqN;S{|yd5CVOZ zQZ+n&R+0PtBjM<-KzKY5i82%=ug?)Yy4Xc zdRkpVPs^j}Y58kT;c947VvgtyxqQec+@# zp)>voIiT?TT3nwB-(zWw8SyHmb9U@Ib2b(wg;4s1z$@BKmF^R`pdAwK1{u%|ccBgQ zO+Bwl@yxd>pST&yjN3Al8TU^sf#!+q!YhZ#tkaC^YPn9c>_5zm^(@Q&1CM-J_8-JC z+}R-8E`F*{Q7ropx2|^GcZ+BJTlX*BBDcC`!2Uz(2**rMJOwhw@Xc_7OFC$H#xGre z9N?KpEBd8fnjBzI$N}P0#1$x({STaGDEcAjZo$+MSfVl-8sN+BISSoW-dv1Qz5 zm|NCE%xQ_-VzlhP%zg_#mi-rrt>(CF*?$4$|1is0_FrHu!Dx?=>q*Q0i*cT_?7vv{ zUnXVk#E(m*XO>arkcK>}d3N_C-&i=57!0Ws&hB_` z#21XIYNYxsgq)HN@$HFDXm<%UR_#F8$?34(SV)Z|G@DJ;XJ;k|Eu+yu?7%=^SM`d_ z1pCxjkZ+Bs&h6FbAndesf>d5|C*z6eXy~9iTzzidH+L-i2*OyC8XNv?wcJ6dJ&*T` z?L9lz<53L{r>$Rh5`Nhx)#u~KP-8;@FF;71T2X}~Ut@eSGc2QC7a}Zwy(r=`q-uC` z$1)zLWO-}r_(P+DT3!C?R~MjCs2v`xUq&qxR=$>%s%3JusKmUIm(8QyBJgD;>3=G< zMAus4Wi1h~x&=Q5lur-xWmI?55U3Rw0;y`-c*$|&-nm^HKsMWwc0AkWI}lH(qfVj9 z5_fh+W25nvjzQRigR!=C&CYuMt#r7P;Y2c~u8XM2L@W?q>F7)D3WtK5)B^+2eQIRg zuC}&7OR%N2VRcipTHn5UA;+x4EODoSu#hQTG#&^i)uAD!hUKBF;!t0#zuT1z4Rc)B zhXVGYUG|}%eQ4M|q}qpe+lNN%LwoE)A^Xr?`_MkVsk@p*i|o?ff9d!e)h{i-{b}Xi z=T129O&doZ)3;{_a5S>ebT+n}X)Ly*jI}r;;Ue$9>!x0f=2Gv=2k4soC0@cTxB2FY zZ9nM$T8f&MqNcD`X;41S(nU_`jHZW>xDwk=`MA zNBX(DnT>jonf~wmUY=Rnz_eyRz1qM9l(LRl#&WDkUyK=H1zkM5M-Q6E+F-#MF}9p> z5-olV@{~9r{apHKX@eNFL1w0h%uZw;Ja$=2+>m}Qj>r(t{GL#k8~9+s_}*xnnQnv7 zFptsp*;NjSC}}@~Eh}%YhSp_rzi1$y`jNw}fSKJrV%}!fugj|!6;q7gAQ*@8K@i^^ ziJ`V3eA|R|yZxBdEw{CEzaKGk-)fkh{hw|ler79(KI2E&RP>j0asTd6xT&eh?@{CX z649|t?M>Qwp-XX&2BMO+xE8A*My|dnk_?A0R#xvxP*nE>Kw!Sn@`&+6UR}Va^k?Th zz%BXNxnpO`i4}oJPk33sgKl}Kx=`Ek%Ncy1VuTxy`8n(c?du7wh@pEDV{2BeiU;?o zqk*_{G!%?QeSPaHerapfSWJz}ogJof>}w<@lc}pw>Ah%?00_TU?-jO>R4&$Rh*e{AZyEg{nd)(1s6&5JQL&IvU=Iu+{*S}*^rW`@0 z8iSLmsX%-OX`1Y7WF6m|I-=K?Du1!5EQ9Fz)I@R&hDJ#7v}^7FPVo#w3nQ#(F{!@j z(jgyI2vlk=47p;7T~U;5AUZ~dUe4k8R#jPbB&#F$-^^^97;?NU8Xc|v81f2dH7CnY zm&sLSe^V>}9P*egm;RJvvrVf!ho5YODqj5Drf-uP$6yzlFBS?qJt1vSLQ~_4#>+3) zBl;4tP-JAKV>BL&#=@apQ?S>&bEQn&SPBw?L||7~o!Y#1l964c?@!mbqoZSi7^n<$ z^FgmxuM(_2*u*~2IGR7I}5du-d5f#@inth;($!=iiT-zu$?u(DpV+A9c0(> zqibaw^Vz<+M_}Yp9X*<|tT}#+&XV}#`Qn$E#3x0MrgeJCzbcdxpV?6kBN~Zoqr@ld zDBa+d*%--AeHI|9CI1oDp3@rb)Ag-ROa5cV{*l|TV{SE zZZ?W&P%LGUroBeimjz$&%W{P_Q`l*i{7*YqvU9%5|E3U?499e4R&;BP|4Nj%{~DVP z$CC0LGj!$5v|yilV4-$G&9>kSlf9PIE=M(Ih^|AeEv=rmj@J6Rc6Uc-U2{W|`MIq= z@0LE7dy}in+m8*U^o`T)>+A2mq?U(7ZU2piXX95>@8rw2DN6e=1-L$Mzt7*<-J_`s zd3~D(di%u2mZ2;e1@pW6y{>`o-Ywg@FLU*KjJJ)>?XJx|wLIQtdtVlrNA^B-nG3ei%hf0FHC*=x;&e^xA?nyd%JqP z4o`pgpx5u)vBlfpwZq?sJJ*00e(xn-_khno*zMcu>T&o6wtBjI9gX!3O_N3;y^1`* zUPaU|IMT>E9@i5M40i^CiD)cmFK}6o3WD4mtir}xyjt5Hgz4!83zUTm7uT5O)h+h{ z&ovqHc~u;gOc&@*CX&4crA~4+lYrU0!O(XfhTxt`E^Ab zdtFB8Oh@=ABTys5#x|1?mZc;779*U2AMGqXBWSzYYHIhU>n$x&Ma zub7U?mcP8s`;7jqxD5;rEfNUL_=M^4_-w-y88$FJ zj#u+oi#QKKh6D{JCeBBQxy6U=)fXTvzpV(KO*MaWN6HL@ZUZBA@ITuI25E&hzE|SH zynsCOo~KqkwVtO0)vNM`ZLh9JSpIr7WWH%^;$O6!eITwe{T!yt3ZYmaI*7`5=tDzZ33Jl_btaDV>`Y+Q4qP70B)_*Y2IfLszo3;MSu-Z3m>%SmA z(ezsDPuhQc!?TX3mqzY5efy6RSKo8Riit}PzWqwb@m|K^re%~HQz(*O_Vxb(bMeq@ literal 0 HcmV?d00001 diff --git a/OpenPackager/App.config b/OpenPackager/App.config new file mode 100644 index 0000000..8e15646 --- /dev/null +++ b/OpenPackager/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/OpenPackager/App.xaml b/OpenPackager/App.xaml new file mode 100644 index 0000000..7feaa21 --- /dev/null +++ b/OpenPackager/App.xaml @@ -0,0 +1,8 @@ + + + + + diff --git a/OpenPackager/App.xaml.cs b/OpenPackager/App.xaml.cs new file mode 100644 index 0000000..ada54d4 --- /dev/null +++ b/OpenPackager/App.xaml.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Configuration; +using System.Data; +using System.Linq; +using System.Threading.Tasks; +using System.Windows; + +namespace OpenPackager +{ + ///

+ /// Interaction logic for App.xaml + /// + public partial class App : Application + { + + } +} diff --git a/OpenPackager/Components/CommonIO.cs b/OpenPackager/Components/CommonIO.cs new file mode 100644 index 0000000..85277c6 --- /dev/null +++ b/OpenPackager/Components/CommonIO.cs @@ -0,0 +1,73 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace OpenPackager +{ + /// + /// Provides common IO functionality via Windows Forms. + /// + public class CommonIO + { + /// + /// Browse to existing folder on the system. + /// + /// + /// + public string BrowseFolder(string originalPath) + { + // The result of the Windows Forms dialog is passed as a + // string to the method caller. + var folder = new System.Windows.Forms.FolderBrowserDialog(); + System.Windows.Forms.DialogResult result = folder.ShowDialog(); + + // Only change the value if a valid path is entered. + string newPath; + if (folder.SelectedPath != "") + { + newPath = folder.SelectedPath.ToString(); + } + else + { + newPath = originalPath; + } + + return newPath; + } + + /// + /// Browse to an existing file on the system. + /// + /// + /// + public string BrowseFile(string fileType) + { + var file = new System.Windows.Forms.OpenFileDialog(); + file.Filter = null; + + switch (fileType) + { + case "image": + file.Filter = "PNG Image|*.png|JPG Image|*.jpg"; + break; + case "bat": + file.Filter = "Batch File|*.bat"; + break; + case "txt": + file.Filter = "Text File|*.txt"; + break; + case "ico": + file.Filter = "Icon File|*.ico"; + break; + } + + System.Windows.Forms.DialogResult result = file.ShowDialog(); + + return file.FileName.ToString(); + } + + + } +} diff --git a/OpenPackager/Components/LMZAParser.cs b/OpenPackager/Components/LMZAParser.cs new file mode 100644 index 0000000..bec4a90 --- /dev/null +++ b/OpenPackager/Components/LMZAParser.cs @@ -0,0 +1,159 @@ +using OpenPackager; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading; + +namespace LMZAParser +{ + public class Parser + { + public Process proc = new Process(); + bool abortProcess = false; + + public int MakePackage(string fileName, string sourceDir, string destDir, int compressLvl, string password, bool sfx) + { + string argMethod = " a "; + Func argSourceDir = SourceDir; + Func argDestDir = DestDir; + Func argCompressLvl = CompressLvl; + Func argPassword = Password; + Func argSfx = Sfx; + + return RunProcess(argMethod + + argSfx(sfx) + + argDestDir(destDir, fileName) + + argPassword(password) + + argSourceDir(sourceDir) + + argCompressLvl(compressLvl)); + } + #region MakePackage + + private string Sfx(bool arg) + { + // Appends SFX parameter to archive. + string result = null; + if (arg) + { + result = "-sfx"; + } + + return result; + } + + private string CompressLvl(int arg) + { + return String.Format("-mx={0}", arg.ToString()); + } + + private string DestDir(string path, string file) + { + // Combines the path and filename into one. + return String.Format("\"{0}\\{1}\" ", path, file); + } + + private string SourceDir(string arg) + { + return String.Format("\"{0}\\*\" ", arg); + } + + private string Password(string pass) + { + string result = null; + if (pass != "") { result += String.Format("-p{0} -mhe ", pass); } + + return result; + } + + #endregion + + public int ExtractPackage(string fileName, string inDir, string outDir, string password) + { + int exitCode = 0; + + // Test archive before attempting to extract it + exitCode += TestArchive(fileName, inDir, password); + if (exitCode == 0) + { + string argMethod = " x "; + //Func argSourceDir = SourceDir; + //Func argDestDir = DestDir; + Func argInDir = InDir; + Func argOutDir = OutDir; + Func argOutPassword = OutPassword; + + RunProcess(argMethod + + argInDir(inDir, fileName) + + argOutPassword(password) + + argOutDir(outDir)); + } + + return exitCode; + } + #region ExtractPackage + + private string OutDir(string path) + { + return String.Format("-o\"{0}\" ", path); + } + + private string InDir(string path, string file) + { + return String.Format("\"{0}\\{1}\" -aoa ", path, file); + } + + private string OutPassword(string pass) + { + return String.Format("-p{0} ", pass); + } + + #endregion + + private int TestArchive(string fileName, string inDir, string password) + { + string argMethod = " t "; + Func argInDir = InDir; + Func argOutPassword = OutPassword; + + return RunProcess(argMethod + + argInDir(inDir, fileName) + + argOutPassword(password)); + } + + private int RunProcess(string args) + { + int exitCode = 0; + + try + { + proc.StartInfo.FileName = SysEnvironment.szExe; + proc.StartInfo.WorkingDirectory = SysEnvironment.szWorkDir; + proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; + /// + proc.StartInfo.Arguments = args; + + proc.Start(); + while (!proc.HasExited) + { + Thread.Sleep(1000); + Console.WriteLine("Process is alive..."); + if (abortProcess) { proc.Kill(); } + } + + exitCode = proc.ExitCode; + } + catch (Exception) + { + exitCode = 1; + proc.Dispose(); + } + + return exitCode; + } + + public void Abort() { abortProcess = true; } + } +} diff --git a/OpenPackager/Components/LogWriter.cs b/OpenPackager/Components/LogWriter.cs new file mode 100644 index 0000000..80ad438 --- /dev/null +++ b/OpenPackager/Components/LogWriter.cs @@ -0,0 +1,131 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Threading; + +namespace OpenPackager.LogWriter +{ + public class Writer + { + public enum logEntries + { + StartPkgCreation, + GenPkgStructure, + ImportResources, + PackageCancelled, + XmlGeneration, + CreateOPF, + CreatedOPF, + SevenZPkgError, + FinalOperations, + FinishedNoErrors, + FinishedWithErrors, + FinishReadXml, + ErrorReadXml, + InstallAborted, + ErrorWriteToDisk, + ExtractError, + ExtractSizeMismatch, + InstallFailure, + ExternalScriptError, + InstallSuccess + } + + public string Records(logEntries le, string str, int i) + { + string currentDateTime = Convert.ToString(DateTime.Now.ToShortDateString() + " " + + DateTime.Now.ToLongTimeString()); + string currentRecord = currentDateTime + " - "; + + switch (le) + { + case logEntries.StartPkgCreation: + currentRecord += "Started creation of package: " + str; + break; + case logEntries.GenPkgStructure: + currentRecord += "Finished generating internal structure of package"; + break; + case logEntries.ImportResources: + currentRecord += "Resource import complete, total resources: " + i.ToString(); + break; + case logEntries.PackageCancelled: + currentRecord += "ERROR: Package creation was cancelled by the user!"; + break; + case logEntries.XmlGeneration: + currentRecord += "Setup XML file has been created successfully"; + break; + case logEntries.CreateOPF: + currentRecord += "Compressing package..."; + break; + case logEntries.CreatedOPF: + currentRecord += "Finished compressing package"; + break; + case logEntries.SevenZPkgError: + currentRecord += "ERROR: There was a problem trying to compress the package"; + break; + case logEntries.FinalOperations: + currentRecord += "Performing post operation: " + i.ToString(); + break; + case logEntries.FinishedNoErrors: + currentRecord += "Finished creating OPF without any errors"; + break; + case logEntries.FinishedWithErrors: + currentRecord += "ERROR: An unknown problem occurred whilst finalising the package"; + break; + case logEntries.FinishReadXml: + currentRecord += "Successfully imported XML file without any errors."; + break; + case logEntries.ErrorReadXml: + currentRecord += "ERROR: Could not parse XML: " + str; + break; + case logEntries.InstallAborted: + currentRecord += "ERROR: Installation was cancelled by the user."; + break; + case logEntries.ErrorWriteToDisk: + currentRecord += "ERROR: Unable to write to disk, no permission to write to specified directory/drive: " + str; + break; + case logEntries.ExtractError: + currentRecord += "ERROR: The archive cannot be extracted. Verify the password is correct and 7-zip is installed."; + break; + case logEntries.ExtractSizeMismatch: + currentRecord += "ERROR: There is a mismatch between the original package size and the output."; + break; + case logEntries.InstallFailure: + currentRecord += "ERROR: The installation has failed with one or more errors."; + break; + case logEntries.ExternalScriptError: + currentRecord += "ERROR: An external script has returned with error code: " + str; + break; + case logEntries.InstallSuccess: + currentRecord += String.Format("Installation for {0} has completed successfully!", str); + break; + + } + + return currentRecord; + } + + /// + /// Write out current entry to specified log file. Recommended to run + /// from outside main thread for performance reasons. + /// + /// Text to write + /// Location to write log + public void WriteOutLog(string currentEntry, string logLocation) + { + if (!Directory.Exists(SysEnvironment.workingDir)) + { Directory.CreateDirectory(SysEnvironment.workingDir); } + + // Streamwriter must append all entries or it will overwrite entries with + // the latest only. + using (StreamWriter writer = File.AppendText(logLocation)) + { + writer.WriteLine(currentEntry); + writer.Close(); + } + } + } +} diff --git a/OpenPackager/Components/MessageHandler.cs b/OpenPackager/Components/MessageHandler.cs new file mode 100644 index 0000000..f854eda --- /dev/null +++ b/OpenPackager/Components/MessageHandler.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows; + +namespace OpenPackager +{ + public class MessageHandler + { + + // Call error messages by specifying an enum code + public enum msgCodes + { + ERR_Test, + ERR_PackageCreationFail, + ERR_PackageValidation, + INF_CreationWiz2_PkgValidated, + INF_NotYetImplemented, + INF_CreationWiz2_FinishedNoErr, + ERR_ShutdownCleanupFailed, + ERR_XMLError, + ERR_InstallerWiz1_BadDir, + ERR_InstallerWiz1__LicAgreementNotAccepted, + Err_InstallerWiz2_InstallAborted, + Err_InstallerWiz2_ExtractError, + Err_InstallerWiz2_BadPackage, + Err_InstallerWiz2_FSAccessError + } + + /// + /// Create an error message dialogue box. + /// + /// + /// + internal void errorMessage(msgCodes mc, string info) + { + switch (mc) + { + case msgCodes.ERR_Test: + MessageBox.Show("This is a sample error message", "Sample Error Message", MessageBoxButton.OK, MessageBoxImage.Error); + break; + case msgCodes.ERR_PackageCreationFail: + MessageBox.Show("Package creation failed with one or more errors.", + "Package Failed", MessageBoxButton.OK, MessageBoxImage.Error); + break; + case msgCodes.ERR_PackageValidation: + MessageBox.Show("One or more entries are invalid; please check the parameters specified for this package and try again. Errors detected have been highlighted to your left in yellow.", + "Invalid Parameters", MessageBoxButton.OK, MessageBoxImage.Error); + break; + case msgCodes.ERR_ShutdownCleanupFailed: + MessageBox.Show("There was a problem shutting down Open Packager, please ensure you have administrative privileges.", + "Open Packager", MessageBoxButton.OK, MessageBoxImage.Error); + break; + case msgCodes.ERR_XMLError: + MessageBox.Show("Unable to read configuration file for package. This archive may be corrupt or invalid.", + "Open Packager", MessageBoxButton.OK, MessageBoxImage.Exclamation); + break; + case msgCodes.ERR_InstallerWiz1_BadDir: + MessageBox.Show("The path you've specified is invalid.", + "Open Packager", MessageBoxButton.OK, MessageBoxImage.Error); + break; + case msgCodes.ERR_InstallerWiz1__LicAgreementNotAccepted: + MessageBox.Show("You must accept the licence agreement to continue.", + "Open Packager", MessageBoxButton.OK, MessageBoxImage.Exclamation); + break; + case msgCodes.Err_InstallerWiz2_InstallAborted: + MessageBox.Show("The installation has been aborted.", + "Open Packager", MessageBoxButton.OK, MessageBoxImage.Exclamation); + break; + case msgCodes.Err_InstallerWiz2_ExtractError: + MessageBox.Show("There was a problem extracting the package. If password protected, ensure the password is correct and that 7-Zip is installed.", + "Open Packager", MessageBoxButton.OK, MessageBoxImage.Exclamation); + break; + case msgCodes.Err_InstallerWiz2_BadPackage: + MessageBox.Show(String.Format("There is a problem with the consistency of {0}. Please obtain a new copy.", info), + "Open Packager", MessageBoxButton.OK, MessageBoxImage.Error); + break; + case msgCodes.Err_InstallerWiz2_FSAccessError: + MessageBox.Show("Unable to write to disk, ensure you are running as an Administrator.", + "Open Packager", MessageBoxButton.OK, MessageBoxImage.Error); + break; + } + + } + + /// + /// Create an informational message dialogue box. + /// + /// + /// + /// + internal int stdMessage(msgCodes mc, string info) + { + switch(mc) + { + case msgCodes.INF_CreationWiz2_PkgValidated: + MessageBoxResult msb = MessageBox.Show("Your package is now ready to be created! Click the Create Package button to proceed.", "Package Ready", + MessageBoxButton.OKCancel, MessageBoxImage.Question); + if (msb == MessageBoxResult.OK) + { + return 1; // Return non-default response + } + break; + case msgCodes.INF_NotYetImplemented: + MessageBox.Show("This feature has not yet been implemented.", "Information", MessageBoxButton.OK, MessageBoxImage.Stop); + break; + case msgCodes.INF_CreationWiz2_FinishedNoErr: + MessageBox.Show("Your package was created successfully!", + "Package Created", MessageBoxButton.OK, MessageBoxImage.Information); + break; + } + return 0; // Return default response + } + } +} diff --git a/OpenPackager/Components/WinIntegration.cs b/OpenPackager/Components/WinIntegration.cs new file mode 100644 index 0000000..1385faf --- /dev/null +++ b/OpenPackager/Components/WinIntegration.cs @@ -0,0 +1,21 @@ +using System.IO; +using IWshRuntimeLibrary; + +namespace OpenPackager.Components +{ + public partial class WinIntegration + { + public void CreateShortcut(string shortcutName, string shortcutFile, string shortcutDir, string targetDir, string icon) + { + string targetLocation = Path.Combine(shortcutDir, shortcutFile); + string shortcutLocation = Path.Combine(targetDir, shortcutName + ".lnk"); + WshShell shell = new WshShell(); + IWshShortcut shortcut = (IWshShortcut)shell.CreateShortcut(shortcutLocation); + + shortcut.WorkingDirectory = shortcutDir; + if (icon != null) shortcut.IconLocation = icon; + shortcut.TargetPath = targetLocation; + shortcut.Save(); + } + } +} diff --git a/OpenPackager/Dialogs/AboutBox.Designer.cs b/OpenPackager/Dialogs/AboutBox.Designer.cs new file mode 100644 index 0000000..1ae56fc --- /dev/null +++ b/OpenPackager/Dialogs/AboutBox.Designer.cs @@ -0,0 +1,170 @@ +namespace OpenPackager.Dialogs +{ + partial class AboutBox + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.tableLayoutPanel = new System.Windows.Forms.TableLayoutPanel(); + this.logoPictureBox = new System.Windows.Forms.PictureBox(); + this.labelProductName = new System.Windows.Forms.Label(); + this.labelVersion = new System.Windows.Forms.Label(); + this.labelCopyright = new System.Windows.Forms.Label(); + this.labelCompanyName = new System.Windows.Forms.Label(); + this.textBoxDescription = new System.Windows.Forms.TextBox(); + this.tableLayoutPanel.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).BeginInit(); + this.SuspendLayout(); + // + // tableLayoutPanel + // + this.tableLayoutPanel.ColumnCount = 2; + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33F)); + this.tableLayoutPanel.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 67F)); + this.tableLayoutPanel.Controls.Add(this.logoPictureBox, 0, 0); + this.tableLayoutPanel.Controls.Add(this.labelProductName, 1, 0); + this.tableLayoutPanel.Controls.Add(this.labelVersion, 1, 1); + this.tableLayoutPanel.Controls.Add(this.labelCopyright, 1, 2); + this.tableLayoutPanel.Controls.Add(this.labelCompanyName, 1, 3); + this.tableLayoutPanel.Controls.Add(this.textBoxDescription, 1, 4); + this.tableLayoutPanel.Dock = System.Windows.Forms.DockStyle.Fill; + this.tableLayoutPanel.Location = new System.Drawing.Point(9, 9); + this.tableLayoutPanel.Name = "tableLayoutPanel"; + this.tableLayoutPanel.RowCount = 5; + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 10F)); + this.tableLayoutPanel.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tableLayoutPanel.Size = new System.Drawing.Size(417, 265); + this.tableLayoutPanel.TabIndex = 0; + // + // logoPictureBox + // + this.logoPictureBox.Dock = System.Windows.Forms.DockStyle.Fill; + this.logoPictureBox.Image = global::OpenPackager.Properties.Resources.LogoV21; + this.logoPictureBox.Location = new System.Drawing.Point(3, 3); + this.logoPictureBox.Name = "logoPictureBox"; + this.tableLayoutPanel.SetRowSpan(this.logoPictureBox, 5); + this.logoPictureBox.Size = new System.Drawing.Size(131, 259); + this.logoPictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; + this.logoPictureBox.TabIndex = 12; + this.logoPictureBox.TabStop = false; + // + // labelProductName + // + this.labelProductName.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelProductName.Location = new System.Drawing.Point(143, 0); + this.labelProductName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelProductName.MaximumSize = new System.Drawing.Size(0, 17); + this.labelProductName.Name = "labelProductName"; + this.labelProductName.Size = new System.Drawing.Size(271, 17); + this.labelProductName.TabIndex = 19; + this.labelProductName.Text = "Product Name"; + this.labelProductName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelVersion + // + this.labelVersion.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelVersion.Location = new System.Drawing.Point(143, 29); + this.labelVersion.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelVersion.MaximumSize = new System.Drawing.Size(0, 17); + this.labelVersion.Name = "labelVersion"; + this.labelVersion.Size = new System.Drawing.Size(271, 17); + this.labelVersion.TabIndex = 0; + this.labelVersion.Text = "Version"; + this.labelVersion.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelCopyright + // + this.labelCopyright.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelCopyright.Location = new System.Drawing.Point(143, 58); + this.labelCopyright.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelCopyright.MaximumSize = new System.Drawing.Size(0, 17); + this.labelCopyright.Name = "labelCopyright"; + this.labelCopyright.Size = new System.Drawing.Size(271, 17); + this.labelCopyright.TabIndex = 21; + this.labelCopyright.Text = "Copyright"; + this.labelCopyright.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // labelCompanyName + // + this.labelCompanyName.Dock = System.Windows.Forms.DockStyle.Fill; + this.labelCompanyName.Location = new System.Drawing.Point(143, 87); + this.labelCompanyName.Margin = new System.Windows.Forms.Padding(6, 0, 3, 0); + this.labelCompanyName.MaximumSize = new System.Drawing.Size(0, 17); + this.labelCompanyName.Name = "labelCompanyName"; + this.labelCompanyName.Size = new System.Drawing.Size(271, 17); + this.labelCompanyName.TabIndex = 22; + this.labelCompanyName.Text = "Company Name"; + this.labelCompanyName.TextAlign = System.Drawing.ContentAlignment.MiddleLeft; + // + // textBoxDescription + // + this.textBoxDescription.Dock = System.Windows.Forms.DockStyle.Fill; + this.textBoxDescription.Location = new System.Drawing.Point(143, 119); + this.textBoxDescription.Margin = new System.Windows.Forms.Padding(6, 3, 3, 3); + this.textBoxDescription.Multiline = true; + this.textBoxDescription.Name = "textBoxDescription"; + this.textBoxDescription.ReadOnly = true; + this.textBoxDescription.ScrollBars = System.Windows.Forms.ScrollBars.Both; + this.textBoxDescription.Size = new System.Drawing.Size(271, 143); + this.textBoxDescription.TabIndex = 23; + this.textBoxDescription.TabStop = false; + this.textBoxDescription.Text = "Description"; + // + // AboutBox + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(435, 283); + this.Controls.Add(this.tableLayoutPanel); + this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; + this.MaximizeBox = false; + this.MinimizeBox = false; + this.Name = "AboutBox"; + this.Padding = new System.Windows.Forms.Padding(9); + this.ShowIcon = false; + this.ShowInTaskbar = false; + this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; + this.Text = "About"; + this.tableLayoutPanel.ResumeLayout(false); + this.tableLayoutPanel.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.logoPictureBox)).EndInit(); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.TableLayoutPanel tableLayoutPanel; + private System.Windows.Forms.PictureBox logoPictureBox; + private System.Windows.Forms.Label labelProductName; + private System.Windows.Forms.Label labelVersion; + private System.Windows.Forms.Label labelCopyright; + private System.Windows.Forms.Label labelCompanyName; + private System.Windows.Forms.TextBox textBoxDescription; + } +} diff --git a/OpenPackager/Dialogs/AboutBox.cs b/OpenPackager/Dialogs/AboutBox.cs new file mode 100644 index 0000000..8224114 --- /dev/null +++ b/OpenPackager/Dialogs/AboutBox.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Drawing; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace OpenPackager.Dialogs +{ + partial class AboutBox : Form + { + public AboutBox() + { + InitializeComponent(); + this.Text = String.Format("About {0}", AssemblyTitle); + this.labelProductName.Text = AssemblyProduct; + this.labelVersion.Text = String.Format("Version {0}", AssemblyVersion); + this.labelCopyright.Text = "Free Software - GPL V3"; + this.labelCompanyName.Text = AssemblyCompany; + this.textBoxDescription.Text = AssemblyDescription; + } + + #region Assembly Attribute Accessors + + public string AssemblyTitle + { + get + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyTitleAttribute), false); + if (attributes.Length > 0) + { + AssemblyTitleAttribute titleAttribute = (AssemblyTitleAttribute)attributes[0]; + if (titleAttribute.Title != "") + { + return titleAttribute.Title; + } + } + return System.IO.Path.GetFileNameWithoutExtension(Assembly.GetExecutingAssembly().CodeBase); + } + } + + public string AssemblyVersion + { + get + { + return Assembly.GetExecutingAssembly().GetName().Version.ToString(); + } + } + + public string AssemblyDescription + { + get + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyDescriptionAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyDescriptionAttribute)attributes[0]).Description; + } + } + + public string AssemblyProduct + { + get + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyProductAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyProductAttribute)attributes[0]).Product; + } + } + + public string AssemblyCopyright + { + get + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCopyrightAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyCopyrightAttribute)attributes[0]).Copyright; + } + } + + public string AssemblyCompany + { + get + { + object[] attributes = Assembly.GetExecutingAssembly().GetCustomAttributes(typeof(AssemblyCompanyAttribute), false); + if (attributes.Length == 0) + { + return ""; + } + return ((AssemblyCompanyAttribute)attributes[0]).Company; + } + } + #endregion + } +} diff --git a/OpenPackager/Dialogs/AboutBox.resx b/OpenPackager/Dialogs/AboutBox.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/OpenPackager/Dialogs/AboutBox.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/OpenPackager/Dialogs/PasswordEntry.xaml b/OpenPackager/Dialogs/PasswordEntry.xaml new file mode 100644 index 0000000..bb19bad --- /dev/null +++ b/OpenPackager/Dialogs/PasswordEntry.xaml @@ -0,0 +1,19 @@ + + + +