From 19901ff361c1906b587a12a5c989884c6b83b149 Mon Sep 17 00:00:00 2001 From: holos-aafc <95769272+holos-aafc@users.noreply.github.com> Date: Wed, 21 Aug 2024 13:14:58 -0600 Subject: [PATCH] Add animal example to template --- .../DirectoryHandlerTest.cs | 8 +- .../DataInputHandler.cs | 4 +- .../DirectoryHandler.cs | 10 +- H.CLI/Program.cs | 2 +- H.CLI/Results/ComponentResultsProcessor.cs | 1 - .../UserGuide/en/chapter4/figure4-10.png | Bin 0 -> 82003 bytes .../Animals/IAnimalInitializationService.cs | 1 + .../Initialization/InitializationService.cs | 5 + H.Template/H.Template.csproj | 4 + H.Template/Program.cs | 136 +++++++++++++++++- 10 files changed, 154 insertions(+), 17 deletions(-) create mode 100644 H.Content/Images/UserGuide/en/chapter4/figure4-10.png diff --git a/H.CLI.Test/FilesAndDirectoryAccessors/DirectoryHandlerTest.cs b/H.CLI.Test/FilesAndDirectoryAccessors/DirectoryHandlerTest.cs index 91249275..b260e708 100644 --- a/H.CLI.Test/FilesAndDirectoryAccessors/DirectoryHandlerTest.cs +++ b/H.CLI.Test/FilesAndDirectoryAccessors/DirectoryHandlerTest.cs @@ -78,7 +78,7 @@ public void TestPrioritizeComponentDirectoryPaths() @"C:\Holos\HolosCommandLineInterface\Farms\HolosExampleFarm1\Fields", }; - var prioritizedComponentPathList = directoryHandler.prioritizeDirectoryKeys(componentPathList); + var prioritizedComponentPathList = directoryHandler.PrioritizeDirectoryKeys(componentPathList); Assert.AreEqual(prioritizedComponentPathList[0] == @"C:\Holos\HolosCommandLineInterface\Farms\HolosExampleFarm1\Shelterbelts" || prioritizedComponentPathList[0] == @"C:\Holos\HolosCommandLineInterface\Farms\HolosExampleFarm1\Fields", true); @@ -98,7 +98,7 @@ public void TestGetListOfFarmsWithNoCLArguments() Directory.CreateDirectory(testFarmFolder + testFarm); Directory.CreateDirectory(testFarmFolder + testFarm2); - var returnedListOfFarms = directoryHandler.getListOfFarms(testFarmFolder, argValues, testFarm, null); + var returnedListOfFarms = directoryHandler.GetListOfFarms(testFarmFolder, argValues, testFarm, null); Assert.AreEqual(returnedListOfFarms[0], testFarmFolder + testFarm); Assert.AreEqual(returnedListOfFarms[1], testFarmFolder + testFarm2); @@ -120,7 +120,7 @@ public void TestGetListOfFarmsWithInputFile() Directory.CreateDirectory(testFarmFolder); Directory.CreateDirectory(testFarmFolder + testFarm); - var returnedListOfFarms = directoryHandler.getListOfFarms(testFarmFolder, argValues, testFarmFolder + testFarm, null); + var returnedListOfFarms = directoryHandler.GetListOfFarms(testFarmFolder, argValues, testFarmFolder + testFarm, null); Assert.AreEqual(returnedListOfFarms[0], testFarmFolder + testFarm); Directory.Delete(testFarmFolder, true); // Delete after test @@ -148,7 +148,7 @@ public void TestGetListOfFarmsWithInputFolder() generatedFarmFolders.Add(testFarmFolder + testFarm2); generatedFarmFolders.Add(testFarmFolder + testFarm3); - var returnedListOfFarms = directoryHandler.getListOfFarms(testFarmFolder, argValues, "", generatedFarmFolders); + var returnedListOfFarms = directoryHandler.GetListOfFarms(testFarmFolder, argValues, "", generatedFarmFolders); Assert.IsNotNull(returnedListOfFarms); Assert.AreEqual(returnedListOfFarms[1], testFarmFolder + testFarm2); diff --git a/H.CLI/FileAndDirectoryAccessors/DataInputHandler.cs b/H.CLI/FileAndDirectoryAccessors/DataInputHandler.cs index 924dfa9d..7bd5f72c 100644 --- a/H.CLI/FileAndDirectoryAccessors/DataInputHandler.cs +++ b/H.CLI/FileAndDirectoryAccessors/DataInputHandler.cs @@ -38,10 +38,10 @@ public Farm ProcessDataInputFiles(string farmDirectoryPath) var farm = _farmHelper.Create(); var componentDirectoryList = Directory.GetDirectories(farmDirectoryPath).ToList(); - _directoryHandler.checkForInvalidComponentDirectoryNames(componentDirectoryList, farmDirectoryPath); + _directoryHandler.CheckForInvalidComponentDirectoryNames(componentDirectoryList, farmDirectoryPath); //Fields and Shelterbelts are prioritized. Priority is set in the Directory Keys Class by number weight - componentDirectoryList = _directoryHandler.prioritizeDirectoryKeys(componentDirectoryList); + componentDirectoryList = _directoryHandler.PrioritizeDirectoryKeys(componentDirectoryList); foreach (var componentDirectoryPath in componentDirectoryList) { var componentCategoryType = Path.GetFileName(componentDirectoryPath); diff --git a/H.CLI/FileAndDirectoryAccessors/DirectoryHandler.cs b/H.CLI/FileAndDirectoryAccessors/DirectoryHandler.cs index f4383703..6f4ff21f 100644 --- a/H.CLI/FileAndDirectoryAccessors/DirectoryHandler.cs +++ b/H.CLI/FileAndDirectoryAccessors/DirectoryHandler.cs @@ -34,7 +34,6 @@ public DirectoryHandler() { } /// public void InitializeDirectoriesAndFilesForComponents(string farmDirectoryPath) { - if (!Directory.Exists(farmDirectoryPath)) { Console.BackgroundColor = ConsoleColor.DarkRed; @@ -44,12 +43,11 @@ public void InitializeDirectoriesAndFilesForComponents(string farmDirectoryPath) ValidateComponentDirectories(farmDirectoryPath); var componentDirectories = Directory.GetDirectories(farmDirectoryPath).ToList(); - var validComponentDirectories = prioritizeDirectoryKeys(componentDirectories); + var validComponentDirectories = PrioritizeDirectoryKeys(componentDirectories); _templateFileHandler.validateTemplateFiles(validComponentDirectories); - } - public void checkForInvalidComponentDirectoryNames(List componentDirectoryPathsInAFarm, string farmDirectoryPath) + public void CheckForInvalidComponentDirectoryNames(List componentDirectoryPathsInAFarm, string farmDirectoryPath) { var invalidDirectories = componentDirectoryPathsInAFarm.Where(x => !_directoryKeys.directoryWeights.Select(y => y.Key.ToUpper()).Contains(Path.GetFileName(x).ToUpper())).ToList(); Console.ForegroundColor = ConsoleColor.Yellow; @@ -81,7 +79,7 @@ public void checkForInvalidComponentDirectoryNames(List componentDirecto /// Swines, if the user selects their HousingType to be pasture, they will potentially need to be refer to one of their /// created Field Components, which needs to be processed first in order to use it in that Swine component. /// - public List prioritizeDirectoryKeys(List componentDirectoryPathsInAFarm) + public List PrioritizeDirectoryKeys(List componentDirectoryPathsInAFarm) { var validDirectories = componentDirectoryPathsInAFarm.Where(x => _directoryKeys.directoryWeights.Select(y => y.Key.ToUpper()).Contains(Path.GetFileName(x).ToUpper())).ToList(); return validDirectories.OrderByDescending(x => _directoryKeys.directoryWeights.ContainsKey(Path.GetFileName(x))).ToList(); @@ -249,7 +247,7 @@ public void GetUsersFarmsPath(string[] args) } - public string[] getListOfFarms(string farmsFolderPath, CLIArguments argvalues, string pathToExportedFarm, List generatedFarmFolders) + public string[] GetListOfFarms(string farmsFolderPath, CLIArguments argvalues, string pathToExportedFarm, List generatedFarmFolders) { if (!argvalues.IsFileNameFound && !argvalues.IsFolderNameFound) { diff --git a/H.CLI/Program.cs b/H.CLI/Program.cs index c2731444..cf33c926 100644 --- a/H.CLI/Program.cs +++ b/H.CLI/Program.cs @@ -75,7 +75,7 @@ static void Main(string[] args) var processorHandler = new ProcessorHandler(); // Get The Directories in the "Farms" folder - var listOfFarmPaths = directoryHandler.getListOfFarms(farmsFolderPath, argValues, exportedFarmsHandler.pathToExportedFarm, generatedFarmFolders); + var listOfFarmPaths = directoryHandler.GetListOfFarms(farmsFolderPath, argValues, exportedFarmsHandler.pathToExportedFarm, generatedFarmFolders); // Set up the geographic data provider only once to speed up processing. var geographicDataProvider = new GeographicDataProvider(); diff --git a/H.CLI/Results/ComponentResultsProcessor.cs b/H.CLI/Results/ComponentResultsProcessor.cs index 7cdcfdad..5401e473 100644 --- a/H.CLI/Results/ComponentResultsProcessor.cs +++ b/H.CLI/Results/ComponentResultsProcessor.cs @@ -362,7 +362,6 @@ public void WriteGHGAndCO2EmissionsForEachFarmByMonth(ApplicationData applicatio // Farm name stringBuilder.Append(CLILanguageConstants.Delimiter); - // Component category stringBuilder.Append(CLILanguageConstants.Delimiter); // Component name diff --git a/H.Content/Images/UserGuide/en/chapter4/figure4-10.png b/H.Content/Images/UserGuide/en/chapter4/figure4-10.png new file mode 100644 index 0000000000000000000000000000000000000000..0cd07bdcde52bafb93ff1b7e7c1fff83d9f8cf6d GIT binary patch literal 82003 zcma%i1yogA_b<{V4F}0XNOS1!21O7=2@l=Pp&O;~&`3x~h=ihaNjK7|NXns+Mgb|` z;@Twbop7&G}n%{!Yw8Ew$VDH27#}Xty=gm37h3FutLop`&oo zL5m_?s4e(|=caDxfrduZee-iGm79nbJf&-|XW(h@KvUAv)fr}PpJ>Bgs{*~_H0W<%r#p~u37??Dlxs?Z>0F3`;SWu|+-_J`b zSb5xB{@uwVYs6m{e_uJ-|J9S5xx0t8o}Zhw47;wihpU&nrS)GDZeIFFh?2Xtxu><2 ztRTOjFfYG2uOPoP-~VyzrjP%;pyKPPVI?bOE+#G{ASlMmFARPOTUm z-2b%w^{h1Cjdq>v|5nOh7yoGG-#7kN+20TTZ_D!kzf@M1|1Oi8m%GznCSYaBXYFL| zZ0+KCvq%E}ERvO_q^G^7ll6a=NWsbTzn2Kuo}`nxi>(a1FRzugjk%YTC%dcylou-S zf0@cZZ%gz2Z-W0X6ZyLdm@P11zJJXeT>QIHtX;tFa0lC9*G=0F4GoH>p{$_io4wOw z>qcRiwINk4KuX?p?6(p;lQEM)Oe^5y!{XANvvA>Tv$D4vyzGp#yS46o>OHy8(2K_+ z-HFTB>`cSW+KjWDbKvkvAkK$ORs2@x3zxh-?O*LopUb%J>1r5~{Rzo__)<{&^>Oxw z^m<5@md(}hpXtj!M#w(Qpe^9rxpDQA>#E&@-#IF3R8%|0Pb&Pb>rw)Ua)0f+ebt-)i?Zssk6B{nUaxu6f&L zN|Sk|PI=*vYJPo1jYSnrm<_lP{`%_S=tDR7w9$1wdsr!We$4M|V*g^~s%q}14Lw`P zn9Y3C(uT0Tz~ycmk>3hZA@0vao6d2WYRJ~oS+zpQb$0T?X0<|j$n2j#7Y+M=u1oeE zhtIFKCd*WZaV~#XKX(n3-5lntTFTRVLffCz8**pttooMl(RzB=(z(N?)KaY7x${WV zQk?&3Q?^gru>JWiuD{<#mid05%+K96-N=Ld&tJPTgN2&yk;|zeZFjzOj|7W!4@ia3 zPptmP-wzhrX>pBe`?C;D+&cQZVyz^>NayUKVL`51(7eB1wdfl;d!hA|y737c!at%b zWk5^+^1y@P_R}_ovqe)*i~?)3f+H{M{Ob$&ui-r6g1hGu{s)euQ5(}-gE$}Ki_vl9 z>=f=O|2~-8NoajT7;MzacvP91rj%JrcdqdxKevuS^>_G$!zTNONa5;<2~*iRvX+xK z`}Vd6edBGTPm9uBxd)?`h|V|X6d3EM&uRjNpho9%yr!przW*pAzRvu0t$($6QMDgn zdg6CFxVRs@_8NFX^_gj2r zH$ke!__x@~hXlzU9@i&n@u_QFkOA6{fe#I@FBPH&j;<#sW>QaQ#j1`z)_b0%)Hi?4 z9}l4C9=yn*2}&G43yW3ddpQy(yEA|G1{No`J$ts|lDfvi{VJ|tO`B2oQ_Ho2^|I1W zQ&T_x6T_S#RYo7z`7*T?ZU5`vlLMVmy}3V2crNFfztV@qEna3%oPOY|T0F1% zGiUlM_=tY2MU8h)Y8CH6fYyyY4saj;vC-F!8j#}+c|a_)7~ zv}7e#d*rpYblOUPWIkw~TQh9G=;C>NVwqV_d%Q*bCaaeI3Na_ZSWAClo>i$_O+2S% z_r-iW{Z(}^bq&VLvS)t+C9Yhr*N$`JU$;<^ zVlqwp92V@Y*neOuF9!z(Ddobb%WhbFl zi4S>W%eR17lYaX%LYIuA6(0gyy8SW$QZCJ#Uhwv%`>*R`_g%ln%PO*#)z_(md}+Gc zF+P_O?rSd1?pp&n1MU(=ALsp+mu%N89=~Yg)aLx4+IX(m2shj_X+5cdSGvm>6)=7@ zX*+Fx`8dsykNe4P1OfNp!uyX`#cT0x@DDuc<%=JA^vhlb+}}!lS~<7|8F)J=#(lrE ze!jtOO;=F($i!qcaA1?O{(3c4DRKoyK|?*mg;nA%HfBp z_l|uXh${zM2EQi5v}M*la;F!pF|XZ>@=i!w(DG5vak{GHZitlmX*VvjQ z9_8cYt=HAP7yHR;uXDJ1!!=vN)Mm}8=3v?L^RGue*6c{vY@S9$K|>Yz<9FW4TL9ns z6(HuKKOb<=#~30VtVlUw2%DS=}B=oGIQXMnzbJVZ$b*Ez>w@= z64$_S=-U?&1d3!N5Jwn~~^DqsTk$-v%y{^Mv(`7hy60Xk}3<;>Z6Ctma z`}FU>UG5rvo!iYPf^a4wy`R_{)Wm&5mm26{8& z`Xt-8x_hwly$@Oa_2;{M7#j&sIS_UCv!Ud48rcd#wh@sD=R-Xa!fKcNM^h!9j&Kqa zYy?7~L`9l3Jbn3&C24qMOhs1(v{33s3>B$28O4pnh{(AAwAPV$V^d%%s1tOE`Tp=vwD<&!7F#qN~6&_)IdcVwb{9j5Y}-Qyhu6I#qa$>Rrem#@s)i1%*6L z8kqUZ(4Fp^&Q)=xSpVrrR0S;*0cv3Sg)4Q4 z7YZ#T?Iijfn)u~r0jF60pTa&tcYJwpx8j9SC}2FY{y#TEu?UJZUkM7lpqKKVa!3$! zna_~$DEcMhwLO)boNTnK~M&NH~207SlpfG;%aYs$Pxf=hmd{=2-sm#;Baf z`p_G-1YKq|6%`c|6BAWc)htnGBUy}Q>AP`#O7`~lUq2duC}#{lTdrRUem}hzu8;Fy znx&6vI9vUk@{~>a{gV&aM0CDq2j&@`55mu`PM0=@vo@@kx7vGRpt#-_C%Z>SM@E!N zcD}e$r#JJ)>Llt7eMtO}1?B<<({;2qxWCx))R}4Iwai?(shr~nuOD9m8RUWk>34KA z+Iz}P+k(HhKY#rG$!$j2z}5bwTCT{k0}}7^n;HIPH2JCxKKl%Gzm~hAT32RHK0K`- z$(8$avETN!Io+z!*W3G~Km|#~XOf+sjw2Qk60qevSLdw%5&j!&Q$6kIf`WqBSVG5l z0jGNxr~BH|U(&nP+k3$L2T7$wtojorNmT9Baiy;QGxi|)?)=sdMzuzDPTyAg5?YD} z1_z6^a%NkDE?&-yXr&=H*4LRIsim9}Sl;sI`hoxg^YpwNf1^guuH`gQ zh*w-yUF{frA#Mnh_1T;M?!3aB!>ZLLzH3JP@c30)v-~JbXt4q^JFt z-p<>fo$f7MY!&BrHqwf@H2WS}7{G=ChB5@oRc`sTcy8$qOT8n7$a!t+fr-F#va_?Z z#9Tk!nr{pFb9T4_`mua$PTL_QB;?`Ykw5DaFkGmSf_^cYTi~%V0_@UkNWa`45i)yS}fX$aO!xhXTHICLCMa07pDTY-P7?o1b zp|Zst&(l5QNbil2oZOIWzs_*H97!+t;fbDikKgN7d8n7{<4RoIEX%FV`0mh$kK_eG zr!&od9vP=P3@3#@@CSsEHbHbQb=3S#mUesA>*9jtMeQwpOGA+ zDl5D|$$q;guOD^b9u6^sa`Jc7+S=OTw)~!X*Ma?y%8`bKmegkBChrb>nShh2`}*P0 z4GmD-(1wOFC>lK<56|WH`|_PVah_~qFht3~Gq-oK&8qNAV3J^exbHLXjKApv3%9GM zpzwTw$o0-btDwVFNp?2fX*YXWPG+q6Y>j-N{DJKv6%qZntuyj&m7VwCdciBL6RfyL8F`RsWW!zLE74(DL4giUD$Epqy-tjcp+O*4XDTh#5|IHh zJ7tE|@Ssf|uO0E&FU~OS^=}W(6`w^BGj@L8UuxU;PL|)>ZQ8oS*>)8noYXYH~lC?Lp?wQk$HU2KTYAib_udVufVu z*H=@u9pC`7MjvE}8dq6qyxTO5YY;!`Fnn6?;_P+)bIarWr~Nw#6af_se)dCX2dM3S zI?TJ-b*WV|vNk0Hxde3C9YdZN%yA8N%vR3=g;=&sfT(U1obIu2!06DBGQX<+6Dp;s z&iAnu)%hTL;NnXC#NUcP@9Yt7paBq z615}a>7~F*9rh=&a9)lmf?XuVgdYkGe^#MXp19W#aOx5qd_5H2KR9^*^AB`Kbc4OA z(nq^8D3bdI%bGxw^i7?lKw%hLwCk)t>Y}vlJ{C$jpO{h)@skhHVJfY_yJU`vvcc_9IHo9BiE>;GvpO^7QJI^b^K0*r# zZ-Oua)eX!e4=FnriQJp3cU>QP^|joz+)wSZ`{DfjJcuGn@{H2HZpZ7xDeT(*jOLgi zN)(40i#vYd@u8b=YD-wjj0o+rXlaWfPe7VBc@GOL>@76SJ+pt2`XT^(3ULTxkssc9 zI3BqZh8X?sOeG5o%bQtv_T!|}U5@DIWb@I~zp^Df%4~ph0h?O?*pQTltaBI%_K{a) zMb`)D)P2^$o~YZjb?$2e)9>~9OqzXnW-8+)Y0ZXgN3s!+s@Q{8IGw}D_VOlhOklsY zg~-Lpn}FvwxBFI56(;pUO~6@mKPh_#n)SR2nGZ`01-C1jG5%PmU$lOT6ZE#v=l;_dyAt6yIyi?vy}7?vy2@A)AHIJyXC&K@ZK3NO}5as_mq`d(r0fcn1MqBMl`BwW-4{kl+_Y&x-Ntc ztTF1XVmi$DVd!IdY4%vCcz6yourCLQxtgIuNgvogQQy}$HcVRsCC&)#{rrA+Mi5vE zTJi%2zQ0m=*dRX4Anw-QP>#{^H67&m?n|etdJ1kKLLs{ z|8v;jO9Eyt?t1|JkvKIRKPFG&od&RNiAp%V1y+7A3n?U5HpsuvpnqtHPQapjw$_pS zPcN(HIWScro1x9=_vuY;04_LwDMPd!SA z{BCD_Y3P_d6tsDTR~#3CH5?%EmZuDl#JB)uYX5scwCE#<#osjDv<8veTX*M0G|JFlhvj!JBNKh&lpT^Gv$V*Tff?9Jth9CqUw zz`O(R2|iveeOT}Qeg+i!*LU-?kn4>M_~ps&+;q_jP{iNuiI^xiL{pdXW1z>sn-nL2 zO28Qje22T;Eb`yY%kn@ge>ZnN{|oQj2nfGX!r#rfIFFZ6!1c*_Zay?OH@COn8qN~y z=>giic`F}VJril#;t%lrhsMUnYMWs$4h{|&jOyRMXrK}>6C)#h(p(7-8xVAW&#)cJ zs02<+$adsEqw`9_gtYk{qRxN)U_t>&?AouJ-If&<6mEG20-pqe3FW^c9hmT7H|K?| z$>I&Lu^Zicoaumv<;7uI`&R)Ed09Jph#6(UCK&*j+SlI4(C`~j5hd(T9FJ+ zM`Z$s(*+_1e*O5Woh!@xpPQkJeE;(x(2{hm@6XL~Fn199LW{?C!f=SiFTm-dutF`f z#bbkL_$Z$yeJLJwxYEZ-!TC9OaA4peBo|$XhL>^-U z&IoSbPl32cDX=2KoWKdoY~-rSQhb1II5De0k;|lmX(8wT%s#_B)^7 z_XYfpR>5%z4!~~OEF`%DK!%H7KhiY^)XCnyeGB~ZQ-BlS(O^=WkG__9zx#-_53K80 z^!?$3o$mC@lQ~zp%Y!c9Zr^`hxnJpbY(v%umSWe`PR+#ywkYGi+7ANEv~F?e!ymXg z$gal2j{vy)08ea9;XGUOyn+mUM^(@SNB@0Xx6*~1!kNIg^hE%lZ(v@!Ne`}CEVTd> z|6`~!kuP??GCJ%A>LDR~dy6euRJ!8$PXxo|3Y>rK;Wt;ovm+*fp}iu#sDJH#2(aPa zY%Q|Kd?vIT4Lhc`?@eKYl7&v1CS*RZK z5fDA6OM`|pMOKL{pyO}$sxttjK{SXfzir;Gc>k`q2an45lc)V}=I;#+R4#ts+i#(a z!3qAi*qUW|NeQ)-w-d+|0MM~1tO3)Cgz@sWP-8hB0_2Gtl@G&f@byQfuAw}m>^nZ~ zEcp-gfV4wY3$I}ntCNDoGq?5v$=6O+{_8jAf%r#Yf>C}Ig5}G-7>p3xEm_OnSc*Lv z5{NcVVK(wBwnJx+Mk~m0z`<}3h|0U-1-DnBhmS>8QQ=F#p>$lQTxR+J01o2q*d9gx zA`20u91lzYoD~U(Z;(i+W0n0$KL7$zOLtr=)6S_~j>Wc5OuvlJS{-z=U zAWHvC7zgARj0_Cyq_f=cy5fIhAwYKFbu)ne;JcFgz#XwYiHl=ChgTQZyNWV2G^}}* zo2wn0Hw-cll^@Mwx+X$dhna8u>q+}srideS@0AWTY+nn_Drr2Q>H<>LZ=jmM;B2Wt z43H{2cb6|UmR?u4NrT&RG$~7-9VnrKv+wT2+rcX9!Fdu~H*irvuhkI{?JtaK5GMoK znrwx9NiGr+^ZO^_E1(5*RD!+&oOYY+ge#Gs3<7LjO$$%8t78N z>2Xr4X9X2YkSt(3Lg%lB4YT@K4sTRcTcyODYYC{Yl^4;I@!m0LLTZ>QMG~6ZKgVK} z@uyHh@bc!xfh-ozhxk(S;H2jc@Abj9{~Q6`qeuS;#R`t57EdOwF9X6?-BxG)i;3acYsiW#26qsZIspZK!?+NyP) z`|{pgHO^PKhvNVXX2sNDHBL~NRyo6JVMN`&J6CTh8`HnTLhKPPN?mJ++p1IyM}A;V z-6iodswg3_{ow=Jbpraq^&=4!MzYRJdhYc-xF*Z`E!4H=gx#G!MJu2h@#ba7f3R*kQgkUtGWU z9RS9m*4wvh$zO(MuDZYM%AQ@*vou;LK>xgjEJ31WtEdxln$#!@fhb??re^JwYDb)N zb7YZN0THm9n&%Qlz>(Wp5;GyLQX^11mlF@b$}H-I_W=*vhzqhnMph_){jB>o#JRcM z#W-4sv3^bLOT>qd@W$kD#Z6WIvW3>yamqRA1mn#b5!?J+(lTri+X@0I9y8pjLfOK! zgV2#Xg2tAK9Qf1uenxI{1g}Cn!f;Z=%dm!^VBc@NC2D=PX6YIZiHvPYm6h{7_|L}}5AKz!KY)z=IC+>$hnKnPOJgYA^x1KHLXg0Ir@+zj(4Dp}y2Jy=nN2c3s5(>|w zHQ}mwm-mUF!K6nG1ARTehaPjJnLQX`>6i&3l@$4MziOExOyzwzQ(q6B3GOHlKk|e? zyRHxIHc9d3!lBs_2@_th*myDu=`2wG)Ub{SFAP{tyK zOe`cRp3|B6rDrB>T7(6gXIGdP3UalVVLf2J1z~?YhW@6jKPj%XzV{9JdA)-fO;cuI*!#h?g*Dyr0Xb7#QZkj8i>qRis?b^Xh7mhY617P6 zJ&!EV%+BP9eJ}wv%)LwUM2)ST-1>jG04&tcc>g4CpbRMX!fx|t1=cMH&d>%&DcbeD z{`_X`dph6A}i?<5oxHS>*aFNUu7?fajfA;mJYr3QAL8 z3!|Lrom+NWY^Z?(etR$p0ZHYs!EH{t{M^w1bnnAVkTwHM) z#Su8J?7qvZc#Efy6lBU-%%k33H?sm!(!}=VHI&^Qf8`9f(`{;GIm@+m#Z>(%WhWjr z(P1YCv@|I~7KPQ=a4O(|;;hV2xzC!Zr9PCX*GCak(QgCK4(s+$j%&L6EHV6kr$9c= zE~&0PokXcdnHn{_T;H-sM?;L$384#X=IrMyxLv|WfD&AmLYwaQ)ly@S-=iN%?hS46~3W zSGA5Lbgb9JfUx#ezpg~&i;;;^^5d<%+{u$fnl(xMl=`6p`8nE9_floj|tw}vuU_^DS=xSBQQTnopOf$|dKrJPIkYCT!s zH8u#NpyV2v$hlI?06jNt>CkhVf)dEB49)TVRe*<5`>cfG zMM-8wjQI>=igq4xe}6NsHCy1(?V{+}VbbVeakf1hMGJRKZVUT^k2vteROye)b7(;I z(|n?4`sM*8MEp8$IQvyP=4d4EVf>prc5snNLGfUxWA~C+@&-t3qK5bj-#E zAxl_yJMLM)BlbT8c$l^16H) z=cTE*EAT|^yZaKM+3tD_9n%w%;N2$2EK=oK&g!`kuaji4WlBX5w~&254xH@@#t)x- zFj{^gaEc`VfUB)qj%V&$o8+27S2&MA%*Se~4oB zk|x2qBXWzh)Tt@-ZWvIp9S3}14n6Gdvre1-kQ*$^Mzf+wg>i`_#8suALieiR)udBq zdKiaEj0Qq#|JEkDWifi(o5$)*SDByhjG_HxZg>T<>$YT-njaPQ7hOkVeu2~K-5{gE zpP>cck!-Ae0;#@B+h+~pCX=;}`aVymp0zNMgE&>Dj$5U`Z#Tk)4Y(C<^m4=j|rNy>+iQ zY{(~h6?Mkx5jEseID`GC^Ncjop#=S!CgCTEcgeF|KjJE$VyuhTahp-^a@wH$PQCUM z1d)s$Qc(!R)LK0MAmL<_4?2WJz9Vk4zkvJEcXcK<=Kz)1S{D8%+a-aT{KYdu+C$DLajlD>m&Uo^Uq$$b?FTdK;wKGwjwEF8iC*uxj1#)5S7hv*PBLb=iMu z?cg^-o~Td4tZt16>RJ?~BUjk!f<_*9`R?@IN$GFvC?C`v>1iRqr)t)ll<2Eyb&Lg5 zynRnKrGaUBOnSSguu_$bL&LXSb-kd=tyK!PW}OBuV|#7=aYJ$Jf9?f>LjclZ=C5UqbBWxfV$D# z3G+_YotK)-^;ncfJ&k$e>+sg|I_u{3Q5QjyW{h4{daC7ytnxSCy>%VCor?q;Y{dll z!-?yZRx7b0(~*|0WziXBOiGdMxfL*{(P+ze4GqrcQO}phhe8+7ygfSfGHcF=OteLg zb66Y22Rg8D3uWJkM69%(QB>Q@lGWUXsiiEwZ8BC-?&)V4-`pUadv-aJ-7K$2C8WS8 z4BK0ni)1lNS7KKAK+8%e|vCIM|IpTfVhp0OWv192g#N4`Pigpw*G=T$pD^RVY!UE zQb_b=6Fq(fbz)=EAlNDNOPODD{Pw`b4qF__c7N zn}Mf2I#7x)cCd5S%mCNY0yo9iGOSjljJk?n-AvJ$4R5{Z5=P*);G|1>I%k={^{jDY z8XHJ0YPOxD6a+9Yk|ASIbS1-n$%jw7M+OEI$zy$zQXHi9192htD|(N^#MjKQ`!PzDTyV9J#*VD1JiH%r{~*^%SR;KjvgDa^Ia1 zQY=-JOsUsQD|b@39(zZKpB0|G#UcY{EM%jr%>+?9PSjbdP7vrQGbaYMK9g675FgX* zR5CV-gb3e8@oY5fPh|aoVyMz!knNl9)rPI$@f@X&MCo&YzMaN?N9vs2xAnIAhf!zy`rCP`IELjwL?2CrgZ4Z15Ro)Vg28G;I;-eJKq0VKi%Pc}jpVID+ zCtr~Z8hAu6{LEFOse7~T5WILN1B++1BANOzWp`l`3ZIuJD51w&=pxn#jUU3P)TkmP zm0CY;HG#FdEJ!XTPd`VCPZZckzWFq}j`B9m-XYmpm;a*iJz#nrRVUPkg--BeFO}4UL~Pej(1L__W-%7zM)FAr zHa~kHF3uS~ZPhg;efS))c!iqsoR6-s6S8=^R$``Y$VA*#<1ETbIKj{tmdwIs-`gS| zMxn9~Oz2QZZ`mMT=0#LuJb9ue?n`CWGZHezK0{h4wq&KUH8HlKHI=;;JrDa?k>Zgs zed8`8UV}JGt#xdAdEWDkfQFEGmoGIgNdcEA-Q;mo0eRr|WOkUv`_}WmL{>m}SMr zAuY{fAuK-~Fg||g3TPDXeHKBzR=Yt?2dTfRnkgJElJOx;K(Y`93M@)-XV?ur(;8>Z z6r*jY*}bA2F*?WrK;%hQ{GPlL>BKHXEtvf=s{_MH1wJF(K#BK2half%<|C{0phoas*CDyCglPC~}>Yid0ep+=ku$L2wsTP=Vw)x(*+}{nJO=3US?JP#Xkb0IL5C+dS(C}Pwueu*9 z(+5maRr2`g2=|*Fv_CnQ$;e60Qrs^DLh>o$PQF~W z3jult+wEv2nlG3U$;S_6MR=2qUJmv5%j+Rc311A7_SWBR$HQ)VtDrj2{#g}sxEnrC zf!kQ0Lncf>&jd^PZv3(kU64dogY^WHY*5Hbo;Qu!U;-+kWJZOX!`cbzJlI=MHU%eZ z>{sZz_t9YtF~K6*57v`3HLgIJg}gM#bcr@^d=vAxMq+sItd+xjb=D9K9%0eQ=KKS- zevY3>4ny?C1}2@)chVMt)jBX~%phqFWUf`>HtCRx@1yS})Wot1VFi~tXxGe8*wiM))v z_{xNlL)%{wh-mcW?_04n6Jd;p5)2SEz4gquNFVNIec}^id?o@0OPorpfH-V@0sMe# zCN@Zvo7tr%dCsgTKXWVsVPtbAPN3Rv=-)S4+U04fQ}#_9`Ee(|{ksdJ@Mn0QhQDnr zZpe@|&lO~x%uB2%-E_T+D>e9&hD^r)qXwA?C| zUUXg~v;%$+w6L%bGt-LRX+|I;ckOk!EPcIwpm$&+hMf`B9)TV6()~TVQgm#{m^aq4 zDG3f<3HTmS*+t}Y526;%8yaNh2Hp{CD+d>L>Wvk*pd#HUvPF0pA#V(iSSU-hrG?9F z_eh9u@kEdkYkU)?^-Drd78yd~^4#XM?MB@VN|q^looMw9YO(}lEPXi+=_~H->IMCFz_s})ATbuTKbUzV4$)l-^UhdnuPvY^m3Mw3lXD_nMJdZOlctkk{&I$AI)wBxk4;+{LHetq77TB(G-|_k+1mMkmLvZk>?meOZ; z^GE_7F$ty+lFS5o80+d<%w;;ym9(^ql{_U9q(3QRlGGUL+5G@zWe|4N%@5Bo&46MU zS(iRLocZ8cuNJ}Cn@tkSu={v8EqV6}butjBC6H?MKo;F`ns4K_BlI9I z>2gvKyB);68PAYU)i_8z1hHm6X8HQeoB!s>bHV zF3FP@;dJ3t;xLy0uQ3ecJnmIic=rnGCo*`9HjTuC3fFE(@WoLiO&|`+VpLk*#9odK zQa?;qAv0TyK1mVSCT%jHyCa(Jj1m^Oy<^Hh zZG4Q~gSwSe;<`I`8={Ft$;2Lt#i(=-Fbkoq)~?@=WRH-i0>S}qa%3$(T=!E-xA_?H z6stgGw3s9wIj8>zumcps6k0AGTLQj7;op3LLOHL>Xt}hQfH~IyeNll`Dkg8)c6o$cV!IJ^Lm=43CaD6nu2fN6 z3Q9_aZcx$=0VJF(MKVB)$^D0pplD}M=VUm9$2PnY0`=5e8 zV4qw*j{KiDzz{=HnP9IexVX3m1_n@9TKUA(jH#~k4W!37y(zaK6N*Eo@9yJiDxNwz zms2pv_;*hgIzOu@tz4R3*#|}b_vYB5suwMvjCugOi)8=Hho=G|+f^MH#EPT0+fy@I zL1lP8_PWZ4)ge5V`?H%qPCMyC_hz>j2N{x-*_WXY8JS?$TuN|h&YijXa!`1-9eo{S z|KO+tuz)~WGAAV^<-7g>`3m424)*sORNFlG1q|DE`|0%z@ zIom3XS0Hd-+u^HPMP4RgUI5PE?h-&0o0i%b^Q>i=sS5dX3PFl2M~*I8;5XILzKRBTnm67ApJ1B&}_ zX+FM$HH%+q-fnw<0YGl$tgni(j@ksw2ZARwuJ3z6_l|p8_M!g6J$>L{0$2>QbK~r| zUKof&{X69xkR`yQ^TbqrZFRNUcm~R|>dPWzu=XCrIAA}%KuS5y)@(&F29rP%qPpR9 zUm^tbvyj9z!qHf^VH+qwWSIF3*nBI9!_d&s%mDw)JQI&YKpJLg)@^;bbYnCu4;sal zpG&J{0&16}FvXKYK*0yK&)FwCuK~mI$5+>@^Is>zpz7{(CT-S^=57m!)TJIEo~!@F zV^yE~-VxTw3dq`ka1Hok1vz(wY!dB_>RpCSwXjb81&w?c!KMiSOqOD8MvEX9myf5a zJSbkHn&_zrRy~7CiylBkIV`wgq5-9YgqN_Cc_(Ik`wh83mEM7Q4rD8KVm_fz7DRx$ zGVV2SgcfXHzfBKmL#$xad>6VWpRu#!w8Y@KUE}z54-9>;AFwdC2;ziZfWl~3wk9tq zu7OV`#7-Z&Bl;OB6DMo=L0#C011ySiE>hBahngmj2)+H&S$bGWlHS#%w%j+*XBh;v zMc8;Z%zY79E}%&Phu=u`4R{rC@0}T7X_Xun%o%VS51@)6$Ol8~%Wq$yvzE0=7NQaS zTLC9Km3PdkHv6%q0EKBta=pu>x2KYW8SB>v(wAndWZ!^M*8y5QTe^d2V+J`m$~etb zm;-tdVH`tW0;4I2hza}?;x8=R$Fp*B1g-IfTri>*nHVfAnQBJA30U@uPae4=ic$xi zHF`m&JrvQ6`35rOSPcBm7`x>%g{q=v-}f*$U0C-!d&U*D&!Eu$g;Z(XJ@Ca~BZ(h> zH58{uxe@=k7gF;1=N(92jTC^VhYpum~|cl(#RLRP9IAxJ)8+$r{6sW z%p9AYKpV0x(jdWVJ(tO%+c-%$j}8q*Jfie7i&?l*26y-+H@39!sEN&=!xHJ%+?c4u z!AB!NsgX42OkQf{5^N)WJYoBEOICpokZ%Xji=*K?3<~ouqaOGneZ{zlekx%!);>{^ ziTPDf6|Q;s3Z&g3tJ#3|dz*Z%shmpVlc#f1T7JIA4o*a#JbbRU!tpDN;y$4{bYnEP zkB>)?e_u0KrYe>^Uz?B;FNypYvo<)q_hyKrL)jiYaLRCe^@PF&5!2Q!pXIV~hG}I( z)yBq<`6+|mLD1?FDMC$(jkKHpp!C0T}*XMUJ{j}P~DHEKe;f(vj-Q9W)wf9$5-yEt*=oxg=sag z7m+7vNCT#7=TtuxD}yelp4ZmI+iv9&+FmsSR_1c!CaSO%+(}nyG9x7yZVnD;dI|Ezt^A)cV*G6d6txP4TusiScMhsOd8$q zt}9|y5lB3;5)Lm9ZvF?7)smGxGB*DXl{E&4v zzBQC;gkjw>dd6D>u-%vGzpdl>Erp4LSh1O2^R{nxs?!>EqU*4w^f!;u?1d%BGmc}V zs0V40zG;~dj44U_)#xXwC|GSkeukIfH!Bgo=GXYp^ZDM?^jX6wz0Lsk>5LX#(7?z>wl=~J^ZX1J{Oxif2c zAQbNoC@&LIZCJP)Z==N1o<$m_=9^Q*uUDplAU~(4S}=m-s(^)3KkDKbqt1`nQWfGk zaN1RF6UDbl!G1;mk~{^uB6x;7P-wWyB*-t)?MlpbeaK$ zuIPa^@%V4pl+^UPMRQi^Csr* z)bG};F_Q4x+Cio^TT7Ur$~nGbhZT2)r6P0+KN~HkQQY2TT!=Ne2kTCn!78%77L%D@ zhr>6U+C^+cy(6v25n~IKgOCOZ3u)~nc!%LS_1a;0Y!;m*{ikk3xG4+YE1xDzZI~*u z|L$FAfyOF|?`SlDx>Z9O>%Fj&-Ui&MTaIj{)Q}A>o~&-yUlRA9s2W+uwaRb}Wm~3L zTU%>xfT(?=La9`<1pGHF1j*A*XRH!un6mP(<@w28C+T3{pcYWgdL^5(isE>sr@Za{ zUYADM6*p4IeQ{HUPt4Am9b4F%5H(i;4WyXUU(6;FEs-$X6Fr4UM{!8vXjjJ^ zIz)8*BSY*RTY5@z99@8dn(!bGKc9Ai8BfI>Rr;873>#I8x}roz>rSUoG0t6)^t1$t zLAs9mouYCCg69iOK2g^yZgWS2IMFCYhSy=bfFPZF2rCh!m?$=pl;>z^^?$ek5>M{! z<3`fYLLlBvUq7wz!Qxy}=HDnbCwoehKh!=sqfMyz)T#AfRSSC};#`Mt>M5a;Lk`^8wGuAW`n zJ0%}q>Xc$IEyJ}r`Bp>LQb+luA8;WgJ4zRrF|Yg37o}-B)YS>Y^S>Q1HF(k=FYr)H zV2(ea3aK=>z!xA}Lk0E{32c2AlStx7^=ZU3&tT(W2mVVf?&JfqG3@IPiM4g2!4CE4 zM8KW7oGpvMzQZQk{#aNM4M84d_H#tBUrS=mfKNDMm4T816-3LEqF#M6{Ypai5a(EE zx1&b_DKOWZC#(sPs_|QecFdzo-D4S=4gd7KZ>nOqAlb(Qp_=JmVwL-AswA} z_{}z#RLeL|D-ubrSZPjeK%eC(4U4C)n}EfligSYnf3M_&YFu-IDLL(X&&Sd*Eh^vL z+OG~5sinY7^TWc;kjd1{HnSg%rOMv*3CTl0d2T7bd*j8GKrfYsl_vB^-5G$dN)0TBXKZyZ;KvidRZ~AnngTKC z(!9*u958~az6Is=SJ#`g3wpS_JDK7X-YAVdg-J+cLH&-1QU>@y5fL_y#rN2+7xbPa zg#x-#=@rc#V@!TOtpWXqaKIwGr7c0HsWk&ygP)FH2MSWY^qOC#Ol!2E{JN;7v_<=D zD!5bUC+ID`^c|E9ax|9MW_U!9jsn_sS0`qwWLzlx|6gX z&TBD*N#gMNkDb@A?8?oCIET8@;_H6*(G(u8o+9VcF!oQ018qJinjO8HA^~g%R=6Xk zLK>|1z-{QGj`%C*`qTuyeR*aLHv|Rhm&FR|(n}5ZJmbaj6WKh~w8J6# zd#ViKHJJ^fmI{Pf|BJY{j*9AS|3>L5xVmR2oE7Is}m#N?4j&z^hV`?|0AM3?gqM0A%|^3ui5 z5`=LW5?NZmf00Qt%KEiKdCZ|_CT_Y)Jfx|F@(z}p4javk%P~V*O>r=8Uwnk`8g{$3 zr!$`j>BpX?sa+Ha(+O~%;(4)(3k`F|jtNZVynTqM%rWO-X zRItYU_`({@uahzNoWhCk@Hb|RM}>`e%c+Y)mjkz~R-|jn`7&&9848{0#0-<#cu8wY zbK6!rNSaCBJ20~@d^2_G$x!-@&!u-59UN2S{Z$KggG`53470t_yCVH4)MNEcq&v|o zW@tw6)Je|kTOgi-^CTus-f!Kt{gn z`D_8RiREs>D?0Ao_!~3hI#QY?^KpWYCK@GC_5K8E?v*OX@>FBVRSW9t-^O)Ice6GJ)F~*DOr2!P+qaHTh1M0uOtV%6+UQNPc;qZERQLvIy{O zlA8Tn*HzB>otH~em@LG!aBhW$uVQn4Lupz+cX}_#dFUvO^fD4$zWSzraB$_8DtXbD zr-U4yG_)?qH9@;BKcggQgc;rjUDW0tBfCbFXG67LIw){!(>Lp+Dto8nR*V=0yAn&Z zZ6ZU=t2^O|?#F22rea~2j7)K2a&tHHshz&o+NV5OHf#+df1Ky_g9Cak|9s1PDv^0| zLbsP3f|_iR$7wm9;d_LK=yoFJrs8B_mw0dc!r+KZINthDMm#5Dh8W*mBc@hsuJrv) zFLtHJH>c$CC|?V#9ZYeuA^4T5orbxVn}q_N1>KSm`;niH8i|AeKQm>o??1lv_O1AP zq6%J?lx_>(5W1VJO#6F!TE3i);pS5TJOQnH6ZdKthS{dxUhApSsl#=CfRfJ~Jiezyc8LuUZNmF7i6r+?a$VYK4oPS49rruR2_p-l2 zm4uoMLQdKq8yWO}L^CRle{Iak4>~A#7ev@7qDLz1%fY6ny`(+*>!u9vFDBZ?u0E{n z&~X?xnzS{Nh187*qyQ-69>05^!yO=OYbVF?G>IfW47*6HLmHb#@8%_wCn#pBkapWoV+>yH zSXEV3)5m{^r4muNey!`IEBQhT>y}C{XRY;AeVpFIyp-+<4}$-VF^HXB8bpND-QUCW9Xw)n9o`=S!1>vYVWJcr5f#*T8wCIN^Br zUAiYS2Cr!eX#f1J1_}AP6E!zXtKFuV?!BwiC27+wRVL|V-AvI}I*gc8{_*?I@dhzz zgo-Ntji4e@?z1F%5j3fpuYBh*o+zG)3YF8B@=V3s?j+`wwvp5FYMhd8jG+f1JYNLT=f0|( zwR@aXDG~3?b*ihQM?;Ti*raH%p5ejJMiVO|cA6bHp$d#tGa4sa8hdWICb}+UuNS`) zBKS>JSr~CgHrA3a#Qe$W=n!laRrqv?i62wQ$|dsR>q-Rp}?-IKAvQSr_kcIlhBQ z>+@=6CEEVLs6)~zymv7~xfcY5*E9v&CGZ>WmICW!@9aEkYeWRf_re4?>sY$NU~ z|CFUEde)^yFd#n28MGan`yS11{|kf2oU^_0<18heG!OvIQo5P;tZXa zLWf+#_{=JWSIu+ua@EFJooFtF;@n+-E|;=OS49D>qX)8|ppW%pq06$tTfl8KsDY04 z6WuvDo7DS|7hM~l0cDdv*N*LHtWgu0afK|x(TQv-468v^wJCqTx!X7fwY89ElzzI& zeqsN4+a{30Pmi_BeID*YjMx~jTB#aTlGxz5hGF$>Dtln^#-{0$C;bfhlM~qnwIr7V z0NgjQvP$lLx$T~!dPP!h;o+MVBHsLdzKNgFvz9;n0~#MG_aHH8p^LurhC0UaB)R~B8F{zg1KR;FN(m<<5)I zp;Z1oQYL)fWb8^)Mx68S&J-@D3so&e9Xw?(sGg=cnzLlC69|{YXbZ|xMG4puLF4*e zcF>|$Ktv(o$kpF-m=q@_K7&W5oQ*76@?>ngDMhiZ@j2mVXgG?a8WF14A}8nV#Sdfj z#^{6LTwWi#IRBJuKP=AAyk2*>{hsM==)HAL!-Kfzggc4k!{Ucesy5jMZZRb`^`P%Y zFGlC=3>*=+XWWH}&I0{$Pk%qJBFAOL_X`*^1xcosYXgb@5wwrh!SloTto3c zDShR-4lNy9NO48)5rpNy!WFFJ{Jvrc9nH+@0yYk}k_>B}mu zmLE{_V4Fr@d8<40z0Z-Dd0^7FMnx7re__(v`q@y6dewbfkGR%1HcaqlWIE8NnN%?g zMO=DtNGWbjv-gF=8)bu6<0#L?5iCPdcC8N`8(aG^?M1iWrm>z7u#C<>YHo=d*E)0x z>D6Sso2C=K$3RLP``S>vTFPHI@s%wZQ9Mt4q8LWt{bw34WaF&MAVa-$s2@Ov_r}=Y ziq%8SfKh#K#B4tGW$b{?xvQFiE-E5)ob{~D?0`Ws2-SzOe4w+_yNqmgv zj9Q+jKaWjYKuuZ%Oe}NKO63)k+WQx6US~*$#(ax8Y~g#RGH-RdE8ydQ`nxyyN?~H3 zPTtcpJ&0;#%#A+p8a&eO&jx)BtYSJwBk>f{xepfj^8&+8H4Ds7Cf!?oek2#qrSK8& zJ|jQK&*h2$`I+cV7gcQgEFvm*!Pwctj-?`8nR5y1PoJL)Ykd&UR#IzGn21udnDJj> zy?^gX@acAXD}?nN>uVAFH5&_(7@Y#UF$AL*m_6 z_=V|@pH6qtdhnE`#ogo+-ZSiK4swb>?E?y8; zClG(>DjD|yO-`2cqDZ%^R+>z;nmf-` zvu`m~d7uSXDW2P)MLB;$Kg@u@tFtYO8+qRa2bFb|U8W!`?Qgwav{y zX+2#xAb=bZB zF;D5u!j3DrLLH?!efDtahn z^X)N=KNN|EBQC0Wz3fG=-}eyO6}uTUb;!cA3;gIAT|Z# z%qLHtIQaYs^@-9E0c99`ttc`^9NZ`|wXko^@Wg6|(QLR?p~jAIkk?*|HXKXR^8iiH z;J&^-oj!EJQK9r2h*D(<_+36a34yIr#QoRooeAgd+mp*%w1TkJQw~J1blFsd-71bK zT8^rknofXbY)>omT(Lp9|NGYp!o1rd6h__0OfC;TN|_J+R(;h>Jo)v-zE=4(tuZJX z7}y^@SJ}AO9PU09*NvXO_mO-?kw3(-qL@C}~o)P)EShp1dE2rj%w3l19 zDNi?dew?1R9nQXu(s$$GfSE#T-!9Hmh1ipl)1B&p;L{DM z9|r&1mxU3oPw?($rPjLU(J~KGmfgTT8?yh4g6N3&-!2#-T512`5w}*N`8}!-(+;$> z%UIi5fw?vg%s&zTfGdc|lfOEAOnc=*Wd`|g=S?8N=G`E@f|U^aAGwE#|7T%`f3Xu` zR22W-2_7fQzdxNwRp$S#V#NRb!lQDCQ>)W!phox4hgb7(|Fk8o{(p2Z;;v%2gkS%w zd{IE7cSQ(s8l0UV?{lEDxZIzf_L5%@)Per_NFI2uoE+Ab%hZ^k1PA^ZiGB3;*39>R zH5u)K_Cn!VQOyyvqZCXi1H?lpfSOUx^WGbYz#!5B1sW|Cs_}{{{y8;pHCBs zRwB!I^8;xTvZrz$b66#83VxeFPzQ!MFsfNQmt_Kk1qGY#Z&;En71aQIBuD7pRwai0}bgaUI%av2p!k1UUh!)d#4?sGeq8fz;_)6v_c2H7ATgz zN}-2=V@vSqpQ))SI7RicB=5ojbnoly=AdKWR|!V~P<7)~W=Olwz>oVD0QeygGrA&< z>ZF+ZRIMa1vsVL=32VK;s0#0&Q;d;>FJDN?a_cb5p zAn3yaO;z7D7OKfp;&_b-0O>o9hP1S_D4|3^Q{CbY6sDl&-#XLFfVeGG2&zce0iyw$ zh{uZ`XpLNKY&gHQ*44=@h0oS|@&B&9JM#W$sk1EyWGJLcC0MJVDk)Ux<2}m9g zZCGVOgG384W@rgSCPS-EvbWnG(|wbaka(b6!N*+j@ZoWl@P?HP@`!$3}O)Hq@g4T^>z z^oNiKwji_+`qW#`lAj#VC7z&J;5*xppC6(_kh}Eg3<6T;fvtM-y`q&(DewR^Cw!U7 z*4kQGczDy((;urJk|E-|U%jxNWUM~{p)mtmIVO;CyLpq*A~iLYMaBc`7X4I>k(n9M z#^R%lej|3-;Nx}afD+PsLNs$2mIy&MdEa>F_((%}dXxglJ^?s}498;+x*KE(p=~rA zgconTRzIimwCj2@@r6?+G_-T3AI@GtZh0B9#Ng<{9SseLb4$8qhqrIEp6W?eM~s24 zWq4$#)!B>lQHP})tB{kdX(H?AT>rS6T0?H7i{=$Q!n~Y`JSYMwWNDB#~7TrW=R441^mYKQ-EW+7bH`{GM4C zniA9tQg~z}MPeRiP<3)@8g?(L^AAw}C?AoPuuXZ~TD#Db$Xz5G!zw+3ZbW+7_Q0+m ziti7@jpHi4ZfZK4-@zxH|HbDLy4HZY1@0Q zlPmXm-(&=YL2d&I7p;(QL3Yn7?UqBVuctAYCUX~0cA6!{obw{Y^#Q0C#hw>mIw`GKVB}2WCdPfQ*Jpvq^ zoXEBUlW3Lc0MymPP#ITg*Ii)7M=iDYb2^)iI^_K@*|}QxS+^>JyBU{UnOr^NE*)aE zs+=0|+G`GuItsQ-u9>69WxbZ`uH$KC*fz}FQmQbk#Oa63mq~1hO(^3%15Tb{dcXGK z`1Jmqh0$6e*L@b#XgELmVPtL(2Ic+1UYV9dYO1A!-v3h#Ha4P z_&~T!LF)+>7p3jwd(kScQf5`vbXljw!BOiwJ29tO?L$m?uJlb;Jpir(2(?&f2VTqp zIOl@f4%^6d1|1IR9}N9D7Mq#->l3ks9UA{)0UY?cM76Zq=?3#I&zb_+w*}7T6LceX z6k8_sJ{pIuSCB(C;Z2c!n9hoMhiEQMlO3{+9r_!MK*7K8Cg+X2-)e5<5MR0%eYE&W z#}Bc)=52zt`S~0)33g8Lp(81W6cV;pdR+YdG=49VnvwPT5_RV;ILt9%g**H(?{R!x zKwX}0jK}C`vC3Fz`}*!PiCAN5j6iA($Ayw{P8)(6#uaC;6djBFhw8eNnQs>AtKlK4x!{tAHyRBUQr7q{oq zXu3iolMPF~FkQs%9}R?Q7ywT0$zK>gt4wS766OUx9J%&E1i(cL)y))-WVv&XKvUP! zaUT2Qyx-UnS~kSW{MC0ToJ%#BT?p9H%PBN9Pu8e#Z}!#hqmpS74a zOVuJ-mRX=7jC_cw?2h0V!-4}rkO+awx)ZTtU9PBibX@XdHk-?D7)vQFhPb((7gJ+^ z6Z9oA#{g(aG%B=)f(viu^BKraL9-C+`Ky~%1P{X%%~3c(wwL-I6kRZ9`8>`PpGcK$ zxmgn*9}lO!B<^H*X=Yn(qOJ2A7H^y<5$2yBym7cgzedblm1V|i*Uk$Rr_=LP+ug{4 z37SaX431(lyUr1$wEZ3R)#wkAjuOr&(K>scyTXZD*^Mgcb`8uHqM8Bs@2Q$D51Ajo zCS&hrGvLd5MjbzNsexw@&B#hHm_J0EKs646I$iJY^k+rVX2u;bdr>l&=X~TGs=k8n z-67ilwOoaV^U;t}n)QRm{%>!tG)nZB_s8Qf^_$!I#DDeO$S2S0@9QfP&kNe;j>+*B z1LWq92vXv!qw`h`944Real6|3w%4*v6R`m4Z^|*N4_~AE zOjG6}VoJpAFeCVbq_5p0K@EIQq56I#lIFtcC!G53iHL*u4j~S3Wdqaon-j$>ra~kFFrax}bHYxfrhk17O z7)?!?=u|J{FHGTXO)^a_ti?Yh7y+`@+*f`ev?TiI2%8m!&EAA4xSoVB>O#}zeks|u z8ghs;m@{8wI)H6Tgkl~N-lwirDx&WxLP_0(3rKbFkDMeGw;m$-(o<}$eK{jC7`w$Y zZIy;{({q(&lCht|XvI*97F#7&J(HXu{As3mqgpG#DV@mq@CrMuSEpUMa5BiHGHYP> z^g5C(59V#0!%{T|LZTaz5YOvZ4<`BUuBTvW#_d~v@(yVHk2^}Q+v4Bd`#Ml3lQZ^U za?Jaq_oNHoj7Z{pDtSPnyaU(}YJ~ffoOnM@r}XaYpn}IWfV_^*uq~bGHgtLAW~#n( z?c}F64yn06XmI`P0THRX-boHp9&gqA<$9SM8v+lwIj@m!7|X?{`v=o$JlR9tCflD@ za(ohrKkp(?V4d9L~?om3aKVJhJleb zr{Ymr%3}^!9-+j^VhVO>vENA?)%(PYesrHvCMP)WL9|a}0{wf6iv9&dD*4Fu(xUSHftHZTXqCY9hR z!O&ob_$MkzeN`uE2#0SD&IrD2%P`hhKhh_CTh(*G7{!x_;lQ z<;r`3yJ5Mf?fp6Q+w$U~-+gxfyy@zSn}G@T4i4ju>OmkzCpV1sHOioXw}7PhBVAE4 zDm&<{vTeMXl&^#QlBh)AIY-WAWwH6L2*jTRo_=&DE4`2T5_35c`Gu!C_LZ&4D*y7= zAcjlDOEW*ZNU$%GT#D%yBZ*QDuahO;7U_JZt7JSYeXmatyQ<7Qhv-91%e(lBTQ$9I z@3ji{(Jy|msZ+x<{S42PKcW6N!H^(LM)M%g<;$}l(fUsn7`Hr-pBNOZ|46ir{m9g? zn_&^VfK?ezjEs<^=b_guTTL{<=0_dUja~~)7NvA5aGmE3{>50S@2C9!c~&~=@#!jE zz}ibqRW4F4FCBv943yejk29#z@^5ttxuh6e7yb#{w-0QQk7e!+pk?u^wx)k~m?w`T zk$_Z^$ktJ`$G0&P0-ro;5AOA_*D4DfnjlW8^9YrFfr@!eQ&$~yyQpY7 z3RVa1pL;1Eqj$YtMz`H0gJLb8_B@|r$3P0p+uI=A)>?)8ap$)v`RN^ddy`m{ou9|O zJVlcv)GvR)+xKM&73tm()H5JuQrhAQoFZ-MF|QKdesoC$;iwXGLP)`~Ss#Bh3?`%Z zjHn;Ad$JJ37l69KFlXoK>G%W6x(lzHPJ{Dil`5tktHu|{d9q#NzQw-wv9lGtS@s^#^s&%mU~0f5p6PTJ0-!gVJI3`6`*JGkXtu{;kXr zky#0v>OxB{nj3#BC~^k%dGr)*bRV}X-~6U>_*`i$62%mlHq1PnzDXWMiPIqY9_xUK z`n0gkP)*;sB1y!CER$^%jWnx#I}l7ZL==ZYCE4U^P^qg!3BIj%&m+ve4Lw}uj6fI_6jGE@ zyK?=g$3`GzWxjxzs7&C2D4pqw)l3+n=N8Og)t+@BwLT;>qtVa2&0d8%G8N!ukna(( zl66~D%j!^MieA{AvZdo<8;X5idn@(%DvwN-PlL=Cq_?-av}X1Kz6)h8OAs3?)>~9D zeK;)(Q+fWwqWFxpgeR3&3>I^p1%hFI&ydcIb#>nidJ3>wYM={P+;7;f_sm|*>j)vV zdY3_I`o8TsU&aT~+^<{uZ}r`S8b9>nk!w(E>2qIXHRS}$^Voau$5`KBdJ6K+ zGppYI?uASp3PBZm1U?*gq@kf1;uJHXS_l>q5uq!c`W_qd-5VK5wfT+8${Z(fff&(^ zeNL;SWmaBI15+s^`p~<6;<5|O1`f32k~DGOy(v_NiLZQOZe1)rc7D!;eiOBwAeCw^uVNySOISJ^Wd@X!-Nl~a#2m|D(_QT=pqD)$wQCcgeO=gR zce5COGOofCjYjWK3T8<-Cic_qjh;O51$sLym&jb2N72t^h+`WKKMN<0@Hd$b%WRp6Ilau_r6isN#rbtD zDZ716Mjt(^;S;%TwH!CGtD%9C?P$mTET6?5Y9uvjyK*2dd(6ey!|{Tzb2I2bwVv_kb=$N5GGB`1$V zfoi9)@Si7~#f=<(ix-6xDX^Y|&V0V#DpEVq8rpT%E^KClIH>Sx^-l+|=g& zhDbMVjVfuIM~Mu7cw$%4l_^|q$0L=JP~*@E&zoV(gUv>CRdvXF@jPWgC@qTcS-u=g zB(&D7?Rg*W8pL}VTDT&jH=pSoB!AjI80rU`kPrKA1)ba%B#UEcjS@SCO|Nz<16${z zQ{~v08N<`9IjW>1CoJ4RTc(+AOw#o5w_Fw-zHP-5VhspMxG0NG z!_Li5q2U|*0eFo$wrdeR865k zt{Rt1Juy3*d7#CEnwgn-N!%A#I1y()*onMJ<71o5_ofcQuc7BuG>2cj@$VE)tfb8$ zzM6oL`65FVhqBX$K4$~KrPLGmDyn8XHirxiTRht-6T>W`qHJ4-IFV*ZqBm8&Bn-`S z=VQ8W=0{c*`!NONF0CvrJ+muRL_hm_a&*P;^-^I&YARhs!rG9alTnjq9~7J}F%y+Z zX4Q^^Y?4e&B?FF3T%wYsl5~*^90gR>Hjgb>Lebsbg&sTf!=E`vh}3rQyzgwqXHD=H zaswBNQ(IE$OT==)<@1A*bnmJ$Ui^G{b8XLdyKoOATYZq;oF)m+S98uAC={#J)y2>f z>Uj%orDh+Qn;+IaTl(I_mP9FkOL?mKm3@Jj*rWDJ7Ddwg<|S(o$AWYmV(BDagZ?Z%MesPy!OQD0iXq?&i zV3VvxTra`%T69>rR$h6jFX#R-;{x;n51Dr?x~ zLu}_6eQ&9%slgr}%D{|LTvld|)3siVX&RUnL$`N2%M5erjiM|<6fd6AQ@tCDD>cCB zRbR+|()BauxretPy2a^X^QYLo_E3Xr4sLGT<S#$c8C*=JzD?%o$q zOg$3#0~$Q5)|hZB$Lz=5aS?B`d%s!o|5h5Swuo3N&O0f4=pVvf%C{)cwJH2siw@B} zeq{LN+EY~y8_1(0+L`63REfkG$m{AJwZu=Tv+@^V!`ZJO3Zn!FkTA#av6SV5TmY{I zb-%gk3(v4h5w_T5o~*p?&BbI|=T&WD|G;M`+HI`VCr=KKjwZ&(h0NPf8j*)+>_Y%RIzVher1}i)5yNVVXB2J@vKO>`0K+FB|+T#2A`tS4KdG#qhko^25 zkf@mlZ;)H$zz^coeTI#=ob2_dwfe9kVxaNn&2C(yJcF(z<><&r3$B{Y{r$_p zPX)o>`7p5}VH{lC&#l{h`9MP<;w%yM< zwv|=WJ0>Y98fDewS6N-X!}fwylKSs&J(_PBlsq{;^ndxO`P$2knbvZCygEN8C#T%j z+p3QqgPaXDHT9a+42ScOx;GNOD`J(f2Gz=X=Zoy8t3^p7uO5oo*S;+^Ud)=@=SjKI z;D4U(BzRhKLlDqd(Cj=#`E(vvB|W z-xpehl>~+j1%FpqKQ6N>V-Jc5h!&o~^4>aDMes*Zsm9FIRiJ_&Iux26bxRnt1^M-3 zTQtFT*pGy>8`iyfI0SX$)TnA#Gvsac@e}eW5~J23G;@gXLo3)bugukTEi zBc-MNojU_rQWpgTuILZ{Cd6$x8~Rz8o3j;1fbcrBWAl`L2cOQs5#IitaDrv;$J&}4 zh?oQUWWg02Qef6uqLX>{3hz4qv(yO$<|q1&B`wUge&$WCJ?r*o&(ygQ!0fTHu~#Z) z#i7~W)~2lZg>*3ca_}D@MY9)E5q*cL(qG;OzmNA@19r=v793OhH2CT0^pzSGdQUjQ za5F|F={k6~Fg(~7<(+)ipgfBuY(jSXHdJ%fYYlb}veZq+(7 zJWPG{RTbagkGANWq=&^BsRGjEnVA_WDXD;p{SQ9K$k9;~hF>rm-nspv?TxUdscG%m z^zOmlT%_jY6+qNR_?9;R=Nf;lu-;z}lIX4`TMtNkV=lRjh4g{)b!==;7`W5HK=`&Z ztgo-9Cmb^8P@Z0AyzGnghsVd0lasS`NHt^NRmI!p8kgvOPAn=b>m3;}E)T(?it2HX zM?r-!GBI(>1rmuroX~f?ab@n4?T;eo z?ST{DV+HcrFfnv-bw$O+ouv+=Ee;>)hkuN9PpB2bim)j78KfrVYWQSnHu`yc?*Pxg zl9LObK~qmeOmGQ$YU%`7Gk5OX0X>Rbpj(ktO#k!#B=ddJMi8300>b7^0r+{XegnO1 zTwL6FvoT-LRk(ENl7N7K8D0r|gNKL58_fsDbI|_EU+&S@*O!KWm6A$GO8R>81?)^su>6arBL@9J47~v2ofY5?wUrym!(4^Wv?^J{W ze-RO@7IUFSKSgkfXliPLx~i=VjVq0134k>9x-(lOu)HgFd6bb61NF#MXQv&^_n)=m zoHC1Ahin?+$GDi8Wn{47-hC>A#5}*2F1hc8?5e%f&s3uVd#wYV5*}cfMPyXSdO6=d zp2fR3SaJr|m7dSapBypmoA^e2$UPPVz{teZS8vaRS z@WplRTgt2ifvj32TG;ZW-|_%F0UOlV$mr*Hj1#$fX?&QnpWm64BQ?X{v0%|~NE;E& zk(HhO^&1BKB)Yhk8Y(8xHVKJ|iM@P24RugsOifrs!hG9689R_pwH^qwJw2z#LC;}p z(M>WSwED)@hU;VmYn2e)a?rans5LTgDlJ_Fupk6WL;BCY$kBUtc2zFp;y%acZ@hi7 z7bN8L^ee^MMaCk&qFZgCXo%FQ2hqRkzB$FAP!IqX}zkKVF!qq*mN?zGP3h>Y5+j9 z7aScp7tcLWbyZYQ7`3s+kCDl_eQ*TrNCQ1PbMwMxKX-e39yfwW511FvfxrXPtK#op z(HhABWucXR0wx`{C0$R!*{YD*AW`!HcX0zXKuKVHU%I*JLG27!80Xo>*jr~C)O}XT z@Ef$Ry?;)te@^x(mAF-xpN|zO`3c%854yOQ!77WYDkDb!@3`(yCpm`!E2*=QaG;^s zD5P-8^foTZdQGNZnm`!@U>n6wvi{pVqb#@YRvTwN%P?a+^jHNbqX=YWVq%7cxk+Ha zvJ4_2h8>_A(zQ&rGm)Z9@9N^xMFJK=$tKU@2L=Wcu~6$NgS z;Q=HsHJkVL_Ec9j4#!4-lcms%6tUGDbdq`ch$a3Th(PO-uygg;od< z=i$MtxVI4|L*;Sb1ywp!%SHQpK7)R%H3qB`;%n9dAIbga;GDzg;?mdIqT}S)cga8B z2D=hp-`bWnXE!F_tzsnD6CE+l!w4TE#&=Zqom%;y<57-s<4o`cKug!JjsXA%&R#U- z7dm?S0*{n4RgpV)d|~j;-y^jPUcJoi0GXA=q|XVKnk*I!tz4Hz<|p91khO!0PYqE!(P1h&q8p)W}=Qzz{||cl*^6#JIzy# zvH9ngsB9UsrqSUjn#_#BurE9Rz-O^83~EF zghV!sX{xO<0UZWyo@^!Br)Q~sL^6MZ*7{kh!O6)9K0^_~pn62B>E`Cv0wHY?AWnt# z`)PmwWp_0ECBU-I&b^qkx%~7rt2?y{ND(+YuYt9u%^G;^!oCNO)*g7s&^(NZ0nw#D z0KEWH*~gC_b#!)C5@nj{9`=9E3;uI+(b2(S34E;@yoq_cpm8#`>>~HqiKNOFrzLae z&6R(#0P7ggM;fWAYiKaNe*K$Zq#}1P9Qet*kb%LWb>`eTv;%%9&>DwKDo*17j>?IU zkPrx!EsKtMyWv*%4*|LaFlZD-`OBTf(GkLyOK-jBjyP+0pH zxDtzti#v;4Z#)2?(-s`)^&Uv*UZlJr$YNt-du>=>mvK}e3UCJKjVekrz#$6v9iZwi z%$Aq-HRA~45XCjHDMZ3+y#Cx7VO8UN9rUbVU(aEHU&#v3C2>VI7=W@b1EbzgFV{h`!zv0YX< zZ*7J4q0Y_)aK9YBS>}smsO_N>R)U`d3%9oByqKDvJ~=TFcX5g72`V}&Doz)C`_7U# z7MNEwOP%}YCu=1ALNiNgEkTY6aVe4)Y+Z@uo~EbYFgC`07o|u@K=9=o=EH{%XQPW2 z0DyCY_!L2sYL~+X6a@E7gj-;E2~Q5-zTk(<@H3IcWH>%S>#rN`QOlP`==UDfi|sy1 zON+ZUVGUAG5GGA8TQ%t+w2EtLYBGwsz99CUREN-!9%yt*l?jRpS)P}gI{H7?*eta$ zFAQR-d;FL-@YdmUKlGY9Kklzj-Y7xctJdd*6RTO&r4r1Eet{%AUe(u9^FZ(`IXihS z&Y{8maZJ!v^Y8Uj5)Fa>lHLI44M`@{RD&S|^sNLEujJ%p2!31=Qc~A% zp2D&U2nz1(?!s-NxwN#p;jH4sz*++EPFzxwPH$sw&SMLsp(y?DQldqLUt7^3Rw6zA zdIz@gRQ`@CoL!>-1VK;aeRT0hK8>MIADtJ^`Hti$5x8PS@{pXFm;q2_ZgK17G z{5yI=N8z9F|6lj_Pp+d%hWq!K5<%7Z|J$FfVy-P>>Pqx0GNUu>ui6PUll@jyAsVKH zdyEl=%CNGsQaXlCU0q$KzRvfOFH7Z*18px#KH^Vrc)Oo1ME!Zn0SyIMLG^U7qTX7` zJB&?>$a{E1EIiXc`r>O}=PRwBc8@p`#P^F(v|QwWUDX?znUDII4lCP(2MbU@YGKZ| zirMCctB9XH&Q(=JI&ni?V63oSjLz9pZ5Tp3gb52<6~HBE|IbUP`}p{5cMf~S(ZaP} zz=iQF%v;nE{OWuU50}#6wE_6-%3ipa*2nab+;5l&ZT$cKx@`kvV`FGK-Mks==DKS3 z)MXU|cabgvHBAa}gUnrFE^y$yuAGwH_#Ot2x;Zk#!^4$O+Q7yJyzOeS?!^lN0^h*= z?udMYSd|IUZQ0e;MTbCKlwFO6NU!^oL7!{8-mh`E7I&GQ)$!Zs@iD{P%hv6~hRbYb z&YMKp^8fiJrNhO?6|H{)BGZ5f;|qzz;o)I`fUJUo!uj(=9j_i&_->V#my5IOw7#3Ln%t4$#byeP~%;4{dHD* z%HKMk?@aDQhgMbn0w3?xt=Qb$+~(%r+y^543*qI$f4mH@ShnZNUix!Y3BGrm2UxpfVs%&z@l_sjRB(cl0i!X?v*y6q*unhd$_G_b1ZASmwLxL+ zfu`q+Bd}-mxxA5|%u6j;JjdZ@Cnr-ifp?vcudmy10UFAZaWI)LEj^#Gr?L+}=lkf3 zk=yRgyFVK@*yMJCOETe53=Tg1YWaXX6Kv2DVq(A}`6u)Pto-I9SMq|{GS5QnSF>4` zb7qY%UtWwu^Obf$MFJays4zc&ZvEY?Qov4WY%DSTvp%RIzl@GLnRuC4yMu?T43zHx z1$(0h2^l>5FlsS{r-JN3CvtR8_3hI1C#sn4Xgf-A4j0y0yK$P5K7zeF`EW&I_tKc z(H9ewlZ{{qUP|#gzD+cuO%FQ3?f`ekyl=0otAjTjXchW}K3kBhbDNa<-@G{v0;XV| zCeUkWh3Mvrk)c=V-3own5SmS4T-=_k$2Y8kcz+7-?(U*xIAvvT8lU>WP>(tWg}TO_ zl&d5BdU&AY>@pQLEz`)#bO%&QkubPcUYLD6t>{Z zHiWi$4MvO#o{KSWnFz3)5z(5c!1Es^1{G-O>5C6vpsd#z7MbuqHCzB1lT z=2SB%uPYV~+2N*LE?MMw1FT!IPOQjE5tyf=w=s&od!kzVR!MENKt_ zdhMUXk~D`UtA_@h13tBY|kR}-m0#yo<04upDto$YU<_dYuYHIN^>~$8(|eFCMs(1>oy{q z3LI`V%fo|IDuLDU=>>v24syR263tCbP=lKq85Jzz;p6}QdA~K>v9k<~e=8-4sdB+q zw+3Yg-HPB-_S1uCr%;$ys4jsOIJK;5n0Q?OuV24FRy}l0(tGO&>Z(l1yN~M95q6j1 z1hcbS06iI;P7M~ic--M-*pMArs|isQH{G>2FcPnRi@VbgOf0ffJ>@bF{PsG(ys4nY z%i@Wy;9ib^u)ytV#i6TrlAV|ZY%CThlE&VNfan49 znt7?L(Wxl~@cV9gQdm#`d`8|oY1cw_gl9f4wsE$O6~&)?Bp&ZTuT11z9TYyR37-Njlk}#SE&qU6LUXlsO5{TvuNz1hJGsm)d3L4G4@vW87@`riK_a znj5X#al~Gz=?47*fMhTAuiE+9Gyl*=)L^#sAaEjOB%RN+N=+(&g9OAWTm8zOu`xdg zb4=?lkHKrc0@^ZM%jJc5E@9KuzkGolWC!*LEB;^mb+ryU|2j~u>47jWgnuYa&HfjAZyrx|zwZrS4TcmN zuw*8ROqoK-JTwU*DpQ6MDx%0(W|mCRKoTl4B&Ez`SS2Y#LNYF6W+IZ|ey?_W@Af&* zeLwr$=RE&Cf1TlVT`t!8{l4GNd;Ab^oD;yh;irYf#e*ExhO)A{2)Lf3){e{v*H zD1mT`LV$0adbOqB$l|H|S|gKtM&2Vd8A*qy7Fn)e_NEQZ`W6J0c*l{u%FLL4Yh=9h zU!)N{QXLG9jop4s+w>PI9@D%-Cd)2cMy00iIH98;zo|JmPq4hMPKSwjX=8Nqv>?sJ zY=t(B(X(KB-5D6$77@G~4%tJ$Es;nZOcr#dw$BY@OQ(tpf32QaUS8rhm0Yc^C1a7h zprJ^(p!E83Rby{T?Y^cujj!^bu1xPS-y)p&-D>%Ud{gbYh1c8~!xFRi%PX6$exGO4 zO{Z`oo<6;u>xk;Gx+1|RE~<`n=l5(~U59qzrNza@7bvk!(vIJqXISQ^W~cTq^L5Cg zNwM417xO!kHlgl(GLN?u=40yaKlJ;fr)>xj6T{T~T z{Kp>w$H$I+`<57@eCOxg^4)HQ&`^uWwK>O0-B^3JN|F(ieJMJE zv=GEPy~8@rJUY^`gWEcq=aP&({teT-AaQ%<`g@1lX z_3^|v{AbwR&1rcTuKn@h)l;~IXGM+zZ|i@8xB$lbClDG;+nB7Ao{@pcYqI>+dbKx= zE`NTiB?WFKcK4Fz0;CBTjLLVymA8TQFqk1ob&%8=T_mPoF-WqNE;W6%;ti?@zEWGs6={SmQ_eh27lU zy}y4xV`+P>P7_)l=D#(uk@4|g%6wKZ)raO$vZ4@!#YU8xsiR*19pKa(R-FX@OWFnpuW$8Hy zvP_Z%ZcZo#r&`; zXJhi^DO`#Lg@q`9SFQEOnxQ@olUY^^FYJ(VYv4qaTOX~%Sm%e{7o|$biAMES1hyYIYnJem|TD#VB_LEVy)(;52 zx>_d<4FlNBJ;q)rEl)*E6o2~wMyltdWjNhVjS)=KNp}9|u}g;LLcXzujV&}y{Uh%; z%mBeJarF5td`#5+K=~J|tM|`x#3IT_LqoIa+s}!zGMBGMnUWWsEdatG_mYw^?{n|H zyn*>~Wu?>C<}CJO_I;afy(Kj;fvRk7ZnjOs&r710X}hyDBnn`}2I3Bg9O6#k&CDlH z7(gV;$Y6jT1%UPP^xVK%$1SN3X=+ld%gf0b>yH%XlgWJE`6;a|YCNNCZ5#dQ{I7dv zZXZyFcghZ;NUQ553)_vt!onO0np{qIOgK!+yuC2|url-rrUV2e#NWBob8>?gjT&Kt zgJVoXBEq90Y}_<$-75+8gv~|sW!vS??emn7-_~UtU}PUlbdBroW{=}Y@YL_qF}}nn zCL=2+nN?}L*N-Oq)-UF0=JLd8PwK=JK2gUh*-kerQYf>desx}1Sy^>g-UaR|y*uxV zPgPP^i!D@97J!6vW_Y^=S`oyF(%( zRu;e2^;lPsPL1&?NlVX&`}`p0AIW}n1XI?V&1qA3fF~LsuAez^ocj<&h2VjOZa+pW zk9hpJi-bx*AQ^gdqkCMvy}eS%P3@Pjc-{KfY4OW6e)MVb)clO!?rwc+!lAX6lUhy4 zW#{#mQKBLuF)17L0bfo-hhy6+UY}qW@$8;0#@k};{qMf*xiNp|@eMM$*T{W`O`lHQ zvfgLwAp5GU3UUt1J!(cX@!!1N+aYv+|zbelcx3pDk__KzB=RmhM_;J|vnWU`3fz%93) z@Gel8f^uQAfSgsU5#^S3A1hm)&4!aEiqRf00SWpWq%~_-76+AZM4zY%A%H=rOj?dk zHWnK>IhRJC*H!emSUy44=HP4FDp*XeEZ3sxfRgop_&S+F!o81^iCZw`NLd}`++<`| zSyA!Skix2%J+-*jNXvTBg2!cMNH1wXTTPNc162s+Wt+X$Tt91P7n;<;B&~Tp)0G7~mKI@F^B%L|&)2378?u)ldJPI25^Npq|$FFF34HoW#*sab>?xI3q_y?Bx#+In{N{^B;25eL>bh}aD z*i!+MN7Vx!=|?zCZ;$EkVC6i;D)esvw7%t`e7R0QLm6r5CU7b^A8T}0n3$LldRIQz z(`-qmbD>%AKz#z#F3K5PlXb&bI}P?CmKbRnnHQHILZ_dpfCgouEy1n!OKRKIi_few zqv}g{clU+TAKQh5*5$wrKs=l7E<;i>vdQ&7mGLh*i9KdtAq1C3bSkT-Vc?@06nZ19!p( zshc9leUsVHn0)pD>SsRK?lem2876*wMb4jCZ4ZPxZBlCnsLec|UG2V-2)9-&uS-b1Q}a z`@nyVx7;tO%u*)cb-rBRI*sxNN!rHxV`R3mEsS~{U|)jRPUYx7I$VCNUYz$4Ej1lc z!+7wWc-dV!r{vc9ckk@m^PTv-9T(@F+!ibI<(N3A#y>x&F|1tubLOj+y*)cOcUQK# zQks0aaf$n-jAL2;L@V)nOJg7S5ut7l52jh@N?2CWLP2xzovc4EsIH*ZUn;gNt)!)K z|FYA@ty@E)Hn?zj4d4z`R8(YjwXwFoFO_d!p0r6;@X)J|-Q@iz8BB}yk3Le+vI)QL z<7xL~?z4Kv5^rhJ+x<9N*#BS%=V++6a&TlS>}HR?1@2+}1yy09Ys@^*~vKgmT zU*kz1Ohg&Ukv^KWYXv_(l9G~&>YbQCnUT^VhOD3uJ2M_WdW0Z|t@qE9N|rC++PS}W zXnP-XbXMsU!zR9qdP15^HR8qhjhPrOX)dEvfil=7FuPu{bPn4RGanFbdG%V}!MC)` z(AaJcOE=*{&57VU-JjVFSt`cK%;5(ae{thtm^$hfXB2GgL&Tdw8sA0 z^#e6b>zSC@*)tXmb~tb)hn&`f8AC0wgQ++1HP0_xn8rODEXD*_crQMlI8d>QbZz6E z8XpgS<^L;Cn7hUl`(a+9E9!$(LE`B?=c&}KKTPia{bbgsxy%0K>+o>g6H;fVH+)w( z0s_NFBp|Za})Q8%}NQ%?;WRfZE+7E_ZJdF8VH?gdD3Tm9;So2Ybn_#M`%7XJ2Kb%UM*Ep5Fdd8kfYsBTMD;Z{U!73U*95Hw>(AP0davC3A5B z$~qzto#Glo3IbwW(0Vp*oK%jFxp@!hozi_cI> zy=7x#zMSLb%VuyF=;=kd*<)V5aKZfe@w2UITmsJu=j${Cu28uSw9X6v07X!JgVxk! zbCX!O)pIb1jEsyWF^35kB;nl&RNYPx7ZZE^rU!hEo7cAiZBVZ0mQ$md-5>RdVh+!%aOjFv&5jyw{(yts z!QNi@$ye1O9MDCeWr5$Qsi?|HUvkg(e*GHKmNP&UFLi^_1HOgp&393_q|WNI^0O=9 z?%k?(*Ligc!I-GH59*YNJ0KVIF|#60I8t!EMx5wuv^;YrwSnPCjHX+EtdXwxF*R>@ z_k}~^C2J>8YI8qLOjgz?MjyVCW@XW28L)m)A?zI+ya0@w42zbN)Ube{P_yMDBOsz=mVhL8X=Aa4obHxn2;l16$9KW_vgQie(p$Z13AX^3V-i*%>pATNqG)J#2HA*1lm%jDzP##3X;CDM2(uQ*96f3Ba2O!;OfD zh$O2PMm!{6gPSgWPZD_8?-8N(^3#V+Mn!H$H`aKx^L_I!y>ZVl(p-0xg|+2<-_`PM zEk?hYxdW_!YtQ1$1(an31-< z3?P-d#Eb#wW*3$Z^oLlUU&|4nnwrwh*|bd)6)p!3-w(Q^5|;;CYeV6@`SLU&laWg6 z)2@LC#RXd4q`M%Xu!oFM*fv)x492>rtJOKQuN{eyOtn+_t91&9s1A-nbq~w#RV7lA zlAEW}vWe>nTBgC~eenD;iEh7~1%y&>uAMbPMl8*FL!x60X@GTmk7M@9Jcb6#8{%b) zo3966d|LhK)1{&MBwFJRN!nIelv9YBmv;aQ-oKGTI29&~y<{Brrv`EM*cx*@Lnl_x z(`5FPmL50L5_jhK?)qTDW}Y14ihcCQ=1Rg1sp;#-++G|ja7$gsfPtgot*pkfzu^w@ zQD?lzd%|8wxlOts_!|K#wl1<5g=T8Y5MfvKY-9|-dYIC9AG!)W#Va<*l1UZy=cmj) zC=M@3x)woXQR`gz-*@QTYigPx3$oDNj*WeIgHiAM)YKh(6hH%=9uxZ>ZnS;!jA8ZF zN9(sx)thW!y_=ALkLT$+vO#mzK&0N#cF$xyqwtCGDT#@V!=xN!myr>;CxTse9A!|! zDsTPkmA=(V4eve9$gQ}66y$Mgi2{M3HEsT3^u*-H(u7YU?DsJ-Gub{%!g!TT`I?9)(te{UcA8s@1BL6AV~ zllR5O+fEhC&dsf$E;lkldl%pI%#6Wzf|)lMrM95Vsr>_F)*SfVH(K#;FqmZ76YkXV zORu}VC-5k%w57iv0Tf|`x3BkezC2>@In@*QTJBWU9Zp~(aF;di724)gI2%#3eXq&3 z^UN#}FD9k`{Pb%$n1@70&p~!}qaRz&URe-#GoulOI2RO4O+$0*=1nfd@%}Gvh|0# zDtce-?b>k<9DEtBZf??HIJ-K!AYap?zTu$de2`NNWT2d!DIm`VjO{K)984TMVOO4R z4<{z6HM2Js%^$WetBntMzWWD_e=04(yiizBI6G~^#K>j~ao?HHLp3bt82{ySAO1mx zfHVShjqnDL@60Cg;V;9WxqKFTxqJF`htDK>9V-~hcvLzd0$zV_^l31Ao7cliX!!xQ!xtmBy1+XsHv^%M|xJbV| z`lLVO-GySJaEoPwJNUhDH+rh7aoJJwE(hanrp0gXXIM>cJFRo7FNERo%)>Ty4GmQB z9jX<%_19O^;*7V~)Vy;b{@&X1EPz<|LO%AMDMeIJfNfR)nJ}E8Zbg_6@KyjF8P#&O z*ovPfKJKX(;T14mb(C-592PTHH#TmTPu^%#krNyH315YM3+t9GYkKGA<_H%~CDy;k zJ4q4F!KIFvb{=_|Pv`}KHjbw;B!J#x_e#~KgbqX9Cz z0t4e}QL($S-ITiBd%I5gR%1!Cxp^0c0R6+C%RGNv#2K#flcyWU6ftBU>~q_Ezyiv# zkpJqLfH4U$SXb4`gyVYHiQ(ceFOE=j$^qzO0v1)YV&^w&Qhi( zhCDg<8Cy_SN$GH3;>Ao02%rk{1m#XH;KR-JbWdNm_+i4$M-66YDEuhg6fbQ*mwFWm z(l5-{O4UJP*B(^yaJ&T;7EARsGV#Yv!}2saISHOT6CGailM@tv2s+o-hqqWnjCqoW zo3p;4b1i1L%Aa1u*9#sbqR>|gn=k;X0X~l>Xhn(#HG8Z!)=0JjNr+VK`0dh#ieS&q zR5G&eLOa23CT$l~EyK(nQnBgft^tI$@bL)x;A2%$QQ0HLVD;x4)jWSHPym*#Hyho74gKMD5%*ZZdmZn6&r9yg#RjtA3$D z&?iGfdG1$OBF&-Tt)cLZfA3y)u8_QY_wLnH^3^kU^VP)F)UvcD8S9@J58^>nOeSN? zH^srK^$a!A@zK$nGkMMzHQ8#LI{4~pu-3~Ay{J|n zBU2wY;1!!(k7+AFk`!YlRD(me*SX%oj z?MWm!cLuTFjM!~-@bwWDK9ZCplkVQ|fDeZks3Yr0Bxk){hYc@Uq$QoGU#cG6^Xw6Q_urM*< zG~NbXSfhu7i5i>ua$hfB`A zI_js@+WwmeIq>mqU7gQ(!C=_+>qfR;JBsGe>-z59JMPlH^mG7SC0koTkQ4pdRaOQc_m*^uKM+e;VZ*~-~q!T9gy zIBl(8#ivzYFgX@u;D8;M(OlBs8|ORHSqLOBn#XB+WVvHJ0yTvZR9mbMw=g_QbEads zyD>mQJ#wTv8y6jIIdq>(27*^k>LC6A`Os6(+SS4PQi z@lqC?!}qTrX#~n<8V?yGN~ZsK6A_*07oi!rm=s@fa{BuDd20SKFUqZ?7IY7rpdo?E zls)(^o&drrh`M3h6_w3^7&|s5&T2#GT7#SmQi&@^l4sePL4gylO79iQJ1fUpbJ|uAV z`}gKMmf^dhM}7g0X1`)>bJ0mU05ZUf7cvX{42gbzewtry!$9#*MY7>iLp1AC{Fol& zFxbTj7W#6GUi$M$N$LTReaFzQ6C{rTgF`!N-7m7J3n zCbBoyP)C@U|KokxB!)lxgdAV(>F=YTU%q@<9drz=K?n4$l-OycyhPEpOVxprPR>$oC81$JTfFb7B1nE1MSv-i0SbE3YA@z5_##@7&osVr%xn}vQVasg_SUmpxbVqY%-5iNvu6!;)Y~((&KTBg5 zKsUS|a3l86i1@%tDtPSMmmg$2=-gg2dIkneW>!8^C!CyQWo0EIs4ny@J$dpZ?nDcT znee8RL;m7gQmBw}>stC3sD&J5z;@6Ud~Ha9CF!E{?hCdI_b z;DP*D1aBy4tu~J9R{%>f{}K@8vccAYun$*LB93VYqjj4q-r}zF*G2&~nkU@+m#2KR zFSZRj$xH0J5L2K99kMsZg>1q%z2k}ewZ*sgUNc6QWg2FTQn76n6|0@#r`W`j2Hi0! z(0En6uy)XGz4e#ZiYdY{Q2o$WICsNA-L9s7q|Gxn}e6OPf6+TAd%i=&jfn@??uN0A0axvT7BvQ zBv{OU%FFlzvG2SCe+$yMAvuK z_JjUeCthqm-*L4%-IT+Mnsls(jH>HXnwo)b8A!+CPB3R7e5JA#CXuo-GfS5j>}hCd zs_?4N;@;3+5)1FCLBPN2!5OSB;9yDGs`m~rdaO224C^)NF(ENJ3f}uNZF_3QxHvo_ zg0lJ?a@~M^`Fa;t7gIqwhGrAd#>2V|3RGgH7WT^S$I54}D^dSOdqbM%^|}h4)NE(* z_`q~4MzoE~_75panlr&emXbhSX||=`+}8HWG&I60v?R^F2_>fpT0PDKwMj(T zts6SK+sQ*#7FJkIzu5I?H*kB2`|M_^cLK`pgbBNg-I3-FM>UuG{T+J9&gYIiJVT&N zH#%$K{daLO;rRajHTwlPkLSRZdM(W8JrV0F@gQ(&q$FrD=zOw0b3v^ge4%UaYx<$0 zi`l%(bX5LCgtKfRufFgZpq58^B-Ee@mp@!Ut-3&yY^EMbR{ zD0)_LrWvpOi;*4XQrxqo7)Ev4F6QjnA+p=PE7R8dUq1T@OBO-Q`}^qe7#?qVTD$oM zEpAk&y+nXp@4S(r2}fccE~Mi~p&Z=wG%ITinT>|kfH9*dE?#_=pY>7#FM_Q^SQi85 z9{z#k`xowCX;2^9Mc%(^!{BaQ@YTVyK{I0E(#;i868p-!FNZizB@sKaANFy4j~GiY zF@GNa_L@FHKlz5UqRh>{O~Sut;kfW{#I+bN1lqr@s#11Vg4ICu1gu*;0|OwB-y`HG zuiLk7%Xa0@QR^la$wYCBJJmr;wDbX7N&dJ^E4;RB-t0150{;vGU&o%9JZ?z;foqIH zPJ$SjVqy98{ESWvwN22zvbjzVM<)^04S4T0HOkA&jmKc6cC$Zs?z)WLAq$K9yQG#1 zTSK*1eHr2?MbI`eX}_??x_aZNft_9Yg8WWf8n9V73>~n+ zd1uTO*fUwJtxOirdWVN9kCAyKB`>0W8eIHh_@ydIU zBji-7O4hJPlZL?(jDbWxeT4;01_+4Xtwwp8UuWoeN}n%_{%rp`>Bq^{_q#b?FAts) zvJzDwOvs5I&E6_T&3H26_q4F?iVGln1!jXQEHzd{OuW+Yz)Jo8JbB+&<4r*@keJ&& z>s+@l)tR&~<^P8O2^XdLp{$=>3;qi4`T6-he+pBWBK5d89Dit#s!C#=4Yoe&x#JJa zRI9hp{gLfT${Qg&2^Gv`Uq_@!`47wM(3{`E-_>dp>v`4D6Z5}Mm;FL5#O&+~AePrf z`9iwNcWViuS*TNL^O{yc3@+G)3-8k3oTa3Wj*hxI@! zZeE@F&JjyA%Kn=*w1+ineSUsnx};z}*8lL|ekr#rS2VP=&TJNH@ zx*~aZc3k3hj-xd%URl1@HtBT}Hod)Y1^ zN0}_+!uj3}4C6R}(AyGw_rU{x2#Rnf|0h{8$liZXm(u8hj=YBH_C33`9!41cR(GcJ zc}y1Jkt3tWU{s6S%LONU3DbCgzYO%gJ>t0_b!W#rD7Fr5!JA^J(jOfyMr}rNGT&4) zPLa;e(hqufGBJlM5n}t8+wWNQX8$9%Hk}VlH93H>|Hu6N&_l<<`8B-AW|@l`KjlFx zHXEJ`P)$xv8#tS`X&fUcxeDz2c3K7g;D5SHdwttT4dQ@9N!*;_*>+Q-k|2LK71j5`LGM6d6k zDWW4X)VfB6aMc)@UFr8(9`xyS>!mjso1i4CZu$DI&S8oRANGHgl6?V&bGWz!tE#JM z8|;Q%k&*?VE~`^o;W$Mxh*nmrnFJ^7J{Je45sseVD?qS(+$xkF3++Ci$#NRF?p=Wq z(Cl*oP8Arz0AQ*dS9=UX%+$?kLv%Q#fmF7#GyzZ`ES!PMGbvX6BiJMc_T3`l6DuqG zlWzipQ3@`j-axz6`mzUstdl1R%*^O+d0Sqtk}|gAU(gc8zj;|LKBb>`gtAjb{^Enu z*Vm}E@Bwp16@F06eUR%pF;)GtO`dE=nLR8bPFi=?xi&thn_eH{`gbotARUaij!tR2eH(03B`NnXo`g#K%$3GN;`royW&u!l4Zq@1&zJL8 z0VH=B%mKJ z6}i(bAHQkd@yI<^Aa~@zjt>HSKIFJ9)rrN;vO?RGb}77AV*RHlbBNsMq>?`m>V6J6 z72^7vID0aLZqWSh^!=06@F&`Ex0kgE4>koXB_NZK8V?kY~J# zs$x`zaf}>U0DeJvPD4>)9=Jxk;pi7MwqIUl6@sK=G36?LQ%M!YNC+AeTBSCQs0;6V z7+2rW@xeO%3|T=q>^6%j+Baw7xx4;7il;J=zVa`%$F}&N=H5RZ+9rbr;zk{RHU^WN zR7=+SJ}cfk#9n0!TAEF+mo8!IOgA<*zN_S8CQ`Dzk~7C;VaV}w#m76Ze|y1!^Oo*X zkIsg57{6kZ*%>O3fxM58bZ$+bt!o z{Jd8%KG$xzu3?J~M_2Y4uEY*lwCZZZ7vgL#zpaVGj*Rn^vZ1G&*x1tBdE_I%kaFVh zo!smqmqL7Ti%hm6P^*=uW-c6%Cw-Rvdhp7_0INS8h|^js$5VV&?!?8>>C8?~`}(NG zVpHKq&>yq)me$rYkTX>dB&EXy3D8B6;f#;`C54V2AAD5m2jG&pW#)bsBXu0jWvBVi zl+y-hacJD$OT#nZ{FUEN43l>$9p=Zcxsz^NabBmpJ(>n09rEX)6U9U$nvGV#r)Ev< z$b50-skBn6UBt%w`uLkRep`hs>=cLTBm$w{%RdI$#ox2 zU%o{0mvkAKq3hR?N!K6CMH_o}`GErmhR)PZIlS2aTv_8AD>er%R2Nq~6B70bJzUEo zrs(QiOCr;4IceU{^d>7vIK%Gr`7p_U3X?~c1=Bh^+OZ{Ggys8&8`wi~!qSpla>V~M zg_#mGH#U~TXb*dR=kZ6^#2C6tGKgwTonCVti4*gJv!Ms0^ow0Aq0>8E zOcijNLk$BHPvNSTbkFpV;aIxPCexO8A+g?aQK-4D{S(QF>E?zyv7I{?R&sf`a?JXl zh=tQHqW&bw(=|Ic*Fahq7KgX_PQ7>~`OW6k^EPnqX~MvG*Y|^jtgKc)!q*7z>c80Z zzFc~Zb1Ze|dgMK&ShTdXxVgC{cJDf}>temeka54qcc@9m&re_H-PX+ASR@x6U}d3c zcJ_0fVFfAZ{db-BVr`uFEFXB8e{8Lh;^Y14a9U66&;i99B+b>)JmoJZ8y?QmzqseZVM0n1?2@ZN~Gh-OGa3MfK?WeVjNkcDw@u+F$-n&qV)@I<%V;GjH=s8Qzr#9SRCW_2*{5$Qx3!3Gkh8n%x!L=1I(`vJ zt8;EAjyO$5g*`m4rPeDM^;&GhpEe)pIeuMpZv@@P z&0Du3eiH11c|f=!gYVn2H{%HR7G#@Z3xuoMu=U}K-uZ*46CW#HJ`$xn+03%CWE>h` z)$K578?|t_!)Eg7?Csyy+(@lxc*5~x`bUHIWvft z{Fv?3Zux$DdKQEZ=4?IMvyw>~IeBU}=J5=_rr=v>`X0o=n zenqRLgX7SVdB1gQT=_bi;>b`a!9K!ApUK}@tWx=3kgf^u`Efovl2;O;$97{vK5{c)D_ zckRaaj1hGUMtT~9Q(R?lG*)!~PV#%v5{z=?1O)m4m%>6qu1v;Zp~?$fyKtqjSpDt4 zPl*_z*0#_E#lLXwy(W=5d@xGI@ z+vII39%3#Hq`DOi#25s|V7J~^7t0>5VzOA8gr7j^RQmG8Dl}jWm2vj=Bd8F8$5Iy_ zODmm0W)rc!iTcUEpi%@XK8|u1!X)Fn(uBzT5}L?Ij~N-MT|tLcCB-Iyss$)v5WtEN zfX4BT&Et)@Y!K<$hTxF_Sf+7|8|&|YQw&8XLh#8GCrTkB)$N<(I6|pu7}w|_JI>&% zrDv0-P4z^u67s4gy{wqi{NyQcPkm+R=;-O`sV>7XgzSG0nLLdT4MFTRQ9Ms^Q{pq& z-Ryfvxk7rSNRuiFDdpg_NR;JS?~fm6W3C>8j;Kx_SpX~D{(L##I;8dLll;=Q8eMyw zu|UsDMNNGfz8@P@>`}j9orr_f8|?N@4Igm71Dq`)!p)Uij^AvhgE=NSYb`)imx-0IIl$)PWv zz%1{+x%Uj}5HK8IAka)i?d0alze=nT{thv>v)dUct7(K#kab5z1vw+T6iY&{{>>rj z=5q7{<6d%lx_#c5(r48oO_LVV^-P7l@x8~VC(Nhm-W`0mb50{c_T{wn9~fy^Enn_1 zIz}x3UohmsETN((?F74sqYbP4S|=R5I9p3IAL1mX*h25Xv{ z2mhMtkc8+p$8D+|^Lkfck0029Qr}h$e}p*D^n6=$gskhFlOFy%xJE!QkvHEy#KYZ8o24GKjeBXGme#An3-?3Q zcb&8C_Cownrmgfusi*vDIm;Mw;KKZTD=OeMQ_k$tyDNKvYgt2h=T24eQ~cdb8;m5v z1e7fa6MM?v33MB1nuXj^Q+DPgyzx1}o3pi=yNrMBkKON7#rtk)3Jl~*y2|`9)#4kO z#}2~o7oce=RwLarixY}iAPCJf_`YUFG?sz}oHr|Uc?_*DlHF$C`LkyqLrO)9T`MUB zTIrkei>AbsbDW0mrn)y<)!&O(5+BGf(PeO(^co5&$MQvsxMA` z2jtZ=;RqV|kg$G@KJu2os1>}GM>~&_LMWn*3CG6}>{9G5L3AE!eU(;P3@lZZCPSEX~Bb%dY=qWrqB8nB_RJ!=>GfWBCIPT5J= zH;Xt}HTpiTNJ#Ykp$$_g&+gqU`rD`E-{A(rSbf-gG}mIy9DEb&IK46OoD^*ofm}r` zcD_teGW)4RO-&--mgn&9b#OT6^Ea$&*r8tf&QqwEddYsY60FUOBvc}y>84ettb_h^`HN+BYzfJ zZYRDQd8*jTXn^a9k~yyJ8`#F88PVvdqqH=GEOsbyTNBorRkV=yCLCPEW6~ZkW54~T zMDT1Eo{b9^CMceREi!F&E>rOOL@qj zXpD+dN*&x$?wtf02!rCqld7mlhu}-Sf%UJH09SGy0-?bS4t4GA9P+r%xIhboe{(tr zppIpJxC^f?;%+Y|WMpJWOhft5r9SrHM7v1@5sQ^XMUx7SDd>Q zn!yYAe#Kjh>J!BdxQ8f7DeN*RoH(!Qqjvzel@n8PSTrComMpQ}uSUHV-(R_=Qx{jo z-Mn!_3INqjiY^mrU_2@h`jmWB#<6lHRP&TkQ^?`NQU>r9l7t)DV|z3uiGYb?~=Q>Z9UWx9{AdZ@46|g!({br>~EaYL?f~>T2!%~_v$B= zlO)0+EDXpQ!z(d1mT>D<5XVsF&vWaeRtLHhsd- z=VWRkAR=;DVeqxs-3?mkMbedbFjKH4B;1$&h91&%jltCh{Uam9)f*M3a+n;UYDt?5 z`I+{A5ih(%w_d%dJ}5tJT$SzNj%|E=y3Qc}FEK8`^mH3zKIU-xahj)}aco!RnSf!u>JL0N(4bq3sfQ}+wH*%Md1 zMMxDAjxU{a_j^4Wm;A#$SiNmsZewR>=Z6nR-X4b`BP8Ul=?>~L<{u`DPJoAJe#--@ zTw5`$0O;+^r8Hk*5FuYXZ)$3a**q$$0gUU+Mc#jfZPnY3g7zf+K#p4DCQn!E<_2`2mlF z#3r%Mw~f8RL4SSwaScw!9_R0<>5HP2Z>rM+5w0sO5;7+j#sBVv{2u_l|E*8V-<#5i zl6T|rkHGWm8+PERgMU@YB_8*)X_YT}%gD<5bf_O78*gI$A;ZF^rlwkO5wED=98L21N^G5r#E%=6nu!t2LPzyoIJ=teb3KN4SeXT6!&Ua zXgNhYD#L9)H8sos-2QbS=*^j>jI`u$ZV_F*$v$a+>qF=zCx(BH`jIWEmKQLzC4U}k z=$V~6P=kW`8$9>y(I59!{5-w9W{<{-!7p?5oZ1Y?x2+8T9Wv%h{d3kVWK7SW>vJK)N~C7wU=`9n%DiXkUL)1#l6pU$K=ng)ds zskNz4u3+y@0v0JGN}oM?@L;If&Xoj{MI%^6Hr_EoAAfsir=pk`!xu1-NX&r*4`dil zLIKO0dmn`JO)e{@s{aFh_Kl~RDD2teUg5tEmf|McmTs*67)bzZ{5h5f8q~X4tRyQv z{i36zZ6-`f>c)GeZOeVB(4@j52~mxr2B3U%Zlq=6aq2yaME2!{J4yDsE~bNeYkeHq9{QTj&5` z=?LBx>9+_29>qu*yz!2%X5W2g)Lc>~=qSH+wK$L{&hEoAllZ3(YisL$Luzp&-1eS` zF|9J||`&BZBD1rW30jH2UwhJ|CbZz7?>jZ92XB=z&> zmoc^?oJ~$tZEr@NZKfDqe-!ZvyS3EbJmI#!G&S_#F8AdsL&KKyUwobgT)v+Fgfc^& z?{IzA*HzZXd^7f@;W%;61&98#e_U+socV4TuWyN-WVuguk3P%4`ITQ!DdO;tpF9cl zsT6{fjXkXsV-xC&vKrDE)sI(8gt1VIXPyTsD|l63dd?d?DL%+LQY}@x3kZ0Q4A7O^`ECS(V%ZK+g8zm@e)32LljRU z#OaNs=#W}2EjfH%V_#t%ju?uk43emz-y_P#=NmUr3ehdNeVrWV7G@^31ayX9ff;(B zvyLQTcpD+`j12oV6Qzg67lZ%ZqvK-i0Z}J9q^v|0%$6s5VI;0wT;kn3+s`ps~ z%Ok?hM*k>J0i8bniqumMpEUNsyW?##$~qx%vsG0MBjzI!4kf@z2mD{!Igv#=2K$5Q3d7DDTnoA*h?TeZyZqb5!aHW#qwiO4 zHO(wRx~*sz>-0XGPdYV1A4(4x)d-7ntfBv-sw_>J+zpx;9Htd9IX&NEpvM^#XLdvxEwuG8I zzsVxLU>rA7b8|+DCbX+aGu<#M6pAs#nmn^!XIJ@gUfZ6eMl%zA{xtTbnwTtdC~qVX=Bl>n@UZ5~J=!`X5fu@x@q+xe%?4ByC?7Q05Mi4q5*7HMXOc;bHvd8@gLPIm=%UYl24LYs=dkE_t`%)eTK9F>BJDXb^l2Z@1L zRn-mJ*YW&RWe~C}G&D5*&0XuPpNme|Hlh9H`UZ3yMYO_!WTLutMU))!xK zp1O_UBLVjw-!!g57?^`^Y3ZFF5h?7O|GO6e3>iFr33y5c4&7AlWy*Mcslm>$Pj?aX zcyDs+YyMTD8iuGxQ+BW{Uvot3B!0ithV;%76ON8qobHR6rd)onPn^ z+EOk8!OMH_;$?sT$5F;rT^kWDo7o(=@zFkV^Zi2&JwtpmPxJjK#agUu0>g}bP)53+ zCH&gfD-UgyjMfpjcYjfmDYA8S3yu2jrEMi#7wkX!{Eh~vsKAdZI*1>4(BhWIJ$Cc% zviPsb1Li3sBTBs|EB~k?tb)K_t`{%*riPk7AdilQo$C{UdlU9~%N{pSQUwJ+P@#60 zGJzX4QSUh4@`Q87Xm)KLuUPol;-Y8%e2kF3?jRzKNiAgJr9!dsi3vt|&1>*-BU5W~ zH~1hr%81oT1A@g^9c8jJ8SF0!9msianahgK=5~v#{Q%)wPwN!8V-ZVA2fL%>Hh1eoC6JV;$dP7>}URhIP z2L`lIiNoz~SqfkMC8z7(_XXircXM;IxC>gBrgxQDxKqH-@oXE^`&+InU8}$#7T(u) zWAc#U^=Z!7t@f24FNXR>Sc_cR%f@yqMEdfnr~k-~nWU(WGi2hJIePpo{rwh4rr>F4 zyAhmw2fW#PWG4@S;~J%`x{+{bwMJC~l4Wn3ZHYVlZOt;qHsyN2gSeXMj>Sv0j&qg_BO<@bCEU=_QFsyBtu<|u*NkBtFlR1KK z&R|xNT5~b40<<=?s}vYtDDt;ZKpsKx>Z__Z+%j!lDMBAAc>CY19->KmK7HtL!&~ek z^0&6n%?{Pn(n=|w&fsfUN6RX&t2t%C-W;5A@Z6A(T;avk#*ZKMjE##nv#(~Lr$3i( zQZq;v5D>UsGPJC`=40wEQP#mB<3;`8Qz6%QB}qox`zehoHsf?TFHJZaFUQ13e?F5Q zk)Y4dRQ!VEqjb}PzlrKKg{QL$t9sRv!=XZAkOGSNKO-Y6M0kez=wy3?S z+gd2`zTK9JE9sd2MJKTO-4&7>Vo&)2+2RSNm zaTP&!{u$l&CCVS!ct1~O=b-b!4Om`hBYcksxO58Hl+*KEI@`tH?zTci9BC|6o^ zfL5>46@Emhe9+H+`w{==^}2ukoG6ZOyZ;l|OUmmix^rBa;IlUW(g^G%$EMFUHZ~3q z4|`7#%}PBBFiC(NcI8UX%&e`ho-bLmi*}y<85$cP>Re})SnczEdU_h>lV&*MK>TBt zV7(n_4oR!$}S-mfyZaz3d}V-SY<=r0iAW;NaM`UdFjI@;0x9{Isis1JI=jCWyVlX~5 zly6b)yZ76OlM@FW9bMzQPb<3Z#aFge%;6e=E~=dpn}lWuEcq}<@e=dE(2b)qxz@A} znSypC`<6`eUcUT}SU+~;6iif8A*uGN&l;V_^Qi|%-QCh&XTEA1^AJm>e5+n(AUMoTt>KLTG$L zBAv}$)7jRBC2?QsRrVR+=e2&kLUrrihrt-ZUu7;S!JW;-Gkxa2{@j#{Q?<3VkQ?qP zdYwr5luucE0hHzerv{=+hNh-j4T@DAz)0UtK)2g|@BTKpFu$SBn?};y{p&;2kpNV| z{x^R>6igwqDGB2m0mRe?4`6*^N>zZdN^S{X7F&YMPS)W1V?I7BfTT1wX4pJHA`-UI zP^wd~MxYfV4?6Rl(x8nwzNfUNexay+ZG2q2{#SW#9!_Q7uZ=gSkTE1BRE9D%8Zsnf zQYcbpqEx13PKFF+SfLr2LIaVZq-8FwloZMo3CkEVmznpxs^{MKvyZ*^`|fA&KYqvY z^WWX!W?AdHuJ7k_j!B(Z7gdt0uB}z(&EJXU_&00 ziH)us)(bWEm#XIGe0{>AqAJP!pDHRe#+mkC!;rx?x7VRE)Ykc*l9qN& z+24@HGDW1fK*2?%`Y|h7g|4d@*A>t4MnGWKhB`X~S`_BKX;}{iu?RRvY~)jiT5R9?i{h4!q%6BLI3*_=RvTx7 zstI*v2n+}?t6sBi=Q2rpAC_ug$`7n=8xYvAb0s6U^FOVNbtdKDjrR`8jRb%88Feu( z_-_4zF`vyRC2h*>LY=tYp8V2dO`)#4{$e6qbuJWKB9~gUTP`**3xKxI_j2ihHczQ# z9RY5zw-x#<%tOwMJ(M#u-9vAp(HRATe~pLoDnLaJ}Zb zy63(f%3ERo>WQHohNolL=Bnx!#V>9`Qh6KX{MR)VTo@Y`=a%6u-2Ct%We>0kiQnqa zf6q+XE1XtSw^=b-F1|{!=>5}b4AVNn(oZUl|F$eCnC$=7_SC^nee6-Z_iACzDmU|u z4(|~Z5Nt7wl#dI`k1pxLbYc&?%+aN&2M=6R;di?69KwR`4czrG<~g0FyJnLrw&PsY za%#d2Kmn`hk-Z`zHa9nCJ{!sOQVP-fd~4eKv|W=W`q<40wjD#6MnAKJ#ieIONT-Ey zwt5_Cl`5*LA`w@%L`Oz?qIXrHwPU#&ot#+UT^Fr&3f=|L(a|?B=zP3?kWH5yie>F( zt;#$ev5+^y5{sDY@SvcVx)94PTo^h@B5~b+{v0OBv`O0PT4tx)U_}u&TDi} zjIZeP>`QqBM*r)6WSKY%(>UL`um_Mk?6-3JnE-IRnam^EkLnLOG`$+}yil6mz384# zTQ9$C-elp+TPxVsj~wH?>bZV>G@e6EXJ5TWM+#{h$#6$%_P@B2PIg>QCwF|!0L*n< z|L9So1^A6*0EM=f@~VVoM9{T8pWto*q-&R=M*~S{_Y9A6_1HU-8Z(LOaWce#-uot5 zK%FiNAvTumQ(!eqs8nG()|;VB3bPIXQ-p%AB&|hh9<%dq)3x8R;`dZWB}FeaRqFyt zInHIYj^%jor9%MT@hB3TRzyyCjit~j+zxhK$x&k7yk>sOdN|@E%d`=cC^l$(dyPeQ z(nXyWmk(=dV$iYbP5$AJ8U}#-;yd?jN$s`tNN^xEyRck{sK9V}O>GH06PNp1-ede> z+$ie~w(E@#u7QNyk_|hy13JoFJjEtWX+?Jp<_zXf5U_^mbtkfB9bLB_G9mO9xS6mM zpw1_3oN$lcVC{1vc_`xiJu>LxQ|A(D#N>#|YX_3l zooaC-?!{&~i008_fHKMyVDzguEz5N$h zToF}=NOU!py=%-Zl2Ru2i2w=l#s4<}p*;1JyAl0&z53*P?ba=LL1j9+dM8g#rHaji z>usG%^<(Dh-Uud{kw?%mUrL5q;8l6K8iTsC@D<5CI=M8@Y35P}|1WuUj^66-q z&VR7jLMvsGY{WB~g~Kh#7`NU2{VxFzw(~OEVa3goZE9$6!-xLnB-FKlAF5)es`NV( z_5iLuk!^iFAHZNvP*WI>^v7f!0eHuqdggnUMpzU|9U(b79+-mksO0?RzHi=YT`;*| zC_^6m{;0Lvj^ASlIFaP?{t6@rR|&XBigP*PLv5#J+D;bIeSH0TE9w)T?n8LfL$ai%r7XKQvhQWHJ^ z?p1bTjZi`1Ois&~9js8uJbizoJ^166#dOODg{ zeB^HSxXgjS1+R^i(^Hzj^STsg7#SHcL?HKO$DQbptc~jreXU^nKHh*p=re)n3RG)QMYC0;T8NS zqf+@8c&G*HvNeI09qc35Ovbg8l>%HEY4E}iXsT*v(yczksd6#Nh zOHQx$3QK?ORc^}~l{d6ap$|L{&eL)+hF@!M?Sj|C%wKfp8(;^9hO-l=gaOMilm5LB zmO1g?YhM3X1gZbky7o)sxr&idR7fb9|0r4vu#|ESojupn@cwl)>~D@Hi?B5Ps(h%O zoS8u^*G9gh!;sG)_tB8z8sFREGHt*@h)i+kqf4C-VMe{Z$=t z@*mX^zY!+ay>p2P%|s~!c5Kih7nE0{w4@!}m|SHM6VEfDNc?8c58l7_;^I9bQ~JNx z;hZ*!sXz+?zP2Lo4~5v}`p)#_Xin*~vvlY=BQtlHzO zmAosR)q!iu^voa0NKGC4@k3Nx+~=jleLM~}W90+XeT!#26Y!^}z@v@WnZxc3nwLL4 zcdj22D(A7%j%V|Fx-}OH0{_~XQBF5~Neo9F{0j?TjOb{P;bU)1k2n*8J5DniEcAkX zKL<-ERxAXtGj6C=f=e%4E>_QkgVLR30rU73Z$MW znFH$t7<-k{;wV&OqDs~sAvMS-nZlWN@9G=SCCY0?@kx*?u}oS_yaoG)dd;lsH*Y3g zteKsi#pzq}41{E05|IwNrmyCUNz#p&7>177cc$}xpCFd?!eWV{Ldaj=m6tz)E(}m= z`C1YY4m= z$l3Vl(W4NsIV3}j3rFZ1Vwy7uuv6^DX{f@8?Uu;Wx&8@UGthSh&DdBZCgEeC!D4 zvr}Iy9XL>Z2;_R!vuE!rE0tGT*bo);Q0~6r*==2o_m5%2uhxd7n~ujXZpe7@q`6?C zOz`x=+Xk1BoTQe$14m{bJne4n(ks@j8(5=tR&Yq z2NFj*BW~RSN3)-;eYb=QRB7ffalJxxC~nDO^%Ehhp+K21lI)X_IhUR9;Y|uG%8g9z1M`ih264T(YE%x4zY-HV_;6qUuJ-Dn- z+q!iH74cDgUCh0Jes!M`TjS2@)ysjjwttZ_{#}R{efMr68?ywrwUyPDz8XXodK`aZ zU}bLZD^Y!_zac|S0nv=K?UhG2k%Jhi2nO*@HOg~7=rq(r3*sqk@9S&&_1P><-h0}b zB0M~R%df-aRMU#(=>(f3Xih@tf;qZth zr~e97d16$QodJuEYwvk>c0dJ)>IAM@wG=*i`Hfr56D=fn?{)?VSN&<)xB$EFfe6GD zX1i}rOKG6SyVF*6i7*d>Hw+Q>1=zK`dVA+p?mg#V5z_ERpn(HvSu5nrs9z?}4h#%H z2{4BtWVnS0G~JtFM7Jguxu7BIcFtj4-#>bb$N2-6kjrB9kWnDLMRYdSmz?A~d91Uv z4bC3nq8|zUH0x2Y4b^qM<^yrkPAei{`BL3RfC^2w=*{)FC-rdO&i5;#dLsMi_ojH} zMkG&2Zj|czzR1Z3_wPezVDUAmna|skj}hanYy0Q)}5fv^B0Rz`^Ifmj52U`p+ue^4e7Tb!0waRRYBP|qhA z_5e1!XCcvnz6jp2#anm}Y&DWa$QEEgZCcrDU{5ayZ`hJ5c~k-kG5Hcvx;(}&9J8q? zImMfo7X_>fhUJg3OhK!b1~Aozbo69`;?ELrtd%xb68$H2CABBK_uWRs>P@__ zrwE@^5&T4dncSRCev_}ON+f8q5@%I%QPPryiyfhotk16k6|dmGqg7j9UvgR^vdrRq zr&$LsV@-8+DW`6RGM$r5mu?`OOelC1M@=Ej3dxEQkb2oPfBt;ZCe?_C(-u6Ir)Pn? zDcgt-@-*RKYkd6;_%+)W76w^ExB@s2%tBTiGD%82(bK}rxf1Yj&a-E1YeG4Y!C#UK z%rD^Wm1O28xDmFp8|gZVbHZ@C04S4%AxEba8xwTUe7i?*cVs#&J04C>GR9$zmZ{^H z1Fu1is$;%%C?9P7Ix<>vfUBP%`-!O(Cy*T;-4buS*W8eH^3wn zjF>;0JNAt18u*CoR@i(L!>Ns zIJXZnIumulPz_X}(5fddH#a!k#cah#yp!-O2{<8btyhec-~ruzwJQ!rNc@Gsn$jhz za0XvPz;@aB43OgzFq)6EYV>&@m?6z0SEYeU6}u7;AI~czA|*xWz=j1&&p+` zMbOo&>_7VF(|OrTb4#d)4jt0DJ(!UiVDRcinF>i=UlYbRWp7lmh>c@P5^7a>`{s={ zOL+0AHmt4W*bz|l&R-7wWg&bF~eW_{_9PX%3A^Oj3G zPrSk6sbKc{Lj4mbgycDb!`4Q*&D*rs5M6&(gEHW0yJ**PlIDkYUG{o7-6*Z{;l%o{ zO|)X(Lsm4`@DrPy$<3r|A~5L^JFWCwR za`Tsc@U-}^#FU7?5>xOKln>(C<6!~{dh9j(H8#qAGKhLigr(2ORt4N1{Va(kYS*^c~h{Yznr z-#)#pLl_NGFc7?W`jkk$zkl#1$SjlzZYp9jk=}j|h!fLb5Y84%DrZzwsJx%4NZ)`Z zI{Nx`K36y;N$DRB5xd@>RdUGs+eX*zsSk5Le3m>YsUR!gZ>q93 zw)`TOY)R`s3eRfaZUV7leZM%yz zaz-HE-Pm|T-iPv@;)NDq(^&oGcPrdM@m_xZ4DtnswQe{5z+;R=%Jum1*gVN268S37 znXEOQvKkHX|J^Pw1kd-hau=-;CCzilGY28JvB1$Qmr^3oNn=`vMEOr#sP3asq--E; zG&D3sVZ?fw^ zNarij*)b1Ke0U{DLOVdyV3OWII6Q^W_4tM*`b3N*W=L*HyIJU~+P*Aaxl{QbCO|jkEzo`)glPAK$XM!mU9-eU1!XlgvJ)^o!rbN=Q)EF60Z@N9UVaX^ z_m8nLB{o8sVN3dkH#X?x$|d`whGkdd&*@WvAh+K%NPZCPZh zvES6!=lD+OY~?JMLvJ|Ygr0wn53mU#&#KLV$cTWk?DeJWUt3q%rB_d+5vvc~%ynt& z>U&F9uK80Wt|r)(_EW~h(D22Dp(N4xCk zzjQ9nq(rR%GS;MZui2QH7xja&vB&O@Jc3@LW>}NXaTtG!$At@u!Kzoe+6M-7i{)PP90`wz{< z!e+4>pUV!*2abZe1x2Ke6CtJY@+L{o&qFl^uouxety!J13=XL*PUlUfh zW6miFOB0+C?0kcp3G(JrQy0!#7_XxuBiT7Q z$;MopYk8WS#W@3?`k+lSS$U#^EAwD&nl8Ejz^(R);mj)(sSkQfUOw27zdt{K3<8Zz zEuY*s45a|@J*5hjgN^H(OknI+e@G-0mUfl#RccD4yj*dWSlhvZ2SZ95!Zsm-DZTIQ$PRe0Xjeh$B&Q91%RL_87r&xa`G&m06Dsle~o4 zIQHQsfZ^nCZEhxtN{-(SsI6ZZ+!}TuOy@1!sSXv`6UUM6Mk19^Rkpk-uYC3K?D)4$dGuaEJB4g4ES_Tf{eM`Lg5`B`rPx2cdzXs4 zA1yZ5bb>OThOK)oz%YXkoK}WMBzoSL+NvmRLeSIP_icpM8 zd83}MVkjfmbLuH2@r|M{#K)pW6zz#;UdfvQ^1@b)2fH1onjj!5i#UP$#I_t-{4Qsf z!F!|M2n*lr4uwo7-v3Q>6Tt2e;^K2`_Z>hY-z7bI}asQvL)zgsbx%%qq9D&W9A%cdY($h@W}AQ2^`ys zPBZ&NLh$>Gr3gTqBBVjf!~I0H+@G|kL-^Rkd#tz0`C|N{7I|`m%EoQ^x&{vxfi@hH zD7Za8=s?=dVH^|MR8aFTb62uQe$6ss{_4uRk z%sLNH8dcXg26%X`9^_u3NeKdu4E;C z!OfeMM-&*gPhLBE)YCvY$v80-d4x$f;FEm7+QnRknL{H*nZ>%xZEn+EDdclMe!LbB zj1rEXjna|?{jQazz13K`(TSVY#$Cr$q>l>6%0o7!ediw=^-uV}@BL;Q`HmFQcM7 zr?{~2E5h3y-nHlr(cGbU19vE*T>2X?zq&(KY6_b!u44Zg)px3g zT^g}A|1j+_^NSsgPswN4n6vShxDK35qUv*#S$T?6;bhWfq)}26z4(l$PQNi=e=O=={$_Wk;rRcG3D*smt9!#BMLF{Ga z<)z5~@QC!{l{&2>femajX6_%+mH(fVZSr#3OE!J4o$>^6Cu?)=+&O5DqCKNQ11PB} zkNZP%>GKGqrG)nF7y!=y$ujhxYA&P6@tP0F3a&A*RYjeNTZh!!6QX!n_?Mci%efQC zI`n0Q&fjjBoSTum^!Q3(pumTj^o0BOEip!5O8j_AcN%Fg^`^G>#w}3BEco zyzPD-jeq&-^crfP{0wXOTiD8q@ZpIg#K3UC=e+K`-s#?)Yk{E-q%P7VP)WqwwQSQL z&ooGZV#bko?b;uKE~M-^4Cy}CULz8$08|Z}hqb?d`$}jn@N6qp(6c~6b19YDh4B9? zp?&7?yhY3z={a{ryxq1&O`cc<*c7bk>XF`r6Bl7P=#zp0M&D5{BF z#P7z$$O3DEz!vc=OVuEwV?oj9agVl-;56PK7i0o!0)H_+6wJr#!PP+7RhGxebFL{n zCCCzIgOC&Sf{1|(mMEH}(N_v-rzIy_!$9%%>sKTvNCh0Lw(LZ}%X|m4m;?(}VjbJZ zmkNRo03EV)W=iPAaU`?u7yxzxEK`|LOYVm*tagqPpY~VH7B5UJTnj!9o#ws0$`5q? zPBJ!KW}N*Dmp*nPq6!K_naVmN^t9*Ty^$iqoO{o)6Gzjua&|JpLZlA4aXS$Oxvz)~ z$?Z52DXTy_!b8tpijU+hqyyaFACsJG0AyoU)ZCdrLSE zOe=y*JW_G;yGub%j@{T-w)n_7LDL3mbC_#$=Dv}Lin~4$`g2G1p6!!;&|)p=ua=(i z5AbN7MQpI6!wF96#%6fz*0Qq)ct%bD!vpx0R^zc~)Y!;qcT?A5cxSAv7S@Se>&EVK z_b&Gd;enOhx<`-h!~uzUX|exP2nZcW6yfZr*q-ioeM7~)w2+#u;o}(7!ChSRwY%JK>FcFPb7! zB`|2^#v@gQlS9Gp7M}T8^*zpvAuqhHxzl~4pq}tX6WMZj*VouSfAL}g8UB1-M1?o| z{NwxsZpa|yIw#>safG`qF&MLKrYqIDy&RUpemf6jnsqi_$vluk zJ=XU->lENHGC16Y^<0L&dciW9x2LpDf>B*vojE`AOs}_z$wnhjXndh~PLx>I0PiZr zKu)a4d(MOIg}V_WDCF$Z@434iCA`O%x~?Cj;X1z+`O-RDY#z1PA-Rh|qP8K{JoGjH z8*H}1huw*dNpni#fJ7ouD_)bX`$`*8n?X`{qoSn2?jUyQ%VjW^fq{Xi`Yfv5e_SPO zaL{o67wnQFoy6Z#X9jt#LNx&G%sz#K36sGA`C2v&IUoXj2Ke|IG3^89FfMRs`S|IH zp`;~5`|Gw4)IShihFnI5Nqe7}W?;~LZlp$ASJ#|IDl?CQ_bj4aGFwvh#Whzc>uJy8 z&qnsbaSFvZ@1jQ77m6SlB}H)62prd zJ|F6)E$R*>`K=H64pk>Z0#W|g;1`P6^u$w$nnh#krQiqt{!6>}URiU}9%J*^-ttas zUSGAXr|CK4p9xP}kS+&5$#4wms4v9`xJy!Xo$SA*$V`L}dXVULJ98K$)uc~nK7TGM zCYDZNToIC43hjagvAz(kBxxRiAtdgHEOhBNB!BrvgJ7vKPWHl1u_uOWx2{53%=e}( z6-w7}v8mLJof^QVhbLTb9DQq{0;ij+Ya9R)R_T!McqD#EM*4(~+*IeyA8DNWmGdTI zVs?u~!pY=|*y$nX+^AgMgM~&BJd+WTH%jjJ~)UD}Q~k6F_d~_5Jp(oLaKcw!aRO)%di5${Mn}3p@@hf2F3`1eZqQ)_-Z?~20~%%7$iNi^ zcABWzp*w{^1dp6ZuG$V7g}-~f!*oEvvO2d_dSYS8s<o8+O^V$&FMD*S0bQ5`-T79y4>Cg!?Bt>jYKGKO98zzEIy z{Cs^`xE?P5B-p}xO!nh1FWf-1?#W+?CwH8jPrq7Q{HFHvhnksFAGO^}p8mbU=ItEB z*>HnyHNWE*6T{Pc&)uNFwt26hXthy$1#+t#^FmJ?=W9fP-5Ak?#wG7$Q zyV@dD0~Ju&tJI(vza62xr)gq1$F3#BlSj{!{l}w6kNS`MrIs4$U4L1uvWA~Cybnek zrj4>f@-c}uMNF&h*+yPo0okZCiD8lUEx!cM1Krf~IAPHxBQC=Yp%Ic`ZLtwjZH%Z97Ddp8qL_dXTRS+yfgNQQ|(q;3)aKj;gP0CJ8rx0 z4pu8j=3eU`a^2lGIhe*MB7`6+n8PZBEBNRR=-yIVldI^!!mNFKjpEbd@R=w3nzwN8 zO`F+nDxY!T^=G7rpDCV^B^Sm2_^hHSz2zv`M+uH!q zBg$7AX*;{`!AWt^@HF z>x~0w)HIlljSAeFAtT+O zSa;Y5BM(?BWYYRaOZ4E`79noR(L$6yf&V~eBJHuXq3q6`Pw(IFeEXzT=wr52SnpP? zI8P+>x5W7QErEr5fYi0Z%5L=e*xG#Ui%wKnaMpPBqhi|a%!Z?$0a_k^ zt||`YY)X0zB#Pds%f>n3?Dd{*8m2+puLZf!pVzf*tpq1aKdq_kgGk7uM_HdXRt}L* z%}FhCckGu8*)6&To^(icCQ~(xv3S z>CszM)3AHuY;ibM$eY~p09m+=Kx;5F8rj;}Ar@^8B3Ys~53?FEB>Mt={Ejme z5G-{T0(``9oXh^~1uNC|D^Xx9ghWJ2Dlx9i_vsfy5co*qQ$vIPf}#T2*ec7PP*%Ck zzID=-SRiV}4f;{WrQA7p?{fJZa#QCg%M~o<_YD>7I{WcH4r~5#5?fpYkS(e)qWc&V z7x3&yO5#G7xDR0>%fqyeN=Zc<%X+4P%xU>DF-;>amfWxtokwN;Lr^D9m+A1q+^erp;N}A}#i&@sGT8`jZ2Tw)J%TK-X zoa69un)Z!V6Z>-3xUqh@$qKXWOo`MTZAdyyGbuFi^kaT^s>s^f zD{q1dRh~R1+3o&4eyQ%RQk$T5c=@b!Y#O`A$g{wypdrwU5R?b|@yIDn>F!&!h-cqH zWkp?&ap*pAppBB&d45nC*W2cs)RVmotU&QluqvqF)CZ9{Gf=ZkmR?R%yIr6cgjaBe5a-)wJOm zDW@6H@37e{-^3zmTVJxg5D^j62EPA}!MU2FDEHqj~(gi`YKq_!zMHe>C{0TOQ^OaZXh%YrcFTk$I{qNLLIx! zKo$}n-2HG-W^=K|v0n+y=VDMQrq+aE+Ah_5ZXoB_sV?gk`tyAY9vS@~jC~Oqh{}aW z>FIX39*`5k+^?4L>n^T2({$m+bJS7KUTHBv_HoU|CLliIaQ-~!5Nk7ARqi4+Tq^(k z*|Sn|JDvj?OrI_9+mmKmNGeS)UM7jNhj5r?ZOfTGJ(o;foR=>(7;LXCDdrNY<2k%F z>K`XUje;qUuq+JMMC@Y(#yG@IgW$Do>iS>Z zczBLfKw~K)yczZf1YQAL@ymR@V-Y`B?)LhWRvLhEgr&gwS{J(Va?8lYPmJ>U7oecT ze71GV7Ctun^I95HH5}!;O0FGGJ3#{JHTMYFZfQPYAz7X0M>;z#;Z-8tW&X*zcZ131 zb8@s|mQ2%329Awz!lE?pW71y6Z-$=35%Rt@C-vz?jyY{pCX2gDA9GB)Lp-jR5RdCu z6Un-IdhLDqwBeQp49LmNEz&LEz>-gU7M&Oj%N%x%cd(l#+$Ta$0d0^QsquI;)LAPO zP_WHIzZE8UPM{FaE;}=Rdw0!wug6%FlR^!1mG}0YIL*Y?eCv@kPnN3$@l8@>b_CzV)jO!em<#3-Bx*#3I3^$1=R(q^r*6<**tcc-A7D!PB5HE%*eQGajEmRJip}KrvgAB-XI%7i zd06!=o~&=`t+dFr`YRkJ87WWn$sF;PyfKDGT^r)$U-rEcU&?LPwf2I%!Xrvw{8LZr z>fiI<(@iTx*T8t|36UF=6*c!z=XgD$9+x@JT5877$sC)gNPkDFUg*yaUAO@f-tF)K z00l29x9u%~48g;9JKNh67V4j>Mq9umDP$9{$75ndH0)L@@B=(iG97s~pD;8eGOw&j zmPW{khSmbMAqO_vJOorMqG88fU0hUBIufYYkme^N@3wma038?_0~3?<8gHYz4<82c zUZ|Ck-6+&Ek~%#n-a?bd`739+WO~{o^ygS?L+@BZRmkw+z5E zJ3gUKeB#}9Fgx0Lkx_6C4^uE~AXrWuRa9`JdT;#O2+p?OhiIIc z3+%3n7yn>0wXUzf9~k%;h-<_u_ExFsfc;$;LpL9g`TxfyC6Su%hm(E%-!`t^ubc}P z@bR$zeOal};rnl|Y5(;y^g{~Pr?VdLq*jhm)QLVGChpyDASF=a6cQ4e#3)3>gulZe z9JkY|0t4~;U3-^eOPG%Md!oc#+BO4mU}rdER5rG zjq`rGxsBJ$F%KW0%6X=uQ{0ofWu#rg$rt21YwQB#`pp*sRJX{eiVyB@wC zRP{DDHRTm`V~@epx$O~6&7K=LCDCi++|G~{R{h>p@|NC* zE(AO`Q=n=^SVfGb?MPE|U&Y;hW0ER;-Os4O$@}^mX#k6WCjwmC4oQ-ewlEzD0mA@& zu%lmGAsPpC7=%v2m;9pBIh5s(Q&Qlyfdcz=7sR^&*Sfp9gyn>u-FQx|dK6)tk#?x+ z*tfra^khUob_BrkMC8rdwUm%$YC*u4Q*}j%A3iM_#(N2qf3~}qmt6Yex<2qLa!Af7 zo_cSO_H?|QBZGeS0PD?*}UJ!l-~ zaChvL7(Qtau?u0J?ZwP}_Uu{l!tooF8Pts-pziSdBtssbbc5#_3~f_A@#5RJ+t}M{ zX=o60{7!m$kU!u%K4CVNO#&ezb|Q1X!owZ1vV)kz_T>g!o+Aw?i;HJKIY6^d#hZK4 z!{c1`nb5$?mqQ_+K%^gBIj`E;a@OaZLqsuV#~n^kBusA8`q!6}+1@jfH5)PFKwBY0 zqA430#k_bi0Rak27odf=i$v!^djUw|dhdZy?9JjI*~Zp$b5~b`P%ZBwIF-4X4z6q@ zyyIX>whjHM6ptKH5Pp%to~97(bhkZPe#ovlhw**G)C83{6%7nR=wZO?9Rg5iy|IQS zCCjzfhAYq1`GT3*CP$uxaL)y}2OY|;MnPv3DdTbu`1H_OX@rYNOXCsUzj4F2;60Sw zTo*^Sx3#oO{_(IS!47MF^SG|=mtr3Ulm$Sz4pUsC5v~rXohS1dqSr?Pk9~*#t`jyn%4=`8mORNge7*Bj zEO7+L_FdE+4rh1dS&I_CwXCduKE-x!FF79BtrDF_$O)!-=Ie9$t#e|Ctf?$#5q!*@ zVMD4bE$zTaUap5=FnF4KgNu|g>dmEfS^-D#-~?s0_;`ejhA_x0=iGs)|g zqG7g|i{C-i@381$O@chcGUTjpJk~?DKc-S4KoCag@iSfb=r}P-fw%dCglA( zsb<3l+Na}zM%z+yT;!kRlV`FH)jemt$#XWVDvFHt>O?o z*!w{T7yoBGn}~+nuZbp4E#D&ip@+m|F8`5-5%DE*C_2Ph2d9=+4BJykW&lC=-ciixLr=w?FPIRmL(w1oMRjRs@blpn&ZX6U0wIg5*1eF}*VJfdw}L(N=;e+Nx`(>$rD=yb4V;t)+xIZ1Bca((asYN6aN z*v65z%YbHbpM$fTk;&)wl&aG#bdkLs8)r?IkV5CZZWhrZFv5`D_GV}_&?cv5KgG|p zhpS0#-#-rn9C z;Z3{m+mF05onEGT##l62^ZgTM(W1sK&9|WjIZ`Yx^s~kawH;iZ;mA7Tgf-?CG>nV9 zU>S8To_>VFn%vxVmqVr460l$YggDszEig!YT9&6zhm7raNS$oifg6g559)UF)SlxY zo@je*PMkd}>^&aSM5G(}g0A>(GW`XER7l@jwhJa%-xQbb&L>}C0xG-$L53L>6pVQGs` z*Ndn-PCj82EigG|n86_`|5je=1*Kx2tk0g&X~UM z!iMmfiftLak6F%!b%cOp``RWv(K)2UGHz&OgawzLf#E73H^4qjO!l_6)EbsGrxLU8 zh#B8Sk>fz*;Rk}*Qd?hKA~W`>woD{%cOt(RPhEBOgTWxjdY%aX%RN$;xBVNklv1u} zMRWv<@2ItIL{~ zVpclnw7==bfaO3cTv{#SVq-&_zGj_TDI&qg*N$%S$Y4HXE(F&jP+5)AFRvUV!ybP5 zc5lYVqquqUlFdP}4Q8a4QNyCHJ>@M=hBbVQ)75 z*9Z0Md{YJmf;Tg$(!?yqZ&1+Q1K{=G-)B6`lC)ycIA>wW5EP6A1yye0=XV@VTgqf0 zo0>Vw0oI9yCF+n>*L$WkFWzi-yMrzQzyGbKxM=hgnT_}l;Y--I@pYd8cMQI+@5CfZ zd{qFL|Md+7@{X_n;WwxT365dZnt2<01Jz#R5*NXuG3=U6W6@!H1x7+(*|KH#A3cir zbQ9F;bNnr6a*F>VjAt!f*~gDZ9|V38*eob`>U?zjnb05)I=t3(i$x)XPfZXU!m4Fm zbR=gIfl0y>HwiVvI>u2SxN9K2}IlWd_M2?leZv{w{ zQjQnI!+z(Jm7??Y<4ZYrh1}Y>ip6EA4e6OV*$@l}OH{p2D`%BhLCUy#Q1W^+ax|mi zm!0@b-elvQvRsx!`J71=1pyJHNya;+`ak~$a6NdY1DXZ?OSoW# z{j(MEaz%-E;FY66L0;Z80#Y$@;vsB&Qp?J!3$D8B&um80(LcJT7E{->GOry*JZ!W2 zox+$=|Ge&ZXGfs9g(`k#YHAPsyjF5HBVu{T*$)g{Ns}5vS2ofR9tuw1!>_xsf_Nj% zq(xDL%L;kS>H?@H^y^DGhC)D~nsFjB|LznCOweY=U$5(c0d(YEaQxy6wIEtYj?~9K z{8(M>fbP_*V|g4hhMnB=>^g>edRy#pQLs&Xd@l8L6!^~cnF2F&5F&5bYMlc)%5#AA zJ32XCto1o;CO}~G=TB+1e+!EG!4w?rpy+csZ^QkgDP=V*ahrb9ceiP^G=KlM7t1F) z*x!#l?bfCyZWfj-Jfd+f22Vjy0!$q|xUa7-ju0psk7#PvTF=-!e<~bbmjfW{`fjBl6Ctoo7iNaIMER=|4Po^8^m$i}V3=btW z(5y|35S`6>IdFjJ;z0iWEswi*T4_LXUSDTgF_pv{Po2!_%Hs5%Y!AfYYkp97d$+*z z;+esHm9IRX8x%sA1^;jw-?nY%G3qxaSlHs>FI6UkjHsVWEH==e3Kysz(IiFT>i)&n zv20JEp0coDc1UcLh{S{rsi47^01iM$@nVcM4iKPeXlk;H#@)D)Xt?ThA|1f@@hZ;p zyVtKK4&W-yy6Pu*-ED${bJ&mM;BX>g%g$*iO5TuKIG;ePJPdZ5OV%|8cfkCLa$n}K z2y}{w$8m4`P+E#cizWJhU1f?R9QvtspxI9rAcZT?#@4pxJ|@;rXo0m9+K|7n*%>q`T#1kd@-5bh2BTBp$t!Qz}%})VX`3l zlei6!AX=|{tmfa|pwApQX;o|i?yS4|3T2vG0xe3PV2b7(@)1~h-HV7MGADDWtqIw! zyf3jB$l;!aW*XfqDAtA=vr2KPkxg$my0j!x`}_J}zn7Dfqvp09aCUZ9Qd(*-1-y@P zX^s{5mh-odl$ z`tZ+}9X@g9&>{N4ZRub0T<8y-wzL!)UG~Ezf}_FuMZ&y$rraJTw>y#k##i212(*6s z_+4=>b@JH2rmUf|C5^}OqVkNx1FKDgiIe=#)0bMs=_Bi3W!L9CJJ20|Kt8bn(xjA` z8_LUFk~oHRh?B*Dc+UHkiH7x{s!sZg9LT*6PX9>We>#2W?Mb&aZX>{jB;O<>DLFAR zJq zMh*@L>!gXZUs+Z4Dc-vP;tyH2HY&p4$^6^cqd5MFLE;0?CKeVKRvc0IQeTI+jrg*H zkb(GzTf}&QucO2n_P_KEOa`-|DKq{Zj>N2hFP*B@T0yi literal 0 HcmV?d00001 diff --git a/H.Core/Services/Initialization/Animals/IAnimalInitializationService.cs b/H.Core/Services/Initialization/Animals/IAnimalInitializationService.cs index fa8293b2..c7b02e1a 100644 --- a/H.Core/Services/Initialization/Animals/IAnimalInitializationService.cs +++ b/H.Core/Services/Initialization/Animals/IAnimalInitializationService.cs @@ -183,5 +183,6 @@ void InitializeDefaultEmissionFactors( void InitializeVolatileSolids(Farm farm); List GetValidDietAdditiveTypes(); void InitializeTotals(ManagementPeriod managementPeriod); + void InitializeFarm(Farm farm); } } \ No newline at end of file diff --git a/H.Core/Services/Initialization/InitializationService.cs b/H.Core/Services/Initialization/InitializationService.cs index 90893966..43aa262f 100644 --- a/H.Core/Services/Initialization/InitializationService.cs +++ b/H.Core/Services/Initialization/InitializationService.cs @@ -619,6 +619,11 @@ public void InitializeTotals(ManagementPeriod managementPeriod) _animalInitializationService.InitializeTotals(managementPeriod); } + public void InitializeFarm(Farm farm) + { + _animalInitializationService.InitializeFarm(farm); + } + #endregion } } \ No newline at end of file diff --git a/H.Template/H.Template.csproj b/H.Template/H.Template.csproj index 7976893d..43bbfc16 100644 --- a/H.Template/H.Template.csproj +++ b/H.Template/H.Template.csproj @@ -58,6 +58,10 @@ + + {7A9469D6-B913-49DB-B85F-319FD195C212} + H.CLI + {08D833EF-D06E-42F1-B548-89E985DFC26B} H.Core diff --git a/H.Template/Program.cs b/H.Template/Program.cs index 77515576..b13e2605 100644 --- a/H.Template/Program.cs +++ b/H.Template/Program.cs @@ -4,23 +4,33 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using H.CLI.FileAndDirectoryAccessors; +using H.CLI.Results; +using H.Core; using H.Core.Calculators.Carbon; using H.Core.Calculators.Climate; +using H.Core.Calculators.Infrastructure; using H.Core.Calculators.Nitrogen; using H.Core.Enumerations; using H.Core.Models; using H.Core.Models.Animals; +using H.Core.Models.Animals.Beef; using H.Core.Models.Animals.Dairy; using H.Core.Models.LandManagement.Fields; using H.Core.Providers; using H.Core.Providers.Animals.Table_69; using H.Core.Providers.Climate; +using H.Core.Providers.Feed; +using H.Core.Services; +using H.Core.Services.Animals; using H.Core.Services.Initialization; +using H.Core.Services.Initialization.Animals; using H.Core.Services.Initialization.Climate; using H.Core.Services.Initialization.Crops; using H.Core.Services.Initialization.Geography; using H.Core.Services.LandManagement; using H.Infrastructure; +using Prism.Events; namespace H.Template { @@ -28,9 +38,13 @@ internal class Program { #region Fields + private static readonly Storage _storage; + private static readonly ApplicationData _applicationData; + private static readonly IClimateInitializationService _climateInitializationService; private static readonly IGeographyInitializationService _geographyInitializationService; private static readonly ICropInitializationService _cropInitializationService; + private static readonly IAnimalService _animalService; private static readonly ICBMSoilCarbonCalculator _icbmsoilCarbonCalculator; private static readonly IPCCTier2SoilCarbonCalculator _ipccTier2SoilCarbonCalculator; private static readonly N2OEmissionFactorCalculator _n2OEmissionFactorCalculator; @@ -38,36 +52,151 @@ internal class Program private static readonly FieldResultsService _fieldResultsService; private static readonly IClimateProvider _climateProvider; private static readonly ISlcClimateProvider _sliClimateProvider; + private static readonly IDietProvider _dietProvider; + private static readonly ComponentResultsProcessor _componentResultsProcessor; + private static readonly ITimePeriodHelper _timePeriodHelper; + private static readonly IFarmResultsService _farmResultsService; + private static readonly IEventAggregator _eventAggregator; + private static readonly IADCalculator _adCalculator; + private static readonly IManureService _manureService; + private static readonly IAnimalInitializationService _animalInitializationService; #endregion static Program() { + _storage = new Storage(); + _applicationData = new ApplicationData(); + _storage.ApplicationData = _applicationData; + + _adCalculator = new ADCalculator(); + _manureService = new ManureService(); + _timePeriodHelper = new TimePeriodHelper(); + _eventAggregator = new EventAggregator(); _climateInitializationService = new ClimateInitializationService(); _geographyInitializationService = new GeographyInitializationService(); _cropInitializationService = new CropInitializationService(); _sliClimateProvider = new SlcClimateDataProvider(); _initializationService = new InitializationService(); + _dietProvider = new DietProvider(); _climateProvider = new ClimateProvider(_sliClimateProvider); _n2OEmissionFactorCalculator = new N2OEmissionFactorCalculator(_climateProvider); _icbmsoilCarbonCalculator = new ICBMSoilCarbonCalculator(_climateProvider, _n2OEmissionFactorCalculator); _ipccTier2SoilCarbonCalculator = new IPCCTier2SoilCarbonCalculator(_climateProvider, _n2OEmissionFactorCalculator); _fieldResultsService = new FieldResultsService(_icbmsoilCarbonCalculator, _ipccTier2SoilCarbonCalculator, _n2OEmissionFactorCalculator, _initializationService); + _animalService = new AnimalResultsService(); + _componentResultsProcessor = new ComponentResultsProcessor(_storage, _timePeriodHelper, _fieldResultsService); + _farmResultsService = new FarmResultsService(_eventAggregator, _fieldResultsService, _adCalculator, _manureService, _animalService); + _animalInitializationService = new AnimalInitializationService(); } static void Main(string[] args) { - Run(); + //CroppingExample(); + AnimalExample(); + } + + static void AnimalExample() + { + // An object to hold settings that can be referenced from all farms created by the user + var globalSettings = new GlobalSettings(); + + // Create a farm + var farm = new Farm(); + farm.Name = "Template_Test_Farm_Animals"; + + // Add this farm to the system + _applicationData.Farms.Clear(); + _applicationData.Farms.Add(farm); + + /* + * All farms need to have their location set. + */ + + // Place the farm within an SLC polygon (St-Julien, QC) + farm.PolygonId = 482019; + + // Specify coordinates + farm.Latitude = 46.005; + farm.Longitude = -71.520; + + /* + * Set climate data according to location + */ + + _climateInitializationService.InitializeClimate(farm); + + /* + * Set geographic data (soil properties, etc.) according to location + */ + + _geographyInitializationService.InitializeGeography(farm); + + /* + * Choose components to add to the farm + */ + + var beefCattleFinishingComponent = new FinishingComponent(); + beefCattleFinishingComponent.Name = "My Quebec beef cattle operation"; + farm.Components.Add(beefCattleFinishingComponent); + + // All animal components must have at least one group of animals + var groupOfHeifers = new AnimalGroup(); + groupOfHeifers.Name = "Group of 10 heifers"; + groupOfHeifers.GroupType = AnimalType.BeefFinishingHeifer; + + // Associate this group with the animal component + beefCattleFinishingComponent.Groups.Add(groupOfHeifers); + + // All animal groups must have at least one management period. To estimate emissions for a period of time, the start weight, end weight and duration of the period should be defined. + var managementPeriod = new ManagementPeriod(); + managementPeriod.Name = "Summer management"; + managementPeriod.AnimalType = AnimalType.BeefFinishingHeifer; + managementPeriod.NumberOfAnimals = 10; + managementPeriod.StartWeight = 100; + managementPeriod.EndWeight = 200; + managementPeriod.Start = new DateTime(2024, 1, 1); + managementPeriod.Duration = TimeSpan.FromDays(30); + + // Choose a diet for the animals - all management periods must have diet defined + var availableDiets = _dietProvider.GetDiets().Where(x => x.AnimalType == AnimalType.BeefFinisher); + var diet = availableDiets.First(); + managementPeriod.SelectedDiet = diet; + + // Associate this management period with the animal group + groupOfHeifers.ManagementPeriods.Add(managementPeriod); + + // Initialize defaults + _animalInitializationService.InitializeFarm(farm); + + // We are done configuring our farm and are ready to calculate results + var results = _farmResultsService.CalculateFarmEmissionResults(farm); + + // Use results... + foreach (var animalComponentEmissionsResults in results.AnimalComponentEmissionsResults) + { + foreach (var groupEmissions in animalComponentEmissionsResults.EmissionResultsForAllAnimalGroupsInComponent) + { + foreach (var groupEmissionsGroupEmissionsByMonth in groupEmissions.GroupEmissionsByMonths) + { + Console.WriteLine($"Enteric methane emissions for 10 heifers in {groupEmissionsGroupEmissionsByMonth.MonthString} is {groupEmissionsGroupEmissionsByMonth.MonthlyEntericMethaneEmission} kg CH4"); + } + } + } } - static void Run() + static void CroppingExample() { // An object to hold settings that can be referenced from all farms created by the user var globalSettings = new GlobalSettings(); // Create a farm var farm = new Farm(); - farm.Name = "Template_Test_Farm"; + farm.Name = "Template_Test_Farm_Cropping"; + + // Add this farm to the system + _applicationData.Farms.Clear(); + _applicationData.Farms.Add(farm); /* * All farms need to have their location set. @@ -99,6 +228,7 @@ static void Run() // Add one field component. Choose a start year and an end year with at least a couple of decades in between var fieldComponent = new FieldSystemComponent { + Name = "My wheat and barley field", StartYear = 1985, EndYear = 2020 };