From bd2a0311b0bc4f2f993badbe28fc9a64940ca2fb Mon Sep 17 00:00:00 2001 From: janavarro95 Date: Sat, 2 Apr 2016 01:29:53 -0700 Subject: [PATCH] Added files via upload --- BuildEndurance/Class1.cs | 211 ++++++++++++++---------- BuildEndurance/SMAPI_BuildEndurance.dll | Bin 12800 -> 13312 bytes 2 files changed, 125 insertions(+), 86 deletions(-) diff --git a/BuildEndurance/Class1.cs b/BuildEndurance/Class1.cs index 40d55695..71d1c65f 100644 --- a/BuildEndurance/Class1.cs +++ b/BuildEndurance/Class1.cs @@ -3,52 +3,55 @@ using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; +using System.Timers; using System.Threading.Tasks; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using StardewModdingAPI; using Microsoft.Xna.Framework; - +using System.Windows; namespace BuildEndurance { public class BuildEndurance : Mod { - public double BuildEndurance_data_xp_nextlvl; - public double BuildEndurance_data_xp_current; + public static double BuildEndurance_data_xp_nextlvl=20; + public static double BuildEndurance_data_xp_current=0; - public int BuildEndurance_data_current_lvl; + public static int BuildEndurance_data_current_lvl=0; - public int BuildEndurance_data_stam_bonus_acumulated; + public static int BuildEndurance_data_stam_bonus_acumulated=0; - public int BuildEndurance_data_ini_stam_bonus; + public static int BuildEndurance_data_ini_stam_bonus=0; - public bool BuildEndurance_data_clear_mod_effects = false; + public static bool BuildEndurance_data_clear_mod_effects = false; - public int BuildEndurance_data_old_stamina = 0; + public static int BuildEndurance_data_old_stamina = 0; - public bool tool_cleaner = false; + public static bool tool_cleaner = false; - public bool fed = false; + public static bool fed = false; public Config ModConfig { get; set; } + public static bool upon_loading = false; //Credit goes to Zoryn for pieces of this config generation that I kinda repurposed. public override void Entry(params object[] objects) { - - StardewModdingAPI.Events.TimeEvents.DayOfMonthChanged += SleepCallback; + Log.Info("HEYO WORLD"); + StardewModdingAPI.Events.GameEvents.UpdateTick += EatingCallBack; //sloppy again but it'll do. StardewModdingAPI.Events.GameEvents.OneSecondTick += Tool_Cleanup; StardewModdingAPI.Events.GameEvents.UpdateTick += ToolCallBack; StardewModdingAPI.Events.PlayerEvents.LoadedGame += LoadingCallBack; + StardewModdingAPI.Events.TimeEvents.DayOfMonthChanged += SleepCallback; var configLocation = Path.Combine(PathOnDisk, "BuildEnduranceConfig.json"); if (!File.Exists(configLocation)) { - Console.WriteLine("The config file for BuildEndurance was not found, guess I'll create it..."); + Console.WriteLine("Initial configuration file setup."); ModConfig = new Config(); ModConfig.BuildEndurance_current_lvl = 0; @@ -75,9 +78,10 @@ namespace BuildEndurance ModConfig = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(File.ReadAllBytes(configLocation))); Console.WriteLine("Found BuildEndurance config file."); } - - DataLoader(); - MyWritter(); + + // DataLoader(); + // MyWritter(); //hopefully loading these after the game is loaded will prevent wierd issues. + Console.WriteLine("BuildEndurance Initialization Completed"); } @@ -128,71 +132,25 @@ namespace BuildEndurance } - public void SleepCallback(object sender, EventArgs e) - { - Clear_DataLoader(); - //This will run when the character goes to sleep. It will increase their sleeping skill. - var player = StardewValley.Game1.player; - - BuildEndurance_data_xp_current += ModConfig.BuildEndurance_xp_sleeping; - - if (BuildEndurance_data_old_stamina == 0) - { - BuildEndurance_data_old_stamina = player.MaxStamina; //grab the initial stamina value - } - - if (BuildEndurance_data_clear_mod_effects == true) - { - player.MaxStamina = BuildEndurance_data_old_stamina; - BuildEndurance_data_xp_nextlvl = ModConfig.BuildEndurance_xp_nextlvl; - BuildEndurance_data_xp_current = ModConfig.BuildEndurance_xp_current; - BuildEndurance_data_stam_bonus_acumulated = 0; - BuildEndurance_data_old_stamina = player.MaxStamina; - BuildEndurance_data_ini_stam_bonus = 0; - BuildEndurance_data_current_lvl = 0; - Console.WriteLine("BuildEndurance Reset!"); - } - - - if (BuildEndurance_data_clear_mod_effects == false) - { - if (BuildEndurance_data_current_lvl < ModConfig.BuildEndurance_max_lvl) { - while (BuildEndurance_data_xp_current >= BuildEndurance_data_xp_nextlvl) - { - BuildEndurance_data_current_lvl += 1; - BuildEndurance_data_xp_current = BuildEndurance_data_xp_current - BuildEndurance_data_xp_nextlvl; - BuildEndurance_data_xp_nextlvl = (ModConfig.BuildEndurance_xp_curve * BuildEndurance_data_xp_nextlvl); - player.MaxStamina += ModConfig.BuildEndurance_stam_increase_upon_lvl_up; - BuildEndurance_data_stam_bonus_acumulated += ModConfig.BuildEndurance_stam_increase_upon_lvl_up; - } - - /* - if (player.MaxStamina != BuildEndurance_data_old_stamina + BuildEndurance_data_stam_bonus_acumulated + BuildEndurance_data_ini_stam_bonus) - { - player.MaxStamina = BuildEndurance_data_old_stamina + BuildEndurance_data_stam_bonus_acumulated + BuildEndurance_data_ini_stam_bonus; - } - */ - - - } - } - BuildEndurance_data_clear_mod_effects = false; - - MyWritter(); - } - + public void LoadingCallBack(object sender, EventArgs e) { + // Log.Info("GamessssssssLoaded"); // Console.WriteLine("entering loading callback"); if (StardewModdingAPI.Inheritance.SGame.hasLoadedGame == true) { - // Console.WriteLine("Penetrated loading callback"); - + Log.Info("CharacterLoaded"); + // Console.WriteLine("Penetrated loading callback"); + //Log.Info(StardewValley.Game1.player.name); DataLoader(); MyWritter(); + upon_loading = true; + Log.Info("writers passed"); //runs when the player is loaded. + + var player = StardewValley.Game1.player; if (BuildEndurance_data_old_stamina == 0) @@ -213,6 +171,78 @@ namespace BuildEndurance } } + + public void SleepCallback(object sender, EventArgs e) + { + Log.Info("SLEEP CALLBACK"); + + Log.Info("CLEAR DATA PASSED"); + //This will run when the character goes to sleep. It will increase their sleeping skill. + //Console.WriteLine("Is this being hit?"); + + if (upon_loading == true) + { + Clear_DataLoader(); + //because this doesn't work propperly at first anyways. + + //return; + + + + var player = StardewValley.Game1.player; + + BuildEndurance_data_xp_current += ModConfig.BuildEndurance_xp_sleeping; + + if (BuildEndurance_data_old_stamina == 0) + { + BuildEndurance_data_old_stamina = player.MaxStamina; //grab the initial stamina value + } + + if (BuildEndurance_data_clear_mod_effects == true) + { + player.MaxStamina = BuildEndurance_data_old_stamina; + BuildEndurance_data_xp_nextlvl = ModConfig.BuildEndurance_xp_nextlvl; + BuildEndurance_data_xp_current = ModConfig.BuildEndurance_xp_current; + BuildEndurance_data_stam_bonus_acumulated = 0; + BuildEndurance_data_old_stamina = player.MaxStamina; + BuildEndurance_data_ini_stam_bonus = 0; + BuildEndurance_data_current_lvl = 0; + Console.WriteLine("BuildEndurance Reset!"); + } + + + if (BuildEndurance_data_clear_mod_effects == false) + { + if (BuildEndurance_data_current_lvl < ModConfig.BuildEndurance_max_lvl) + { + while (BuildEndurance_data_xp_current >= BuildEndurance_data_xp_nextlvl) + { + BuildEndurance_data_current_lvl += 1; + BuildEndurance_data_xp_current = BuildEndurance_data_xp_current - BuildEndurance_data_xp_nextlvl; + BuildEndurance_data_xp_nextlvl = (ModConfig.BuildEndurance_xp_curve * BuildEndurance_data_xp_nextlvl); + player.MaxStamina += ModConfig.BuildEndurance_stam_increase_upon_lvl_up; + BuildEndurance_data_stam_bonus_acumulated += ModConfig.BuildEndurance_stam_increase_upon_lvl_up; + Log.Info("IF YOU SEE THIS TOO MUCH THIS IS AN INFINITE LOOP. CRAP"); + } + + /* + if (player.MaxStamina != BuildEndurance_data_old_stamina + BuildEndurance_data_stam_bonus_acumulated + BuildEndurance_data_ini_stam_bonus) + { + player.MaxStamina = BuildEndurance_data_old_stamina + BuildEndurance_data_stam_bonus_acumulated + BuildEndurance_data_ini_stam_bonus; + } + */ + + + } + } + BuildEndurance_data_clear_mod_effects = false; + + MyWritter(); + } + else Log.Info("Lazy programming"); + } + + //Mod config data. public class Config { @@ -238,23 +268,28 @@ namespace BuildEndurance void Clear_DataLoader() { + DataLoader(); + MyWritter(); //loads the data to the variables upon loading the game. - var mylocation = Path.Combine(PathOnDisk, "BuildEndurance_data.txt"); - // string[] mystring = new string[20]; - if (!File.Exists(mylocation)) //if not data.json exists, initialize the data variables to the ModConfig data. I.E. starting out. + string myname = StardewValley.Game1.player.name; + string mylocation = Path.Combine(PathOnDisk, "BuildEndurance_data_"); + string mylocation2 = mylocation+myname; + string mylocation3 = mylocation2+".txt"; + if (!File.Exists(mylocation3)) //if not data.json exists, initialize the data variables to the ModConfig data. I.E. starting out. { - Console.WriteLine("The config file for BuildEndurance was not found, guess I'll create it..."); + Console.WriteLine("Clear Data Loaded could not find the correct file."); BuildEndurance_data_clear_mod_effects = false; BuildEndurance_data_old_stamina = 0; BuildEndurance_data_ini_stam_bonus = 0; + //return; } else { //loads the BuildEndurance_data upon loading the mod - string[] readtext = File.ReadAllLines(mylocation); + string[] readtext = File.ReadAllLines(mylocation3); BuildEndurance_data_ini_stam_bonus = Convert.ToInt32(readtext[9]); BuildEndurance_data_clear_mod_effects = Convert.ToBoolean(readtext[14]); BuildEndurance_data_old_stamina = Convert.ToInt32(readtext[16]); @@ -268,11 +303,13 @@ namespace BuildEndurance void DataLoader() { //loads the data to the variables upon loading the game. - var mylocation = Path.Combine(PathOnDisk, "BuildEndurance_data.txt"); - //string[] mystring = new string[20]; - if (!File.Exists(mylocation)) //if not data.json exists, initialize the data variables to the ModConfig data. I.E. starting out. + string myname = StardewValley.Game1.player.name; + string mylocation = Path.Combine(PathOnDisk, "BuildEndurance_data_"); + string mylocation2 = mylocation + myname; + string mylocation3 = mylocation2 + ".txt"; + if (!File.Exists(mylocation3)) //if not data.json exists, initialize the data variables to the ModConfig data. I.E. starting out. { - Console.WriteLine("The config file for BuildEndurance was not found, guess I'll create it..."); + Console.WriteLine("DataLoading"); BuildEndurance_data_xp_nextlvl = ModConfig.BuildEndurance_xp_nextlvl; BuildEndurance_data_xp_current = ModConfig.BuildEndurance_xp_current; BuildEndurance_data_current_lvl = ModConfig.BuildEndurance_current_lvl; @@ -288,7 +325,7 @@ namespace BuildEndurance // Console.WriteLine("HEY THERE IM LOADING DATA"); //loads the BuildEndurance_data upon loading the mod - string[] readtext = File.ReadAllLines(mylocation); + string[] readtext = File.ReadAllLines(mylocation3); BuildEndurance_data_current_lvl = Convert.ToInt32(readtext[3]); BuildEndurance_data_xp_nextlvl = Convert.ToDouble(readtext[7]); //these array locations refer to the lines in BuildEndurance_data.json BuildEndurance_data_xp_current = Convert.ToDouble(readtext[5]); @@ -303,9 +340,12 @@ namespace BuildEndurance void MyWritter() { //saves the BuildEndurance_data at the end of a new day; - var mylocation = Path.Combine(PathOnDisk, "BuildEndurance_data.txt"); + string myname = StardewValley.Game1.player.name; + string mylocation = Path.Combine(PathOnDisk, "BuildEndurance_data_"); + string mylocation2 = mylocation + myname; + string mylocation3 = mylocation2 + ".txt"; string[] mystring3= new string[20]; - if (!File.Exists(mylocation)) + if (!File.Exists(mylocation3)) { Console.WriteLine("The data file for BuildEndurance was not found, guess I'll create it when you sleep."); @@ -335,8 +375,7 @@ namespace BuildEndurance mystring3[15] = "OLD STAMINA AMOUNT: This is the initial value of the Player's Stamina before this mod took over."; mystring3[16] = BuildEndurance_data_old_stamina.ToString(); - - File.WriteAllLines(mylocation, mystring3); + File.WriteAllLines(mylocation3, mystring3); } else @@ -369,7 +408,7 @@ namespace BuildEndurance mystring3[16] = BuildEndurance_data_old_stamina.ToString(); - File.WriteAllLines(mylocation, mystring3); + File.WriteAllLines(mylocation3, mystring3); } } diff --git a/BuildEndurance/SMAPI_BuildEndurance.dll b/BuildEndurance/SMAPI_BuildEndurance.dll index 4444cf7e48b775cff842ac8e57b18ed6f7f4005f..0c9fe8e0f71eea541197e60a485611288ebba051 100644 GIT binary patch literal 13312 zcmeHNeQ;dWbw6)E-hRkhTe2;Qnzpo4(jnB44sHH`3~i@P!_@BY zoco@3C9gk{{Lv=UC+&IX>z;e=x#ymH-`gF&(0A92AI=n`1>2gkja)Qkm1Xg z{X|2Wm+J04yWj2YG_8%+X&pox!O;~revorYmlnSqqBnE6w7=wl?Eab?qeTsUig(<+$Qv z-#p}}0~?6G&`P8U_h$#IJ$HxU&OR#L^BgJq?5SZy+16(DdMPkg-OhFnP}C zm^{6>6hv&9!|~5?peQ;R_X3>&bDFqSv!jE6>%|q!St*>@Ww_ap7GjqJ3+pjVVYumx zRu||#&117M`a-Nll#577J%+I90Tv1p(f1l1STH+tGTW9wnz?oR>K z1vajs8OVLAZwrCevj=9G(>%*9sNK^}VoM{05o@u^RT6qrHA`ex9Z?|>*Bu-YM{8KkzaKD2Qq zG+0q_Z3EU-+M(O(-Z^CA``0m1Fp2f@-~vzV7ZxyP*x|6=eFRNl4sp`SakpxQkO*#= z&N~X%+x_#rb*4B11GDJDopKaaT_(I~mWN#xjiy-+M$;_j+*dtRF^}ji^)>jqd2(om zRUG?R$@&@JQh$TL`yrOKmz22qfEbc&o8kU%mR_A!C?UFVZxP=D>t#|LAxeSnP6Yc{ z%@(Ka?=6U>$}BN>#?P+m4f-{uv%E7l&GKA2Swig%_Vu3md9;Do%~#<$^coh-tIWsU z*w4aPtx}Z?w3ez=7tmvyAXpT%KhHeI>qBm(;#gs=*^jbF3YGGsN%Brbn%cKfD27cT z%+YHNJs!IXxJ&}b$m6jNCfR$COB|`BEw2*~twL1A=U>drBV>Ov=cN)_nT)HyBL{>1{t z_2d&6Mc7bJxETBlv)Q`rK~x~*ePvoX&Hs_p++ON+XSTuDWd9+kryG3D_LNVM6?UUv zkd-HRfH7?8VaPADcPRGdCwOeJEsDL$PAhiH2@ZhEUTy!nVz-7)aBy8Ktzr9{j-c)Y zM`2E|$bQ!m)Z1Uw#evqy2~MF{m+Go@v26#GV95ziCe=37;EQdA2GREK@$i1N#)M-{ z>}nnz*1AT+JV0D+>ejVWvd*E1q)e$Qs7j<;7dedX`sKY+ZCg#U@oc~W3THTVfD#0Z zdY2&x7+6+HLl7`<$WRPHz(93Y3_-xa*+ek}0Rxp&F$4hvXA;E_1Pm-r#SjDxY~+d| z2pFi@is2x!Z4w;Bqi5`f9*vNMxcE$Zv@6~b-_o(Avzs}7$^yQD!MDv2bzsZ-D{NwI zVKbXJ?q0OoA9^bkL4;qei%<{j>-3P$I%9PVSHQAPwzN7NOkz%m zu3&&Z`ELmsUc;LZ+yiPcLa`4qjUeW}U|4ISe-AS(1nL3bA%@R|8Ey+d2c0{Fvo*x{ zZ_#tG^Om**(k7kp-}Zzxjs9EU*EGiaJoSJDfqyLUgvOl91pi3zn3p+wfR9Gm)BA%z z^)CbGfI|iKm7vl>{RzEU*Q$AF*;>&gPhdTsM-MsF$HDcQpFZbM|E90k0`#^+{SZ`$ zz9b9&ep-xnbu_e|t(>GYh#6MvrxfMGT-H-e!gi8|gt`iw2s~S13bkFRhgTd4ZPe=N zVI>Q;1v@}}*`X4_E>KT9)Y7^REka*&sLr}BP~UQ>@Ax~k#dOM{-t~8Zdc&a}3Y@|$ z{e?rli0ocMf9Ftt30VXEz@dHwSp$9GP>%&qQ6qiiP;Ue^Q2*&ruX<0>QabBUZ+kUR zK|abN@=xlgXc;YWsBh~UsFe;i0NHX{<4`7K%V~o{-CB1F8L`=+?y1v2UF%S~b_y%G z*P%9GE}LmcQ4&vH%^Ljy_BxGj3o~3C;`RL#;ry()vh(x85Sby4BhT|nz%X42xP&?d zb_+}h92EE&fj0{@0GCrn@H+)g3w!`jr!NCuMo$U;Iz19xPk#!0BmFg971#{e0=P&x zKcf4+*CXyM{V#fnMvUa3I4hRS@X2u?>Ue;V_Ij;%+x&xVWT5$5R4^e?T1s)POEAUByuL(RYkbI&qaHqgS zibG$a7wAR$Bl?KElu^w4Uw)2J2DLs7KTXbqr;)}oz;Oj=3XX^?!gTs5k% zTXBrwlYx8vgnmQN`C53?!o|FG%{bb~^#aZ|^WO$)+P$)m@^}Zaj&b!LHS?w2Mn0W2 z?L(ck%gC9XG;R&%OItS6lvzsd8z0zCpB}c-<*d1b#!7~rHjjZ!0!nF*RS)5@!a zJyjgCjI^0%uX+y~`6-BubUN8*OpiA}I9^DWEGt_snwO%QD%(eE zC}MJYt^8zW>QZbJv!+>qKbN9w8l_9ogj+U}Dw#c+y{Ofkar~0>5STpPTwjVwnYm0p zWt&FPOqL5)o_hdtQD@MJ~UE^^5#md;Vf6wuf(mdApW!OH5h$`e_W1~LGc zrlN&A=X530>9A3i_moHS(@l1!WDaHW+$J}{_Zm4{$sSpJ3zD%)+GkFbr>0E1$F`0Y z4Y)H_!a88n1-NDJGV`X*3nNj&lhH&OqFv=o6{Xs9!-~c^HY+07-JdCD=BX!&MKd>% zogUAWs;$hiZLIs8VIQej88>WrJWn8&PYf!l^dy5F>m87p6DqgVdry>BVxV{(Q<3#HsX- zQ*kHMtWrA{-O_R%H|E6SmU;lEU1rI_GR1xj_`H@?Av%v;M>u3n(Wp^6OuVpQs@KS7 zx%QH>JV%bB-p&zYTn(9;U`<|@BYAVoOj-H#c*f!ED`4+3h2(K_A0zp`Oz}v~6(3J$ zvs5m^0q%$vtV!7gtLkN~NLGt$Y(mxI8uQ>3*jll2MYVjY)Z1DvRY_}jR3%j@gR0kq z!J9_jJuU1tC$naXR~zjykCnI#PL|>~6hRN>C#_n2p0}*m8ru1lc@~nr>`S>oe7A9$ zC>c_HZJ5fZO?%#Pgo#x(8)b&ID; zmQC@L+?-X^mocXD*g7();#^SFYLDXxW7<|>%(RbYQsy~gw@S~+Rpmv7VL7wHMLBJX(ISnb&N-+Go&lI6qD@UvLV4UZ8Gff#KLRd0JHglIbBE1tT`vOia zTgX{wA=S#gDrxO}ciVCX!;hn;U8-fL%41A@t;AiR;UvpAe`)VTF}fe+$((jchr$%w z(|n#^zMJ~#X8g7wN;d)S#q%)UU2f^2GM?wNgrhZ{v(un#GJvHB+df&qCLy1~SNwP2 z$&_j89R$o!2_FM3qtLDBsrD>mUQ}9VVJnK(Cfby#z&{u09e}(HjWi?|@?pO9iappE zxp2GrUS{Yncw6y{$CiUH>{|(+G*N3W9fl5%KP5aHF|t6VmAvH`WIS#Y_agi*KvtA- zp>_L(z1fRaDgtYWTE<|xAAh5;(n|?YLx@5G_>Fjt+$+)q<|v9eO3*kyQRpV{&R`6! zFmKi%4S>htV=y!L61ljRfrhcMxzu;2>JFjUlufL2q&3 zz3?FcoYo9stas5gcm<3eg;?U0Lku&R#VMjIFEsunV#v`qC`lBG13QinnY|K!jyaE1 zX|M;CsH^!eLyt2h4@n7k&PkO!CCnLT7w4djKU3yzUY<0&mR-A!$Ft9mJB?lED$N*U zgBMHAV{n>Nq2idE)*Hc{LW=XWv&JA^QfKkUuCkjvSazHfDoV%16J9XW=(mh}Q9@(N za?xhLIttQ&kaO=Eh%3>KV%8R}+)6Zg7KdRnjgB~KDe2f~x((#12AmthV8JBm*h;imN$ z);)kF0k!rK+EBNGWd z3CP7dBXh;8hNFp-8079sngAz-^mG%rNOvO2ti|cxDM_AyMc&?c&06^5V#5ojVue?_ z$_zEX+&TwM&Jmt-*FWZ^WhuNqf~n`>jKTc`2FJCQD>>s_xA%b0Yq>HwHAFV1O2hnp z_9$GyGlR%1an9AOPR}bOOm3oZtuxTa1X`(*R?A(Lw3Y-(4GG6md29IA_pdwr$fM8p zKJ)CqeEpN$Z|)#pRMUdqC~1Bm4Gm027dPB* zTH~E~WvVGmF{bAj)36!AJJv`f;v>z&Km$#UvkwA|z?jzJkFe!Piyt;YfCXG%qTxG& zh%c-)E<*1fj}MJ*^XMLLK=T9wJ`V_wS8u!x9R$OHfY4A21$6Wk@wC8SbfmRN$3gD6 zKH>;jCOt-iFW+@=|H`h@4+J~DG4jDnzw^5vdh~ja9)#gVz9=;=f-`V{VaqC=2i|xy zUeIdjw4TFL?~6gn8>4!Bg7~sZ-nY_f{>F0L({z(<6!uv8{^KcA-ZhLL<~J}J^whV# zEAcH=&G$y+*Z6eTjBmf@UMfVt^L#YAxuf%H?8+LgyV~gN-qzK*ZBwdyOZTQOvvcdF z37o_?O>XbHdSWtdZZWq_;?+62>cn^A_#+zDXjObq|M=WXm5t6r{dM@>d~19&e2y%e z6XF?{A87XA1e9fr4Ngj39sthQw|zf8qrNZU9{5ss{(S~tC@%PpWd4QoIJEZ5mNFpQlL?#r z z{CV!_lkIk(z-idTd9yYV8}-ao88dIY9djS7d-=ADqo$s(c-P8Sd3vdR$FceH@qn-0 z_>NAKc5w$5^O_kEh(#DF0khpeH)28@HL)$clXj)CMS#4S)G1f;-MJ@C@XYQVYIbIEJd91S8tA*s6UL9_!(<)~9y;B@t{tG-K5YlVCd%301p#gqHG&7;c?Sz;vrbLoLSb>J{#wMJDoiy!hlzb$w)#K z>(Wl;-3Bc|hA0i%HH0chT(d)G7kI63I5Zm&vpQNy>mf{u6oSd2_U5L+5z$nQun}c- zmN#2@wLtX#PY1==F2} zse%=jXTO^j`S8Knc(6BVbT0cpJATw{+I$E*G$Q+^BSG5Cd6+)JI+O!jHBw@CtRqv) zv|Jko5sGY~TpV6TQ1VDoF^d(*ADYw%Vu;Li2Nm`?kDxS>{5PhX5Uzs|;!f{FC<_!k zC0qp$fO$Gn9!W-eck^I&6W4+#R1J!&VroMi%9?Qf&^QTWEdy&MQggQC7mlJ&=3p_W zAqlvUnG8q7=CnVZSJQE*``zaw*Yv+S%)M@cxhh?Q~+V*U40>V5dvNQ3U2k z3QvPU3T^r9K=Nk=@);WpB@budOf|zzQ0N>^2$Q4pr>8WrMtXZzdX&w5oL5a4xNJMS zVXxQ4S;^M6>p~{m;8PWdg_g3wjDp|{ilAOIDk24u^X3^iMv4ASYtj{W&Bd!DHhq|v z*u5|Crq4e){kT}E{8gGZAF!(O2|Vrxtm^y|a<9?D9KSaYu^;fQ+WcQcU8jdRbPq2> z_kdNOk44z1K@W3!p|&wUPqb-A4|8h^KCHBxUtQ40^e|^w)R*LU7WDD_xlwkPPUvCY z1YVD7OllHrdr@-`M!|#JS zX!-co-Z`9bd!ru0%O}#_tc{W2&e&n6S$hj)Bp57dz3?8`w2Y!8u-S)+EdyKg*WGZ< z7Ov7hys1y1xGk3r&^8?Wco9>}^2_>{;=T*KJ9wgGZY53|e&-O5OKQQ7-$4t4_ewhb zg%&!E%cSb)Hpis<1$!dPoLO`q)-!2qWUXz|hk_>r$D*t`Pw*1KJ4C-evIZVn1b-!( z2P3tnORJ4;_^~7G|7~L#@XPRT(xzy?4@XbB{XhjwP`Ptk3^MiGE*+y@*QIrCuZ!hv z)?5nNr5}j?TG1afm%#N+2IHu~ev;;W_e%1)mZ06>Dlmep6)6H&}Hs$f^uC6qrMUtp&T^gT?4AVg7ddGl~+YZL@iB zJH0M!*PH^Ii+;svHQxUSt-4RxaDmxzyH3SvN64~v8tkr+O}TX{LHCC2w3`O|amaod zty8n;!2;5eIuf*Bg3wC=*`(WAPs zsm=%1(HdY2T?x$6Fz_6~MS@=v{a5G~=m%KiBNm?YP1+0mHa!d6LdR8~xL!(kV1dPo zmsza7ORai?$Qwl7F7kGf_lrCpBF{W3@>3zQW=iB&LSzkTpIs|mKvrc$ZVHh#eIhRo zku~c@-Vh>d#zfv8B5U@GJRTxzj*2`bNCvN%F@}8H`h=_(9249xcvNsokRoCr*jJG8 zM))Z`L{HMw*iafBHTW+!vdmVz+veGAKpkUzIm-AWs}uM~!9%vlMkk&>I&3moEqHN^ z!>TsMmr;m2EBC@IgR? zLu2}Si#7@6aF^5FL=!tJA2cSqYi`iNBXvh6uC9Mf1xsqmgDVjG}0trOR^wnj@2Jyw3`;E9Wt{$l0p@BH=E;KE>k+nnWrEjyPOEP;GL%526NyBGlx9%iR5o^dP|?0oi{m1WdLqE23FtT1G-Q zV6JKqTbpg;38;g++WRJsw^yl7D*m4kZ