From 1b2ce4e212805237745cd17bcc3f8c8431147c22 Mon Sep 17 00:00:00 2001 From: adelikat Date: Mon, 5 Aug 2013 00:26:19 +0000 Subject: [PATCH] Lua Console - add a Registered functions dialog that shows registered lua functions registered functions (currently only supports frame and savestate events --- .../BizHawk.MultiClient.csproj | 9 + .../BizHawk.MultiClient_v4.5.csproj | 7 + BizHawk.MultiClient/LuaImplementation.cs | 224 ++++---- .../tools/LuaConsole.Designer.cs | 39 +- BizHawk.MultiClient/tools/LuaConsole.cs | 20 +- BizHawk.MultiClient/tools/LuaConsole.resx | 23 +- .../tools/LuaFunctionList.Designer.cs | 13 +- .../LuaRegisteredFunctionsList.Designer.cs | 111 ++++ .../tools/LuaRegisteredFunctionsList.cs | 43 ++ .../tools/LuaRegisteredFunctionsList.resx | 518 ++++++++++++++++++ 10 files changed, 863 insertions(+), 144 deletions(-) create mode 100644 BizHawk.MultiClient/tools/LuaRegisteredFunctionsList.Designer.cs create mode 100644 BizHawk.MultiClient/tools/LuaRegisteredFunctionsList.cs create mode 100644 BizHawk.MultiClient/tools/LuaRegisteredFunctionsList.resx diff --git a/BizHawk.MultiClient/BizHawk.MultiClient.csproj b/BizHawk.MultiClient/BizHawk.MultiClient.csproj index 9af86bcdb2..da38c8e325 100644 --- a/BizHawk.MultiClient/BizHawk.MultiClient.csproj +++ b/BizHawk.MultiClient/BizHawk.MultiClient.csproj @@ -492,6 +492,12 @@ Component + + Form + + + LuaRegisteredFunctionsList.cs + Component @@ -708,6 +714,9 @@ LuaFunctionList.cs + + LuaRegisteredFunctionsList.cs + LuaWinform.cs diff --git a/BizHawk.MultiClient/BizHawk.MultiClient_v4.5.csproj b/BizHawk.MultiClient/BizHawk.MultiClient_v4.5.csproj index b1b2a098c7..67f1de0f23 100644 --- a/BizHawk.MultiClient/BizHawk.MultiClient_v4.5.csproj +++ b/BizHawk.MultiClient/BizHawk.MultiClient_v4.5.csproj @@ -494,6 +494,10 @@ Component + + + LuaRegisteredFunctionsList.cs + Component @@ -708,6 +712,9 @@ LuaFunctionList.cs + + LuaRegisteredFunctionsList.cs + LuaWinform.cs diff --git a/BizHawk.MultiClient/LuaImplementation.cs b/BizHawk.MultiClient/LuaImplementation.cs index 41c6e0acef..837290e9a9 100644 --- a/BizHawk.MultiClient/LuaImplementation.cs +++ b/BizHawk.MultiClient/LuaImplementation.cs @@ -14,34 +14,6 @@ using System.Text; namespace BizHawk.MultiClient { - public class NamedLuaFunction - { - private LuaFunction _function; - private string _name; - - public Guid GUID { get; private set; } - - public NamedLuaFunction(LuaFunction function, string name = null) - { - _function = function; - _name = name ?? "Anonymous Function"; - GUID = Guid.NewGuid(); - } - - public void Call(string name = null) - { - _function.Call(name); - } - - public string Name - { - get - { - return _name; - } - } - } - public class LuaImplementation { public LuaDocumentation docs = new LuaDocumentation(); @@ -53,20 +25,26 @@ namespace BizHawk.MultiClient private readonly LuaConsole Caller; private int CurrentMemoryDomain; //Main memory by default private Lua currThread; - private List on_savestate_save_events = new List(); - private List on_savestate_load_events = new List(); - private List on_framestart_events = new List(); - private List on_frameend_events = new List(); + + //private List on_savestate_save_events = new List(); + //private List on_savestate_load_events = new List(); + //private List on_framestart_events = new List(); + //private List on_frameend_events = new List(); + private LuaFunctionCollection lua_functions = new LuaFunctionCollection(); + private readonly Dictionary SolidBrushes = new Dictionary(); private readonly Dictionary Pens = new Dictionary(); + public List RegisteredFunctions { get { return lua_functions.Functions; } } + public void SavestateRegisterSave(string name) { - if (on_savestate_save_events.Any()) + List lfs = lua_functions.Where(x => x.Event == "OnSavestateSave").ToList(); + if (lfs.Any()) { try { - foreach (NamedLuaFunction lf in on_savestate_save_events) + foreach (NamedLuaFunction lf in lfs) { lf.Call(name); } @@ -82,11 +60,12 @@ namespace BizHawk.MultiClient public void SavestateRegisterLoad(string name) { - if (on_savestate_load_events.Any()) + List lfs = lua_functions.Where(x => x.Event == "OnSavestateLoad").ToList(); + if (lfs.Any()) { try { - foreach (NamedLuaFunction lf in on_savestate_load_events) + foreach (NamedLuaFunction lf in lfs) { lf.Call(name); } @@ -102,11 +81,12 @@ namespace BizHawk.MultiClient public void FrameRegisterBefore() { - if (on_framestart_events != null) + List lfs = lua_functions.Where(x => x.Event == "OnFrameStart").ToList(); + if (lfs.Any()) { try { - foreach (NamedLuaFunction lf in on_framestart_events) + foreach (NamedLuaFunction lf in lfs) { lf.Call(); } @@ -122,11 +102,12 @@ namespace BizHawk.MultiClient public void FrameRegisterAfter() { - if (on_frameend_events != null) + List lfs = lua_functions.Where(x => x.Event == "OnFrameEnd").ToList(); + if (lfs.Any()) { try { - foreach (NamedLuaFunction lf in on_frameend_events) + foreach (NamedLuaFunction lf in lfs) { lf.Call(); } @@ -2069,15 +2050,15 @@ namespace BizHawk.MultiClient public string savestate_registersave(LuaFunction luaf, object name) { - NamedLuaFunction nlf = new NamedLuaFunction(luaf, name != null ? name.ToString() : null); - on_savestate_save_events.Add(nlf); + NamedLuaFunction nlf = new NamedLuaFunction(luaf, "OnSavestateSave", name != null ? name.ToString() : null); + lua_functions.Add(nlf); return nlf.GUID.ToString(); } public string savestate_registerload(LuaFunction luaf, object name) { - NamedLuaFunction nlf = new NamedLuaFunction(luaf, name != null ? name.ToString() : null); - on_savestate_load_events.Add(nlf); + NamedLuaFunction nlf = new NamedLuaFunction(luaf, "OnSavestateLoad", name != null ? name.ToString() : null); + lua_functions.Add(nlf); return nlf.GUID.ToString(); } @@ -3162,15 +3143,15 @@ namespace BizHawk.MultiClient public string event_onframestart(LuaFunction luaf, object name = null) { - NamedLuaFunction nlf = new NamedLuaFunction(luaf, name != null ? name.ToString() : null); - on_framestart_events.Add(nlf); + NamedLuaFunction nlf = new NamedLuaFunction(luaf, "OnFrameStart", name != null ? name.ToString() : null); + lua_functions.Add(nlf); return nlf.GUID.ToString(); } public string event_onframeend(LuaFunction luaf, string name = null) { - NamedLuaFunction nlf = new NamedLuaFunction(luaf, name != null ? name.ToString() : null); - on_frameend_events.Add(nlf); + NamedLuaFunction nlf = new NamedLuaFunction(luaf, "OnFrameEnd", name != null ? name.ToString() : null); + lua_functions.Add(nlf); return nlf.GUID.ToString(); } @@ -3256,38 +3237,11 @@ namespace BizHawk.MultiClient public bool event_unregisterbyid(object guid) { //Iterating every possible event type is not very scalable - foreach (NamedLuaFunction nlf in on_framestart_events) + foreach (NamedLuaFunction nlf in lua_functions) { if (nlf.GUID.ToString() == guid.ToString()) { - on_framestart_events.Remove(nlf); - return true; - } - } - - foreach (NamedLuaFunction nlf in on_frameend_events) - { - if (nlf.GUID.ToString() == guid.ToString()) - { - on_frameend_events.Remove(nlf); - return true; - } - } - - foreach (NamedLuaFunction nlf in on_savestate_save_events) - { - if (nlf.GUID.ToString() == guid.ToString()) - { - on_savestate_save_events.Remove(nlf); - return true; - } - } - - foreach (NamedLuaFunction nlf in on_savestate_load_events) - { - if (nlf.GUID.ToString() == guid.ToString()) - { - on_savestate_load_events.Remove(nlf); + lua_functions.Remove(nlf); return true; } } @@ -3298,39 +3252,11 @@ namespace BizHawk.MultiClient public bool event_unregisterbyname(object name) { //Horribly redundant to the function above! - //Iterating every possible event type is not very scalable - foreach (NamedLuaFunction nlf in on_framestart_events) + foreach (NamedLuaFunction nlf in lua_functions) { if (nlf.Name == name.ToString()) { - on_framestart_events.Remove(nlf); - return true; - } - } - - foreach (NamedLuaFunction nlf in on_frameend_events) - { - if (nlf.Name == name.ToString()) - { - on_frameend_events.Remove(nlf); - return true; - } - } - - foreach (NamedLuaFunction nlf in on_savestate_save_events) - { - if (nlf.Name == name.ToString()) - { - on_savestate_save_events.Remove(nlf); - return true; - } - } - - foreach (NamedLuaFunction nlf in on_savestate_load_events) - { - if (nlf.Name == name.ToString()) - { - on_savestate_load_events.Remove(nlf); + lua_functions.Remove(nlf); return true; } } @@ -3338,4 +3264,88 @@ namespace BizHawk.MultiClient return false; } } + + public class NamedLuaFunction + { + private LuaFunction _function; + private string _name; + private string _event; + + public Guid GUID { get; private set; } + + public NamedLuaFunction(LuaFunction function, string theevent, string name = null) + { + _function = function; + _name = name ?? "Anonymous Function"; + _event = theevent; + GUID = Guid.NewGuid(); + } + + public void Call(string name = null) + { + _function.Call(name); + } + + public string Name + { + get + { + return _name; + } + } + + public string Event + { + get + { + return _event; + } + } + } + + public class LuaFunctionCollection : IEnumerable + { + public List Functions { get; private set; } + + public LuaFunctionCollection() + { + Functions = new List(); + } + + public void Add(NamedLuaFunction nlf) + { + Functions.Add(nlf); + } + + public void Remove(NamedLuaFunction nlf) + { + Functions.Remove(nlf); + } + + public IEnumerator GetEnumerator() + { + return Functions.GetEnumerator(); + } + + System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() + { + return GetEnumerator(); + } + + public NamedLuaFunction this[int index] + { + get + { + return Functions[index]; + } + } + + public NamedLuaFunction this[string guid] + { + get + { + return Functions.FirstOrDefault(x => x.GUID.ToString() == guid) ?? null; + } + } + } } diff --git a/BizHawk.MultiClient/tools/LuaConsole.Designer.cs b/BizHawk.MultiClient/tools/LuaConsole.Designer.cs index 31ec45ba6f..cd4df06191 100644 --- a/BizHawk.MultiClient/tools/LuaConsole.Designer.cs +++ b/BizHawk.MultiClient/tools/LuaConsole.Designer.cs @@ -85,6 +85,7 @@ this.groupBox1 = new System.Windows.Forms.GroupBox(); this.NumberOfScripts = new System.Windows.Forms.Label(); this.OutputMessages = new System.Windows.Forms.Label(); + this.showRegisteredFunctionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStrip1 = new ToolStripEx(); this.newStripButton1 = new System.Windows.Forms.ToolStripButton(); this.openToolStripButton = new System.Windows.Forms.ToolStripButton(); @@ -331,7 +332,8 @@ this.moveDownToolStripMenuItem, this.selectAllToolStripMenuItem, this.toolStripSeparator6, - this.turnOffAllScriptsToolStripMenuItem}); + this.turnOffAllScriptsToolStripMenuItem, + this.showRegisteredFunctionsToolStripMenuItem}); this.scriptToolStripMenuItem.Name = "scriptToolStripMenuItem"; this.scriptToolStripMenuItem.Size = new System.Drawing.Size(49, 20); this.scriptToolStripMenuItem.Text = "&Script"; @@ -342,7 +344,7 @@ this.newScriptToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.NewFile; this.newScriptToolStripMenuItem.Name = "newScriptToolStripMenuItem"; this.newScriptToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); - this.newScriptToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.newScriptToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.newScriptToolStripMenuItem.Text = "New Script"; this.newScriptToolStripMenuItem.Click += new System.EventHandler(this.newScriptToolStripMenuItem_Click); // @@ -351,7 +353,7 @@ this.openToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.OpenFile; this.openToolStripMenuItem.Name = "openToolStripMenuItem"; this.openToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.O))); - this.openToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.openToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.openToolStripMenuItem.Text = "&Open Script..."; this.openToolStripMenuItem.Click += new System.EventHandler(this.openToolStripMenuItem_Click_1); // @@ -360,7 +362,7 @@ this.toggleToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Refresh1; this.toggleToolStripMenuItem.Name = "toggleToolStripMenuItem"; this.toggleToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.T))); - this.toggleToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.toggleToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.toggleToolStripMenuItem.Text = "&Toggle"; this.toggleToolStripMenuItem.Click += new System.EventHandler(this.toggleToolStripMenuItem_Click); // @@ -368,7 +370,7 @@ // this.pauseResumeToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Pause; this.pauseResumeToolStripMenuItem.Name = "pauseResumeToolStripMenuItem"; - this.pauseResumeToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.pauseResumeToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.pauseResumeToolStripMenuItem.Text = "Pause or Resume"; this.pauseResumeToolStripMenuItem.Click += new System.EventHandler(this.pauseResumeToolStripMenuItem_Click); // @@ -377,7 +379,7 @@ this.editToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.CutHS; this.editToolStripMenuItem.Name = "editToolStripMenuItem"; this.editToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.E))); - this.editToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.editToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.editToolStripMenuItem.Text = "&Edit Script"; this.editToolStripMenuItem.Click += new System.EventHandler(this.editToolStripMenuItem_Click); // @@ -386,7 +388,7 @@ this.removeScriptToolStripMenuItem1.Image = global::BizHawk.MultiClient.Properties.Resources.Delete; this.removeScriptToolStripMenuItem1.Name = "removeScriptToolStripMenuItem1"; this.removeScriptToolStripMenuItem1.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.R))); - this.removeScriptToolStripMenuItem1.Size = new System.Drawing.Size(193, 22); + this.removeScriptToolStripMenuItem1.Size = new System.Drawing.Size(245, 22); this.removeScriptToolStripMenuItem1.Text = "&Remove Script"; this.removeScriptToolStripMenuItem1.Click += new System.EventHandler(this.removeScriptToolStripMenuItem_Click); // @@ -395,21 +397,21 @@ this.insertSeparatorToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.InsertSeparator; this.insertSeparatorToolStripMenuItem.Name = "insertSeparatorToolStripMenuItem"; this.insertSeparatorToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.I))); - this.insertSeparatorToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.insertSeparatorToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.insertSeparatorToolStripMenuItem.Text = "Insert Separator"; this.insertSeparatorToolStripMenuItem.Click += new System.EventHandler(this.insertSeperatorToolStripMenuItem_Click); // // toolStripSeparator7 // this.toolStripSeparator7.Name = "toolStripSeparator7"; - this.toolStripSeparator7.Size = new System.Drawing.Size(190, 6); + this.toolStripSeparator7.Size = new System.Drawing.Size(242, 6); // // moveUpToolStripMenuItem // this.moveUpToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.MoveUp; this.moveUpToolStripMenuItem.Name = "moveUpToolStripMenuItem"; this.moveUpToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.U))); - this.moveUpToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.moveUpToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.moveUpToolStripMenuItem.Text = "Move &Up"; this.moveUpToolStripMenuItem.Click += new System.EventHandler(this.moveUpToolStripMenuItem_Click_1); // @@ -418,7 +420,7 @@ this.moveDownToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.MoveDown; this.moveDownToolStripMenuItem.Name = "moveDownToolStripMenuItem"; this.moveDownToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.D))); - this.moveDownToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.moveDownToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.moveDownToolStripMenuItem.Text = "Move &Down"; this.moveDownToolStripMenuItem.Click += new System.EventHandler(this.moveDownToolStripMenuItem_Click_1); // @@ -426,20 +428,20 @@ // this.selectAllToolStripMenuItem.Name = "selectAllToolStripMenuItem"; this.selectAllToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.A))); - this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.selectAllToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.selectAllToolStripMenuItem.Text = "Select &All"; this.selectAllToolStripMenuItem.Click += new System.EventHandler(this.selectAllToolStripMenuItem_Click); // // toolStripSeparator6 // this.toolStripSeparator6.Name = "toolStripSeparator6"; - this.toolStripSeparator6.Size = new System.Drawing.Size(190, 6); + this.toolStripSeparator6.Size = new System.Drawing.Size(242, 6); // // turnOffAllScriptsToolStripMenuItem // this.turnOffAllScriptsToolStripMenuItem.Image = global::BizHawk.MultiClient.Properties.Resources.Stop; this.turnOffAllScriptsToolStripMenuItem.Name = "turnOffAllScriptsToolStripMenuItem"; - this.turnOffAllScriptsToolStripMenuItem.Size = new System.Drawing.Size(193, 22); + this.turnOffAllScriptsToolStripMenuItem.Size = new System.Drawing.Size(245, 22); this.turnOffAllScriptsToolStripMenuItem.Text = "Turn Off All Scripts"; this.turnOffAllScriptsToolStripMenuItem.Click += new System.EventHandler(this.turnOffAllScriptsToolStripMenuItem_Click); // @@ -578,6 +580,14 @@ this.OutputMessages.TabIndex = 6; this.OutputMessages.Text = " "; // + // showRegisteredFunctionsToolStripMenuItem + // + this.showRegisteredFunctionsToolStripMenuItem.Name = "showRegisteredFunctionsToolStripMenuItem"; + this.showRegisteredFunctionsToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.F12))); + this.showRegisteredFunctionsToolStripMenuItem.Size = new System.Drawing.Size(245, 22); + this.showRegisteredFunctionsToolStripMenuItem.Text = "&Registered Functions..."; + this.showRegisteredFunctionsToolStripMenuItem.Click += new System.EventHandler(this.showRegisteredFunctionsToolStripMenuItem_Click); + // // toolStrip1 // this.toolStrip1.ClickThrough = true; @@ -830,5 +840,6 @@ private System.Windows.Forms.ToolStripMenuItem onlineDocumentationToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem newScriptToolStripMenuItem; private System.Windows.Forms.ToolStripButton newStripButton1; + private System.Windows.Forms.ToolStripMenuItem showRegisteredFunctionsToolStripMenuItem; } } \ No newline at end of file diff --git a/BizHawk.MultiClient/tools/LuaConsole.cs b/BizHawk.MultiClient/tools/LuaConsole.cs index 5ee1210110..efb0707b5c 100644 --- a/BizHawk.MultiClient/tools/LuaConsole.cs +++ b/BizHawk.MultiClient/tools/LuaConsole.cs @@ -1140,15 +1140,16 @@ namespace BizHawk.MultiClient scriptToolStripMenuItem.DropDownItems[8].Enabled = false; } - if (luaList.Count > 0) + if (luaList.Any()) scriptToolStripMenuItem.DropDownItems[9].Enabled = true; else scriptToolStripMenuItem.DropDownItems[9].Enabled = false; - if (luaRunning) - scriptToolStripMenuItem.DropDownItems[11].Enabled = true; - else - scriptToolStripMenuItem.DropDownItems[11].Enabled = false; + + turnOffAllScriptsToolStripMenuItem.Enabled = luaRunning; + + + showRegisteredFunctionsToolStripMenuItem.Enabled = Global.MainForm.LuaConsole1.LuaImp.RegisteredFunctions.Any(); } private void contextMenuStrip1_Opening(object sender, CancelEventArgs e) @@ -1291,5 +1292,14 @@ namespace BizHawk.MultiClient { NewScript(); } + + private void showRegisteredFunctionsToolStripMenuItem_Click(object sender, EventArgs e) + { + if (Global.MainForm.LuaConsole1.LuaImp.RegisteredFunctions.Any()) + { + LuaRegisteredFunctionsList dialog = new LuaRegisteredFunctionsList(); + dialog.ShowDialog(); + } + } } } diff --git a/BizHawk.MultiClient/tools/LuaConsole.resx b/BizHawk.MultiClient/tools/LuaConsole.resx index 814a1793ef..a56f1e045f 100644 --- a/BizHawk.MultiClient/tools/LuaConsole.resx +++ b/BizHawk.MultiClient/tools/LuaConsole.resx @@ -133,18 +133,17 @@ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 - YQUAAAAgY0hSTQAAeiYAAICEAAD6AAAAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAlpJREFUOE+tk21I - k1EYhif0oyA0sqIQCix/+GcQFFH9CCmiUBTLLEjShJofVBgL2fxoU9Pp5ubUlS5rU9f8rCyjsA+pUCRC - TR1ppmVFUSlmhq78unrnQF1KGHTg/nEOz30993PO+7qJFrmUeiv2n+Mij+XLRLLYULdF2pxlEVIDcw0p - AsyxD5fmI/rQ94pqi26eOlsfuZj+7BgSm01QdA4ih7m73Yx9qGpavwatjPebqCzOprPt8YKQgzFagqL0 - BEjyEFWVaBkdLHMxT34uYNwWR9nVTEoL0zHlp2DMSeaSRk6eKt4VWm5WM/rVPNN5SjDTLQebZEHNA1wr - UvHjk3E6tsNcV62e1r3KLGqtKm6WplNpSsVqVFJsOM8VfSKFWjkGtcyZptSYzvC7XByx3zQoqCnTMvlG - CX1prnornPUmQJcUXsbSVhGK5bIOkcmQyveeTHiv4VZ5Nk33Nc6iuSO8CIfmECYa/bE/8ON1iRipJNh5 - F0V6Bd86lfQ1JlFj1TDVq4COKCegLVIwHmGiKRB7/V6G7+5koHozymgfYRy5E1CgTWKgXcZ1i5qWp0KS - rjgBcAJawph6FszYk/2M1O1isGYLX8p9ab6wgqP+3rMvYciS01GfzA1LFvQkQ6sQ9/khxhoCGHnox1Dt - NvorxXw0b8Km8UQh2cip6GOzgNyMeKqKM7HdjqFZJ5pRk2YJ9aql3EnxoCJxNaZ4Ly6e3UDY3O6OEXRp - 59ApTpIhiyDh9GHORAZyPHQPB/ZtZ/cOMVvFPvh6e7F+3SrWrHRnraf7Xz/xf/rJ/kvxb84I3U1y+9/W - AAAAAElFTkSuQmCC + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAJHSURBVDhPxZBdSNNhFMb/F110ZZEVhVBgeeHNICiiuggp + olAUyyxI0oSaH1QYC3N+tKnp5ubm1JUua5uuqdNKMwr7kApFItTUkWZqVhSVYmao5Nevvy7UoYR3HXh4 + 4XCe33nOKyy3lAY7l9RWMo0O/raWXxEyo5spVYTNvOGyfIRPfW+ptOkXqaPl6T83hcRmExSdgzAz3NVm + YWyoYla/B+1M9JtxWLPpaH22JORIjI6gKAMB0jyEimIdo4OlbuaprwVMOOMovammpDADc34qppwUrmnl + 5Kni3aFlFg2j3y1z5mnRTJccnNIltQhwq0jFry+mOXNtpWZWDx1Z1NhV3C3JwGFOw25SYjVe5oYhiUKd + HKMmwQUrMWUw/CF3NnZvvYKqUh1TvUroS3fXe7HXkwidMngTS2t5KLbregSzMY2f3Wr4qKW6LJvGR1rX + 0MLor8OhKYTJBn/GHvvxrliCTBrsOqXIoOBHh5K+hmSq7FqmexTQHuUytkaKxuNMNgYyVneA4Qd7GKjc + hjLaRzxH7gIU6JIZaEvgtk1D8wsxSWecCDgNzWFMvwxm/PkhRmr3Mli1nW9lvjRdWc0Jf+/5jzRmyWmv + S+GOLQu6U6BFjPvqKOP1AYw88WOoZif9DgmfLVtxaj1RSLdwNvrkPCA3M54KqxrnvRia9MKcGrUrqFOt + 5H7qKsqT1mGO9+Lqhc2ELdw+U/r0i+gVZ8hMiCDx3DHORwZyKnQ/hw/uYt9uCTskPvh6e7Fp41rWr/Fg + g6eHO+A/lyD8ARfG3mk9fv1YAAAAAElFTkSuQmCC diff --git a/BizHawk.MultiClient/tools/LuaFunctionList.Designer.cs b/BizHawk.MultiClient/tools/LuaFunctionList.Designer.cs index f70f1f8f15..8e602d9e4b 100644 --- a/BizHawk.MultiClient/tools/LuaFunctionList.Designer.cs +++ b/BizHawk.MultiClient/tools/LuaFunctionList.Designer.cs @@ -41,7 +41,7 @@ // OK // this.OK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); - this.OK.Location = new System.Drawing.Point(423, 284); + this.OK.Location = new System.Drawing.Point(434, 284); this.OK.Name = "OK"; this.OK.Size = new System.Drawing.Size(75, 23); this.OK.TabIndex = 0; @@ -63,7 +63,7 @@ this.FunctionView.GridLines = true; this.FunctionView.Location = new System.Drawing.Point(12, 12); this.FunctionView.Name = "FunctionView"; - this.FunctionView.Size = new System.Drawing.Size(486, 266); + this.FunctionView.Size = new System.Drawing.Size(497, 266); this.FunctionView.TabIndex = 1; this.FunctionView.UseCompatibleStateImageBehavior = false; this.FunctionView.View = System.Windows.Forms.View.Details; @@ -79,27 +79,28 @@ // this.LibraryHead.Text = "Library"; this.LibraryHead.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; - this.LibraryHead.Width = 75; + this.LibraryHead.Width = 85; // // LibraryName // this.LibraryName.Text = "Name"; - this.LibraryName.Width = 135; + this.LibraryName.Width = 131; // // LibraryParameters // this.LibraryParameters.Text = "Parameters"; - this.LibraryParameters.Width = 210; + this.LibraryParameters.Width = 217; // // LuaFunctionList // this.AcceptButton = this.OK; this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(510, 319); + this.ClientSize = new System.Drawing.Size(521, 319); this.Controls.Add(this.FunctionView); this.Controls.Add(this.OK); this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimumSize = new System.Drawing.Size(200, 50); this.Name = "LuaFunctionList"; this.Text = "Lua Functions"; this.Load += new System.EventHandler(this.LuaFunctionList_Load); diff --git a/BizHawk.MultiClient/tools/LuaRegisteredFunctionsList.Designer.cs b/BizHawk.MultiClient/tools/LuaRegisteredFunctionsList.Designer.cs new file mode 100644 index 0000000000..6bf480b9f3 --- /dev/null +++ b/BizHawk.MultiClient/tools/LuaRegisteredFunctionsList.Designer.cs @@ -0,0 +1,111 @@ +namespace BizHawk.MultiClient +{ + partial class LuaRegisteredFunctionsList + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LuaRegisteredFunctionsList)); + this.FunctionView = new System.Windows.Forms.ListView(); + this.FunctionsEvent = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.FunctionsName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.FunctionsGUID = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader())); + this.OK = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // FunctionView + // + this.FunctionView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.FunctionView.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] { + this.FunctionsEvent, + this.FunctionsName, + this.FunctionsGUID}); + this.FunctionView.FullRowSelect = true; + this.FunctionView.GridLines = true; + this.FunctionView.Location = new System.Drawing.Point(12, 12); + this.FunctionView.Name = "FunctionView"; + this.FunctionView.Size = new System.Drawing.Size(498, 266); + this.FunctionView.TabIndex = 3; + this.FunctionView.UseCompatibleStateImageBehavior = false; + this.FunctionView.View = System.Windows.Forms.View.Details; + // + // FunctionsEvent + // + this.FunctionsEvent.Text = "Event"; + this.FunctionsEvent.TextAlign = System.Windows.Forms.HorizontalAlignment.Right; + this.FunctionsEvent.Width = 111; + // + // FunctionsName + // + this.FunctionsName.Text = "Name"; + this.FunctionsName.Width = 99; + // + // FunctionsGUID + // + this.FunctionsGUID.Text = "Guid"; + this.FunctionsGUID.Width = 284; + // + // OK + // + this.OK.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); + this.OK.DialogResult = System.Windows.Forms.DialogResult.Cancel; + this.OK.Location = new System.Drawing.Point(435, 284); + this.OK.Name = "OK"; + this.OK.Size = new System.Drawing.Size(75, 23); + this.OK.TabIndex = 2; + this.OK.Text = "&Ok"; + this.OK.UseVisualStyleBackColor = true; + this.OK.Click += new System.EventHandler(this.OK_Click); + // + // LuaRegisteredFunctionsList + // + this.AcceptButton = this.OK; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.CancelButton = this.OK; + this.ClientSize = new System.Drawing.Size(521, 319); + this.Controls.Add(this.FunctionView); + this.Controls.Add(this.OK); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.MinimumSize = new System.Drawing.Size(200, 50); + this.Name = "LuaRegisteredFunctionsList"; + this.Text = "Actively Registered Functions"; + this.Load += new System.EventHandler(this.LuaRegisteredFunctionsList_Load); + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.ListView FunctionView; + private System.Windows.Forms.ColumnHeader FunctionsName; + private System.Windows.Forms.ColumnHeader FunctionsEvent; + private System.Windows.Forms.ColumnHeader FunctionsGUID; + private System.Windows.Forms.Button OK; + } +} \ No newline at end of file diff --git a/BizHawk.MultiClient/tools/LuaRegisteredFunctionsList.cs b/BizHawk.MultiClient/tools/LuaRegisteredFunctionsList.cs new file mode 100644 index 0000000000..cca517f26d --- /dev/null +++ b/BizHawk.MultiClient/tools/LuaRegisteredFunctionsList.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace BizHawk.MultiClient +{ + public partial class LuaRegisteredFunctionsList : Form + { + public LuaRegisteredFunctionsList() + { + InitializeComponent(); + } + + private void LuaRegisteredFunctionsList_Load(object sender, EventArgs e) + { + PopulateListView(); + } + + private void OK_Click(object sender, EventArgs e) + { + Close(); + } + + private void PopulateListView() + { + FunctionView.Items.Clear(); + + List nlfs = Global.MainForm.LuaConsole1.LuaImp.RegisteredFunctions.OrderBy(x => x.Event).ThenBy(x => x.Name).ToList(); + foreach (NamedLuaFunction nlf in nlfs) + { + ListViewItem item = new ListViewItem { Text = nlf.Event }; + item.SubItems.Add(nlf.Name); + item.SubItems.Add(nlf.GUID.ToString()); + FunctionView.Items.Add(item); + } + } + } +} diff --git a/BizHawk.MultiClient/tools/LuaRegisteredFunctionsList.resx b/BizHawk.MultiClient/tools/LuaRegisteredFunctionsList.resx new file mode 100644 index 0000000000..9b4e47966b --- /dev/null +++ b/BizHawk.MultiClient/tools/LuaRegisteredFunctionsList.resx @@ -0,0 +1,518 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + AAABAAgAICAQAAAAAADoAgAAhgAAABAQEAAAAAAAKAEAAG4DAAAwMAAAAQAIAKgOAACWBAAAICAAAAEA + CACoCAAAPhMAABAQAAABAAgAaAUAAOYbAAAwMAAAAQAgAKglAABOIQAAICAAAAEAIACoEAAA9kYAABAQ + AAABACAAaAQAAJ5XAAAoAAAAIAAAAEAAAAABAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAAAAAAA//8A/wAAAP8A/wD//wAA////AKqq + AAAAAAAAAAAAAAAKqqqqp4iIiIiIiIiIiIiAgKqqqn//////////////+AgKqqp///////////////gI + Cqqqf/AAAA/////////4CAqqqn//////////////+AgKqqp/8AAAD/////////gICqqqf/////////// + ///4CAqqqn//////////////+AgKqqp/8AAAAAAAAAAAD/gICqqqf//////////////4CAqqqn/wAAAA + AAAAAAAP+AgKqqp///////////////gICqqqf/AAAAAAAAAAAA/4CAqqqn//////////////+AgKqqp/ + 8AAAAAAAAAAAD/gICqqqf//////////////4CAqqqn//////////////+AgKqqp/8AAAD/////////gI + Cqqqf//////////////4CAqqqn//////////////+AgKqqp///////////////gICqqqf/AAAA////// + ///4CAqqqn//////////////+AgKqqp/8AAAD////w8AD/gICqqqf//////////////4CAqqqn////// + ////////+AgKqqp///////////////gICqqqfw/w/w/w/w/w/w/3CAqqqn8P8P8P8P8P8P8P9wgKqqqn + 939393939393939wqqqqqgCgCgCgCgCgCgCgqqqq8AAAH+AAAA/AAAAHwAAAB8AAAAfAAAAHwAAAB8AA + AAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AA + AAfAAAAHwAAAB8AAAAfAAAAHwAAAB8AAAAfAAAAH4AAAD/JJJL8oAAAAEAAAACAAAAABAAQAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAAA + AAAA//8A/wAAAP8A/wD//wAA////AKAAAAAAAKqqeIiIiIiICqp///////gKqn//////+Aqqf/AAAA/4 + Cqp///////gKqn/wAAAP+Aqqf//////4Cqp/8AAAD/gKqn//////+Aqqf/AA8A/4Cqp///////gKqn// + ////+Aqqfw8PDw8PCqqg9/f39/CqqqoKCgoKCqqqgA///wAH//8AB///AAcKqgAH8AAABwAAAAcADwAH + CqoAB///AAf//wAH//8ABwqqAAfwAAAHAACADwAP1V8KqigAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA////AJKPngC8uMEAcWd5AI+GlgBsXG0AAAAAAJ6SngC2qbMAlHeEAI5q + dgCKY28Al2RuAL+jqQCRV2EAq3h/AK19gwC+nKAAy6WoAL2GiQDDl5kAt15eALliYgC9bGwAv29vAMB0 + dADAd3cAwXh4AL54eADGiIgAzZCQANSengDPmpoA2qysANOnpwDbrq4Aw56eAM2npwDguroAyKenAOK+ + vgDmxsYA5cXFALCZmQDq0dEA8d/fAPXo6AD05+cA9uvrAPjv7wDW0dEA2q2sANqurQDhvbwA1qakAOC8 + ugDPqqYA7tvZAO/e3ADMraUA9u3qAPXs6QDIsKQAxbOkABAQDwDFxbsAtratAGpqZQDHx74A1tbOAE1N + SgA+PjwAPT07AB8fHgBtbWoAICAfAMzMxwC7u7YAubm0AKSkoACbm5cAfX16AHx8eQCAgH0AXl5cAC4u + LQC+vrsAvLy5AJ6emwB/f30Afn58AH19ewBvb20APz8+AD4+PQD9/foA/Pz5AOzs6QCenpwAjY2LAISE + ggCBgX8AT09OAE1NTAD9/fsAvr68AL29uwB/f34Ad3d2AJ6enQDw8eIA8fLkAPDx4wDy8+YA8fLlAPDx + 5ADn6NwA8vPnAPP06QD09esA8/TqANXWzQD09ewAt7iwALO0rADV1s4A9vfvAPX27gC4ubIAtrewAMnK + wwD5+vMA+PnyAPf48QD29/AA8vToAPL06QCYmZMAo6SeAJmalAC7vLYA09TOAMjJwwDHyMIA+fr0APj5 + 8wD3+PIA9vfxAOnq5ADn6OIA5ObcAPT27ADz9esAent2AKuspwCkpaAAu7y3ALm6tQD6+/YA+fr1ANrb + 1gDc3tUA9PbtAOXn3gBMTUkAtriwAHx9eQB6e3cAjI2JAIuMiAC7vLgAubq2AKusqAD7/PgA+vv3ANvc + 2AC3ubIAXV5bAFxdWgC8vboAu7y5AKytqgCdnpsA+/z5AB4fHQAtLiwAPj89AD0+PABeX10A+vz4AH1+ + fAD9/vwAuLq3AP7//gD9/v0A3d7dAAi1zgALutIAJrjOAACz0gAAss8AHqnBAAymxgANpMQALp20AD6s + wgAqnbcALpmyADWnwAAAm8UAAJnEAACcxAAQo8kAAI25AAyTuwBBi6EAXqK2AEulwwBKj6YAaK/HAGmj + uwBWiqAAaKK9AH2nuQCIoq4ASoOfAGOLngBfhJcAXICSAE6FowBqlKoAXH2QAJOptwB4i5wAm6i5AFZk + fABWXHYAf4GUAKurtwD+/v4A09PTAM/PzwC/v78Ar6+vAH9/fwBycnIAcXFxAHBwcABqamoAaGhoAGZm + ZgBAQEAAPz8/AC8vLwAAAAAABwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH + BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH + BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwf4+Pj4BwcH + BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHB/v7+/v7+Pj4+Pj4+AcHBwcHBwcH + BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHHSZvcXBzdUV9i1Rb+vf4+Pj4+PgHBwcHBwcHBwcHBwcH + BwcHBwcHBwcHBwcHBwcHHSNxdHNycnZ2iHd5maKDm5xmWvr2+Pj4+AcHBwcHBwcHBwcHBwcHBwcHBwcH + BwcHHTxxc3JydnaIiXmZmXh7o4CAf3+OTVBZZW35+AcHBwcHBwcHBwcHBwcHBwcHBwcHGzxzc3JCQ4iJ + eZmZeHijgIB/f4eGk4SEkZ+vwfgHBwcHBwcHBwcHBwcHBwcHBwcHGyNzcnJEugAAAEmKeKOjgH9/h5ST + koSRoK++8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyNycnZ2iHl5l3xGo6OAgH+Hh5OFhJGRr6++8fgHBwcH + BwcHBwcHBwcHBwcHBwcHG0BydnaId3mZmXiYo4CAf4eHk5OEhJGfr76u8fgHBwcHBwcHBwcHBwcHBwcH + BwcHGyN2doi5SUmlmpqxgIB/f4eGk4SEkZ+vvr5h8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyN2iIh6gqaK + mqixgH9/h5STkoSRoK++vmFh8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx2iHl5mZl4o6OAgH+Hh5OFhJGR + r6++uGFg8fgHBwcHBwcHBwcHBwcHBwcHBwcHG0CId3mZmXiYo4CAf4eHk5OEkZGfr764YWBp8fgHBwcH + BwcHBwcHBwcHBwcHBwcHGyOJeZmZeHujgIB/f4eGk4SEkZ+vvq5hYGDA8fgHBwcHBwcHBwcHBwcHBwcH + BwcHGyN5eZl4eKOjgH9/h5STkoSRoK++vmFhYMDD8fgHBwcHBwcHBwcHBwcHBwcHBwcHG0B5mX6amoyB + kH+Hh5OFhJGgr6++YWFgacMB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOZmUaaqEe8SgAASF+yUqm1WL64 + YWBpw8IB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOZeHujgIB/f4eWrE6pUlVe/gAATGPD8AEB8fgHBwcH + BwcHBwcHBwcHBwcHBwcHGzx4eKOxgH9/h5STkoSRoK++vmFhasTDAQEB8fgHBwcHBwcHBwcHBwcHBwcH + BwcHGzx4o6RWAABKSGhTUq2dsK++YWFgacMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOYo4CAf4eP + nlFSUrteQQAAXl5d9fMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOjgIB/f4eGk4SEkZ+vvq5iV2r1 + 9fMBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzyjgH9ISLNTp42doa++vmFhYMDDAQEBAQEB8fgHBwcH + BwcHBwcHBwcHBwcHBwcHGyOAf39PT6qnS7u7QQAA/l5nbPX08/IBAQEB8fgHBwcHBwcHBwcHBwcHBwcH + BwcHGyOAf4eHk4WEkZGvr764a1du9fX8/PgBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx/f4eGk4SE + kZ+vvq5hYGDD8AEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGzx/h5SThISRoK++vmFhYMDDAQEB + AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOHlJOShJGgr76+YWFgwMMBAQEBAQEBAQEB8fgHBwcH + BwcHBwcHBwcHBwcHBwcHGzmHk4WEkZGvr764YWBpw8IBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcH + BwcHG0CTk6m7u7u/v7dhYGDD8AEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOThJWdq7a/ + v2NhYMDDAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOShJGgr76+YWFgwMMBAQEBAQEB + AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGz+EkZ1cZLS0a2Bpw8IBAQEBAQEBAQEBAQEB8fgHBwcH + BwcHBwcHBwcHBwcHBwcHGzmEkbW/vV5e/v3D8AEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcH + BwcHGyORn6++vmFgYMDDAQEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOgr76+YWFg + wMMBAQEBAQEBAQEBAQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOvFQg+YWA6NcIBAQEBAQEBAQEB + AQEBAQEB8fgHBwcHBwcHBwcHBwcHBwcHBwcHGyOvD9PiPWka1uYuASTs3zABLxADMgEBJy8B8fgHBwcH + BwcHBwcHBwcHBwcHBwcHGyE4NwLLNDs279QOASsE1QUBLQbS7gEt7dcJ8fgHBwcHBwcHBwcHBwcHBwcH + BwcHHBcWFwzIGBkZGcgKICAg0eMpKSLc2yoxE9reM/gHBwcHBwcHBwcHBwcHBwcHBwcHHevgKOrFEgsf + FMkNFxcWzeUWFxfo0BkZGeTPLAcHBwcHBwcHBwcHBwcHBwcHBwcHBwfZx8bZB9nOytkHzN3h2Qfn6SXZ + B9kRHtgHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH2dkHBwfZ2QcHB9nZBwcH2dkHBwfZ2QcHBwcHBwcH + BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH + BwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcH////////AAD///////8AAP// + /////wAA/+H/////AAD/wAP///8AAP+AAAf//wAA/4AAAD//AAD/gAAAB/8AAP+AAAAD/wAA/4AAAAP/ + AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+A + AAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/ + AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+A + AAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/ + AAD/gAAAA/8AAP+AAAAD/wAA/4AAAAP/AAD/gAAAB/8AAP/hCEIf/wAA//Oc5z//AAD///////8AAP// + /////wAAKAAAACAAAABAAAAAAQAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AioWTAAAA + AADo5egAtqmzAIFsewCWfYoAj216ALuboQCtfYMAvJeaANnHyAC9hokAv29vAMF0dADCd3cAyIyMAMmP + jwDQlZUAyZCQANCXlwDSm5sA0ZubAOrR0QDv3NwA8d/fAPXo6AD68/MA+/f3AObMygDozswA8ObjAPDl + 4QDw5uIA7+XgAO7k3wDt494A7eLcAOzh2gDs4tsA7OLaAOvh2QDq39UA6uDXAOrg1gDq4dgA6d/UAOnf + 0wCZmZMAenp1AIqKhQBra2cAe3t3AGxsaQCampYAfX16AHx8eQC7u7cA29vXAL29ugC8vLkAbW1rAPz8 + +QD7+/gA7e3qAMzMyQCdnZsAjY2LAP39+wD8/PoAvb27AK6urAB/f34Afn59AG9vbgD///4A/v79APLz + 5QDx8uQA8vPmAPP06QDl5twA5OXbANDRyAD19uwA9PXrAPP06gDW184A9fbtALe4sAD29+8A9fbuAHl6 + cwDy9OcAt7ixAPf48QD29/AA8vToAHl6dADy9OkAysvFAPn69AD4+fMA9/jyAPb38QBqa2YAeXp1ALu8 + twD6+/YA+fr1AMfJwAB7fHgA+/z4APr79wDb3NgAbG1qAHx9egB7fHkAjI2KALy9ugCsraoAnJ2aAP3+ + +wD8/foAy8zJAHV2dAD9/vwAfn9+AP7//gD9/v0A3d7dAEnM2wAcwNUADrXPAA6uyQAPrsoAPMHWADys + vwBKv9QAF6K9ACywygBjvM8AAJ7BABmUuAArpMUAM5ezAFSRogBHosAAXqK2AFOOoAAxiqkAUJiyAGmg + tABAiqkAWpKqAF+ElwCKorIAQWiGAHeDkAC1wc4ArrjDAN/f3wCfn58Aj4+PAH9/fwBwcHAAb29vAGtr + awAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMDAwMD + AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD + A6amfqampgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMUME9PVFRvS0tLS6imAwMDAwMDAwMDAwMDAwMD + AwMDAxQvT1BQYlFXVlZZVGWmp6enpwMDAwMDAwMDAwMDAwMDEitOXWpjMjRWWVlhaWhnVGVlpgMDAwMD + AwMDAwMDAwMSLVBeYldXVlVZW2FoZ2Ztcj+mAwMDAwMDAwMDAwMDAxItXmNrMjQxWVthaGhmbnJxP6YD + AwMDAwMDAwMDAwMDEixiUVdWVllcYWBoZm5yQD9FpgMDAwMDAwMDAwMDAwMSLmRXVlZZWWFpaGdmbXI/ + fH+mAwMDAwMDAwMDAwMDAxIuV1dWVVlbYWhnZm1yP0Z/TaYDAwMDAwMDAwMDAwMDEipTWlhZW2FoaGZu + cnE/f00BpgMDAwMDAwMDAwMDAwMSKlJfMzU2djk+OHp4R0V/AQGmAwMDAwMDAwMDAwMDAxInVllcYWlo + Z2ZyQkdISUwBAaYDAwMDAwMDAwMDAwMDEilVNTZwdnQ4dz1HQX+BAQEBpgMDAwMDAwMDAwMDAwMSKFlb + YWhoZm5zPEdJpaaiAQGmAwMDAwMDAwMDAwMDAxImXDd2dHU4eXhHe38BAQEBAaYDAwMDAwMDAwMDAwMD + EiZhaWhnZnJ4R0hJpaajAQEBpgMDAwMDAwMDAwMDAwMSJWFoZ2Ztcj98f4EBAQEBAQGmAwMDAwMDAwMD + AwMDAxIlaGhmbXI/P39NAQEBAQEBAaYDAwMDAwMDAwMDAwMDEiRoOmx9cT97fwEBAQEBAQEBpgMDAwMD + AwMDAwMDAwMSJGZsPUNKgINMAQEBAQEBAQGmAwMDAwMDAwMDAwMDAxIjZjtyP3x/gQEBAQEBAQEBAaYD + AwMDAwMDAwMDAwMDEiFtREpKSaQBAQEBAQEBAQEBpgMDAwMDAwMDAwMDAwMSInJxP3uCAQEBAQEBAQEB + AQGmAwMDAwMDAwMDAwMDAxIgAqFFDKAdHBgBARsBAQEBAaYDAwMDAwMDAwMDAwMDER6ekB+ekQUZnpsB + BpoanpQEpgMDAwMDAwMDAwMDAwMXDQ+PDg6cCBANlxMVkgkWmJ2mAwMDAwMDAwMDAwMDA5WIiZWVi4WV + lZmKnwuMBwqWkwMDAwMDAwMDAwMDAwMDA5WVAwOGlQMDhIYDjY4DhocDAwMDAwMDAwMDAwMDAwMDAwMD + AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD//////// + ///+B////AAf//wAAP/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wA + AH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAH/8AAB//AAAf/wAAP/+Zkn///////// + //8oAAAAEAAAACAAAAABAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wCSj54AvLjBAHFn + eQCPhpYAbFxtAAAAAACekp4AtqmzAJR3hACOanYAimNvAJdkbgC/o6kAkVdhAKt4fwCtfYMAvpygAMul + qAC9hokAw5eZALdeXgC5YmIAvWxsAL9vbwDAdHQAwHd3AMF4eAC+eHgAxoiIAM2QkADUnp4Az5qaANqs + rADTp6cA266uAMOengDNp6cA4Lq6AMinpwDivr4A5sbGAOXFxQCwmZkA6tHRAPHf3wD16OgA9OfnAPbr + 6wD47+8A1tHRANqtrADarq0A4b28ANampADgvLoAz6qmAO7b2QDv3twAzK2lAPbt6gD17OkAyLCkAMWz + pAAQEA8AxcW7ALa2rQBqamUAx8e+ANbWzgBNTUoAPj48AD09OwAfHx4AbW1qACAgHwDMzMcAu7u2ALm5 + tACkpKAAm5uXAH19egB8fHkAgIB9AF5eXAAuLi0Avr67ALy8uQCenpsAf399AH5+fAB9fXsAb29tAD8/ + PgA+Pj0A/f36APz8+QDs7OkAnp6cAI2NiwCEhIIAgYF/AE9PTgBNTUwA/f37AL6+vAC9vbsAf39+AHd3 + dgCenp0A8PHiAPHy5ADw8eMA8vPmAPHy5QDw8eQA5+jcAPLz5wDz9OkA9PXrAPP06gDV1s0A9PXsALe4 + sACztKwA1dbOAPb37wD19u4AuLmyALa3sADJysMA+frzAPj58gD3+PEA9vfwAPL06ADy9OkAmJmTAKOk + ngCZmpQAu7y2ANPUzgDIycMAx8jCAPn69AD4+fMA9/jyAPb38QDp6uQA5+jiAOTm3AD09uwA8/XrAHp7 + dgCrrKcApKWgALu8twC5urUA+vv2APn69QDa29YA3N7VAPT27QDl594ATE1JALa4sAB8fXkAent3AIyN + iQCLjIgAu7y4ALm6tgCrrKgA+/z4APr79wDb3NgAt7myAF1eWwBcXVoAvL26ALu8uQCsraoAnZ6bAPv8 + +QAeHx0ALS4sAD4/PQA9PjwAXl9dAPr8+AB9fnwA/f78ALi6twD+//4A/f79AN3e3QAItc4AC7rSACa4 + zgAAs9IAALLPAB6pwQAMpsYADaTEAC6dtAA+rMIAKp23AC6ZsgA1p8AAAJvFAACZxAAAnMQAEKPJAACN + uQAMk7sAQYuhAF6itgBLpcMASo+mAGivxwBpo7sAVoqgAGiivQB9p7kAiKKuAEqDnwBji54AX4SXAFyA + kgBOhaMAapSqAFx9kACTqbcAeIucAJuouQBWZHwAVlx2AH+BlACrq7cA/v7+ANPT0wDPz88Av7+/AK+v + rwB/f38AcnJyAHFxcQBwcHAAampqAGhoaABmZmYAQEBAAD8/PwAvLy8AAAAAAAcHBwcHBwcHBwcHBwcH + BwcHBwddXV0HBwcHBwcHBwcHBwcbg4ODXfltXQcHBwcHBwcHG0Vyd5l7g/NdXQcHBwcHBxpFdltrmIav + aQH4BwcHBwcaRYmJiZiGr2kB+AcHBwcHG0WIW1tbW2sBAfgHBwcHBxtFcneJmIavaQH4BwcHBwcaRXZb + W1tbawEB+AcHBwcHGkWJiYmYhq9pAfgHBwcHBxtFiL+/v7Sgw8L4BwcHBwcbRYmJiZmUvrjC+AcHBwcH + G0WJYpmjlL7Dw/gHBwcHBx1F7GLsYuy+7PD4BwcHBwcaHBzs4O4n5wPk+AcHBwcHB9rO4tjO5M4E3gcH + Bwf//wMD4/8SLMA/V1bAD1xhwAdmbsAHP0XABwMDwAcDA8AHAwPABxIuwAdWVsAHYWnAB2ZtwAd8f8AH + AwPgDwMDKAAAADAAAABgAAAAAQAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAADAAA + ABMAAAAQAAAACgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAQAAAAOAAAAFMAAABQAAAAQwAAADQAAAArAAAAJAAAAB0AAAAWAAAADgAAAAcAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAASLbm5hpaWbu2ZmYL1UVFC4AAAAmQAAAJEAAACGAAAAeQAAAGsAAABcAAAATAAA + AD4AAAAyAAAAKQAAACIAAAAcAAAAFQAAAA4AAAAHAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABXJn5/q8PHi//Dx4//x8uT/8fLl/+fo2/vDw7nuqqui45GS + i9ZTU0+8Q0NArwAAAJcAAACOAAAAgwAAAHYAAABoAAAAWwAAAEwAAAA+AAAAMQAAACgAAAAhAAAAGQAA + ABMAAAANAAAABgAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAI5OTn3Tp6f/8PHj//Dx5P/x8uX/8vPm//Lz + 5v/y8+f/8vPn//L06P/z9On/8/Tq//P16//b3dT3xca+7Z6fmd2SlI7WVFRRvEREQq8AAACXAAAAjQAA + AIAAAABzAAAAZAAAAFYAAABJAAAAOwAAAC4AAAAaAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALtxcfPMraX/8PHj//Hy + 5f/y8+b/8vPm//Lz5//y8+f/8vTo//L06f/z9Or/8/Xr//P16//09ev/9PXs//T27f/19u7/9fbu//b3 + 7//29+//0dLM88jIw+2Tk4/Yh4eEz1ZWVLowMC+oAAAAlQAAAIUAAABTAAAAFwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 + d//MraX/8fLl//Hy5f/y8+b/xcW7/7a2rf/y9Oj/8vTp//P06v/z9ev/8/Xr//T16//09ev/9Pbt//X2 + 7v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3/6+xruIAAAB0AAAAIgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMB3d//Tp6f/8fLl//Lz5v/y8+b/ampl/y0uLP8AAAD/AAAA/wAAAP89PTv/mJmT//T1 + 6//09u3/9Pbt//X27v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4/8rM + yOwAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vPm//Lz5v/y8+f/8vPn//L06P/z9Or/8/Tq/+Tm + 3P+3uLD/1tbO//T27f/09u3/9fbu//X27v/29+//9vfw//b38P/3+PL/+Pny//n68//5+vT/+fr0//r7 + 9//6+/f/+vz4//Dx7voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/8vPm//Lz5//y8+f/8vTo//P0 + 6f/z9Or/8/Xr//P16//09ev/9Pbs//T27f/19u7/9fbu//b37//29/D/9vfw//f48v/3+PL/+frz//n6 + 8//5+vT/+vv2//r79//6/Pj/+/z4/+bs4/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vPn//Lz + 5//y9Oj/Hh8d/z09O/89PTv/TE1J/3p7dv96e3b/t7my//X27v/19u7/9vfv//b37//29/D/9/jx//f4 + 8v/5+vP/+frz//n69P/6+/b/+vv3//r8+P/6/Pj//Pz5/+7w6/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 + d//Tp6f/8vPn//L06P/y9Oj/1dbN/7a3sP+2uLD/mJmT/3p7dv96e3f/t7my//X27v/29+//9vfv//b3 + 8P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4//r8+P/8/Pn//Pz5//Hx7/oAAAB3AAAAIwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMB3d//MraX/8vPn//L06P/z9Or/8/Tq//P16//z9ev/9PXr//T27f/09u3/9fbu//X2 + 7v/29+//9vfw//b38P/3+PL/+Pny//n68//5+vT/+fr0//r79//6+/f/+vz4//v8+f/8/Pn//f36/+ju + 5voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/8vTo//P06f/z9Or/8/Xr//P16//09ev/9Pbs//T2 + 7f/19u7/9fbu//b37//29/D/9vfw//f48v/3+PL/+frz//n69P/5+vT/+vv2//r79//6/Pj/+/z5//z8 + +f/9/fr//f37/+7x7voAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8vTp//P06v/z9ev/8/Xr//T1 + 6//09ez/9Pbt//X27v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3//r8 + +P/7/Pj//Pz5//39+v/9/fr//f78//Hy8foAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8/Tq//P0 + 6v/z9ev/9PXr//T16//09u3/9Pbt//X27v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n6 + 9f/6+/f/+vz4//r8+P/8/Pn//Pz5//39+v/9/vz//f79/+3x7foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 + d//Fs6T/8/Tq//P16//V1s7/ent2/3p7dv+ZmpT/uLmy/8fIwv/29+//9vfw//b38P/3+PL/+Pny//n6 + 8//5+vT/+fr1//r79//6+/f/+vz4//z8+f/8/Pn//f36//39+//9/v3//////+3x7foAAAB3AAAAIwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMB3d//Tp6f/8/Xr//P16//W1s7/ent2/3p7d/9NTUr/PT48/x8fHv8AAAD/AAAA/z4+ + PP8+Pj3/XV5b/319ev+MjYn/u7y5/7y8uf/6/Pj/+/z5//z8+f/9/fr//f37//3+/f/+//7///////Pz + 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/8/Xr//T16//09ez/9Pbt//X27v/19u7/9vfv//b3 + 7//29/D/5+ji/7m6tv+7u7b/jI2J/319ev9eXlz/Pz8+/y8vL/8AAAD/AAAA/yAgH/+enpz//f79//7+ + /v///////////+/y7/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9PXr//T16//09u3/t7my//X2 + 7v/29+//9vfv//b38P/29/H/9/jy//j58//5+vP/+fr0//n69f/6+/f/+vz4//r8+P/8/Pn//Pz5/76+ + vP/d3t3//f79/////////////////+jv6PoAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9PXr//T2 + 7f/l597/Li4t/wAAAP8AAAD/Hx8e/z4+PP9NTUz/fHx5/319ev+rrKj/u7y3/9vc2P/6+/f/+vz4//z8 + +f/8/Pn//f36//39+//9/v3///////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 + d//Tp6f/9Pbs//T27f/19u7/9fbu//b37//29/D/yMnD/7m6tf+bm5f/fX16/319ev8+Pz3/Pz8+/xAQ + D/8AAAD/AAAA/z8/Pv8/Pz7/b29t/39/f/+/v7////////////////////////Pz8/oAAAB3AAAAIwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMB3d//Tp6f/9Pbt//X27v/19u7/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n6 + 9P/6+/b/+vv3//r8+P/7/Pj/7Ozp/76+u/++vrz/f39//39/f/+/v7///////////////////////+fu + 5/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//MraX/9Pbt//X27v/29+//Pj48/z4+PP9cXVr/fHx5/3x9 + ef+7vLb/u7y3/9rb1v/6+/f/+vz4//r8+P/8/Pn//Pz5//39+v/9/vz//f79//////////////////// + //////////////Dy8PoAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9fbu//b37//29+//ubm0/7m5 + tP+LjIj/fH15/21tav8+Pz3/Pj89/xAQD/8AAAD/AAAA/y8vL/8/Pz7/T09O/39/fv9/f3//r6+v/7+/ + v//Pz8////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9fbu//b3 + 7//29/D/9vfw//f48v/4+fL/+frz//n69P/5+vT/+vv3//r79//6/Pj/+/z5/729u/++vrv/np6d/39/ + f/9/f3//QEBA/0BAQP9wcHD//////////////////////+Xu5foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 + d//MraX/9vfv//b37//29/D/9/jx//f48v/5+vP/+frz//n69P/6+/b/+vv3//r8+P/7/Pj//Pz5//39 + +v/9/fr//f79//7+/v///////////////////////////////////////////+/y7/oAAAB3AAAAIwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMB3d//MraX/9vfv//b38P/29/H/9/jy//n68//5+vP/+fr0//n69f/6+/f/+vz4//r8 + +P/8/Pn//Pz5//39+v/9/vz//f79//////////////////////////////////////////////////Pz + 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/9vfw//b38f/3+PL/+Pnz//n68//5+vT/+fr1//r7 + 9//6/Pj/+vz4//z8+f/8/Pn//f36//3+/P/9/v3///////////////////////////////////////// + /////////////+vw6/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pqqb/9vfw//f48v/4+fL/+frz//n6 + 9P/5+vT/+vv3//r79//6/Pj/+/z5//z8+f/9/fr//f37//3+/f/+//7///////////////////////// + /////////////////////////////+fu5/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Fs6T/9/jy//f4 + 8v+MjYn/Pj89/z4/Pf8+Pz3/fX58/31+fP+dnpv//Pz5//39+v/9/fr//f79//7+/v////////////// + //////////////////////////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 + d//Tp6f/9/jy//n68//p6uT/u7y3/7u8uP+srar/fX58/31+fP+enpz//Pz5//39+v/9/vz//f79//// + //////////////////////////////////////////////////////////////Pz8/oAAAB3AAAAIwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMB3d//Tp6f/+Pnz//n68//5+vT/+fr1//r79//6/Pj/+vz4//z8+f/8/Pn//f36//3+ + /P/9/v3//////////////////////////////////////////////////////////////////////+Pt + 4/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//IsKT/+frz//n69P+7vLf/fX17/42Ni/+8vbr/vL26/729 + u//9/fr//f37//3+/f/+//7///////////////////////////////////////////////////////// + //////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pqqb/+frz//n69P+7vLn/fX58/15f + Xf8/Pz7/Pz8+/y8vL/8/Pz///f79//7+/v////////////////////////////////////////////// + //////////////////////////////Pz8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/+fr0//r7 + 9v/6+/f/+vz4//r8+P/8/Pn//f36//39+v/9/vz//f79//////////////////////////////////// + /////////////////////////////////////////////+Xu5foAAAB3AAAAIwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3 + d//Tp6f/+fr1//r79//6/Pj/+vz4//z8+f/8/Pn//f36//3+/P/9/v3///////////////////////// + /////////////////////////////////////////////////////////////+/y7/oAAAB3AAAAIwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMB3d//Tp6f/+vv3/8OXmf+ekp7/9ezp//z8+f/9/fr/7tvZ/9qurf/+//7///////// + //////////////////////////////////////////////////////////////////////////////Pz + 8/oAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Tp6f/+vv3/5FXYf8AmcT/SoOf//bt6v/9/fv/wHR0/wCN + uf9OhaP/8d/f///////brq7/VmR8/2iivf/05+f///////Xo6P+reH//vLjB//jv7////////////+C6 + uv/16Oj//////87OzuwAAAB3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMB3d//Pmpr/4Ly6/9ampP+Sj57/DKbG/9qt + rP/v3tz/4b28/6urt/8AnMT/v6Op///////lxcX/cWd5/xCjyf+Phpb//////+rR0f9sXG3/AJvF/3+B + lP//////6tHR/1Zcdv8Mk7v/tqmz/8/Pz+sAAABvAAAAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMF4eP+5YmL/t15e/7li + Yv+KY2//ALPS/71sbP+/b2//v29v/79vb/8As9L/lHeE/9Senv/Unp7/1J6e/zWnwP9ji57/4r6+/+K+ + vv/arKz/aK/H/0qPpv/mxsb/9uvr/8ulqP9LpcP/Voqg/9HMzOUAAABQAAAAEwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANu4 + uIR9j6TFd6O287+amt1whJbxALPM97WPk+GOanb/zZCQ/72Gif8Ass//l2Ru/7liYv+5YmL/t15e/y6d + tP9cgJL/t15e/7liYv+5YmL/XH2Q/y6Zsv+/b2//v29v/79vb/9fhJf/JZu1+Yppaa0AAAAnAAAABQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAY5QhALXR/wCsxtkAt9D0AGuLoQAkNS4AqcfwAJGvwQCdueEAnrzrmZmZawCf + wfI+iafGWX2OtwC10f9mfY+1Woih5oKcrN26kJDeNaS8/0iOpu6jiZT0rX2D/8SEhPc8iJ74AHyXzgAA + AEEAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGKTMgCsxIUAcpdsAAAADwAAAAQAYpMyAK3KwgCa + urgARmlGAAAADAB2oWQAsc3wAK3L/wCAoqEAAAAZAHWdVwC10f8Ass3yAKfF8wAvRkYAfaOKALHM8QCB + na8AtdH/ADpYcAAAABkAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABjlCEAYJBEAEdqFwAA + AAQAAAABAI6xcwCnwbUAbo5hAAAADwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///////wAA////////AAD/wP////8AAP/AAf///wAA/4AAA/// + AAD/gAAAB/8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+A + AAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/ + AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+A + AAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/ + AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+AAAAB/wAA/4AAAAH/AAD/gAAAAf8AAP+A + AAAB/wAA/4AAAAH/AAD/wAAAA/8AAP/gAAAD/wAA////4Af/AAD///////8AACgAAAAgAAAAQAAAAAEA + IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAFAAAADQAAAA0AAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABQAAACAAAABDAAAASQAAADsAAAAwAAAAKAAAACEAAAAZAAAAEgAAAAsAAAAEAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAWo5qToFtbVaouLyyoAAAAlQAAAIwAAACAAAAAcwAAAGIAAABTAAAARgAA + ADgAAAAuAAAAJQAAAB8AAAAYAAAAEgAAAAsAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAKqGhovp39P/8fLk//Hy5P/y8+b/zs/F88PFu+2QkIvYdHVwyVRV + UbkZGRigAAAAlAAAAIoAAAB8AAAAbgAAAGEAAABTAAAARgAAACwAAAANAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxouL8+nf1P/x8uT/8vPm//Lz5v/y9Oj/8/Tp//P0 + 6v/09ev/9PXr//X27f/19u7/xsfB7rq7teiTlJDXd3h1yVZXVbkZGhmgAAAAcAAAACQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//6t/V//Lz5f95enP/amtm/3l6 + dP96enX/a2tn//T16//19u3/9fbt//b38P/29/H/9/jy//j58//5+vT/+vv2//r79/8AAACPAAAALwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//q4Nb/8vPm//L0 + 5//y9Oj/8/Tq//P06v/09ev/9fbs//X27f/29+//9vfw//f48v/4+fP/+fr0//r79v/6+/f//Pz5/wAA + AI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+rg + 1v/y9Of/eXp0/3l6df96enX/a2tn/5mZk//19u3/9vfv//b38P/3+PL/9/jy//n69P/5+vX/+vv3//v8 + +P/8/Pn/AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADJj4//6uDX//L06P/z9On/8/Tq//T16//09ev/9fbt//X27v/29/D/9/jx//f48v/5+vT/+fr1//r7 + 9//7+/j//Pz5//39+/8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMmPj//q4dj/8vTp//P06v/09ev/9PXr//X27f/19u3/9vfw//b38f/3+PL/+Pnz//n6 + 9P/6+/b/+vv3//z8+f/8/fr//f78/wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAyY+P/+rh2P/z9Or/8/Tq//T16//19uz/9fbt//b37//29/D/9/jy//j5 + 8//5+vT/+vv2//r79//8/Pn//Pz6//3+/P/+/v3/AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//6+HZ/+Tl2/+3uLD/1tfO//X27f/29+//9vfw//f4 + 8v/3+PL/+fr0//n69f/6+/f/+/z4//z8+f/9/vz//v79//////8AAACPAAAALwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//r4dn/5ebc/7e4sf+KioX/e3t3/2xs + af97fHn/fHx5/21ta/99fXr/nJ2a/7y9uv+9vbv//f37//3+/P///////////wAAAI8AAAAvAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+zh2v/09ev/9fbt//X2 + 7v/29/D/9vfx//f48v/4+fP/+fr0//r79//MzMn/vb27/66urP9/f37////+////////////AAAAjwAA + AC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//7OLa//X2 + 7P97e3f/bGxp/3t8eP97fHn/bG1q/319ev+MjYr/vLy5/729u//t7er//f78//7//v////////////// + //8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmP + j//s4tv/9fbt//b37//29/D/9/jy//f48v/5+vT/+fr1/9vc2P+9vbr/vb27/39/fv9/f3//cHBw/9/f + 3////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAyY+P/+3i3P/19u7/mpqW/3t8ef9sbWr/fH16/319ev+srar/vL26/729u//9/vv//f78//// + ////////////////////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAADJj4//7eLc//b38P/29/H/9/jy//j58//5+vT/+vv3/7y9uv+9vbv/rq6s/39/ + fv9/f3//cHBw/5+fn/////////////////8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//t497/9vfw//f48v/4+fP/+fr0//r79v/6+/f//Pz5//z9 + +v/9/vz//v/+/////////////////////////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+3j3v/3+PL/9/jy//n69P/6+/b/+vv3//z8 + +f/8/Pn//f78//7+/f//////////////////////////////////////AAAAjwAAAC8AAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADJj4//7uTf//f48v+7u7f/u7y3/8vM + yf/7/Pj//Pz5//3++//9/vz///////////////////////////////////////////8AAACPAAAALwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMmPj//u5N//+fr0/7u8 + t/+8vLn/nZ2b/35+ff9+f37/3d7d/////v///////////////////////////////////////////wAA + AI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyY+P/+/l + 4P/5+vT/29vX//r79//8/Pn//P36//3+/P/+//7///////////////////////////////////////// + ////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AADJj4//8OXh//r79v+NjYv/fn59/35+ff9/f37/j4+P//////////////////////////////////// + //////////////////8AAACPAAAALwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAMmPj//w5uL/+vv3//v8+P/8/Pn//f77//3+/f////////////////////////////// + /////////////////////////////wAAAI8AAAAvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAyY+P//Dm4/+KhZP/rrjD//39+//Zx8j/tcHO//v39//68/P/6tHR//// + ////////9ejo////////////////////////////AAAAjwAAAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADIjIz/5szK/0Fohv8ZlLj/6M7M/0Fohv8rpMX/tqmz/+/c + 3P9BaIb/WpKq//////+BbHv/QIqp//Hf3/9BaIb/R6LA/+jl6P8AAACDAAAAKQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAANGbm/+9hon/wXR0/wCewf+/b2//v29v/1+E + l/+PbXr/wnd3/72Gif8xiqn/0JWV/9CXl/8zl7P/u5uh/9Kbm/9QmLL/iqKy/wAAAGAAAAAYAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACpx/AyvtTyAK3EzhWV + tL41uM/lHMDV/1l6k8RFnrPzXJet6iuluutxfYv0soiL3xeivf+WfYr/rX2D/1OOoP8RZn63AAAAMQAA + AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGOUIQBg + kEQAR2oXAE50FQCWuHQAiKhaAAAADQCtx5MAt822AGaBRACWs2oAoL/TAJGxnAB9mmIAsczxAKnG8QAi + MzAAAAAMAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//////4P///8AB///AAAP/wA + AD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wA + AD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/8AAA//AAAP/wAAD/+AAA//gAAP/////8oAAAAEAAAACAA + AAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAIAAAAEkAAABTAAAARgAA + ADgAAAAuAAAAJQAAAB8AAAAXAAAADQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAD7Ggm6N/f3e3VFRPuRkZ + F6AAAACUAAAAigAAAHwAAABuAAAAXAAAADgAAAAQAAAAAAAAAAAAAAAAAAAAAMB3d//Oyrb/8vTp//L0 + 6f/z9ev/9PXs/8XGv+67u7bolJWR12xsarwAAABnAAAAHgAAAAAAAAAAAAAAAAAAAADAd3f/1My8//L0 + 6f9+fn3/vb27//T27P/3+PH/+vv3//39/P//////cHBw/wAAACMAAAAAAAAAAAAAAAAAAAAAwHd3/9nO + wf/y9On/8vTp//L06f/09uz/9/jx//r79//9/fz//////3BwcP8AAAAjAAAAAAAAAAAAAAAAAAAAAMB3 + d//Yyr//8vTp/35+ff9+fn3/fn59/35+ff+9vbv///////////9wcHD/AAAAIwAAAAAAAAAAAAAAAAAA + AADAd3f/1M2+//L06f/y9On/8vTp//T27P/3+PH/+vv3//39/P//////cHBw/wAAACMAAAAAAAAAAAAA + AAAAAAAAwHd3/9HQvv/y9On/fn59/35+ff9+fn3/fn59/729u////////////3BwcP8AAAAjAAAAAAAA + AAAAAAAAAAAAAMB3d//Vzb//8vTp//L06f/y9On/9Pbs//f48f/6+/f//f38//////9wcHD/AAAAIwAA + AAAAAAAAAAAAAAAAAADAd3f/1c6///L06f9+fn3/fn59/35+ff+9vbv/+vv3//39/P//////cHBw/wAA + ACMAAAAAAAAAAAAAAAAAAAAAwHd3/9bPwf/y9On/8vTp//L06f/09uz/9/jx//r79//9/fz//////3Bw + cP8AAAAjAAAAAAAAAAAAAAAAAAAAAMB3d//Qzbv/8vTp//L06f/y9On/9Pbs//f48f/6+/f//f38//// + //9wcHD/AAAAIwAAAAAAAAAAAAAAAAAAAADAd3f/4sbE/0Fohv/y9On/QWiG//T27P9BaIb/+vv3/0Fo + hv//////cHBw/wAAACIAAAAAAAAAAAAAAAAAAAAAz56ehMF3d//Bd3f/MGqQ/5GqvP9ueI3/07a5/26Q + qf+6tL7/XIKd/wAAAFgAAAAYAAAAAAAAAAAAAAAAAAAAAPf39yEnhq/RSr/U/zBqkP8Zb5TXSr/U/1p2 + jvJKv9T/bG2E/1yCnf8AAAAjAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABj + lCEAXYwjAFiFJQBfjkUAR2oXAAAABAAAAAEAAAAAAAAAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMAD + j//AA9b/wAPn/8ADdP/AA3X/wAN1/8ADZ//AA5P/wAPt//4D7/8= + + + \ No newline at end of file