From 8a0fc4751428cd31dcea4231fd8abac35d9223ff Mon Sep 17 00:00:00 2001 From: SpoinkyNL Date: Sat, 13 Aug 2016 22:58:02 +0200 Subject: [PATCH] 1.2.3.0 Improved profile loading performance Updated packages Added default GIF for UT Added default profiles for UT Bumped version number --- Artemis/Artemis/App.config | 81 +++--------- Artemis/Artemis/Artemis.csproj | 21 +-- Artemis/Artemis/DAL/ProfileProvider.cs | 120 ++++++++++++------ .../DeviceProviders/Razer/BlackWidow.cs | 2 +- .../Razer/Utilities/RazerUtilities.cs | 8 +- .../UnrealTournament/Resources/redeemer.gif | Bin 0 -> 8167 bytes .../UnrealTournamentDataModel.cs | 4 +- .../UnrealTournament/UnrealTournamentModel.cs | 4 - .../UnrealTournamentViewModel.cs | 10 ++ Artemis/Artemis/NLog.xsd | 31 ++++- .../Profiles/Layers/Types/Audio/AudioType.cs | 3 - .../Artemis/Properties/Resources.Designer.cs | 10 ++ Artemis/Artemis/Properties/Resources.resx | 3 + .../Resources/Keyboards/default-profiles.zip | Bin 135378 -> 172563 bytes Artemis/Artemis/Utilities/Updater.cs | 4 +- .../Profiles/ProfileEditorViewModel.cs | 32 ++--- .../Views/Flyouts/FlyoutSettingsView.xaml | 2 +- .../Views/Profiles/ProfileEditorView.xaml | 10 +- Artemis/Artemis/packages.config | 11 +- 19 files changed, 196 insertions(+), 160 deletions(-) create mode 100644 Artemis/Artemis/Modules/Games/UnrealTournament/Resources/redeemer.gif diff --git a/Artemis/Artemis/App.config b/Artemis/Artemis/App.config index 78fd4a68d..af9997c3f 100644 --- a/Artemis/Artemis/App.config +++ b/Artemis/Artemis/App.config @@ -2,65 +2,26 @@ - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -330,7 +291,7 @@ - + diff --git a/Artemis/Artemis/Artemis.csproj b/Artemis/Artemis/Artemis.csproj index e74a5a795..707d8f05a 100644 --- a/Artemis/Artemis/Artemis.csproj +++ b/Artemis/Artemis/Artemis.csproj @@ -40,7 +40,7 @@ Artemis Artemis 0 - 1.2.2.0 + 1.2.3.0 false true true @@ -141,8 +141,8 @@ False lib\ColorBox.dll - - ..\packages\Colore.4.0.0\lib\net35\Corale.Colore.dll + + ..\packages\Colore.5.0.0\lib\net35\Corale.Colore.dll True @@ -176,8 +176,8 @@ ..\packages\NAudio.1.7.3\lib\net35\NAudio.dll True - - ..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll + + ..\packages\Newtonsoft.Json.9.0.1\lib\net45\Newtonsoft.Json.dll True @@ -197,7 +197,7 @@ True - ..\packages\NLog.4.3.4\lib\net45\NLog.dll + ..\packages\NLog.4.3.7\lib\net45\NLog.dll True @@ -205,7 +205,7 @@ D:\Downloads\Chome Downloads\Process.NET-master\Process.NET-master\src\Process.NET\bin\Release\Process.NET.dll - ..\packages\SpotifyAPI-NET.2.9.0\lib\SpotifyAPI.dll + ..\packages\SpotifyAPI-NET.2.11.0\lib\SpotifyAPI.dll True @@ -639,6 +639,9 @@ SettingsSingleFileGenerator WoW.Designer.cs + + Designer + @@ -686,9 +689,6 @@ SettingsSingleFileGenerator VolumeDisplay.Designer.cs - - Designer - Designer @@ -878,6 +878,7 @@ PreserveNewest + diff --git a/Artemis/Artemis/DAL/ProfileProvider.cs b/Artemis/Artemis/DAL/ProfileProvider.cs index 6f64cf8dd..0af504d90 100644 --- a/Artemis/Artemis/DAL/ProfileProvider.cs +++ b/Artemis/Artemis/DAL/ProfileProvider.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Drawing; using System.IO; using System.IO.Compression; using System.Linq; @@ -19,9 +20,10 @@ namespace Artemis.DAL { private static readonly Logger Logger = LogManager.GetCurrentClassLogger(); - private static readonly string ProfileFolder = Environment - .GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Artemis\profiles"; + private static readonly string ProfileFolder = + Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Artemis\profiles"; + private static readonly List Profiles = new List(); private static bool _installedDefaults; /// @@ -30,7 +32,15 @@ namespace Artemis.DAL /// All profiles public static List GetAll() { - return ReadProfiles(); + lock (Profiles) + { + if (!Profiles.Any()) + ReadProfiles(); + + // Return a new list, this'll make sure removing/updating the retrieved list doesn't + // affect the datastore + return Profiles.ToList(); + } } /// @@ -59,8 +69,15 @@ namespace Artemis.DAL if (prof == null) throw new ArgumentNullException(nameof(prof)); + lock (Profiles) + { + if (!Profiles.Contains(prof)) + Profiles.Add(prof); + } + lock (prof) { + // Store the file if (!(prof.GameName?.Length > 1) || !(prof.KeyboardSlug?.Length > 1) || !(prof.Name?.Length > 1)) throw new ArgumentException("Profile is invalid. Name, GameName and KeyboardSlug are required"); @@ -86,31 +103,43 @@ namespace Artemis.DAL } } - private static List ReadProfiles() + private static void ReadProfiles() { CheckProfiles(); - InstallDefaults(); - var profiles = new List(); - - // Create the directory structure - var profilePaths = Directory.GetFiles(ProfileFolder, "*.json", SearchOption.AllDirectories); - - // Parse the JSON files into objects and add them if they are valid - foreach (var path in profilePaths) + lock (Profiles) { - try + Profiles.Clear(); + + // Create the directory structure + var profilePaths = Directory.GetFiles(ProfileFolder, "*.json", SearchOption.AllDirectories); + + // Parse the JSON files into objects and add them if they are valid + foreach (var path in profilePaths) { - var prof = LoadProfileIfValid(path); - if (prof != null) - profiles.Add(prof); - } - catch (Exception e) - { - Logger.Error("Failed to load profile: {0} - {1}", path, e.InnerException.Message); + try + { + var prof = LoadProfileIfValid(path); + if (prof == null) + continue; + + // Only add unique profiles + if (Profiles.Any(p => p.GameName == prof.GameName && p.Name == prof.Name && + p.KeyboardSlug == prof.KeyboardSlug)) + { + Logger.Error("Didn't load duplicate profile: {0}", path); + } + else + { + Profiles.Add(prof); + } + } + catch (Exception e) + { + Logger.Error("Failed to load profile: {0} - {1}", path, e.InnerException.Message); + } } } - - return profiles; + InstallDefaults(); } /// @@ -133,23 +162,27 @@ namespace Artemis.DAL var archive = new ZipArchive(stream); archive.ExtractToDirectory(ProfileFolder, true); - // Extract the demo GIF file - var gifPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Artemis\demo-gif.gif"; - Resources.demo_gif.Save(gifPath); + var demoProfiles = Profiles.Where(d => d.Name == "Demo (duplicate to keep changes)"); + InsertGif(demoProfiles, "GIF", Resources.demo_gif, "demo-gif"); + } - // Set the GIF path on each demo profile - var demoProfiles = GetAll().Where(d => d.Name == "Demo (Duplicate to keep changes)"); - foreach (var demoProfile in demoProfiles) + public static void InsertGif(IEnumerable profileModels, string layerName, Bitmap gifFile, + string fileName) + { + // Extract the GIF file + var gifDir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + @"\Artemis\gifs"; + Directory.CreateDirectory(gifDir); + var gifPath = gifDir + $"\\{fileName}.gif"; + gifFile.Save(gifPath); + + foreach (var profile in profileModels) { - var gifLayer = demoProfile - .Layers.FirstOrDefault(l => l.Name == "Demo - GIFs")? - .Children.FirstOrDefault(c => c.Name == "GIF"); - + var gifLayer = profile.GetLayers().FirstOrDefault(l => l.Name == layerName); if (gifLayer == null) continue; ((KeyboardPropertiesModel) gifLayer.Properties).GifFile = gifPath; - AddOrUpdate(demoProfile); + AddOrUpdate(profile); } } @@ -208,20 +241,29 @@ namespace Artemis.DAL if (string.IsNullOrEmpty(name)) return; - // Remove the old file - var path = ProfileFolder + $@"\{profile.KeyboardSlug}\{profile.GameName}\{profile.Name}.json"; - if (File.Exists(path)) - File.Delete(path); + // Remove the old profile + DeleteProfile(profile); // Update the profile, creating a new file profile.Name = name; AddOrUpdate(profile); } - public static void DeleteProfile(ProfileModel profile) + public static void DeleteProfile(ProfileModel prof) { + // Remove from datastore + lock (Profiles) + { + // Get the profile from the datastore instead of just the provided value, to be certain it is removed + var dsProfile = Profiles.FirstOrDefault(p => p.GameName == prof.GameName && + p.Name == prof.Name && + p.KeyboardSlug == prof.KeyboardSlug); + if (dsProfile != null) + Profiles.Remove(dsProfile); + } + // Remove the file - var path = ProfileFolder + $@"\{profile.KeyboardSlug}\{profile.GameName}\{profile.Name}.json"; + var path = ProfileFolder + $@"\{prof.KeyboardSlug}\{prof.GameName}\{prof.Name}.json"; if (File.Exists(path)) File.Delete(path); } diff --git a/Artemis/Artemis/DeviceProviders/Razer/BlackWidow.cs b/Artemis/Artemis/DeviceProviders/Razer/BlackWidow.cs index f4eb56cf7..5aa6e9c1e 100644 --- a/Artemis/Artemis/DeviceProviders/Razer/BlackWidow.cs +++ b/Artemis/Artemis/DeviceProviders/Razer/BlackWidow.cs @@ -28,7 +28,7 @@ namespace Artemis.DeviceProviders.Razer public override bool CanEnable() { - if (!Chroma.IsSdkAvailable()) + if (!Chroma.SdkAvailable) return false; // Some people have Synapse installed, but not a Chroma keyboard, deal with this diff --git a/Artemis/Artemis/DeviceProviders/Razer/Utilities/RazerUtilities.cs b/Artemis/Artemis/DeviceProviders/Razer/Utilities/RazerUtilities.cs index b8a380416..2ec0ebd43 100644 --- a/Artemis/Artemis/DeviceProviders/Razer/Utilities/RazerUtilities.cs +++ b/Artemis/Artemis/DeviceProviders/Razer/Utilities/RazerUtilities.cs @@ -1,6 +1,7 @@ using System.Drawing; using Artemis.Utilities; using Corale.Colore.Razer.Keyboard.Effects; +using Color = Corale.Colore.Core.Color; namespace Artemis.DeviceProviders.Razer.Utilities { @@ -13,8 +14,13 @@ namespace Artemis.DeviceProviders.Razer.Utilities b = ImageUtilities.ResizeImage(b, width, height); for (var y = 0; y < b.Height; y++) + { for (var x = 0; x < b.Width; x++) - keyboardGrid[y, x] = b.GetPixel(x, y); + { + var pixel = b.GetPixel(x, y); + keyboardGrid[y, x] = new Color(pixel.R, pixel.G, pixel.B); + } + } return keyboardGrid; } diff --git a/Artemis/Artemis/Modules/Games/UnrealTournament/Resources/redeemer.gif b/Artemis/Artemis/Modules/Games/UnrealTournament/Resources/redeemer.gif new file mode 100644 index 0000000000000000000000000000000000000000..8b5947845a7887eac9090ed32d313413ab24a683 GIT binary patch literal 8167 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 Q>P(Y+ab=XbFAY}xAJk*rKmY&$ literal 0 HcmV?d00001 diff --git a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentDataModel.cs b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentDataModel.cs index bbebe08cc..aa2deb1b9 100644 --- a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentDataModel.cs +++ b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentDataModel.cs @@ -76,8 +76,8 @@ namespace Artemis.Modules.Games.UnrealTournament { Unzoomed = 0, Zoomed = 3, - ZoomingIn = 2, - ZoomingOut = 1 + ZoomingIn = 1, + ZoomingOut = 2 } public class Environment diff --git a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentModel.cs b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentModel.cs index 87cee5f9b..a1863c2f9 100644 --- a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentModel.cs +++ b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentModel.cs @@ -3,16 +3,12 @@ using System.Collections.Generic; using Artemis.Managers; using Artemis.Models; using Artemis.Profiles.Layers.Models; -using Artemis.Utilities.Memory; using Newtonsoft.Json; namespace Artemis.Modules.Games.UnrealTournament { public class UnrealTournamentModel : GameModel { - private Memory _memory; - private GamePointersCollection _pointer; - public UnrealTournamentModel(MainManager mainManager, UnrealTournamentSettings settings) : base(mainManager, settings, new UnrealTournamentDataModel()) { diff --git a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs index a14835697..fc19fc0fe 100644 --- a/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs +++ b/Artemis/Artemis/Modules/Games/UnrealTournament/UnrealTournamentViewModel.cs @@ -4,8 +4,10 @@ using System.IO.Compression; using System.Linq; using System.Reflection; using System.Windows.Forms; +using Artemis.DAL; using Artemis.InjectionFactories; using Artemis.Managers; +using Artemis.Properties; using Artemis.Utilities; using Artemis.ViewModels.Abstract; using Caliburn.Micro; @@ -22,6 +24,7 @@ namespace Artemis.Modules.Games.UnrealTournament DisplayName = "Unreal Tournament"; MainManager.EffectManager.EffectModels.Add(GameModel); FindGame(); + InstallGif(); } public UnrealTournamentModel UnrealTournamentModel { get; set; } @@ -112,5 +115,12 @@ namespace Artemis.Modules.Games.UnrealTournament MainManager.Logger.Info("Installed Unreal Tournament plugin in '{0}'", path); } + + private void InstallGif() + { + var gif = Resources.redeemer; + ProfileProvider.InsertGif(ProfileProvider.GetAll() + .Where(p => p.GameName == "UnrealTournament" && p.Name == "Default"), "Redeemer GIF", gif, "redeemer"); + } } } \ No newline at end of file diff --git a/Artemis/Artemis/NLog.xsd b/Artemis/Artemis/NLog.xsd index dc821bc0d..c489255c0 100644 --- a/Artemis/Artemis/NLog.xsd +++ b/Artemis/Artemis/NLog.xsd @@ -232,7 +232,6 @@ - @@ -1020,8 +1019,8 @@ - + @@ -1093,16 +1092,16 @@ Size in bytes above which log files will be automatically archived. Warning: combining this with isn't supported. We cannot create multiple archive files, if they should have the same name. Choose: - - - Maximum number of archive files that should be kept. - - Indicates whether to compress archive files into the zip archive format. + + + Maximum number of archive files that should be kept. + + Gets or set a value indicating whether a managed file stream is forced, instead of used the native implementation. @@ -2238,6 +2237,18 @@ + + + + + + + + + + + + @@ -2334,8 +2345,14 @@ + + + + Option to render the empty object value {} + + Option to suppress the extra spaces in the output json diff --git a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs index 9f66a28ea..7fd087c40 100644 --- a/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs +++ b/Artemis/Artemis/Profiles/Layers/Types/Audio/AudioType.cs @@ -22,16 +22,13 @@ namespace Artemis.Profiles.Layers.Types.Audio { private readonly List _audioLayers = new List(); private readonly MMDevice _device; - private readonly MainManager _mainManager; private readonly SampleAggregator _sampleAggregator = new SampleAggregator(2048); private readonly WasapiLoopbackCapture _waveIn; private int _lines; private AudioPropertiesModel _previousSettings; - private AudioPropertiesModel _properties; public AudioType(MainManager mainManager) { - _mainManager = mainManager; _device = new MMDeviceEnumerator().EnumerateAudioEndPoints(DataFlow.All, DeviceState.Active).FirstOrDefault(); diff --git a/Artemis/Artemis/Properties/Resources.Designer.cs b/Artemis/Artemis/Properties/Resources.Designer.cs index 5e15b7281..99580a00c 100644 --- a/Artemis/Artemis/Properties/Resources.Designer.cs +++ b/Artemis/Artemis/Properties/Resources.Designer.cs @@ -288,6 +288,16 @@ namespace Artemis.Properties { } } + /// + /// Looks up a localized resource of type System.Drawing.Bitmap. + /// + internal static System.Drawing.Bitmap redeemer { + get { + object obj = ResourceManager.GetObject("redeemer", resourceCulture); + return ((System.Drawing.Bitmap)(obj)); + } + } + /// /// Looks up a localized resource of type System.Byte[]. /// diff --git a/Artemis/Artemis/Properties/Resources.resx b/Artemis/Artemis/Properties/Resources.resx index ad8bc3f95..4d198f614 100644 --- a/Artemis/Artemis/Properties/Resources.resx +++ b/Artemis/Artemis/Properties/Resources.resx @@ -190,4 +190,7 @@ ..\Modules\Games\Witcher3\Resources\witcher3-mod.zip;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + ..\Modules\Games\UnrealTournament\Resources\redeemer.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a + \ No newline at end of file diff --git a/Artemis/Artemis/Resources/Keyboards/default-profiles.zip b/Artemis/Artemis/Resources/Keyboards/default-profiles.zip index fc967a61fdc62aafb2f1012420293f7b453f427a..dba026291b0f4067970488b5fb0a18c7c3e76ae2 100644 GIT binary patch delta 37364 zcmbT-1yCDd!{~b)Qna{Baf-XUyB96)?k%=B#VJtS-Q6{Kad$0JTnfbsg&X?4=bZ1% z)wyKY>`wOC>@ZAb_xJoWn}?J*@Ft)UI{X@dg?j__`V&-#D)(>YKMM-Tvze2tn~9Ap zlN~n~ldF{}ih(QTbHCxTqvldY#1n} z|1ZNOEi3^O4|{iJTQ?`ivn+k5wbth0E!aH)q|F0154jC3W7wG8);YgoJkBhkIX`}M z+x$XthxhSkHa-Xs=lb;)`gjTX<_g_^`BM35=pz!!n*8mUK0XVJXe3S6oU5>8x__j5 z!2`6Cdhp1`65>S2x+bGM9Ftx|=A=FzuxENx0<(Z08N%K3bcQ?L!ST?rVtcUhr-RTD znM{v7Dn$2WTA%jsA5R(Zw;nV^@IQ3z9E0UrE|fQTdb4;8_P-h3xt_+Y^Dh~a@E&!e z4s9M+TqZbe%sdsU!Iqe?X1Xs*UGyF5N?Dj^c?fy-pmcT6xe-owYCgxwc=__Mw0ean zYK{OWBR58ypY#~N=)D|OJQ2!6>|um1N&N^)N7xz&xlaU-X$=8K2m4g1L5bzt8pK}v%j|I`>{AAVU_yfREO1O(7xFj6I6;xL5;1+-d8SZJOZlv%oJ;!@b;q;s5S^g zzfie*aqfZO&h9*v?yW6+@2!=*bg``%FnU&y)X{n5wnrSAX(pedGkN68S0Xk^UqXA3 z4A6WYJj# z#Jr=ZSCU|TY35Rp{T4d$)Ckn-?qCT#k~4PN=k*OF1zw=;CVFh5@0KhX9wwawodO1| z$1iInlW-)|WjD;;KhHV8_$ZcStp5(t<@mfIz%w^ZCX$pluGV1SzOI$Qm?Gr%qg!gH zHMR_sfb^*6p--27Jv}MjQBgH&wZWVIq`4%0`X?tfOXs%_HHd>~!*6#if;#6{nZ6wq zu^X!C)%v3rgfpf%`1~qre#HpObYv1Rm?Jb#?u#x^V zX`{3QOS|~bGqnCQ@`=l*SKs*SmiJA+sh4Y;Yej{aFtNlRaKXcT&}QYK&qRhvk5|Yr zv48)$Y<$GDvl$ac-#p;`!&u{f2%NbS(h85+%M5bMaWI@I8JTHAyPP^=0ANT^YZez) zOvYxcFc5;B>!H-x-4^5Tx&IPuj13Ai<;rd1t#wZbFsKB_!;E|-rv8;v+P@(QGifGt zRoQ%xUgE^gIVAEjQq`=9x3s$=o9scv1t;9<)h*zQBTY7=plXX^AocC1lWDknOw=K8 zp4A;aC7AK_b)Ko>uB>sh9*DURf9WMt;QA5sc#m(he}AU8e9>Q;@^{}4#k-gBSZ+7` z<7F`LTdDA6y@O}-w_WWaKl950(00B{vf8#B$TWCQ(J|)4Gq>&1_o8cdlu$n6(}H{C zs&$ zwSHg_^oSA3SFbv5eCV%Hz5a`rrB~a!#IoUS9N)?(#q|$5hSX)@sftx%D$Som*a+m> zD#6S(HYq*m1qJ;%qd*s#cg&!f4rT>Oe`m7jR#=^(sofl9V-unpUb?<1Ugoa$n*jT< zQGcOqTZXmq?&Us`u56U2HcR@hg1DLYwN)9%@V(P+!#+QRmV17f#ePgxuY=7f`b7QH zjb0-dwY?1I=Y)KPRFT|5X;NdAq!feJ!d?aIJ#!unj(>x;<0(+H>HPh?1jdlQfMwsk zIB7F!HY;*A!AyU$%`o2$zQKyxat8ONCRe!)EqS)z-mucsBlts`uckBCjBt(NyXFf1 zFYoyyDtII3JVfLcs!mxq*KG_|To^9|9rdCZMvImAB4f>q#_7xH9s=%-RnPI6_+=sr zR$^_`CJGVMxC#JD;in_hF^BWJ@|KlZMpFTXyk-l&^y=nSYw=^QRT{}9`+hc$@bYq{ z@p|c~$QMD83g2}N9CYsMpXN3-;|f*I)levK2v=e3<57Wu>iDv#&g8rp#7Jn^WbkO? zG|t8pSj4GR&fCnq({PB6eSxMZg@0~R%m z4kTp7z)zirM}UD142*(9VKj$PhetRDgHc(ham~n~A+II2Lyknw>ijhzFjUdl zI3Xag11yS)-wKVuk5BY^bQst{8EDuB5WdcLI0PCHek(GHW?*1OG%91n8#BmhI_u&Q z14w9ah|HM0&WOaRQ>zQM2Rdq1N8cv9)(*9)7B$!GtK2HflCjN{xKujnxE3}0(`^Uc zAX~ih$_`3g{zV$3f-j1FDm$|Ga+xF#a@Hwts*!m>>r~E(U?p`$=S1S%464648Nsqm zVxsSDAK8!D1HSjvc~Qb8Xz^kC|E- z>1cTss6`%%Gv5yaeZWH3-l=6XeMlipE^(;mCN$3Itum=#p>eo#T`K3PBUf}>hLsSX z$_bf|FuqX2D;!Xe<+pUC%MpMk03BR{?OUsQA+6x1D%p-5pwi9{M%+%6hsqJB0n^Gs z<&XrSbC<6o`8IkQ2$PeArint9CNK}ISl_L_iVBw~2xIRxKtGgLeez{=M(21vn?AVL zbC`M;=%bwCqv$+ELrR84nlqS3o@3z=kN%zZo2ak=d5$kGt^pwO2Yv}r$63h7mhrBS zT8^=`TM!Mox}|$Ps%VNr^6H0iTgv_Qydi8tq`H{k9{HlT8g(a3bBMm^)>r)iccuiT zE86AAG3dTBrRk~?dlOrg4Y^g9K! z*`NaH=+&=pQI!UY4&-k}!3xsziCAZQQhe}@->C=ct&0PmMs4DhKJByB(1_At?M8YH zG-PQljmZVlN~bV>mC0Pz`q?e1eUB?8tyXH<(UK$!>h}3@%684}dS+pN*SxgWMRId% z+9gbh)RO=xM%T2V#hnc*yA9~F@E73uzrSTYWgKGYQ*Af}S1#?|TcPyjY#6PBT3DzN z&D{i@RQTG5+9Q^VApg-%h^OX?ynm#Q*V)qiF zL=!&yYqZ#}&1z1}aLpC+4Qua;MIy;nm-F!B^vrtn+jLE6$Jp41iMda36Ki;tmah)j zcg$GEY?|1lSz|af&D0ev%-V(2x(~CKb=$W(v}_#e8Lq0uXuj0SQ)cFyqNt252Bu9n zrqu#na>PP+w`&skbCMBd0XKqPon|#%!_6>92|^q=g&Sg3wf3t_^BHk_yT?Ry2y|h= zzsO9+T@yR>1rza`PET(VL>`NAwnc+rL1=~UL9p~5*u=7JaER)E=y>CeX~D{+X0)Z5 zXh;HLL(0?KJXne#j^6dO>+hnuZJo@gaLWK_r@)xj9P2dXw^}WhE67uvA~D#w7Apa{ zPuY4=8LS?du?$LHR#rv#6J!WXQ~ii%2{R7&ON|w)9%L#0hb|S=2FH;XKSIHp3L1eo zq2aWnIfT3&M_yK4>7xTp>CGL1nO5*jZ6$I6v@~pVm{ibAyzm=o3FcmFI&;@gD1iP= z9bsT-qK=X-A*hGm&udTEII;V8S)HqT*SAFf-J7C4SoM z^fRfLhBorYo9@`)IZL^G%$K7+oNi)C+-k2V5V|W*=;V726%0EuG zNo-LK%-9b%maaA@c5cNz^VM2QRsq}>f`n=%UOMxviaU~Blz${X*o-|oE%?lK#7fVf z%zlwB#2SZ71x3s2@Y%e7PkWT160zwd5on3XrY6Q=%nh~=Sb=KDOMP9#ph`szf=NYX zCAyum2g4o3jE9+R)zR8<8XpHs8tS0d5)R1p+J2|eK|Lxk=Gw!o3=^jT5WgF9QQ?Iw zOjj-hI0*C95oXU&8hrrOA-wL-3(|(IMDPza;ST9i`(H_2aguo;RuD&Ub zNgcIIxcp=QPKq92ZDR6aAG1oI8V6{X1?5q;sue{X3 zUU`*$4QW|m*PbZTP!BH?brP2hesYr9nVZ)q3%s(zzkRy9YhRhw46+h1oh%NIS!s;Y zLLWVWX$S;Xb_xPk+Tg|!ENie>1@sY9H#jXXjP(sFiBvl=ng^9? zZ$&vJgpnJ>#OZ$ev#*X#X8_3x5ls zSs<^NDNC9&-1;M_X@1F#DJa3`!+RfxjcDWMIjK`;@l|)(_}8n>tTB1GK+A%UYv;gztf&n@`*f-oNSzJ{wp_RE?iaJSw{`PfbQG)b!i_ zs5n%T`=FF5T8T%?x6_5UIb?9Ny#dz%98Nvtvk&G_f8g;zl~!To7WnL1*tpX%ysuKD z?FTlfzIZy06XHqQe)-~4;>hbqcE3xFVZgfJa#VgtiMdr|x)<3?v+ zRzIOOZ5TICPXB(2d2))%xa@K@l25rFUAi&P=l!wY25-WWZ$_Xc) z@*%jlTC8-d0!qByY-Qlxyj~?g;KU0>5umC;Ug-M+<#Z2a|Eop5DMkF@c6@2jn-s$S z+0}VPVd)@y>(v0b}Un14qcU* zBB^>rl8F38g};@*8_8U~Y-^lLA%Vh%fa{8YeMJ=~dhATCoYweOHrJOTgz_ zg3k=0XP7*rg5FCpTBB<#vc!Xw8Pb;@<4V%?!kA>n9D)N~4C8C%8`hJBIQp6PU5lK8 z%_19ksHtOc_V=uc2GsS^AlE-CreNo9a`dNfn8xK+rrW;};ddTAeamlp&#~(qj-{h) zD?MB!heUGfA5~+h^u`x!oMv;!2x)5r$>97 z^vqIJFkT3`;Pz2R+75%O^-L{zyKNSrXn}cRGo~5My4)l<2oV@3)Czj%a_b>Ka7|W?t32L2+)Uu~Yj}Pn> zops_5k(M#LzGvSi7#s^Pd3s8Z8LXlwu#yEZFowB_%cE|;`LzSf@{|R*w_~1X6Wp#{ zZNcRynjB|8iFE(U{UnrY^7BoYX^3h`=GL<1N2n_+jXALT<|$^pD1#y3qYkB602Qiw z+l~aKRS61^*Fq4b*H?XnDz$(SwZMXU1HC8#OBbTMBn4G!ssyE3&JHEN610ja%7g{Q zkO8HdI^y{WNeT_X%45w!ZEdPXUgw8fcbz9}wRpRx25Mp&oB54|pB@JH-f_o6YP~+f zLe-W!hAV4`Xr&@hKi1K1sJtv})txe{;#ft!!9G7dwwQpBI_Yrn?X~uw_s!xaA5;1@ z*NDr~+xHUEHzh|u5PaTUX+NlTwyBb=Ba^Rq%*)Jiky0H2s(+k_75zegq`B^pk73w% z!p-&$k2CK{)~PWd+3{yuUSYNqx(&YA^@jcJ(@);2ah`AVJD|mBWo6ORWB9rv2K|r+ zH9=W(jEu4wo`;kmuIe$)YgkYG)_8ce%6?;Nbm(WTYTlYw-U|4ptXwswN<62`r$Pet zP!aMNw+{j)LniITtSn22vdbqq`S>-q^s~w=&Xi#~u=uh0Ia6{a@+9=9^9bFolP*NV z#lwpk#39S8?tja$fXsTdA_kcV!pD=&&^uf`EIp2tT&_GW{poasM$5|5Pv`nL#k5Iu zNpuC=Nr&&mB1o^xmn--XNAdn$aw6l$0yJE9HnXNb%3`{k;JxQ zv2e0xQiUhg^P}7g-d}n-fCZ?O7Y6?Nx(d{Ax0yV@j3M}0gi(z5qFuB&Yj1P z%AIu@``ssDbLRrUPW8*)=2aHQM+45&ZN^KPxyj-~KaB2*+GzXwYTC(-?<7E2T7&U9 z%@rWXm-r)pyO%%-i`uDp31~~y?Iu6{n@BV+=%shdhsWZ++I2IeLh0p}CUyH$mjyHB ziPAfgS@XvT{PnoN|91IZn++_d<6AOp%*GEgg$57my{(j}@ypr)3WkR>>d}bqMa$J7k z&k*YJesJ}ESs)RZbNti+&iRAhaNZ^2|FDrE`1Gj^!?g41N3;w}4vZI}fBjgV_t&O7F2L&Zo6Z!rs-9EF^BMKj_#H3o00@VR$ zbEXExLE&7YTZPeX=fXD=1a1q2=W~9Q8S<^9y?y*ju%vLMsM!0uF0psyt z>7=z9^HCYE!}eX(FQ>B@M3=VHjb<*NvQ4S|*haE2i6KUQBpFPBSJ zFygyg7j!Wg)C8f%?OoXaVB9BFl9gSeDgFFc7oe}WEyrUWe&L6AB*w98}D-ZLFA)@(VxQN_u?;%MrQtJU%@wv#fY>k z{Bn!jzis1E<+$mH&|K|znqlKCRiq+|Q3Y1w$H@=$p|(<*O-T5QJ20Qs5-FXf;N7zN z_-J!MZH;t8%}L)zqZvn+v_*}tQJm?0GKw?f15TMJfJe_Ap|)OSzj)EpT?zYD)`%0R zS_N3oy&2UeN(B4B)OfhY>Mx5ecRz-i|MpzON%Y3oAT<6&OjgE>zs8|cCwClC#e4xF zt~=0e8?3%pv5R_P9iovkd%DgUw|(#7B9s;?IRtr1<;oB zlr4fTGrL!J@M7H3je3*A;d?UK{bww1w^rnNDT8hEs{o!)Z4n)rx!29o**K71FS01x zPGwu)tv~jgr-RPB4?c=9K475Ct=H+-^AD5bNgz3=#O5&4k-pxMD6)8@e8r^2uX|aH z7BRR!D`{=1=&~yY#^5dnV_=s_*8`I>E{|_)$6F(foh9xSbF`C28ng)ELmN<JH?GS4X)wGwfJ>JUd)!Wt8U}q#I#yVu_jwTrL zj{5p7Mayz=o(2}rOG&3dvZtTMe5^mGAZt8VILcQ*8V94r0XWpw7-yFcoR zR&S1!C^qQjQ2Ck%GuJY-8njbtM@3}zPfc&xS36;T&eLo6iASbZM}Mm>ZeYMuL1w01 z!)rp`^VCImkz;WoP;se0x5{fT5*k|biBa&09qbzRs8EwzU5qlAO=QFYK1)&46TKxv zi4-dMd_h;IHO8%|%VnNLSHAg!2k2gQ$$9L$^5fP@)M*wsALDe;(jYwJq*&m0c$;6A z>`0W(^gdE5I$!zvRoCBdoVP_IXZ&%_Z~d@WoQ&@Ug%|{@>qdY(xGldjkX>J`vdJ2z5@fFw83C^7=)kffq^bC2&|a z_@#aSk@1JBfWRX-lyM6f*j)&%BO=&>!Az{v0X!K0VE#%U8g>qZpE?GIFa&{f^jA37 zH_kv$D{Be}B^rwra3;eqg@SEKBa*!*mIViHgIk&Z%>fwDIB%2k zvSu{ZoK4mh>22s|b=>_ZK(a4y-mpAa)?{KHDz;??KG@oqhbb*wEkU-NlQLI}ZBOM( z1nrJP!Hx9#U=`Dg5tVmd7L$HIXaY0f95Gwvu0W0nuw0qq43YOUO+T=tpuuQsgM-XhcBVwn!B-;I& zGe$>`(Af~;%j92XCOAn-!2ez&tG4y8uT5$llk{XV8N>(2H^!=~Ict?;E44K@SIky}38)$0Phg9< zDyP5yeAVnIZ=KQ^FkA?UOC0=p-m9&LXMly~A+`=NZiuY|xAbK$Ihf8W?S!p}>-~=C z=g@Znka022=*>qPwq|HW#)A<-vLDI`za#EJUcQ2U2=EmZj)_N~EL)BA^{idQ-GjZ7 zGlGUJ=@+EpRrmuTFNf|?2Kych_a9Eo)I_ zO!$(Q`^GIPhX-Xo2yi!rA~G$<k^!cf$P1?u03{OK@lB`x~Gy8l<1Q;0Ucz zvyFSmP@IpMPta^x)^5UeL{qwIp^>PhKv@oyog|waMXppj_0N~Puf8#=H9e8k(%N{J zUQQ-nVqv~vy23=s|{f3QUv-`V>b|p>SCiAx1xlYr8saX%v5f6>4 z@XxaR%WqwVchOT(6gL~8Aiy4_51pt1N?li1TwKUj>z+%;fvHz!oJ(>TY{n+&U6cn( zxU+JKuC#>=fiT9(O_NIxk0}^~O}=+l7h|G74EZClS`5gNzKR))hNUnjS?s>Y(oIX% zlfX_2N=YiErCc3}bal1^6_7ohKJO@|nbA8&uju;lMvZB+3Lv|b zu*>h$T=rbhoVxGB-%$?nkaV!~ymiCWsj+DGE^04tVI2BBL*PAGsu_L6PflQH1SD_(<2c^Vm$d>8`JedF_JA$ z!YZry9d(tw+Gpc|W*i|l;qg8s+8X@1xmgcmnt2DBQ^&V5Q*AG|_>!Dz#tg;+Q-4X9 zD;ht4ct1Kg%?)KfY)7zhHgxN?YLh(6{PRoJkwmv%>4iCPO;_BI{JV z@d*%Lmwe9~&klJuhdlqYbyHfpXlNurKx{ynjvWgQW+E&g&G>ZUb0OulfdQT;%qg7z z`(@A(oB+kj8&7eXUghr=>=-DX;=U5gpqo|DGJ|u)r@lHBS?XG>$df+hfGn^RyZ}X( zF)fuoWM8UfP@5t`P_ObACnSNqj{;(5D5A@tcb+5;e?~Hk`p-D5p;om0Lg>x%{M?8xaKlAoEpWd}!##zf} z?lD$clL*4;RR1_VNq$+-hBk^M`s{;L%bIHZTw!|uas36Gly zoo5fYwSztPq+!KTSqY6fSuvv#@KI0UAafBC!oAi3GXW0C%Dx%Y53MQe@zq%%?$k_w zuw%dm6vWXXJ3!XJaDL_+_C_@$ zb0=Z?(`q#XJmFG}8!=Rda^s_(Pqn&FHb+OU)g*dpM=NN zvIof~>eOMh0&W(;Cb&`e0~BP*2P#DUw@E~PwsDFVBLP=V>g@z_Zf@ckZw^=q^$1)6 z+xx#a_N0Ms2wcg48&_U}wj?97G}~~R-ENRQH|fr(+2*{q8x zx~o_YKaBU{Hc~oo2~kT({Wu3F>WCYE?dL9fG*W5)-Z$o>+YfU-`q0efDDicFlW(FD zL1-p;5vMyZ4~GaKY!1jWxtN#)|1@{L?C)hco;te|cL3BTxytp@9SGa=^&>0S!q!WJ zdu&UTwA3Io_b4me777lF@P<`mdE^|NW2%f2+Dc=MrxJ&adH9hI4DAGG$rgn5t~>tM z?=HSS5HvBaG|V3inQap4@T{OiH&=z)*!XR;o>q6gOIrhKbZ+pL2ts+2mPnbvy&ZkeL9L}te(x&-us1XM(cRnaBchdXxjS|mcK@VmKiO^ zSrk^w{Wbz{_x6KOd&{%nlSf^V;=rS7<^8kG&CGiXBi6(dfgW$H zB@o=b$lhie*0}Kfra3$uo~Fn8XFnl=;_{K-wpwxqso(x2WN@^hC0T?)Ucwo@iY4}B-%cMv}mhX zPdrf(+$-pnRS2W+)=fciQ)j(0`e7$c!{?Z=PmoFCey}#>9ix#b2*T(d*-vsjA_yy| z8ezWdEuT-Gj5i|?BwRuG?;HXs-eM={euENk^CZGpMMe6S7oRSAcxB7F%!72}LoF)X z04PPJN^+<8OrCIyB9Uw2A<20~M`T5p3Fa#%vA|)H5MzE*{UPqAV>{=W(e}Qpmwj_> zC2?B+FX2H|b*Dc8s3Z>o=b{JRtQd9rNDaAx}M ziZg@Q`do^fgimy6PM|%uRHAnTzE~ zHGZa|xUyf9;L0Gs2NJ;vI!W_H7FJp8mbp!HhMIcQ*lg%OSXDBuhXQXY)-<>6wBt3lzsPSWZ z<9jkya()G|^uI_(nQwJnrO4^yOWEl$%c6^z;!6c|A$o;*GnCaD=+*NFV&-IJksgZ? z?_{-P7y6USds-)*k0-T7D75YXN-Yc71*Nxz428Br>Rb<28d%{NXlv}mw=*Q9m$p2T z{pk^5GqfG=2x*8>qfAYfge3c++AP`=FlKKM`frC@zk~&bx5R`Q4v%44bN%R0GQx&w zrGc&_{b>((k58^qHsHO=j>Ca+%cR2AORfeN_$JVM83re>7E(u?y)y{_=39x`n@HH3 zmXy=dpRfXJVL>6N2q}o2Q5Y~L6L5XlS?w&`;wC$JtP{ng(t)bWAklLNUZjngrdDB}MM?8Hns`_O&~;23$y}RqjZ=66hlKJ4o4PQ5?AJC|tP)at)K~?FA*>#Ab z`bIw9(8FXysrZDJ>?m32L#aeD-|C~OXlNBg@($SO6#uh;!Y9^?_)Mbd^wz#;2LN0c+rYxc2y^*QZY-nr!OZmXAgt@GX5BZ z(tN9*dZXeS4#e%XCd*nHk?goI@h&qvVBG$_NVL7a_MzM&lkdO8655{AzxAv)TsV4? zKf8WF&7w-Iv|PJX>aC(3+TDBJ6{<~+$0gS3NKAaRS>YwZWpHm{;5?HR(!wd9)jC9O zYvR`ohcJ1_q$2Grnj^SddjEMWJ6250<5*ZcR^$R4yfBxurt_xr(%?wmkgNuvY2``u z`)1@xcpR#}KI9z^r!9ieLeUm-B`CX!NHZzQ!9K`UpsF;v>GbJzRBI&?Jq~qE#=EM; z&3M{I8py+vM$As!jysnN)p|l!t&X_)4RNz-zG{Bbs%rii9JTkjj9lf1V>z$Mzb(T6 zIVLNLlCAb^;X@ymenbA{?^4|!LI)j(=AV~gC%x}HZmAyX?cxi_#+F*2&u=ymt%TE= z$f%z5DxZ~oZTKrFdF5B|c;){?yw3Ok8n1tVsCxVG;%Og5)u&%o{lCZS|98Xx zm$3u?f8%xaeDf32$EjXUkepnSWYvwn-LI>=hcv1i|0aO{x$;i@PtT=_+#jDCGsCN2 z2L*FJbrYypFIL^7Cx(CAtac{o>&~HLZNki)5>Ak1<{c(LA3Am%1|Bu{uUQcn~N5ICYgZJaF74IGv4L z6^g+gbn|52G)rAPZR^5Ym}hthHT6Vib&$KAvt;T(>UAIQ7RJ_=;Rc*`vHTBd(Ny2w}A(aovX?dkBkt`Xx_g4FA+ z=tc)CPnQuZ=bUal7#`1y>dv|YjqqWvq)uZs-R-*qTWOB)q1br1pJ583r|*pp4)CUKFSvVZ;brQ70iiI3xDi;CIv3mWA{f{Kt+&3Yb)w!5&wc%kD6s?);T;LMFT$U>YScEJy+{`v*PfoQ0#ll}; z@{-@$14HKKmAHilctz{`z(hRd0o@+)hsiQXyDmB@2Wi(Ad!#>~yteD3kaoR}tY5jC zY2>wCuY1T^~zApUm1-grTTckzoDXw4fkc6gqMB-`aKa zyn%tFuP4#{i8q^Z{Uu9AM@i51|CO$j0xYil@|q`xm*Zz`c(TS(J@buCFv+(K43qi-ruJmFGr-uwfi3VPXBV?JZ0eW0l1#- zFjNd8O7nXr&N{e0K)e&aUy37j6uD3Q?AVN;i|e<8SH%@kSvSUWJYbx1P?03w^sZbF z4#mzTu(LAle<(X8MAvK&`Xz=)5NO~W-$+cKALu?b;6h!yRpEK~ZOy}QrxDPig7 zV6g-wJ)(~N7%E#FA^(?t&Lx1j(kC+!VFW$Cr*`ezN8UpVfRC&zum#C`_P5FQ-)%BK ztV5B<^B9ho9DH8HJa zT29FJg<(wZ*=-l+?`MA+gC40wK`o+nFPL?iUcYVOf6$&H%+p#UPst*8&^px)cSnKk zW}cTiv;0hBxH4y>7vwOltZYe1>Q?_NwYH|VU0xHNEloZ+Tk$WF8GDecZjj-}8D`)D zQRY#k$Y;sRHfp#Qpwi|D`%E3!jcAsEyS(}v$>B_GIy5i@cCAFDG z<2lk9T3|kp$Zxgr?=0V&wbj^mjt=$*jg8z|oWZmiE=m~8Di{oD5Z64)l{(tQ{W|}+ zJDY9ha^bRJtC`?=^DgB#m4ehqH92{i0ht2RDeFZ6dB(v;_h1J8g)f!XK-W`$4)g8$ z&mXzI8K{Hg#nf1~gkeRct_3kPg?a@_;+li=jD}66j2V(Fw(cK)L8d>7;(Qo(`z$vz z>CSQ5%BUxCAZjhTsS{?w#;Y0)Ya@(UzAfr(tceE++2IhYF?m@NL1@vKypZ|o`QAVQ zXY%#Hf9-kgHl49CI{*#Kkp>3SLBp>73(#Q^7%u-AJQ(~`5D+*5VRlHtUI2$;4-2bh zyv?j;k}wqr2RU@~aS#Oax4~L4h?eZVfod>_&AowdAT2r?BUqFG;_T7Kuapml?0{ei zfqXR>gyz6Nc2;LZlq6)D2)h5APiGZjv2=+-Muqouax{`ULN# zJr7#;1dJG2pNkltPCxBbDfRhhAN^FLKDAS~F~a(+^BXGL6%OO}wPW|Cd`xd_-l8ME zoZ#CQIIQmGZQsyS-h?Kz<-d7@cE3t;DYF;Q1LCi{UfcEey>!aDm{k|$+zA(1c^DH= zF)Gfw?XMt=plt)p93Q}fZuUJ%`p=e*kJoqE0x|0zt5VhBHFsCu-YKOYw=;w-hWU0q z+(%rh4dSGW{omI6MtXxB~8y&+xKWoLYd-cTZYS7>X<+4GIv3%2|iIG@%KYVu1El#`CRJ zzfj&Tz-#q2A85y1c+J(Hf02_x!gIvEIiv^Uit;R6YD)Y)N@(Am1!%}%9hiG_c4%QW znEOT~VeD;*5H?9JeXT!_djY6>Nss2nRML*W%PNUd>-qiwD#rhs*NSw^}&=gAuDJVOk3Fe0Nqp&GUnM?|@G z__Vb=%2;8&qWeTV>IQrI8EJp+Oz>>XVrkjia%)^jAFi&qeE7=m3IE0Kk5Z!iI+!j~ zfB*42DYPO24IUZ1qB51Ss|=g227>p4bcH3aQEUjmuK^H#r@mTb+USI& z?H6qK?cJ8p%oikI=U&Tp;jDo=1xL?O+5f$4ucG+xWxJd8R|N>aj}u?LFBandfiv8B z43#Ds{eB%|s*&4}g&IB^->_bk)W!5e#N%i~-yI!$y*N%s*PvwN-Nr9GATA>As~tpQLvI2^Ci{vGBE;S`CCw4QeKY8O3k4*tirv zFfokL%w#w=e$4a2mw!hrN#x*uXu~!ChK+Gy*1f!%$T3}sr(GRLX*OqC6p8M`u=>b0 zR6>0MRxMpqUEX4h4fK0F>qWQ82kU@cv$}!Fqum%b-7#QMv9u|LS&w*Sh_63=M>-A!Aq}V=N(KB#c?HAY&9umlRd`NH8q> zNQd%;1wILgo!?5E)dGaCY4#V|Jn4ShfCaE}Eo57^a?G@*o6=C=h{wiS)Ozs zAXA|sAiHAw#ZVlt^u)NjE{vB!BoRl1=s6#rBJVti67d%c(#qN`|Jk8*9mL znxi(58Y|vGBjux~t0+OM0y-=Z>%`a+VOh zo--J7_VG%uYkO2WsC@9RYwlCFkdoc765;GStt_nrf}$@*>1)a_@vO#5m;jQNc%s7x zP|M&7C=y40u;HW5z?*Q+LyGsDDZ}V6tKZARR1}L)4bYabw7rm09<1^@Rbh@bj*yC~ zV{tSfLq|W{HI8|tU*;VAbq;MAwU)@32kiKr=5@^#^E50Irm`W#BiYu_>geV-i`P$o zm*KqFDeYaA&qI0&mG3H>lD6{l0S@Edq9Htkcjk0)()s9!$jofaNM4#2Ui10~9gWzy z@TBzPX=@{t7N_T5^CiL5QZ{zN^p*b;-eVx}9%g|+!!pAq!RFeQ)=C}H3|y<6jS|+y#mAC~9-+2jHf3S?Tx%4S6_-6%KsWo~tY&}Vn*Xwj(@kuWSo*ve6%bcVzfB(G8!fES|C zQ(xtR^@Z^uYGXWF74pTmO*E;EC3n@?^rAq3dUSgyJj!UkK!6zT&vSmJn|T1 zb;FeRvFviOxuy{S)nvnbl}%M)qZfk|`BRswDCe2pcc{V81=a5;5>k{kiV zZ(9=uxhL*`y*_K^kVUkdhv|`DQO>vPYhVjc=nW)HP$OfkD-@%(05GBlLuB4nso@7QTBovyv2_}?gC*OiI%%0hWiD{BB=u$Lit!n@KmmkDWk+^k`| zu#(ss@4yPCGU>tonoYSDWCAOhA$nrlC;Qg_%@~Oyj%hjqWTJ?x)ozs?04c+@sS~L1 zjT#0#eHuVCJ>jo2RHh*fU)nRjjkrozPhTocgSBsTFs}IOqm7;mcl&g{9Jkq+a~AA- zOD`c@Hr81OIM)mWQRu;h$>JHy!iCb+V2aYYt>cE=!irna71Cg|cM`^|BINzZg+nS! zHo**5HEX);w1f_U688uM;(v#7)F*Nz%OpkAhl=J0OXOoR7+7N{IIKDfe6nEG3-$3~ z0(ITgsBQik&j|0u^7kR$YVEcRtX=EKRWM4S+`gq>H%&1>Zi31`?pGff~H zr0jsi>yR5IgOJyFz2K{7*4J9~uJvR=NW5<0R^${D9GS>NO%+3Zv{zCTqOO-tyR2e7 z;G71@<4)h8D$1|SwBryFbne38PB!-E(}y!n8uOLWlcexdxX(W`8#zq8@!e&zoIHkr zyJrXscO)Ypbv(ALrhKF%gOwvP)$vD~k*sD(zkNlLtuDit5KRY}a?^Z|N+fk0^_$wF zW0qJy9=D$-Iq~IZvRZG-+L?khLp7^p%7kspQOC66fe`nu-r8GyycyQZ%j%ih6Kg$~3L4**kwkH*C8~gL{lqa) zWU%H8i8?C!#ik)*YggE?D5g>vr5L5*Osa3+oCK+EFkvFd#*9*EbWms@ZX}ic5_t=m z|Axft*6#m_*A>YX7gNVx<8{(E8caVOv5`Wvp!PQ5vZfy}Mk6;=c`z1JNy0usy7N*d zv${)Ht5fQ!Y&OIXwTnWD4>%Roe%ju&VLM#YwmeV_HKE$B2cbO=QX@FMjBVD2oI{St zCrrp+ENpSLuAB4y+Lt9LV`_njB`Ko6G(`VLV`l*s)!Ha*8Yw|(5DBGIX;4Z5X{5WP z8>GWcBcLGNDIlFvLzgs2cS(0k!@mdg9M5;|cmK;Q)}CSFotK%#FwZ>ud8?)|gp?F> zRt>j4K8OIqHlAm*`x+}K8`N%#s3|Wc>+fzhO=sE1u1AST#*KahdHW<43zWA@-SGAb zC~x07!-19Y_@XqQ?eu#5Zo^0?F6$zxaflUcUO99_V zQR6JzbH{w`^UNuhC=gtgN^!{uVAV9|-S+b+=fRmwWrL7(o)Rj<;hGcGk;oI(jd2DX z)3Iem)GIq}67z*^sR_lp+rOVI(|J>!F31HO*2(04>?8f~d`B9BHnR%5Gb4B1>pOu+~b|*qrI1rhfhw+=XxJ46x(0#ZL3JULUzcT?i#twGdI7BMgq|$i91YB z%DJ22^ZDg)FWqYlacuCw8k@qF%0?_3*8#groy&$1JTSzQ%NCiwB&Opm6d)9kc|QW6 zi7)+`Fcxmu={L>TjPH13OHmk;q) zR;yE!L3?iYj~b1NuXumXAxlN5;w9m5==0o zed!&>(_wK^jY<3Zesqpr=zV;#Yg0S(Q6aqS0q**@(u_cIvY6bC^2!(DZWreC>!7QM z^m=9f5lT`3;DglSPfoF11IxKJGX^Y<)H8Y4e7iff#k?DZ1;Zf|-Di&gx0T-#`{4+_ zE96FEpK*TMmmF2QkU5{nZ@1h_eBDc8wI8_S%6&v79eHj^1mg9}?CR5S*RG0Qedqon z?}G-?K9|WfN5PYVrl%!6kR%@MZ`*)o3^yj8CB=2yXVzMEyeZxV)wIQ<%`;|4o<4k^ zTENb`YNfZ6Z)M-N_l$F9(Pq< z{bav<+B`)JY))&QzTr=a@(1HEF(0BiH{BEaZsIW2m+R6As{A#YbA1=*&etQ!&#t$n zpmCTxPm->!sTNj3JbBUh$A@KW+cgeI-yVw|_PSgXd}MQFqezd=1LH7J=j=~tqF+!Q zr4P0`)i8o_n2$SfjsOJr9~L`v9rl#PyHvDbyA?FVSByeF!~Q)UxdX^Ho;N2I#OK{pGNSfDU`qpANh2t9E0%KOA<0PUPcWd+JoI@h{{tm*v0k zdI|6yOv5~freW+-ftRfjp)0|kgFwFix#EVe+j42hf@v5+W-fTjf+HrkmENfk5y?VQ z{=*MytXB{auX}R-!s|uTis1~=b++48&Oa&xv+ol8YI3 zmJD}l&#JhRlSH9b$Ub~9c}oz2b84A7O&^*81bED@b8473JG0xm(pNae+}L!ES66&a z`NZw&*`XDF_^zN~GJo6X>BVVdHRd(OkLXFv>vXO70>LQZOQ>ddx2L&TAR=(|!9&pmxGq4TA z<(S0!4%dgjiCHl9i8Zd0+BX(lD6 zKgTRUru)64Kg*nYY1^LG%_=kXp2T2)7@Kha>CQ*R!q|VTeMt-JSrqGJbTA9! zdEVeYSGQT#=&s1)EXLF3{*$s2Gd1QBTI+{zy_{>EvC^gY&AlDOd5HI7!augXeB;ZZ z@WbVOheF(;K0qi+5PmPB>;C3`pu_1onK{Wt#CB~%KI6j|;VL}@%aI6Y4?kE`HH<`s zd>?t}`@+~HK$B&{0taS1I`YzmM;R9q>t5_n?ed)1S)xbo5taqk$+`{x+X1V+Fs1KJTUs=IB;s{{=!|5RFj!8 zHJ1=Pp!w#BmkiGi`s*wOXdqnof>%a)0D9&C@;8(RV@SwEa}AnYpLV%r5y7(-AkZsv zSw}W_R!LgxBs6$hSf|{*JLL(F;o}Q}aj^eVkITZ6=mDOsqm$s_X`z#Xgg(_ulC{VE z$>R@EUi?OshkEiHT;MHlH+ja8+$Lgvi}1j$2@fKAT%EbQ1h3{W{^8M=dw7oLmH*^z zOER_JvEQEY3!x~=ov^GIIRhHV>)oqGo>pjM&lJua#vhu7 zhJOA~CCf#;sM3ct|4*)d`Qx)xnoSb%vJGW|ncSKNwt>naToM=Dot3zROw78_w^C}n zRycQ0mLKer*ePp2m^NXg-th=wOLRa)cALKIwD$hNF6TU%1K>Ipf_aq>3W}(}dy$LX zm_il%y0j@1{+i5ieL0@xD9j$#Q55m2C97p=7GTG9a7^=yw)Jzj+UU{2>OU;@XsE?* ztne?3JsvxQo#B_o-sPh5r5JO&*fH6I42}=4!9NZL#OIc9C$iWLMv)*y|ANLh_C^1T zyZA4#{?GGo&dzeA-tCXKIVBsRe2op2*`>%xP2o=S?zgYlbs$qK4m;aEZ>N^W07Z7) z3gjEhoh(_TT@>kbQ-IIq(Z57?@!ujl{4qd-@Gx0X{!<@>2fX3%S7ga}?bPwUB%>kk z+Kyf)@)o?Qk5+ubq2cH{W?eg%S~SmNRgW*P{`CD^SK~Y8{yzC*^gHWfDD$7Z$2Ns& z9Z+c?9?Ak%9rOZcRASWOgP4_wk1G**w(wYvP%S;{^yuiw<8;lUa)_0}ExmFyIoN^m zuWV^?5KF?Sf|#B&4#|A+FZsKO^yShDio=X)*=OW-YE+pP9f3mV(+ZN!9PuO%n~Mg$ z2NFjNB&bVrCSOJ>N<^XY_Rx!5FlZu2XmC>2Yx|^oKfibU?8>8~VbKCj=P657B`ynh zq(=uytG*@)!4hx2DmmFk%TuXwC36WN^qzUXo#o)EDxKBzV2@FI)B1BH?a^a~hNap^ zwm<98ab~`RbJ=wDye1@U$uM{B5K`r+dm0)Ukj?&5kk&~oz~yOLVjc~(KVGbl3Qo`B zC+#O&{V0W8%ZkYD>3SOd0Zvi1gf4`%yDtgD5cl8Ts}_Hb--kN;xxF1t@xgHv7C?LD z$f@!yv+jeWtLkB8g&VoFYwq>eiqCwS<}B$gbDUlQ`$mQ}3wFhW3053;3RjV4O?g#5 zJPAc-?FoL9Ilf_X_~fjy?~1wi19#MqZ!rnOO}ZN8ULC4;cq3oa6~bMgze|%=*0Sa` zbQ>(DKhP4Ap6Epz?vZ9zP(BLwjo|~JuZv8$dJt54NF!Cv(CDdP?CRa1aZ(%iP)M@R zdcpYx)9%BXY->kpZV%zpqH3H5qK}8D+wWemGIlB84ufr|Ppt3qC*I(YhiOFa*ipD; zm_VkTl6z2t#_SS}b229V47&pL?tNa9CdL)<&(8D`wEdhIe36%_MDCR_4gtu`HiFfa z1``X|(k+B#K46xzG<48^+x%)r5`$tNk8-Zw{KVR_{yD-uDV!M8v7XXtY**ZjW-t^J z9vq9>w4EZN!m)-Z3Omd>%;;CR2d}KjK!`4B zO-88(ZpFZ@dZQ--FRTL~gv%?adn=fG)mF#q+=)REG3$Lq;<@|-QiQETy$dSouc*gR zI+TjApMoTvDclq6#QY$>CF#D^@S|!sy4dAx9C?a%rB#{P1^gK4w%tDVLrYY8esxdW?*ZGxCx;Xx^_W&NwfC zsf^0yRXgS6qL4XU;C#ynPZ2#ynY0ttPTdG>{5qxSqX(g8e%3GjoA3E(V0Jok6RW?M9Wf5~rGMDeFct$n?OgzoFPPfcM}YSG;$tq*Bc@vOxT#qWDtYz$PI9^EDp?>u|ro`e}Z{cq~FM zl93fQ7q2FAg1cM7$HYN3V1_%tD}nL2cta4}yN-h^eik($QEblK`X`5H>7aeXxcyrP zw6-65vrwg-VcVhh^{8R6-I2!MN_!N@)k}VH_1R?kMG_+=a2U>~{8^-$OC4hC9cCZd3!YJ{R;izgarUGe1>gNj&z`{&d zO^uWbz1phq)$&g>Fb`w@jr?u~+FH1@lYZy%JL}gGK`CXQsY$t&!$tQ8c?ewREXSUP zB&%n3_nk87h%vngtmH@4AdOW{a&VsVaT2gsGoJ?O`VO;8q+as3Z^=-)zOPkdCxWNE zCQHBX)K!elc|Pu1d}?R>+zl7_!)bTgL8<_i_DaqxiVJ&gSla7i{dKBsLBfDj%QmZE z93{8o%B$7L66TnWqgw6S>a??&68rdh-zQ5S&lHxVh|jfHu_q=&z{)}MNoW3VO8aCLy>~y|%%qvvYCiDs zU_^PQ20dzba^djX(Q`DP=@~>#@WmUpLS{aya!D=A-7c}i;e%{CfrM8vBTwe4USK{E z6_H#E7GR)9{ziygV&6Lbt~`j?iG$N=qn_HK$TMiJe`3fcw24;3v6VJc>>TBLLIx6c z@f*T^kSZv~0221nQfWfg--JEJ-#X??SGzo&Iezu)sQ&7A>2fnnR2MW4$JxD(!M940 z6z1G&mc$7P2Uj;N^3f+rV~-<*!z<-3b-lO5PhDNo(M|(pxUL^4+x%J^2yS z9!3u*=J_&GEcBHD12hlQMRb#gnaU=1s`v%c^Gc<0Zt^eyv=3vyZMf}ri7i(~l1=v_ z$1;dakz8>jG^c|5n5e=Tha{)H=PwJWU zDCC+}EP2nr3A3R;t1)BSq|6$+HUB4!68R9L=CZ&Xt`&0UEXMM*}=nzEQZu~pW=WXc;<)vBulkK$TEDT`| z^F)=Wg(0A3)hm@UBKqDi9!9OqYsAu%=mcl-)@aXflHbcLA@TTPfbUP@|Ao#9cseMi zy7eO-;n@~R5{pq0FN|-j_vD|(x*%w*kD$OrO2g1}8}YJvH070B+=HRh#)gT^LiY&! zner1>b_2nKhsi_yDj-}o>)1eNfR8$d%CZV6l{0lcl4{$on52>zZem^bf&aj&4b6&? zB#MHy@ri@9$zdZveNb_gwXF1CN;~kE(;nFiI_>|H z(*CHnb$6O?F!d$$KwFmjQW-@YM_j@C{>MYSF4tUpr2snXSs_qcH@puu*x}XW{YO6F zMA{n<`q_b89VF|LULa&Q7ce1`jeETqU2M0v=b(+Fa;m$ z5X24TrHdW-BIm#AA{7)I_e`ibKbaXeZZ<7t_2<+GiOL=gTkI+j41SlVwXj^xX}6Qu z>Qv|QY1a(o>w6h%`Tn~-PJ39Ol;9n^fY@hv&`{-=jEJfIW4W*?sDSxmk}ch1PZYT4 zlWcGZD5@)t2e%K;PQC{1_QSvJb{Mmgf6DEoAZs_bGBU9g_YLdCFPtg;udLjK3fVKZY3yAv|9QB+)U`JKnb#q6de_#I z|7gc(nisg(ujZ_}-jgG5aXM`#4AJ64+-AElh}Jx!c-sqfPm%VsZd|-!`M%lc@kzR* z<=|9xyYJ-}4ZGN(MCs+v{Z!ZM{WtlTn|cfmfb!v~&;l@>tnE%sP;i|Bg7<~08?W88 z8FK5jr)s>T1ikiSj6en2FerHM(?^LBB7bBt2=&^3z;Vu8l0DNdKZk;M%JJspHUG7y z>{kLdJ_@N&tNno|CDm8F3<58)mrlc!4Yoq&u{`5)eJe)Yg|YZvz@s5sudP0x50VjH z5oXXP`xfhB0y?*7BvWXD{J5>OcS5+dOmF_xhmibUbk-tT)?LR@=RlrQDr)979Ym_& zW>lQ7aLngE=t#)Mh^X!8DCRG#F2pn4?EDLO@A|egVKi<|DlwBs;&B8GUI`in^c^-M z>&|DeQqpCjKXb$Z67vppah}(1%YCuKpPu)UyPEAa*82YXhuluH(RTMmR+}AUPf8}6 za$&UgEiYP42Rx=haNJUpi?URS##wjOIn(_%MajtTyRWW#@OtI8M|^zjEW99D&o`n= zOkF!sEJWl>n$#iAtnH3mepo9gwgqKfkt-UpzuPguZ9L|jJ;rsmiQ1u_%#T_7>}uNW z!A$#MSM`eHbkpa@Y<=>B&Ih1%?lFMsvnbshg*#20l0-yt_q_5@~uP&gYYzpxXT zv3biEuqy)(oz>JY{QEg+i58Nt_3_lRgEl(c7&;+kL~x{usVg5Wy>=hDp;SWSF~)mT z4zHB!?_3+rtZl4z0|#rQHmX`xeN(o%9CesA$W|0XJ{7%#@>!9eE6hylLz=XHMxS@= zoE{WWOFeYC!gSc0l)dI|uGrq}*LEQBzdWd)Iou1Lsv7fV6h0-d&b6vwy*BB*Qhl@* zM$_R^5w&LJpk(KdhNnsf8z8@uR{8Dx{5+di{VFLll^&AO4nQoRJF6M`YaXBKA%A>; z-pL_nsU6<5Vn{?(%$6AQQXZ%Fq^h{&>KQ*aQ@v>TGkGGY)=upWW$sY1o!QmWT02ri zD{RCj*&Sv31_11X3tRd^nP`sc)ft0(h!+Su*|2S8BszqBl2g=MoXcRUSd zdHjeb3ZRTx!tL3|6jb3op`CX1R9ENnqbiOo?xIIIBpI7{Ca=yXB=3slkm^hB(3n-B z1f#Dk@-x0eQgK!3XY1YV)gHS!MmDtLU_Rf%h62l+mGeiVv0s~*L1 zK)L>Q9^~$|Aa^(X#of6q7H-=yz^`}=r`cBPJ3G-wF8qw&{~3=tEo*g~j2DB(WA^z) zPd7Is_Z7#5M^GzM(6v#}X!RgZl^}7wbls%58q(#=;%~ux46=5!iNEqO0U86L40{P_VG$Vb0Zb&fHscv?ar5C440$CCRqDVT$G}{E?aj)b zORZCm_#80?b@CE}xbhs@j~sEIOh1<2=~s}b!03s>ZKXge>=zyfl9D3}jy1k{OVx6} zo?39uru=r}wU5a934_@CJ-pZxr2AkoorMYQrj8yB23~kU$sC&n47dPbeZ9g48ShOB zDtP8MgB!X&_Y@ZXE%M(58J%sR-)6f89H_XzMFA!CXHMut9?&`r%C9;MLjfYXB(;vt zHaL`YLxZ~xc#~69GjlVCssSo=igxf%Q0#zDhiCf-_lGi_tJ(`6flBvmij&l56{tX zmkAG#`36tOq~TYKY0E*v zru-xMf`O7i9kd?vw&!vsh%v5jcKq@BN|oh9{HAiM$a41AXEn&X8e|?t`5h)_bHw8# z`c~B+n_y=X;Ol(1*MmM!<}EFf?1p9z7R-4Rj>9sGiGn^m25<5C<(^pN0vEaP9=Mt^)a>!9 z#$?7&rXE34H2!VR$1>>vaA3Qv6pGz8f8-j9MsQJS3&s0o! zHP!_p4)4<(o^hFa!w`KXA|x<7%g5L+ zUp2>4MGAtF!!bUjKREE-bRA-#0@33D9rZH0kL69sd1E}U6%{MqXRd>edTdNNKuM2! zTV60PcRg$tITq(si)Ku0&#}Z-RAN+J=77);_m|oc%GypxTy9a}osaP`0r$OLOAr&_6yz({~WTuJ^|6vd-4HIw?xgVLd5MTyaRa-C65%{inhe(a5UNjL>hR!2&x~YR zazExf2f!w?yADVB+iKqP%_akSf<)g+dBO}^?2}nXXnx(R`rd+6n@cxu05@&x6KY7> zt2O%4;e#Q?T7xHs#( zKhe6OGjRr)S*zN-Z>KVtic$X0R1D*=8QHtjva%Dk{RFoVI7}?B zABuuyZ&2|4t&*|aomW7#^qJH;@0*p>I?b~phk>=c#6#j-=GMq!hXKgr5$Uw&{9LIl zv^=pGqBvk1PtGn|tlwRTX`Bi_4O2hXrK zdHE;|1saNJO>pvT{Rq+HZ2(w6{VNBsc(%ykE zBs~HL9z8(zoUnm2-9amJEY&&8PUEm5=lUo!5d~wc?z&)(me9k91|oI*Q8*)`8);o^ zZqttNMp}=Op7bl-%EuQpW;N{6%yVgAMgwE(;3W->?z0fb)QUBLm(+0prekXTHEoJ5 z1+Ij~a2;8vvn=36Cm@UkX)QO|^`BUVAYaeBO~xqCCcj?PY=jZ&M#(VHl{OwqbUB>C zQEv13{*Bs4ZL~jKw%^|yB^CVTW@wL(RALB6oe!HB@~s9~mKER-6TyWGTEOx)&%`Hs zE_KY!`Fm>*B?FT?z7wFkZl+MiHpyluT!Eunfl>7u85kCc&qRIp=JWA0+pUuwBreg;j(urrUB4DBej)UX#>mXN@i ztD_ALOvpAARsRgsXR6m5*48k>`60^_&bOTYUNWc_AoZnDdk+G3qbIgcYbek|+KCts zK9_U8iY49a5$q81!P$Ff{fso0I_am=l%Jizk*awOQS>8_uHUPZc(c`8nbh6pOs#b$ z5T&#Rb=QLmu$9lpoy)H5jTviDv?KKU$B?fwtEXRA`SU@ZKcoV5cFy=MXH&MS)j5 zp=J2Vq!?fj+rq}sqhDYoLCJM*vGaiwlPs_ex7bF(howFlux0z~Ct*#dJ_Ob&-}=K2 zm5Tu$Oni+M)LxIewbyxMuF~Uoyv?EZdTdvX{X3Szm)_)626CpXMP}#BPOwSrb5{EoTJIA68?6_9uu1#?ghF#MeShU*UfkqjQlYt+soPu( zA*p(z^CgQ)la>ExV&&1r+gyzOuUt&WZ7xQN^q;wy53FD=CJ;aINzx}uXH+O!-%XeD zOrMt^g!s%$MDskBFcp}}z!OdY2Gt_>C#ZQIiw34Ye)Tc^G1mj4h?cbU85-Wzh$k@l ziQ8!dUWP$MiBpD)w7BI#(=ClKy)Som%L=(Ytu9Z8G_TO+t4ZgBq$nh$?>v4GK!=_5%AngE zB){GY9uxPP}|2JahFf~}b3->n$qKUy)5Zdx%7WTA-v*@_wB zBK?oqWzlmsXjc75=>Z@6_K4FyMs5e*WsZ&*ByjFtmV-nvm6R9tohtFWbAw8!AT`+P~9peqSJ0>H7qe zEPV2hckY26)D44L^8xi)=4f*!{Vngh=CeD)yV>NFCZX;+FVtN($Ar4;RA?}f%wV(~ z2UOR2q3XIK04I>~hr1q*=+POCAV7%@ zDAW#&C3bU?I7$f+lLT(b5>4M-y7)lr$rbNs^({h#e{*tZ2kNfZDm(okfx7Dyf4S>l z1;>u-WpY0D?R<0t02+*DFs<%rH9pzvpy+=5gBS z&sUx1iNwt*8Qu@Ix~W2rxk7`%L-LBLbeg_(vTC_t^W`S3Zs!Fps|y%q`qw9eWpx4` zd9(apg+T{u&uJ7e5)&r|?ZsfM%Hr}w@NF7qzXUL7UPBM!CN%v9UiW?P52w5YTQMXF z$4Z{(H`;pmFKwOYt6_SU%9VO;?GqVeDewSd^%0*Da{)7=?{T4NC79A?O}c25aXBcI zaWYW6uD(TCoRmZDZoggk93j+0*I2GJjH<^dX)GN#<5dXJQEtEAupwaPU{(2$LC#1f zjF}gO`%H!J+fntX<4)qKad}PXZkdX^ObuJ2B7Pl74`~|DqwB`_D#sA!hvwWPB#H66 zZn`u_CQaZCRR(`i8-Zma8JU>n`h2m8OK z*FS(H-N8PNumB|K!yrj#k8bRPCI0_u>*{agf3?>IOm;-o*OsNh_Bun?{$fH$#*gmU zj+t0wJzf96#~QEV9=mqVUV8XEW}5y^=K1MxCp*9bLQG`*Cq0K|VZI*7oynYhfztEh z&Qsvzpku9O>H$XZ^;;-C-#6+VOLUk$pYi6k&4ki(T_`>O=od_Sc?VPT)ob70b^Sj4 zjv!6f@KoNnwPNG+1@zL@?yiRQdw#vf?s+E=Wo$=t<*IGSkFVz=@mw4HZ<$X=9x_W4 zu~{#>el{@*KkCIyQv4*!;crRxGddJtMZep7QH9NWwa}4-j!%gB)0n8s`FZVWS8R6) zq2NaH17MkFu;jSPDP?dwk@p=Dcl;p3U90UQ3WrYqrs~zOlT?}U7xmT6D{CJkS67q@K#m&@;1 zDP6AI&e%^`ygxh6w3BGLKI$`CMyAxdBnZKSE^6A7q*dqir1pCK!c_fR3Cz>(Z-m6w!Vc$USvtm>|A#D$_#auA zr}n@=MpEB@c42VRHHb5&hBcFKvM}-~?s`G>kqPo-zw+y!-{k&PhDmOcuIsoh!z>iR zA?7#a@{xNt!m4?~J$(U3{Di4KjFvPZb>Ra%d5Of|WtbngWtj6_K|sZ+Loy(M79Q;X zQE$|c`pOhm57ABwJ67s|>+HI+^{vso&US2MtuWFWd&4umn)#(Wtbb*uD*kkPvG@*@ zpnJKDf&_iPJNCR68%od{cHdw3;`hoe-x745!si``Q{mO7a82y$7cUpU<%_HbgNih%Y*xajJVWl<@79 zD#g8w8b39&Pb)n*P!vy9yQjzq=T}xKpcT=5uQJW6N_sxw-gh63SoAmQ;t~eEC zkV&?gu&nQHgi@Ea)^odur#`tlVzw-fgjB|Mx25H&=aTO>K7{;S9l?BuKnhjYNpRHM z0sxYMVJ5HZD#tUrX9pluP$!bRK!@av(8k>z#dNu9a>xI>^$81aWBeIYd@%_4d zgR}T#+?jbVVZ2uYX+u@*g?rocfbM#C)Xw0qon0Y$ISNmBE+AkB&UjHrwmkH!yA*0t zd}?ls0=piTVpQ41%D1kwgA2*Zi-%JC3MNopJ40#w>T8 zlO&~c9lUxxUJTfTk=hdc?v3X+hWKSh?J8W8aJ-P3RoGB{9G|!H^XQ;wwJd|LTaMI`DX7I3oR`^~H2Vl@f z4u@6L9cv0mh+i1y*N$l?_P?K&d8?4|9>P%W>T{I&X*(j_?_xr)ZmX;}!!UYxf4tNP z(XihT*IGJOkCGw%{dlL!b`DXY^C`85Yib88 zzb>duIcro9MW$OMwo{UH$c4%)gaHGvdyOe$PvY!@?@K&koK6XpW~ZQ6qpm+YXbqm6 z+KIF(O(kggsxKtfT!f=&`L*9i!R)Kp`<$4#j9k1(gYZ@1kG)-22N!vEwJT2_nlJYR z{Ll)GR{Nm=3-(zSF$`4nz2RHAWV==b;6Pbj#NdWt&pq{oX9ejs7;FJRd~I(%hxg#s z+^_KZY1wV^~fZ}y@^eMyOJ76LHrV1aUjrJf0EW^bi zK~a=B;b4~dc0{r{&6FCFMFhMyWytXp9xhn{c{;Sco@RO>^yQhq9GQk8N~Kud^D1yj z(`5~Ot@}=5bCjOZkK^YkxdoWTE@U<_D2DtV>`nq@Mvv`Jap%CDqUyvd4k8{beeiAi zM%D&-@+xUb+x!Sk<-&L5>Yx>`hk0i7@#adbbi??nd4T8U7T5ajIlBwQnthcX|K!fdnPx>&3 zPzkVa8C2r^q4=>SeClbvn@%!!xppTrz*%}Z?%J35@``7RVzhPC*`Ae9ft=y=xjoKDp?i1Tk4L&eDCeW zx)H#iEmC~~7bkU#LRowZS@cfKDW^#GYBgb|ZKr;X4qj<~^lx9?-^;C>jI@k!_X!MN zH^MIL$s)K)Dl05_-MP1rxzF%!1CH1&fFVu<^FV}#UW9E zS+wY~KcuqfD-ot*>#m3?QNUUEBPf-L?B(vfPHXh;N_I680&a$nN4p@yF$ET8r~zz+ z2ZXu;W{v2!{=!Vw$o$>39<0CYqS^gfe>wbJe*psYe%D{7{txw+%as1wf7M^i5x$2R z+{D+CYjADG`xuPKh#)eJcF53>X-ZS}_WE zlN(hqOO6SGb$3n8QkZDR;P$l*TUn=Q=^ta1qtyoKSkc9+l$ZvmC!NAdOqnBChz4_% zkJdW^9QM-^xS{KsrWqUF#Mk40#n&mm;aUb7scjTQhr#uIU;^XoT*bL9?n^gdT{Sh3 zWLA%&^?V!r|MN>rTYFh_@q&7;qZ{u!$u}2w5omm!0LbKd=0L#PbI+)D?nCf3<79JD z6#+fki=Hs}QZ1RL(bZG_>iRKxOYJ~9a9z`fKNm{$Z`L*aAXjx%yHkzAt66<@`Tii| zjluG?7vi?_>97tLj7+;6J5JKbYJT$=S2{gXm71HUW93yl6zB4ES+{wpbc-gV; zd{x>f{%z+yhHqWB@pZbBbNgWysTZNR5{h<-nGe*uEB1p|#cI}M z8Q`fsaN7vB(q&tvKXC&jSPowA6Lrk%pJvUNu7vstytPpsLn*@EHv@HbDiEQo-G*P5 z$&ed$s9)myB+3>hdSt*=1X9z8@{vV0NYgN(f&RM?xYid+2Uu#?LURzJ1MBM#7NM^C zs@ILHt{{!v*s4u^5NW3;+NczeY&!yo%H*Rm?%rxD!_!= zxt{dmtxo@Yaf=yOwlwh_maNRR7E~9}-5|O_zlyn>pXtZ{jKBC6ISoit@jj?c6$tl^ zF_!*o8B_9jC{}L=Wp&%9&|}8Q;~v}t>aiH>p?#s!M1SM-3lOJ=fzkCEJRr|c0j#cb zx5I)wz5f?a{{r%Kzc-vjSf(BzJogNTGW9uXC{r(iGIb<|QXhk;U}vBEYiij#|0Vo_ z{&)Cgk=b$mosB3Me!=?{eqp!`zkuBr;3oW%&WwrlukZ`jukefMZm!Z?s9fN4xrjTJ z=``ck96&-l*k;y0M-e5;uXW63H?#?^@H(_N||A>EcUrWEIKP1`9&P zKXPDfVZ~)<^YrU$rpD>2<)j+-INaIbxhMo`3MGr#hFP+O7>5V2PJ150gRuOGo}Fl; zwgGaMl(1|(T-oRQVD5!OmN&^`Vowb`>hP0HmRDS0%RTj{CEf=<#UYLg>YMyatxY*f zFB1clq_2P^{Wkvsl63vQNV@6at424f(<1J8hvH2^8&zw7gNwHwkBc|5VSH{=3eJeS z%cFE-dGon>P>?Tt3HUj6W&Ej#1u^%)h`Wsew_GW58sUIH3*+IdFTUWSMHi3V_i6}V z%q)E%Ye|xpTh$cpMCn0(!%r z->&p{YvTuX>T65nm~Rq&2#&FEI9zieS^EQta7vQ||El zwk~I&J^`e>2_V@-Q-~I^2-IF0+3scN?Pm)<TX+R(sRUCeD+b-LMPjzCwkHC zVc1YdJtO^9x~*ZkK-#u`;FO8Pkh;;2lkLm(-z2^5Z<0RNoXx6!>7y_mqL2ZSbl^8i zzv#=nS;Eu+T*8#~*<6R^dp~w;j5nAL!fcXUM0nqtEM4CF!P<7QQBtLEVEAo?*xbW_ z$Fw5Gs1C@aED~>WjDJRpU@Zlw!rk3}XZMLf=F@t)}?w`+De`RS`DVkq(RgT9Sf=$0A47EAV|nF2E+(CWHz`aO=lOyl@j z{YRYDg6%otxYK#Hp|$%mwq=jXGO<3c=j4q}zuJIYgrg^ER^pd2$xjcw7dx16dZ%PM ziD2mLW6Xh)qDXISfuH3mV^hy3+<-l2Qn;&7^AD0P$sR^$;TGocC9xU%8+ti%3X3gZ z4JGAKVCCgcQXYl^k0eVlT;2gLhbjS=qUQ@MJ8*Z155_bSMz#%6c8?z<=?9Pp zHzXZ=(vuxh$$}(3_Fp8O-V>DrWA+0rhW2KBiz_aXLgy^~v!58G9S)4C-E{z8%a&SE zvE~5Trt2*A@VAv?ktEItzeeKcbJOZS%S$zf=Pzux7EbLywqPp`*zbeUb>wevR<0JN zq0x17FuI<2uIgXR$)K=msc1Y9>XJjJz|Dr6BWNH59;mPts1yw0=~%hXE)^6r8KNe4rQq77zr!#fVJA3S;x;$nGKZ?}gc+$Xqfx{U zV=BT_`i8*#3-murF#o~^=3jttLsl8{Ueq^;`!&ODjs+sbO7Z#QHS>l=uM(e&)g3-q z+-=)`Qcz!8cc9ZJTDtTRA-Q#ZXH0ZZ)qcLZ|KdsB!sNC6MHlnuxi^>FcWZZ|kG0*c z%tco!F?wrw&aJ{>5JgC9t4M3U@4BkvjoWpB_4NX1ef?Ti0u~Mj1}B>35EeID5*_Yt zMd1M~CJ6uwM+$Shx~W(3KT$h5%wrI?L%*=VZ{Gu0m^W6oZ*@&<8O=EUOQIbWh75Xn z7+4qr7{Nf@qokvL*xy?=V%D3}&^tm3g9Bdb4h(lWfFWjXY7ZZyL052maG<}w{yFC^RJgzA%*n!NYozyYcmK~Z z;oaXICW2%B-cBu=-<%cTiLg)N@{NLL@=lsw1 zJ^%yr&pE?V{4xH2Yw7dk1)YXK}*(LvW+~3^~>>@BK}F|8k*o zOO=KD*WM?9t%0t&!rwcP{5c|pr`uUFIO6Xu)fcOq(|^wL-#e-N9uYdrng3zLe-5a{ z{NEl-a}~G`(E0uz{rC3I`TqMO!QZ1p=i6We7kzIYmhgXnEE$aKs#3sles5!)jc!i= zIm>^2fcTHc650569OZvKXa3vV CheckForUpdate(MetroDialogService dialogService) { - Logger.Info("Checking for updates - Current version: 1.2.2.0"); + Logger.Info("Checking for updates - Current version: 1.2.3.0"); if (!General.Default.CheckForUpdates) return null; diff --git a/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs b/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs index 69ff51984..94f599d50 100644 --- a/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs +++ b/Artemis/Artemis/ViewModels/Profiles/ProfileEditorViewModel.cs @@ -518,38 +518,30 @@ namespace Artemis.ViewModels.Profiles { if (SelectedProfile == null) return; - - var oldName = SelectedProfile.Name; - SelectedProfile.Name = await DialogService - .ShowInputDialog("Rename profile", "Please enter a unique new profile name"); + + var name = await DialogService.ShowInputDialog("Rename profile", "Please enter a unique new profile name"); // Null when the user cancelled - if (string.IsNullOrEmpty(SelectedProfile.Name) || SelectedProfile.Name.Length < 2) - { - SelectedProfile.Name = oldName; + if (string.IsNullOrEmpty(name) || name.Length < 2) return; - } // Verify the name - while (ProfileProvider.GetAll().Contains(SelectedProfile)) + while (ProfileProvider.GetAll().Any(p => p.Name == name && p.GameName == SelectedProfile.GameName && + p.KeyboardSlug == SelectedProfile.KeyboardSlug)) { - SelectedProfile.Name = await DialogService. - ShowInputDialog("Name already in use", "Please enter a unique new profile name"); + name = await DialogService.ShowInputDialog("Name already in use", "Please enter a unique new profile name"); // Null when the user cancelled - if (string.IsNullOrEmpty(SelectedProfile.Name) || SelectedProfile.Name.Length < 2) - { - SelectedProfile.Name = oldName; + if (string.IsNullOrEmpty(name) || name.Length < 2) return; - } } - var newName = SelectedProfile.Name; - SelectedProfile.Name = oldName; - ProfileProvider.RenameProfile(SelectedProfile, newName); - + var profile = SelectedProfile; + SelectedProfile = null; + ProfileProvider.RenameProfile(profile, name); + + LastProfile = name; LoadProfiles(); - SelectedProfile = Profiles.FirstOrDefault(p => p.Name == newName); } public async void DuplicateProfile() diff --git a/Artemis/Artemis/Views/Flyouts/FlyoutSettingsView.xaml b/Artemis/Artemis/Views/Flyouts/FlyoutSettingsView.xaml index c49fedda6..9d98bfff7 100644 --- a/Artemis/Artemis/Views/Flyouts/FlyoutSettingsView.xaml +++ b/Artemis/Artemis/Views/Flyouts/FlyoutSettingsView.xaml @@ -113,7 +113,7 @@ -